  /* FluidHand is declared once in layouts/theme.liquid (byte-identical to the
     FLBold face). A second page-local @font-face here downloaded the same
     167KB file twice — removed. */
  *,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
  :root{
    --bg:#07080a; --bg2:#0d0f13; --ink:#eeede8; --dim:#9a9fa8; --line:rgba(255,255,255,.09);
    /* one blue, #42b1ff, per the brand rule — the old #077bff is gone. Where
       contrast fails on cream the fallback is ink black, never a darkened blue. */
    --accent:#42b1ff; --accent-2:#42b1ff; --accent-soft:rgba(66,177,255,.14);
    --paper:#f5f0e8; --ink-d:#17140e; --dim-d:#4a4234; --line-d:rgba(30,22,10,.14);
    --panel:#0e1117; --panel2:#12161d;
    --green:#69d29a; --amber:#e8b34d; --coral:#f27a6d; --faint:#4b505a;
    --sans:-apple-system,BlinkMacSystemFont,"SF Pro Display","Inter","Segoe UI",Helvetica,Arial,sans-serif;
    --serif:Georgia,"Times New Roman",serif;
    /* the "mono" role is the house label face (Neue Haas), not a monospace —
       this one line retires every monospace eyebrow, tag and stat on the page. */
    --mono:"WeHaas","Neue Haas Display","Helvetica Neue",Helvetica,Arial,sans-serif;
    --hand:"FLBold","FluidHand","Arial Black",sans-serif;

    /* the --z-* tokens are the LIGHT-ZONE palette: cream paper, ink text. They
       are constants, not a scrub — the light zones (#modules, #native) are
       fully cream from their first pixel and the torn-paper strips
       (.fp-tstrip--down / --up) carry the whole dark<->light transition.
       Every consumer sits inside .sx.lightzone, so these never reach the dark
       canvas. --z-bg stays only as a fallback tint. */
    --z-bg: transparent;
    --z-surface: #ffffff;
    --z-ink: #17140e;
    --z-dim: #4a4234;
    --z-line: rgba(30,22,10,.14);
    /* ink-black on cream, never blue — the contrast rule, as one token */
    --z-accent: #17140e;
    /* the "old way" cross keeps its warning red, deepened to hold contrast
       against cream */
    --z-cross: #b8422e;
  }

  html{scroll-behavior:smooth;overflow-x:clip}
  /* the canvas is dark NOISY PAPER, never flat black. background-attachment:fixed
     so any strip painted with the same stock registers with it. */
  body{font-family:var(--sans);background-color:var(--bg);background-image:var(--we-paper-dark);
    background-size:cover;background-position:center;background-attachment:fixed;
    color:var(--ink);-webkit-font-smoothing:antialiased;line-height:1.5;overflow-x:clip}
  /* page-wide print tooth. z-index sits above the nav but below the lightbox (1000). */
  body::after{content:"";position:fixed;inset:0;pointer-events:none;z-index:999;
    mix-blend-mode:overlay;opacity:.3;background-size:180px 180px;
    background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='fpn'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23fpn)'/%3E%3C/svg%3E")}
  ::selection{background:var(--accent);color:#04121f}
  a{color:inherit;text-decoration:none}
  button{font:inherit;color:inherit;background:transparent}
  .wrap{max-width:1160px;margin:0 auto;padding:0 24px}

  /* ---------- type ---------- */
  .eyebrow{font-family:var(--mono);font-size:.74rem;font-weight:600;letter-spacing:.24em;text-transform:uppercase;color:var(--accent-2)}
  h1{font-weight:650;letter-spacing:-.035em;line-height:1.02}
  h2{font-weight:650;letter-spacing:-.03em;line-height:1.06}
  .display{font-size:clamp(2.5rem,6.2vw,5rem);font-weight:650;letter-spacing:-.042em;line-height:1.0}
  /* the second half of a section headline is the teardown-hero treatment:
     FL display face, bold, blue. The FL face is caps-only, so it sets in
     caps the way "A $1.2B EMPIRE." does on a teardown. (task 05:03) */
  .display .soft{font-family:var(--hand);font-weight:700;color:var(--accent);
    letter-spacing:.005em;font-size:1.06em;line-height:1.02;display:inline-block}
  /* on cream the blue fails contrast, so it resolves to ink black — never a
     darkened blue. --z-accent interpolates with the sunrise. */
  .lightzone .display .soft{color:var(--z-accent)}
  .quiet{color:var(--dim);font-size:clamp(1.14rem,1.9vw,1.44rem);font-weight:450;letter-spacing:-.012em;line-height:1.5}
  .quiet b{color:var(--ink);font-weight:550}

  /* ---------- buttons — the fluid-brand analog signature ----------
     square-ish 4px radius, HARD offset shadow (no blur), -0.6deg rotation.
     Replaces the glowing rounded-pill "AI" button. */
  .btn{display:inline-flex;align-items:center;gap:9px;padding:13px 24px;border-radius:4px;
    font-size:.92rem;font-weight:700;letter-spacing:-.01em;cursor:pointer;border:1px solid transparent;
    rotate:-.6deg;
    transition:translate .2s ease,box-shadow .2s ease,background .2s ease,border-color .2s ease,color .2s ease;
    white-space:nowrap}
  .btn--primary{background:var(--accent);color:#050a12;box-shadow:3px 3px 0 rgba(0,0,0,.5)}
  .btn--primary:hover{translate:0 -2px;box-shadow:4px 5px 0 rgba(0,0,0,.58)}
  .btn--ghost{background:rgba(255,255,255,.04);border-color:rgba(255,255,255,.28);color:var(--ink);
    box-shadow:none;rotate:0deg}
  .btn--ghost:hover{background:#fff;border-color:#fff;color:#0c0d10;translate:0 -2px}
  .lightzone .btn--ghost{color:var(--z-ink);border-color:var(--z-line)}
  .lightzone .btn--ghost:hover{background:var(--z-ink);border-color:var(--z-ink);color:#fff}
  .btn--sm{padding:9px 16px;font-size:.85rem;box-shadow:2px 2px 0 rgba(0,0,0,.5)}
  @media(prefers-reduced-motion:reduce){.btn{transition:none}}
  .btn svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}

/* ---- GLOBAL PASS · the bespoke mega-dropdown nav was deleted here ----
   The `nav{position:fixed}` ELEMENT selector that led this block is why it
   had to go rather than just be left dead: the canonical chassis puts a real
   <nav class="nav-actions"> inside the header, and an element-wide
   `position:fixed` would have ripped the link row out of the bar. The
   `.tdd-*` panel, its thumbnails, its stagger animation and the last
   hardcoded "SF Mono" on this page went with it. */
  /* ---------- hero — a torn photograph mounted on white paper ----------
     TWO tear layers cut from INDEPENDENT tiles:
       .hero        = the white paper sheet, torn along --tx2
       .hero::after = the photograph, torn along --tx4, phase-shifted
                      117px and lifted 12px
     The two rags must never share a tile or a phase — a photo and its
     backing sheet don't rip along the same path. Where the photo rag
     rides high the white edge widens; where it dips below the sheet rag
     the sheet's own mask clips it, so the ink runs right to the torn
     edge in spots. Both behaviors are what a real ripped print does. */
  .hero{position:relative;min-height:100svh;display:flex;align-items:flex-start;justify-content:center;
    text-align:center;overflow:hidden;
    /* GLOBAL PASS: was clamp(82px,10vh,128px). The canonical nav is a 68px
       content box whose torn edge lands at 67px, and the teardowns clear it
       with a flat 136px — the clamp's 82px floor put the first line of the
       H1 under the bar at short viewport heights (seen in
       verify/global/shots/nav-identity-1440.png before this change). Matched
       to the teardown value so the headline sits the same distance below the
       rag on every page. */
    padding:136px 0 calc(58px + var(--tear-amp));
    background:var(--pp-speck-w) 0 0/var(--pp-s-size) repeat,
               var(--pp-grain-w) 0 0/var(--pp-g-size) repeat #fff;
    background-blend-mode:multiply,multiply;
    -webkit-mask-image:var(--tx2),linear-gradient(#000,#000);
            mask-image:var(--tx2),linear-gradient(#000,#000);
    -webkit-mask-repeat:repeat-x,no-repeat;mask-repeat:repeat-x,no-repeat;
    -webkit-mask-size:300px 48px,100% calc(100% - 46px);
            mask-size:300px 48px,100% calc(100% - 46px);
    -webkit-mask-position:bottom left,top;mask-position:bottom left,top}
  .hero::after{content:"";position:absolute;left:0;right:0;top:0;bottom:12px;z-index:0;pointer-events:none;
    background:
      linear-gradient(180deg,transparent 68%,rgba(7,8,10,.5) 100%),
      url("https://ik.imagekit.io/fluid/980191006/fp-hero-utopia_MOm85Y9cQ.png?tr=w-2400,q-80") center 46%/cover no-repeat,
      #07080a;
    -webkit-mask-image:var(--tx4),linear-gradient(#000,#000);
            mask-image:var(--tx4),linear-gradient(#000,#000);
    -webkit-mask-repeat:repeat-x,no-repeat;mask-repeat:repeat-x,no-repeat;
    -webkit-mask-size:337px 48px,100% calc(100% - 46px);
            mask-size:337px 48px,100% calc(100% - 46px);
    -webkit-mask-position:-117px bottom,top;mask-position:-117px bottom,top}
  .hero::before{content:"";position:absolute;left:0;right:0;top:0;height:56%;z-index:1;pointer-events:none;background:linear-gradient(180deg,rgba(6,8,12,.5),rgba(6,8,12,.18) 46%,transparent)}
  #heroCanvas{display:none}
  .hero-inner{position:relative;z-index:2;max-width:1060px;margin:0 auto;padding:0 24px;will-change:transform}
  .hero h1{font-size:clamp(1.6rem,3.4vw,2.75rem);font-weight:600;letter-spacing:-.02em;line-height:1.16;color:#fff;text-shadow:0 2px 22px rgba(0,0,0,.42),0 1px 3px rgba(0,0,0,.42)}
  .hero-flip{display:inline-block;margin-top:.02em}
  /* the FL face is already slanted — the synthetic italic and the blue halo
     (an "AI" tell) are both gone; the drop shadow stays for legibility. */
  .hero-flip .rot{display:inline-block;font-family:var(--hand);font-weight:700;font-size:clamp(2rem,5vw,4.3rem);line-height:1;letter-spacing:0;color:#fff;text-shadow:0 8px 34px rgba(0,0,0,.55),0 2px 6px rgba(0,0,0,.45);transition:opacity .2s ease;will-change:opacity}
  .hero-flip .rot.swap{opacity:0}
  .hero-ctas{margin-top:clamp(12px,1.5vw,20px);display:flex;gap:12px;flex-wrap:wrap;align-items:center;justify-content:center}
  .hero-ctas .btn{padding:11px 20px;font-size:.9rem}
  .hero-ctas .btn svg{width:15px;height:15px}
  .hero .btn--ghost{border-color:rgba(255,255,255,.42);color:#fff}
  .hero .btn--ghost:hover{border-color:#fff;color:#fff;background:rgba(255,255,255,.08)}
  @media(prefers-reduced-motion:reduce){.hero-flip .rot{transition:none}}
  /* ---------- section shell ----------
     transparent, so the body's dark noisy paper is the canvas everywhere
     instead of a stack of flat black rectangles (task 07:55). */
  .sx{position:relative;padding:clamp(96px,13vw,190px) 0;background:transparent;overflow:hidden}
  .sx .wrap{position:relative;z-index:2}

  /* ---------- light zone (cream paper over the dark canvas) ----------
     The veil below is the cream paper STOCK, painted at full opacity over the
     dark canvas. There is no scroll fade: the zone is cream from its first
     pixel, and the torn strips at its two ends own the dark<->light cut. */
  .sx.lightzone{background:transparent;color:var(--z-ink)}
  /* background-attachment:fixed is what keeps the stock CONTINUOUS across the
     #modules -> #native boundary. With the default `scroll`, `center/cover`
     resolves against each section's own box, so the paper restarted at every
     boundary and left a faint phase seam. Fixed anchors both sections to the
     same viewport-sampled texture — the same trick body and .fp-tstrip use. */
  .sx.lightzone::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
    background:linear-gradient(rgba(245,240,232,.55),rgba(245,240,232,.55)),
               #f5f0e8 var(--we-paper-light) center/cover;
    background-attachment:scroll,fixed}
  /* multiply grain film over the cream, same recipe as .zone--light */
  .sx.lightzone::after{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;
    mix-blend-mode:multiply;opacity:.05;
    background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='200' height='200'%3E%3Cfilter id='lzn'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix type='saturate' values='0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23lzn)'/%3E%3C/svg%3E")}
  .lightzone .quiet{color:var(--z-dim)}
  /* (the old `.lightzone .display .soft{color:var(--z-dim)}` sat here and
     silently overrode the blue/ink treatment above — removed) */
  .lightzone .mod-head h2{color:var(--z-ink)}
  /* .mod is its own white paper stock, brighter than the cream zone behind it,
     so it keeps its own ink rather than inheriting the --z-* zone palette. */
  .lightzone .pairs{border-top-color:var(--z-line)}
  .lightzone .pair{border-bottom-color:var(--z-line)}
  .lightzone .pair .old{color:var(--z-dim)}
  .lightzone .pair .new{border-left-color:var(--z-line)}
  .lightzone .pair .new b{color:var(--z-ink)}
  .lightzone .pair:hover{background:rgba(0,0,0,.025)}
  .kick{display:flex;align-items:center;gap:16px;margin-bottom:26px}
  .kick .n{font-family:var(--mono);font-size:.76rem;letter-spacing:.16em;text-transform:uppercase;color:var(--dim)}
  .kick .n b{color:var(--accent-2);font-weight:700}
  .kick .ln{flex:1;height:1px;background:var(--line);transition:background-color 0.8s ease}

  /* ---------- reveal ---------- */
  .rv{opacity:0;transform:translateY(28px);transition:opacity .8s cubic-bezier(.2,.6,.2,1),transform .8s cubic-bezier(.2,.6,.2,1)}
  .rv.on{opacity:1;transform:none}
  .rv2{transition-delay:.1s}.rv3{transition-delay:.2s}.rv4{transition-delay:.3s}
  @media(prefers-reduced-motion:reduce){.rv{opacity:1;transform:none;transition:none}}

  /* ---------- teardown ticker (under hero) ---------- */
  .tdstrip{position:relative;background:transparent;border-top:0;border-bottom:1px solid var(--line);padding:clamp(26px,3vw,38px) 0 clamp(18px,2.4vw,28px);overflow:hidden}
  .tdstrip-lead{max-width:1160px;margin:0 auto 22px;padding:0 24px;display:flex;align-items:baseline;justify-content:center;gap:15px;flex-wrap:wrap;text-align:center}
  /* task 04:44 — the mono eyebrow becomes the FL brand kicker */
  .tdstrip-lead .k{font-family:var(--hand);font-weight:700;font-size:clamp(1.3rem,1.8vw,1.6rem);letter-spacing:.02em;
    text-transform:uppercase;color:var(--accent);display:inline-block;rotate:-.7deg}
  .tdstrip-lead .s{font-size:clamp(1rem,1.4vw,1.18rem);color:var(--dim)}
  .tdstrip-marq{position:relative;-webkit-mask-image:linear-gradient(90deg,transparent,#000 5%,#000 95%,transparent);mask-image:linear-gradient(90deg,transparent,#000 5%,#000 95%,transparent)}
  .tdstrip-row{display:flex;gap:12px;width:max-content;will-change:transform;animation:tdmarq 60s linear infinite}
  .tdstrip-marq:hover .tdstrip-row{animation-play-state:paused}
  @keyframes tdmarq{to{transform:translateX(-50%)}}
  /* white paper slips, not dark outlined pills — each one tilted a hair so the
     row reads as pasted-down scraps rather than a UI component set. */
  .tdchip{flex:0 0 auto;display:flex;align-items:center;gap:13px;padding:9px 21px 9px 9px;
    border:0;border-radius:3px;
    background:var(--pp-speck-w) var(--pp-sp,0 0)/var(--pp-s-size) repeat,
               var(--pp-grain-w) var(--pp-gp,0 0)/var(--pp-g-size) repeat #fff;
    background-blend-mode:multiply,multiply;
    box-shadow:2px 2px 0 rgba(0,0,0,.42);
    transition:translate .25s ease,box-shadow .25s ease}
  .tdchip:nth-child(3n+1){rotate:-1.1deg;--pp-sp:120px 70px;--pp-gp:40px 150px}
  .tdchip:nth-child(3n+2){rotate:.8deg;--pp-sp:200px 130px;--pp-gp:90px 30px}
  .tdchip:nth-child(3n){rotate:-.4deg}
  .tdchip:hover{translate:0 -2px;box-shadow:3px 4px 0 rgba(0,0,0,.5)}
  .tdchip-thumb{width:48px;height:48px;border-radius:2px;overflow:hidden;flex:0 0 48px;background:#efece4}
  .tdchip-thumb img{width:100%;height:100%;object-fit:cover;display:block}
  .tdchip-txt{display:flex;flex-direction:column;line-height:1.2;white-space:nowrap}
  .tdchip-txt b{font-size:1.02rem;font-weight:700;color:#141109;letter-spacing:-.01em}
  .tdchip-txt span{font-size:.82rem;color:#4a4234}
  @media(prefers-reduced-motion:reduce){.tdstrip-row{animation:none;flex-wrap:wrap;justify-content:center}.tdstrip-marq{-webkit-mask-image:none;mask-image:none}}

  /* ---------- problem / disconnect ---------- */
  .prob .display{max-width:17ch}
  .prob-body{margin:clamp(40px,6vw,72px) 0 0 auto;max-width:640px;font-size:clamp(1.12rem,1.6vw,1.34rem);line-height:1.62;color:var(--dim)}
  .prob-body b{color:var(--ink);font-weight:550}
  /* ---------- the broken stack: white torn-paper strips ----------
     tasks 04:56 (white paper strips, torn edge), 05:18 (hand-drawn
     strike-through from the brand annotation stroke), 05:30 (relevant
     icons carrying the turbulence wobble instead of plain bullets). */
  .stackwall{margin:clamp(48px,7vw,88px) 0 0;display:grid;grid-template-columns:repeat(3,1fr);gap:18px 16px}
  @media(max-width:800px){.stackwall{grid-template-columns:repeat(2,1fr)}}
  @media(max-width:520px){.stackwall{grid-template-columns:1fr}}
  /* unmasked wrapper casts the shadow — the mask on .brick would clip it */
  .brick-sh{filter:var(--slip-shadow);transition:filter .3s ease}
  .brick-sh:hover{filter:var(--slip-shadow-hover)}
  .brick{position:relative;display:flex;align-items:center;gap:13px;
    padding:19px 20px calc(23px + var(--tear-amp));
    border:0;border-radius:2px 2px 0 0;
    background:var(--pp-speck-w) var(--pp-sp,0 0)/var(--pp-s-size) repeat,
               var(--pp-grain-w) var(--pp-gp,0 0)/var(--pp-g-size) repeat #fff;
    background-blend-mode:multiply,multiply;
    color:#2a2318;font-size:1rem;font-weight:600;letter-spacing:-.01em;
    transition:color .6s ease}
  /* four tear tiles / four tilts, rotated per position so no two neighbours
     share a rag or an angle */
  .stackwall .brick-sh:nth-child(4n+1) .brick{rotate:-.7deg;
    -webkit-mask-image:var(--tx1),linear-gradient(#000,#000);mask-image:var(--tx1),linear-gradient(#000,#000)}
  .stackwall .brick-sh:nth-child(4n+2) .brick{rotate:.5deg;--pp-sp:120px 70px;--pp-gp:40px 150px;
    -webkit-mask-image:var(--tx2),linear-gradient(#000,#000);mask-image:var(--tx2),linear-gradient(#000,#000)}
  .stackwall .brick-sh:nth-child(4n+3) .brick{rotate:-.35deg;--pp-sp:200px 130px;--pp-gp:90px 30px;
    -webkit-mask-image:var(--tx3),linear-gradient(#000,#000);mask-image:var(--tx3),linear-gradient(#000,#000)}
  .stackwall .brick-sh:nth-child(4n) .brick{rotate:.9deg;--pp-sp:60px 210px;--pp-gp:170px 90px;
    -webkit-mask-image:var(--tx4),linear-gradient(#000,#000);mask-image:var(--tx4),linear-gradient(#000,#000)}
  .stackwall .brick{
    -webkit-mask-repeat:repeat-x,no-repeat;mask-repeat:repeat-x,no-repeat;
    -webkit-mask-size:300px 48px,100% calc(100% - 46px);mask-size:300px 48px,100% calc(100% - 46px);
    -webkit-mask-position:bottom left,top;mask-position:bottom left,top}
  /* the icon — relevant per row, wobbled by #wobble-el via .we-wob */
  .brick .ic{flex:0 0 25px;width:25px;height:25px;color:#141109;display:grid;place-items:center;
    transition:color .6s ease}
  .brick .ic svg{width:100%;height:100%;fill:none;stroke:currentColor;stroke-width:1.9;
    stroke-linecap:round;stroke-linejoin:round;overflow:visible}
  /* hand-drawn strike-through: the brand annotation stroke as an alpha mask.
     Inked in the accent — the editor's blue pencil — because the site-wide
     annotation rule (Chey, 2026-07-27) bans same-ink marks ON text: this
     strike crosses out near-black words, so it cannot be near-black itself.
     Drawn on with a clip-path wipe so the wobble is never stretched.
     Anchored to the TEXT row (padding-top + half a line), not to 50% of the
     strip — the tear reserve at the bottom makes 50% sit well below the words. */
  .brick::after{content:"";position:absolute;left:50px;right:18px;top:28px;height:17px;
    background:var(--accent);opacity:.92;pointer-events:none;
    -webkit-mask:var(--paint-underline) left center/100% 100% no-repeat;
            mask:var(--paint-underline) left center/100% 100% no-repeat;
    clip-path:inset(0 100% 0 0);
    transition:clip-path .6s cubic-bezier(.6,0,.15,1)}
  .brick.cut{color:#6b6252}
  .brick.cut .ic{color:#6b6252}
  .brick.cut::after{clip-path:inset(0 0 0 0)}
  @media(prefers-reduced-motion:reduce){.brick::after{transition:none}}
  /* EXPLICIT EXCEPTION (task 05:53): the punch line keeps ONE font for both
     halves — no FL face here. The grey half goes white, the blue half stays
     blue but in the same sans as the line above it. */
  .prob-punch{margin-top:clamp(46px,6vw,80px);font-size:clamp(1.8rem,4vw,3rem);font-weight:650;letter-spacing:-.035em;line-height:1.12;max-width:22ch}
  .prob-punch .soft{font-family:var(--sans);font-size:1em;letter-spacing:-.035em;display:inline;color:#fff;font-weight:650}
  .prob-punch b{font-family:var(--sans);color:var(--accent);font-weight:650}

  /* ---------- assembly (signature scroll) ---------- */
  /* The assembly is the flagged "do not touch" animated section — every
     transform, canvas and tile stays exactly as it was. The ONLY change is
     this background: it was a near-black gradient, which would have sat as a
     460vh black slab in the middle of a page that is otherwise paper (task
     07:55). Transparent lets the canvas texture run behind it. */
  .assemble{position:relative;height:460vh;background:transparent;isolation:isolate}
  .assemble-sticky{position:sticky;top:0;height:100svh;overflow:hidden;display:grid;place-items:center;perspective:1500px}
  .assemble-sticky::before{content:"";position:absolute;inset:0;z-index:0;pointer-events:none;background:radial-gradient(ellipse 60% 50% at 50% 50%,rgba(7,123,255,.10),transparent 62%)}
  #assembleCanvas{position:absolute;inset:0;width:100%;height:100%;z-index:1;pointer-events:none}
  .assemble-stage{position:relative;z-index:2;width:min(880px,92vw);height:min(560px,64vh);transform-style:preserve-3d}
  .atile{position:absolute;left:50%;top:50%;width:var(--w,140px);display:grid;justify-items:center;gap:9px;transform-style:preserve-3d;will-change:transform,opacity}
  .atile-ic{width:clamp(46px,4.6vw,60px);height:clamp(46px,4.6vw,60px);border-radius:13px;display:grid;place-items:center;color:#fff;position:relative;overflow:hidden;
    background-image:linear-gradient(155deg,rgba(255,255,255,.2),rgba(255,255,255,.03) 40%,rgba(1,4,10,.42)),var(--art,linear-gradient(145deg,#2a5fa0,#0a0e14));
    background-size:cover,var(--art-size,cover);background-position:center,var(--art-pos,center);
    border:1px solid rgba(255,255,255,.24);box-shadow:0 20px 44px -18px rgba(0,0,0,.96),0 0 30px color-mix(in srgb,var(--pc,#77b5ff) 22%,transparent),inset 0 1px 0 rgba(255,255,255,.3)}
  .atile-ic svg{position:relative;z-index:2;width:44%;height:44%;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;filter:drop-shadow(0 2px 6px rgba(0,0,0,.5))}
  .atile-nm{font-size:clamp(.62rem,.9vw,.78rem);font-weight:600;color:var(--ink);white-space:nowrap;opacity:var(--label-o,0);transition:opacity .2s linear, color 0.8s ease}
  .assemble-core{position:absolute;left:50%;top:50%;z-index:3;translate:-50% -50%;display:grid;place-items:center;text-align:center;opacity:var(--core-o,0);transform:scale(var(--core-s,.6));filter:blur(var(--core-blur,6px))}
  .assemble-core-mark{width:clamp(74px,7vw,100px);height:clamp(74px,7vw,100px);border-radius:22px;display:grid;place-items:center;background:radial-gradient(circle at 40% 30%,#2c8aff,#052350 66%);border:1px solid rgba(176,211,250,.4);box-shadow:0 0 0 14px rgba(83,139,207,.04),0 0 80px rgba(39,127,235,.4),inset 0 1px 0 rgba(255,255,255,.32)}
  .assemble-core-mark img{width:58%;height:58%;object-fit:contain;display:block;filter:drop-shadow(0 2px 8px rgba(0,0,0,.4))}
  .assemble-copy{position:absolute;left:0;right:0;z-index:4;text-align:center;padding:0 24px;pointer-events:none}
  .assemble-copy.top{top:clamp(88px,13vh,150px)}
  .assemble-copy.bot{bottom:clamp(78px,12vh,130px)}
  .assemble-copy h2{font-size:clamp(2rem,4.8vw,3.7rem);font-weight:680;letter-spacing:-.035em;line-height:1.04;color:var(--ink);opacity:0;transform:translateY(20px);transition:opacity .7s ease,transform .7s ease,color 0.8s ease}
  .assemble-copy p{max-width:600px;margin:18px auto 0;color:var(--dim);font-size:clamp(1rem,1.5vw,1.2rem);line-height:1.6;opacity:0;transform:translateY(20px);transition:opacity .7s ease .1s,transform .7s ease .1s,color 0.8s ease}
  .assemble-copy.show h2,.assemble-copy.show p{opacity:1;transform:none}
  .assemble-hint{position:absolute;bottom:26px;left:50%;transform:translateX(-50%);z-index:4;font-family:var(--mono);font-size:.68rem;letter-spacing:.2em;text-transform:uppercase;color:var(--faint);opacity:.7;transition:opacity .4s, color 0.8s ease}
  @media(max-width:640px){.assemble{height:420vh}.assemble-stage{width:94vw;height:70vh}}
  @media(prefers-reduced-motion:reduce){
    .assemble{height:auto}.assemble-sticky{position:relative;height:auto;padding:80px 0}
    .atile{position:relative;left:auto;top:auto;transform:none!important;opacity:1!important}.assemble-stage{height:auto;display:grid;grid-template-columns:repeat(3,1fr);gap:20px}
    .assemble-core{position:relative;translate:0;opacity:1;transform:none;filter:none;margin:30px auto 0}
    .assemble-copy{position:relative;top:auto;bottom:auto;margin:24px 0}.assemble-copy h2,.assemble-copy p{opacity:1;transform:none}.atile-nm{opacity:1}
  }

  /* ---------- modules grid ---------- */
  .mod-head{max-width:760px}
  .mod-head h2{font-size:clamp(2.1rem,4.4vw,3.4rem)}
  .mod-head .quiet{margin-top:22px}
  /* ---------- modules — white paper cards, torn bottom, straddling art tile ----------
     Each card wears the same gradient-art tile its module wears in the
     assembly animation above, straddling the card's top edge.
     The row gap and top margin below must both clear the 32px of tile that
     rides ABOVE each card, or the tiles collide with the intro copy and with
     the row above. */
  .mods{margin-top:clamp(72px,7vw,92px);display:grid;grid-template-columns:repeat(3,1fr);gap:56px 18px}
  @media(max-width:900px){.mods{grid-template-columns:repeat(2,1fr)}}
  @media(max-width:560px){.mods{grid-template-columns:1fr}}
  /* The reveal lives on this unmasked wrapper, so the card is free to use
     translate:/rotate: for hover (.rv.on forces transform:none).
     position:relative belongs here and NOT on .mod: .mod is masked, and a mask
     clips its children, so the half of the tile that rides above the card's
     top edge would be cut away. The tile anchors to this wrapper instead. */
  .mods .card-sh{position:relative;display:flex;transition:filter .3s ease}
  .mods .card-sh:hover{filter:var(--shadow-1-hover-d,var(--shadow-1-d)) drop-shadow(0 10px 16px rgba(0,0,0,.2))}
  .mod{position:relative;flex:1;min-height:248px;display:grid;grid-template-columns:minmax(0,1fr);
    border:0;border-radius:3px 3px 0 0;overflow:hidden;
    background:var(--pp-speck-w) var(--pp-sp,0 0)/var(--pp-s-size) repeat,
               var(--pp-grain-w) var(--pp-gp,0 0)/var(--pp-g-size) repeat #fff;
    background-blend-mode:multiply,multiply;
    transition:translate .3s cubic-bezier(.2,.7,.2,1),rotate .3s cubic-bezier(.2,.7,.2,1);
    -webkit-mask-repeat:repeat-x,no-repeat;mask-repeat:repeat-x,no-repeat;
    -webkit-mask-size:300px 48px,100% calc(100% - 46px);mask-size:300px 48px,100% calc(100% - 46px);
    -webkit-mask-position:bottom left,top;mask-position:bottom left,top}
  .mods .card-sh:nth-child(4n+1) .mod{-webkit-mask-image:var(--tx1),linear-gradient(#000,#000);mask-image:var(--tx1),linear-gradient(#000,#000)}
  .mods .card-sh:nth-child(4n+2) .mod{--pp-sp:120px 70px;--pp-gp:40px 150px;-webkit-mask-image:var(--tx3),linear-gradient(#000,#000);mask-image:var(--tx3),linear-gradient(#000,#000)}
  .mods .card-sh:nth-child(4n+3) .mod{--pp-sp:200px 130px;--pp-gp:90px 30px;-webkit-mask-image:var(--tx2),linear-gradient(#000,#000);mask-image:var(--tx2),linear-gradient(#000,#000)}
  .mods .card-sh:nth-child(4n) .mod{--pp-sp:60px 210px;--pp-gp:170px 90px;-webkit-mask-image:var(--tx4),linear-gradient(#000,#000);mask-image:var(--tx4),linear-gradient(#000,#000)}
  /* the paper lifts and tilts on hover instead of a glowing border */
  .mod:hover{translate:0 -3px;rotate:-.4deg}
  /* the straddling art tile: the module's own gradient ground from the
     assembly animation (--art/--art-pos/--art-size come in per card from the
     markup, matching that module's .atile), white icon on top. Half of it
     hangs above the card's top edge — see the .card-sh note above for why it
     cannot live inside .mod. `translate:` rather than `transform:` keeps the
     hover clear of the wrapper's .rv reveal. */
  .mod-tile{position:absolute;left:50%;top:-32px;z-index:3;translate:-50% 0;
    width:64px;height:64px;border-radius:14px;overflow:hidden;pointer-events:none;
    display:grid;place-items:center;color:#fff;
    background-image:linear-gradient(155deg,rgba(255,255,255,.2),rgba(255,255,255,.03) 40%,rgba(1,4,10,.42)),var(--art,linear-gradient(145deg,#2a5fa0,#0a0e14));
    background-size:cover,var(--art-size,cover);
    background-position:center,var(--art-pos,center);
    border:1px solid rgba(255,255,255,.22);
    box-shadow:0 10px 20px -8px rgba(23,20,14,.45),0 3px 6px rgba(23,20,14,.2),inset 0 1px 0 rgba(255,255,255,.28);
    transition:translate .3s cubic-bezier(.2,.7,.2,1),box-shadow .3s ease}
  .mod-tile svg{width:55%;height:55%;fill:none;overflow:visible;
    filter:drop-shadow(0 2px 5px rgba(0,0,0,.45));
    transition:scale .55s cubic-bezier(.2,.65,.25,1)}
  .mods .card-sh:hover .mod-tile{translate:-50% -4px;
    box-shadow:0 16px 26px -8px rgba(23,20,14,.5),0 4px 8px rgba(23,20,14,.22),inset 0 1px 0 rgba(255,255,255,.28)}
  .mods .card-sh:hover .mod-tile svg{scale:1.08}

  /* ---------- blur -> sharp pop-in (global rule 6) ----------
     filter + opacity ONLY. transform is spoken for three times over on this
     page — the .rv reveal writes transform, the card hovers write scale, and
     the carousels write translate — so a transform-based load state would be
     fighting all three. JS adds .is-loaded (fp-landing.js); the transition
     lives on the loaded state's source rule so the blur is actually seen
     resolving rather than being skipped on a cache hit. */
  .tdc-media img{filter:blur(14px);opacity:.55}
  .tdc-media img.is-loaded{filter:blur(0);opacity:1}
  /* the video cards blur the media well itself, so the same rule covers the
     poster however it's delivered */
  .ucard-media{filter:blur(14px);opacity:.55;transition:filter .55s ease,opacity .4s ease}
  .ucard-media.is-loaded{filter:blur(0);opacity:1}
  @media(prefers-reduced-motion:reduce){
    .tdc-media img,.ucard-media{filter:none;opacity:1;transition:none}
  }
  /* top padding clears the 32px of tile that sits ON the card, plus air */
  .mod-body{display:flex;flex-direction:column;padding:54px 24px calc(20px + var(--tear-amp))}
  .mod h4{font-size:1.12rem;font-weight:700;letter-spacing:-.02em;color:#141109}
  .mod p{margin-top:9px;color:#4a4234;font-size:.93rem;line-height:1.54}
  .mod .tags{margin-top:auto;padding-top:18px;display:flex;flex-wrap:wrap;gap:7px}
  /* ink-outline chips on paper — no monospace, no blue on cream */
  .mod .tags span{font-family:var(--mono);font-size:.7rem;font-weight:600;letter-spacing:.03em;
    text-transform:uppercase;color:#4a4234;border:1px solid rgba(30,22,10,.26);border-radius:2px;
    padding:4px 8px;transition:color .25s,border-color .25s,background .25s}
  .mod:hover .tags span{color:#fff;background:#17140e;border-color:#17140e}
  /* min-width:0 down the whole chain — a grid/flex item defaults to
     min-width:auto; nothing here should use intrinsic width to size. The tile
     stays centred and straddling at every width, so the body keeps its
     tile-clearing top padding. */
  @media(max-width:700px){
    .mods .card-sh{min-width:0}
    .mod{min-width:0}
    .mod-body{padding:52px 22px calc(18px + var(--tear-amp))}
  }
  @media(prefers-reduced-motion:reduce){.mod,.mod-tile,.mod-tile svg{transition:none}}

  
  /* ---------- award-winning studio polish ---------- */
  .ill-svg { width: 46%; height: 46%; overflow: visible; fill: none; }
  .atile-ic .ill-svg { filter: drop-shadow(0 2px 6px rgba(0,0,0,0.3)); }
  .ill-svg * { transition: all 0.6s cubic-bezier(0.16, 1, 0.3, 1); transform-origin: center; }

  /* The per-icon hover micro-animations and the radial "spotlight" border
     glow both belonged to the old gradient icon tiles and the dark AI card.
     Both are gone — the module card is paper now, and it behaves like paper.
     The #ic-* defs stay: the assembly section and the stack strips use them. */

  /* ---------- built for direct selling (contrast) ---------- */
  .native .display{max-width:16ch}
  .native .quiet{margin-top:24px;max-width:640px}
  .pairs{margin-top:clamp(44px,5vw,68px);border-top:1px solid var(--line)}
  .pair{display:grid;grid-template-columns:1fr 1fr;border-bottom:1px solid var(--line);transition:background .3s}
  .pair:hover{background:rgba(255,255,255,.015)}
  @media(max-width:720px){.pair{grid-template-columns:1fr}}
  .pair>div{padding:24px 26px}
  .pair .old{color:var(--z-dim);font-size:1.04rem;line-height:1.45;display:flex;gap:13px;align-items:flex-start}
  .pair .new{font-size:1.1rem;font-weight:550;line-height:1.4;border-left:1px solid var(--line);display:flex;gap:13px;align-items:flex-start}
  @media(max-width:720px){.pair .new{border-left:0;padding-top:0}}
  .pair .new b{color:var(--z-ink);font-weight:650}
  /* task 07:35 — the ✕ and → marks are hand-drawn now. The cross is a
     .fluid-stroke SVG (SMIL turbulence via #wobble-stroke); the arrow is the
     brand's painted-arrow asset carrying the JS-stepped #wobble-el twin.
     Both take their ink from currentColor, so neither can go colour-on-colour. */
  /* NAME COLLISION, worth knowing: we-freeform.css strokes with
     var(--ink, currentColor), and this page's :root also defines --ink as its
     light body text. Left alone the cross inherits #eeede8 and vanishes on
     cream. Re-point --ink at the element's own colour inside the mark. */
  .pair .x{flex:0 0 21px;width:21px;height:21px;margin-top:.14em;display:block;
    --ink:currentColor;color:var(--z-cross)}
  .pair .x svg{display:block;width:100%;height:100%;overflow:visible}
  .pair .c{flex:0 0 auto;margin-top:.3em;width:1.35em;height:.75em;margin-right:0;color:var(--accent)}
  .lightzone .pair .c{color:var(--z-accent)}

  /* ---------- mist bridge ---------- */
  .mist{position:relative;padding:clamp(96px,13vw,180px) 0;background:transparent;overflow:hidden}
  /* the big blurred blue orb was the loudest "AI" tell on the page — replaced
     by a faint, flat vignette that lets the paper canvas read through. */
  .mist::before{content:"";position:absolute;left:50%;top:46%;width:min(900px,120vw);aspect-ratio:1;translate:-50% -50%;z-index:0;border-radius:50%;background:radial-gradient(circle,rgba(66,177,255,.06),transparent 62%)}
  .mist-inner{position:relative;z-index:2;max-width:820px;margin:0 auto;text-align:center}
  /* .mist-badge / .mist-badge .spark removed — no such markup in this section,
     and both still carried the retired #077bff blue. */
  .mist h2{margin-top:26px;font-size:clamp(2.2rem,5.2vw,4rem);letter-spacing:-.04em;line-height:1.03}
  /* gradient-filled text is an AI-landing-page tell. One flat blue, FL face. */
  .mist h2 .grad{font-family:var(--hand);font-weight:700;font-size:1.08em;letter-spacing:.005em;
    color:var(--accent);background:none;-webkit-background-clip:border-box;background-clip:border-box;
    display:inline-block;rotate:-.6deg}
  .mist .quiet{margin:26px auto 0;max-width:640px}
  .mist-ctas{margin-top:40px;display:flex;gap:14px;flex-wrap:wrap;justify-content:center}

  /* ---------- stats band — a long white strip torn on BOTH sides ----------
     task 08:40: FL-font numerals, one strip inside the main margin (not
     bleeding off-page), equal height, divider rules kept. Same recipe as
     the teardown .statbar. */
  .stats{background:transparent;border:0;padding:clamp(20px,3vw,40px) 0}
  .stats-wrap{max-width:1160px;margin:0 auto;padding:0 24px}
  .statbar-sh{filter:var(--tear-slip)}
  .statbar{display:grid;grid-template-columns:repeat(4,1fr);gap:0;rotate:-.4deg;
    background:var(--pp-speck-w) 0 0/var(--pp-s-size) repeat,
               var(--pp-grain-w) 0 0/var(--pp-g-size) repeat #fff;
    background-blend-mode:multiply,multiply;
    padding-inline:var(--tear-amp);
    -webkit-mask-image:var(--tv-l2),var(--tv-r1),linear-gradient(#000,#000);
            mask-image:var(--tv-l2),var(--tv-r1),linear-gradient(#000,#000);
    -webkit-mask-repeat:repeat-y,repeat-y,no-repeat;mask-repeat:repeat-y,repeat-y,no-repeat;
    -webkit-mask-size:48px 300px,48px 300px,calc(100% - 92px) 100%;
            mask-size:48px 300px,48px 300px,calc(100% - 92px) 100%;
    -webkit-mask-position:left top,right top,center;mask-position:left top,right top,center}
  @media(max-width:820px){.statbar{grid-template-columns:repeat(2,1fr)}}
  .statbar .stat{position:relative;padding:clamp(22px,2.6vw,32px) clamp(14px,1.8vw,24px);
    display:flex;flex-direction:column;justify-content:flex-start}
  /* the lines Chey asked to keep — hairlines between cells, inset top/bottom */
  .statbar .stat + .stat::before{content:"";position:absolute;left:0;top:20%;bottom:20%;width:1px;
    background:rgba(30,22,10,.18)}
  @media(max-width:820px){.statbar .stat:nth-child(3)::before,.statbar .stat:nth-child(3){border-top:0}
    .statbar .stat:nth-child(3)::before{display:none}}
  .statbar .stat .m{font-family:var(--hand);font-weight:700;font-variant-numeric:tabular-nums;
    font-size:clamp(2.2rem,4vw,3.1rem);letter-spacing:.005em;line-height:.92;color:#141109}
  /* the unit glyphs sit on WHITE PAPER, so blue is outlawed here (2.34:1).
     Routed to ink at .47 alpha — ~3.2:1, matching the treatment the global
     sweep applied to the 19 teardowns and the index. Edited on the original
     full selector: a shorter appended rule would silently lose to this one. */
  .statbar .stat .m .u{color:rgba(20,17,9,.47)}
  .statbar .stat .l{margin-top:12px;color:#4a4234;font-size:.9rem;line-height:1.42}
  /* one photocopy speck riding the strip's bottom edge — it must overlap the
     white paper, since multiply over the dark canvas would be invisible. */
  .statbar-sh{position:relative}
  .statbar-sh::after{content:"";position:absolute;pointer-events:none;z-index:2;left:11%;bottom:-26px;
    width:118px;height:94px;background:var(--we-tex-speck-5) center/contain no-repeat;
    opacity:.26;mix-blend-mode:multiply}

  /* ---------- capability marquee ---------- */
  .capabilities-sx{background:transparent}
  .marq{margin:clamp(20px,3vw,40px) 0 0;display:grid;gap:14px;-webkit-mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent);mask-image:linear-gradient(90deg,transparent,#000 12%,#000 88%,transparent)}
  .mrow{display:flex;gap:14px;width:max-content;will-change:transform}
  .mrow.a{animation:mL 40s linear infinite}
  .mrow.b{animation:mR 46s linear infinite}
  @keyframes mL{to{transform:translateX(-50%)}}
  @keyframes mR{from{transform:translateX(-50%)}to{transform:translateX(0)}}
  .mword{display:flex;align-items:center;gap:14px;font-size:clamp(1.4rem,3vw,2.4rem);font-weight:650;letter-spacing:-.03em;color:rgba(255,255,255,.4);white-space:nowrap}
  .mword::after{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent);opacity:.6}
  /* the highlighted words carry the FL display face, so the marquee reads as
     the brand's own hand rather than a generic bold sans */
  .mword.hot{font-family:var(--hand);font-weight:700;letter-spacing:.005em;color:#fff}
  @media(prefers-reduced-motion:reduce){.mrow.a,.mrow.b{animation:none}}

  /* The .finale block was ~20 rules of dead CSS — no .finale markup exists in
     sections/fluid_platform/index.liquid. Removed. */

  /* ---------- faq ---------- */
  .faq-sx{background:transparent;color:#fff}
  .faq-head{max-width:640px}
  .faq-sx .display{color:#fff}
  .faq-sx .kick .n{color:rgba(255,255,255,.5)}
  .faq-sx .kick .ln{background:rgba(255,255,255,.1)}
  .faq-sx details{border-top:1px solid rgba(255,255,255,.1)}
  .faq-sx details:last-of-type{border-bottom:1px solid rgba(255,255,255,.1)}
  summary{cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;gap:20px;padding:26px 4px;font-size:clamp(1.06rem,1.7vw,1.28rem);font-weight:600;letter-spacing:-.01em}
  summary::-webkit-details-marker{display:none}
  summary .pm{flex-shrink:0;width:30px;height:30px;border:1px solid rgba(255,255,255,.18);border-radius:3px;display:flex;align-items:center;justify-content:center;font-size:1.1rem;font-weight:400;color:rgba(255,255,255,.55);transition:rotate .3s,color .3s,border-color .3s,background .3s}
  details[open] summary .pm{rotate:45deg;color:#050a12;background:var(--accent);border-color:var(--accent)}
  .faq-a{padding:0 4px 30px;color:rgba(255,255,255,.6);max-width:660px;line-height:1.65}
  .faq-a b{color:#fff;font-weight:600}
  .faq-a a{color:var(--accent-2)}

  /* ---------- footer ----------
     Stays dark on purpose (it is meant to stand apart), but it is painted
     with the SAME --we-paper-dark stock as the body canvas, so any trailing
     strip the platform wrapper leaves below it is indistinguishable instead
     of showing as a lighter mismatched band. (tasks 11:20 + 11:47)
     The 34%-wide 2px accent rule that read as a fake video scrub bar —
     footer::before — is deleted, not hidden. */
  footer{position:relative;z-index:3;background-color:#05070a;background-image:var(--we-paper-dark);
    background-size:cover;background-position:center;background-attachment:fixed;
    border-top:0;margin-top:0;padding:clamp(72px,9vw,120px) 0 60px;overflow:hidden;color:#fff}
  .foot-main{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(300px,.6fr);gap:clamp(48px,9vw,120px);align-items:end}
  .foot-statement{max-width:13ch;font-size:clamp(2.5rem,5.4vw,5rem);font-weight:650;letter-spacing:-.045em;line-height:.98;color:#fff}
  /* same treatment as every other grey second-half on the page (task 05:03) */
  .foot-statement span{display:block;font-family:var(--hand);font-weight:700;font-size:1.04em;
    letter-spacing:.005em;line-height:1;color:var(--accent)}
  .foot-side p{max-width:34ch;color:rgba(255,255,255,.62);font-size:clamp(1rem,1.3vw,1.14rem);line-height:1.6}
  /* the closer is a brand button PAIR (primary + ghost), not two text links —
     so it reads as the same CTA vocabulary as the hero and the mist bridge */
  .foot-actions{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:30px}
  .foot-link{color:#fff;font-size:.95rem;font-weight:600;border-bottom:1px solid rgba(255,255,255,.35);padding-bottom:4px;transition:color .2s,border-color .2s}
  .foot-link:hover{color:#fff;border-color:var(--accent)}
  .foot-bar{display:flex;justify-content:space-between;align-items:center;gap:28px;margin-top:clamp(64px,9vw,110px);padding-top:28px;border-top:1px solid rgba(255,255,255,.1);flex-wrap:wrap}
  .foot-brand{display:flex;align-items:center;gap:16px;min-width:0}
  .foot-brand img{display:block;width:auto;height:30px;max-width:180px;object-fit:contain;filter:brightness(0) invert(1)}
  .foot-brand span{color:#656a74;font-size:.76rem}
  .foot-nav{display:flex;align-items:center;gap:clamp(16px,2.4vw,32px);flex-wrap:wrap}
  .foot-nav a{color:rgba(255,255,255,.5);font-size:.86rem;transition:color .2s}
  .foot-nav a:hover{color:#fff}
  @media(max-width:760px){.foot-main{grid-template-columns:1fr;gap:36px}.foot-statement{max-width:11ch}.foot-bar{flex-direction:column;align-items:flex-start}}

  /* ===== experts UGC carousel (9:16) ===== */
  .ugc{position:relative;padding:clamp(66px,8vw,120px) 0;background:transparent;overflow:hidden}
  /* task 09:33 — a hand-drawn ring around "grow", built from the freeform
     annotation layer (.fluid-stroke = live turbulence + .we-draw draw-on).
     SITE-WIDE RULE (Chey, 2026-07-27): an annotation must never share its
     ink with the text it marks — white-on-white and black-on-black are both
     banned. On white or black text the mark takes the page accent instead. */
  .anno-circle{position:relative;display:inline-block;white-space:nowrap}
  .anno-ring{position:absolute;left:-13%;top:-26%;width:126%;height:152%;overflow:visible;
    pointer-events:none;z-index:-1;--ink:var(--accent)}
  .ugc-wrap{max-width:1580px;margin:0 auto;padding:0 clamp(20px,5vw,72px)}
  .ugc-head{display:flex;align-items:flex-end;justify-content:space-between;gap:36px;margin-bottom:clamp(30px,4vw,54px)}
  .ugc-head h2{font-size:clamp(2rem,4.4vw,3.4rem);font-weight:650;letter-spacing:-.032em;line-height:1.06;color:var(--ink);max-width:15ch}
  .ugc-head p{margin-top:18px;font-size:clamp(1rem,1.2vw,1.08rem);line-height:1.55;color:var(--dim);max-width:50ch}
  .ugc-nav{display:flex;gap:12px;flex-shrink:0;padding-bottom:6px}
  .ugc-arrow{width:48px;height:48px;border-radius:4px;border:1px solid rgba(255,255,255,.24);background:rgba(255,255,255,.04);color:var(--ink);display:flex;align-items:center;justify-content:center;cursor:pointer;box-shadow:2px 2px 0 rgba(0,0,0,.45);transition:background .25s,border-color .25s,opacity .25s,translate .25s,box-shadow .25s}
  .ugc-arrow:hover:not(:disabled){background:#fff;border-color:#fff;color:#0c0d10;translate:0 -2px;box-shadow:3px 4px 0 rgba(0,0,0,.5)}
  .ugc-arrow:disabled{opacity:.3;cursor:default;box-shadow:none}
  .ugc-arrow svg{width:20px;height:20px}
  .ugc-track{display:flex;gap:clamp(16px,1.6vw,26px);overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;padding:10px 0 34px;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .ugc-track::-webkit-scrollbar{display:none}

  /* ---- task 10:23 — the video cards take the teardown paper-card chassis:
     white paper, a print margin around the clip, a torn bottom edge, and the
     caption UNDERNEATH the image at reading size (not a chip floating on it).
     The shadow is cast by the unmasked <button> wrapper, since a mask would
     clip the card's own drop-shadow. ---- */
  .ucard-sh{flex:0 0 auto;width:clamp(232px,23vw,300px);margin:0;padding:0;border:0;background:none;
    text-align:left;cursor:pointer;scroll-snap-align:start;filter:var(--shadow-1-d);
    opacity:0;translate:0 32px;
    transition:opacity .6s ease var(--d,0ms),translate .7s cubic-bezier(.2,.7,.2,1) var(--d,0ms),filter .35s ease}
  .ugc.in .ucard-sh{opacity:1;translate:0 0}
  .ucard{position:relative;display:block;border-radius:3px 3px 0 0;
    padding:11px 11px calc(15px + var(--tear-amp));
    background:var(--pp-speck-w) var(--pp-sp,0 0)/var(--pp-s-size) repeat,
               var(--pp-grain-w) var(--pp-gp,0 0)/var(--pp-g-size) repeat #fff;
    background-blend-mode:multiply,multiply;
    transition:translate .35s cubic-bezier(.2,.7,.2,1),rotate .35s cubic-bezier(.2,.7,.2,1);
    -webkit-mask-repeat:repeat-x,no-repeat;mask-repeat:repeat-x,no-repeat;
    -webkit-mask-size:300px 48px,100% calc(100% - 46px);mask-size:300px 48px,100% calc(100% - 46px);
    -webkit-mask-position:bottom left,top;mask-position:bottom left,top}
  .ugc-track .ucard-sh:nth-child(4n+1) .ucard{-webkit-mask-image:var(--tx2),linear-gradient(#000,#000);mask-image:var(--tx2),linear-gradient(#000,#000)}
  .ugc-track .ucard-sh:nth-child(4n+2) .ucard{--pp-sp:120px 70px;--pp-gp:40px 150px;-webkit-mask-image:var(--tx4),linear-gradient(#000,#000);mask-image:var(--tx4),linear-gradient(#000,#000)}
  .ugc-track .ucard-sh:nth-child(4n+3) .ucard{--pp-sp:200px 130px;--pp-gp:90px 30px;-webkit-mask-image:var(--tx1),linear-gradient(#000,#000);mask-image:var(--tx1),linear-gradient(#000,#000)}
  .ugc-track .ucard-sh:nth-child(4n) .ucard{--pp-sp:60px 210px;--pp-gp:170px 90px;-webkit-mask-image:var(--tx3),linear-gradient(#000,#000);mask-image:var(--tx3),linear-gradient(#000,#000)}
  .ucard-sh:hover{filter:var(--shadow-1-d) drop-shadow(0 12px 18px rgba(0,0,0,.22))}
  .ucard-sh:hover .ucard{translate:0 -4px;rotate:-.5deg}
  .ucard-sh:focus-visible{outline:2.5px solid var(--accent);outline-offset:4px}
  .ucard-media{position:relative;display:block;aspect-ratio:9/16;overflow:hidden;background:#e9e5dc}
  /* a still poster frame — the clip itself only ever plays in the lightbox
     (Chey, 2026-07-27: no hover-play; play is a deliberate click) */
  .ucard-media img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;background:#e9e5dc}
  .uplay{position:absolute;inset:0;z-index:2;display:flex;align-items:center;justify-content:center;pointer-events:none;transition:opacity .3s}
  .uplay svg{width:54px;height:54px;filter:drop-shadow(0 6px 16px rgba(0,0,0,.6));transition:scale .3s}
  .ucard-sh:hover .uplay svg{scale:1.09}
  /* the caption: under the image, at reading size */
  .ucard-cap{display:block;margin-top:13px;font-size:1rem;font-weight:700;letter-spacing:-.012em;
    line-height:1.28;color:#141109}
  @media(max-width:640px){.ugc-head{flex-direction:column;align-items:flex-start;gap:20px}.ugc-nav{display:none}.ucard-sh{width:73vw}}
  @media(prefers-reduced-motion:reduce){.ucard-sh{opacity:1;translate:0 0;transition:none}.ucard{transition:none}}

  /* portrait video lightbox (self-contained) */
  .lightbox{position:fixed;inset:0;z-index:1000;display:flex;align-items:center;justify-content:center;padding:clamp(16px,4vw,60px);background:rgba(4,5,8,.9);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);opacity:0;pointer-events:none;transition:opacity .35s}
  .lightbox.open{opacity:1;pointer-events:auto}
  .lb-inner{position:relative;border-radius:16px;overflow:hidden;background:#000;box-shadow:0 50px 130px rgba(0,0,0,.85);transform:scale(.95);transition:transform .4s cubic-bezier(.2,.7,.2,1);width:min(92vw,460px);height:min(88vh,818px);max-width:460px;aspect-ratio:9/16}
  .lightbox.open .lb-inner{transform:none}
  .lb-inner video{width:100%;height:100%;object-fit:contain;display:block;background:#000}
  .lb-close{position:absolute;top:14px;right:14px;z-index:4;width:46px;height:46px;border-radius:50%;background:rgba(10,12,16,.6);border:1px solid rgba(255,255,255,.2);color:#fff;font-size:1.4rem;line-height:1;cursor:pointer;display:flex;align-items:center;justify-content:center;transition:background .2s}
  .lb-close:hover{background:var(--accent);border-color:transparent}

  /* ===== recent teardowns carousel ===== */
  .tdc{position:relative;padding:clamp(66px,8vw,120px) 0;background:transparent;overflow:hidden}
  .tdc-wrap{max-width:1580px;margin:0 auto;padding:0 clamp(20px,5vw,72px)}
  .tdc-head{display:flex;align-items:flex-end;justify-content:space-between;gap:36px;margin-bottom:clamp(30px,4vw,54px)}
  .tdc-headtext{max-width:60ch}
  .tdc-head h2{font-size:clamp(2rem,4.4vw,3.4rem);font-weight:650;letter-spacing:-.032em;line-height:1.06;color:var(--ink);max-width:16ch}
  .tdc-head p{margin-top:18px;font-size:clamp(1rem,1.2vw,1.08rem);line-height:1.55;color:var(--dim);max-width:52ch}
  .tdc-browse{display:inline-flex;align-items:center;gap:8px;margin-top:18px;font-size:.9rem;font-weight:600;color:var(--accent-2)}
  .tdc-browse svg{width:16px;height:16px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;transition:transform .2s}
  .tdc-browse:hover svg{transform:translateX(4px)}
  .tdc-nav{display:flex;gap:12px;flex-shrink:0;padding-bottom:6px}
  .tdc-track{display:flex;gap:clamp(16px,1.6vw,26px);overflow-x:auto;scroll-snap-type:x mandatory;scroll-behavior:smooth;padding:10px 0 34px;scrollbar-width:none;-webkit-overflow-scrolling:touch}
  .tdc-track::-webkit-scrollbar{display:none}
  /* same paper-card chassis as the video cards — these were navy "AI" panels
     with the category floating on the photo in a little pill. */
  .tdc-sh{flex:0 0 auto;width:clamp(242px,24vw,310px);scroll-snap-align:start;filter:var(--shadow-1-d);
    opacity:0;translate:0 32px;
    transition:opacity .6s ease var(--d,0ms),translate .7s cubic-bezier(.2,.7,.2,1) var(--d,0ms),filter .35s ease}
  .tdc.in .tdc-sh{opacity:1;translate:0 0}
  .tdc-card{position:relative;display:flex;flex-direction:column;border:0;border-radius:3px 3px 0 0;
    padding:11px 11px calc(16px + var(--tear-amp));
    background:var(--pp-speck-w) var(--pp-sp,0 0)/var(--pp-s-size) repeat,
               var(--pp-grain-w) var(--pp-gp,0 0)/var(--pp-g-size) repeat #fff;
    background-blend-mode:multiply,multiply;
    transition:translate .35s cubic-bezier(.2,.7,.2,1),rotate .35s cubic-bezier(.2,.7,.2,1);
    -webkit-mask-repeat:repeat-x,no-repeat;mask-repeat:repeat-x,no-repeat;
    -webkit-mask-size:300px 48px,100% calc(100% - 46px);mask-size:300px 48px,100% calc(100% - 46px);
    -webkit-mask-position:bottom left,top;mask-position:bottom left,top}
  .tdc-track .tdc-sh:nth-child(4n+1) .tdc-card{-webkit-mask-image:var(--tx3),linear-gradient(#000,#000);mask-image:var(--tx3),linear-gradient(#000,#000)}
  .tdc-track .tdc-sh:nth-child(4n+2) .tdc-card{--pp-sp:120px 70px;--pp-gp:40px 150px;-webkit-mask-image:var(--tx1),linear-gradient(#000,#000);mask-image:var(--tx1),linear-gradient(#000,#000)}
  .tdc-track .tdc-sh:nth-child(4n+3) .tdc-card{--pp-sp:200px 130px;--pp-gp:90px 30px;-webkit-mask-image:var(--tx4),linear-gradient(#000,#000);mask-image:var(--tx4),linear-gradient(#000,#000)}
  .tdc-track .tdc-sh:nth-child(4n) .tdc-card{--pp-sp:60px 210px;--pp-gp:170px 90px;-webkit-mask-image:var(--tx2),linear-gradient(#000,#000);mask-image:var(--tx2),linear-gradient(#000,#000)}
  .tdc-sh:hover{filter:var(--shadow-1-d) drop-shadow(0 12px 18px rgba(0,0,0,.22))}
  .tdc-sh:hover .tdc-card{translate:0 -4px;rotate:.45deg}
  .tdc-card:focus-visible{outline:2.5px solid var(--accent);outline-offset:4px}
  /* display:block is load-bearing — this is a <span>, and an inline box
     ignores aspect-ratio, which collapses the whole carousel row. */
  .tdc-media{position:relative;display:block;aspect-ratio:4/5;overflow:hidden;background:#e9e5dc}
  /* transition lives here, on the one rule that owns this element — the
     load-state block above only flips filter/opacity values */
  .tdc-media img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block;
    transition:scale .5s cubic-bezier(.2,.7,.2,1),filter .55s ease,opacity .4s ease}
  .tdc-sh:hover .tdc-media img{scale:1.05}
  /* the category caption sits UNDER the photo now, in the label face */
  .tdc-cat{display:block;margin-top:12px;font-family:var(--mono);font-size:.64rem;font-weight:700;
    letter-spacing:.14em;text-transform:uppercase;color:#6b6252}
  .tdc-body{padding:4px 3px 0;display:flex;flex-direction:column;gap:5px}
  .tdc-brand{font-size:1.14rem;font-weight:700;letter-spacing:-.02em;color:#141109}
  .tdc-angle{font-size:.92rem;line-height:1.42;color:#4a4234}
  .tdc-foot{margin-top:10px;display:flex;align-items:center;justify-content:space-between;gap:10px}
  .tdc-stat{font-family:var(--hand);font-weight:700;font-size:1rem;letter-spacing:.01em;color:#141109}
  .tdc-read{display:inline-flex;align-items:center;gap:6px;font-size:.78rem;font-weight:700;color:#4a4234;transition:color .2s,gap .2s}
  .tdc-read svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
  .tdc-sh:hover .tdc-read{color:#141109;gap:9px}
  @media(max-width:640px){.tdc-head{flex-direction:column;align-items:flex-start;gap:20px}.tdc-nav{display:none}.tdc-sh{width:74vw}}
  @media(prefers-reduced-motion:reduce){.tdc-sh{opacity:1;translate:0 0;transition:none}.tdc-card{transition:none}}

/* ============================================================
   CANONICAL SITE NAV — ported by the global pass
   ------------------------------------------------------------
   One nav across all 26 pages. This page previously carried the
   bespoke `nav#nav` mega-dropdown; the markup is now the teardown
   chassis (header.nav#siteNav > .nav-inner > a.brand + nav.nav-actions
   + .dd#teardownsDd, with the torn strip hanging off the bar) and
   these rules are its stylesheet, transcribed from the COMPUTED
   styles of the reference page rather than from its cascade — the
   teardown sheets override several nav rules further down the file
   (the CTA's hard offset shadow becomes a soft ambient one, .dd-head
   becomes FLBold in brand colour), so reading the source rules alone
   would have ported a nav that does not match what ships.

   Every token the nav needs is declared ON .nav rather than on :root,
   so this block cannot re-tint the page around it (gotcha 9) and is
   byte-identical in all five files that received it.
   ============================================================ */
.nav{
  --nav-bg:#05070a;
  --nav-ink:#f7f8fa;
  --nav-line:rgba(255,255,255,.1);
  --nav-brand:#42b1ff;
  --nav-label:"WeHaas","Neue Haas Display","Helvetica Neue",sans-serif;
  --nav-sans:Inter,-apple-system,BlinkMacSystemFont,"SF Pro Display","Segoe UI",sans-serif;
  /* rag depth; the bar's own painted height derives from it — see the
     global-pass note in assets/teardown-rhode.css for the derivation. */
  --nav-tear-h:24px;
  position:fixed;top:0;left:0;right:0;z-index:100;
  height:calc(69px - .558 * var(--nav-tear-h));
  transition:box-shadow .3s,border-color .3s;
  background-color:var(--nav-bg);
  background-image:linear-gradient(rgba(5,7,10,.34),rgba(5,7,10,.52)),var(--we-paper-dark);
  background-size:cover;background-position:center;background-attachment:fixed;
  border-bottom:1px solid transparent;
  /* pinned: .btn-cta and .nav-link carry no line-height of their own, so they
     inherited each host page's body metric and the CTA measured anywhere from
     34px to 40.4px across the five. */
  font-family:var(--nav-sans);line-height:1.65}
@media(max-width:640px){.nav{--nav-tear-h:18px}}
.nav.scrolled{border-bottom-color:var(--nav-line);
  box-shadow:0 8px 18px -11px rgba(0,0,0,.53)}
/* the content box stays 68px and overflows the shorter painted bar, so
   the raised strip supplies the last stretch of paper; z-index 6 keeps
   the CTA and its shadow above the strip (which is 5). */
.nav-inner{max-width:1120px;margin:0 auto;padding:0 24px;height:68px;display:flex;
  align-items:center;justify-content:space-between;gap:20px;position:relative;z-index:6}
/* the host page may already own a .brand class (the tour's 3D-scene HUD does,
   with its own padding) — reset rather than inherit it. */
.nav .brand{display:flex;align-items:center;flex:0 0 auto;height:68px;
  padding:0;margin:0;gap:0;background:none;border:0;text-decoration:none}
.nav .brand img{display:block;width:auto;height:36px;max-width:208px;object-fit:contain}
.nav-actions{display:flex;align-items:center;gap:30px}
.nav-link{color:var(--nav-ink);font-size:.92rem;text-decoration:none;transition:color .18s ease}
.nav-link:hover{color:#fff}
.nav-link[aria-current="page"]{color:#fff}
.nav .btn-cta{display:inline-flex;align-items:center;gap:8px;padding:9px 16px;border-radius:4px;
  font-size:.85rem;font-weight:700;letter-spacing:-.01em;text-decoration:none;
  background:var(--nav-brand);color:#050a12;white-space:nowrap;
  /* BATCH (V1-F5): the §8 nav-CTA spec is a blur-free hard offset. The
     de-glow pass had replaced it with a soft ambient shadow, making this the
     only button in the theme without the analog signature. Edited HERE rather
     than appended: this rule is `.nav .btn-cta` (0,2,0) and a later bare
     `.btn-cta` (0,1,0) loses to it silently. */
  box-shadow:2px 2px 0 rgba(0,0,0,.5);
  transform:rotate(-.6deg);transition:box-shadow .18s ease,transform .18s ease}
.nav .btn-cta:hover{box-shadow:3px 4px 0 rgba(0,0,0,.55);transform:rotate(-.6deg) translateY(-1px)}
.nav .dd{position:relative}
/* `font:inherit` is a SHORTHAND and resets font-size, so it has to come
   first — after `font-size` it silently put the trigger back to the button's
   16px while the sibling .nav-links stayed at .92rem (V6-2). */
.dd-trigger{display:inline-flex;align-items:center;gap:7px;color:var(--nav-ink);
  font:inherit;font-size:.92rem;border:0;background:none;cursor:pointer;transition:color .18s ease}
.dd-trigger:hover,.dd:hover .dd-trigger,.dd.open .dd-trigger,.dd:focus-within .dd-trigger{color:#fff}
.dd-trigger svg{width:11px;height:11px;fill:none;stroke:currentColor;stroke-width:2.2;
  stroke-linecap:round;stroke-linejoin:round;transition:transform .22s ease}
.dd:hover .dd-trigger svg,.dd.open .dd-trigger svg,.dd:focus-within .dd-trigger svg{transform:rotate(180deg)}
.dd-panel{position:absolute;top:calc(100% + 12px);left:50%;translate:-50% 0;width:302px;padding:8px;
  border:1px solid var(--nav-line);border-radius:12px;background:rgba(11,15,21,.98);
  box-shadow:0 30px 70px -30px #000,0 0 0 1px rgba(66,177,255,.06);
  opacity:0;visibility:hidden;transform:translateY(-6px);
  transition:opacity .2s ease,transform .2s ease,visibility .2s;z-index:70}
.dd:hover .dd-panel,.dd.open .dd-panel,.dd:focus-within .dd-panel{opacity:1;visibility:visible;transform:translateY(0)}
.dd-panel::before{content:"";position:absolute;top:-14px;left:0;right:0;height:14px}
.dd-head{font-family:"FLBold","Arial Black",sans-serif;font-size:.74rem;letter-spacing:.02em;
  text-transform:uppercase;color:var(--nav-brand);padding:8px 12px 6px;
  transform:rotate(-.6deg);display:inline-block}
.dd-item{display:flex;gap:11px;align-items:flex-start;padding:10px 12px;border-radius:9px;
  text-decoration:none;transition:background .18s ease}
.dd-item:hover{background:color-mix(in srgb,var(--nav-brand) 10%,transparent)}
.dd-item .ic{flex:0 0 26px;height:26px;border-radius:7px;display:grid;place-items:center;
  background:linear-gradient(150deg,#123a63,#0a1a2e);border:1px solid rgba(66,177,255,.28);
  color:var(--nav-brand);font-family:var(--nav-label);font-size:.62rem;font-weight:700;margin-top:1px}
.dd-item .tt{display:block;color:var(--nav-ink);font-size:.86rem;font-weight:560;line-height:1.25}
.dd-item .ds{display:block;color:var(--nav-ink);font-size:.72rem;line-height:1.3;margin-top:3px}
.dd-item.now{background:color-mix(in srgb,var(--nav-brand) 10%,transparent)}
.dd-item.now .tt{color:var(--nav-brand)}
.dd-item.now .ic{border-color:color-mix(in srgb,var(--nav-brand) 60%,transparent)}
/* the torn bottom edge. Same paper stock AND same darkening veil as the
   bar, both at background-attachment:fixed so the texture and the veil
   register to the viewport — that is what makes the strip a seamless
   continuation of the bar rather than a lighter band under it. */
.nav .tstrip--nav{position:absolute;left:0;right:0;top:100%;margin-top:-1px;
  height:var(--nav-tear-h);pointer-events:none;z-index:5;
  background-color:var(--nav-bg);
  background-image:linear-gradient(rgba(5,7,10,.34),rgba(5,7,10,.52)),var(--we-paper-dark);
  background-size:cover;background-position:center;background-attachment:fixed;
  filter:drop-shadow(0 2px 3px rgba(0,0,0,.408));
  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;
  -webkit-mask-size:100% 100%;mask-size:100% 100%;
  -webkit-mask-position:0 0;mask-position:0 0;
  -webkit-mask-image:url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201200%20120'%20preserveAspectRatio='none'%3E%3Cdefs%3E%3Cfilter%20id='t'%20x='-5%25'%20y='-50%25'%20width='110%25'%20height='200%25'%3E%3CfeTurbulence%20type='fractalNoise'%20baseFrequency='0.04%200.02'%20numOctaves='3'%20seed='31'%20result='n'/%3E%3CfeDisplacementMap%20in='SourceGraphic'%20in2='n'%20scale='14'%20xChannelSelector='R'%20yChannelSelector='G'/%3E%3C/filter%3E%3C/defs%3E%3Cpolygon%20points='-120,-30%201320,-30%201320,70%20-120,64'%20fill='%23fff'%20filter='url(%23t)'/%3E%3C/svg%3E");
  mask-image:url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%201200%20120'%20preserveAspectRatio='none'%3E%3Cdefs%3E%3Cfilter%20id='t'%20x='-5%25'%20y='-50%25'%20width='110%25'%20height='200%25'%3E%3CfeTurbulence%20type='fractalNoise'%20baseFrequency='0.04%200.02'%20numOctaves='3'%20seed='31'%20result='n'/%3E%3CfeDisplacementMap%20in='SourceGraphic'%20in2='n'%20scale='14'%20xChannelSelector='R'%20yChannelSelector='G'/%3E%3C/filter%3E%3C/defs%3E%3Cpolygon%20points='-120,-30%201320,-30%201320,70%20-120,64'%20fill='%23fff'%20filter='url(%23t)'/%3E%3C/svg%3E")}
@media(max-width:880px){.nav-actions .nav-link,.nav-actions .dd{display:none}}
@media(max-width:480px){.nav .brand img{height:28px;max-width:158px}.nav .btn-cta{padding:9px 14px;font-size:.82rem}}

/* ---- BATCH · the Intelligence dropdown was the last navy AI card (V1-F3) ----
   `.dd-panel` shipped as rgba(11,15,21,.98) with a 12px radius, a hairline
   stroke and a blue inner ring; its `.ic` chips were 26px navy-gradient tiles.
   Only surviving navy + AI-gradient element in the theme, and it rode on
   EVERY page. V1 puts the 03:13 screenshot ring precisely on "Intelligence",
   so this is plausibly what that task was pointing at.

   It becomes a torn piece of the same dark paper the nav bar is printed on:
   `--we-paper-dark` from theme.liquid :root, which every page already has, so
   this needs no new tokens and is byte-identical in all 25 nav stylesheets.

   Three mechanics worth keeping straight:
   - the tear is the REPEATING 300x48 tile, not the full-width strip mask. The
     strip mask is a 1200x120 viewBox stretched with preserveAspectRatio:none;
     squeezed into a 28px band it renders ~1.6px of rag, i.e. a straight line
     (measured — it is the same squeeze V2-F5 raised about the nav strip).
   - the shadow is a FILTER, not a box-shadow. A mask clips an element's own
     box-shadow to its box (gotcha 4); drop-shadow() runs on the masked result
     and hugs the torn contour.
   - the bottom padding clears the rag, so the tear eats paper rather than the
     "See all teardowns" row.
   The panel hangs off a fixed nav and is not inside a masked parent, so the
   tear survives here (unlike a .tstrip in a masked zone, gotcha 5). */
.dd-panel{
  border:0;border-radius:0;
  background-color:#14120d;
  background-image:var(--we-paper-dark);
  background-size:cover;background-position:center;
  padding:10px 8px 46px;
  box-shadow:none;
  filter:drop-shadow(0 2px 3px rgba(0,0,0,.5)) drop-shadow(0 20px 34px rgba(0,0,0,.5));
  -webkit-mask-image:url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20300%2048'%20preserveAspectRatio='none'%3E%3Cdefs%3E%3Cfilter%20id='t'%20x='0'%20y='0'%20width='300'%20height='48'%20filterUnits='userSpaceOnUse'%3E%3CfeTurbulence%20type='fractalNoise'%20baseFrequency='0.02%200.052'%20numOctaves='3'%20seed='131'%20stitchTiles='stitch'%20result='n'/%3E%3CfeDisplacementMap%20in='SourceGraphic'%20in2='n'%20scale='19'%20xChannelSelector='R'%20yChannelSelector='G'/%3E%3C/filter%3E%3C/defs%3E%3Cpolygon%20points='-4,-12%20304,-12%20304,24%20-4,24'%20fill='%23fff'%20filter='url(%23t)'/%3E%3C/svg%3E"),linear-gradient(#000,#000);
  mask-image:url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%20300%2048'%20preserveAspectRatio='none'%3E%3Cdefs%3E%3Cfilter%20id='t'%20x='0'%20y='0'%20width='300'%20height='48'%20filterUnits='userSpaceOnUse'%3E%3CfeTurbulence%20type='fractalNoise'%20baseFrequency='0.02%200.052'%20numOctaves='3'%20seed='131'%20stitchTiles='stitch'%20result='n'/%3E%3CfeDisplacementMap%20in='SourceGraphic'%20in2='n'%20scale='19'%20xChannelSelector='R'%20yChannelSelector='G'/%3E%3C/filter%3E%3C/defs%3E%3Cpolygon%20points='-4,-12%20304,-12%20304,24%20-4,24'%20fill='%23fff'%20filter='url(%23t)'/%3E%3C/svg%3E"),linear-gradient(#000,#000);
  -webkit-mask-repeat:repeat-x,no-repeat;mask-repeat:repeat-x,no-repeat;
  -webkit-mask-size:300px 48px,100% calc(100% - 46px);
  mask-size:300px 48px,100% calc(100% - 46px);
  -webkit-mask-position:bottom left,top;mask-position:bottom left,top;
}
/* numerals become little white paper tabs with ink on them — the house
   artifact — instead of navy gradient tiles with cyan type. */
.dd-item .ic{
  background:#f4f2e9;border:0;border-radius:2px;
  color:#141109;font-family:"FLBold","Arial Black",sans-serif;
  font-size:.68rem;letter-spacing:0;rotate:-1.5deg;
}
.dd-item:nth-child(odd) .ic{rotate:1.2deg}
/* the current-page row was a blue-tinted rounded slab, which reads as another
   soft UI card on paper. It becomes a torn-off paper marker instead: the row
   keeps the stock, the numeral tab goes full white, and the title takes the
   brand blue (legal here — the ground is dark). */
.dd-item.now{background:rgba(255,255,255,.06);border-radius:0}
.dd-item.now .ic{background:#fff;color:#141109}
.dd-item:hover{border-radius:0}

/* ---- BATCH · nav CTA lost the hard offset shadow (V1-F5) ----
   The de-glow pass replaced the brand's blur-free offset with a soft ambient
   `0 10px 30px -12px`, which BRAND-SYSTEM-INDEX §8 already flags as "worth
   revisiting" — it made the nav CTA the only button in the theme without the
   analog signature. Restored to the §8 nav-CTA spec exactly (2px 2px 0, and
   3px 4px 0 on hover — the small-button values, not the larger `.button`'s).
   Radius and tilt unchanged. */
.btn-cta{box-shadow:2px 2px 0 rgba(0,0,0,.5)}
.btn-cta:hover{box-shadow:3px 4px 0 rgba(0,0,0,.55);transform:rotate(-.6deg) translateY(-1px)}
