/* ============================================================
   M² PRODUCTION | site.css
   Palette: ink #0E0E0E · pure white #FFFFFF · CNY red #DE2910
   Type: Archivo (grotesk, slim + tight) · Newsreader 300 (light serif)
   Register: division.global proportions. No gradients, no shadows,
   no rounded corners, no blue, nothing bold where slim will do.
   ============================================================ */

:root {
  --ink: #0E0E0E;
  --paper: #FFFFFF;
  --red: #DE2910;
  --fill: #FFFFFF;             /* title-fill colour · press F to flip white/red */
  --grotesk: 'Archivo', 'Helvetica Neue', Helvetica, Arial, sans-serif;
  --serif: 'Newsreader', 'Times New Roman', Times, serif;
  --ease: cubic-bezier(.645, .045, .355, 1);   /* division's curve */
  --pad-x: max(24px, 2.78vw);                  /* division's gutter */
}

* { margin: 0; padding: 0; box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
  font-family: var(--grotesk);
  font-weight: 500;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

html:has(body.page-ink)  { background: var(--ink); }
html:has(body.page-paper) { background: var(--paper); }
body.page-ink  { background: var(--ink);  color: var(--paper); }
body.page-paper { background: var(--paper); color: var(--ink); }

img, video { display: block; max-width: 100%; height: auto; }

a { color: inherit; text-decoration: none; }

button { font: inherit; color: inherit; background: none; border: 0; cursor: pointer; }

::selection { background: var(--red); color: var(--paper); }

/* ---- page transitions (quick + smooth, division curve) ----
   NOTE: no fill-mode here. A lingering transform on <body> would turn it
   into the containing block for every position:fixed element (cursor,
   lens, caption, chrome) and break them on scrolled pages. */
html.pt-ready body { animation: pageIn .42s var(--ease); }
@keyframes pageIn {
  from { opacity: 0; transform: translateY(12px); }
  to   { opacity: 1; transform: translateY(0); }
}
body.pt-out {
  opacity: 0;
  transform: translateY(-10px);
  transition: opacity .3s var(--ease), transform .3s var(--ease);
}
@media (prefers-reduced-motion: reduce) {
  html.pt-ready body { animation: none; }
  body.pt-out { transition: none; }
}

/* ---- film grain, ink pages only (analog flag, barely visible) ---- */
body.page-ink::after {
  content: '';
  position: fixed; inset: 0;
  z-index: 90;
  pointer-events: none;
  opacity: 0.035;
  background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/></filter><rect width='240' height='240' filter='url(%23n)'/></svg>");
  background-size: 240px 240px;
}
@media (prefers-reduced-motion: reduce) {
  body.page-ink::after { display: none; }
}

/* ============================================================
   CHROME · wordmark sized to division's logo, whisper nav
   ============================================================ */
.chrome {
  position: fixed;
  top: 0; left: 0; right: 0;
  z-index: 40;
  display: flex;
  align-items: center;
  justify-content: space-between;
  height: 78px;                    /* division header height */
  padding: 0 var(--pad-x);
  pointer-events: none;
}
.chrome > * { pointer-events: auto; }

.wordmark {
  font-family: var(--grotesk);
  font-weight: 640;
  font-variation-settings: 'wdth' 62;   /* division-style: narrow letterforms, packed tight */
  font-size: 27px;
  letter-spacing: 0.005em;
  text-transform: uppercase;
  white-space: nowrap;
  line-height: 1;
  display: flex;
  align-items: baseline;
}
.wm-m {
  letter-spacing: 0;
  display: inline-flex;
  align-items: baseline;
  perspective: 420px;              /* stage for the 3D ² */
}
.wm-2 {
  font-size: 0.55em;
  font-weight: 560;
  display: inline-block;
  margin-left: 0.03em;
  transform: translateY(-0.6em);
  transform-style: preserve-3d;
  animation: spin2 7.5s linear infinite;
}
@keyframes spin2 {
  from { transform: translateY(-0.6em) rotateY(0deg); }
  to   { transform: translateY(-0.6em) rotateY(360deg); }
}
@media (prefers-reduced-motion: reduce) {
  .wm-2 { animation: none; }
}
.wm-word { margin-left: 0.38em; }

.nav {
  display: flex;
  gap: 28px;
  font-size: 10px;                 /* division tab size */
  font-weight: 500;
  letter-spacing: 0.03em;          /* division tracking */
  text-transform: uppercase;
}
.page-ink  .nav a { color: rgba(255,255,255,0.55); }
.page-paper .nav a { color: rgba(14,14,14,0.55); }
.nav a { transition: color .3s var(--ease); }
.nav a:hover { color: inherit; }
.nav a.active,
.page-ink .nav a.active,
.page-paper .nav a.active { color: var(--red); }

/* the warp field: letters under the cursor swell and bend like glass
   is passing over them (see site.js). The letters carry the effect;
   the cursor stays a dot. */
.wl {
  display: inline-block;
  will-change: transform;
  transform-origin: 50% 60%;
}

/* mobile nav toggle (CSS-only, works without JS) */
.nav-toggle { position: absolute; opacity: 0; pointer-events: none; }
.nav-plus { display: none; }

/* MOBILE CHROME · division.global's register, taken from their live site:
   band one is the big wordmark, band two is the nav as FULL-WIDTH tabs,
   justified edge to edge, each band ruled. No hamburger, no overlay. */
@media (max-width: 740px) {
  .chrome {
    height: auto;
    flex-wrap: wrap;
    align-items: flex-start;
    padding: 0 20px;
    border-bottom: 1px solid rgba(128,128,128,0.35);
  }
  .page-ink  .chrome { background: var(--ink); }
  .page-paper .chrome { background: var(--paper); }
  .wordmark {
    font-size: 34px;
    flex: 1 0 100%;
    padding: 16px 0 12px;
    border-bottom: 1px solid rgba(128,128,128,0.35);
  }
  .nav-plus { display: none; }
  .nav {
    flex: 1 0 100%;
    display: flex;
    justify-content: space-between;
    gap: 0;
    padding: 15px 0 14px;
    font-size: 13px;
    font-weight: 500;
    letter-spacing: 0.05em;
  }
  .page-ink  .nav a { color: rgba(255,255,255,0.92); }
  .page-paper .nav a { color: rgba(14,14,14,0.92); }
}

/* ============================================================
   CUSTOM CURSOR · dot grows to ring, mix-blend-difference
   ============================================================ */
body.has-cursor, body.has-cursor a, body.has-cursor button, body.has-cursor label { cursor: none; }

.cursor {
  position: fixed;
  top: -100px; left: -100px;
  z-index: 100;
  width: 6px; height: 6px;
  margin: -3px 0 0 -3px;
  border-radius: 50%;
  pointer-events: none;
  display: flex;
  align-items: center;
  justify-content: center;
  transition: width 0.22s var(--ease), height 0.22s var(--ease), margin 0.22s var(--ease), background 0.22s var(--ease);
}
/* deterministic colours: ink on paper, white on ink (blend modes proved unreliable) */
.page-ink  .cursor { background: #fff; }
.page-paper .cursor { background: var(--ink); }
.cursor.is-ring {
  width: 34px; height: 34px;
  margin: -17px 0 0 -17px;
  background: transparent !important;
  border-radius: 50%;
}
.page-ink  .cursor.is-ring { border: 1px solid #fff; }
.page-paper .cursor.is-ring { border: 1px solid var(--ink); }
.cursor.is-hidden { display: none; }
.cursor-label {
  font-family: var(--grotesk);
  font-weight: 500;
  font-size: 7px;
  letter-spacing: 0.14em;
  user-select: none;
}
.page-ink  .cursor-label { color: #fff; }
.page-paper .cursor-label { color: var(--ink); }

/* ============================================================
   HOME · the reel: full-viewport blocks, hard edges,
   scroll snaps one film at a time (division's move)
   ============================================================ */
.home { height: 100dvh; overflow: hidden; }

.reel {
  height: 100dvh;
  overflow-y: auto;
  scroll-snap-type: y mandatory;
  scrollbar-width: none;
}
.reel::-webkit-scrollbar { display: none; }

.block {
  position: relative;
  height: 100dvh;
  scroll-snap-align: start;
  scroll-snap-stop: always;        /* one film per swipe, no skipping */
  overflow: hidden;
  background: var(--ink);
}

.block video {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
}
.block video.h { object-fit: cover; }
.block video.v { object-fit: contain; }
@media (max-width: 740px) {
  .block video.h { object-fit: contain; }
  .block video.v { object-fit: cover; }
}

/* overture: letterboxed collage, several frames at once */
.block-overture {
  display: flex;
  align-items: center;
  justify-content: center;
}
.overture-frame {
  height: min(68vh, 36vw);
  aspect-ratio: 2.35 / 1;
  display: flex;
  gap: min(0.8vw, 10px);
}
.overture-frame video {
  position: static;
  flex: 1 1 0;
  min-width: 0;
  height: 100%;
  object-fit: cover;
}
@media (max-width: 740px) {
  .overture-frame {
    height: auto;
    aspect-ratio: auto;
    flex-direction: column;
    width: min(74vw, 340px);
    gap: 10px;
  }
  .overture-frame video { height: calc(50dvh - 70px); width: 100%; }
  .overture-frame .ov-desk { display: none; }
}

/* ---- fixed caption, division register: big light serif,
       the title itself fills as the progress bar ---- */
.caption {
  position: fixed;
  left: var(--pad-x);
  right: var(--pad-x);
  bottom: 26px;
  z-index: 30;
  pointer-events: none;
  opacity: 1;
  transition: opacity .4s var(--ease);
}
.caption.is-hidden { opacity: 0; }

.film-title {
  position: relative;
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(36px, 5.2vw, 84px);
  letter-spacing: -0.01em;
  line-height: 1.02;
  font-variation-settings: 'opsz' 72;
}
.film-title .t-base { color: rgba(255,255,255,0.38); }
.film-title .t-fill {
  position: absolute;
  top: 0; left: 0;
  color: var(--fill);
  clip-path: inset(0 100% 0 0);
  /* no nowrap: the fill must break onto a second line exactly where the base does */
}
.credit {
  margin-top: 10px;
  font-family: var(--grotesk);
  font-weight: 500;
  font-size: 9.5px;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.5);
}

@media (max-width: 740px) {
  .caption { bottom: 22px; left: 20px; right: 20px; }
  /* division mobile: TimesNow-species 300 at exactly 34/34, -1% tracking,
     and the second line is serif at 40% white, not caps */
  .film-title { font-size: 34px; line-height: 34px; letter-spacing: -0.01em; }
  .credit {
    margin-top: 6px;
    font-family: var(--serif);
    font-weight: 300;
    font-size: 19px;
    letter-spacing: -0.01em;
    text-transform: none;
    color: rgba(255,255,255,0.4);
  }
}

/* ============================================================
   FILM · index rows + full-bleed viewer
   ============================================================ */
.film-index {
  min-height: 100dvh;
  display: flex;
  flex-direction: column;
  justify-content: center;
  padding: 120px var(--pad-x) 110px;
}

.rows { list-style: none; }

.row {
  position: relative;
  display: flex;
  align-items: baseline;
  gap: 26px;
  padding: 3.2vh 0;
  border-bottom: 1px solid rgba(255,255,255,0.10);
}
.rows li:first-child .row { border-top: 1px solid rgba(255,255,255,0.10); }

.row-index {
  font-family: var(--grotesk);
  font-weight: 500;
  font-size: 9.5px;
  letter-spacing: 0.03em;
  color: rgba(255,255,255,0.38);
  min-width: 26px;
}
.row-title {
  font-family: var(--grotesk);
  font-weight: 640;
  font-variation-settings: 'wdth' 62;   /* the division-logo cut, smaller */
  font-size: clamp(22px, 3.4vw, 46px);
  letter-spacing: 0.01em;
  text-transform: uppercase;
  line-height: 1.06;
  color: rgba(255,255,255,0.5);
  transition: color 0.3s var(--ease);
}
.row:hover .row-title { color: var(--paper); }
.row-credit {
  margin-left: auto;
  font-family: var(--grotesk);
  font-weight: 500;
  font-size: 9.5px;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.42);
  white-space: nowrap;
}

.row-preview {
  position: fixed;
  top: 50%; right: 12vw;
  width: clamp(150px, 17vw, 250px);
  height: auto;
  transform: translateY(-50%);
  opacity: 0;
  pointer-events: none;
  z-index: 1;
  transition: opacity 0.35s var(--ease);
}
.row:hover .row-preview { opacity: 0.85; }

.row-title, .row-index, .row-credit { position: relative; z-index: 2; }

/* MOBILE FILM INDEX · division's directors list: a bare serif column.
   No numbers, no rules, no thumbnails — just the titles, large and light. */
@media (max-width: 740px) {
  .film-index { padding: 110px 20px 80px; justify-content: flex-start; }
  .row { gap: 0; padding: 9px 0; border-bottom: 0; }
  .rows li:first-child .row { border-top: 0; }
  .row-index { display: none; }
  .row-credit { display: none; }
  .row-preview { display: none; }
  .row-title {
    font-family: var(--serif);
    font-weight: 300;
    font-variation-settings: 'opsz' 44;
    font-size: 30px;
    line-height: 1.1;
    letter-spacing: -0.01em;
    text-transform: none;
    color: rgba(255,255,255,0.92);
  }
}


/* ============================================================
   PHOTOGRAPHY · irregular editorial grid on pure white
   ============================================================ */
/* jenga cluster: tiles nearly touching, 10px of air proves they don't.
   masonry via 10px row units + dense flow: no voids, real interlock */
.photo-grid {
  display: grid;
  grid-template-columns: repeat(6, 1fr);
  grid-auto-rows: 10px;
  grid-auto-flow: dense;
  gap: 10px;
  padding: 130px var(--pad-x) 12vh;
  max-width: 1240px;
  margin: 0 auto;
}
.ph { position: relative; }
.ph img {
  width: 100%; height: 100%;
  object-fit: cover;
  transition: transform 0.9s var(--ease);
}
/* the frame holds its place in the wall; the print swells toward you */
.ph:hover { z-index: 3; }
.ph:hover img { transform: scale(1.05); }
.ph figcaption {
  margin-top: 12px;
  font-family: var(--grotesk);
  font-weight: 500;
  font-size: 9.5px;
  letter-spacing: 0.03em;
  text-transform: uppercase;
  color: rgba(14,14,14,0.5);
  opacity: 0;
  transition: opacity 0.3s var(--ease);
}
.ph:hover figcaption { opacity: 1; }

/* interlock: talls, wides, and squares packed like blocks */
.ph-1 { grid-column: span 2; grid-row: span 31; }   /* tall 2:3 */
.ph-2 { grid-column: span 4; grid-row: span 24; }   /* wide 16:9 */
.ph-3 { grid-column: span 2; grid-row: span 31; }
.ph-4 { grid-column: span 2; grid-row: span 21; }   /* square */
.ph-5 { grid-column: span 2; grid-row: span 21; }
.ph-6 { grid-column: span 4; grid-row: span 24; }
.ph-7 { grid-column: span 2; grid-row: span 31; }   /* low-res drone frame */

.ph figcaption {
  position: absolute;
  left: 10px; bottom: 8px;
  margin: 0;
}
.page-paper .ph figcaption { color: var(--paper); }

@media (max-width: 740px) {
  .photo-grid { padding: 100px 12px 8vh; grid-template-columns: repeat(2, 1fr); grid-auto-rows: auto; gap: 8px; }
  .ph { grid-column: span 1 !important; grid-row: auto !important; aspect-ratio: 2 / 3; }
  .ph-2, .ph-6 { grid-column: span 2 !important; aspect-ratio: 16 / 10; }
  .ph figcaption { opacity: 1; }
}

/* ============================================================
   STUDIO · paper page, division's big-light-serif register
   ============================================================ */
.studio {
  max-width: 1180px;
  margin: 0 auto;
  padding: 19vh var(--pad-x) 6vh;
  min-height: 100dvh;
  display: flex;
  flex-direction: column;
}

.s-label {
  font-family: var(--grotesk);
  font-weight: 500;
  font-size: 10px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: rgba(14,14,14,0.4);
  margin-bottom: 4.5vh;
}

.s-big {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(42px, 6.4vw, 92px);
  line-height: 1.06;
  letter-spacing: -0.015em;
  color: var(--ink);
  font-variation-settings: 'opsz' 72;
}

.s-pedigree {
  margin-top: 7vh;
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(17px, 1.6vw, 21px);
  letter-spacing: 0;
  color: rgba(14,14,14,0.68);
  font-variation-settings: 'opsz' 18;
}

.s-house { margin-top: 14vh; }

/* three sections, ruled off from each other */
.s-rule {
  border: 0;
  border-top: 1px solid rgba(14,14,14,0.16);
  margin: 8vh 0;
}
.s-sec { position: relative; }
.s-sec .s-label { margin-bottom: 3vh; }

.s-body {
  max-width: 640px;
  font-family: var(--serif);
  font-weight: 400;
  font-size: clamp(18px, 1.55vw, 21px);
  line-height: 1.5;
  letter-spacing: 0;
  color: rgba(14,14,14,0.72);
  font-variation-settings: 'opsz' 20;
}

/* the client wall: every brand, narrow grotesk caps, wrapping edge to edge */
.brand-wall {
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  gap: 12px 30px;
}
.brand-wall li {
  font-family: var(--grotesk);
  font-weight: 640;
  font-variation-settings: 'wdth' 62;
  font-size: clamp(17px, 1.9vw, 26px);
  letter-spacing: 0.01em;
  text-transform: uppercase;
  line-height: 1.05;
  color: rgba(14,14,14,0.55);
  transition: color .3s var(--ease);
}
.brand-wall li:hover { color: var(--ink); }

@media (max-width: 740px) {
  .s-rule { margin: 6vh 0; }
  .brand-wall { gap: 10px 22px; }
}

.discipline { border-top: 1px solid rgba(14,14,14,0.14); }
.discipline .d-row {
  display: grid;
  grid-template-columns: 220px 1fr;
  align-items: baseline;
  padding: 22px 0;
  border-bottom: 1px solid rgba(14,14,14,0.14);
}
.discipline dt {
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: rgba(14,14,14,0.4);
}
.discipline dd {
  font-family: var(--grotesk);
  font-weight: 500;
  font-size: 15px;
  letter-spacing: 0.02em;
  text-transform: uppercase;
}
.discipline dd .bench {
  font-weight: 400;
  font-size: 11px;
  letter-spacing: 0.04em;
  color: rgba(14,14,14,0.5);
  margin-left: 12px;
}

.now-shooting {
  margin-top: auto;        /* pinned to the very bottom of the page */
  padding-top: 10vh;       /* but never crowds the content above it */
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
}
.now-shooting .ns-label { color: var(--red); }
.now-shooting .ns-current { color: rgba(14,14,14,0.68); margin-left: 14px; }

/* THE HOUSE · pull-quote — reads like a real, attributed statement:
   a serif line wrapped in matched red quotation marks, name below in caps. */
.s-quote {
  max-width: 820px;
  margin: 8.5vh 0 1vh;
}
.s-quote blockquote {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(27px, 3.6vw, 48px);
  line-height: 1.16;
  letter-spacing: -0.012em;
  color: var(--ink);
  font-variation-settings: 'opsz' 44;
}
.s-quote .q { color: var(--red); }   /* matched opening + closing marks */
.s-quote figcaption {
  margin-top: 3.4vh;
  font-family: var(--grotesk);
  font-weight: 600;
  font-size: 11px;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: rgba(14,14,14,0.5);
}
.s-quote figcaption b { color: var(--ink); font-weight: 700; }

@media (max-width: 740px) {
  .s-quote { margin-top: 6.5vh; }
}

@media (max-width: 740px) {
  .studio { padding: 15vh 20px 12vh; }
  .discipline .d-row { grid-template-columns: 1fr; gap: 6px; }
}

/* ============================================================
   CONTACT · one quiet line, one email, centered on ink
   ============================================================ */
.contact {
  height: 100dvh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 30px;
  text-align: center;
  padding: 0 20px;
}
.contact-line {
  font-family: var(--serif);
  font-weight: 300;
  font-size: clamp(24px, 2.8vw, 34px);
  letter-spacing: -0.005em;
  color: rgba(255,255,255,0.88);
  font-variation-settings: 'opsz' 44;
}
.contact-email {
  font-family: var(--grotesk);
  font-weight: 500;
  font-size: 11px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.6);
  transition: color 0.25s var(--ease);
}
.contact-email:hover { color: var(--red); }

/* ============================================================
   SITE B · hero edit slot (above the fold, awaiting Rego's cut)
   ============================================================ */
.hero {
  position: relative;
  height: 100dvh;
  background: var(--ink);
  overflow: hidden;
}
.hero video {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
  z-index: 2;
}
.hero-slate {
  position: absolute; inset: 0;
  z-index: 1;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 14px;
}
.hero-slate .hs-line {
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.45);
}
.hero-slate .hs-path {
  font-size: 9px;
  letter-spacing: 0.04em;
  color: rgba(255,255,255,0.25);
}
/* ============================================================
   SOUND · quiet equaliser toggle, bottom-right
   Three bars; still when muted, breathing when live.
   ============================================================ */
