/* Morphellum case page — extracted from inline blocks for caching */
/* ─────────────────────────────────────────────────────────────────
     Fonts, same stack as the Illusorr hero
     Outfit       → body / paragraphs / UI
     PP Monument  → display headlines
     Squaresharps → small caps labels, eyebrows, UI chrome
     ───────────────────────────────────────────────────────────────── */
  /* Fonts loaded via Google Fonts <link> in <head> */

  /* ─────────────────────────────────────────────────────────────────
     Theme tokens, light + dark halves both defined up-front.
     A section just sets data-tone="light|dark" and gets the full kit.
     ───────────────────────────────────────────────────────────────── */
  :root {
    --light-bg: #eef1f8;
    --light-bg-2: #e2e6f6;
    --light-ink: #0A1033;
    --light-ink-soft: rgba(10, 16, 51, 0.62);
    --light-ink-faint: rgba(10, 16, 51, 0.14);
    --light-tile: #eef1f8;

    --dark-bg: #0A1033;
    --dark-bg-2: #050822;
    --dark-ink: #eef1f8;
    --dark-ink-soft: rgba(238, 241, 251, 0.66);
    --dark-ink-faint: rgba(238, 241, 251, 0.22);
    --dark-tile: #141A40;

    --accent: #1FA0E5;       /* Disney blue */

    --maxw: 1440px;
    --gutter: clamp(20px, 4vw, 64px);
  }

  /* Subtle noise grain, SVG <feTurbulence> rendered to a tile and
     drawn at low opacity. Same paper-grain feel as the landing
     page's WebGL plaster, just static and very quiet. */
  body::before {
    content: '';
    position: fixed; inset: 0;
    pointer-events: none;
    z-index: 1;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0.6 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
    background-size: 220px 220px;
    opacity: 0.06;
    mix-blend-mode: multiply;
  }
  /* On the dark half, multiply would hide the noise, invert the
     blend by flagging sections that should use a lighter grain. */
  section[data-tone="dark"] {
    position: relative;
  }
  section[data-tone="dark"]::after {
    content: '';
    position: absolute; inset: 0;
    pointer-events: none;
    z-index: 0;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='220' height='220'><filter id='n'><feTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/><feColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0.6 0'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>");
    background-size: 220px 220px;
    opacity: 0.035;
    mix-blend-mode: screen;
  }
  
  /* Keep section content above the dark-half grain overlay. */
  section[data-tone="dark"] > * { position: relative; z-index: 1; }

  *, *::before, *::after { box-sizing: border-box; }
  html, body { margin: 0; padding: 0; }
  body {
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 400;
    background: var(--light-bg);
    color: var(--light-ink);
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
    overflow-x: hidden;
  }

  /* Sections inherit a tone from data-tone. */
  section[data-tone="light"] {
    background: var(--light-bg);
    color: var(--light-ink);
    --bg: var(--light-bg);
    --bg-2: var(--light-bg-2);
    --ink: var(--light-ink);
    --ink-soft: var(--light-ink-soft);
    --ink-faint: var(--light-ink-faint);
    --tile: var(--light-tile);
  }
  section[data-tone="dark"] {
    background: var(--dark-bg);
    color: var(--dark-ink);
    --bg: var(--dark-bg);
    --bg-2: var(--dark-bg-2);
    --ink: var(--dark-ink);
    --ink-soft: var(--dark-ink-soft);
    --ink-faint: var(--dark-ink-faint);
    --tile: var(--dark-tile);
  }

  .wrap {
    max-width: var(--maxw);
    margin: 0 auto;
    padding: 0 var(--gutter);
  }

  /* ─────────────────────────────────────────────────────────────────
     Fixed top nav, matches the Illusorr chrome. Inverts with theme.
     ───────────────────────────────────────────────────────────────── */
  .topnav {
    position: fixed; left: 0; right: 0; top: 0;
    display: flex; align-items: center; justify-content: space-between;
    padding: 22px var(--gutter);
    z-index: 50;
    pointer-events: none;
    /* mix-blend-mode removed, was creating compositing artefacts with
       the custom cursor. Theme inversion is now handled per-section
       via JS toggling .on-dark on the topnav. */
  }
  .topnav > * { pointer-events: auto; }
  .topnav a, .topnav button {
    text-decoration: none;
    background: transparent; border: 0;
    font-family: 'Outfit', system-ui, sans-serif;
    font-size: 16.8px; letter-spacing: 0.16em; text-transform: uppercase;
    cursor: pointer;
    transition: color .35s ease;
  }
  .topnav .logo-lockup {
    display: inline-flex; align-items: center; gap: 12px;
    font-family: 'Squaresharps', system-ui, sans-serif;
    font-size: 19.6px; letter-spacing: 0.22em; text-transform: uppercase;
    transition: color .35s ease;
    text-decoration: none;
  }
  .topnav .logo-mark {
    width: 30px; height: 30px; display: inline-flex; align-items: center; justify-content: center;
  }
  .topnav .logo-mark img { width: 100%; height: 100%; object-fit: contain; display: block; }
  
  .topnav .logo-lockup, .topnav a, .topnav button { color: #0A1033; }
  .topnav.on-dark .logo-lockup, .topnav.on-dark a, .topnav.on-dark button { color: #eef1f8; }
  .topnav nav { display: flex; gap: 32px; align-items: center; }

  /* ─────────────────────────────────────────────────────────────────
     HERO, Dogstudio-style: tiny meta strip, gigantic title, scroll cue
     ───────────────────────────────────────────────────────────────── */
  section.hero[data-tone="dark"] {
    /* 21:9 letterbox panel, with a floor so it never collapses on phones */
    width: 100%; max-width: 100vw;
    aspect-ratio: 21 / 9;
    min-height: 560px;
    display: flex; flex-direction: column; justify-content: center;
    padding: clamp(40px, 8vh, 96px) var(--gutter);
    position: relative;
    --hg1: #1FA0E5; --hg2: #1746B8; --hg3: #050822;
    background:
      radial-gradient(90% 100% at 88% 4%, rgba(120,180,255,0.45), transparent 60%),
      linear-gradient(135deg, var(--hg1) 0%, var(--hg2) 55%, var(--hg3) 100%);
  }
  .hero .hero-inner { max-width: var(--maxw); width: 100%; margin: 0 auto; position: relative; z-index: 2; display: flex; flex-direction: column; flex: 1 1 auto; }

  /* ──────────────────────────────────────────────────────────────────
     HERO EMBLEM FIELD, small Boyner cloverleaf marks scattered around
     the hero edges. JS gives each one cursor-repulsion physics: the
     pointer pushes nearby marks away, they spring back home, and idle-
     spin slowly. Sits behind the hero text (z-index 1), non-interactive.
     ────────────────────────────────────────────────────────────────── */
  .hero-emblems {
    position: absolute;
    left: 0;
    pointer-events: none;
    overflow: visible;
    z-index: 30;
  }
  .hero-emblem {
    position: absolute;
    top: 0; left: 0;
    will-change: transform;
  }
  .hero-emblem svg { display: block; width: 100%; height: 100%; }
  .hero-emblem svg path { fill: currentColor; }
  .hero-emblem img { display: block; width: 100%; height: 100%; object-fit: contain; filter: invert(1) brightness(1.7); }

  .eyebrow-row {
    display: flex; gap: 28px; align-items: center;
    font-family: 'Outfit', system-ui, sans-serif;
    font-size: 16.8px; letter-spacing: 0.16em; text-transform: uppercase;
    color: var(--ink-soft);
    margin-bottom: 28px;
  }
  .eyebrow-row .dotsep {
    width: 4px; height: 4px; border-radius: 50%;
    background: var(--ink-faint);
  }

  .hero-title {
    font-family: 'PP Monument Extended', system-ui, sans-serif;
    font-weight: 900;
    font-size: clamp(40px, 5.5vw, 55px);
    line-height: 0.92;
    letter-spacing: -0.01em;
    text-transform: uppercase;
    margin: 0;
    color: var(--ink);
    max-width: 100%;
    overflow-wrap: break-word;
  }
  .hero-title .ln { display: block; max-width: 100%; }
  /* Italic tagline drops to its own block and is allowed to wrap so it
     never extends past the viewport / triggers horizontal overflow. */
  .hero-title .ln-ital {
    display: block;
    font-family: 'PP Monument Extended', system-ui, sans-serif;
    font-weight: 400;
    font-style: italic;
    font-size: 0.42em;
    letter-spacing: 0;
    color: var(--ink-soft);
    margin-top: 0.28em;
    max-width: 100%;
    white-space: normal;
    overflow-wrap: anywhere;
    text-transform: none;
  }

  .hero-foot {
    margin-top: auto;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    gap: 18px;
  }
  .hero-lede {
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 400;
    font-size: clamp(15px, 1.05vw, 17px);
    line-height: 1.55;
    color: var(--ink);
    max-width: 420px;
    margin: 0;
  }
  .hero-lede strong { font-weight: 600; }

  .scroll-cue {
    justify-self: center;
    display: inline-flex; flex-direction: column; align-items: center; gap: 10px;
    font-family: 'Outfit', system-ui, sans-serif;
    font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase;
    color: var(--ink-soft);
  }
  .scroll-cue .line {
    width: 1px; height: 44px;
    background: linear-gradient(180deg, transparent 0%, var(--ink) 50%, transparent 100%);
    background-size: 100% 200%;
    animation: scrollPulse 1.8s ease-in-out infinite;
  }
  @keyframes scrollPulse {
    0%   { background-position: 0 -100%; }
    100% { background-position: 0 200%; }
  }

  .hero-credit {
    justify-self: end;
    text-align: right;
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 500;
    font-size: 11px; letter-spacing: 0.16em; text-transform: uppercase;
    color: var(--ink-soft);
    line-height: 1.7;
  }

  /* ─────────────────────────────────────────────────────────────────
     PROJECT META, horizontal strip of label/value cells (the
     "Client / Year / Services" row that anchors every Dogstudio case).
     ───────────────────────────────────────────────────────────────── */
  .meta-bar {
    border-top: 1px solid var(--ink-faint);
    border-bottom: 1px solid var(--ink-faint);
    padding: 28px 0;
    display: grid;
    grid-template-columns: 1.2fr 0.8fr 1.4fr 1.4fr 1fr;
    gap: clamp(20px, 3vw, 48px);
  }
  .meta-cell .meta-k {
    display: block;
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 500;
    font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase;
    color: var(--ink-soft);
    margin-bottom: 8px;
  }
  .meta-cell .meta-v {
    display: block;
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 400;
    font-size: 14px; line-height: 1.5;
    color: var(--ink);
  }

  /* ─────────────────────────────────────────────────────────────────
     COVER, full-bleed featured visual right after the meta bar
     ───────────────────────────────────────────────────────────────── */
  .cover {
    padding: clamp(40px, 6vw, 96px) 0 clamp(90px, 11vw, 170px);
  }
  .cover .frame { position: relative; aspect-ratio: 16 / 9; overflow: hidden; }
  /* The .ph inside .frame must explicitly fill the frame, block
     children don't inherit the parent's aspect-ratio height. */
  .cover .frame .ph { position: absolute; inset: 0; }

  /* Placeholder media block, base style for any image/video stand-in.
     The dotted hatch + corner label tells the user "fill me in". */
  .ph {
    position: relative;
    width: 100%;
    background: var(--tile);
    color: var(--ink-soft);
    overflow: hidden;
    isolation: isolate;
  }
  .ph::before {
    content: '';
    position: absolute; inset: 0;
    background-image:
      linear-gradient(45deg, var(--ink-faint) 1px, transparent 1px),
      linear-gradient(-45deg, var(--ink-faint) 1px, transparent 1px);
    background-size: 14px 14px;
    opacity: 0.55;
    pointer-events: none;
  }
  .ph::after { content: none; }
  /* When a .ph holds a real <img> or <video>, drop the dotted hatch +
     center diamond + label chips so the asset reads cleanly. */
  .ph.is-filled::before,
  .ph.is-filled::after { display: none; }
  .ph > img,
  .ph > video {
    position: absolute; inset: 0;
    width: 100%; height: 100%;
    object-fit: cover;
    display: block;
    z-index: 1;
  }
  .ph.has-media::before, .ph.has-media::after{ content:none }
  .ph.has-media{ background:transparent; border:0; isolation:auto }
  .ph.has-media image-slot{ mix-blend-mode:lighten }
  .ph .ph-label {
    position: absolute; left: 20px; top: 16px;
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 500;
    font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase;
    color: var(--ink);
    background: var(--bg);
    padding: 6px 10px;
    border: 1px solid var(--ink-faint);
    z-index: 2;
  }
  .ph .ph-dim {
    position: absolute; right: 20px; top: 16px;
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 400;
    font-size: 11px; letter-spacing: 0.06em;
    color: var(--ink-soft);
    z-index: 2;
  }
  .ph[data-kind="video"] .play {
    position: absolute; left: 50%; top: 50%;
    transform: translate(-50%, -50%);
    width: 72px; height: 72px; border-radius: 50%;
    border: 1px solid var(--ink-faint);
    background: var(--bg);
    display: grid; place-items: center;
    z-index: 3;
  }
  .ph[data-kind="video"] .play::after {
    content: '';
    width: 0; height: 0;
    border-left: 14px solid var(--ink);
    border-top: 9px solid transparent;
    border-bottom: 9px solid transparent;
    margin-left: 4px;
  }
  .ph[data-kind="video"]::after { display: none; } /* hide diamond; play takes over */
  .ph .caption {
    position: absolute; left: 20px; bottom: 14px; right: 20px;
    display: flex; justify-content: space-between; align-items: center;
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 400;
    font-size: 11px; letter-spacing: 0.04em; text-transform: uppercase;
    color: var(--ink-soft);
    z-index: 2;
  }

  /* ─────────────────────────────────────────────────────────────────
     INTRO, left label + right paragraphs, the classic Dogstudio
     "01, The Brief" two-column module
     ───────────────────────────────────────────────────────────────── */
  .module {
    padding: clamp(120px, 15vw, 240px) 0;
  }
  .module-head {
    display: grid;
    grid-template-columns: 1fr 2fr;
    gap: clamp(24px, 5vw, 80px);
    align-items: start;
  }
  .section-num {
    font-family: 'Outfit', system-ui, sans-serif;
    font-size: 18.2px; letter-spacing: 0.2em; text-transform: uppercase;
    color: var(--ink-soft);
  }
  .section-num .num {
    display: block;
    font-family: 'PP Monument Extended', system-ui, sans-serif;
    font-weight: 900;
    font-size: clamp(36px, 4vw, 64px);
    line-height: 1;
    color: var(--ink);
    margin-bottom: 14px;
    letter-spacing: -0.02em;
  }
  .module-title {
    font-family: 'PP Monument Extended', system-ui, sans-serif;
    font-weight: 900;
    font-size: clamp(24px, 2.7vw, 42px);
    line-height: 1.06;
    letter-spacing: -0.01em;
    text-transform: uppercase;
    color: var(--ink);
    margin: 0 0 32px;
  }
  .module-title em {
    font-style: italic;
    font-weight: 400;
    color: var(--ink-soft);
    letter-spacing: 0;
  }

  .lede {
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 400;
    font-size: clamp(18px, 1.45vw, 25px);
    line-height: 1.45;
    color: var(--ink);
    max-width: 46ch;
    margin: 0;
    text-wrap: pretty;
  }
  .body-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: clamp(24px, 4vw, 64px);
    margin-top: clamp(40px, 5vw, 64px);
  }
  .body-grid p {
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 400;
    font-size: 15px;
    line-height: 1.7;
    color: var(--ink-soft);
    margin: 0;
  }
  .body-grid p + p { margin-top: 18px; }

  /* ─────────────────────────────────────────────────────────────────
     SIDE-BY-SIDE, uneven two-up gallery with offset rhythm
     ───────────────────────────────────────────────────────────────── */
  .duo {
    display: grid;
    grid-template-columns: 1.2fr 0.8fr;
    gap: clamp(20px, 3vw, 48px);
    align-items: end;
    padding: 0 0 clamp(90px, 11vw, 170px);
  }
  .duo .col { display: flex; flex-direction: column; gap: 14px; }
  .duo .col-a .ph { aspect-ratio: 4 / 3; }
  .duo .col-b { padding-bottom: clamp(40px, 6vw, 96px); }
  .duo .col-b .ph { aspect-ratio: 3 / 4; }
  .duo .cap {
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 400;
    font-size: 12.5px; letter-spacing: 0.01em;
    color: var(--ink-soft);
  }

  /* ─────────────────────────────────────────────────────────────────
     FULL-BLEED MEDIA, edge-to-edge video / image
     ───────────────────────────────────────────────────────────────── */
  .bleed {
    padding: 0 0 clamp(90px, 11vw, 170px);
  }
  .bleed .ph { aspect-ratio: 21 / 9; }

  /* ─────────────────────────────────────────────────────────────────
     PULL QUOTE, large editorial statement on its own panel
     ───────────────────────────────────────────────────────────────── */
  .quote-wrap {
    padding: clamp(120px, 15vw, 240px) 0;
  }
  .quote {
    max-width: 1100px; margin: 0 auto;
    font-family: 'PP Monument Extended', system-ui, sans-serif;
    font-weight: 400;
    font-size: clamp(28px, 3.8vw, 60px);
    line-height: 1.08;
    letter-spacing: -0.005em;
    color: var(--ink);
    text-align: left;
    text-wrap: balance;
  }
  .quote .quote-mark {
    display: block;
    font-family: 'PP Monument Extended', system-ui, sans-serif;
    font-weight: 900;
    font-size: clamp(80px, 10vw, 160px);
    line-height: 0.6;
    color: var(--accent);
    margin-bottom: 24px;
  }
  .quote-attrib {
    margin-top: 40px;
    display: flex; align-items: center; gap: 14px;
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 500;
    font-size: 12px; letter-spacing: 0.12em; text-transform: uppercase;
    color: var(--ink-soft);
  }
  .quote-attrib .rule { width: 36px; height: 1px; background: var(--ink-faint); }

  /* ─────────────────────────────────────────────────────────────────
     TRIPTYCH, three-up grid with offset middle (gallery moment)
     ───────────────────────────────────────────────────────────────── */
  .trio {
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    gap: clamp(16px, 2vw, 32px);
    padding: 0 0 clamp(90px, 11vw, 170px);
    align-items: start;
  }
  .trio .ph { aspect-ratio: 3 / 4; }
  .trio .col:nth-child(2) { padding-top: clamp(40px, 6vw, 96px); }

  /* ─────────────────────────────────────────────────────────────────
     PROCESS, three-up of labeled steps (text only)
     ───────────────────────────────────────────────────────────────── */
  .process {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: clamp(24px, 3vw, 56px);
    margin-top: clamp(48px, 6vw, 80px);
    border-top: 1px solid var(--ink-faint);
    padding-top: clamp(28px, 3vw, 48px);
  }
  .process .step {
    display: flex; flex-direction: column; gap: 14px;
  }
  .process .step .step-k {
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 500;
    font-size: 11px; letter-spacing: 0.14em; text-transform: uppercase;
    color: var(--ink-soft);
    display: flex; align-items: center; gap: 10px;
  }
  .process .step .step-k::before {
    content: ''; width: 6px; height: 6px; border-radius: 50%;
    background: var(--accent);
  }
  .process .step h4 {
    font-family: 'PP Monument Extended', system-ui, sans-serif;
    font-weight: 900;
    font-size: clamp(20px, 1.6vw, 26px);
    line-height: 1.1;
    text-transform: uppercase;
    color: var(--ink);
    margin: 0;
    letter-spacing: -0.005em;
  }
  .process .step p {
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 400;
    font-size: 14.5px; line-height: 1.6;
    color: var(--ink-soft);
    margin: 0;
  }

  /* ─────────────────────────────────────────────────────────────────
     STATS, large numbers + small captions (results)
     ───────────────────────────────────────────────────────────────── */
  .stats {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: clamp(16px, 2vw, 40px);
    padding: clamp(90px, 11vw, 170px) 0;
    border-top: 1px solid var(--ink-faint);
    border-bottom: 1px solid var(--ink-faint);
  }
  .stat .stat-n {
    font-family: 'PP Monument Extended', system-ui, sans-serif;
    font-weight: 900;
    font-size: clamp(48px, 6.5vw, 108px);
    line-height: 0.95;
    letter-spacing: -0.02em;
    color: var(--ink);
    display: block;
  }
  .stat .stat-n .sm { font-size: 0.45em; vertical-align: top; padding-left: 0.2em; color: var(--accent); }
  .stat .stat-k {
    display: block;
    margin-top: 14px;
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 500;
    font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase;
    color: var(--ink-soft);
    max-width: 18ch;
  }

  /* ─────────────────────────────────────────────────────────────────
     CREDITS, wide grid of role/name pairs
     ───────────────────────────────────────────────────────────────── */
  .credits {
    padding: clamp(90px, 11vw, 170px) 0;
    display: grid;
    grid-template-columns: 1fr 2fr;
    gap: clamp(24px, 5vw, 80px);
  }
  .credits .credit-list {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 28px 48px;
  }
  .credits .credit-row .role {
    display: block;
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 500;
    font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase;
    color: var(--ink-soft);
    margin-bottom: 6px;
  }
  .credits .credit-collab .who { display: flex; align-items: center; gap: 14px; }
  .credits .collab-logo { width: 46px; height: 46px; object-fit: contain; display: block; flex: 0 0 auto; }
  .credits .collab-txt { display: flex; flex-direction: column; gap: 2px; }
  .credits .credit-collab .who small { font-size: 12px; color: var(--ink-soft); font-weight: 400; }
  .credits .credit-row .who {
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 500;
    font-size: 15px; line-height: 1.5;
    color: var(--ink);
  }

  /* ─────────────────────────────────────────────────────────────────
     NEXT PROJECT, final full-bleed teaser, hover reveals title
     ───────────────────────────────────────────────────────────────── */
  .next {
    position: relative;
    min-height: 90vh;
    display: grid; place-items: center;
    overflow: hidden;
    cursor: pointer;
  }
  .next .next-bg {
    position: absolute; inset: 0;
    background: var(--tile);
    overflow: hidden;
  }
  .next .next-bg .ph {
    position: absolute; inset: 0;
    transform: scale(1.04);
    transition: transform 1.2s cubic-bezier(.2,.7,.2,1);
  }
  .next:hover .next-bg .ph { transform: scale(1.0); }
  .next .next-inner {
    position: relative; z-index: 2;
    text-align: center;
    display: flex; flex-direction: column; align-items: center; gap: 22px;
  }
  .next .next-k {
    font-family: 'Outfit', system-ui, sans-serif;
    font-size: 18.2px; letter-spacing: 0.22em; text-transform: uppercase;
    color: var(--ink-soft);
  }
  .next h3 {
    font-family: 'PP Monument Extended', system-ui, sans-serif;
    font-weight: 900;
    font-size: clamp(44px, 7vw, 120px);
    line-height: 0.95;
    text-transform: uppercase;
    color: var(--ink);
    margin: 0;
    letter-spacing: -0.01em;
  }
  .next .next-meta {
    display: flex; gap: 24px;
    font-family: 'Outfit', system-ui, sans-serif;
    font-size: 16.8px; letter-spacing: 0.18em; text-transform: uppercase;
    color: var(--ink-soft);
  }
  .next .next-cta {
    margin-top: 12px;
    display: inline-flex; align-items: center; gap: 14px;
    padding: 16px 28px;
    border: 1px solid var(--ink-faint);
    border-radius: 999px;
    font-family: 'Outfit', system-ui, sans-serif;
    font-size: 16.8px; letter-spacing: 0.18em; text-transform: uppercase;
    color: var(--ink);
    transition: background .3s ease, color .3s ease, border-color .3s ease;
  }
  .next:hover .next-cta {
    background: var(--accent);
    border-color: var(--accent);
    color: #fff;
  }
  .next-cta svg { width: 14px; height: 14px; }

  /* ─────────────────────────────────────────────────────────────────
     FOOTER, small chrome strip at the very bottom
     ───────────────────────────────────────────────────────────────── */
  footer.foot {
    padding: 40px var(--gutter);
    border-top: 1px solid var(--ink-faint);
    display: flex; justify-content: space-between; align-items: center;
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 500;
    font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase;
    color: var(--ink-soft);
  }

  /* ─────────────────────────────────────────────────────────────────
     Half-marker, the visual stitch between the light and dark halves
     ───────────────────────────────────────────────────────────────── */
  .seam {
    height: 1px;
    background: transparent;
    position: relative;
  }
  .seam::before {
    content: 'Beyond the screen';
    position: absolute; left: 50%; top: -10px; transform: translate(-50%, -100%);
    background: var(--bg);
    padding: 6px 14px;
    border: 1px solid var(--ink-faint);
    font-family: 'Outfit', system-ui, sans-serif;
    font-weight: 500;
    font-size: 11px; letter-spacing: 0.12em; text-transform: uppercase;
    color: var(--ink-soft);
    z-index: 4;
  }

  /* ─────────────────────────────────────────────────────────────────
     Side rail, tiny chapter / progress indicator on the right
     ───────────────────────────────────────────────────────────────── */
  .rail {
    position: fixed; right: 18px; top: 50%; transform: translateY(-50%);
    display: flex; flex-direction: column; gap: 8px;
    z-index: 40;
  }
  .rail .rail-dot {
    width: 6px; height: 6px; border-radius: 50%;
    background: #0A1033;
    opacity: 0.35;
    transition: opacity .3s ease, transform .3s ease, background .35s ease;
  }
  .rail.on-dark .rail-dot { background: #eef1f8; }
  .rail .rail-dot.is-active { opacity: 1; transform: scale(1.5); }

  /* ──────────────────────────────────────────────────────────────────
     KOTON cursor, a small black disc badge stamped with the
     wordmark. Sits over the whole page, uses mix-blend-mode:
     difference so it inverts cleanly against both the light and
     the dark halves without any per-section logic.
     ────────────────────────────────────────────────────────────────── */
  html, body { cursor: none; }
  a, button, [role="button"], .next, input, label, .topnav .logo-lockup { cursor: none; }

  .koton-cursor {
    position: fixed;
    left: 0; top: 0;
    width: 54px; height: 54px;
    margin-left: -27px; margin-top: -27px;
    background: transparent;
    color: #0A1033;
    display: flex; align-items: center; justify-content: center;
    pointer-events: none;
    /* Highest possible 32-bit signed int, the cursor must sit above
     every other stacking context on the page, no exceptions. */
    z-index: 2147483647;
    isolation: isolate;
    transition: width .35s cubic-bezier(.2,.7,.2,1),
                height .35s cubic-bezier(.2,.7,.2,1),
                margin .35s cubic-bezier(.2,.7,.2,1),
                opacity .25s ease,
                color .35s ease;
    will-change: transform, width, height;
    opacity: 0;
  }
  .koton-cursor.is-visible { opacity: 1; }

  /* On dark sections, flip the emblem fill so it always contrasts. */
  .koton-cursor.on-dark { color: #ffffff; }

  /* The Boyner emblem, the 4-petal cloverleaf mark, now the whole
     cursor with no disc behind it. Filled with currentColor so the
     tone-detection class swaps it between black (over light bg) and
     cream (over dark bg). */
  .koton-cursor .km {
    width: 100%;
    height: 100%;
    display: block;
    object-fit: contain;
    color: inherit;
    transition: opacity .25s ease, filter .35s ease;
    animation: none;
  }
  .koton-cursor .km path { fill: currentColor; }
  /* Bottle cursor is black line-art; invert to cream over dark sections. */
  .koton-cursor.on-dark .km { filter: none; }

  /* On text hover, slow continuous rotation. */
  .koton-cursor.is-text .km { animation-play-state: running; }
  /* On link hover, hide the emblem and reveal the action verb pill. */
  .koton-cursor.is-link .km { opacity: 0; }

  @keyframes kotonSpin {
    from { transform: rotate(0deg); }
    to   { transform: rotate(360deg); }
  }

  /* Hovering a link reveals an action verb pill anchored to the cursor */
  .koton-cursor .label-link {
    position: absolute; left: 50%; top: 50%;
    transform: translate(-50%, -50%) scale(0.7);
    opacity: 0;
    padding: 8px 14px;
    border-radius: 999px;
    background: currentColor;
    font-family: 'Outfit', system-ui, sans-serif;
    font-size: 15.4px; letter-spacing: 0.16em; text-transform: uppercase;
    transition: opacity .25s ease, transform .35s cubic-bezier(.2,.7,.2,1);
    white-space: nowrap;
  }
  .koton-cursor .label-link::after {
    /* The verb text itself sits in this pseudo so the pill bg can use
       currentColor (which flips with tone) and the text stays the
       opposite. JS writes the verb into a CSS var. */
    content: attr(data-verb);
    color: #eef1f8;
  }
  .koton-cursor.on-dark .label-link::after { color: #0a0a0c; }
  .koton-cursor.is-link { width: 0; height: 0; margin-left: 0; margin-top: 0; }
  .koton-cursor.is-link .label-link { opacity: 1; transform: translate(-50%, -50%) scale(1); }

  /* Press feedback, a small scale-down on the emblem */
  .koton-cursor.is-down .km { transform: scale(0.78); transition: transform .15s ease; }

  /* Touch devices: no fake cursor */
  @media (hover: none) {
    html, body, a, button { cursor: auto; }
    .koton-cursor { display: none; }
  }
  @keyframes hcFill { from { transform: scaleX(0); } to { transform: scaleX(1); } }

  /* Responsive nudges */
  @media (max-width: 880px) {
    .meta-bar { grid-template-columns: 1fr 1fr; }
    .module-head { grid-template-columns: 1fr; }
    .body-grid { grid-template-columns: 1fr; }
    .duo { grid-template-columns: 1fr; }
    .trio { grid-template-columns: 1fr; }
    .trio .col:nth-child(2) { padding-top: 0; }
    .process { grid-template-columns: 1fr; }
    .stats { grid-template-columns: 1fr 1fr; }
    .credits { grid-template-columns: 1fr; }
    .credits .credit-list { grid-template-columns: 1fr; }
    .hero-foot { grid-template-columns: 1fr; gap: 32px; }
    .hero-credit { justify-self: start; text-align: left; }
    .rail { display: none; }
  }
  .reel-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: clamp(12px, 1.6vw, 22px); }
  .reel-grid .ph { aspect-ratio: 9 / 16; }
  .reel-play { position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%); width: 60px; height: 60px; border-radius: 50%; border: 1px solid var(--ink-faint); background: rgba(0,0,0,0.04); z-index: 2; transition: background .3s ease, border-color .3s ease; }
  .reel-play::after { content: ''; position: absolute; left: 50%; top: 50%; transform: translate(-42%,-50%); width: 0; height: 0; border-left: 15px solid var(--ink-soft); border-top: 9px solid transparent; border-bottom: 9px solid transparent; }
  .reel-grid .ph:hover .reel-play { background: var(--accent); border-color: var(--accent); }
  .reel-grid .ph:hover .reel-play::after { border-left-color: #fff; }
  @media (max-width: 720px) { .reel-grid { grid-template-columns: repeat(2, 1fr); } }
  .reels-more { margin-top: clamp(28px, 3.5vw, 48px); }
  .reel-rail { display: flex; gap: clamp(12px, 1.6vw, 22px); overflow-x: auto; scroll-snap-type: x mandatory; padding-bottom: 12px; scrollbar-width: thin; }
  .reel-rail .ph { flex: 0 0 auto; height: clamp(460px, 72vh, 820px); width: auto; aspect-ratio: 9 / 16; scroll-snap-align: start; }
  .reel-rail::-webkit-scrollbar { height: 6px; }
  .reel-rail::-webkit-scrollbar-track { background: transparent; }
  .reel-rail::-webkit-scrollbar-thumb { background: var(--ink-faint); border-radius: 999px; }
  .post-grid { display: grid; grid-template-columns: repeat(3, 1fr); gap: 8px; }
  .post-grid .ph { aspect-ratio: 1 / 1; }
  .looks-head { font-family: 'Outfit', system-ui, sans-serif; font-size: 16.8px; letter-spacing: .18em; text-transform: uppercase; color: var(--ink-soft); margin-bottom: 16px; display: flex; align-items: center; gap: 12px; }
  .looks-head::after { content: ''; flex: 1; height: 1px; background: var(--ink-faint); }
  @media (max-width: 880px) { .post-grid { gap: 5px; } }

  /* Expandable post images, click to enlarge, pointer-away to revert */
  .post-grid .ph.is-filled img,
  .lg-grid .ph.is-filled img { transition: transform .6s cubic-bezier(.2,.7,.2,1); }
  .post-grid .ph.is-filled:hover img { transform: scale(1.03); }

  .lightbox {
    position: fixed; inset: 0; z-index: 2000;
    display: grid; place-items: center;
    padding: 5vh 5vw;
    background: rgba(8,8,10,0.92);
    -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px);
    opacity: 0; visibility: hidden;
    transition: opacity .4s ease, visibility 0s linear .4s;
  }
  .lightbox.open { opacity: 1; visibility: visible; transition: opacity .4s ease; }
  .lightbox figure { margin: 0; display: flex; flex-direction: column; align-items: center; gap: 18px; }
  .lightbox img {
    max-width: min(90vw, 760px); max-height: 84vh;
    object-fit: contain; display: block;
    box-shadow: 0 50px 130px rgba(0,0,0,0.6);
    transform: scale(0.94); opacity: 0;
    transition: transform .5s cubic-bezier(.2,.7,.2,1), opacity .4s ease;
  }
  .lightbox.open img { transform: scale(1); opacity: 1; }
  .lightbox figcaption {
    font-family: 'Outfit', system-ui, sans-serif;
    font-size: 15px; letter-spacing: 0.16em; text-transform: uppercase;
    color: rgba(243,236,223,0.7);
    opacity: 0; transition: opacity .4s ease .1s;
  }
  .lightbox.open figcaption { opacity: 1; }

  /* Lookbook split, two labelled groups (Female / Male), aligned cards */
  .look-split { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(28px, 4vw, 72px); align-items: start; }
  .look-group { display: flex; flex-direction: column; gap: 16px; }
  .look-group .lg-head { font-family: 'Outfit', system-ui, sans-serif; font-size: 16.8px; letter-spacing: .18em; text-transform: uppercase; color: var(--ink-soft); display: flex; align-items: center; gap: 12px; }
  .look-group .lg-head::after { content: ''; flex: 1; height: 1px; background: var(--ink-faint); }
  .look-group .lg-grid { display: grid; grid-template-columns: 1fr 1fr; gap: clamp(12px, 1.4vw, 22px); }
  .look-group .lg-grid .ph { aspect-ratio: 3 / 4; }
  .look-group .lg-grid .caption { left: 16px; right: 16px; bottom: 14px; gap: 12px; }
  .look-group .lg-grid .caption span:first-child { max-width: 60%; }
  @media (max-width: 880px) { .look-split { grid-template-columns: 1fr; } }

  /* Tweaks panel (host-gated) */
  .fab-cpanel { position: fixed; right: 20px; bottom: 20px; z-index: 2147483000; font-family: 'Outfit', system-ui, sans-serif; display: none; }
  .fab-cpanel.open { display: block; }
  .fab-cpanel .fcp-body { width: 252px; max-height: 82vh; overflow-y: auto; background: #14140f; border: 1px solid rgba(255,255,255,0.12); border-radius: 14px; padding: 14px; box-shadow: 0 24px 60px rgba(0,0,0,0.5); }
  .fab-cpanel .fcp-title { display: flex; align-items: center; justify-content: space-between; font-family: 'Outfit', system-ui, sans-serif; font-size: 12px; letter-spacing: 0.2em; text-transform: uppercase; color: #fff; margin: 0 2px 14px; }
  .fab-cpanel .fcp-h { font-family: 'Outfit', system-ui, sans-serif; font-size: 10px; letter-spacing: 0.2em; text-transform: uppercase; color: rgba(255,255,255,0.5); margin: 4px 2px 10px; }
  .fab-cpanel .fcp-h:not(:first-of-type) { margin-top: 18px; }
  .fab-cpanel .fcp-x { cursor: pointer; background: none; border: 0; color: rgba(255,255,255,0.6); font-size: 18px; line-height: 1; padding: 0; }
  .fab-cpanel .fcp-x:hover { color: #fff; }
  .fab-cpanel .fcp-grp { display: flex; flex-direction: column; gap: 9px; }
  .fab-cpanel .fcp-row { display: flex; align-items: center; gap: 10px; cursor: pointer; }
  .fab-cpanel .fcp-row input[type=color] { width: 26px; height: 26px; padding: 0; border: 1px solid rgba(255,255,255,0.2); border-radius: 6px; background: none; cursor: pointer; flex: 0 0 auto; }
  .fab-cpanel .fcp-row input[type=color]::-webkit-color-swatch-wrapper { padding: 2px; }
  .fab-cpanel .fcp-row input[type=color]::-webkit-color-swatch { border: none; border-radius: 4px; }
  .fab-cpanel .fcp-nm { flex: 1; font-size: 12px; color: rgba(255,255,255,0.85); }
  .fab-cpanel .fcp-val { font-size: 10px; letter-spacing: 0.06em; color: rgba(255,255,255,0.45); font-variant-numeric: tabular-nums; }
  .fab-cpanel .fcp-srow { flex-direction: column; align-items: stretch; gap: 6px; }
  .fab-cpanel .fcp-srow-top { display: flex; align-items: center; justify-content: space-between; }
  .fab-cpanel .fcp-range { -webkit-appearance: none; appearance: none; width: 100%; height: 3px; border-radius: 3px; background: rgba(255,255,255,0.18); outline: none; }
  .fab-cpanel .fcp-range::-webkit-slider-thumb { -webkit-appearance: none; appearance: none; width: 14px; height: 14px; border-radius: 50%; background: var(--accent, #EE403D); cursor: pointer; }
  .fab-cpanel .fcp-range::-moz-range-thumb { width: 14px; height: 14px; border: none; border-radius: 50%; background: var(--accent, #EE403D); cursor: pointer; }
  .fab-cpanel .fcp-select { flex: 0 0 auto; background: #211b18; color: #fff; border: 1px solid rgba(255,255,255,0.18); border-radius: 6px; font-size: 12px; padding: 5px 8px; font-family: inherit; cursor: pointer; }
  .fab-cpanel .fcp-reset { margin-top: 16px; width: 100%; cursor: pointer; border: 1px solid rgba(255,255,255,0.18); background: transparent; color: rgba(255,255,255,0.7); font-size: 11px; letter-spacing: 0.04em; padding: 8px; border-radius: 8px; }
  .fab-cpanel .fcp-reset:hover { background: rgba(255,255,255,0.06); color: #fff; }
  /* No grain on the hero, keep the gradient smooth */
  section.hero[data-tone="dark"]::after { display: none; }

/* Morphellum reveal: continuous scroll, horizontal drift, center scale */
  body,section[data-tone="dark"],.castle-stage,footer.foot{background:#05060a}
  section[data-tone="dark"]::before{display:none}
  .mor-env{position:relative;background:#05060a}
  .mor-env-bg{position:sticky;top:0;height:100svh;z-index:0;pointer-events:none;background:url(../../img/projects/morphellum/reveal-bg.webp) center bottom/cover no-repeat}
  .mor-env-bg::after{content:'';position:absolute;inset:0;background:linear-gradient(to bottom,rgba(5,6,10,.62) 0%,rgba(5,6,10,.28) 26%,rgba(5,6,10,.12) 46%,rgba(5,6,10,.5) 72%,rgba(5,6,10,.72) 100%)}
  .mor-env>section{position:relative;z-index:1;margin-top:-100svh}
  .mor-env>section:nth-of-type(2){margin-top:0}
  .mor-stage{position:relative;height:420svh;background:transparent !important}
  .mor-pin{position:sticky !important;top:0;height:100svh;overflow:hidden;display:flex;flex-direction:column;justify-content:center}
  .mor-track{position:absolute;left:0;bottom:6svh;display:flex;align-items:flex-end;gap:12vw;will-change:transform;z-index:2;padding-left:30vw}
  .mor-item{flex:0 0 auto;width:clamp(160px,21vw,400px);transform-origin:50% 100%;will-change:transform;transition:none;filter:drop-shadow(0 40px 60px rgba(0,0,0,.55))}
  .mor-item img{width:100%;height:auto;display:block;animation:morFloat 5.5s ease-in-out infinite;animation-delay:var(--ph,0s)}
  @keyframes morFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(-14px)}}
  @media(prefers-reduced-motion:reduce){.mor-item img{animation:none}}
  .mor-item .nm{text-align:center;margin-top:16px;font-size:11px;letter-spacing:.24em;text-transform:uppercase;color:var(--ink-soft);opacity:0;transition:opacity .4s}
  .mor-item.is-center .nm{opacity:1}
  @media(prefers-reduced-motion:reduce){.mor-track{transform:none !important}.mor-item{transform:none !important}}
  .mor-3d{margin-top:clamp(34px,4.5vw,60px)}
  #morStage3D{display:block;width:100%;height:clamp(420px,62svh,720px);border:1px solid rgba(238,241,251,.1)}
  .mor-grid{margin-top:clamp(34px,4.5vw,60px);display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:clamp(10px,1.2vw,18px)}
  .mor-grid .mg-cell{margin:0}
  .mor-grid img{width:100%;height:auto;aspect-ratio:1/1;object-fit:cover;display:block;background:#0d0d0e}
  .mor-grid figcaption{display:flex;justify-content:space-between;gap:10px;margin-top:8px;font-size:10px;letter-spacing:.18em;text-transform:uppercase;color:var(--ink-soft)}
  @media(max-width:600px){.mor-grid{grid-template-columns:repeat(2,1fr)}}
  .mor-videos{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:clamp(14px,1.8vw,26px);margin-top:clamp(40px,5vw,64px)}
  .mor-videos video{width:100%;aspect-ratio:3/4;object-fit:cover;display:block;background:#0d0d0e}
  .mor-videos figcaption{display:flex;gap:6px 14px;flex-wrap:wrap;align-items:baseline;margin-top:10px;font-size:11px;letter-spacing:.2em;text-transform:uppercase;color:var(--ink-soft)}
  .mor-hero .hero-credit{color:rgba(238,241,251,.92)}
  .mor-hero .scroll-cue span{color:rgba(238,241,251,.9)}
  .mor-hero > .chapter-inner{flex:1 1 auto;width:100%;max-width:none;margin:0}
  .mor-hero .hero-foot{align-items:flex-end;text-align:right}
  .mor-hero .hero-credit{justify-self:end;text-align:right}
  .mor-hero .scroll-cue{align-items:flex-end;justify-self:end;text-align:right}
  .mor-hero{padding:clamp(110px,14svh,160px) 0 clamp(40px,6vw,90px);position:relative;min-height:100svh;display:flex;align-items:center;background:transparent !important}

three-d-stage:not(:defined){visibility:hidden}


/* was inline #cm-fonts */
@font-face{ font-family:'PP Monument Extended'; font-weight:900; font-style:normal; font-display:swap;
    src: url("../../projects/shared/fonts/PPMonumentExtended-Black.woff2") format("woff2"); }
  @font-face{ font-family:'Squaresharps'; font-weight:400; font-style:normal; font-display:swap;
    src: url("../../projects/shared/fonts/Squaresharps-v2.woff2") format("woff2"); }

/* was inline #cm-type */
/* Italic / light display accents stay in Outfit (Monument file is Black weight only) */
  .hero-title .ln-ital, .module-title em, .quote { font-family:'Outfit', system-ui, sans-serif; }
  .cm-lockup { display:flex; flex-direction:column; line-height:1; }
  .cm-lockup .cm-name { font-family:'Cormorant Garamond', Georgia, serif; font-weight:600;
    font-size:clamp(21px,1.7vw,27px); letter-spacing:0.015em; color:var(--ink); white-space:nowrap; }
  .cm-lockup .cm-sub { font-family:'Outfit', system-ui, sans-serif; font-size:9px; letter-spacing:0.4em;
    text-transform:uppercase; color:var(--ink-soft); margin-top:7px; padding-left:2px; }
  .client-lockup .cm-lockup { align-items:flex-end; }
  .client-lockup .cm-lockup .cm-sub { padding-left:0; padding-right:2px; }
  .cm-logo-img { height:112px; width:auto; display:block; }
  @media (max-width: 880px) { .cm-logo-img { height:88px; } }

/* was inline #proj-tags-css */
.proj-tags{ display:flex; flex-wrap:wrap; gap:26px 56px; align-items:flex-start; margin-bottom:30px; padding-top:120px; }
  .proj-tags .ptg{ display:flex; flex-direction:column; gap:14px; }
  .proj-tags .ptg-k{ font-family:'Outfit',system-ui,sans-serif; font-size:11px; letter-spacing:0.26em; text-transform:uppercase; color:var(--ink-soft); display:flex; align-items:center; gap:8px; }
  .proj-tags .ptg-k::before{ content:''; width:14px; height:1px; background:var(--ink-soft); opacity:.7; }
  .proj-tags .ptg-c{ display:flex; flex-wrap:wrap; gap:9px; padding-left:22px; align-items:center; min-height:34px; }
  .proj-tags .ptg-client .cl-logo{ height:21px; width:auto; object-fit:contain; object-position:left center; filter:brightness(0) invert(1); }
  .proj-tags .ptag{ font-family:'Outfit',system-ui,sans-serif; font-weight:500; font-size:14px; letter-spacing:0.005em; color:var(--ink-bright, var(--ink)); border:1px solid var(--ink-faint); border-radius:8px; padding:8px 14px; line-height:1; white-space:nowrap; background:rgba(125,140,170,0.06); transition:border-color .25s, background .25s; }
  .proj-tags .ptag:hover{ border-color:color-mix(in srgb, var(--accent) 55%, transparent); background:color-mix(in srgb, var(--accent) 9%, transparent); }
  .proj-tags .ptag.sector{ border-style:dashed; color:var(--ink); }
  .hero-head{ display:flex; justify-content:space-between; align-items:flex-start; gap:32px; flex-wrap:wrap; }
  .client-lockup{ display:flex; flex-direction:column; align-items:flex-end; gap:11px; flex:0 0 auto; }
  .client-lockup .cl-k{ font-family:'Outfit',system-ui,sans-serif; font-size:11px; letter-spacing:0.26em; text-transform:uppercase; color:var(--ink-soft); }
  .client-lockup .cl-logo{ height:30px; width:auto; max-width:220px; object-fit:contain; object-position:right center; }

/* was inline #hero-refine */
/* Hero refinement: smaller, lighter, more elegant title + real breathing
     room between title, tagline and intro copy. */
  .hero-title{
    font-weight:400;
    font-size:clamp(30px,3.3vw,44px);
    line-height:1.06;
    letter-spacing:0.005em;
    margin:0 0 clamp(30px,3.4vw,52px);
  }
  .hero-title .ln-ital{
    font-weight:400;
    font-size:0.46em;
    line-height:1.35;
    margin-top:0.85em;
    letter-spacing:0.01em;
  }
  .hero-lede{
    font-size:clamp(15px,1.02vw,17px);
    line-height:1.68;
    max-width:52ch;
  }
  .proj-tags{ margin-bottom:clamp(44px,5vw,72px) !important; }

  /* Cover media band, sits under the intro copy */
  .hero-media{ padding:0; }
  .hero-media .hm-inner{ width:100%; margin:0; }
  .hero-media .hm-frame{ position:relative; width:100%; height:100vh;height:100svh; height:100svh; overflow:hidden; border-radius:0; background:color-mix(in srgb, var(--ink) 6%, transparent); }
  .hero-media .hm-cap{
    display:flex; flex-wrap:wrap; justify-content:space-between; gap:10px 30px;
    margin:16px auto 0; max-width:var(--maxw); padding:0 var(--gutter) clamp(90px,11vw,170px);
    font-family:'Outfit',system-ui,sans-serif;
    font-size:12px; letter-spacing:0.2em; text-transform:uppercase;
    color:var(--ink-soft);
  }

/* was inline #rhythm-refine */
/* Minimal section numbering: a single quiet line, number inline with the
     label instead of an oversized display figure. */
  .section-num{
    display:flex !important; align-items:baseline; gap:10px;
    font-family:'Outfit',system-ui,sans-serif !important;
    font-size:11px !important; letter-spacing:0.2em !important;
    text-transform:uppercase; color:var(--ink-soft); font-weight:400 !important;
  }
  /* The index number was var(--ink-faint) - 14% opacity, measured 1.14:1
     against the page, effectively invisible at every breakpoint. It now takes
     the page's own accent (fabrika #EE403D, denim #3B5BDB, barbie #FF1493...)
     and a heavier weight. --ink-soft is the fallback for the handful of pages
     that declare no accent. */
  .section-num .num{
    display:inline !important;
    font-family:'Outfit',system-ui,sans-serif !important;
    font-size:11px !important; font-weight:400 !important;
    letter-spacing:0.2em !important; line-height:1 !important;
    color:var(--accent, var(--ink-soft)) !important; opacity:1; margin:0 !important; font-weight:600 !important;
    -webkit-text-fill-color:currentColor;
  }
  /* Visual band between sections, edge to edge. */
  .vband{ padding:0 0 clamp(90px,11vw,170px); }
  .vband .vb-frame{ position:relative; width:100%; height:clamp(420px,74vh,900px); overflow:hidden; background:color-mix(in srgb, var(--ink) 6%, transparent); }
  .vband .vb-cap{
    display:flex; justify-content:space-between; gap:10px 30px;
    max-width:var(--maxw); margin:14px auto 0; padding:0 var(--gutter);
    font-family:'Outfit',system-ui,sans-serif;
    font-size:11px; letter-spacing:0.2em; text-transform:uppercase; color:var(--ink-soft);
  }
  @media (max-width:760px){ .vband .vb-frame{ height:clamp(340px,56vh,620px); } }
  .vband-full .vb-frame{ height:100vh;height:100svh; }
  @media (max-width:760px){ .vband-full .vb-frame{ height:72vh; } }
  /* The hero was pinned by aspect-ratio:21/9, so its height derived from its
     WIDTH and content could never grow it — that is what pushed the footer and
     scroll cue down onto the cover band. Drop the ratio, let content set the
     height, and use justify-content (the real axis on a column flexbox). */
  section.hero[data-tone]{
    aspect-ratio:auto !important;
    height:auto !important;
    min-height:100svh !important;
    justify-content:flex-start !important;
    padding-block:clamp(48px,6vh,96px) clamp(40px,5vh,80px) !important;
  }
  section.hero[data-tone] .hero-inner{ flex:0 0 auto !important; }
  /* Push the footer to the bottom only when there is genuine room to spare. */
  section.hero[data-tone] .hero-foot{ margin-top:auto !important; }
  /* On short viewports the 120px tag gutter is the first thing to give. */
  @media (max-height:820px){
    .proj-tags{ padding-top:clamp(40px,7vh,120px) !important; }
  }


/* The Proof: a portrait runway plate beside its standfirst. The image keeps
   its own tall ratio rather than being forced into the page's landscape
   frames, so it stacks below the text once the column gets too narrow. */
.mor-proof {
  display: grid;
  grid-template-columns: minmax(0, 0.9fr) minmax(0, 1.1fr);
  gap: clamp(28px, 4vw, 72px);
  align-items: center;
}
@media (max-width: 860px) {
  .mor-proof { grid-template-columns: 1fr; gap: clamp(24px, 5vw, 40px); }
  .mor-proof .ph { max-width: 460px; margin-inline: auto; }
}