.snd {
  position: fixed;
  right: var(--pad-x);
  bottom: 24px;
  z-index: 45;
  display: flex;
  align-items: flex-end;
  gap: 3px;
  height: 34px;
  padding: 9px 8px;
  justify-content: center;
}
.snd-label {
  font-family: var(--grotesk);
  font-weight: 500;
  font-size: 9px;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.55);
  margin-right: 9px;
  align-self: center;
  transition: color .25s var(--ease);
}
.snd:hover .snd-label { color: #fff; }
.snd.is-on .snd-label { color: var(--red); }
.snd i {
  display: block;
  width: 2px;
  height: 5px;
  background: rgba(255,255,255,0.55);
  transition: background .25s var(--ease);
}
.snd:hover i { background: #fff; }
.snd.is-on i { background: var(--red); animation: eq 1.1s ease-in-out infinite; }
.snd.is-on i:nth-child(1) { animation-delay: 0s; }
.snd.is-on i:nth-child(2) { animation-delay: .18s; }
.snd.is-on i:nth-child(3) { animation-delay: .34s; }
@keyframes eq {
  0%, 100% { height: 5px; }
  50%      { height: 15px; }
}
@media (prefers-reduced-motion: reduce) {
  .snd.is-on i { animation: none; height: 12px; }
}

/* ============================================================
   PROJECT PAGES · film up top, stills from the shoot below
   (mikekoziel.co project-page pattern)
   ============================================================ */
.project-hero {
  position: relative;
  height: 100dvh;
  background: var(--ink);
  overflow: hidden;
}
.project-hero video {
  position: absolute; inset: 0;
  width: 100%; height: 100%;
}
.project-hero video.h { object-fit: cover; }
.project-hero video.v { object-fit: contain; }
@media (max-width: 740px) {
  .project-hero video.h { object-fit: contain; }
  .project-hero video.v { object-fit: cover; }
}

.project-stills {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 12vh;
  padding: 14vh 20px;
  background: var(--ink);
}
.project-stills img {
  width: min(92vw, 640px);
  height: auto;
}

.project-back {
  display: block;
  padding: 8vh 20px 10vh;
  text-align: center;
  font-size: 10px;
  font-weight: 500;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: rgba(255,255,255,0.5);
  transition: color .25s var(--ease);
}
.project-back:hover { color: var(--paper); }
