/* ============================================================================
   OPERATION IRON GATE — styles.css
   Order: tokens · base · layout · components · motion · media queries
   ========================================================================= */

/* ---------------------------------------------------------------- FONTS -- */
@font-face{font-family:"Anton";font-style:normal;font-weight:400;font-display:swap;src:url("assets/fonts/anton-latin-400.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Archivo";font-style:normal;font-weight:100 900;font-stretch:62% 125%;font-display:swap;src:url("assets/fonts/archivo-latin-var.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Archivo";font-style:italic;font-weight:100 900;font-stretch:62% 125%;font-display:swap;src:url("assets/fonts/archivo-latin-var-italic.woff2") format("woff2");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}

/* --------------------------------------------------------------- TOKENS -- */
:root{
  /* colour */
  --navy:#14233F;
  --navy-deep:#0B1729;
  --green:#2E7D5B;
  --green-bright:#3FBF84;
  --orange:#E07A2F;
  --orange-soft:#F2B183;
  /* Text-weight orange for LIGHT grounds. --orange (#E07A2F) is 3.0:1 on white
     and is graphics-only there (tapes, rules, underlines); --orange-soft only
     ever passes on navy-deep. #A9501A clears 5.2:1 on #fff and 4.9:1 on the
     5.5% orange-tinted door cell, so small mono kickers can carry it. */
  --orange-ink:#A9501A;
  /* Same job for green: --green (#2E7D5B) clears AA on --canvas but drops to
     4.17:1 on --stone, and the door bloom lightens the ground under it. Keep
     the pair symmetrical — wherever one is used at small size, use the other. */
  --green-ink:#276A4C;
  --canvas:#FBF8F3;
  --stone:#EFEAE1;
  --mist:#DDE7E4;
  --hairline:#D6D2CA;
  --muted:#6B6F78;
  /* #6B6F78 measures 4.75:1 on canvas but only 3.99:1 on the mist band.
     Same role, re-lit for that one ground. */
  --muted-on-mist:#5F646D;
  --on-dark:#FFFFFF;

  /* type */
  --font-display:"Anton","Arial Narrow",Impact,sans-serif;
  --font-body:"Archivo",system-ui,-apple-system,"Segoe UI",sans-serif;
  --font-mono:ui-monospace,"SF Mono",Menlo,Consolas,monospace;

  /* 120px cannot hold the three authored lines: "CALIFORNIA" alone measures
     780px in Anton at that size, so a 1080px column broke every sentence into
     three rows. 108px is the largest size at which each of the three sentences
     breaks into exactly two rows. */
  --fs-hero:clamp(44px,7.4vw,108px);
  --fs-band:clamp(40px,6vw,84px);
  --fs-section:clamp(34px,4.8vw,68px);
  --fs-card-heading:clamp(22px,2.2vw,32px);
  --fs-feature:20px;
  --fs-body-lg:18px;
  --fs-body:16px;
  --fs-button:14px;
  --fs-eyebrow:13px;
  --fs-caption:13px;
  --fs-figure:clamp(44px,6vw,88px);
  --fs-micro:12px;

  /* space & shape */
  --shell:1440px;
  --gutter:24px;
  --outer:24px;
  --section-y:clamp(80px,10vw,160px);
  --r-xs:4px;
  --r-sm:8px;
  --r-md:16px;
  --r-lg:24px;
  --r-pill:999px;

  /* motion */
  --ease-enter:cubic-bezier(0.22,1,0.36,1);
  --ease-scrub:cubic-bezier(0.65,0,0.35,1);
  --ease-punch:cubic-bezier(0.34,1.56,0.64,1);
}

/* ----------------------------------------------------------------- BASE -- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;scroll-behavior:smooth;scroll-padding-top:106px}
body{
  margin:0;background:var(--canvas);color:var(--navy);
  font-family:var(--font-body);font-size:var(--fs-body);line-height:1.6;
  font-synthesis-weight:none;-webkit-font-smoothing:antialiased;
  overflow-x:clip;
}
h1,h2,h3,h4,h5{margin:0;font-weight:400}
p{margin:0}
ul{margin:0;padding:0;list-style:none}
img,svg,video{display:block;max-width:100%}
a{color:var(--green);text-decoration:none;text-underline-offset:3px}
a:hover{color:var(--navy);text-decoration:underline}
:focus-visible{outline:2px solid var(--green-bright);outline-offset:2px;border-radius:var(--r-xs)}
::selection{background:var(--green-bright);color:var(--navy-deep)}

.u-vh{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}
.skip{position:absolute;left:-9999px;top:0;z-index:200;background:var(--on-dark);color:var(--navy);padding:12px 18px;font-weight:700;border-radius:var(--r-sm)}
.skip:focus{left:14px;top:14px}

/* --------------------------------------------------------------- LAYOUT -- */
.shell{width:100%;max-width:var(--shell);margin-inline:auto;padding-inline:var(--outer)}
.split{display:grid;grid-template-columns:7fr 5fr;gap:clamp(32px,5vw,72px);align-items:center}

/* ----------------------------------------------------------- TYPOGRAPHY -- */
.display-hero,.display-band,.display-section{
  font-family:var(--font-display);text-transform:uppercase;font-weight:400;
}
.display-hero{font-size:var(--fs-hero);line-height:.92;letter-spacing:-.02em}
.display-band{font-size:var(--fs-band);line-height:.95;letter-spacing:-.015em}
.display-section{font-size:var(--fs-section);line-height:1;letter-spacing:-.01em}
em,.em{font-family:var(--font-body);font-stretch:62%;font-weight:800;font-style:italic;letter-spacing:-.005em}

.eyebrow{font-size:var(--fs-eyebrow);font-weight:600;text-transform:uppercase;letter-spacing:.16em;line-height:1}
.body-lg{font-size:var(--fs-body-lg);line-height:1.55;max-width:58ch;text-wrap:pretty}
.caption{font-size:var(--fs-caption);line-height:1.45}
.micro{font-size:var(--fs-micro);line-height:1.5}

/* --------------------------------------------------------------- TICKER -- */
/* Lives inside the sticky header, so it stays pinned as the page scrolls. */
.ticker{background:var(--navy-deep);color:var(--mist);overflow:hidden;border-bottom:1px solid rgba(221,231,228,.1)}
.ticker__rail{display:flex;width:max-content;animation:ticker-run 56s linear infinite}
.ticker__group{display:flex;align-items:center;gap:26px;padding-inline:13px;height:32px;white-space:nowrap;
  font-size:11px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:rgba(221,231,228,.72)}
.ticker__sep{color:rgba(221,231,228,.26)}
.ticker__motto{color:var(--orange)}
.ticker__live{color:var(--green-bright);display:inline-flex;align-items:center;gap:8px}
.ticker__live i{width:7px;height:7px;border-radius:50%;background:currentColor;animation:pulse-dot 2s ease-in-out infinite}
@keyframes ticker-run{from{transform:translate3d(0,0,0)}to{transform:translate3d(-50%,0,0)}}
@keyframes pulse-dot{0%,100%{opacity:1;transform:scale(1)}50%{opacity:.5;transform:scale(1.3)}}

/* ------------------------------------------------------------------ NAV -- */
.nav{position:sticky;top:0;z-index:90;background:rgba(251,248,243,0);
  transform:translate3d(0,-100%,0);opacity:0;
  transition:background 300ms var(--ease-enter),box-shadow 300ms var(--ease-enter),border-color 300ms var(--ease-enter);
  border-bottom:1px solid transparent}
.nav.is-loaded{transform:none;opacity:1;transition:transform 500ms var(--ease-enter) 40ms,opacity 500ms var(--ease-enter) 40ms,background 300ms var(--ease-enter),box-shadow 300ms var(--ease-enter),border-color 300ms var(--ease-enter)}
.nav.is-condensed{background:var(--canvas);border-bottom-color:var(--hairline);box-shadow:0 10px 30px -22px rgba(20,35,63,.4)}
.nav__in{display:flex;align-items:center;justify-content:space-between;gap:24px;height:98px;transition:height 300ms var(--ease-enter)}
.nav.is-condensed .nav__in{height:74px}
.nav__brand{display:flex;align-items:center;gap:11px;flex:none;color:var(--navy)}
.nav__brand:hover{text-decoration:none}
.nav__mark{height:38px;width:auto;transition:height 300ms var(--ease-enter)}
.nav.is-condensed .nav__mark{height:28px}
.nav__names{display:flex;flex-direction:column;line-height:1.15}
.nav__names b{font-size:14px;font-weight:800;letter-spacing:.01em}
.nav__names span{font-size:11px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.nav__links{display:flex;align-items:center;gap:24px}
.nav__link{position:relative;display:inline-flex;align-items:baseline;gap:8px;white-space:nowrap;
  color:var(--navy);font-size:14px;font-weight:500;padding-bottom:4px}
.nav__link:hover{color:var(--navy);text-decoration:none}
.nav__link i{font-style:normal;font-size:11px;font-weight:600;letter-spacing:.06em;color:var(--muted);transition:color 220ms var(--ease-enter)}
.nav__link::after{content:"";position:absolute;left:0;bottom:0;height:2px;width:0;background:var(--orange);transition:width 220ms var(--ease-enter)}
.nav__link:hover::after,.nav__link[aria-current="true"]::after{width:100%}
.nav__link:hover i,.nav__link[aria-current="true"] i{color:var(--green)}
.nav__cta{display:flex;align-items:center;gap:12px;flex:none}
.nav__links .nav__menu-donate{display:none}   /* .btn sets inline-flex later in the sheet, so this needs the extra class */
.nav__burger{display:none;background:none;border:0;cursor:pointer;padding:8px}
.nav__burger span{display:block;width:22px;height:2px;background:var(--navy);margin:4px 0;border-radius:2px}
.nav__menu-donate{display:none;margin-top:14px;width:100%;justify-content:center}
.nav__progress{height:2px;width:0;background:var(--green-bright);transform-origin:left}

/* -------------------------------------------------------------- BUTTONS -- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;position:relative;isolation:isolate;
  font-family:var(--font-body);font-size:var(--fs-button);font-weight:600;letter-spacing:.02em;line-height:1.7;
  padding:14px 28px;border-radius:var(--r-pill);border:1px solid transparent;cursor:pointer;white-space:nowrap;
  transition:transform 220ms var(--ease-enter),border-color 220ms var(--ease-enter)}
.btn::after{content:"";position:absolute;inset:0;border-radius:inherit;background:var(--navy-deep);opacity:0;z-index:-1;transition:opacity 220ms var(--ease-enter)}
.btn:hover{transform:translateY(-1px);text-decoration:none}
.btn:hover::after{opacity:.14}
.btn:active{transform:translateY(0)}
.btn:active::after{opacity:.22}
.btn--primary{background:var(--green);color:var(--on-dark);border-color:var(--green)}
.btn--primary:hover{color:var(--on-dark)}
.btn--outline{background:transparent;color:var(--navy);border-color:var(--hairline)}
.btn--outline:hover{color:var(--navy);border-color:var(--navy)}
.btn--outline::after{background:var(--navy)}
.btn--outline:hover::after{opacity:.05}
.btn--on-dark{background:transparent;color:var(--on-dark);border-color:rgba(255,255,255,.34)}
.btn--on-dark:hover{color:var(--on-dark);border-color:var(--on-dark)}
.btn--on-dark::after{background:var(--on-dark)}
.btn--on-dark:hover::after{opacity:.08}
.btn--sm{padding:10px 20px}
.btn__arrow{transition:transform 220ms var(--ease-enter)}
.btn:hover .btn__arrow{transform:translateX(3px)}

/* ----------------------------------------------------------------- HERO -- */
.hero{position:relative;background:var(--canvas);overflow:hidden;
  padding-block:clamp(14px,1.6vw,22px) clamp(56px,7vw,104px)}
.hero__grid{position:relative;z-index:2}
.hero__copy{max-width:min(1010px,74vw)}
.hero__eyebrow{color:var(--navy);display:flex;align-items:center;gap:12px;margin-bottom:16px}
.hero__eyebrow::before{content:"";width:30px;height:2px;background:var(--orange);flex:none}
/* The licensor name is lit rather than tinted: bright green on a deep-navy
   pill with a soft green halo — the same treatment as the highlighted line in
   the terminal card. #3FBF84 fails on canvas but clears 7.4:1 on #0B1729. */
.hero__eyebrow b{display:inline-flex;align-items:center;gap:8px;color:var(--green-bright);
  font-weight:700;letter-spacing:.15em;background:var(--navy-deep);
  padding:7px 15px 7px 13px;border-radius:var(--r-pill);cursor:default;
  box-shadow:0 0 0 1px rgba(63,191,132,.45),0 0 18px -2px rgba(63,191,132,.55),0 6px 18px -10px rgba(11,23,41,.7);
  transition:transform 220ms var(--ease-punch),box-shadow 220ms var(--ease-enter)}
.hero__eyebrow b:hover{transform:translateY(-3px) scale(1.045);
  box-shadow:0 0 0 1px var(--green-bright),0 0 30px 0 rgba(63,191,132,.8),0 14px 26px -12px rgba(11,23,41,.8)}
.hero__eyebrow b::before{content:"";width:7px;height:7px;border-radius:50%;background:var(--green-bright);
  flex:none;box-shadow:0 0 8px 1px rgba(63,191,132,.9);animation:pulse-dot 2s ease-in-out infinite}
.hero__eyebrow-sep{display:none}

/* Today's answer, sitting between the head and the doors. Not a card and not a
   button: one line of copy with an orange rule down its left edge, the same
   device as .hero__sub, so it reads as the page speaking rather than as an ad. */
.hero__now{position:relative;margin-top:16px;padding-left:clamp(18px,2vw,28px);max-width:60ch;
  color:var(--navy);font-size:clamp(16px,1.15vw,18px);line-height:1.55;
  opacity:0;transform:translateY(16px);
  transition:opacity 600ms var(--ease-enter) 660ms,transform 600ms var(--ease-enter) 660ms}
.hero__now::before{content:"";position:absolute;left:0;top:.3em;bottom:.3em;width:3px;background:var(--orange)}
.hero__now b{font-weight:700}
.hero__now a{color:var(--navy);font-weight:700;border-bottom:2px solid var(--orange);text-decoration:none}
.hero__now a:hover{color:var(--green);border-bottom-color:var(--green);text-decoration:none}
.is-loaded .hero__now{opacity:1;transform:none}

/* The doors, at hero scale. Reuses .doors__grid/.door verbatim — only the
   wrapper, its kicker and the reveal timing are new. */
.hero__doors{position:relative;z-index:2;margin-top:clamp(22px,2.4vw,34px);
  opacity:0;transform:translateY(18px);
  transition:opacity 640ms var(--ease-enter) 760ms,transform 640ms var(--ease-enter) 760ms}
.is-loaded .hero__doors{opacity:1;transform:none}
.hero__doors-k{color:var(--navy);display:flex;align-items:center;gap:12px;margin:0}
.hero__doors-k::before{content:"";width:30px;height:2px;background:var(--orange);flex:none}
.hero__doors .doors__grid{margin-top:clamp(14px,1.6vw,20px)}
.hero__doors .door{padding:clamp(26px,2.8vw,36px) clamp(22px,2.4vw,32px) clamp(24px,2.6vw,32px)}

/* headline: each line clipped from below. text-wrap:balance splits each
   sentence into two rows of even length instead of leaving a one-word orphan
   ("...WHERE IT / WENT."). */
/* Glyph clearance: overflow:hidden is the wipe clip, so each line box needs
   room for Anton's full depth at line-heights below 1 or the baseline row gets
   shaved. The negative margin cancels the padding, so line rhythm is unchanged.
   Same remedy on .crisis__line, .pull__line, .dsrt__line and .dsrt__hl. */
.reveal-line{display:block;overflow:hidden;padding-bottom:.14em;margin-bottom:-.11em}
.reveal-line>span{display:block;text-wrap:balance;transform:translateY(105%);transition:transform 820ms var(--ease-enter)}
.is-in .reveal-line>span,.is-loaded .reveal-line>span{transform:translateY(0)}
.reveal-line:nth-child(1)>span{transition-delay:0ms}
.reveal-line:nth-child(2)>span{transition-delay:90ms}
.reveal-line:nth-child(3)>span{transition-delay:180ms}

/* Below the headline the hero used to be four stacked paragraphs of roughly
   equal weight (lede, two pills, counties line, pilot note) — no hierarchy and
   no punch. It is now three moves: a lede whose first sentence carries navy
   weight against a drawn orange tick, ONE oversized action with a text link
   beside it, and a mono docket strip that closes the block on a navy rule —
   the same register as .rcpt__rail and .fhud elsewhere on the page. */
.hero__sub{position:relative;margin-top:24px;padding-left:clamp(18px,2vw,28px);max-width:60ch;
  color:var(--muted);font-size:clamp(17px,1.3vw,20px);line-height:1.6;text-wrap:pretty;
  opacity:0;transform:translateY(16px);
  transition:opacity 600ms var(--ease-enter) 620ms,transform 600ms var(--ease-enter) 620ms}
/* Draws down as the lede arrives; scaleY keeps it a single composited layer. */
.hero__sub::before{content:"";position:absolute;left:0;top:.34em;bottom:.34em;width:3px;
  background:linear-gradient(180deg,var(--orange),rgba(224,122,47,.12));
  transform:scaleY(0);transform-origin:0 0;transition:transform 760ms var(--ease-enter) 700ms}
.is-loaded .hero__sub::before{transform:scaleY(1)}
.hero__sub b{color:var(--navy);font-weight:600}
.hero__actions{display:flex;flex-wrap:wrap;align-items:center;gap:clamp(16px,2.4vw,32px);margin-top:36px;
  opacity:0;transform:translateY(16px);
  transition:opacity 600ms var(--ease-enter) 700ms,transform 600ms var(--ease-enter) 700ms}
/* The one loud element in the block: bigger than any other button on the site,
   with a green throw under it and a light sweep that crosses on hover. */
.hero__actions .btn--primary{font-size:16px;padding:19px 38px;overflow:hidden;
  box-shadow:0 18px 40px -18px rgba(47,158,110,.75),0 2px 0 0 rgba(11,23,41,.06)}
.hero__actions .btn--primary::before{content:"";position:absolute;inset:0;z-index:-1;
  background:linear-gradient(105deg,transparent 34%,rgba(255,255,255,.34) 50%,transparent 66%);
  transform:translateX(-120%);transition:transform 720ms var(--ease-enter)}
.hero__actions .btn--primary:hover{transform:translateY(-3px);
  box-shadow:0 26px 52px -18px rgba(47,158,110,.85),0 2px 0 0 rgba(11,23,41,.06)}
.hero__actions .btn--primary:hover::before{transform:translateX(120%)}
.hero__actions .btn--primary .btn__arrow{transition:transform 260ms var(--ease-punch)}
.hero__actions .btn--primary:hover .btn__arrow{transform:translateX(5px)}
/* Second action drops the outline pill: two pills side by side read as a choice
   between equals, and the pilot is the ask. */
.hero__alt{position:relative;display:inline-flex;align-items:center;gap:10px;color:var(--navy);
  font-size:15px;font-weight:600;letter-spacing:.01em;padding-bottom:5px}
.hero__alt:hover{color:var(--navy);text-decoration:none}
.hero__alt::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--orange);
  transform:scaleX(.999);transform-origin:left;transition:transform 300ms var(--ease-enter)}
.hero__alt:hover::after{transform:scaleX(0);transform-origin:right}
.hero__alt span{font-size:13px;transition:transform 260ms var(--ease-punch)}
.hero__alt:hover span{transform:translateX(4px)}
/* Docket strip: the counties line and the pilot note, one row, mono, on a heavy
   navy rule — it terminates the hero column instead of trailing off it. */
.hero__note{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:14px 28px;
  max-width:100%;margin-top:clamp(26px,2.8vw,36px);padding-top:13px;
  border-top:2px solid var(--navy);color:var(--navy);
  font-family:var(--font-mono);font-size:11px;letter-spacing:.17em;text-transform:uppercase;
  opacity:0;transform:translateY(16px);
  transition:opacity 600ms var(--ease-enter) 780ms,transform 600ms var(--ease-enter) 780ms}
.hero__note>*{display:inline-flex;align-items:center;gap:10px;margin:0;font:inherit;letter-spacing:inherit}
.hero__note i{width:8px;height:8px;border-radius:50%;background:var(--green-bright);flex:none;
  box-shadow:0 0 9px 1px rgba(63,191,132,.75);animation:pulse-dot 2s ease-in-out infinite}
.hero__note .hero__counties{color:var(--muted);margin:0}
.is-loaded .hero__sub,.is-loaded .hero__actions,.is-loaded .hero__note{opacity:1;transform:none}

/* ------------------------------------------------ G1 — ISOMETRIC FIELD -- */
/* Steeper fade: the field stays near-invisible under the headline and only
   reaches full strength past the copy column's right edge. */
/* TWO masks composited with intersect, so the field dissolves on every edge
   instead of ending on a hard rectangle. Layer 1 is the original steep
   horizontal fade: near-invisible under the headline, full strength past the
   copy column. Layer 2 is a soft ellipse that eats the top, right and bottom
   perimeter, so the outermost columns and the lattice fade into the cream
   rather than being clipped by the SVG box. Both -webkit- and standard
   composite keywords are required. */
/* WIDTH is --field-w, written by the tweak block at the end of index.html
   (default 68vw, was a hard 58vw). The field is the first thing on the page and
   it was reading small; the mask below is what stops it ending on a hard edge,
   so it can grow without the seam showing. min-width raised 520 -> 620 for the
   same reason. */
.field{position:absolute;right:-10%;top:-14%;width:var(--field-w,68vw);min-width:620px;z-index:1;pointer-events:none;
  -webkit-mask-image:linear-gradient(90deg,transparent 0%,rgba(0,0,0,.16) 34%,#000 62%),radial-gradient(ellipse 76% 72% at 54% 48%,#000 38%,rgba(0,0,0,.62) 66%,rgba(0,0,0,.18) 84%,transparent 96%);
  mask-image:linear-gradient(90deg,transparent 0%,rgba(0,0,0,.16) 34%,#000 62%),radial-gradient(ellipse 76% 72% at 54% 48%,#000 38%,rgba(0,0,0,.62) 66%,rgba(0,0,0,.18) 84%,transparent 96%);
  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;
  -webkit-mask-size:100% 100%;mask-size:100% 100%;
  -webkit-mask-composite:source-in;mask-composite:intersect;
  opacity:0;transform:scale(.94);
  transition:opacity 700ms var(--ease-enter) 220ms,transform 1200ms var(--ease-enter) 220ms}
.is-loaded .field{opacity:1;transform:scale(1)}
.field svg{width:100%;height:auto;overflow:visible}
.field__col-grow{transform-box:fill-box;transform-origin:50% 100%;transform:scaleY(0);
  transition:transform 900ms var(--ease-enter)}
.is-grown .field__col-grow{transform:scaleY(1)}
/* Pulse floor raised from .35: at 4.75:1 the outline is now carrying the
   section's argument, so it must stay legible at every point in the cycle. */
.field__hollow{animation:hollow-pulse 3200ms ease-in-out infinite}
@keyframes hollow-pulse{0%,100%{opacity:.72}50%{opacity:1}}
/* Tech field: the hollows march. Dashes travelling along an outline is the
   cheapest honest read of "the system is looking and finding nothing here". */
.field__hollow--march path{animation:hollow-march 900ms linear infinite}
@keyframes hollow-march{to{stroke-dashoffset:-13}}
@media (prefers-reduced-motion:reduce){.field__hollow--march path{animation:none}}

/* ==================================================== LEDGER BAND ======= */
/* Full-bleed navy instrument band between the two doors and the capability
   strip. The SECTION has no card and no border — the ground change is the
   frame. The CANVAS does: restored 2026-08-05 to the client's original plate
   (hairline border, 14px radius, inset highlight, deep drop shadow). */
.ledger{position:relative;background:var(--navy-deep);color:var(--on-dark);overflow:hidden;
  padding-block:clamp(56px,7vw,96px)}
/* Green filament on the top edge — the seam where the ground above ends. */
.ledger__filament{position:absolute;top:0;left:0;right:0;height:1px;
  background:linear-gradient(90deg,transparent,rgba(63,191,132,.75) 22%,rgba(63,191,132,.9) 50%,rgba(63,191,132,.75) 78%,transparent)}
/* 30deg hatch — the same isometric axis as the field graphics and the .cap
   extrusion, so the band belongs to the same drawing. Faded at both edges. */
.ledger__hatch{position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(30deg,rgba(255,255,255,.05) 0 1px,transparent 1px 9px);
  -webkit-mask-image:radial-gradient(120% 100% at 50% 45%,#000 34%,transparent 78%);
  mask-image:radial-gradient(120% 100% at 50% 45%,#000 34%,transparent 78%)}
.ledger__in{position:relative;z-index:1;max-width:1120px;margin-inline:auto}
/* Head is a ROW: label left, pill right, as on the original. */
.ledger__head{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:12px;margin-bottom:14px}
.ledger__label{display:flex;align-items:center;flex-wrap:wrap;gap:10px;
  font-family:var(--font-mono);font-size:12px;font-weight:600;letter-spacing:.14em;
  text-transform:uppercase;color:#9FB0C8}
/* #3FBF84 fails on canvas but clears 7.4:1 on navy-deep — the one ground where
   the live label can carry the colour itself. */
.ledger__live{display:inline-flex;align-items:center;gap:7px;color:var(--green-bright)}
.ledger__live i{width:8px;height:8px;border-radius:50%;background:currentColor;flex:none;
  animation:pulse-dot 2.4s ease-in-out infinite}
.ledger__sep{color:rgba(159,176,200,.5)}
.ledger__badge{display:inline-flex;align-items:center;
  font-family:var(--font-mono);font-size:12px;letter-spacing:.04em;color:var(--green-bright);
  border:1px solid rgba(61,167,118,.4);background:rgba(46,125,91,.12);
  padding:6px 12px;border-radius:30px;white-space:nowrap}
.ledger__plate{border:1px solid rgba(255,255,255,.12);border-radius:14px;overflow:hidden;
  background:linear-gradient(180deg,rgba(255,255,255,.035),rgba(255,255,255,.01));
  box-shadow:inset 0 1px 0 rgba(255,255,255,.06),0 30px 60px -28px rgba(0,0,0,.7)}
.ledger__canvas{display:block;width:100%;height:188px}
.ledger__cap{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;
  text-transform:uppercase;color:#6F7E96;margin-top:12px}
@media (max-width:760px){.ledger__canvas{height:160px}.ledger__label{font-size:10.5px;letter-spacing:.1em}}
@media (prefers-reduced-motion:reduce){.ledger__live i{animation:none}}

/* =========================================================== SECTIONS == */
.band-canvas{background:var(--canvas)}
.band-stone{background:var(--stone)}
.band-mist{background:var(--mist)}
.band-navy{background:var(--navy);color:var(--on-dark)}
.band-deep{background:var(--navy-deep);color:var(--on-dark)}
.band-navy .display-section,.band-deep .display-section,
.band-navy .display-band,.band-deep .display-band{color:var(--on-dark)}
.band-navy a,.band-deep a,.foot a{color:var(--green-bright)}
.band-navy a:hover,.band-deep a:hover,.foot a:hover{color:var(--on-dark)}
.sec{padding-block:var(--section-y)}
.sec--tight{padding-block:clamp(56px,7vw,104px)}
.sec__head{display:flex;align-items:center;gap:12px;margin-bottom:26px}
.sec__head::before{content:"";width:30px;height:2px;background:currentColor;flex:none}
/* Orange is a GRAPHIC colour on light grounds, never text — 2.8:1 on canvas,
   2.4:1 on mist. The eyebrow keeps its orange rule and sets its words in navy. */
.eyebrow--orange{color:var(--navy)}
.eyebrow--orange.sec__head::before{background:var(--orange)}
.band-navy .eyebrow--orange,.band-deep .eyebrow--orange{color:var(--orange-soft)}
.eyebrow--green{color:var(--green)}
.band-navy .eyebrow--green,.band-deep .eyebrow--green{color:var(--green-bright)}
.lede{margin-top:28px;color:var(--muted)}
.band-mist .lede,.band-mist .srcnote,.band-mist .field-cap,.band-mist .stat__label{color:var(--muted-on-mist)}
.band-navy .lede,.band-deep .lede{color:var(--mist)}
.stack-24>*+*{margin-top:24px}
.hr-rule{height:1px;background:var(--hairline);border:0;margin:0}
.band-navy .hr-rule,.band-deep .hr-rule{background:rgba(221,231,228,.16)}

/* ----------------------------------------------- REVEAL (IO-DRIVEN) ---- */
.rv{opacity:0;transform:translateY(16px);
  transition:opacity 700ms var(--ease-enter),transform 700ms var(--ease-enter)}
.rv.is-in{opacity:1;transform:none}

/* ==================================================== CAPABILITY STRIP == */
/* No card, no border: the cream ground IS the frame. It is clamped between two
   dark blocks (ledger band above, photo band below), so it needs enough height
   to read as a ground rather than a seam — ~400px total, not the ~250px it was. */
.cap{background:var(--canvas);padding:clamp(34px,4vw,64px) var(--outer)}
.cap__plate{position:relative;max-width:var(--shell);margin-inline:auto;overflow:hidden;background:var(--canvas)}
/* Isometric hatch, same 30° geometry as the field graphics — barely there. */
.cap__grid{display:none}
.cap__head{position:relative;z-index:2;display:flex;justify-content:center;
  padding:14px clamp(20px,3vw,40px) 30px}
/* Same eyebrow lockup as .hero__eyebrow — orange rule, navy words — so the strip
   announces a new section on cream instead of whispering. The green dot stays:
   it is the tie back to the live band above. */
.cap__eyebrow{display:flex;align-items:center;gap:12px;margin:0;
  font-family:var(--font-body);font-size:12px;font-weight:700;letter-spacing:.24em;text-transform:uppercase;
  color:var(--navy)}
.cap__eyebrow::before{content:"";width:30px;height:2px;background:var(--orange);flex:none}
.cap__eyebrow i{width:7px;height:7px;border-radius:50%;background:var(--green);flex:none;
  box-shadow:0 0 0 4px rgba(46,125,91,.14);animation:pulse-dot 2s ease-in-out infinite}
.cap__foot,.cap__count{display:none}
/* overflow:hidden supplies the marquee's horizontal clip, so the tooltip needs
   vertical room INSIDE this box or it is cut entirely. The padding that used to
   sit on .cap's bottom edge lives here instead. Top padding is matched to that
   reserve so the words sit optically centred instead of pushed to the top. */
.cap__viewport{position:relative;z-index:2;overflow:hidden;padding:74px 0 88px;
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent)}
.cap__rail{display:flex;width:max-content;align-items:flex-start;animation:cap-run 40s linear infinite}
.cap__viewport:hover .cap__rail,.cap__viewport:focus-within .cap__rail{animation-play-state:paused}
@keyframes cap-run{from{transform:translate3d(0,0,0)}to{transform:translate3d(-50%,0,0)}}
.cap__group{display:flex;align-items:center;gap:56px;padding-right:56px}
/* Hard extrusion along the same 30° axis as the isometric fields — the words
   sit above the page like cut steel; hover pushes the block deeper. */
.cap__item{--ext:rgba(20,35,63,.16);
  position:relative;display:flex;align-items:center;gap:14px;
  text-shadow:1px .6px 0 var(--ext),2px 1.2px 0 var(--ext),3px 1.8px 0 var(--ext),4px 2.4px 0 var(--ext),5px 3px 0 var(--ext);
  font-family:var(--font-display);text-transform:uppercase;
  font-size:clamp(40px,4.9vw,64px);line-height:1;letter-spacing:-.01em;color:var(--navy);padding:8px 2px 12px;
  border-bottom:3px solid transparent;
  transition:transform 260ms var(--ease-punch),border-color 220ms var(--ease-enter),color 220ms var(--ease-enter),text-shadow 260ms var(--ease-punch),-webkit-text-stroke-color 220ms var(--ease-enter)}
/* Alternating solid / outlined so the rail has rhythm instead of one grey wall.
   Hover deliberately does NOT fill the outline: swapping to solid navy lands the
   word on the same colour as its neighbours and loses the treatment. The hover
   lives entirely in the extrusion instead — see below. */
/* text-shadow paints BEHIND the glyph, so on a transparent fill the five
   extrusion layers show through the letter interiors and the outlined words read
   as muddy grey rather than clean navy outlines. Outlined items therefore carry
   no extrusion at rest or on hover — their hover thickens the stroke instead.
   The stroke stays navy: orange here would be the letterform itself, not a
   graphic shadow, and 2.8:1 on cream fails. */
.cap__group>*:nth-child(even){color:transparent;-webkit-text-stroke:2px rgba(20,35,63,.78);text-shadow:none;transition:transform 260ms var(--ease-punch),border-color 220ms var(--ease-enter),-webkit-text-stroke-width 220ms var(--ease-enter),-webkit-text-stroke-color 220ms var(--ease-enter)}
.cap__group>*:nth-child(even):hover,.cap__group>*:nth-child(even):focus-visible{text-shadow:none;-webkit-text-stroke-width:3px;-webkit-text-stroke-color:var(--navy)}
/* Three stepped bars — a two-column slice of the isometric field, so the strip
   carries the same solid-means-tracked motif as the signature graphic. */
.cap__item::before{content:"";flex:none;width:15px;height:26px;
  background:
    linear-gradient(var(--green-bright) 0 0) left 0 bottom 0 / 4px 15px no-repeat,
    linear-gradient(var(--green) 0 0) left 5.5px bottom 0 / 4px 26px no-repeat,
    linear-gradient(var(--orange) 0 0) left 11px bottom 0 / 4px 9px no-repeat;
  transition:transform 220ms var(--ease-punch)}
.cap__item:hover::before,.cap__item:focus-visible::before{transform:translateY(-3px) scaleY(1.14)}
/* Hover: the letterform is untouched — the extrusion doubles in length and turns
   orange, so the word lifts off the cream like cut steel catching light. Orange
   is legal here because it is a graphic shadow and never carries the text. */
.cap__item:hover,.cap__item:focus-visible{transform:translate3d(-4px,-6px,0);border-bottom-color:var(--orange);text-decoration:none;
  --ext:rgba(224,122,47,.92);
  text-shadow:1px .6px 0 var(--ext),2px 1.2px 0 var(--ext),3px 1.8px 0 var(--ext),4px 2.4px 0 var(--ext),
    5px 3px 0 var(--ext),6px 3.6px 0 var(--ext),7px 4.2px 0 var(--ext),8px 4.8px 0 var(--ext),
    9px 5.4px 0 rgba(224,122,47,.8),10px 6px 0 rgba(224,122,47,.62),
    11px 6.6px 0 rgba(224,122,47,.44),12px 7.2px 0 rgba(224,122,47,.26),
    0 0 30px rgba(224,122,47,.26)}
/* Anchored to the item's left edge, not centred: a centred tooltip on the
   left-most item overhangs the strip and gets cut by the marquee's clip. */
.cap__tip{position:absolute;left:0;top:calc(100% + 12px);width:max-content;max-width:280px;
  background:var(--navy-deep);color:var(--mist);border-left:3px solid var(--orange);font-family:var(--font-body);font-size:var(--fs-caption);
  font-weight:400;text-transform:none;letter-spacing:0;line-height:1.45;white-space:normal;text-shadow:none;
  padding:10px 14px;border-radius:var(--r-sm);box-shadow:0 18px 36px -18px rgba(11,23,41,.5);
  opacity:0;visibility:hidden;transform:translateY(-4px);pointer-events:none;z-index:5;
  transition:opacity 220ms var(--ease-enter),transform 220ms var(--ease-enter),visibility 0s linear 220ms}
.cap__item:hover .cap__tip,.cap__item:focus-visible .cap__tip{opacity:1;visibility:visible;transform:none;transition-delay:0s}
/* Anchored left, then clamped inside the marquee's clip by motion.js §12. */

/* ============================================ G2 — INSET BAND ========== */
/* Inset rather than edge-to-edge: warm canvas frames the band on all four
   sides, so the image reads as a plate set into the page. */
.gband-frame{background:var(--canvas);padding:clamp(24px,3vw,44px) var(--outer)}
.gband{position:relative;width:100%;max-width:var(--shell);margin-inline:auto;
  height:clamp(400px,46vw,600px);overflow:hidden;background:var(--navy-deep);
  border-radius:var(--r-sm);display:grid;place-items:center}
.gband__media{position:absolute;inset:-12% 0;will-change:transform}
.gband__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:50% 42%}
/* Horizontal-only Gaussian blur (stdDeviation "62 0") reads as a directional
   SMEAR rather than an out-of-focus blur. The mask holds it solid to 20% then
   runs a long multi-stop ramp out to 64% so it dissolves into the sharp plate
   with no visible seam. Scaled up and pushed left so the filter's own edge
   falloff sits off-canvas. */
.gband__img--smear{transform:scaleX(1.14) translateX(-4%);transform-origin:left center;
  -webkit-mask-image:linear-gradient(90deg,#000 0%,#000 20%,rgba(0,0,0,.9) 30%,rgba(0,0,0,.68) 40%,rgba(0,0,0,.4) 50%,rgba(0,0,0,.16) 58%,transparent 64%);
  mask-image:linear-gradient(90deg,#000 0%,#000 20%,rgba(0,0,0,.9) 30%,rgba(0,0,0,.68) 40%,rgba(0,0,0,.4) 50%,rgba(0,0,0,.16) 58%,transparent 64%);
  filter:url(#hsmear)}
/* Scrim does two jobs: an overall navy wash for the band, plus a centred
   radial pool that guarantees 4.5:1 for white type over a busy photograph. */
.gband__scrim{position:absolute;inset:0;z-index:2;background:
  radial-gradient(62% 56% at 50% 50%,rgba(11,23,41,.74) 0%,rgba(11,23,41,.4) 62%,rgba(11,23,41,.06) 100%),
  linear-gradient(180deg,rgba(20,35,63,.5) 0%,rgba(20,35,63,.34) 48%,rgba(11,23,41,.66) 100%)}
/* Tighter measure than the band is wide, so the two sentences balance into
   centred rows instead of running the full width edge to edge. */
.gband__title{position:relative;z-index:3;margin:0;max-width:min(23ch,88%);text-align:center;
  font-family:var(--font-display);text-transform:uppercase;font-weight:400;color:var(--on-dark);
  font-size:clamp(38px,5.4vw,78px);line-height:.94;letter-spacing:-.018em;
  text-shadow:0 1px 2px rgba(11,23,41,.7),0 3px 10px rgba(11,23,41,.6),0 10px 40px rgba(11,23,41,.7);
  will-change:transform}
.gband__line{display:block;overflow:hidden}
.gband__line>span{display:block;text-wrap:balance;transform:translateY(105%);transition:transform 820ms var(--ease-enter)}
.gband.is-in .gband__line>span{transform:translateY(0)}
.gband__line:nth-child(2)>span{transition-delay:110ms}

/* ============================================ 01 — CRISIS DOCKET HEAD == */
/* Section 01 sets the argument, so its headline runs larger than the other
   sections' 68px — but not all the way to the 84px pull-quote band that
   follows it, which would flatten the step down into the quote. */
.crisis__top{display:flex;align-items:center;justify-content:space-between;gap:24px;
  padding-bottom:18px;margin-bottom:clamp(24px,3vw,38px);
  background:linear-gradient(90deg,var(--orange) 0 96px,var(--hairline) 96px) left bottom/100% 1px no-repeat}
.crisis__eyebrow{margin-bottom:0}
.crisis__docket{font-family:var(--font-mono);font-size:11px;letter-spacing:.22em;text-transform:uppercase;
  color:var(--muted);text-align:right}
.crisis__h{font-family:var(--font-display);text-transform:uppercase;font-weight:400;color:var(--navy);
  font-size:clamp(34px,4.3vw,62px);line-height:.94;letter-spacing:-.015em}
/* Own clip class, NOT the shared .reveal-line: that one is also unlocked by
   `.is-loaded` on <html>, which fires ~30ms after load and would settle these
   lines two screens before the reader reaches them. */
.crisis__line{display:block;overflow:hidden;padding-bottom:.14em;margin-bottom:-.11em}
.crisis__line>span{display:block;transform:translateY(105%);transition:transform 820ms var(--ease-enter)}
.crisis__h.is-in .crisis__line>span,.crisis__hammer.is-in .crisis__line>span{transform:translateY(0)}
.crisis__h .crisis__line:nth-child(2)>span{transition-delay:90ms}
.crisis__h .crisis__line:nth-child(3)>span{transition-delay:170ms}
/* The verdict sentence stands alone under a heavy orange bar — the bar is a
   graphic, it never carries the words. */
.crisis__hammer{display:inline-block;margin-top:clamp(8px,1vw,16px);
  font-family:var(--font-display);text-transform:uppercase;font-weight:400;color:var(--navy);
  font-size:clamp(34px,4.3vw,62px);line-height:.94;letter-spacing:-.015em}
.crisis__hammer .crisis__line>span{transition-delay:260ms}
.crisis__hammer::after{content:"";display:block;height:5px;margin-top:.12em;background:var(--orange);
  transform:scaleX(0);transform-origin:left center;transition:transform 700ms var(--ease-scrub) 380ms}
.crisis__hammer.is-in::after{transform:scaleX(1)}
/* Head + verdict + lede left, field graphic right, both starting at the top —
   the two cells are close in height, so no column runs empty. */
.crisis__grid{display:grid;grid-template-columns:1.2fr .8fr;gap:clamp(28px,4vw,66px);
  align-items:start;margin-top:clamp(20px,2.4vw,32px)}
.crisis__lede{margin-top:clamp(22px,2.6vw,34px)}

/* ============================================== THE RECORD TAPE (01) === */
/* One compact ledger strip. All four figures at the same size on one row; a
   single 8px tape runs the full plate underneath, and its colour changes are
   the column dividers — there are no vertical rules and this is not a card. */
.rcpt{margin-top:clamp(42px,5.2vw,74px);border-top:2px solid var(--navy);border-bottom:2px solid var(--navy)}
.rcpt__rail{display:flex;align-items:center;justify-content:space-between;gap:20px;
  padding:11px 0 10px;border-bottom:1px solid var(--hairline);
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.2em;text-transform:uppercase;color:var(--muted)}
.rcpt__railL{display:inline-flex;align-items:center;gap:9px;color:var(--navy);font-weight:600}
/* Static, not pulsing: the pulse dot is reserved for live data on this site. */
.rcpt__railL i{width:6px;height:6px;background:var(--orange);flex:none}
.rcpt__railR{text-align:right}
.rcpt__row{--cpad:clamp(14px,1.7vw,26px);display:grid;grid-template-columns:repeat(4,minmax(0,1fr));
  padding:clamp(20px,2.3vw,30px) 0 clamp(18px,2vw,26px)}
.rcpt__c{display:flex;flex-direction:column;padding-inline:var(--cpad)}
.rcpt__c:first-child{padding-left:0}
.rcpt__c:last-child{padding-right:0}
.rcpt__i{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.2em;color:var(--muted)}
.rcpt__fig{margin-top:9px;font-family:var(--font-display);text-transform:uppercase;font-weight:400;
  font-size:clamp(34px,4.3vw,60px);line-height:.9;letter-spacing:-.015em;
  font-variant-numeric:tabular-nums;color:var(--navy)}
/* ZERO is hollow because there is nothing behind it. 2px / .82 alpha is the
   readable floor for outlined Anton on cream at this size. */
.rcpt__fig--hollow{color:transparent;-webkit-text-stroke:2px rgba(20,35,63,.3);
  transition:-webkit-text-stroke-color 700ms var(--ease-enter) 520ms}
.rcpt.is-in .rcpt__fig--hollow{-webkit-text-stroke-color:rgba(20,35,63,.82)}
@media (forced-colors:active){.rcpt__fig--hollow{color:CanvasText;-webkit-text-stroke:0}}
/* Each cell's segment runs edge to edge — negative insets cancel the cell
   padding — so the four meet flush and read as one continuous tape. */
.rcpt__bar{position:relative;height:8px;margin:clamp(13px,1.5vw,18px) calc(-1*var(--cpad)) 0;background:var(--stone)}
.rcpt__c:first-child .rcpt__bar{margin-left:0}
.rcpt__c:last-child .rcpt__bar{margin-right:0}
.rcpt__bar::after{content:"";position:absolute;left:0;top:0;bottom:0;width:var(--fill,0%);background:var(--navy);
  transform:scaleX(0);transform-origin:left center;transition:transform 620ms var(--ease-scrub)}
.rcpt.is-in .rcpt__bar::after{transform:scaleX(1)}
.rcpt__bar[data-tone="spend"]::after{background:var(--orange)}
.rcpt__c:nth-child(1) .rcpt__bar::after{transition-delay:170ms}
.rcpt__c:nth-child(2) .rcpt__bar::after{transition-delay:290ms}
.rcpt__c:nth-child(3) .rcpt__bar::after{transition-delay:410ms}
.rcpt__lab{margin-top:clamp(13px,1.4vw,17px);font-size:var(--fs-caption);line-height:1.45;color:var(--muted)}
/* margin-top:auto lands all four citations on one baseline. */
.rcpt__c .stat__src{margin-top:auto;padding-top:13px;align-self:start}
.stat__src{display:inline-block;margin-top:12px;font-size:11px;line-height:1.4;letter-spacing:.05em;
  text-transform:uppercase;color:var(--muted);text-decoration:underline;text-decoration-color:var(--hairline)}
.stat__src:hover{color:var(--navy);text-decoration-color:var(--navy)}

/* ============================================== PULL QUOTE (NAVY) ======= */
/* Centred, and the ground carries the meaning: a hairline record grid holds the
   band's edges and dissolves to nothing behind the words. The grid drifts one
   cell over 44s — compositor-only, and paused unless the band is in view. */
.pull{position:relative;overflow:hidden;padding-block:clamp(84px,10.4vw,166px);text-align:center}
.pull__grid{position:absolute;inset:-44px;pointer-events:none;
  background:linear-gradient(rgba(221,231,228,.2) 1px,transparent 1px) 0 0/100% 34px,
    linear-gradient(90deg,rgba(221,231,228,.2) 1px,transparent 1px) 0 0/34px 100%;
  -webkit-mask-image:radial-gradient(118% 92% at 50% 50%,transparent 0 26%,#000 68%);
  mask-image:radial-gradient(118% 92% at 50% 50%,transparent 0 26%,#000 68%);
  animation:pull-drift 44s linear infinite}
@keyframes pull-drift{from{transform:translate3d(0,0,0)}to{transform:translate3d(-34px,-34px,0)}}
.pull:not(.is-in) .pull__grid{animation-play-state:paused}
.pull__in{position:relative;z-index:2}
.pull blockquote{margin:0;display:flex;flex-direction:column;align-items:center}
.pull__q{font-family:var(--font-display);text-transform:uppercase;font-weight:400;color:var(--on-dark);
  font-size:clamp(36px,5.6vw,84px);line-height:.98;letter-spacing:-.015em;max-width:min(1180px,100%)}
/* The quoted phrase is the one lit element. `--orange-soft` carries text only
   because the ground is navy; `--orange` itself never would. */
.pull__q em{color:var(--orange-soft);text-shadow:0 0 42px rgba(224,122,47,.42),0 0 96px rgba(224,122,47,.2)}
.pull__line{display:block;overflow:hidden;padding-bottom:.14em;margin-bottom:-.11em}
.pull__line>span{display:block;transform:translateY(108%);transition:transform 900ms var(--ease-enter)}
.pull.is-in .pull__line>span{transform:translateY(0)}
.pull.is-in .pull__line:nth-child(2)>span{transition-delay:120ms}
.pull__cite{display:flex;align-items:center;justify-content:center;gap:clamp(12px,2vw,22px);
  margin-top:clamp(26px,3vw,40px);font-family:var(--font-mono);font-size:11px;letter-spacing:.24em;
  text-transform:uppercase;color:rgba(221,231,228,.74);font-style:normal;white-space:nowrap}
.pull__cite::before,.pull__cite::after{content:"";flex:none;height:1px;width:clamp(24px,8vw,124px)}
.pull__cite::before{background:linear-gradient(90deg,transparent,rgba(224,122,47,.75))}
.pull__cite::after{background:linear-gradient(90deg,rgba(224,122,47,.75),transparent)}

/* ============================================ THE DATA DESERT (G4) ====== */
/* Fourth pass, 2026-08-03. Built to the client's reference: a full-bleed dark
   field, the headline holding the left half at up to 86px, and the two record
   panels STAGGERED on the right with the terminal running past the shell's right
   edge. This supersedes the aligned-portrait-pair pass (the client sent the
   reference and asked for the stagger); the pair still animates on ONE clock at
   ONE phase, so the stagger never drifts out of register.
   02 The System below sits on the same --navy-deep ground, so the band closes on
   a hairline horizon — that rule is the section break. Do not delete it. */
.dsrt{position:relative;overflow:hidden;text-align:left}
/* The section stays on the site's cream canvas — the reference was only ever the
   reference for the PANELS, not for the ground. One barely-there stone bloom gives
   the pair something to sit on. No grid, no texture, no colour field. */
.dsrt__field{position:absolute;inset:0;pointer-events:none;
  background:radial-gradient(60% 56% at 72% 44%,rgba(20,35,63,.05),transparent 70%)}
.dsrt__in{position:relative;z-index:1}
.dsrt__split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
  gap:clamp(34px,4.4vw,68px);align-items:center}
/* The headline is the event here: Anton to 86px, three clipped lines that wipe
   up on entry. Uppercase, like every other display line on the page. */
.dsrt__h{margin-top:clamp(20px,2.2vw,32px);font-family:var(--font-display);font-weight:400;
  text-transform:uppercase;color:var(--navy);font-size:clamp(32px,4.7vw,68px);
  line-height:.92;letter-spacing:-.022em}
/* overflow:hidden is the wipe's clip, so each line box needs room for Anton's
   full glyph depth or the baseline row gets shaved. .03em was not enough at
   line-height .92 — the padding is opened up and pulled back out with a matching
   negative margin, so glyphs clear without changing the line rhythm. */
.dsrt__hl{display:block;overflow:hidden;padding-bottom:.14em;margin-bottom:-.11em}
.dsrt__hl>span{display:block;transform:translateY(106%);transition:transform 900ms var(--ease-enter)}
.dsrt__h.is-in .dsrt__hl>span{transform:translateY(0)}
.dsrt__h .dsrt__hl:nth-child(2)>span{transition-delay:120ms}
.dsrt__h .dsrt__hl:nth-child(3)>span{transition-delay:240ms}
/* Small copy under the headline, exactly as the reference sets it: two tight
   columns at 13.5px, not the body size. */
.dsrt__cols{columns:2;column-gap:clamp(26px,2.6vw,44px);margin-top:clamp(24px,2.6vw,38px);
  font-size:13.5px;line-height:1.62;color:var(--muted)}
.dsrt__cols p{break-inside:avoid;text-wrap:pretty}
.dsrt__cols p+p{margin-top:15px}
.dsrt__cols strong{color:var(--navy);font-weight:700}

/* ---- the stage: two panels, staggered, one clock ---- */
.fstage__ks{display:flex;justify-content:space-between;align-items:baseline;
  gap:16px;margin-bottom:clamp(12px,1.4vw,18px)}
.fstage__k{display:flex;align-items:center;gap:8px;
  font-family:var(--font-mono);font-size:9.5px;font-weight:600;letter-spacing:.19em;
  text-transform:uppercase;color:var(--navy)}
.fstage__k::before{content:"";width:5px;height:5px;flex:none;background:var(--orange)}
.fstage__k--b::before{background:var(--green)}
.fstage{position:relative;padding-top:clamp(58px,7vw,110px)}
/* Terminal behind, pinned HIGH and held inside the column — it used to run off the
   shell's right edge and the client asked for it pulled back in. */
.fstage__back{position:absolute;top:0;left:40%;right:0;
  animation:drift-b 11s ease-in-out infinite}
/* Light chart plate in front, dropped below the terminal's top edge so the two
   overlap. Same animation, same duration, no delay: one phase. */
.fstage__front{position:relative;z-index:2;width:min(320px,86%);
  animation:drift-a 9s ease-in-out infinite}
/* The pair floats on both axes now. The two clocks differ so the panels have some
   life, but the HORIZONTAL travel is capped at ±5px each: the plate may never eat
   more of the terminal than --tlpad clears (54px overlap + 10px worst case < 84px). */
@keyframes drift-a{0%,100%{transform:translate3d(0,0,0)}
  30%{transform:translate3d(-5px,-11px,0)}60%{transform:translate3d(4px,-6px,0)}}
@keyframes drift-b{0%,100%{transform:translate3d(0,0,0)}
  35%{transform:translate3d(5px,-14px,0)}70%{transform:translate3d(-4px,-5px,0)}}
.dsrt__stage:not(.is-in) .fstage__back,.dsrt__stage:not(.is-in) .fstage__front{animation-play-state:paused}
.fpanel{display:flex;flex-direction:column}
.fpanel--chart{background:#fff;border:1px solid var(--stone);border-radius:12px;
  box-shadow:0 30px 60px -24px rgba(20,35,63,.34);padding:clamp(15px,1.7vw,21px)}
.fpanel__t{font-size:13px;font-weight:700;line-height:1.35;color:var(--navy)}
/* margin-top:auto parks the chart on the panel floor, so the columns' baseline
   sits at a fixed distance from the bottom no matter how the title wraps. */
.vch{margin-top:auto;padding-top:20px}
.vch__plot{position:relative;display:grid;grid-template-columns:repeat(5,minmax(0,1fr));
  gap:clamp(6px,.8vw,10px);align-items:end;height:clamp(186px,17vw,214px);
  border-bottom:2px solid var(--navy)}
.vch__col{position:relative;height:100%;display:flex;align-items:flex-end}
.vch__bar{display:block;width:100%;height:var(--h,100%);background:var(--navy);
  transform:scaleY(0);transform-origin:bottom center;transition:transform 640ms var(--ease-enter)}
.is-charted .vch__bar{transform:scaleY(1)}
/* An unreported year is a hollow column, not a short one: the same
   solid-means-tracked reading as the isometric fields. */
.vch__bar--empty{background:repeating-linear-gradient(135deg,rgba(224,122,47,.34) 0 2px,transparent 2px 7px);
  box-shadow:inset 0 0 0 1.5px rgba(224,122,47,.5)}
/* The stop is a VERTICAL rule between the last reported year and the first blank
   one, drawn downward — 60% is the column-3/4 boundary for a 5-column grid, so
   no JS measurement is needed. */
.vch__stop{position:absolute;top:-12px;bottom:-2px;left:60%;width:2px;margin-left:-1px;
  background:var(--orange);transform:scaleY(0);transform-origin:top center;
  transition:transform 460ms var(--ease-scrub) 620ms}
.is-stopped .vch__stop{transform:scaleY(1)}
.vch__axis{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:clamp(6px,.8vw,10px);margin-top:10px}
.vch__axis>div{text-align:center;min-width:0}
.vch__axis b{display:block;font-family:var(--font-mono);font-size:9.5px;font-weight:600;
  letter-spacing:.03em;color:var(--muted);font-variant-numeric:tabular-nums}
.vch__axis span{display:block;margin-top:5px;font-family:var(--font-mono);font-size:10.5px;font-weight:600;
  color:var(--navy);font-variant-numeric:tabular-nums}
.vch__axis .na{color:var(--muted)}
.vch__note{display:flex;align-items:center;justify-content:flex-end;gap:7px;
  margin-top:14px;padding-top:11px;border-top:1px solid var(--stone);
  font-family:var(--font-mono);font-size:9.5px;font-weight:600;letter-spacing:.12em;
  text-transform:uppercase;color:var(--navy);opacity:0;transition:opacity 400ms var(--ease-enter) 900ms}
.is-stopped .vch__note{opacity:1}
.vch__note i{width:5px;height:5px;flex:none;background:var(--orange)}
/* The record panel. It is one step lighter than the band and carries a hairline,
   because a navy-deep panel on a navy-deep ground would have no edge at all. */
.card-a{width:100%;background:var(--navy-deep);border-radius:12px;
  box-shadow:0 32px 66px -24px rgba(11,23,41,.5);overflow:hidden}
.card-a__bar{display:flex;align-items:center;justify-content:flex-end;gap:7px;height:30px;padding-inline:13px;
  background:rgba(255,255,255,.05);border-bottom:1px solid rgba(221,231,228,.1)}
.card-a__bar i{width:9px;height:9px;border-radius:50%;flex:none}
/* --tlpad is the terminal's left inset. It has to be WIDER than the chart
   plate's overlap (max ~85px at 1440) or the plate covers the JSON keys and the
   panel reads as broken instead of layered. The window dots move to the right
   for the same reason. Reset to 15px at 640, where the panels stop overlapping. */
.card-a__body{--tlpad:clamp(84px,7.5vw,104px);
  padding:14px 15px 18px var(--tlpad);font-family:var(--font-mono);font-size:10.5px;line-height:1.62;color:#93A4C0}
/* Hanging indent so a wrapped JSON value reads as a continuation, not as a
   new key sitting at column 0. */
.tl{display:block;white-space:pre-wrap;opacity:0;padding-left:2ch;text-indent:-2ch}
.tl.is-typed{opacity:1}
.card-a__req{color:var(--mist);margin-bottom:9px}
.k{color:#93A4C0}.s{color:var(--green-bright)}.n{color:var(--orange)}.num{color:var(--canvas)}.p{color:var(--muted)}
.tl--hl{border-left:2px solid var(--green-bright);background:rgba(63,191,132,.06);
  margin-left:-18px;padding-left:calc(16px + 2ch);padding-block:2px}
.caret{display:inline-block;width:6px;height:13px;background:var(--green-bright);vertical-align:-2px;margin-left:2px}
.caret.is-blinking{animation:caret-blink 1.06s steps(2,jump-none) 3}
.caret.is-done{display:none}
@keyframes caret-blink{0%,49%{opacity:1}50%,100%{opacity:0}}
/* The three figures run the full width under the split as one seamed ledger
   strip — the language of 01's record tape, re-lit for a dark ground. */
.fstage__figs{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));
  margin-top:clamp(48px,5.6vw,86px);
  border-top:1px solid var(--hairline);border-bottom:1px solid var(--hairline)}
.fstage__figs>div{padding:clamp(15px,1.8vw,24px) clamp(10px,1.3vw,18px);text-align:center}
.fstage__figs>div+div{border-left:1px solid var(--hairline)}
.fstage__figs b{display:block;font-family:var(--font-display);text-transform:uppercase;
  font-size:clamp(28px,3.6vw,54px);line-height:.9;letter-spacing:-.015em;
  color:var(--navy);font-variant-numeric:tabular-nums}
.fstage__figs span{display:block;margin-top:9px;font-family:var(--font-mono);font-size:10px;
  letter-spacing:.14em;text-transform:uppercase;line-height:1.4;color:var(--muted)}
.dsrt__closer{margin-top:clamp(44px,5vw,76px);text-align:center;
  font-family:var(--font-display);text-transform:uppercase;
  font-weight:400;color:var(--navy);font-size:clamp(27px,4.1vw,58px);line-height:.98;letter-spacing:-.015em}
.dsrt__closer::after{content:"";display:block;height:4px;width:clamp(110px,20vw,280px);background:var(--orange);
  margin:clamp(15px,1.7vw,23px) auto 0;transform:scaleX(0);transition:transform 700ms var(--ease-scrub) 320ms}
.dsrt__closer.is-in::after{transform:scaleX(1)}
.dsrt__line{display:block;overflow:hidden;padding-bottom:.14em;margin-bottom:-.11em}
.dsrt__line>span{display:block;transform:translateY(108%);transition:transform 880ms var(--ease-enter)}
.dsrt__closer.is-in .dsrt__line>span{transform:translateY(0)}
/* ===================================================== WHO WE ARE (SHELL)
   Structure only — every string inside is a labelled placeholder awaiting the
   client's copy and staff photographs. Sits on canvas between the navy
   "why it's different" band and the deep film band, so the alternation holds. */
.wwa__lede{max-width:64ch}
.wwa__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:clamp(24px,3vw,44px);margin-top:clamp(38px,4.4vw,66px)}
.wwa__slot{display:flex;flex-direction:column;gap:16px}
/* 4:5 portrait, dashed so it reads unmistakably as an empty slot rather than a
   design choice. Replaced by a plain <img> when the photographs arrive. */
.wwa__shot{aspect-ratio:4/5;border:2px dashed rgba(20,35,63,.28);display:flex;align-items:center;justify-content:center;padding:20px;text-align:center;
  font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);line-height:1.6}
.wwa__name{display:block;font-family:var(--font-display);text-transform:uppercase;font-size:clamp(21px,1.7vw,26px);line-height:1.05;color:var(--navy)}
.wwa__role{display:block;margin-top:6px;font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.wwa__todo{display:inline-flex;align-items:center;gap:9px;margin-top:clamp(26px,3vw,40px);padding:11px 16px;
  border-left:3px solid var(--orange);background:rgba(20,35,63,.04);
  font-family:var(--font-mono);font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--navy)}
.srcnote{margin-top:28px;font-size:var(--fs-caption);line-height:1.5;color:var(--muted);font-style:italic;max-width:62ch}
.srcnote--c{margin-inline:auto;text-align:center;max-width:80ch;font-style:normal;
  font-family:var(--font-mono);font-size:10.5px;letter-spacing:.05em;line-height:1.7}
.dsrt .srcnote{color:var(--muted)}

/* ================================================= G3 — CRISIS FIELD ==== */
.field-inline{position:relative;width:100%}
.field-inline svg{width:100%;height:auto;overflow:visible}
/* HUD line over the field. Mono, small, with a live scan dot. */
.fhud{display:flex;justify-content:space-between;align-items:center;gap:16px;
  font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--muted);padding-bottom:9px;border-bottom:1px solid rgba(20,35,63,.18);margin-bottom:14px}
.fhud__l{display:flex;align-items:center;gap:9px;color:var(--navy)}
.fhud__l i{width:7px;height:7px;background:var(--green-deep,#2E7D5B);display:block;
  animation:fhud-blink 1500ms steps(1,end) infinite}
@keyframes fhud-blink{0%,60%{opacity:1}61%,100%{opacity:.22}}
.fhud__r{color:var(--muted)}
/* Corner brackets: the field is framed like a readout, not matted like art. */
.field-inline--tech::before,.field-inline--tech::after{content:"";position:absolute;
  width:22px;height:22px;pointer-events:none;opacity:.5}
.field-inline--tech::before{left:0;top:0;border-left:2px solid var(--orange);border-top:2px solid var(--orange)}
.field-inline--tech::after{right:0;bottom:0;border-right:2px solid var(--orange);border-bottom:2px solid var(--orange)}
/* Colour key. Each swatch is a flat isometric cap, not a dot. */
.fkey{list-style:none;margin:18px 0 0;padding:0;display:grid;
  grid-template-columns:repeat(2,minmax(0,1fr));gap:8px 20px}
.fkey__i{position:relative;padding-left:20px;font-family:var(--font-mono);font-size:11.5px;
  letter-spacing:.06em;text-transform:uppercase;color:var(--muted);line-height:1.5}
.fkey__i::before{content:"";position:absolute;left:0;top:.34em;width:11px;height:11px;
  background:var(--sw);transform:rotate(45deg) scaleY(.58)}
.fkey__i--hollow{grid-column:1/-1;color:var(--navy)}
.fkey__i--hollow::before{background:none;border:1.6px dashed #6B6F78}
@media (max-width:900px){.fkey{grid-template-columns:1fr}.fkey__i--hollow{grid-column:auto}}
@media (prefers-reduced-motion:reduce){.fhud__l i{animation:none}}
.field-cap{margin-top:22px;font-size:var(--fs-caption);line-height:1.5;color:var(--muted);max-width:44ch}
.field-cap b{color:var(--navy);font-weight:700}

/* ================================================ 02 — THE SYSTEM ======= */
/* Rebuilt 2026-08-03 (2nd rebuild). The four short centred columns and the
   .xit exit-state register are both gone — the client called the section too
   big and the register wrong for the site. What replaces them is ONE statute
   rail: four full-width clauses stacked down the page against a single 2px
   gate line, each segment filling green when its clause enters view. No cards,
   no borders, no fills, nothing boxed — the rail is the only graphic. The
   section head stays centred; the clauses are left-aligned because statute
   reads left. Total height is well under the old two-block version. */
.laws{list-style:none;padding:0;margin:clamp(46px,5.5vw,76px) auto 0;max-width:1080px;text-align:left}
.law{position:relative;display:grid;
  grid-template-columns:clamp(78px,8vw,118px) minmax(0,1fr) clamp(160px,17vw,250px);
  align-items:start;gap:clamp(18px,2.6vw,44px);
  padding:clamp(26px,3vw,40px) 0 clamp(26px,3vw,40px) clamp(22px,2.6vw,36px)}
/* The rail: a dim segment per clause, butted so the four read as one line, and
   a green fill that draws top-to-bottom when the clause lights. */
.law::before,.law::after{content:"";position:absolute;left:0;top:0;bottom:0;width:2px}
.law::before{background:rgba(221,231,228,.16)}
.law::after{background:var(--green-bright);transform:scaleY(0);transform-origin:top center;
  transition:transform 700ms var(--ease-scrub);box-shadow:0 0 18px rgba(63,191,132,.45)}
.law.is-on::after{transform:scaleY(1)}
.law+.law{border-top:1px solid rgba(221,231,228,.1)}
/* Outlined numeral; fills green with the rail and on hover. */
.law__n{font-family:var(--font-display);font-size:clamp(40px,4.6vw,68px);line-height:.82;letter-spacing:-.02em;
  color:transparent;-webkit-text-stroke:1.6px rgba(221,231,228,.34);font-variant-numeric:tabular-nums;
  transition:color 420ms var(--ease-enter),-webkit-text-stroke-color 420ms var(--ease-enter)}
.law.is-on .law__n{-webkit-text-stroke-color:rgba(63,191,132,.55)}
.law:hover .law__n{color:var(--green-bright);-webkit-text-stroke-color:transparent}
.law__t{font-family:var(--font-display);text-transform:uppercase;letter-spacing:.005em;
  font-size:clamp(24px,2.9vw,40px);line-height:1.02;color:var(--on-dark);text-wrap:balance}
.law__b{margin-top:14px;font-size:clamp(14.5px,1.15vw,16px);line-height:1.62;
  color:rgba(221,231,228,.68);max-width:62ch;text-wrap:pretty}
.law__b b{color:var(--on-dark);font-weight:600}
/* Kicker sits in the third column as a stamp: mono, right-aligned, with a rule
   that draws in from the right when the clause lights. */
.law__k{justify-self:end;text-align:right;padding-top:.5em;font-family:var(--font-mono);
  font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:rgba(221,231,228,.5);
  transition:color 320ms var(--ease-enter)}
.law__k span{display:inline-block;padding-bottom:9px;position:relative}
.law__k span::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:var(--green-bright);
  transform:scaleX(0);transform-origin:right center;transition:transform 620ms var(--ease-scrub) 140ms}
.law.is-on .law__k{color:var(--green-bright)}
.law.is-on .law__k span::after,.law:hover .law__k span::after{transform:scaleX(1)}
@media (max-width:860px){
  .law{grid-template-columns:clamp(56px,13vw,78px) minmax(0,1fr);row-gap:14px}
  .law__k{grid-column:2;justify-self:start;text-align:left;padding-top:0}
  .law__k span::after{transform-origin:left center}
}

/* ======================================================= TIMELINE ======= */
.tline{margin-top:clamp(48px,6vw,80px)}
.tline__track{position:relative;height:2px;background:rgba(221,231,228,.2);margin:38px 0 0}
.tline__fill{position:absolute;inset:0;background:var(--green-bright);transform:scaleX(0);transform-origin:left center;
  transition:transform 1100ms var(--ease-scrub)}
.is-drawn .tline__fill{transform:scaleX(1)}
.tline__marks{display:flex;justify-content:space-between;margin-top:-6px}
.tline__m{display:flex;flex-direction:column;align-items:center;gap:10px;flex:1}
.tline__m i{width:10px;height:10px;border-radius:50%;background:var(--mist);border:2px solid var(--navy-deep);
  transform:scale(0);transition:transform 200ms var(--ease-punch)}
.is-drawn .tline__m i{transform:scale(1)}
.tline__m:nth-child(1) i{transition-delay:80ms}.tline__m:nth-child(2) i{transition-delay:300ms}
.tline__m:nth-child(3) i{transition-delay:520ms}.tline__m:nth-child(4) i{transition-delay:740ms}
.tline__m:nth-child(5) i{transition-delay:960ms}
.tline__m b{font-size:var(--fs-micro);font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--mist)}
.tline__m--key i{background:var(--green-bright);width:14px;height:14px}
.tline__m--key b{color:var(--green-bright)}
.tline__m small{font-size:10px;color:rgba(221,231,228,.6);text-align:center;max-width:14ch}

/* ============================ 03 THE GLASS — PUBLIC VIEW PANE (.gpv) ====
   Rebuilt 2026-08-03. The old white bordered dashboard card (.glass) is gone.
   Reasons: it was the only bordered card on a page that separates sections by
   ground colour alone, every value on it read oversized, and the whole thing
   was left-aligned inside a section whose head is now centred.
   The public view is now a FULL-BLEED dark pane — the ledger-band precedent:
   no border, no radius, no shadow, never a floating plate on cream. The
   masthead IS the eye-catcher (Anton wordmark + spaced mono subline between
   hairlines); the metrics sit under it, centred and deliberately SMALLER than
   before (40px, was 44px on a much heavier card). Green and orange may carry
   text here because the ground is navy-deep (7.4:1). */
.gpv{position:relative;margin-top:clamp(44px,5.5vw,74px);padding-block:clamp(42px,4.8vw,66px);
  background:var(--navy-deep);color:var(--mist);overflow:hidden;text-align:center}
/* Instrument grid, masked to a soft pool behind the masthead. */
.gpv::before{content:"";position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(rgba(63,191,132,.09) 1px,transparent 1px) 0 0/100% 36px,
    linear-gradient(90deg,rgba(63,191,132,.07) 1px,transparent 1px) 0 0/36px 100%;
  -webkit-mask-image:radial-gradient(120% 78% at 50% 30%,#000 8%,transparent 70%);
  mask-image:radial-gradient(120% 78% at 50% 30%,#000 8%,transparent 70%)}
/* Slow scan sweep. TRANSFORM, not background-position: the first version
   animated a full-bleed background and repainted the whole pane every frame,
   which starved the main thread even with the pane off screen. This band is
   compositor-only, and it is paused unless the pane is in view (.is-vis is
   toggled by motion.js §10). */
.gpv::after{content:"";position:absolute;left:0;right:0;top:0;height:46%;pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(63,191,132,.13),transparent);
  animation:gpv-scan 11s linear infinite}
@keyframes gpv-scan{from{transform:translateY(-100%)}to{transform:translateY(320%)}}
.gpv:not(.is-vis)::after{animation-play-state:paused}
.reel:not(.is-vis) .reel__ring{animation-play-state:paused}
@media (prefers-reduced-motion:reduce){.gpv::after{animation:none;opacity:0}}
.gpv__in{position:relative;z-index:2;display:flex;flex-direction:column;align-items:center}
.gpv__kicker{font-family:var(--font-mono);font-size:11px;letter-spacing:.3em;text-transform:uppercase;
  color:rgba(183,196,218,.74)}
.gpv__title{margin-top:16px;display:flex;flex-direction:column;align-items:center}
.gpv__t1{font-family:var(--font-display);font-weight:400;text-transform:uppercase;
  font-size:clamp(46px,7.4vw,110px);line-height:.88;letter-spacing:-.015em;color:#fff;
  text-shadow:0 0 46px rgba(63,191,132,.34),0 0 90px rgba(63,191,132,.16)}
.gpv__t2{display:flex;align-items:center;gap:clamp(12px,2vw,20px);margin-top:clamp(12px,1.4vw,18px);
  font-family:var(--font-mono);font-size:clamp(11px,1.05vw,14px);letter-spacing:.36em;
  text-transform:uppercase;color:var(--orange-soft);white-space:nowrap}
.gpv__t2::before,.gpv__t2::after{content:"";flex:none;height:1px;width:clamp(20px,7vw,96px)}
.gpv__t2::before{background:linear-gradient(90deg,transparent,rgba(242,177,131,.8))}
.gpv__t2::after{background:linear-gradient(90deg,rgba(242,177,131,.8),transparent)}
.gpv__meta{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:12px;
  margin-top:clamp(20px,2.4vw,30px);font-family:var(--font-mono);font-size:11.5px;
  letter-spacing:.13em;text-transform:uppercase;color:rgba(183,196,218,.8)}
.gpv__live{display:inline-flex;align-items:center;gap:8px;color:var(--green-bright);font-weight:600}
.gpv__live i{width:8px;height:8px;border-radius:50%;background:currentColor;flex:none;
  box-shadow:0 0 10px 1px rgba(63,191,132,.9);animation:pulse-dot 2s ease-in-out infinite}
.gpv__sep{color:rgba(183,196,218,.34)}
.gpv__badge{margin-top:14px;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.16em;
  text-transform:uppercase;color:var(--orange-soft);border:1px solid rgba(242,177,131,.38);
  background:rgba(224,122,47,.1);border-radius:var(--r-pill);padding:7px 16px}
.gpv__grid{display:grid;grid-template-columns:repeat(4,1fr);width:100%;
  margin-top:clamp(34px,4vw,54px);border-top:1px solid rgba(221,231,228,.14)}
.gpv__cell{padding:clamp(22px,2.4vw,32px) 18px 4px;border-left:1px solid rgba(221,231,228,.14)}
.gpv__cell:first-child{border-left:0}
.gpv__cell h4{font-family:var(--font-mono);font-size:10.5px;font-weight:600;letter-spacing:.15em;
  text-transform:uppercase;color:rgba(183,196,218,.82)}
.gpv__v{display:block;margin-top:14px;font-family:var(--font-display);font-size:clamp(32px,3.2vw,40px);
  line-height:1;color:#fff;font-variant-numeric:tabular-nums}
.gpv__cell p{margin-top:9px;font-size:var(--fs-micro);line-height:1.45;color:rgba(183,196,218,.66)}
.spark{display:block;margin:16px auto 0;width:100%;max-width:132px;height:30px;overflow:visible}
.spark path{fill:none;stroke:var(--green-bright);stroke-width:2;stroke-linecap:round;stroke-linejoin:round;
  stroke-dasharray:var(--len);stroke-dashoffset:var(--len);transition:stroke-dashoffset 900ms var(--ease-enter)}
.is-in .spark path{stroke-dashoffset:0}
.gpv__foot{display:flex;flex-wrap:wrap;justify-content:center;gap:clamp(16px,2.4vw,34px);
  margin-top:clamp(30px,3.4vw,44px);padding-top:18px;width:100%;
  border-top:1px solid rgba(221,231,228,.14);
  font-family:var(--font-mono);font-size:11px;letter-spacing:.13em;text-transform:uppercase;
  color:rgba(183,196,218,.78)}
.gpv__fi{display:inline-flex;align-items:center;gap:9px}
.gpv__fi::before{content:"";width:5px;height:5px;flex:none;background:rgba(183,196,218,.5);
  transform:rotate(45deg)}
.gpv__fi--ok{color:var(--green-bright)}
.gpv__fi--ok::before{background:var(--green-bright);box-shadow:0 0 8px 1px rgba(63,191,132,.7)}

.trio{display:grid;grid-template-columns:repeat(3,1fr);gap:clamp(24px,3vw,44px);margin-top:clamp(48px,6vw,72px)}
.trio h3{font-size:var(--fs-feature);font-weight:600;line-height:1.3;color:var(--navy)}
.trio p{margin-top:12px;font-size:var(--fs-body);line-height:1.6;color:var(--muted)}
.sec--center .trio p{max-width:38ch;margin-inline:auto}

/* ==================================== WHY IT'S DIFFERENT — VERDICT (.vs) ==
   Rebuilt 2026-08-03. The old .cmp was two full-shell columns of body copy —
   read as a wide spreadsheet, fought the centred sections around it, and the
   left head "The state's approach" was rejected (it is now "The current
   system"). What ships is a NARROW centred verdict ledger: max 780px, one row
   per claim, the failed line struck in mono above the Iron Gate answer, with
   an outlined Anton numeral in the gutter. No card, no border box — rows are
   separated by hairlines only, in keeping with the rest of the page. */
.display-section--narrow{font-size:clamp(30px,4vw,54px);max-width:26ch;margin-inline:auto}
.vs{max-width:1080px;margin:clamp(34px,4vw,54px) auto 0;text-align:center;
  opacity:0;transform:translateY(22px);
  transition:opacity 760ms var(--ease-enter),transform 760ms var(--ease-enter)}
.is-in.vs{opacity:1;transform:none}
.vs__legend{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:clamp(12px,2vw,26px);
  margin-bottom:6px;padding:0 clamp(16px,3vw,54px) 16px}
.vs__key{font-family:var(--font-mono);font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;
  padding:8px 15px;border-radius:var(--r-pill);border:1px solid;justify-self:end}
.vs__key--old{color:var(--orange-soft);border-color:rgba(242,177,131,.36);background:rgba(224,122,47,.09)}
.vs__key--new{color:var(--green-bright);border-color:rgba(63,191,132,.42);background:rgba(63,191,132,.09);
  box-shadow:0 0 26px -8px rgba(63,191,132,.5);justify-self:start}
.vs__vs{font-family:var(--font-display);font-size:15px;letter-spacing:.08em;text-transform:uppercase;
  color:rgba(221,231,228,.42)}
/* One line per claim: failure right-aligned into the centre, answer out of it.
   Stacked rows ran the section to a screen and a half — the page is long
   enough already, so the pair reads across, not down. */
.vs__row{position:relative;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;
  gap:clamp(12px,2vw,26px);padding:clamp(14px,1.5vw,19px) clamp(16px,3vw,54px);
  border-top:1px solid rgba(221,231,228,.14);transition:background 280ms var(--ease-enter)}
.vs__row:last-child{border-bottom:1px solid rgba(221,231,228,.14)}
.vs__row:hover{background:rgba(63,191,132,.055)}
/* Outlined Anton numeral in the gutter — same stamp idea as the 04 clause
   plate, kept low-contrast so it never competes with the copy. */
.vs__n{position:absolute;left:clamp(-4px,.4vw,6px);top:50%;transform:translateY(-50%);
  font-family:var(--font-display);font-size:clamp(26px,2.6vw,38px);line-height:1;
  color:transparent;-webkit-text-stroke:1px rgba(221,231,228,.16);pointer-events:none;
  transition:-webkit-text-stroke-color 280ms var(--ease-enter)}
.vs__row:hover .vs__n{-webkit-text-stroke-color:rgba(63,191,132,.42)}
/* Size floor: the strike is a 1px rule across a 13-14px mono cap. Any smaller
   and the rule swallows the letterforms — the claim has to stay legible while
   being crossed off. */
.vs__then{font-family:var(--font-mono);font-size:clamp(13px,1.05vw,14px);letter-spacing:.09em;
  text-transform:uppercase;color:var(--orange-soft);line-height:1.5;text-align:right}
.vs__txt{position:relative;display:inline}
.vs__txt::after{content:"";position:absolute;left:-2px;right:-2px;top:.55em;height:1px;background:var(--orange);
  transform:scaleX(0);transform-origin:left center;transition:transform 380ms var(--ease-scrub)}
.is-in .vs__txt::after{transform:scaleX(1)}
.vs__row:nth-of-type(2) .vs__txt::after{transition-delay:110ms}
.vs__row:nth-of-type(3) .vs__txt::after{transition-delay:220ms}
.vs__row:nth-of-type(4) .vs__txt::after{transition-delay:330ms}
.vs__row:nth-of-type(5) .vs__txt::after{transition-delay:440ms}
/* Orange-to-green hairline: the correction, drawn as one gesture. */
.vs__arrow{width:clamp(22px,3vw,44px);height:1px;flex:none;
  background:linear-gradient(90deg,rgba(224,122,47,.85),rgba(63,191,132,.9));
  transform:scaleX(0);transform-origin:left center;transition:transform 420ms var(--ease-scrub) 120ms}
.is-in .vs__arrow{transform:scaleX(1)}
.vs__now{font-size:clamp(14.5px,1.25vw,17px);line-height:1.45;color:var(--on-dark);
  font-weight:500;text-wrap:pretty;text-align:left}
.vs__mark{display:inline-block;margin-right:10px;color:var(--green-bright);font-weight:700;
  transform:scale(.7);opacity:0;transition:transform 220ms var(--ease-punch),opacity 220ms linear}
.is-in .vs__mark{transform:scale(1);opacity:1}
.vs__row:nth-of-type(2) .vs__mark{transition-delay:200ms}
.vs__row:nth-of-type(3) .vs__mark{transition-delay:300ms}
.vs__row:nth-of-type(4) .vs__mark{transition-delay:400ms}
.vs__row:nth-of-type(5) .vs__mark{transition-delay:500ms}

/* ================================================== FILM REEL (.reel) ====
   Rebuilt 2026-08-03. The old .film slot was a 900px dashed 16:9 box hung off
   a left-aligned head — it read as an empty div, not as an invitation to watch.
   The plate is now CENTRED and SMALLER (760px), framed by corner registration
   ticks with a glowing green play control, and it is click-to-play: with a
   YouTube id in data-yt on .reel, motion.js §16 swaps in the nocookie embed on
   click, so nothing third-party loads until the reader asks for it. No id ->
   the plate stays a labelled placeholder. Never autoplay. */
.reel{max-width:760px;margin:clamp(30px,3.4vw,48px) auto 0}
.reel__meta{display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:11px;
  font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;
  color:rgba(183,196,218,.78);margin-bottom:16px}
.reel__tag{color:var(--green-bright)}
.reel__sep{color:rgba(183,196,218,.34)}
.reel__frame{position:relative;aspect-ratio:16/9;display:grid;place-items:center;padding:clamp(20px,3vw,40px);
  background:
    radial-gradient(80% 60% at 50% 45%,rgba(63,191,132,.12),transparent 70%),
    linear-gradient(rgba(221,231,228,.05) 1px,transparent 1px) 0 0/100% 30px,
    linear-gradient(90deg,rgba(221,231,228,.04) 1px,transparent 1px) 0 0/30px 100%,
    #0A1424;
  box-shadow:inset 0 0 0 1px rgba(221,231,228,.14),0 40px 90px -50px rgba(0,0,0,.9)}
.reel__frame iframe{position:absolute;inset:0;width:100%;height:100%;border:0}
/* Corner registration ticks — the plate is a monitor, not a card, so the frame
   is drawn at the corners only and there is no radius. */
.reel__t{position:absolute;width:22px;height:22px;pointer-events:none}
.reel__t--tl{top:-1px;left:-1px;border-top:2px solid var(--orange);border-left:2px solid var(--orange)}
.reel__t--tr{top:-1px;right:-1px;border-top:2px solid var(--orange);border-right:2px solid var(--orange)}
.reel__t--bl{bottom:-1px;left:-1px;border-bottom:2px solid var(--green-bright);border-left:2px solid var(--green-bright)}
.reel__t--br{bottom:-1px;right:-1px;border-bottom:2px solid var(--green-bright);border-right:2px solid var(--green-bright)}
.reel__play{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);
  width:clamp(66px,7vw,86px);aspect-ratio:1;border-radius:50%;border:1px solid rgba(63,191,132,.55);
  background:rgba(11,23,41,.72);display:grid;place-items:center;cursor:pointer;
  box-shadow:0 0 40px -6px rgba(63,191,132,.5);
  transition:transform 260ms var(--ease-punch),box-shadow 260ms var(--ease-enter),background 260ms linear}
.reel__play:hover{transform:translate(-50%,-50%) scale(1.08);background:rgba(63,191,132,.16);
  box-shadow:0 0 60px 0 rgba(63,191,132,.75)}
.reel__play:active{transform:translate(-50%,-50%) scale(.97)}
.reel__tri{width:0;height:0;margin-left:5px;border-left:19px solid var(--green-bright);
  border-top:12px solid transparent;border-bottom:12px solid transparent}
/* Sonar ring — the one thing on the page that pulses outward; it is what pulls
   the eye to the film. */
.reel__ring{position:absolute;inset:-2px;border-radius:50%;border:1px solid rgba(63,191,132,.6);
  animation:reel-sonar 2.6s var(--ease-enter) infinite}
@keyframes reel-sonar{0%{transform:scale(1);opacity:.85}70%{transform:scale(1.65);opacity:0}100%{transform:scale(1.65);opacity:0}}
@media (prefers-reduced-motion:reduce){.reel__ring{animation:none;opacity:.5}}
.reel__slot{align-self:end;justify-self:center;text-align:center;font-size:var(--fs-micro);
  line-height:1.5;color:rgba(183,196,218,.72);max-width:52ch}
.reel__slot b{display:block;font-family:var(--font-mono);font-size:10.5px;font-weight:400;letter-spacing:.16em;
  text-transform:uppercase;color:var(--orange-soft);margin-bottom:7px}
.reel__slot code{font-family:var(--font-mono);font-size:11px;color:var(--mist)}
.reel.is-live .reel__slot,.reel.is-live .reel__play,.reel.is-live .reel__t,.reel.is-live .reel__alt{display:none}
/* Shown only when the embed was refused (see motion.js §16) — the film is
   still one click away. */
.reel__alt{position:absolute;left:50%;bottom:clamp(18px,3vw,30px);transform:translateX(-50%);display:none;
  font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--navy-deep);background:var(--green-bright);padding:11px 20px;border-radius:var(--r-pill);
  white-space:nowrap;transition:transform 220ms var(--ease-punch),box-shadow 220ms var(--ease-enter)}
.reel__alt:hover{color:var(--navy-deep);text-decoration:none;transform:translateX(-50%) translateY(-2px);
  box-shadow:0 0 34px -6px rgba(63,191,132,.8)}
.reel.is-blocked .reel__alt{display:inline-block}
.reel.is-blocked .reel__play{opacity:.35;pointer-events:none}
/* With a video id present the "not supplied" note goes away — the plate is a
   real player then, just not loaded yet. */
.reel.is-ready .reel__slot{display:none}
/* With the poster in, the instrument grid would fight the frame. */
.reel.has-poster .reel__frame{background-blend-mode:normal}
.reel__cap{margin-top:16px;font-family:var(--font-mono);font-size:11px;letter-spacing:.13em;
  text-transform:uppercase;color:rgba(183,196,218,.66)}
.reel__out{color:var(--green-bright);border-bottom:1px solid rgba(63,191,132,.4);padding-bottom:2px}
.reel__out:hover{color:var(--on-dark);border-bottom-color:var(--on-dark);text-decoration:none}

/* ========================================================== PILOT ======= */
/* Rebuilt 2026-08-03. The 2x2 white `.qcard` grid is gone: the site carries no
   cards anywhere else, and four of them pushed the section past two screens.
   Everything in 04 is centred now, and the four commitments share ONE clause
   plate. No panel, no border — the type and the seams are the structure. */
.sec--center{text-align:center}
.sec--center .lede{margin-inline:auto}
/* Centred eyebrow: rules on BOTH sides so the axis stays true. */
.sec__head--c{justify-content:center}
.sec__head--c::after{content:"";width:30px;height:2px;background:currentColor;flex:none}
.eyebrow--orange.sec__head--c::after{background:var(--orange)}

.pcm{margin-top:clamp(40px,5vw,68px);display:grid;justify-items:center}
/* ---- clause rail. Hairline dividers between tabs, orange underscore on the
   live one — orange stays graphic, the word is navy. ---- */
.pcm__rail{display:flex;flex-wrap:wrap;justify-content:center}
.pcm__tab{position:relative;background:none;border:0;cursor:pointer;padding:12px 22px 14px;
  display:inline-flex;align-items:baseline;gap:9px;color:var(--muted);
  font-family:var(--font-body);font-size:12.5px;font-weight:700;letter-spacing:.15em;text-transform:uppercase;
  transition:color 200ms var(--ease-enter)}
.pcm__tab+.pcm__tab{box-shadow:-1px 0 0 var(--hairline)}
.pcm__tab i{font-family:var(--font-mono);font-style:normal;font-size:10.5px;font-weight:600;letter-spacing:.1em;color:var(--muted);transition:color 200ms var(--ease-enter)}
.pcm__tab::after{content:"";position:absolute;left:22px;right:22px;bottom:0;height:2px;background:var(--orange);
  transform:scaleX(0);transform-origin:center;transition:transform 260ms var(--ease-enter)}
.pcm__tab:hover{color:var(--navy)}
.pcm__tab:hover i{color:var(--green)}
.pcm__tab.is-on{color:var(--navy)}
.pcm__tab.is-on i{color:var(--green)}
.pcm__tab.is-on::after{transform:scaleX(1)}
/* Dwell meter: the plate advances itself, and the fill says how long is left. */
.pcm__meter{width:min(100%,720px);height:2px;background:var(--hairline);margin-top:2px;overflow:hidden}
.pcm__meter span{display:block;height:100%;background:var(--green);transform:scaleX(0);transform-origin:left center}

/* ---- the plate. Clauses are stacked absolutely and the stage animates its own
   height to the live clause, so switching never jumps the page and a short
   clause does not leave a long one's worth of dead cream behind it. ---- */
.pcm__stage{position:relative;width:100%;margin-top:clamp(58px,7vw,104px);
  min-height:190px;   /* no-JS floor ONLY — must stay under the shortest panel or the measured height never governs */
  transition:height 460ms var(--ease-enter)}
.pcm__panel{position:absolute;inset:0 0 auto 0;display:grid;justify-items:center;
  opacity:0;transform:translateY(14px);pointer-events:none;
  transition:opacity 460ms var(--ease-enter),transform 560ms var(--ease-enter)}
.pcm__panel.is-on{opacity:1;transform:none;pointer-events:auto}
.pcm__panel[hidden]{display:grid}   /* hidden is the a11y state; the stack needs the box to keep its cell */
.pcm__panel[hidden]:not(.is-on){visibility:hidden}
/* Stamped numeral behind the words. Outlined, not filled: a filled ghost read
   as a brown smudge under the heading, and the 30° extrusion on a shape this
   large fought the type. Stroke only — graphic, carries no reading. */
.pcm__num{position:absolute;top:-.08em;left:50%;transform:translateX(-50%);z-index:0;pointer-events:none;
  font-family:var(--font-display);font-size:clamp(132px,16vw,232px);line-height:.78;letter-spacing:.01em;
  color:transparent;-webkit-text-stroke:2px rgba(20,35,63,.15);text-stroke:2px rgba(20,35,63,.15)}
.pcm__h{position:relative;z-index:1;max-width:22ch;font-family:var(--font-display);text-transform:uppercase;font-weight:400;
  color:var(--navy);font-size:clamp(32px,5.4vw,74px);line-height:.92;letter-spacing:-.018em}
.pcm__p{position:relative;z-index:1;margin-top:clamp(18px,2vw,26px);max-width:52ch;
  font-size:var(--fs-body-lg);line-height:1.55;color:var(--muted);text-wrap:pretty}
.pcm__stamp{position:relative;z-index:1;margin-top:clamp(22px,2.4vw,32px);display:inline-flex;align-items:center;gap:10px;
  font-family:var(--font-mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.pcm__stamp i{width:7px;height:7px;flex:none;border-radius:50%;background:var(--green)}
@media (max-width:640px){
  .pcm__tab{padding:10px 14px 12px;font-size:11.5px;letter-spacing:.1em}
  .pcm__tab::after{left:14px;right:14px}
  .pcm__tab+.pcm__tab{box-shadow:none}
}
@media (prefers-reduced-motion:reduce){
  .pcm__panel{transition:none;transform:none}
  .pcm__meter{display:none}
}

/* ==========================================================================
   THE LAUNCH PLATE (.lnch)                        added 2026-08-10
   The projected opening date, set as the largest thing in 04 after the section
   head. It is a PLATE, not a card: no border, no fill, no radius — the air
   around it is the frame (clamp(90px,11vw,170px) top and bottom, which is the
   widest vertical gap anywhere on this page and is the whole reason it reads
   as an announcement).

   The device is the site's own: mono kicker with a live green dot, a hairline
   register rule, the season in Anton at display scale, and one orange bar
   under it. Orange is graphic only — it never carries a word here either.
   "PROJECTED LAUNCH" is set small and cold directly above the date so the
   qualifier can never be read as decoration.
   ========================================================================== */
.lnch{margin:clamp(90px,11vw,170px) auto;max-width:1000px;text-align:center;
  display:flex;flex-direction:column;align-items:center}
/* register rule over the kicker — the same hairline-with-orange-head device the
   crisis docket and the statute rail use */
.lnch__k{position:relative;display:inline-flex;align-items:center;gap:10px;
  padding-top:16px;font-family:var(--font-mono);font-size:11px;letter-spacing:.2em;
  text-transform:uppercase;color:var(--navy)}
.lnch__k::before{content:"";position:absolute;left:50%;top:0;transform:translateX(-50%);
  width:clamp(180px,26vw,320px);height:1px;
  background:linear-gradient(90deg,transparent,var(--orange) 30%,var(--orange) 70%,transparent)}
.lnch__k i{width:7px;height:7px;flex:none;border-radius:50%;background:var(--green);
  box-shadow:0 0 0 4px rgba(46,125,91,.14)}
.lnch__lab{margin-top:clamp(30px,3.6vw,48px);font-family:var(--font-mono);
  font-size:12px;font-weight:600;letter-spacing:.34em;text-transform:uppercase;
  color:var(--muted)}
/* The date. Anton at hero scale — deliberately larger than the clause headings
   above it, because this is the one fact a waiting reader came for. */
.lnch__d{margin-top:clamp(10px,1.4vw,18px);font-family:var(--font-display);
  text-transform:uppercase;font-weight:400;color:var(--navy);
  font-size:clamp(56px,10vw,148px);line-height:.88;letter-spacing:-.02em}
/* clip-wipe on entry, the page's standard reveal for a display line */
.lnch__line{display:block;overflow:hidden}
.lnch__line>span{display:block;transform:translateY(105%);
  transition:transform 760ms var(--ease-enter) 120ms}
.lnch.is-in .lnch__line>span{transform:none}
.lnch__bar{margin-top:clamp(20px,2.4vw,32px);height:6px;width:0;
  background:var(--orange);
  transition:width 820ms var(--ease-enter) 420ms}
.lnch.is-in .lnch__bar{width:clamp(160px,24vw,300px)}
@media (prefers-reduced-motion:reduce){
  .lnch__line>span{transform:none}
  .lnch__bar{transition:none;width:clamp(160px,24vw,300px)}
}
@media (max-width:640px){
  .lnch__k{font-size:10px;letter-spacing:.14em;text-align:center;line-height:1.5}
  .lnch__lab{letter-spacing:.24em}
}
/* The closer is the last thing said in the section and now carries no buttons,
   so it is set as a monument: centred, full-shell width, seam above and below,
   and the words extruded 30° so they stand off the cream like cut steel. */
.closer{margin-top:clamp(64px,8vw,120px);text-align:center;display:grid;justify-items:center;
  gap:clamp(26px,3.4vw,46px)}
.closer__seam{display:block;width:min(100%,760px);height:3px;
  background:linear-gradient(90deg,var(--orange) 0 34%,var(--green) 34% 67%,rgba(20,35,63,.34) 67% 100%);
  transform:scaleX(0);transform-origin:center;transition:transform 780ms var(--ease-scrub) 120ms}
.closer.is-in .closer__seam{transform:scaleX(1)}
.closer.is-in .closer__seam--b{transition-delay:300ms}
.closer__l{--ext:rgba(20,35,63,.13);
  font-family:var(--font-display);text-transform:uppercase;font-weight:400;color:var(--navy);
  font-size:clamp(34px,6.2vw,98px);line-height:.9;letter-spacing:-.022em;max-width:34ch;
  text-shadow:1px .6px 0 var(--ext),2px 1.2px 0 var(--ext),3px 1.8px 0 var(--ext),
    4px 2.4px 0 var(--ext),5px 3px 0 var(--ext),6px 3.6px 0 var(--ext),7px 4.2px 0 var(--ext)}
.closer__line{display:block;overflow:hidden;padding-bottom:.02em}
.closer__line>span{display:block;transform:translateY(106%);transition:transform 900ms var(--ease-enter)}
.closer.is-in .closer__line>span{transform:translateY(0)}
.closer.is-in .closer__line:nth-child(2)>span{transition-delay:110ms}
.closer.is-in .closer__line:nth-child(3)>span{transition-delay:230ms}
/* "lives" keeps the italic condensed em and takes an orange underscore — the
   rule is graphic, the word itself stays navy. */
.closer__l em{position:relative;color:var(--navy)}
.closer__l em::after{content:"";position:absolute;left:-.02em;right:-.02em;bottom:.02em;height:.075em;
  background:var(--orange);transform:scaleX(0);transform-origin:left center;
  transition:transform 620ms var(--ease-scrub) 520ms}
.closer.is-in .closer__l em::after{transform:scaleX(1)}
/* Closing line reads as the verdict: heavier extrusion, wider tracking. */
.closer__line--fix{margin-top:.1em}
.closer__line--fix>span{--ext:rgba(224,122,47,.42);letter-spacing:.005em;
  text-shadow:1px .6px 0 var(--ext),2px 1.2px 0 var(--ext),3px 1.8px 0 var(--ext),
    4px 2.4px 0 var(--ext),5px 3px 0 var(--ext),6px 3.6px 0 var(--ext),7px 4.2px 0 var(--ext),
    8px 4.8px 0 var(--ext),9px 5.4px 0 rgba(20,35,63,.16)}
@media (prefers-reduced-motion:reduce){
  .closer__seam,.closer__line>span,.closer__l em::after{transition:none;transform:none}
}

/* =================================================== CONTACT BAND ======= */
/* Replaces the form section, deleted 2026-08-03. Full-bleed navy-deep with no
   card and no border — identical framing logic to the ledger band, and the same
   reason: green and orange only read as live on a dark ground.
   Console plate left, ask right; the two swap order below 1080. */
.ctb{position:relative;background:var(--navy-deep);color:var(--on-dark);overflow:hidden;padding-block:clamp(78px,9vw,140px)}
/* Tri-colour seam, echoing the footer topline — orange, green, steel. */
.ctb__filament{position:absolute;inset:0 0 auto;height:2px;opacity:.9;
  background:linear-gradient(90deg,var(--orange) 0 34%,var(--green) 34% 67%,#7A92B6 67% 100%)}
.ctb__hatch{position:absolute;inset:0;pointer-events:none;
  background-image:linear-gradient(rgba(122,146,182,.075) 1px,transparent 1px),linear-gradient(90deg,rgba(122,146,182,.075) 1px,transparent 1px);
  background-size:44px 44px;
  -webkit-mask-image:radial-gradient(120% 95% at 28% 42%,#000 22%,transparent 76%);
  mask-image:radial-gradient(120% 95% at 28% 42%,#000 22%,transparent 76%)}
/* Orange as LIGHT, never as a fill behind text — the only way it is allowed to
   sit this close to the console copy. */
.ctb__bloom{position:absolute;left:-8%;top:50%;width:min(780px,72%);aspect-ratio:1;transform:translateY(-50%);pointer-events:none;
  background:radial-gradient(circle,rgba(224,122,47,.20),rgba(224,122,47,0) 62%)}
.ctb__in{position:relative;display:grid;grid-template-columns:minmax(0,1.04fr) minmax(0,1fr);gap:clamp(44px,6vw,96px);align-items:center}

/* ---- the console plate. Replaces the clock in the reference layout: the
   platform itself rather than a metaphor for it. ---- */
.term{position:relative;animation:term-float 9s ease-in-out infinite}
.term__frame{position:relative;border-radius:14px;overflow:hidden;
  background:linear-gradient(180deg,#101E36,#0A1322);border:1px solid rgba(122,146,182,.30);
  box-shadow:0 50px 90px -42px rgba(0,0,0,.92),inset 0 0 0 1px rgba(255,255,255,.04),0 0 70px -26px rgba(63,191,132,.32);
  transform:perspective(1600px) rotateY(3.6deg) rotateX(1.1deg);
  transition:transform 620ms var(--ease-enter),box-shadow 620ms var(--ease-enter)}
.term:hover .term__frame,.term:focus-within .term__frame{transform:perspective(1600px) rotateY(0) rotateX(0) translateY(-5px);
  box-shadow:0 60px 100px -42px rgba(0,0,0,.95),inset 0 0 0 1px rgba(255,255,255,.06),0 0 90px -22px rgba(63,191,132,.5)}
@keyframes term-float{0%,100%{transform:translateY(0)}50%{transform:translateY(-10px)}}

.term__bar{display:flex;align-items:center;gap:14px;padding:12px 16px;background:rgba(255,255,255,.04);border-bottom:1px solid rgba(122,146,182,.22)}
.term__leds{display:flex;gap:7px;flex:none}
.term__leds i{width:9px;height:9px;border-radius:50%;background:rgba(122,146,182,.34)}
.term__leds i:first-child{background:var(--orange);box-shadow:0 0 9px rgba(224,122,47,.65)}
.term__title{font-family:var(--font-mono);font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:rgba(159,176,200,.92);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.term__secure{margin-left:auto;display:inline-flex;align-items:center;gap:8px;flex:none;
  font-family:var(--font-mono);font-size:11px;letter-spacing:.16em;text-transform:uppercase;color:var(--green-bright)}
.term__secure i{width:7px;height:7px;border-radius:50%;background:currentColor;box-shadow:0 0 9px 1px rgba(63,191,132,.85);animation:pulse-dot 2s ease-in-out infinite}

/* No min-height: the seven line boxes are built empty at load and already hold
   the screen open, so typing never shifts the plate and there is no dead room
   under the last line. */
.term__screen{position:relative;overflow:hidden;padding:22px clamp(18px,2vw,28px) 20px;
  background:radial-gradient(120% 100% at 18% 0%,rgba(63,191,132,.08),transparent 62%)}
.term__screen::after{content:"";position:absolute;inset:0;pointer-events:none;
  background:repeating-linear-gradient(rgba(255,255,255,.03) 0 1px,transparent 1px 3px)}
.term__scan{position:absolute;left:0;right:0;top:0;height:36%;pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(63,191,132,.13) 48%,transparent);
  animation:term-scan 6.5s linear infinite}
@keyframes term-scan{0%{transform:translateY(-100%)}100%{transform:translateY(320%)}}

.tml{position:relative;font-family:var(--font-mono);font-size:clamp(11.5px,1.02vw,14px);line-height:2.02;letter-spacing:.02em;
  white-space:nowrap;color:var(--mist);opacity:0;transition:opacity 180ms linear;min-height:2.02em}
.tml.is-on{opacity:1}
/* The closing line is the promise the whole system makes — it gets the same
   green filament treatment as the highlighted row in the float card. */
.tml--seal{margin-left:calc(-1 * clamp(18px,2vw,28px));padding-left:calc(clamp(18px,2vw,28px) - 2px);
  border-left:2px solid var(--green-bright);background:rgba(63,191,132,.07)}
.tm-p{color:var(--green-bright)}
.tm-c{color:var(--on-dark)}
.tm-k{color:#93A4C0}
.tm-d{color:rgba(147,164,192,.5)}
.tm-w{color:var(--canvas)}
.tm-s{color:var(--green-bright)}
.tm-n{color:var(--orange-soft)}
.tmcaret{display:inline-block;width:8px;height:1em;background:var(--green-bright);vertical-align:-.16em;margin-left:3px;
  box-shadow:0 0 10px rgba(63,191,132,.85);animation:tm-blink 1.05s steps(1,end) infinite}
@keyframes tm-blink{0%,50%{opacity:1}50.01%,100%{opacity:0}}

.term__foot{display:flex;align-items:center;gap:clamp(16px,2.2vw,32px);padding:14px clamp(18px,2vw,28px);
  border-top:1px solid rgba(122,146,182,.22);background:rgba(9,18,33,.7)}
.term__stat{display:flex;flex-direction:column;gap:3px;min-width:0}
.term__stat b{font-family:var(--font-mono);font-size:16px;font-weight:700;font-variant-numeric:tabular-nums;color:var(--on-dark)}
.term__stat--zero b{color:var(--green-bright)}
.term__stat small{font-family:var(--font-body);font-size:10px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:rgba(159,176,200,.82)}
/* Same badge rule as The Glass: nothing numeric ships without it until the
   pilot produces verified figures. */
.term__tag{margin-left:auto;flex:none;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.16em;text-transform:uppercase;
  color:var(--orange-soft);border:1px solid rgba(242,177,131,.42);border-radius:var(--r-pill);padding:5px 12px;white-space:nowrap}

/* ---- the ask ---- */
.ctb__copy{max-width:58ch}
.ctb__cta{display:flex;flex-wrap:wrap;gap:14px;margin-top:clamp(30px,3.4vw,42px)}
/* colour is not optional here: `.band-deep a` (0-1-1) outranks `.btn--primary`
   (0-1-0), and this is the first .btn--primary ANCHOR on a dark ground on the
   page — without it the label renders --green-bright on --green, 2.2:1. */
.ctb__cta .btn--primary{color:var(--on-dark);box-shadow:0 0 0 1px rgba(63,191,132,.42),0 16px 36px -18px rgba(63,191,132,.85)}
.ctb__cta .btn--primary:hover{color:var(--on-dark);box-shadow:0 0 0 1px var(--green-bright),0 0 36px -6px rgba(63,191,132,.75)}
.ctb__cta .btn--outline{color:var(--on-dark);border-color:rgba(221,231,228,.32)}
.ctb__cta .btn--outline:hover{color:var(--on-dark);border-color:var(--green-bright)}
.ctb__urgency{display:flex;align-items:center;gap:12px;margin-top:28px;
  font-family:var(--font-mono);font-size:12px;letter-spacing:.13em;text-transform:uppercase;color:rgba(159,176,200,.95)}
.ctb__urgency::before{content:"";width:26px;height:2px;background:var(--orange);flex:none}
.ctb__direct{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:18px 30px;
  margin-top:30px;padding-top:24px;border-top:1px solid rgba(122,146,182,.24)}
.ctb__direct li{display:flex;flex-direction:column;gap:5px;min-width:0;font-size:var(--fs-body);color:var(--on-dark)}
.ctb__direct span{font-family:var(--font-body);font-size:10.5px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:rgba(159,176,200,.85)}
.ctb__direct a{overflow-wrap:anywhere}

@media (max-width:1080px){
  .ctb__in{grid-template-columns:1fr;gap:clamp(40px,6vw,60px)}
  .ctb__copy{order:1;max-width:none}
  .ctb__stage{order:2}
  .term__frame{transform:none}
  .term:hover .term__frame,.term:focus-within .term__frame{transform:translateY(-4px)}
}
@media (max-width:560px){
  .ctb__direct{grid-template-columns:1fr}
  .term__foot{flex-wrap:wrap;gap:14px}
  .term__tag{margin-left:0}
  .tml{font-size:10.5px}
}
@media (prefers-reduced-motion:reduce){
  .term,.term__scan,.tmcaret,.term__secure i{animation:none}
  .term__frame{transform:none}
  .tml{opacity:1}
}

/* ================================ THE EVIDENCE + CLOSE (FOOTER) =========
   Structure follows the client-supplied reference layout: a centred card grid
   of citations on the cream ground, then a dark close carrying one claim, one
   CTA, a thin link row, and the wordmark clipped by the page edge. The five
   sources are the only figures allowed on the page — never delete a card. */
.ev__head{display:flex;flex-direction:column;align-items:center;gap:14px;text-align:center}
.ev__kicker{display:flex;align-items:center;gap:14px;font-size:11px;font-weight:700;letter-spacing:.24em;
  text-transform:uppercase;color:var(--navy)}
.ev__kicker span{width:clamp(26px,5vw,64px);height:1px;background:var(--orange)}
.ev__h{font-family:var(--font-display);text-transform:uppercase;font-weight:400;letter-spacing:-.025em;
  font-size:clamp(46px,8.4vw,132px);line-height:.86;color:var(--navy)}
.ev__note{max-width:54ch;font-size:var(--fs-caption);line-height:1.6;color:var(--muted)}
.ev__grid{display:grid;grid-template-columns:repeat(5,1fr);gap:14px;margin-top:clamp(38px,4.6vw,64px);
  border-top:1px solid var(--hairline);padding-top:clamp(30px,3.6vw,46px)}
.ev__card{position:relative;overflow:hidden;display:flex;flex-direction:column;gap:9px;
  padding:26px 20px 18px;text-decoration:none;background:#fff;border:1px solid var(--hairline);border-radius:14px;
  transition:border-color 220ms linear,transform 260ms var(--ease-enter),box-shadow 260ms linear}
.ev__card:hover{border-color:rgba(46,125,91,.4);transform:translateY(-6px);box-shadow:0 18px 40px rgba(20,35,63,.11)}
.ev__bar{position:absolute;top:0;left:0;right:0;height:4px;background:var(--orange);
  transform:scaleX(.3);transform-origin:left;transition:transform 320ms var(--ease-enter),background 220ms linear}
.ev__card:hover .ev__bar{transform:scaleX(1);background:var(--green)}
.ev__n{font-family:var(--font-display);font-size:clamp(34px,3.4vw,46px);line-height:.8;letter-spacing:-.02em;
  color:rgba(20,35,63,.16);transition:color 220ms linear}
.ev__card:hover .ev__n{color:rgba(46,125,91,.34)}
.ev__t{font-family:var(--font-display);text-transform:uppercase;font-weight:400;letter-spacing:-.008em;
  font-size:clamp(17px,1.55vw,22px);line-height:.96;color:var(--navy)}
.ev__d{font-size:var(--fs-micro);line-height:1.55;color:var(--muted)}
.ev__src{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:auto;padding-top:14px;
  border-top:1px solid var(--hairline)}
.ev__dom{font-size:10px;font-weight:700;letter-spacing:.14em;text-transform:uppercase;color:var(--muted);
  transition:color 200ms linear}
.ev__card:hover .ev__dom{color:var(--green)}
.ev__go{font-size:13px;color:var(--muted);transition:color 200ms linear,transform 260ms var(--ease-enter)}
.ev__card:hover .ev__go{color:var(--green);transform:translate(3px,-3px)}
.close{position:relative;overflow:hidden;background:var(--navy-deep);color:var(--mist);padding-bottom:clamp(34px,4vw,56px)}
.close__topline{height:3px;background:linear-gradient(90deg,var(--orange) 0 34%,var(--green) 34% 67%,rgba(221,231,228,.55) 67% 100%)}
.close__field{position:absolute;inset:0;opacity:.6;pointer-events:none;
  background-image:linear-gradient(rgba(221,231,228,.04) 1px,transparent 1px),linear-gradient(90deg,rgba(221,231,228,.04) 1px,transparent 1px);
  background-size:44px 44px;
  -webkit-mask-image:radial-gradient(120% 90% at 50% 0%,#000 0%,transparent 70%);mask-image:radial-gradient(120% 90% at 50% 0%,#000 0%,transparent 70%)}
.close .shell{position:relative}
.close__claim{max-width:22ch;margin:clamp(56px,7vw,104px) auto 0;text-align:center;color:var(--on-dark);
  font-family:var(--font-display);text-transform:uppercase;font-weight:400;letter-spacing:-.02em;
  font-size:clamp(30px,4.6vw,72px);line-height:.96}
.close__claim em{font-style:normal;font-family:inherit;font-stretch:100%;letter-spacing:inherit;color:var(--green-bright)}
.close__cta{display:flex;justify-content:center;margin-top:clamp(26px,3vw,38px)}
.close__nav{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:clamp(18px,3vw,44px);
  margin-top:clamp(52px,6.5vw,92px);padding-top:clamp(28px,3.4vw,42px);border-top:1px solid rgba(221,231,228,.14)}
.close__nav a{display:inline-flex;align-items:baseline;gap:8px;text-decoration:none;color:var(--on-dark);
  font-family:var(--font-display);text-transform:uppercase;font-weight:400;letter-spacing:.01em;
  font-size:clamp(17px,1.9vw,26px);line-height:1;transition:color 180ms linear,transform 220ms var(--ease-enter)}
.close__nav a i{font-style:normal;font-size:.62em;letter-spacing:.08em;color:var(--orange-soft);transition:color 180ms linear}
.close__nav a:hover{color:var(--green-bright);transform:translateY(-2px)}
.close__nav a:hover i{color:var(--green-bright)}
.close__meta{display:flex;flex-wrap:wrap;justify-content:center;align-items:center;gap:10px clamp(14px,2vw,26px);
  margin-top:clamp(20px,2.4vw,30px);font-size:var(--fs-micro);letter-spacing:.02em}
.close__meta a,.close__meta span{font-size:var(--fs-micro);line-height:1.5}
.close__meta a{color:rgba(221,231,228,.72);text-decoration:none;border-bottom:1px solid transparent;padding-bottom:2px}
.close__meta a:hover{color:var(--green-bright);border-bottom-color:currentColor}
.close__meta span{color:rgba(221,231,228,.66);text-transform:uppercase;letter-spacing:.12em;font-weight:600}
.close__mark{text-align:center;margin:clamp(44px,5.5vw,80px) 0 0;padding-inline:clamp(18px,4vw,44px);white-space:nowrap;
  font-family:var(--font-display);text-transform:uppercase;font-weight:400;letter-spacing:-.035em;
  font-size:clamp(44px,12.4vw,214px);line-height:.8;color:var(--on-dark);
  margin-bottom:-.06em;-webkit-user-select:none;user-select:none}
.close__legal{margin:clamp(36px,4.5vw,64px) auto 0;text-align:center;
  font-size:var(--fs-micro)!important;line-height:1.7;color:rgba(221,231,228,.55);max-width:78ch}
.close__legal b{color:rgba(221,231,228,.85);font-weight:700}
@media (max-width:1040px){.ev__grid{grid-template-columns:repeat(3,1fr)}}
@media (max-width:720px){.ev__grid{grid-template-columns:repeat(2,1fr)}}
@media (max-width:520px){.ev__grid{grid-template-columns:1fr}}
.needs{color:var(--orange-soft);font-style:normal;font-stretch:100%;font-weight:600;letter-spacing:0;border-bottom:1px dashed currentColor}

/* jump CTA repeated at the end of each section */
.jump{display:inline-flex;align-items:center;gap:9px;margin-top:clamp(40px,5vw,60px);
  font-size:var(--fs-caption);font-weight:600;letter-spacing:.02em;color:var(--green);
  border-bottom:1px solid transparent;padding-bottom:3px}
.jump:hover{color:var(--navy);border-bottom-color:var(--navy);text-decoration:none}
.band-navy .jump,.band-deep .jump{color:var(--green-bright)}
.band-navy .jump:hover,.band-deep .jump:hover{color:var(--on-dark);border-bottom-color:var(--on-dark)}

/* -------------------------------------------------------------- MOTION -- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{
    animation-duration:.01ms !important;
    animation-iteration-count:1 !important;
    transition-duration:.01ms !important;
    scroll-behavior:auto !important;
  }
  .nav{transform:none;opacity:1}
  .reveal-line>span{transform:none}
  .hero__sub,.hero__actions,.hero__note,.field{opacity:1;transform:none}
  .hero__eyebrow b:hover{transform:none}
  .field__col-grow{transform:scaleY(1)}
  /* Everything that waits on an observer or a keyframe is revealed outright. */
  .rv,.vs{opacity:1;transform:none}
  .gband__line>span,.card-a,.card-b{transform:none}
  .gband__media{transform:none!important}
  .gband__title{transform:none!important}
  .chart__bar{transform:scaleX(1)}
  .chart__stopline{transform:scaleX(1)}
  .chart__stoplabel{opacity:1}
  .tline__fill{transform:scaleX(1)}
  .tline__m i{transform:scale(1)}
  .vs__mark{transform:scale(1);opacity:1}
  .vs__txt::after,.vs__arrow{transform:scaleX(1)}
  .spark path{stroke-dashoffset:0}
  .rcpt__bar::after,.crisis__hammer::after{transform:none}
  .pull__grid{animation:none}
  .pull__line>span{transform:none}
  .crisis__line>span{transform:none}
  .dsrt__line>span{transform:none}
  .dsrt__closer::after{transform:none}
  .rcpt__fig--hollow{-webkit-text-stroke-color:rgba(20,35,63,.82)}
  .tl{opacity:1}
  .caret{display:none}
  .cap__rail,.ticker__rail{animation:none}
  .fstage__back,.fstage__front{animation:none}
  .dsrt__h .dsrt__hl>span{transform:none}
  .vch__bar{transform:scaleY(1)}
  .vch__stop{transform:scaleY(1)}
  .vch__note{opacity:1}
}

/* ------------------------------------------------------ MEDIA QUERIES -- */
@media (max-width:1240px){
  .nav__links{gap:18px}
  .nav__link{font-size:13px}
  .nav__cta .btn{padding:12px 20px}
}
@media (max-width:1080px){
  .nav__links{display:none}
  .nav__burger{display:block}
  .nav__cta .btn{padding:11px 17px;font-size:13px}
  .hero__copy{max-width:min(880px,92vw)}
  .nav__links.is-open{display:flex;position:absolute;left:0;right:0;top:100%;flex-direction:column;align-items:flex-start;gap:0;
    background:var(--canvas);border-bottom:1px solid var(--hairline);padding:8px var(--outer) 18px}
  .nav__links.is-open .nav__link{width:100%;padding-block:13px;border-bottom:1px solid var(--hairline)}
  .nav__links.is-open .nav__link::after{display:none}
}
@media (max-width:1180px){
  /* Stop overlaying the field once the copy column would collide with it. */
  .hero__copy{max-width:none}
  /* Stacked full-width under the copy, so the horizontal "stay out from under
     the headline" fade is meaningless and is dropped. The radial edge blend is
     kept — it is what stops the field ending on a hard rectangle, which matters
     at every width. */
  .field{position:relative;right:auto;top:auto;width:100%;min-width:0;margin-top:44px;
    -webkit-mask-image:radial-gradient(ellipse 82% 78% at 50% 48%,#000 40%,rgba(0,0,0,.62) 68%,rgba(0,0,0,.18) 86%,transparent 97%);
    mask-image:radial-gradient(ellipse 82% 78% at 50% 48%,#000 40%,rgba(0,0,0,.62) 68%,rgba(0,0,0,.18) 86%,transparent 97%);
    -webkit-mask-composite:source-over;mask-composite:add}
  .hero{padding-block:clamp(18px,2.2vw,30px) clamp(48px,6vw,88px)}
}
@media (max-width:1024px){
  /* The desert split stacks. The two panels keep their overlap but stop drifting,
     and the terminal stops bleeding — it sits flush to the right of the measure. */
  .dsrt__split{grid-template-columns:minmax(0,1fr);row-gap:clamp(30px,4vw,46px)}
  /* Same arrangement as desktop, just without the bleed: the terminal stays
     pinned HIGH and the chart plate drops across its bottom-left corner. Do not
     invert these — an earlier pass put the plate on top and the terminal low, and
     the client rejected it. The pair keeps drifting on the one clock. */
  .fstage{padding-top:clamp(70px,9vw,120px)}
  .fstage__back{left:33%;right:0;top:0}
  .fstage__front{width:min(340px,84%)}
  /* Four rule columns pair up; the seam moves from vertical to horizontal. */
  .laws{grid-template-columns:repeat(2,1fr)}
  .law:nth-child(3){border-left:0}
  .law:nth-child(-n+2){padding-bottom:clamp(20px,2.4vw,30px);border-bottom:1px solid rgba(221,231,228,.14)}
  .law:nth-child(n+3){padding-top:clamp(20px,2.4vw,30px)}
  /* The tape folds to two columns; each row's segments still meet flush. */
  .rcpt__row{grid-template-columns:repeat(2,minmax(0,1fr));row-gap:clamp(24px,2.8vw,34px)}
  .rcpt__c:nth-child(2n+1){padding-left:0}
  .rcpt__c:nth-child(2n){padding-right:0}
  .rcpt__c:nth-child(2n+1) .rcpt__bar{margin-left:0}
  .rcpt__c:nth-child(2n) .rcpt__bar{margin-right:0}
  .rcpt__c:nth-child(2n) .rcpt__bar{margin-left:calc(-1*var(--cpad))}
  .gpv__grid{grid-template-columns:1fr 1fr}
  .gpv__cell:nth-child(3){border-left:0}
  .gpv__cell:nth-child(-n+2){border-bottom:1px solid rgba(221,231,228,.14);padding-bottom:22px}
  .trio{grid-template-columns:1fr}
}
@media (max-width:900px){
  :root{--outer:16px}
  .nav__cta .btn--outline{display:none}   /* the menu carries Donate below 900 */
  .nav__links .nav__menu-donate{display:flex}
  .split{grid-template-columns:1fr}
  .crisis__grid{grid-template-columns:1fr;gap:clamp(24px,4vw,36px)}
  .crisis__top{flex-direction:column;align-items:flex-start;gap:10px}
  .crisis__docket{text-align:left}
  .quad{grid-template-columns:1fr}
  .laws{grid-template-columns:1fr}
  .law+.law{border-left:0}
  .law:nth-child(2){padding-bottom:clamp(20px,2.4vw,30px);border-bottom:1px solid rgba(221,231,228,.14)}
  /* Register stacks on the axis: index above the state, tag below it. */
  .xit__row,.xit__void{grid-template-columns:1fr;justify-items:center;gap:5px}
  .xit__i,.xit__tag{justify-self:center}
  .xit__s::after{left:0;right:0}
  .tl{opacity:1}
  .cap__item{font-size:29px;gap:10px}
  .cap__item::before{width:12px;height:21px;
    background:
      linear-gradient(var(--green-bright) 0 0) left 0 bottom 0 / 3px 12px no-repeat,
      linear-gradient(var(--green) 0 0) left 4.5px bottom 0 / 3px 21px no-repeat,
      linear-gradient(var(--orange) 0 0) left 9px bottom 0 / 3px 7px no-repeat}
  .cap__group{gap:32px;padding-right:32px}
  .cap__viewport{padding:40px 0 76px}
  .cap__head{padding-bottom:20px}
  .gband{height:clamp(340px,52vw,440px)}
  .tline__m small{display:none}
}
@media (max-width:640px){
  .dsrt__cols{columns:1}
  /* Panels stop overlapping here, so the terminal's inset goes back to normal. */
  .card-a__body{--tlpad:15px}
  .fstage{padding-top:0}
  .fstage__back{position:relative;left:auto;right:auto;top:auto;width:100%}
  .fstage__front{width:100%;margin-top:16px}
  .fstage__ks{flex-direction:column;gap:9px;align-items:flex-start}
  .fstage__figs{grid-template-columns:minmax(0,1fr)}
  .fstage__figs>div+div{border-left:0;border-top:1px solid var(--hairline)}
  .rcpt__row{grid-template-columns:minmax(0,1fr);row-gap:30px}
  .rcpt__c{padding-inline:0}
  .rcpt__bar{margin-inline:0}
  .rcpt__c .stat__src{margin-top:0}
  .pull__cite{white-space:normal;letter-spacing:.18em}
  .pull__cite::before,.pull__cite::after{display:none}
  .vs__n{display:none}
  .vs__legend{grid-template-columns:1fr;gap:10px;justify-items:center}
  .vs__key,.vs__key--new{justify-self:center}
  .vs__row{grid-template-columns:1fr;gap:9px;text-align:center;padding-block:18px}
  .vs__then,.vs__now{text-align:center}
  .vs__arrow{justify-self:center;width:44px}
  .gpv__grid{grid-template-columns:1fr}
  .gpv__cell{border-left:0;border-bottom:1px solid rgba(221,231,228,.14);padding-bottom:22px}
  .gpv__cell:last-child{border-bottom:0}
  .gpv__t2{letter-spacing:.2em;white-space:normal}
  .card-b__figs{grid-template-columns:1fr;gap:14px}
  .tline__marks{flex-wrap:wrap;gap:18px}
}
@media (max-width:400px){
  .reveal-line>span{transform:none}
  .hero__sub,.hero__actions,.hero__note{transform:none}
  /* Below 400px nothing animates except opacity. */
  .rv,.vs{transform:none!important}
  .gband__line>span{transform:none}
  .card-a,.card-b{animation:none}
}


/* ======================================================= HERO COUNTIES ===
   The county/agency briefing ask, demoted out of the button row. It speaks to
   procurement; the hero speaks to the people this program serves and to the
   donors funding the pilot. Mono and small on purpose — findable, not
   competing with the primary ask. */
.hero__counties{font-family:var(--font-mono);font-size:11px;letter-spacing:.17em;text-transform:uppercase;color:var(--muted)}
.hero__counties a{color:var(--navy);border-bottom:1px solid var(--orange);text-decoration:none}
.hero__counties a:hover{color:var(--green);border-bottom-color:var(--green);text-decoration:none}
.hero__counties button{font:inherit;letter-spacing:inherit;text-transform:inherit;color:var(--navy);background:none;border:0;padding:0;cursor:pointer;
  border-bottom:1px solid var(--orange);transition:color 180ms var(--ease-enter),border-color 180ms var(--ease-enter)}
.hero__counties button:hover,.hero__counties button:focus-visible{color:var(--green);border-bottom-color:var(--green)}

/* ======================================================= ACCOUNTABILITY ===
   Seamed cells, no cards — the same rule the rest of the page follows. Left
   aligned against a left-aligned head: it is a register of documents, not a
   statement, so it should read like the ledger strips in 01 rather than like
   the centred argument sections. */
.acct__h{max-width:24ch;margin-inline:0}
.acct__grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));gap:0;margin-top:clamp(30px,3.4vw,46px);
  border-top:2px solid var(--navy);border-bottom:2px solid var(--navy)}
.acct__cell{padding:clamp(20px,2.2vw,28px) clamp(16px,1.8vw,24px);border-left:1px solid var(--hairline)}
.acct__cell:first-child{border-left:0}
.acct__k{display:block;font-family:var(--font-mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted)}
.acct__v{margin-top:12px;font-size:var(--fs-caption);line-height:1.55;color:var(--navy)}


/* ==================================================== SCHEMATIC FIELD ===
   The plot writes scaleY on every band on every scroll frame, so the 900ms
   entrance transition has to come off or each write would be animating toward
   a value the next write replaces. Registration marks fade on their own short
   transition, which scroll does not fight. */
.field--plot .field__col-grow{transition:none}
.field__marks{transition:opacity 260ms var(--ease-enter)}


/* ############################################################################
   MULTI-PAGE PASS 2026-08-05 — APPENDED, NOTHING ABOVE THIS LINE TOUCHED.
   ----------------------------------------------------------------------------
   Adds the two doors, the case-flow rail, and the two audience paths that now
   live on their own pages (get-help.html / for-organizations.html).
   Every value below is drawn from a token already in :root or reuses a literal
   verbatim from the component it is deliberately speaking the language of. No
   new colour, no new font, no new breakpoint, no new radius.
   Breakpoints used: 1440 / 1240 / 900 / 640 / 400 — all already in the sheet.
   ######################################################################### */

/* =============================================== THE TWO DOORS (.doors) ====
   Sits directly under the hero, above the ledger band, on --stone.

   REBUILT 2026-08-05, founder brief: both doors must "stand out a lot" and
   pull the reader in. They were white .ev__card boxes with a text link; they
   are now two lit navy-deep plates — the only place on the page where a card
   glows — each with a solid pill action and a slow sheen that crosses the pair
   in sequence (door 2 delayed, so it reads as one sweep, not two loops).
   Dark ground is also what makes the palette legal here: --green-bright is
   7.4:1 on navy-deep and --orange-soft carries text at 8.9:1, neither of which
   is permitted on a light card. Sheen and glow are dropped under
   prefers-reduced-motion at the end of the sheet. */
.doors__grid{display:grid;grid-template-columns:repeat(2,1fr);gap:clamp(16px,2vw,26px);margin-top:clamp(26px,3vw,40px)}
.door{position:relative;overflow:hidden;display:flex;flex-direction:column;gap:14px;text-decoration:none;isolation:isolate;
  padding:clamp(32px,3.6vw,48px) clamp(24px,2.8vw,38px) clamp(28px,3.2vw,38px);
  border:0;border-radius:18px;
  background:radial-gradient(120% 130% at 10% 0%,rgba(63,191,132,.2),transparent 58%),linear-gradient(168deg,#132744 0%,var(--navy-deep) 64%);
  box-shadow:0 0 0 1px rgba(63,191,132,.3),0 26px 60px -30px rgba(11,23,41,.9),0 0 54px -22px rgba(63,191,132,.42);
  transition:transform 320ms var(--ease-enter),box-shadow 320ms var(--ease-enter)}
.door--org{background:radial-gradient(120% 130% at 10% 0%,rgba(224,122,47,.22),transparent 58%),linear-gradient(168deg,#1A2B4A 0%,var(--navy-deep) 64%);
  box-shadow:0 0 0 1px rgba(242,177,131,.3),0 26px 60px -30px rgba(11,23,41,.9),0 0 54px -22px rgba(224,122,47,.4)}
.door:hover{transform:translateY(-8px);text-decoration:none;
  box-shadow:0 0 0 1px rgba(63,191,132,.6),0 34px 74px -28px rgba(11,23,41,.95),0 0 84px -18px rgba(63,191,132,.6)}
.door--org:hover{box-shadow:0 0 0 1px rgba(242,177,131,.6),0 34px 74px -28px rgba(11,23,41,.95),0 0 84px -18px rgba(224,122,47,.55)}
/* The sheen. Skewed light bar, crossing on its own clock. */
.door::after{content:"";position:absolute;top:-60%;bottom:-60%;left:-45%;width:34%;z-index:-1;pointer-events:none;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.15),transparent);transform:skewX(-18deg);
  animation:door-sheen 7s cubic-bezier(.4,0,.2,1) infinite}
.door--org::after{animation-delay:3.5s}
@keyframes door-sheen{0%{left:-45%}42%{left:120%}100%{left:120%}}
.door__bar{position:absolute;top:0;left:0;right:0;height:4px;background:var(--green-bright);
  transform:scaleX(1);transform-origin:left;box-shadow:0 0 18px 0 rgba(63,191,132,.8)}
.door--org .door__bar{background:var(--orange);box-shadow:0 0 18px 0 rgba(224,122,47,.75)}
.door__k{display:inline-flex;align-items:center;gap:9px;font-family:var(--font-mono);font-size:11px;font-weight:600;
  letter-spacing:.19em;text-transform:uppercase;color:var(--green-bright)}
.door__k::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;flex:none;
  box-shadow:0 0 9px 1px currentColor;animation:pulse-dot 2s ease-in-out infinite}
.door--org .door__k{color:var(--orange-soft)}
.door__t{font-family:var(--font-display);text-transform:uppercase;font-weight:400;
  font-size:clamp(34px,3.6vw,54px);line-height:.94;letter-spacing:-.01em;color:var(--on-dark);
  text-shadow:0 0 40px rgba(63,191,132,.28)}
.door--org .door__t{text-shadow:0 0 40px rgba(224,122,47,.26)}
.door__d{font-size:var(--fs-body);line-height:1.6;color:#C6D2E4;max-width:44ch}
/* Solid pill, not a text link: the action has to look pressable at a glance. */
.door__go{display:inline-flex;align-items:center;gap:10px;align-self:flex-start;margin-top:auto;
  margin-top:clamp(16px,2vw,26px);padding:15px 26px;border-radius:var(--r-pill);
  background:var(--green-bright);color:var(--navy-deep);
  font-size:15px;font-weight:700;letter-spacing:.01em;
  box-shadow:0 14px 32px -16px rgba(63,191,132,.9);
  transition:transform 240ms var(--ease-punch),background 200ms linear,box-shadow 240ms var(--ease-enter)}
.door--org .door__go{background:var(--orange-soft);box-shadow:0 14px 32px -16px rgba(224,122,47,.85)}
.door:hover .door__go{background:#fff;transform:translateY(-2px);box-shadow:0 20px 40px -16px rgba(11,23,41,.65)}
.door__go i{font-style:normal;transition:transform 220ms var(--ease-enter)}
.door:hover .door__go i{transform:translateX(4px)}
@media (prefers-reduced-motion:reduce){.door::after{display:none}.door__k::before{animation:none}}
@media (max-width:900px){.doors__grid{grid-template-columns:1fr}}

/* ======================================== HOW A CASE MOVES (.gate) =========
   A DIAGRAM, never a screenshot and never a mockup — five steps on one
   continuous rail. It borrows the record tape's device from 01 rather than
   inventing one: cells on one row, each carrying its own segment of a single
   rail so the segments meet flush and read as one line, and the rail's COLOUR
   CHANGE is the terminus. No boxes, no borders, nothing that reads as a
   feature grid. */
/* THE CASE PATH (.path) — replaced the dark .gate pane 2026-08-05.
   Type on the cream ground, on the same hairline rule the rest of the page uses
   to separate things. THREE louder passes were built and rejected the same day:
   milled two-leaf gate hardware and a specular sweep on a --navy-deep pane, a
   vertical descent shaft with 104px outlined numerals, then a calmed-down dark
   pane. The client's ruling: the dark ground does not belong on this page and
   the graphics were doing too much — keep it minimal, just the words, with
   something faded behind them.

   So the ONLY graphic here is .path__sheet: the site's own hairline record grid,
   faded, sitting behind the steps. It correlates with the message rather than
   decorating it — the case path is a record, and the same grid carries the pull
   band and 01. Do not put a coloured ground, a token, a glow, a status chip or a
   loop back on this block. Nothing here animates except a one-time reveal. */
.path{position:relative;margin-top:clamp(40px,4.8vw,64px);text-align:left}
/* The faded record sheet. Masked to a pool behind the type and gone at the
   edges, so it never reads as a panel with a boundary. */
.path__sheet{position:absolute;left:calc(-1 * clamp(10px,2vw,40px));right:calc(-1 * clamp(10px,2vw,40px));
  top:calc(-1 * clamp(18px,2.4vw,34px));bottom:calc(-1 * clamp(18px,2.4vw,34px));pointer-events:none;
  background-image:linear-gradient(90deg,rgba(20,35,63,.055) 1px,transparent 1px),
    linear-gradient(rgba(20,35,63,.045) 1px,transparent 1px);
  background-size:34px 34px;
  -webkit-mask-image:radial-gradient(120% 100% at 50% 46%,#000 26%,rgba(0,0,0,.35) 62%,transparent 88%);
  mask-image:radial-gradient(120% 100% at 50% 46%,#000 26%,rgba(0,0,0,.35) 62%,transparent 88%)}
.path__row{position:relative;display:grid;grid-template-columns:repeat(5,1fr);list-style:none}
.path__s{position:relative;padding:clamp(20px,2.2vw,28px) clamp(16px,1.8vw,26px) 0 0;
  opacity:0;transform:translateY(14px);
  transition:opacity 620ms var(--ease-enter),transform 620ms var(--ease-enter)}
.path.is-in .path__s{opacity:1;transform:none}
.path__s:nth-child(2){transition-delay:110ms}
.path__s:nth-child(3){transition-delay:220ms}
.path__s:nth-child(4){transition-delay:330ms}
.path__s:nth-child(5){transition-delay:440ms}
/* One rule across all five, drawn as five abutting segments so it reads as a
   single line. It is a rule, not a rail: no fill, no travelling mark. */
.path__s::before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:var(--hairline)}
.path__s+.path__s::before{left:calc(-1 * clamp(16px,1.8vw,26px) - 1px)}
.path__s::after{content:"";position:absolute;top:-4px;left:0;width:9px;height:9px;background:var(--navy)}
.path__s:last-child::before{background:var(--green)}
.path__s:last-child::after{background:var(--green)}
/* The step figure, faded into the sheet behind its own words. */
.path__n{position:absolute;top:clamp(12px,1.4vw,18px);right:clamp(14px,1.6vw,24px);
  font-family:var(--font-display);font-size:clamp(52px,5vw,74px);line-height:.76;font-weight:400;
  color:transparent;-webkit-text-stroke:1.5px rgba(20,35,63,.13);pointer-events:none}
.path__k{position:relative;font-family:var(--font-mono);font-size:11px;letter-spacing:.26em;
  text-transform:uppercase;color:var(--muted)}
.path__t{position:relative;margin-top:clamp(12px,1.4vw,16px);font-family:var(--font-display);
  text-transform:uppercase;font-weight:400;font-size:clamp(20px,1.7vw,25px);line-height:1.04;
  letter-spacing:-.005em;color:var(--navy);max-width:13ch}
.path__b{position:relative;margin-top:10px;font-size:var(--fs-caption);line-height:1.6;
  color:var(--muted);max-width:27ch}
@media (max-width:1080px){.path__row{grid-template-columns:repeat(2,1fr);row-gap:clamp(20px,3vw,30px)}
  .path__s:nth-child(odd)::before{left:0}
  .path__b,.path__t{max-width:34ch}}
@media (max-width:600px){.path__row{grid-template-columns:1fr}
  .path__s::before{left:0}}
@media (prefers-reduced-motion:reduce){.path__s{opacity:1;transform:none;transition:none}}

/* THE THREE LOCKS (.lock) — cut back hard 2026-08-05.
   These three closers must BLEND INTO the case path above them and hand off to
   the next section quietly. The louder pass — 34px Anton headings, 80px outlined
   numerals, a stone-plated struck string, an 8px green tape under each cell and
   an ENFORCED stamp — was rejected as too much and too big.
   What is left: one hairline rule, a mono kicker, the statement at body size, and
   the forbidden state struck through on the same line. No numerals, no tape, no
   stamp, no plate. Orange is the strike rule and nothing else. */
.lock{display:grid;grid-template-columns:repeat(3,1fr);gap:0;
  margin-top:clamp(40px,4.6vw,60px);list-style:none;text-align:left}
.lock__c{position:relative;padding:clamp(16px,1.8vw,22px) clamp(18px,2vw,30px) 0 0}
.lock__c+.lock__c{padding-left:clamp(18px,2vw,30px);border-left:1px solid var(--hairline)}
.lock__c::before{content:"";position:absolute;top:0;left:0;right:0;height:1px;background:var(--hairline)}
.lock__c+.lock__c::before{left:calc(-1 * clamp(18px,2vw,30px) - 1px)}
.lock__k{display:block;font-family:var(--font-mono);font-size:10.5px;letter-spacing:.24em;
  text-transform:uppercase;color:var(--muted)}
.lock__t{margin-top:10px;font-size:var(--fs-body);font-weight:600;line-height:1.4;color:var(--navy);
  max-width:26ch}
/* The forbidden state, struck through. The bar is the only graphic in the block. */
.lock__x{position:relative;display:inline-block;margin-top:9px}
.lock__x span{font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;text-transform:uppercase;
  color:var(--muted)}
.lock__x i{position:absolute;left:-1px;right:-1px;top:50%;height:2px;margin-top:-1px;
  background:var(--orange);transform:scaleX(0);transform-origin:left;
  transition:transform 380ms var(--ease-scrub) 80ms}
.lock__c.is-on .lock__x i{transform:scaleX(1)}
.lock__b{margin-top:10px;font-size:var(--fs-caption);line-height:1.6;color:var(--muted);max-width:34ch}
@media (max-width:900px){.lock{grid-template-columns:1fr;row-gap:0}
  .lock__c+.lock__c{padding-left:0;border-left:0}
  .lock__c+.lock__c::before{left:0}
  .lock__c{padding-bottom:clamp(14px,2vw,20px)}
  .lock__t,.lock__b{max-width:40ch}}
@media (prefers-reduced-motion:reduce){.lock__x i{transition:none}}

/* ================================================ --stone, RE-LIT ==========
   .band-stone was declared but never used by a section until this pass.
   MEASURED: --muted (#6B6F78) on --stone (#EFEAE1) is 4.15:1, below the 4.5:1
   floor for normal text. Same problem the sheet already solved for the mist
   band, solved the identical way with a token that already exists:
   --muted-on-mist (#5F646D) measures 4.83:1 on stone and passes. */
.band-stone .lede,.band-stone .srcnote,.band-stone .field-cap,.band-stone .acct__k{color:var(--muted-on-mist)}

/* ==================================== THE INDIVIDUAL PATH (.help / .qx) ====
   Different audience, different rules. Body copy here is --navy (12.8:1 on
   stone), NOT --muted: this is read by someone who may be on an old phone, a
   cracked screen, outdoors, in a hurry. Legibility beats refinement.

   .qx / .qx__rail ARE DEAD RULES. The quick-exit control was removed from every
   page 2026-08-05 at the founder's instruction; the rules are kept only so a
   stale cached page does not lose its layout, and nothing on the site uses
   them. Do not build anything new on them. */
.help__in{position:relative}
.qx__rail{position:absolute;top:0;right:0;bottom:0;width:clamp(118px,15vw,172px);display:flex;justify-content:flex-end;pointer-events:none}
.qx{position:sticky;top:106px;align-self:flex-start;pointer-events:auto;
  display:inline-flex;align-items:center;gap:9px;padding:10px 20px;border-radius:var(--r-pill);
  font-family:var(--font-body);font-size:var(--fs-button);font-weight:700;letter-spacing:.02em;line-height:1.7;
  background:var(--navy);color:var(--on-dark);border:1px solid var(--navy);text-decoration:none;
  box-shadow:0 10px 30px -22px rgba(20,35,63,.4)}
.qx:hover{background:var(--navy-deep);border-color:var(--navy-deep);color:var(--on-dark);text-decoration:none}
.help__head{padding-right:clamp(128px,16vw,184px)}
/* The brand link sits INSIDE .help__head, directly above the eyebrow — these two
   pages have no site nav to carry it. .eyebrow.sec__head declares margin-top:0
   because everywhere else on the site it is the first child of its section, so
   without this rule the gap is 0 and the two stack into one three-line wordmark:
   "Pathfinders for Hope / OPERATION IRON GATE / GET HELP". Both lines are
   uppercase letter-spaced Archivo at 11px and 13px, so the eyebrow reads as part
   of the logo lockup instead of as the section head. Spaced here, on this block
   only — .eyebrow and .sec__head are used by every section on index.html and must
   not be touched. Applies to get-help.html, the one page with a brand link
   inside .help__head. */
.help__head .nav__brand{margin-bottom:clamp(28px,3.4vw,44px)}
.qx__note{margin-top:16px;max-width:56ch;font-size:var(--fs-micro);line-height:1.55;color:var(--navy)}
.qx__note span{display:block}
.qx__note span+span{margin-top:4px;color:var(--muted-on-mist)}
.help__blocks{display:grid;grid-template-columns:repeat(2,1fr);gap:clamp(24px,3vw,44px);margin-top:clamp(40px,5vw,64px)}
.help__bt{font-size:var(--fs-feature);font-weight:600;line-height:1.3;color:var(--navy);margin-bottom:14px}
.help__l li{position:relative;font-size:var(--fs-body);line-height:1.6;color:var(--navy);padding-left:22px}
.help__l li+li{margin-top:12px}
.help__l li::before{content:"";position:absolute;left:0;top:.62em;width:9px;height:2px;background:var(--green)}
.help__l--n{counter-reset:hn}
.help__l--n li{counter-increment:hn;padding-left:30px}
.help__l--n li::before{content:counter(hn,decimal-leading-zero);top:0;width:auto;height:auto;background:none;
  font-family:var(--font-mono);font-size:11px;letter-spacing:.12em;color:var(--muted-on-mist);line-height:1.7}
/* Self-enrolment. An ANNOUNCEMENT. No form, no button, no input, by design. */
.help__soon{margin-top:clamp(40px,5vw,64px);padding-top:clamp(26px,3vw,38px);border-top:2px solid var(--navy)}
.help__soon p{max-width:62ch;font-size:var(--fs-body-lg);line-height:1.55;color:var(--navy)}
/* MEASURED: --green on --stone is 4.17:1 — below the 4.5:1 normal-text floor,
   above the 3:1 large-text floor. Raising the step to --fs-feature (20px) at
   weight 700 clears WCAG's large-text threshold, so the link passes on the size
   axis without touching the colour. The selector must be .help__soon .help__211
   because `.help__soon p` (0,1,1) outranks a bare `.help__211` (0,1,0). */
.help__soon .help__211{max-width:62ch;margin-top:18px;font-size:var(--fs-feature);line-height:1.55;color:var(--navy)}
.help__211 a{font-weight:700}
/* .jump inside the individual path is re-inked to --navy (13.06:1). MEASURED:
   .jump's --green (#2E7D5B) on --stone (#EFEAE1) is 4.17:1 at 13px/600 — below
   the 4.5:1 normal-text floor, and 13px at 600 does not reach the large-text
   threshold, so it fails outright. Kept after the Spanish language toggle it was
   written for was removed (2026-08-05): any future link on this page inherits a
   passing colour rather than the failing one, and it holds the standing rule that
   green is graphic-only on light grounds. Scoped to .help__in, so index.html and
   for-organizations.html are untouched. */
.help__in .jump{color:var(--navy)}
.help__in .jump:hover{color:var(--navy-deep);border-bottom-color:var(--navy-deep)}
@media (max-width:640px){
  .help__blocks{grid-template-columns:1fr;gap:clamp(28px,4vw,38px)}
  /* THE RAIL LEAVES THE OVERLAY HERE. At desktop it is an absolutely-positioned
     strip down the right margin and .help__head reserves a gutter for it. That
     mechanism cannot work at this width: the rail spans the whole section, so a
     pill sticking at a fixed viewport offset passes over EVERY block below it,
     and only the block carrying padding is protected. An earlier version
     reserved 52px of padding-top on .help__head; inserting .nav__brand above the
     eyebrow (34px tall + 28px margin) then pushed the brand into the pill's
     band, covering the tail of "Pathfinders for Hope" — and since the rail is
     pointer-events:none with the pill auto, that strip of the only link back to
     index.html stopped being clickable. Growing the padding again would fix the
     brand and leave .help__blocks and .help__soon still passing underneath.

     So: the rail becomes a STICKY element in normal flow, full width, opaque in
     the band's own --stone. It occupies its own strip, so it cannot overlap
     anything at any scroll position, and it still never scrolls out of view.
     .qx drops to static because a sticky child inside an auto-height rail has no
     room to travel — the rail is what sticks now. */
  .qx__rail{position:sticky;inset:0 auto auto auto;width:100%;padding:12px 0;
    background:var(--stone);z-index:5;pointer-events:auto}
  .qx{position:static;top:auto}
  .help__head{padding-right:0;padding-top:0}
}

/* ================================= THE ORGANIZATION PATH (.org) ============
   A director's page. Long on purpose — a program officer deciding whether to
   put their organization into an unlaunched pilot needs the answers, and
   burying them behind an accordion hides them from the reader AND from search.
   Everything is open text: no details element, no tabs, no progressive
   disclosure.

   TONE RULE, structural and not a style preference: this path never indicts a
   provider. Providers are the distribution channel.

   The benefit grid reuses .acct__grid / .acct__cell / .acct__k / .acct__v and
   the step list reuses .help__l--n. Only the question/answer shape is new. */
.org__lead{margin-top:clamp(46px,5.6vw,76px);padding-bottom:14px;border-bottom:2px solid var(--navy);
  font-family:var(--font-display);text-transform:uppercase;font-weight:400;
  font-size:var(--fs-card-heading);line-height:1;letter-spacing:-.01em;color:var(--navy)}
.org__lead--top{margin-top:0}
.org__q{display:grid;grid-template-columns:repeat(2,1fr);gap:clamp(22px,2.6vw,40px);margin-top:clamp(24px,2.8vw,34px)}
.org__qt{margin-bottom:10px;font-size:var(--fs-feature);font-weight:600;line-height:1.3;color:var(--navy)}
.org__qb{max-width:52ch;font-size:var(--fs-body);line-height:1.6;color:var(--navy)}
.org__cta{display:flex;flex-wrap:wrap;align-items:center;gap:clamp(14px,2vw,22px);margin-top:clamp(24px,3vw,34px)}
/* 26px matches .sec__head's margin-bottom and .ev__card's top padding; 62ch
   matches the measure the statute rail bodies already use. */
.org__list{margin-top:26px}
.org__p{max-width:62ch;margin-top:26px;font-size:var(--fs-body);line-height:1.6;color:var(--navy)}
/* Centred sections: the org prose blocks keep their 62ch measure but sit on the
   section's centre axis, and the CTA row centres with them. Scoped to
   .sec--center so nothing outside a centred section is affected. */
.sec--center .org__p,.sec--center .org__qb{margin-inline:auto}
.sec--center .org__cta{justify-content:center}
@media (max-width:900px){.org__q{grid-template-columns:1fr}}

/* --- the two paths, re-lit for dark grounds ------------------------------
   The org path alternates grounds the way index.html does, so every ink token
   it uses needs its dark-ground counterpart. Same inks the sheet already uses
   on navy: --on-dark for headings, --mist for body, --green-bright and
   --orange-soft for marks (7.4:1 and 5.6:1 on navy-deep). */
.band-navy .org__lead,.band-deep .org__lead{color:var(--on-dark);border-bottom-color:rgba(221,231,228,.55)}
.band-navy .org__qt,.band-deep .org__qt{color:var(--on-dark)}
.band-navy .org__qb,.band-deep .org__qb,
.band-navy .org__p,.band-deep .org__p{color:var(--mist)}
.band-navy .help__l li,.band-deep .help__l li{color:var(--mist)}
.band-navy .help__l li::before,.band-deep .help__l li::before{background:var(--green-bright)}
.band-navy .help__l--n li::before,.band-deep .help__l--n li::before{background:none;color:var(--orange-soft)}
.band-navy .help__bt,.band-deep .help__bt{color:var(--on-dark)}
.band-navy .org__docket,.band-deep .org__docket{color:rgba(221,231,228,.62)}
.band-navy .org__docket b,.band-deep .org__docket b{color:var(--on-dark)}
.band-navy .org__rule,.band-deep .org__rule{background:rgba(221,231,228,.22)}

/* --- a mono docket line, the same device 01's docket head uses ----------- */
.org__docket{display:flex;flex-wrap:wrap;align-items:baseline;gap:12px 22px;
  font-family:var(--font-mono);font-size:11.5px;font-weight:600;letter-spacing:.16em;
  text-transform:uppercase;color:var(--muted-on-mist)}
.org__docket b{color:var(--navy);font-weight:600}
.org__rule{position:relative;height:2px;margin:16px 0 clamp(26px,3vw,38px);background:var(--hairline)}
.org__rule::after{content:"";position:absolute;left:0;top:0;width:64px;height:2px;background:var(--orange)}

/* ================================================= NAV — SEVEN LINKS ======
   The nav gained two links on 2026-08-05 ("Get help", "Organizations"). Five
   fitted the desktop row with headroom; seven do not. The burger takeover moves
   to 1240 — a breakpoint the sheet ALREADY declares — using the burger
   treatment the sheet ALREADY defines, and the declarations below are copied
   verbatim from the existing max-width:1080px block. No value is changed and no
   nav element is restyled: the same menu simply opens 160px earlier.

   Between 1241 and 1440 the row still carries seven links plus two buttons, so
   the nav's secondary "Request a briefing" is hidden in that window only. It is
   duplicated three times over (hero, contact band, footer) and losing it there
   costs nothing. Donate stays the nav primary, which is the 2026-08-04
   repositioning decision and is unchanged. */
@media (max-width:1440px){.nav__cta .btn--outline{display:none}}
@media (max-width:1240px){
  /* The five declarations below are the max-width:1080px block, verbatim. This
     menu is a DISPLAY TOGGLE and the open class lands on .nav__links, not on
     .nav — motion.js sets it there. An earlier version of this block invented a
     transform slide-in keyed to `.nav.is-open .nav__links`, a selector nothing
     ever satisfies: the panel translated off-screen and never came back, so
     below 1240px there was no way to navigate at all. Do not reintroduce a
     transform, a transition, position:fixed, or a .nav-scoped open selector
     here. Whatever the 1080px block does, this block does identically. */
  .nav__links{display:none}
  .nav__burger{display:block}
  .nav__links.is-open{display:flex;position:absolute;left:0;right:0;top:100%;flex-direction:column;align-items:flex-start;gap:0;
    background:var(--canvas);border-bottom:1px solid var(--hairline);padding:8px var(--outer) 18px}
  .nav__links.is-open .nav__link{width:100%;padding-block:13px;border-bottom:1px solid var(--hairline)}
  .nav__links.is-open .nav__link::after{display:none}
}

/* ===================================================== 320px NAV FIX ======
   Below 400px the nav's Donate button (81px plus a 12px gap) pushed the
   hamburger past the viewport: MEASURED at 320px the burger sat at right:376
   against a 320px viewport — 56px clipped on a 38px-wide control, so it was
   100% off-screen. body has overflow-x:clip, so the page did not scroll
   sideways and the failure was silent. The burger clears on its own from 400px
   up. Nothing is lost by hiding Donate here: below 900px it already sits inside
   the opened menu, and it also appears in the hero, the contact band and the
   footer. */
@media (max-width:400px){.nav__cta .btn--primary{display:none}}

/* ================================================ SELF-ENROLLMENT (.enr) ===
   Door 1. Lives on get-help.html and is lifted into the homepage modal by
   enroll.js, so these styles serve both places.

   TWO RULES HOLD HERE AND DO NOT BEND:
   1. The 211 plate is the most prominent element on the page and stays ABOVE
      the form. It is the only door that works today.
   2. Green and orange carry text ONLY on the navy plates. On stone and cream
      they stay graphic (2.8:1 / 4.17:1) — labels and hints are --navy.
   Tap targets are 58px minimum: this is read on an old phone, in sunlight, one
   thumb, low battery. Type never drops below 15.5px. */

/* --- 211 plate: navy-deep, glowing, with a slow sheen across it ---------- */
.enr211{position:relative;overflow:hidden;display:block;text-decoration:none;border-radius:20px;isolation:isolate;
  padding:clamp(22px,2.6vw,30px) clamp(20px,2.4vw,28px) clamp(24px,2.8vw,32px);
  background:radial-gradient(120% 140% at 12% 0%,rgba(63,191,132,.22),transparent 58%),linear-gradient(168deg,#132744 0%,var(--navy-deep) 62%);
  box-shadow:0 0 0 1px rgba(63,191,132,.35),0 26px 60px -26px rgba(11,23,41,.85),0 0 60px -18px rgba(63,191,132,.45)}
.enr211::after{content:"";position:absolute;top:-60%;bottom:-60%;left:-45%;width:34%;z-index:-1;pointer-events:none;
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.16),transparent);transform:skewX(-18deg);
  animation:door-sheen 6.4s cubic-bezier(.4,0,.2,1) infinite}
.enr211:hover{text-decoration:none;box-shadow:0 0 0 1px rgba(63,191,132,.6),0 30px 70px -26px rgba(11,23,41,.9),0 0 80px -14px rgba(63,191,132,.6)}
.enr211__k{display:flex;align-items:center;gap:10px;font-family:var(--font-mono);font-size:11.5px;font-weight:600;
  letter-spacing:.17em;text-transform:uppercase;color:var(--green-bright)}
.enr211__k::before{content:"";width:9px;height:9px;border-radius:50%;background:currentColor;flex:none;
  box-shadow:0 0 10px 2px rgba(63,191,132,.85);animation:pulse-dot 2s ease-in-out infinite}
.enr211__row{display:flex;align-items:flex-end;justify-content:space-between;gap:18px;flex-wrap:wrap;margin:6px 0 6px}
.enr211__n{font-family:var(--font-display);font-size:clamp(62px,10vw,116px);line-height:.86;letter-spacing:-.01em;
  color:#8FE3BA;text-shadow:0 0 46px rgba(63,191,132,.45)}
.enr211__tap{display:inline-flex;align-items:center;gap:9px;margin-bottom:10px;padding:15px 22px;border-radius:var(--r-pill);
  background:var(--green-bright);color:var(--navy-deep);font-size:15px;font-weight:700;white-space:nowrap;
  box-shadow:0 14px 32px -14px rgba(63,191,132,.9);transition:background 200ms linear,transform 220ms var(--ease-punch)}
.enr211:hover .enr211__tap{background:#fff;transform:translateY(-2px)}
.enr211__s{display:block;font-size:17.5px;line-height:1.5;font-weight:500;color:#D2DCEA;max-width:46ch}
.enr__211note{margin-top:14px;font-size:var(--fs-caption);line-height:1.55;color:var(--navy);max-width:60ch}

/* --- the form ------------------------------------------------------------ */
.enr{margin-top:clamp(40px,5vw,64px);padding-top:clamp(26px,3vw,38px);border-top:2px solid var(--navy)}
.enr__h{font-family:var(--font-display);text-transform:uppercase;font-weight:400;line-height:.96;letter-spacing:-.01em;
  color:var(--navy);font-size:clamp(32px,4.4vw,60px);margin-top:14px}
.enr__sub{margin-top:12px;max-width:52ch;font-size:var(--fs-body-lg);line-height:1.5;color:var(--navy)}
/* Progress tape — the record-tape device from 01, doing a job: four segments,
   one per required answer, filling as they land. Read-only. */
.enr__tape{margin-top:clamp(22px,2.6vw,30px)}
.enr__taperow{display:flex;align-items:center;justify-content:space-between;gap:14px;margin-bottom:9px;
  font-family:var(--font-mono);font-size:11px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--muted-on-mist,var(--muted))}
.enr__taperow b{color:var(--navy);font-weight:600}
.enr__tapebar{display:grid;grid-template-columns:repeat(4,1fr);gap:3px}
.enr__tapebar i{position:relative;display:block;height:9px;background:#DCD6CC;overflow:hidden}
.enr__tapebar i::after{content:"";position:absolute;inset:0;background:var(--green);transform:scaleX(0);transform-origin:left;
  transition:transform 420ms var(--ease-enter)}
.enr__tapebar i.on::after{transform:scaleX(1)}
.enr form{margin-top:clamp(26px,3vw,36px)}
.enr .sect{display:flex;align-items:center;gap:10px;font-family:var(--font-mono);font-size:11px;font-weight:600;
  letter-spacing:.18em;text-transform:uppercase;color:var(--navy);
  border-top:1px solid var(--hairline);padding-top:20px;margin:34px 0 18px}
.enr .sect::before{content:"";width:9px;height:9px;flex:none;background:var(--orange)}
.enr .sect:first-of-type{border-top:0;padding-top:0;margin-top:0}
.enr .grp{margin:0 0 24px}
.enr label{display:block;font-size:18px;font-weight:700;color:var(--navy);margin:0 0 8px}
.enr .req{color:#B45A16}
.enr .opt{display:inline-block;font-family:var(--font-mono);font-size:10.5px;font-weight:600;letter-spacing:.12em;
  text-transform:uppercase;color:var(--navy);background:#E4DED4;border-radius:var(--r-pill);padding:4px 10px;margin-left:8px;vertical-align:2px}
.enr .hint{display:block;margin-top:7px;font-size:15.5px;line-height:1.5;font-weight:400;color:var(--navy);opacity:.72}
.enr input[type=text],.enr input[type=tel],.enr input[type=email],.enr select{
  width:100%;font-family:var(--font-body);font-size:19px;font-weight:500;line-height:1.4;color:var(--navy);background:#fff;
  border:2px solid #C6C1B7;border-radius:12px;padding:16px 15px;min-height:58px;
  transition:border-color 160ms linear,box-shadow 160ms linear}
.enr input[type=text]:hover,.enr input[type=tel]:hover,.enr input[type=email]:hover,.enr select:hover{border-color:var(--navy)}
.enr select{appearance:none;padding-right:48px;background-repeat:no-repeat;background-position:right 15px center;
  background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='22' height='22' viewBox='0 0 24 24' fill='none' stroke='%2314233F' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'><polyline points='6 9 12 15 18 9'/></svg>")}
.enr input:focus,.enr select:focus,.enr button:focus-visible{outline:3px solid var(--orange);outline-offset:2px;border-color:var(--navy)}
.enr .two{display:grid;grid-template-columns:1fr 1fr;gap:14px}
.enr .radios{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}
.enr .radios label{display:flex;align-items:center;gap:11px;margin:0;min-height:58px;padding:15px;cursor:pointer;
  background:#fff;border:2px solid #D8D2C8;border-radius:12px;font-size:17.5px;font-weight:600;color:var(--navy);
  transition:border-color 160ms linear,background 160ms linear,box-shadow 200ms linear}
.enr .radios label:hover{border-color:var(--navy)}
.enr .radios input{width:24px;height:24px;flex:none;margin:0;accent-color:var(--green)}
.enr .radios label:has(input:checked){border-color:var(--green);background:#F1F8F4;box-shadow:0 12px 26px -20px rgba(28,90,63,.9)}
.enr .checkrow{display:flex;align-items:flex-start;gap:14px;padding:17px;background:#fff;border:2px solid #D8D2C8;border-radius:14px;
  transition:border-color 160ms linear,box-shadow 200ms linear}
.enr .checkrow:has(input:checked){border-color:var(--green);box-shadow:0 14px 30px -22px rgba(28,90,63,.9)}
.enr .checkrow input{width:26px;height:26px;flex:none;margin:2px 0 0;accent-color:var(--green)}
.enr .checkrow label{margin:0;font-size:17.5px;font-weight:500}
.enr .err{display:none;margin:9px 0 0;font-size:16px;font-weight:700;color:#8F2C0C}
.enr .err.on{display:block}
.enr .field-bad input,.enr .field-bad select{border-color:#B45A16;background:#FFF6EF}
/* The one loud button on the page after 211. White on --green is 4.9:1. */
.enr__submit{position:relative;overflow:hidden;isolation:isolate;width:100%;appearance:none;border:0;border-radius:14px;cursor:pointer;
  margin-top:8px;padding:22px 18px;min-height:68px;background:linear-gradient(180deg,#39926B,var(--green));color:var(--on-dark);
  font-family:var(--font-body);font-size:21px;font-weight:700;line-height:1.25;
  box-shadow:0 20px 44px -20px rgba(28,90,63,.95);transition:transform 200ms var(--ease-punch),box-shadow 200ms linear}
.enr__submit::after{content:"";position:absolute;top:-60%;bottom:-60%;left:-45%;width:34%;z-index:-1;transform:skewX(-18deg);
  background:linear-gradient(100deg,transparent,rgba(255,255,255,.26),transparent);animation:door-sheen 5.2s cubic-bezier(.4,0,.2,1) infinite}
.enr__submit:hover{transform:translateY(-2px);box-shadow:0 26px 54px -20px rgba(28,90,63,1)}
.enr__submit:active{transform:translateY(0)}
.enr__submit[disabled]{background:#9A9488;cursor:progress;box-shadow:none}
.enr__submit[disabled]::after{display:none}
.enr__privacy{margin-top:22px;max-width:64ch;font-size:16px;line-height:1.55;color:var(--navy)}
.enr__privacy b{font-weight:700}
/* Sealed confirmation */
.enr__sent{display:none}
.enr__sent.on{display:block}
.enr__seal{border-radius:20px;padding:clamp(24px,2.8vw,32px) clamp(20px,2.4vw,28px);color:var(--on-dark);
  background:radial-gradient(120% 140% at 10% 0%,rgba(63,191,132,.2),transparent 60%),linear-gradient(168deg,#132744,var(--navy-deep) 64%);
  box-shadow:0 0 0 1px rgba(63,191,132,.32),0 26px 60px -26px rgba(11,23,41,.85)}
.enr__code{font-family:var(--font-mono);font-size:clamp(28px,5vw,44px);font-weight:700;letter-spacing:.02em;line-height:1;color:#8FE3BA}
.enr__tx{margin-top:16px;font-size:18px;line-height:1.55;color:#D2DCEA}
.enr__tx b{color:var(--on-dark);font-weight:700}
.enr__stamp{display:inline-block;margin-top:18px;font-family:var(--font-mono);font-size:10.5px;font-weight:700;letter-spacing:.14em;
  background:linear-gradient(180deg,#BFF3D8,#8FE3BA);color:#0A1424;padding:10px 14px;border-radius:6px}
.enr__next{margin-top:22px;font-size:17px;line-height:1.55;color:var(--navy)}
.enr__next a{font-weight:700}
.enr__back{display:inline-flex;align-items:center;justify-content:center;margin-top:22px;padding:17px 26px;min-height:56px;
  appearance:none;border:0;border-radius:var(--r-pill);cursor:pointer;background:var(--navy);color:var(--on-dark);
  font-family:var(--font-body);font-size:16px;font-weight:700}
.enr__back:hover{background:var(--navy-deep)}
@media (max-width:640px){
  .enr .two,.enr .radios{grid-template-columns:1fr}
  .enr211__row{align-items:flex-start;flex-direction:column;gap:10px}
}
@media (prefers-reduced-motion:reduce){
  .enr211::after,.enr__submit::after{display:none}
  .enr211__k::before{animation:none}
  .enr__tapebar i::after{transition:none}
}
/* Links in this block are inked NAVY, never the site default green: --green on
   --stone measures 4.17:1, under the 4.5:1 normal-text floor. Same remedy as
   .help__in .jump. */
.enr a,.enr__211note a,.enr__em a{color:var(--navy);font-weight:700}
.enr a:hover,.enr__211note a:hover,.enr__em a:hover{color:var(--navy-deep)}
/* The 911 line closes the page: full-column rule, body size, not a caption. */
.enr__em{margin-top:clamp(34px,4vw,48px);padding-top:22px;border-top:2px solid var(--navy);
  font-size:17px;line-height:1.55;color:var(--navy)}

/* ============================================= ENROLLMENT MODAL (.emod) ===
   The homepage door opens the form in place so the reader never loses the page
   they were on: submit, see the sealed code, close, still on the homepage. The
   form itself is fetched from get-help.html — there is no second copy. The
   modal carries its own quick exit, because a person who needs it needs it here
   too. */
.emod{position:fixed;inset:0;z-index:200;display:none;padding:clamp(12px,3vw,40px);
  background:rgba(11,23,41,.78);-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px)}
.emod.is-open{display:flex;align-items:flex-start;justify-content:center}
body.has-modal{overflow:hidden}
.emod__panel{position:relative;display:flex;flex-direction:column;width:100%;max-width:780px;max-height:calc(100vh - clamp(24px,6vw,80px));
  background:var(--canvas);border-radius:20px;overflow:hidden;
  box-shadow:0 0 0 1px rgba(63,191,132,.28),0 50px 110px -40px rgba(0,0,0,.75);
  animation:emod-in 320ms var(--ease-enter)}
@keyframes emod-in{from{opacity:0;transform:translateY(18px) scale(.985)}to{opacity:1;transform:none}}
.emod__head{display:flex;align-items:center;justify-content:space-between;gap:14px;flex:none;
  padding:14px clamp(16px,2.2vw,26px);background:var(--navy);border-bottom:3px solid var(--orange)}
.emod__brand{color:var(--on-dark);font-size:15px;font-weight:700;line-height:1.2}
.emod__brand span{display:block;margin-top:3px;font-family:var(--font-mono);font-size:10.5px;font-weight:600;
  letter-spacing:.18em;text-transform:uppercase;color:#8FE3BA}
.emod__acts{display:flex;align-items:center;gap:10px}
.emod__qx{display:inline-flex;align-items:center;min-height:44px;padding:12px 16px;border-radius:10px;
  background:#fff;color:var(--navy);font-size:14px;font-weight:700;white-space:nowrap}
.emod__qx:hover{background:var(--navy-deep);color:var(--on-dark);text-decoration:none}
.emod__x{appearance:none;border:2px solid rgba(255,255,255,.5);background:none;color:var(--on-dark);cursor:pointer;
  width:44px;height:44px;border-radius:10px;font-size:20px;line-height:1;flex:none}
.emod__x:hover{background:rgba(255,255,255,.14);border-color:#fff}
.emod__body{flex:1 1 auto;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:clamp(20px,2.6vw,34px) clamp(18px,2.4vw,32px) clamp(28px,3.4vw,40px)}
.emod__body .enr{margin-top:0;padding-top:0;border-top:0}
.emod__load{font-family:var(--font-mono);font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--muted)}
@media (prefers-reduced-motion:reduce){.emod__panel{animation:none}}

/* ================================== ENROLLMENT NOT OPEN YET (.enr--locked) ==
   Enrollment opens toward the end of 2026. THE LOCK IS <fieldset disabled> IN
   THE MARKUP, not these styles: the fields cannot be typed in or submitted with
   CSS off, JS off, or both. This block only makes the state legible.
   To open: see the comment above .enr__shut in get-help.html. */
.enr__shut{margin-top:clamp(22px,2.6vw,30px);padding:clamp(20px,2.4vw,26px) clamp(18px,2.2vw,24px);
  border-radius:16px;color:var(--on-dark);
  background:radial-gradient(120% 150% at 8% 0%,rgba(224,122,47,.26),transparent 60%),linear-gradient(168deg,#1A2B4A,var(--navy-deep) 66%);
  box-shadow:0 0 0 1px rgba(242,177,131,.34),0 22px 50px -26px rgba(11,23,41,.8)}
.enr__shut-k{display:flex;align-items:center;gap:10px;font-family:var(--font-mono);font-size:11.5px;font-weight:600;
  letter-spacing:.2em;text-transform:uppercase;color:var(--orange-soft)}
.enr__shut-k::before{content:"";width:9px;height:9px;flex:none;background:var(--orange)}
.enr__shut-t{margin-top:12px;font-family:var(--font-display);text-transform:uppercase;font-weight:400;
  font-size:clamp(24px,2.6vw,36px);line-height:1.02;letter-spacing:-.01em;color:var(--on-dark)}
.enr__shut-d{margin-top:12px;max-width:60ch;font-size:16.5px;line-height:1.6;color:#D2DCEA}
.enr__shut-d a{color:#8FE3BA;font-weight:700;border-bottom:1px solid rgba(143,227,186,.5)}
.enr__shut-d a:hover{color:#fff;border-bottom-color:#fff}
/* The fieldset is the lock. No border, no box — it must not read as a card. */
.enr__lock{border:0;margin:0;padding:0;min-width:0}
/* Shaded, unmistakably inert. Contrast is deliberately LOW here: a disabled
   field that looks live is the worse failure. The grey applies ONLY to controls
   and their labels — section headings, hints and the status line stay --navy,
   because #6E7484 on --stone measures 3.90:1 and they are ordinary
   informational text, not part of an inactive control. */
.enr--locked label{color:#6E7484}
.enr--locked .hint{opacity:1;color:var(--navy)}
.enr--locked .opt{background:#E4DFD6;color:#6E7484}
.enr--locked .req{color:#8E9098}
.enr__lock:disabled input[type=text],.enr__lock:disabled input[type=tel],.enr__lock:disabled input[type=email],.enr__lock:disabled select,
.enr__lock[disabled] input,.enr__lock[disabled] select{background:#E7E2D8;border-color:#CFC9BE;color:#6E7484;cursor:not-allowed;
  box-shadow:none;-webkit-text-fill-color:#6E7484}
.enr--locked .radios label,.enr--locked .checkrow{background:#E7E2D8;border-color:#CFC9BE;color:#6E7484;cursor:not-allowed;box-shadow:none}
.enr--locked .radios input,.enr--locked .checkrow input{cursor:not-allowed}
/* Hatched overlay across every input: the shading alone can read as a theme. */
.enr--locked .grp{position:relative}
.enr--locked .enr__submit{background:#B9B3A7;color:#F4F1EB;cursor:not-allowed;box-shadow:none}
.enr--locked .enr__submit::after{display:none}
.enr__shut-b{margin-top:12px;text-align:center;font-family:var(--font-mono);font-size:11px;font-weight:600;
  letter-spacing:.2em;text-transform:uppercase;color:var(--navy)}
/* Homepage door status chip. */
.door__soon{display:inline-flex;align-items:center;gap:8px;align-self:flex-start;
  font-family:var(--font-mono);font-size:10.5px;font-weight:600;letter-spacing:.16em;text-transform:uppercase;
  color:var(--orange-soft);border:1px solid rgba(242,177,131,.42);background:rgba(224,122,47,.12);
  border-radius:var(--r-pill);padding:7px 14px}

/* --- DOOR 3 additions: service chips, flush variant, what-happens-next ---- */
/* .enr--flush sits in its own <section>, so it drops the rule and top margin
   the in-page variant uses to separate itself from the block above. */
.enr--flush{margin-top:0;padding-top:0;border-top:0}
.enr .chips{display:flex;flex-wrap:wrap;gap:10px;margin-top:12px}
.enr .chip{display:inline-flex;align-items:center;gap:10px;margin:0;min-height:54px;padding:13px 18px;cursor:pointer;
  background:#fff;border:2px solid #D8D2C8;border-radius:var(--r-pill);font-size:16.5px;font-weight:600;color:var(--navy);
  transition:border-color 160ms linear,background 160ms linear,box-shadow 200ms linear}
.enr .chip:hover{border-color:var(--navy)}
.enr .chip input{width:22px;height:22px;flex:none;margin:0;accent-color:var(--green)}
.enr .chip:has(input:checked){border-color:var(--green);background:#F1F8F4;box-shadow:0 12px 26px -20px rgba(28,90,63,.9)}
.enr--locked .chip{background:#E7E2D8;border-color:#CFC9BE;color:#6E7484;cursor:not-allowed;box-shadow:none}
.enr__whatnext{margin-top:26px;padding-top:22px;border-top:1px solid var(--hairline)}
.enr__wnh{font-family:var(--font-mono);font-size:11px;font-weight:600;letter-spacing:.18em;text-transform:uppercase;color:var(--navy);margin-bottom:16px}
.enr__whatnext ol{margin:0;padding:0;list-style:none}
.enr__whatnext li{max-width:70ch}

/* ============================================================ HERO BREATHING
   Founder ruling: the hero read as crowded and "Two ways in" looked crunched
   onto the bottom of the copy instead of opening a new movement. MEASURED
   before the change at 1257px: the gap from the 211 line to the doors kicker
   was 30.5px, and the whole hero stood 1082px tall.

   This block only ever INCREASES vertical space. No class, component, colour,
   font, radius or breakpoint is introduced; the two tiers below reuse the
   existing 1180 breakpoint, and every value keeps the clamp(px, vw, px) idiom
   already used throughout the hero. Nothing horizontal is touched, so the
   measure and the line breaks in the head are unchanged.

   It lives at the end of the file by the standing rule that new CSS goes in
   one commented block here rather than scattered through the sheet. That also
   makes it reversible in one delete. The .hero rule is restated for
   max-width:1180px because line 1494 sets its own padding there; without the
   second tier this block would leak desktop padding into narrow widths.

   To dial it back, lower the third number in each clamp — that is the value
   that applies at desktop width. The load-bearing one is .hero__doors. */
.hero{padding-block:clamp(28px,3vw,44px) clamp(72px,8.5vw,132px)}
.hero__sub{margin-top:clamp(24px,2.4vw,34px)}
.hero__now{margin-top:clamp(18px,1.8vw,26px)}
/* superseded by the doors block below — kept out of the way */
.hero__doors .doors__grid{margin-top:clamp(18px,2vw,28px)}
.hero__note{margin-top:clamp(38px,4vw,56px)}
@media (max-width:1180px){
  .hero{padding-block:clamp(24px,3vw,40px) clamp(60px,7vw,110px)}
}

/* ======================================= THE TWO DOORS — CARDS WITH CHARACTER
   Founder ruling 2026-08-09: the plain white cards read weak, vague and
   boring. Same anatomy as the reference row — card, inset head panel,
   paragraph, footer — but every surface now carries something the site
   already owns rather than being blank:

     · the head panel is tinted in the door's OWN colour at 6% and carries the
       34px hairline record sheet used by the pull band, 01 and the case path,
       masked so it fades out before the type;
     · a docket numeral (01 / 02) is stamped outlined in the panel's corner —
       the site's outlined-figure device, kept small and at 5% so it is texture,
       not a headline (the oversized version was rejected 2026-08-03);
     · the colour bar across the panel head runs as a gradient and lengthens on
       hover, the same gate-line behaviour as the statute rail in 02;
     · the footer is a real row: pill action left, status chip right, on one
       baseline, so the card closes on a line instead of trailing off.

   Cards are equal height (the paragraph flexes) so the two footers align.
   Ground stays --canvas; the light-ground inks are the correct pair. */
/* Founder ruling: the cards sat too close under the 211 line and read as part
   of the hero copy. The gap above them is now roughly triple, so the block
   starts a movement of its own. */
.hero__doors{position:relative;max-width:min(1040px,100%);margin:clamp(110px,13vw,210px) auto 0;
  padding:0;background:none;border:0;-webkit-mask-image:none;mask-image:none}
/* ---- The hand-off between the hero and the doors -------------------------
   The gap the founder opened up above the cards left a void: the hero column
   ends on its 211 hairline and nothing carries the eye down. This is a descent
   rule — a hairline that grows out of the hero, darkening as it falls, with a
   single token running down it. Same register as the case path's rule and the
   statute rail's gate line, and it adds no copy and makes no claim.
   The token pauses for readers who ask for reduced motion. */
.hero__doors::before{content:"";display:block;position:absolute;left:50%;
  top:calc(-1 * clamp(58px,6.5vw,108px));width:1px;height:clamp(58px,6.5vw,108px);
  transform:translateX(-50%);pointer-events:none;
  background:linear-gradient(180deg,transparent,rgba(20,35,63,.18) 42%,var(--navy))}
.hero__doors::after{content:"";position:absolute;left:50%;top:calc(-1 * clamp(58px,6.5vw,108px));
  width:7px;height:7px;margin-left:-3.5px;border-radius:50%;background:var(--orange);
  pointer-events:none;animation:door-descent 3.6s var(--ease-scrub) infinite}
@keyframes door-descent{
  0%{transform:translateY(0);opacity:0}
  14%{opacity:1}
  72%{transform:translateY(clamp(58px,6.5vw,108px));opacity:1}
  86%,100%{transform:translateY(clamp(58px,6.5vw,108px));opacity:0}
}
@media (prefers-reduced-motion:reduce){
  .hero__doors::after{animation:none;top:calc(-1 * clamp(58px,6.5vw,108px) + clamp(58px,6.5vw,108px) - 7px)}
}
.hero__doors>*{position:relative;z-index:1}
/* The section title, in the SAME system as every other section on the page.
   Founder ruling 2026-08-09: this block was titled with a small mono kicker
   while 01, the data desert, 02, 03 and 04 all title themselves in Anton at
   --fs-section. It was the only section speaking in a different voice. It now
   uses the display face and the section size like the rest; the flanking rules
   scale with it so the centred-head device is kept. No copy changed. */
.hero__doors-k{justify-content:center;gap:clamp(14px,1.6vw,22px);
  margin:0 0 clamp(20px,2.2vw,30px);
  font-family:var(--font-display);font-weight:400;text-transform:uppercase;
  font-size:var(--fs-section);line-height:1;letter-spacing:-.01em;color:var(--navy)}
.hero__doors-k::before,.hero__doors-k::after{content:"";width:clamp(26px,3vw,44px);height:3px;
  background:var(--orange);flex:none}
.doors__grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(16px,2vw,28px);
  align-items:stretch;margin:0;background:none;border:0;box-shadow:none}
.door{display:flex;flex-direction:column;align-items:stretch;text-align:left;gap:0;height:100%;
  overflow:hidden;isolation:auto;border:1px solid var(--hairline);border-radius:18px;
  background:#fff;padding:clamp(12px,1.2vw,16px);
  box-shadow:0 18px 40px -32px rgba(11,23,41,.55);
  transition:transform 260ms var(--ease-enter),box-shadow 260ms var(--ease-enter),border-color 240ms linear}
.hero__doors .door{padding:clamp(12px,1.2vw,16px)}
.door--org{border-left:1px solid var(--hairline)}
.door:hover{transform:translateY(-4px);text-decoration:none;border-color:#C3BCAF;
  box-shadow:0 30px 60px -30px rgba(11,23,41,.62)}
.door::after{display:none}
/* --- the head panel ------------------------------------------------------ */
.door__head{position:relative;display:block;overflow:hidden;border-radius:12px;
  background:rgba(46,125,91,.06);
  padding:clamp(20px,2.2vw,28px) clamp(16px,1.8vw,22px) clamp(22px,2.4vw,30px)}
.door--org .door__head{background:rgba(224,122,47,.07)}
/* record sheet, faded before it reaches the type */
.door__head::before{content:"";position:absolute;inset:0;pointer-events:none;
  background-image:linear-gradient(rgba(20,35,63,.055) 1px,transparent 1px),
    linear-gradient(90deg,rgba(20,35,63,.055) 1px,transparent 1px);
  background-size:34px 34px;
  -webkit-mask-image:linear-gradient(200deg,#000,transparent 62%);
  mask-image:linear-gradient(200deg,#000,transparent 62%)}
/* docket numeral, outlined, texture only */
.door__head::after{content:"01";position:absolute;right:10px;bottom:-14px;pointer-events:none;
  font-family:var(--font-display);font-size:78px;line-height:1;letter-spacing:-.02em;
  color:transparent;-webkit-text-stroke:2px rgba(20,35,63,.09)}
.door--org .door__head::after{content:"02"}
/* Lives INSIDE .door__head, so it rides the panel's top edge and is clipped by
   the panel's own 12px radius — as a sibling it sat on the card corner and got
   sliced by the 18px round. */
.door__bar{top:0;left:0;width:44%;right:auto;height:4px;border-radius:0 4px 4px 0;
  background:linear-gradient(90deg,var(--green),rgba(46,125,91,.15));box-shadow:none;
  transition:width 420ms var(--ease-enter)}
.door--org .door__bar{background:linear-gradient(90deg,var(--orange),rgba(224,122,47,.15));box-shadow:none}
.door:hover .door__bar{width:100%}
.door__k{position:relative;display:inline-flex;color:var(--green-ink);font-size:10px}
.door--org .door__k{color:var(--orange-ink)}
.door__k::before{width:6px;height:6px;box-shadow:none;animation:none}
.door__t{position:relative;margin:9px 0 0;font-size:clamp(23px,2.2vw,32px);line-height:.97;
  color:var(--navy);text-shadow:none}
.door--org .door__t{text-shadow:none}
.door__d{flex:1 1 auto;max-width:none;margin:clamp(14px,1.5vw,18px) 0 0;
  padding-inline:clamp(4px,.6vw,8px);color:var(--muted);font-size:14.5px;line-height:1.55;
  position:static;width:auto;height:auto;clip:auto;clip-path:none;white-space:normal;overflow:visible}
/* --- footer row ---------------------------------------------------------- */
.door__foot{display:flex;align-items:center;justify-content:space-between;gap:12px;
  margin:clamp(16px,1.8vw,22px) clamp(4px,.6vw,8px) clamp(2px,.4vw,4px)}
.door__go{align-self:auto;margin:0;padding:11px 21px;border:0;border-radius:var(--r-pill);white-space:nowrap;
  background:var(--green);color:#fff;font-size:13.5px;font-weight:700;letter-spacing:.01em;
  box-shadow:0 12px 26px -16px rgba(46,125,91,.9);
  transition:background 200ms linear,box-shadow 240ms var(--ease-enter)}
.door--org .door__go{background:var(--navy);box-shadow:0 12px 26px -16px rgba(20,35,63,.9)}
.door:hover .door__go{background:var(--navy-deep);color:#fff;box-shadow:0 16px 30px -16px rgba(11,23,41,.8)}
.door__go i{font-style:normal;transition:transform 240ms var(--ease-punch)}
.door:hover .door__go i{transform:translateX(4px)}
/* status chip — states plainly that nothing is open yet */
.door__soon{display:inline-flex;align-items:center;gap:7px;align-self:auto;margin:0;white-space:nowrap;
  padding:6px 11px;border:1px solid var(--hairline);border-radius:var(--r-pill);background:var(--canvas);
  color:var(--muted-on-mist);font-size:9.5px;letter-spacing:.16em}
.door__soon::before{content:"";width:5px;height:5px;border-radius:50%;background:var(--orange);flex:none}
/* "See what joining involves" plus the chip stop fitting one row inside a
   two-up card well before 820px, so the grid stacks at 950 instead — the 2-up
   row is never rendered at a width where the footer goes ragged. */
@media (max-width:950px){.doors__grid{grid-template-columns:1fr}}

/* ------------------------------------------------------- HERO LINE HEIGHT
   Founder ruling 2026-08-09: the hero column read tight — the three head lines
   and the two paragraphs under them all wanted more air. Leading only; no size,
   measure or copy changes, so the head still breaks on the authored lines.
   .reveal-line already clears Anton's depth with its own padding, and extra
   leading only ever gives the wipe MORE room, never less. */
.hero .display-hero{line-height:1.06}
.hero__sub{line-height:1.75}
.hero__now{line-height:1.75}

/* ============================== EDITORIAL + KINETIC PASS — HERO AND 01 =====
   Founder brief 2026-08-09: bigger type, tighter measures, hairlines instead
   of boxes, more contrast between sections; motion that builds and traces on
   scroll; corners softened to match the door cards; bold. Untouchable, by the
   same brief: the isometric field, the docket / record-tape / statute-rail /
   clause-plate language, the person-first copy, every approved word, and the
   211 line staying the most findable thing on the page.

   Scope is the two sections asked for. Nothing here changes copy or structure
   — every rule is type scale, measure, leading, radius or timing. */

/* --- radius: one step softer everywhere the site already rounds ----------- */
:root{--r-xs:6px;--r-sm:10px;--r-md:18px;--r-lg:26px}

/* --- hero: bigger head, tighter lede, hairline instead of a gap ----------- */
:root{--fs-hero:clamp(46px,8.6vw,132px)}
.hero__copy{max-width:min(1120px,78vw)}
.hero__sub{max-width:46ch;font-size:clamp(18px,1.5vw,23px)}
/* The 211 line keeps its orange rule and gains a hairline above it: the block
   is now closed by a line rather than floating, and it stays the last thing
   before the doors — findability is unchanged. */
.hero__now{margin-top:clamp(22px,2.4vw,32px);padding-top:clamp(18px,2vw,26px);
  border-top:1px solid var(--hairline);font-size:clamp(17px,1.35vw,21px)}
.hero__now::before{top:calc(.3em + clamp(18px,2vw,26px))}

/* --- 01: the claim runs bigger, the lede runs narrower -------------------- */
.crisis__h,.crisis__hammer{font-size:clamp(38px,5.4vw,78px);letter-spacing:-.02em}
.crisis__lede{max-width:46ch}
.crisis__docket{letter-spacing:.26em}

/* --- 01 record tape: figures that build ---------------------------------- */
/* The tape stays SQUARE. A 4px radius was tried here as part of the softening
   and reverted the same pass: at 8px tall it turns every segment into a pill,
   so the flush joins grow cream wedges and the one continuous tape reads as
   four separate bars. The tape's colour changes are its only dividers \u2014 that
   is the invariant, and it outranks the radius pass. */
/* Each figure rises as its own tape fills, left to right — the tape and the
   number arrive together instead of the numbers being there from the start. */
.rcpt__fig{opacity:0;transform:translateY(14px);
  transition:opacity 560ms var(--ease-enter),transform 640ms var(--ease-enter)}
.rcpt.is-in .rcpt__fig{opacity:1;transform:none}
.rcpt__c:nth-child(1) .rcpt__fig{transition-delay:140ms}
.rcpt__c:nth-child(2) .rcpt__fig{transition-delay:260ms}
.rcpt__c:nth-child(3) .rcpt__fig{transition-delay:380ms}
.rcpt__c:nth-child(4) .rcpt__fig{transition-delay:500ms}
/* The rail traces across before the row builds. */
.rcpt__rail{position:relative}
.rcpt__rail::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;
  background:var(--navy);transform:scaleX(0);transform-origin:left center;
  transition:transform 760ms var(--ease-scrub)}
.rcpt.is-in .rcpt__rail::after{transform:scaleX(1)}

@media (prefers-reduced-motion:reduce){
  .rcpt__fig{opacity:1;transform:none;transition:none}
  .rcpt__rail::after{transform:scaleX(1);transition:none}
}

/* ============================ HERO EYEBROW — GREEN MOVED TO THE DOT =======
   Founder rulings 2026-08-09, in two steps. First: the bright green LETTERING
   did not sit with a hero that is otherwise navy on cream with orange as its
   only accent. Then: keep the pill, and keep the green — put it in the dot as
   a shiny pulse.

   So the plate stays exactly where it was, the wording goes white (15.9:1 on
   navy-deep, the highest contrast on the page), and the green survives as the
   one live element: a bright dot with a hard specular highlight and a halo
   that breathes. It reads as a status light rather than as a colour choice,
   which is what it is — the pilot is running. */
.hero__eyebrow b{color:var(--on-dark);
  box-shadow:0 0 0 1px rgba(63,191,132,.34),0 6px 18px -10px rgba(11,23,41,.7)}
.hero__eyebrow b:hover{
  box-shadow:0 0 0 1px rgba(63,191,132,.7),0 0 26px -6px rgba(63,191,132,.6),0 14px 26px -12px rgba(11,23,41,.8)}
/* The dot: bright green core, white specular top-left, breathing halo. */
.hero__eyebrow b::before{width:9px;height:9px;background:
    radial-gradient(circle at 32% 30%,#EAFFF4 0 18%,var(--green-bright) 46%,#249A62 100%);
  box-shadow:0 0 10px 2px rgba(63,191,132,.85),0 0 22px 4px rgba(63,191,132,.35);
  animation:eyebrow-pulse 2.4s var(--ease-enter) infinite}
@keyframes eyebrow-pulse{
  0%,100%{box-shadow:0 0 8px 1px rgba(63,191,132,.6),0 0 18px 3px rgba(63,191,132,.22);transform:scale(1)}
  50%{box-shadow:0 0 15px 3px rgba(63,191,132,.95),0 0 34px 8px rgba(63,191,132,.42);transform:scale(1.12)}
}
@media (prefers-reduced-motion:reduce){.hero__eyebrow b::before{animation:none}}

/* ============================ THE DESCENT — PUSHED ========================
   Founder ruling: the hand-off graphic is the right idea, make it land. It is
   now an instrument rather than a line:

     · the rule carries a tick scale, the same device as the schematic field's
       bottom edge, fading in as it descends;
     · the token is a diamond with a trail behind it, not a dot;
     · it stops short of the kicker and fades before it arrives.

   ONE token only. A second was considered and rejected: two moving objects in
   a 108px run directly above the two cards is noise.

   Still 1px of structure, no copy, no claim. Everything stops under
   prefers-reduced-motion. */
.hero__doors::before{
  background:repeating-linear-gradient(180deg,rgba(251,248,243,.9) 0 1px,transparent 1px 11px),
    linear-gradient(180deg,transparent,rgba(20,35,63,.16) 34%,var(--navy));
  background-size:100% 100%,100% 100%;
  -webkit-mask-image:linear-gradient(180deg,transparent,#000 30%);
  mask-image:linear-gradient(180deg,transparent,#000 30%)}
.hero__doors::after{width:9px;height:9px;margin-left:-4.5px;border-radius:2px;
  background:var(--orange);transform-origin:50% 50%;
  box-shadow:0 0 12px 1px rgba(224,122,47,.55),0 -14px 16px -8px rgba(224,122,47,.45);
  animation:door-descent 3.4s var(--ease-scrub) infinite}
/* Travel stops short of the block's top edge and the fade completes before the
   token gets there — at full travel it parked on top of TWO WAYS IN. */
@keyframes door-descent{
  0%{transform:translateY(0) rotate(45deg) scale(.6);opacity:0}
  12%{opacity:1;transform:translateY(10%) rotate(45deg) scale(1)}
  62%{opacity:1;transform:translateY(calc(clamp(58px,6.5vw,108px) - 40px)) rotate(45deg) scale(1)}
  82%,100%{opacity:0;transform:translateY(calc(clamp(58px,6.5vw,108px) - 22px)) rotate(45deg) scale(.5)}
}
/* The terminating cross tick, on the kicker's baseline. */
.hero__doors-k{position:relative}
@media (prefers-reduced-motion:reduce){
  .hero__doors::after{animation:none;opacity:1;
    transform:translateY(calc(clamp(58px,6.5vw,108px) - 34px)) rotate(45deg)}
}

/* ============================ THE DESCENT, BUILT PROPERLY ==================
   Founder ruling 2026-08-09: the pseudo-element version was too quiet. It is
   now three real elements so each can carry its own motion — a rail, a beam
   with a tail, and a landing tick that fires as the beam arrives.

   It is still only structure: 1px of rule, no copy, no claim, aria-hidden, and
   the whole thing freezes under prefers-reduced-motion. The old ::before /
   ::after descent is switched off below so there is exactly one of these. */
.hero__doors::before,.hero__doors::after{display:none;content:none;animation:none}
.desc{--desc-h:clamp(64px,7vw,116px);
  position:absolute;left:50%;top:calc(-1 * var(--desc-h));transform:translateX(-50%);
  width:26px;height:var(--desc-h);pointer-events:none;z-index:0}
/* The rail: hairline that darkens as it falls, with a tick scale over it. */
.desc__rail{position:absolute;left:50%;top:0;bottom:0;width:1px;transform:translateX(-50%);
  background:repeating-linear-gradient(180deg,rgba(251,248,243,.85) 0 1px,transparent 1px 11px),
    linear-gradient(180deg,transparent,rgba(20,35,63,.18) 30%,var(--navy));
  -webkit-mask-image:linear-gradient(180deg,transparent,#000 26%);
  mask-image:linear-gradient(180deg,transparent,#000 26%)}
/* The beam: a bright head with a tail trailing behind it up the rail. */
.desc__beam{position:absolute;left:50%;top:0;width:3px;height:38px;transform:translate(-50%,-38px);
  border-radius:2px;
  background:linear-gradient(180deg,transparent,rgba(224,122,47,.5) 55%,var(--orange) 88%,#FFD9B8 100%);
  box-shadow:0 0 14px 2px rgba(224,122,47,.55),0 0 34px 8px rgba(224,122,47,.22);
  animation:desc-run 3.2s cubic-bezier(.42,0,.2,1) infinite}
@keyframes desc-run{
  0%{transform:translate(-50%,-38px);opacity:0}
  10%{opacity:1}
  64%{transform:translate(-50%,calc(var(--desc-h) - 30px));opacity:1}
  78%,100%{transform:translate(-50%,calc(var(--desc-h) - 22px));opacity:0}
}
/* The landing tick: a short cross rule that flashes as the beam reaches it. */
.desc__tick{position:absolute;left:50%;bottom:0;width:22px;height:2px;transform:translateX(-50%) scaleX(.2);
  background:var(--navy);opacity:.25;
  animation:desc-land 3.2s cubic-bezier(.42,0,.2,1) infinite}
@keyframes desc-land{
  0%,52%{transform:translateX(-50%) scaleX(.2);opacity:.22;background:var(--navy)}
  66%{transform:translateX(-50%) scaleX(1);opacity:1;background:var(--orange)}
  100%{transform:translateX(-50%) scaleX(.62);opacity:.3;background:var(--navy)}
}
@media (prefers-reduced-motion:reduce){
  .desc__beam{animation:none;opacity:.9;transform:translate(-50%,calc(var(--desc-h) - 34px))}
  .desc__tick{animation:none;transform:translateX(-50%) scaleX(1);opacity:.5}
}

/* ============================ THE DOOR CARDS, SHARPENED ===================
   Founder ruling: the cards and their actions read vague. Nothing is added to
   the layout — the moves are all surface, and each one is a material cue
   rather than an ornament:

     · the card carries a 1px inner highlight along its top edge, so it reads
       as a raised surface instead of an outline;
     · hovering warms the border to the door's own colour and slides the head
       panel's record grid a few pixels — the panel moves under the type;
     · the docket numeral firms up on hover;
     · the actions get depth: a gradient fill, an inset top highlight, a sheen
       that crosses once on hover, and the arrow rides in its own chip. */
.door{box-shadow:0 18px 40px -32px rgba(11,23,41,.55),inset 0 1px 0 rgba(255,255,255,.9)}
.door:hover{border-color:rgba(46,125,91,.5);
  box-shadow:0 30px 60px -30px rgba(11,23,41,.6),inset 0 1px 0 rgba(255,255,255,.9)}
.door--org:hover{border-color:rgba(224,122,47,.5)}
.door__head::before{transition:background-position 520ms var(--ease-enter)}
.door:hover .door__head::before{background-position:6px 6px}
.door__head::after{transition:-webkit-text-stroke-color 400ms linear}
.door:hover .door__head::after{-webkit-text-stroke-color:rgba(20,35,63,.16)}
/* --- the actions --------------------------------------------------------- */
.door__go{position:relative;overflow:hidden;display:inline-flex;align-items:center;gap:11px;
  padding:12px 14px 12px 22px;
  background:linear-gradient(180deg,#3A8F69,#256B4C);
  box-shadow:0 14px 26px -16px rgba(37,107,76,.95),inset 0 1px 0 rgba(255,255,255,.24)}
.door--org .door__go{background:linear-gradient(180deg,#1D3054,#0F1D33);
  box-shadow:0 14px 26px -16px rgba(11,23,41,.95),inset 0 1px 0 rgba(255,255,255,.18)}
.door:hover .door__go{background:linear-gradient(180deg,#1D3054,#0F1D33)}
.door--org:hover .door__go{background:linear-gradient(180deg,#2A4372,#16294A)}
/* one sheen crossing, on hover only */
.door__go::before{content:"";position:absolute;inset:0;transform:translateX(-120%);
  background:linear-gradient(105deg,transparent 36%,rgba(255,255,255,.34) 50%,transparent 64%);
  transition:transform 760ms var(--ease-enter)}
.door:hover .door__go::before{transform:translateX(120%)}
/* the arrow rides in its own chip */
.door__go i{display:grid;place-items:center;width:26px;height:26px;border-radius:50%;
  background:rgba(255,255,255,.16);font-size:13px;line-height:1;
  transition:transform 240ms var(--ease-punch),background 200ms linear}
.door:hover .door__go i{transform:translateX(3px);background:rgba(255,255,255,.28)}
.door:focus-visible{outline:3px solid var(--orange);outline-offset:3px}
@media (prefers-reduced-motion:reduce){
  .door__go::before{display:none}
  .door:hover .door__head::before{background-position:0 0}
}

/* ============================ THE DESCENT — TURNED UP =====================
   Founder ruling 2026-08-09: this is the page's attention hook. It has to
   catch the eye from across the screen and pull the reader into the two cards
   under it, so it is now a landing event rather than a travelling dot:

     · the beam runs brighter, longer and faster, with a hot white core;
     · a lens flare blooms at the landing point on the beat the beam arrives;
     · a ring pulses out of that point and dissipates;
     · the cross tick snaps to full width and flashes;
     · the TWO WAYS IN label warms for a moment as it is struck.

   All five run off ONE 3.2s clock so they read as a single event, not five
   loops. Everything stops dead under prefers-reduced-motion — a bright looping
   flare is exactly what that setting exists for. Nothing here is copy or a
   claim; the whole block is aria-hidden. */
.desc{--desc-h:clamp(78px,8.4vw,140px);width:140px}
.desc__beam{width:3px;height:52px;transform:translate(-50%,-52px);
  background:linear-gradient(180deg,transparent,rgba(224,122,47,.42) 46%,var(--orange) 84%,#FFF3E6 100%);
  box-shadow:0 0 18px 3px rgba(224,122,47,.6),0 0 44px 12px rgba(224,122,47,.28);
  animation:desc-run 3.2s cubic-bezier(.36,0,.12,1) infinite}
@keyframes desc-run{
  0%{transform:translate(-50%,-52px);opacity:0}
  8%{opacity:1}
  58%{transform:translate(-50%,calc(var(--desc-h) - 34px));opacity:1}
  70%,100%{transform:translate(-50%,calc(var(--desc-h) - 20px));opacity:0}
}
/* The flare — the bright moment. Sits at the landing point, blooms once. */
.desc__flare{position:absolute;left:50%;bottom:-46px;width:140px;height:112px;
  transform:translateX(-50%) scale(.3);opacity:0;pointer-events:none;
  background:radial-gradient(ellipse 42% 46% at 50% 50%,
      #FFFFFF 0%,rgba(255,226,196,.95) 16%,rgba(224,122,47,.6) 34%,rgba(224,122,47,.18) 58%,transparent 78%);
  animation:desc-flare 3.2s cubic-bezier(.36,0,.12,1) infinite}
@keyframes desc-flare{
  0%,50%{transform:translateX(-50%) scale(.3);opacity:0}
  60%{transform:translateX(-50%) scale(1.06);opacity:1}
  72%{transform:translateX(-50%) scale(1.16);opacity:.55}
  88%,100%{transform:translateX(-50%) scale(1.3);opacity:0}
}
/* The ring — one shockwave out of the landing point. */
.desc__ring{position:absolute;left:50%;bottom:-9px;width:18px;height:18px;border-radius:50%;
  border:2px solid var(--orange);transform:translateX(-50%) scale(.2);opacity:0;pointer-events:none;
  animation:desc-ring 3.2s cubic-bezier(.2,.7,.2,1) infinite}
@keyframes desc-ring{
  0%,54%{transform:translateX(-50%) scale(.2);opacity:0;border-color:#FFE2C4}
  62%{opacity:.9}
  100%{transform:translateX(-50%) scale(3.4);opacity:0;border-color:var(--orange)}
}
.desc__tick{width:30px;height:2px;animation:desc-land 3.2s cubic-bezier(.36,0,.12,1) infinite}
@keyframes desc-land{
  0%,50%{transform:translateX(-50%) scaleX(.18);opacity:.2;background:var(--navy)}
  60%{transform:translateX(-50%) scaleX(1);opacity:1;background:#FFE2C4}
  68%{background:var(--orange)}
  100%{transform:translateX(-50%) scaleX(.6);opacity:.28;background:var(--navy)}
}
/* The label takes the hit — warms for a beat as the beam lands, then cools. */
.hero__doors-k{animation:desc-strike 3.2s cubic-bezier(.36,0,.12,1) infinite}
/* NO COLOUR STOPS. This element is a section title at --fs-section like every
   other one on the page, and every other one is permanently --navy; swinging
   this one to #8C3F0D for a beat made it read as a different heading class on
   every cycle. The landing beat is light on the type, not a recolour. */
@keyframes desc-strike{
  0%,54%{text-shadow:none}
  62%{text-shadow:0 0 18px rgba(224,122,47,.55),0 0 3px rgba(224,122,47,.35)}
  100%{text-shadow:none}
}
@media (prefers-reduced-motion:reduce){
  .desc__flare,.desc__ring{animation:none;opacity:0}
  .hero__doors-k{animation:none;color:var(--navy)}
}

/* ==========================================================================
   ABOUT — 2026-08-10 rebuild to the homepage standard.

   Six moves, every one of them ground, scale, alignment, graphic or spacing.
   NO COPY CHANGED — not a word. Two blocks of prose moved to a different
   ground; nothing was reworded, tightened or added.

   Every colour, size, easing and radius below resolves to an existing token.
   No new token, breakpoint or component. The three signature devices this page
   needs — the clip-wipe, the record tape and the outlined figure — are reused
   from .reveal-line and .rcpt rather than reimplemented.

   BOLDNESS BUDGET, three places only: the hero, the tape, the bleeding line.
   Everything else is deliberately quiet. A page loud everywhere has no loud
   moment.
   ========================================================================== */

/* --- shared prose + kicker ------------------------------------------------
   One prose class and one mono kicker for the whole page, so measure and
   rhythm cannot drift between the blocks that use them. Dark-ground colours
   follow the existing .band-* pattern rather than being set per block. */
.abt__p{max-width:66ch;margin-top:clamp(24px,2.8vw,36px);
  font-size:var(--fs-body-lg);line-height:1.62;color:var(--navy);text-wrap:pretty}
.abt__p:first-child{margin-top:0}
/* An EIN is a legal identifier. Held together so the line-breaker can never
   split the label from the number, nor break inside the hyphenated number
   itself — it was breaking as "…in Vallejo. EIN" / "99-5142558." in the hero at
   320, 640 and 909. Applied to BOTH instances so they cannot diverge later. */
.nb{white-space:nowrap}
/* SELF-INFLICTED, and worth the note: this comment was corrupted once. An edit
   that literally find-and-replaced ".abt__p:first-child{margin-top:0}" matched
   the copy of that string INSIDE this comment as well as the real rule, spliced
   another comment into the middle, closed this one early, and left the tail as
   a malformed selector that silently swallowed the rule below. The file read
   fine and the rule was gone from the CSSOM. Never find-and-replace a selector
   string that also appears in prose -- anchor on a unique neighbour instead.

   MEASURED DEFECT, fixed here: .abt__p:first-child{margin-top:0} exists so a
   prose block does not double its own leading gap, but it also fires when the
   block follows a heading directly — and .display-section carries
   margin-bottom:0. Result was a 0px gap between #board-h and its first
   paragraph, against 44-48px everywhere else on the page.

   Scoped to the collision rather than fixed on .display-section: adding a
   bottom margin there would DOUBLE UP in the creed section, where .creed
   already supplies its own clamp(40px,4.8vw,68px) margin-top. This rule only
   fires when a heading is the immediately preceding sibling of the wrapper. */
h2 + [data-rv] > .abt__p:first-child,
h1 + [data-rv] > .abt__p:first-child{margin-top:clamp(26px,3vw,38px)}
/* MEASURED: --muted on stone is 4.2:1 — a fail for 11px text. --muted-on-mist
   is the text-weight variant the system provides for exactly this: 5.00:1 on
   stone, 5.63:1 on canvas. Both measured against the ACTUAL ground. */
.abt__k{display:flex;align-items:center;gap:12px;margin:0 0 clamp(18px,2vw,26px);
  font-family:var(--font-mono);font-size:11px;letter-spacing:.24em;
  text-transform:uppercase;color:var(--muted-on-mist)}
.abt__k::before{content:"";width:30px;height:2px;background:var(--orange);flex:none}
/* MEASURED DEFECT, fixed here: .display-section--narrow carries margin-inline:auto
   because it is authored for the sec--center sections on index. Used on a
   LEFT-ALIGNED head it centres the block inside .shell — four heads on this page
   floated 170-188px right of their own body copy, which is the exact fault this
   rebuild exists to fix. Worst case was the turn, where the head sat 188px right
   of the orange rule that belongs to it. This gives the same 26ch measure with
   no auto, so index's centred sections keep theirs untouched. */
.abt__h{max-width:26ch;margin-inline:0}
.band-navy .abt__p,.band-deep .abt__p{color:var(--mist)}
.band-navy .abt__k,.band-deep .abt__k{color:var(--orange-soft)}

/* --- MOVE 1 — the hero ----------------------------------------------------
   .hero verbatim: same cream ground, same overflow clip, same field mask, same
   clip-wipe. Only the vertical measure is new, because this hero holds ONE
   sentence and one lede and nothing else. The empty screen is the decision —
   do not fill it. */
.hero--about{display:flex;align-items:center;min-height:min(76vh,740px);
  padding-block:clamp(52px,7vw,112px) clamp(68px,8.5vw,136px)}
.hero--about .hero__copy{max-width:min(1180px,80vw)}
/* On index the lede is followed by a 211 line and two doors. Here it closes
   the hero, so it sits further from the head and holds a tighter measure. */
.hero--about .hero__sub{margin-top:clamp(26px,3vw,42px);max-width:50ch;
  color:var(--navy)}
/* 5px solid, per ruling — index runs 3px on a gradient because its lede is
   muted and one of four elements. Here the rule is the only mark in the block,
   so it carries full weight. Draw-down and timing are index's, unchanged. */
.hero--about .hero__sub::before{width:5px;background:var(--orange)}

/* --- MOVE 3 — the survey tape -------------------------------------------
   .rcpt verbatim at TWO cells instead of four. Two figures means the tape
   carries exactly one colour change — full orange under 228, empty under
   zero — and that change is the only divider. No vertical rules, no cards.
   The bar stays 8px and stays SQUARE: a radius turns each segment into a pill
   and the flush join breaks. */
.rcpt--two .rcpt__row{grid-template-columns:repeat(2,minmax(0,1fr));
  padding-block:clamp(30px,3.6vw,48px) clamp(26px,3vw,38px)}
.rcpt--two .rcpt__fig{margin-top:14px;font-size:clamp(58px,10.4vw,152px)}
.rcpt--two .rcpt__bar{margin-top:clamp(20px,2.4vw,32px)}

/* --- MOVE 4 — the loudest moment, and the only one ----------------------
   One line, dark ground, oversized, clipped by both edges of the band, nothing
   beside it. The band clips its own overflow, so the bleed can never become
   page overflow. */
/* The FRAME. Canvas ground and one gutter of padding, matching .gband-frame on
   the landing page, so the band reads as a plate set into the page rather than
   a full-bleed stripe. */
.blead{background:var(--canvas);padding:clamp(24px,3vw,44px) var(--outer)}
/* The PLATE. Everything the section used to be -- navy ground, its own
   container for the cqw type, and the clip that keeps the drifting grid inside
   the band's edges. Hard corners: radius is for cards on this site, and a card
   is a door someone walks through. This is not one. */
.blead__plate{container-type:inline-size;position:relative;overflow:hidden;
  width:100%;max-width:var(--shell);margin-inline:auto;background:var(--navy-deep);
  padding-block:clamp(52px,7.4vw,116px)}
/* MEASURED DEFECT, fixed here: as a block with text-align:center the inner span
   took the band width, so nowrap text spilled to the RIGHT ONLY — bleed measured
   0px left / 0px right on the span box and the overflow was one-sided. A flex
   row with justify-content:center makes the span shrink to its text and overflow
   BOTH edges equally, which is what the ruling asks for. Size is set so the clip
   reads as a bleed rather than as damage: ~8% off each edge at 1246, not 30%. */
.blead__l{display:flex;justify-content:center;overflow:hidden;
  padding-bottom:.14em;margin-bottom:-.11em;white-space:nowrap;
  font-family:var(--font-display);text-transform:uppercase;font-weight:400;
  /* line-height stays >= .92: the .14em / -.11em clip-wipe pair below is the
     system device from .reveal-line and is tuned for that range. At .86 the
     negative margin over-pulled and the two lines overlapped by 2px. */
  /* cqw, NOT vw: see the note on .blead. The two lines carry different
     character counts (47 and 51), so they take different coefficients to land
     on the same optical width — sizing both the same overshoots one of them. */
  font-size:clamp(14px,5.26cqw,86px);line-height:.98;letter-spacing:-.035em;
  color:var(--on-dark)}
.blead__l>span{display:block;flex:none;transform:translateY(106%);
  transition:transform 940ms var(--ease-enter)}
.blead.is-in .blead__l>span{transform:translateY(0)}
.blead__l+.blead__l>span{transition-delay:130ms;color:var(--orange-soft)}
/* MEASURED: at one shared size the two sentences bleed unequally — line 1 ran
   1274px against a 1196px band (39px off each edge) while line 2 ran 1170px and
   did not reach the edges at all, so the block bled on one line only. The second
   line is set larger so both lines match in OPTICAL WIDTH rather than in point
   size, and both bleed. This is the same reason a two-line display lockup is
   sized by measure, not by type scale. */
.blead__l+.blead__l{font-size:clamp(13px,4.85cqw,79px)}
/* The -.11em margin exists to cancel the .14em padding BETWEEN stacked lines.
   There is no line after the last one, so on it the negative margin has nothing
   to cancel and simply eats the band's bottom padding — measured 132px top
   against 125px bottom. The padding stays (line 2 has real descenders: the
   comma and the y in "nobody"); only the margin goes. */
.blead__l:last-child{margin-bottom:0}
/* The landing page's pull-band ground, on this band. Same device, same
   numbers: 34px hairlines in --mist at .2, masked so the grid holds the band's
   edges and dissolves to nothing behind the words, drifting one cell over 44s.
   Compositor-only (transform), and paused unless the band is in view so it is
   not repainting off-screen. The lines sit above it on z-index. */
.blead__grid{position:absolute;inset:-44px;pointer-events:none;
  background:linear-gradient(rgba(221,231,228,.2) 1px,transparent 1px) 0 0/100% 34px,
    linear-gradient(90deg,rgba(221,231,228,.2) 1px,transparent 1px) 0 0/34px 100%;
  -webkit-mask-image:radial-gradient(118% 92% at 50% 50%,transparent 0 26%,#000 68%);
  mask-image:radial-gradient(118% 92% at 50% 50%,transparent 0 26%,#000 68%);
  animation:pull-drift 44s linear infinite}
.blead:not(.is-in) .blead__grid{animation-play-state:paused}
.blead__l{position:relative;z-index:2}

/* --- MOVE 5 — the anchor, warming across three grounds ------------------
   Each state is a full-width panel and the ground performs the arc the copy
   states: navy, then stone, then cream. Separation is by ground alone, as
   everywhere else on this site. This block gets the most space after the hero. */
.warm__s{padding-block:clamp(68px,8.4vw,124px)}

/* --- MOVE 6 — the turn --------------------------------------------------
   When the page speaks directly to a provider it stops being designed at them.
   Plain type, one orange rule, more space than anywhere else on the page, and
   no graphic of any kind. */
.turn{padding-block:clamp(108px,13.5vw,208px)}
.turn__rule{display:block;width:88px;height:5px;background:var(--orange);
  transform:scaleX(0);transform-origin:left center;
  transition:transform 700ms var(--ease-scrub) 120ms}
.turn__head.is-in .turn__rule{transform:scaleX(1)}
.turn__head h2{margin-top:clamp(26px,3vw,40px);max-width:24ch}
.turn .abt__p{max-width:68ch;line-height:1.68}
.turn__cta{margin-top:clamp(40px,4.6vw,64px)}

@media (prefers-reduced-motion:reduce){
  .blead__l>span{transform:none}
  .turn__rule{transform:scaleX(1)}
}
/* Below 700 the two tape cells stack, so each segment becomes its own bar and
   the flush join is meaningless — the cell padding is cancelled to keep both
   bars edge to edge with the type above them. */
@media (max-width:700px){
  .hero--about{min-height:0;display:block}
  .rcpt--two .rcpt__row{grid-template-columns:1fr;gap:clamp(28px,7vw,40px)}
  .rcpt--two .rcpt__c{padding-inline:0}
  .rcpt--two .rcpt__bar{margin-inline:0}
}

/* ==========================================================================
   ABOUT — THE FILM HERO, 2026-08-10

   Built to the founder's reference layout: centred column, oversized head,
   centred lede, the organisation's own lockup where the reference puts a client
   logo row, and a large centred film plate under it.

   LAYOUT ONLY. Not one colour, font, radius, spacing step or breakpoint is new
   — every value below resolves to an existing token. The ground stays cream,
   as it is across the whole site.

   THE ISOMETRIC FIELD IS GONE from this hero by ruling. Do not put a
   [data-field] host back on this page: the field is the landing page's
   signature and it is the single thing that made this hero read as the landing
   page. Only the hero changed — every section head below it stays left-anchored.
   ========================================================================== */
.hero--about{display:block;min-height:0;text-align:center;
  padding-block:clamp(38px,4.6vw,68px) clamp(58px,7vw,112px)}
.hero--about .hero__copy{max-width:none;margin-inline:auto}
.hero--about .hero__eyebrow{justify-content:center}

/* The lede loses its LEFT rule — a rule down the left edge of centred type
   reads as a mistake. The device survives as a centred orange bar between the
   head and the lede, the same mark .dsrt__closer already uses, and it still
   draws itself on arrival. Measure widened to 62ch per ruling. */
.ahero__bar{display:block;width:88px;height:5px;background:var(--orange);
  margin:clamp(26px,3vw,40px) auto 0;transform:scaleX(0);
  transition:transform 700ms var(--ease-scrub) 640ms}
.is-loaded .ahero__bar{transform:scaleX(1)}
.hero--about .hero__sub{margin:clamp(22px,2.6vw,34px) auto 0;padding-left:0;
  max-width:62ch;text-align:center;color:var(--navy)}
.hero--about .hero__sub::before{content:none}

/* The reference's client-logo slot stays EMPTY. A lockup was built here and
   removed by ruling. Nothing replaces it — no partner marks, no press badges,
   no endorsement strip. The lede hands straight to the film plate, so the plate
   picks up the space the logo was holding. */

/* --- THE FILM PLATE ------------------------------------------------------
   A navy-deep pane with no border, no radius and no shadow — the .gpv
   treatment. That matters: the system forbids a bordered card floating on
   cream, so the plate speaks the site's own dark-pane language instead of
   copying the reference's card.

   NOTHING LOADS UNTIL THE READER CLICKS. No iframe, no thumbnail, no
   third-party request on page load. The poster is the site's own record grid
   drawn in CSS — deliberately NOT the video's own still frame, because a still
   can carry a face or a street sign and both are ruled out. */
.vplate{margin:clamp(52px,6.4vw,100px) auto 0;max-width:840px;
  opacity:0;transform:translateY(20px);
  transition:opacity 720ms var(--ease-enter) 880ms,transform 720ms var(--ease-enter) 880ms}
.is-loaded .vplate{opacity:1;transform:none}
.vplate__btn{position:relative;display:block;width:100%;aspect-ratio:16/9;padding:0;border:0;
  background:var(--navy-deep);overflow:hidden;cursor:pointer;color:var(--on-dark)}
.vplate__frame{display:block;width:100%;aspect-ratio:16/9;border:0;background:var(--navy-deep)}
/* The record sheet. This is a record, so its ground is one. */
.vplate__grid{position:absolute;inset:0;pointer-events:none;
  background:linear-gradient(rgba(221,231,228,.15) 1px,transparent 1px) 0 0/100% 34px,
    linear-gradient(90deg,rgba(221,231,228,.15) 1px,transparent 1px) 0 0/34px 100%;
  -webkit-mask-image:radial-gradient(122% 98% at 50% 50%,#000 20%,transparent 80%);
  mask-image:radial-gradient(122% 98% at 50% 50%,#000 20%,transparent 80%)}
/* Corner registration brackets — the system's 22px / 2px / orange-at-half device. */
.vplate__bk{position:absolute;inset:clamp(14px,1.7vw,24px);pointer-events:none}
.vplate__bk::before,.vplate__bk::after{content:"";position:absolute;width:22px;height:22px;
  border:2px solid rgba(224,122,47,.5)}
.vplate__bk::before{top:0;left:0;border-right:0;border-bottom:0}
.vplate__bk::after{right:0;bottom:0;border-left:0;border-top:0}
/* The play control is a seal, not a generic play circle: the ring lights and
   the glyph steps forward on hover, the same punch the primary button uses. */
.vplate__seal{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);
  width:clamp(64px,6.8vw,92px);height:clamp(64px,6.8vw,92px);border-radius:var(--r-pill);
  display:grid;place-items:center;background:rgba(251,248,243,.07);
  box-shadow:0 0 0 2px rgba(251,248,243,.88);
  transition:box-shadow 320ms var(--ease-enter),background 320ms var(--ease-enter),transform 320ms var(--ease-punch)}
.vplate__seal svg{width:28%;height:auto;fill:var(--on-dark);margin-left:9%;
  transition:fill 320ms var(--ease-enter)}
.vplate__btn:hover .vplate__seal,.vplate__btn:focus-visible .vplate__seal{
  background:rgba(224,122,47,.18);transform:translate(-50%,-50%) scale(1.06);
  box-shadow:0 0 0 2px var(--orange),0 0 36px -4px rgba(224,122,47,.72)}
.vplate__btn:focus-visible{outline:3px solid var(--orange);outline-offset:4px}

@media (prefers-reduced-motion:reduce){
  .ahero__bar{transform:scaleX(1)}
  .vplate{opacity:1;transform:none}
  .vplate__seal,.vplate__btn:hover .vplate__seal{transition:none}
}
@media (max-width:700px){
  .vplate__bk{inset:10px}
  .vplate__bk::before,.vplate__bk::after{width:16px;height:16px}
}

/* ==========================================================================
   ABOUT — THE CREED AND THE BOARD, 2026-08-10
   Two blocks the rebuilt About page needs and the system did not have: the
   four-clause creed, and an eight-slot board grid that fills two clean rows.
   Every value resolves to an existing token. No new colour, font, radius,
   spacing step or breakpoint.
   ========================================================================== */

/* --- THE CREED ---------------------------------------------------------
   Four beliefs as a SPECIFICATION SHEET, not cards. The only frame is a pair of
   22px corner registration brackets at opposite corners of each clause — 2px,
   orange, half strength, the system's own device.

   THE HAIRLINE RULES THAT USED TO DIVIDE THESE CLAUSES ARE GONE. Brackets plus
   rules is double framing, and a ruled cell with a bracket on it reads as a
   card — the one thing this block must not be. The brackets replaced them;
   nothing replaced the brackets. That was the self-critique cut.
   ------------------------------------------------------------------------ */
.creed{margin-top:clamp(40px,4.8vw,68px)}
.creed__c{position:relative;padding:clamp(26px,3vw,38px) clamp(26px,3vw,38px) clamp(30px,3.4vw,44px)}
.creed__c::before,.creed__c::after{content:"";position:absolute;width:22px;height:22px;
  border:2px solid rgba(224,122,47,.5);pointer-events:none}
.creed__c::before{top:0;left:0;border-right:0;border-bottom:0}
.creed__c::after{right:0;bottom:0;border-left:0;border-top:0}
.creed__i{display:block;font-family:var(--font-mono);font-size:11px;letter-spacing:.24em;
  text-transform:uppercase;color:var(--muted-on-mist)}
.band-navy .creed__i,.band-deep .creed__i{color:var(--orange-soft)}
.creed__claim{margin-top:13px;max-width:20ch;
  font-family:var(--font-display);text-transform:uppercase;font-weight:400;
  font-size:var(--fs-card-heading);line-height:1;letter-spacing:-.01em;color:var(--navy)}
.band-navy .creed__claim,.band-deep .creed__claim{color:var(--on-dark)}
.creed__b{max-width:52ch;margin-top:clamp(14px,1.6vw,20px);
  font-size:var(--fs-body);line-height:1.62;color:var(--navy);text-wrap:pretty}
.band-navy .creed__b,.band-deep .creed__b{color:var(--mist)}
/* Two columns from 900 so four clauses read as one sheet rather than a scroll.
   The gap is the separation — there are no rules between them. */
@media (min-width:900px){
  .creed{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));
    gap:clamp(26px,3.2vw,48px)}
}

/* --- THE BOARD ---------------------------------------------------------
   The eight-slot grid rules that used to live here are DELETED, not disabled.

   The grid markup and the one line that hid it went first, and leaving these
   rules behind was a real defect rather than dead weight: .brd__shot,
   .brd__name and .brd__role are shared class names, so the rail inherited the
   half of each rule it did not happen to re-declare. Measured on a running
   page, the rail's name rendered in Anton, uppercase, at a size authored for
   Archivo semibold -- and synthetically emboldened, because Anton ships weight
   400 only. The portrait carried a 1px --hairline border and display:grid,
   both authored to frame an EMPTY placeholder box with a centred mono label.

   That is this project's own trap: the new block declared size, weight and
   colour, overrode nothing else, and every unmentioned property kept coming
   from a rule for markup that no longer exists.

   The live rules are in THE BOARD RAIL block at the end of this sheet. If a
   grid is ever wanted again it gets its OWN class names, not these. -->
   ------------------------------------------------------------------------ */


/* ==========================================================================
   THE BOARD RAIL (.brd__rail) — About. Built 2026-08-10.

   The eight-slot grid and the one line that hid it are gone. That pair existed
   to stop eight empty portrait frames reaching a live page; the rail cannot
   have that failure, because it only renders seats that are filled.

   Existing tokens only. Hard corners: radius on this site is for cards, and a
   card is a door someone walks through. A portrait is not one.
   ========================================================================== */
.brd__rail{--brd-gap:clamp(16px,1.8vw,26px);
  position:relative;overflow:hidden;margin-top:clamp(46px,5vw,74px);
  /* The rail dissolves at both edges instead of chopping a card in half at the
     shell boundary -- the same soft-edge idiom as the field and record sheet. */
  -webkit-mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent);
  mask-image:linear-gradient(90deg,transparent,#000 7%,#000 93%,transparent)}
/* width:max-content + margin auto does the whole job with no flag: narrower
   than the rail (one or two members) it centres; wider, auto resolves to 0 and
   it starts flush left, which is where a marquee has to begin. */
.brd__marquee{display:flex;gap:var(--brd-gap);width:max-content;margin-inline:auto}
.brd__set{display:flex;gap:var(--brd-gap);list-style:none;margin:0;padding:0}
/* The duplicate set is what closes the loop with no seam. Hidden until there
   are enough real members to fill the rail -- see the :has() rules below. */
.brd__set--dupe{display:none}
.brd__c{flex:none;width:clamp(214px,23vw,286px)}
/* ROUNDED, on a founder ruling, and it is a deliberate exception to "hard edges
   everywhere except cards". The site rounds cards because a card is a door a
   person walks through; a portrait is not one. The founder asked for the
   reference treatment here specifically, so the exception is scoped to this
   one element and nothing else on the page follows it. overflow:hidden was
   already present, which is what actually clips the photograph to the curve --
   a radius on the box alone would leave square image corners on top of it. */
.brd__shot{aspect-ratio:4/5;overflow:hidden;border-radius:var(--r-md);
  background:var(--navy-deep);margin-bottom:16px}
/* The source is a landscape photograph; the 4:5 crop happens here rather than
   in a pre-cropped file. A canvas-cropped copy was tried and abandoned: the
   only encoder available writes PNG whatever the extension says, so a 900x1125
   portrait shipped as 1.7MB for a card that renders at 212px. The original
   JPEG is 433KB and cover's default centring lands the same framing.
   object-position is stated explicitly so a future crop change is one number. */
.brd__shot img{display:block;width:100%;height:100%;object-fit:cover;object-position:49% 50%}
.brd__name{display:block;font-size:15.5px;font-weight:600;line-height:1.25;
  letter-spacing:-.008em;color:var(--navy)}
.brd__role{display:block;margin-top:5px;font-family:var(--font-mono);font-size:11.5px;
  line-height:1.4;letter-spacing:.13em;text-transform:uppercase;color:var(--muted-on-mist)}

/* THE MARQUEE. Right to left, continuous, seamless.

   It switches itself on at FOUR cards. With one member an animated rail either
   sits still or repeats the same face across the screen, and both read as a
   defect -- so the motion and the duplicate set appear together, by themselves,
   when there is enough to carry them. No flag, no second edit.

   The distance is calc(-50% - gap/2), NOT -50%. The marquee holds two sets with
   one gap between them, so its width is 2S+G and half of that is S+G/2 -- half
   a gap short of where set two's first card has to land. Using a bare -50%
   leaves a visible stutter once per lap. */
@keyframes brd-run{from{transform:translate3d(0,0,0)}
  to{transform:translate3d(calc(-50% - var(--brd-gap) / 2),0,0)}}
.brd__rail:has(.brd__set:first-child > .brd__c:nth-child(4)) .brd__set--dupe{display:flex}
.brd__rail:has(.brd__set:first-child > .brd__c:nth-child(4)) .brd__marquee{
  animation:brd-run 52s linear infinite}
/* PAUSE. Hover was once the only thing that worked here: :focus-within shipped
   in this rule while nothing inside the rail was focusable, so it matched
   nothing and the mechanism excluded every keyboard and touch user. At four
   members that is a 52s auto-starting animation with no reachable pause, which
   fails WCAG 2.2.2. The real set's cards now carry tabindex="0", which is what
   makes :focus-within able to fire at all -- the rule did not change, the
   markup did. The aria-hidden duplicate set stays untabbable on purpose, or a
   keyboard user would tab through every name twice.

   MEASURED, and the reason this rule had to be rewritten: the :has() rule
   above uses the ANIMATION SHORTHAND, which resets animation-play-state to
   running, and its specificity is inflated to (0,6,2) by the selectors inside
   :has(). A plain .brd__rail:hover .brd__marquee is (0,3,0) and loses, so the
   pause was overridden on every frame -- play-state read "running" with focus
   sitting on a card. Carrying the same :has() prefix takes these to (0,6,3),
   which is the only way they can win against the rule that starts it. */
.brd__rail:has(.brd__set:first-child > .brd__c:nth-child(4)):hover .brd__marquee,
.brd__rail:has(.brd__set:first-child > .brd__c:nth-child(4)):focus-within .brd__marquee{animation-play-state:paused}
/* A focusable card needs a visible ring, and the site's is orange at 3px. */
.brd__c:focus-visible{outline:3px solid var(--orange);outline-offset:4px}
/* Keeps "/ Founder" together so the separator cannot dangle at a line end. */
.brd__role{text-wrap:balance}
@media (prefers-reduced-motion:reduce){
  .brd__rail:has(.brd__set:first-child > .brd__c:nth-child(4)) .brd__marquee{animation:none}
  /* Static means the duplicate set is dead weight and a screen-reader-invisible
     repeat of every name. Drop it. */
  .brd__rail:has(.brd__set:first-child > .brd__c:nth-child(4)) .brd__set--dupe{display:none}
  .brd__set{flex-wrap:wrap;justify-content:center}
  .brd__marquee{width:auto}}

/* ==========================================================================
   WHO WE ARE (.wwr) — About. Rebuilt 2026-08-10.

   The five paragraphs were five identical blocks of prose and the section read
   as vague because nothing in it was ranked. They are not five equal things:
   a credential, a mission, a definition, an argument, a close. Each now gets
   its own register. No copy changed.

   Existing tokens only. No new colour, font, radius, spacing step or
   breakpoint. Reversible by deleting this block.
   ========================================================================== */

/* The heading takes the site's clip-wipe. Numbers are the documented device:
   .14em padding / -.11em margin to clear Anton's depth, inner span from 105%,
   90ms per line. Keyed to .is-in because this is a scroll section, not the
   hero — the hero's copy of the device keys to .is-loaded instead. */
.wwr__h{margin-bottom:clamp(30px,3.4vw,46px)}
.wwr__h .reveal-line{display:block;overflow:hidden;padding-bottom:.14em;margin-bottom:-.11em}
.wwr__h .reveal-line>span{display:block;transform:translateY(105%);
  transition:transform 820ms var(--ease-enter)}
.wwr__h .reveal-line:nth-child(2)>span{transition-delay:90ms}
.wwr__h.is-in .reveal-line>span{transform:none}

/* THE CREDENTIAL. A registration, set as a filing plate — mono, tight, framed
   by the site's 22px / 2px / orange-at-half corner brackets so it reads as a
   readout rather than a sentence someone forgot to style. inline-block: it
   must size to its own content, never stretch to the shell. */
.wwr__reg{display:inline-block;position:relative;font-family:var(--font-mono);
  font-size:13.5px;line-height:1.5;letter-spacing:.01em;color:var(--navy);
  padding:clamp(20px,2.2vw,26px) clamp(24px,2.6vw,32px);margin:0 0 clamp(46px,5vw,72px);
  max-width:52ch;background:rgba(251,248,243,.5)}
.wwr__reg::before,.wwr__reg::after{content:"";position:absolute;width:22px;height:22px;
  border:2px solid rgba(224,122,47,.5)}
.wwr__reg::before{top:0;left:0;border-right:0;border-bottom:0}
.wwr__reg::after{right:0;bottom:0;border-left:0;border-top:0}

/* THE MISSION. Second-loudest thing in the section. Held to a tight measure so
   it lands as a statement, not prose. Archivo rather than Anton on purpose —
   Anton here would fight the heading two lines above it. */
.wwr__mission{font-size:clamp(25px,3.3vw,42px);font-weight:600;line-height:1.1;
  letter-spacing:-.015em;color:var(--navy);max-width:21ch;
  margin:0 0 clamp(34px,3.8vw,52px);text-wrap:pretty}

/* THE DEFINITION. Ordinary body register — it is the only block here that is
   genuinely prose, and letting it be quiet is what makes the rest read loud. */
.wwr__def{font-size:18px;line-height:1.62;color:var(--navy);max-width:60ch;
  margin:0 0 clamp(58px,6.4vw,96px);text-wrap:pretty}

/* THE LEDGER — the section's one loud moment.
   Two cells, one continuous tape. Solid under what IS counted, an empty
   outlined channel under what is NOT. The fill runs left to right and stops
   dead at the boundary; nothing happens on the right and that is the argument,
   not a missing animation.
   NO GAP between the cells — the tape has to be continuous, and the colour
   change is the only divider. Text breathing comes from padding on .wwr__t
   instead, which is why the tape can sit flush edge to edge. */
.wwr__ledger{position:relative;display:grid;grid-template-columns:1fr 1fr;
  margin:0 0 clamp(40px,4.4vw,62px);padding:clamp(34px,3.6vw,52px) 0 0}
/* The record sheet: this content IS a record, so its ground is one. */
/* Inset horizontally to 0, not a negative percentage: a -6% bleed put 25px of
   real geometry past the viewport at 909. It was invisible because the radial
   mask fades it AND body clips, which is exactly the pair that makes an
   overflow detector unable to fail — so it would have sat there indefinitely.
   The mask already dissolves the edges; the bleed bought nothing. */
.wwr__grid{position:absolute;inset:-14% 0 18%;pointer-events:none;
  background:linear-gradient(rgba(20,35,63,.10) 1px,transparent 1px) 0 0/100% 34px,
    linear-gradient(90deg,rgba(20,35,63,.10) 1px,transparent 1px) 0 0/34px 100%;
  -webkit-mask-image:radial-gradient(112% 88% at 50% 50%,#000 22%,transparent 78%);
  mask-image:radial-gradient(112% 88% at 50% 50%,#000 22%,transparent 78%)}
.wwr__c{position:relative;padding-bottom:34px}
.wwr__t{display:block;font-size:clamp(19px,1.95vw,26px);font-weight:600;
  line-height:1.28;letter-spacing:-.012em;color:var(--navy);text-wrap:pretty}
.wwr__c--known .wwr__t{padding-right:clamp(24px,3vw,54px)}
.wwr__c--unknown .wwr__t{padding-left:clamp(24px,3vw,54px)}
/* The tape. Square ends, no radius: a radius on a 10px bar turns each segment
   into a pill and the flush join grows a wedge. */
.wwr__c::after{content:"";position:absolute;left:0;right:0;bottom:0;height:10px}
.wwr__c--known::after{background:var(--navy);transform:scaleX(0);transform-origin:left;
  transition:transform 900ms var(--ease-scrub) 220ms}
.wwr__ledger.is-in .wwr__c--known::after{transform:scaleX(1)}
.wwr__c--unknown::after{box-shadow:inset 0 0 0 1.5px rgba(20,35,63,.3)}

.wwr__close{font-size:18px;line-height:1.62;color:var(--navy);max-width:56ch;margin:0}
/* MEASURED DEFECT, fixed here: the em device inherited navy and rendered as
   plain bold-condensed with no colour shift. The global em rule supplies the
   62% stretch / 800 / italic but takes its colour by inheritance, and setting
   color on .wwr__def overrode it. Named per block so the site's emphasis
   device actually reads as emphasis on this ground. orange-ink, not orange:
   full-strength orange is graphic-only on light grounds. */
.wwr__def em,.wwr__mission em,.wwr__close em{color:var(--orange-ink)}

@media (max-width:760px){
  /* One column. Each sentence keeps its own tape directly beneath it, so the
     filled / empty pairing survives the stack — the correspondence is what the
     graphic means, and it must not break at narrow widths. */
  .wwr__ledger{grid-template-columns:1fr;row-gap:clamp(26px,5vw,38px)}
  .wwr__c--known .wwr__t,.wwr__c--unknown .wwr__t{padding-left:0;padding-right:0}
  .wwr__reg{font-size:12.5px}
}
@media (prefers-reduced-motion:reduce){
  .wwr__h .reveal-line>span{transform:none;transition:none}
  .wwr__c--known::after{transform:scaleX(1);transition:none}
}

/* ==========================================================================
   ABOUT — CENTRED (.p-about). Founder ruling: everything on this page is
   centred. Only the hero was; every section below it was left-anchored.

   Scoped to the page class so index and the other seven pages keep their
   left-anchored composition. Reversible by deleting this block and the
   class on <body>.
   ========================================================================== */
.p-about main :is(h1,h2,p,li){text-align:center}
/* Anything with its own measure has to re-centre that measure too, or it stays
   pinned left and only its text centres inside the old column. */
.p-about main :is(.abt__h,.abt__p,.wwr__mission,.wwr__def,.wwr__close,.brd__intro){margin-inline:auto}
/* The eyebrow carries a 30x2 orange rule before it. Centring the text alone
   leaves the rule hanging at the left edge, so the flow box centres too. */
.p-about main .eyebrow{justify-content:center}
/* The credential plate is inline-block, so it centres from its container. */
.p-about main .wwr__reg{display:block;margin-inline:auto;text-align:center}
/* The ledger keeps its two cells and its continuous tape — only the type
   centres. The asymmetric padding stays: it is what holds the two sentences
   apart across the tape's colour change. */
.p-about main .wwr__t{text-align:center}
/* The creed cells centre inside their own brackets, not across the pair. */
.p-about main :is(.creed__claim,.creed__b){text-align:center;margin-inline:auto}
@media (max-width:760px){
  .p-about main .wwr__t{padding-left:0;padding-right:0}
}

/* ==========================================================================
   THE BOARD — head, registers and the outlined figure. About, 2026-08-10.

   The section read as vague because its four paragraphs were four identical
   blocks: a fact, THE RULE, a history and a closing, all at one size. Each now
   has its own register. No copy changed.

   Existing tokens only. Page is centred by founder ruling, so every device
   here is symmetrical — no left rules, no left-anchored measures.
   ========================================================================== */
.brd__head{position:relative;isolation:isolate}
/* The record sheet. A board is a record of who answers for what. */
.brd__sheet{position:absolute;inset:-18% 0 -10%;z-index:-2;pointer-events:none;
  background:linear-gradient(rgba(20,35,63,.09) 1px,transparent 1px) 0 0/100% 34px,
    linear-gradient(90deg,rgba(20,35,63,.09) 1px,transparent 1px) 0 0/34px 100%;
  -webkit-mask-image:radial-gradient(96% 84% at 50% 46%,#000 16%,transparent 76%);
  mask-image:radial-gradient(96% 84% at 50% 46%,#000 16%,transparent 76%)}
/* OUTLINED, NEVER FILLED — the site's figure device, as texture. It states the
   count and nothing else: no vacancy, no composition, no claim about who the
   eight are. The board exists; only the portraits are unpublished, so a graphic
   reading "seven empty seats" would say the opposite of the copy above it. */
.brd__num{position:absolute;left:50%;top:44%;translate:-50% -50%;z-index:-1;
  pointer-events:none;font-family:var(--font-display);line-height:1;
  font-size:clamp(190px,27vw,420px);letter-spacing:-.03em;
  color:transparent;-webkit-text-stroke:2px rgba(20,35,63,.13);
  opacity:0;scale:.94;transition:opacity 1100ms var(--ease-enter) 120ms,scale 1400ms var(--ease-enter) 120ms}
.brd__head:has(.brd__h.is-in) .brd__num{opacity:1;scale:1}

.brd__h{margin-bottom:clamp(30px,3.4vw,44px)}
.brd__h .reveal-line{display:block;overflow:hidden;padding-bottom:.14em;margin-bottom:-.11em}
.brd__h .reveal-line>span{display:block;transform:translateY(105%);
  transition:transform 820ms var(--ease-enter)}
.brd__h .reveal-line:nth-child(2)>span{transition-delay:90ms}
.brd__h.is-in .reveal-line>span{transform:none}

/* The fact. Quiet, mono, sized like a filing line rather than prose. */
.brd__lede{max-width:44ch;margin:0 auto clamp(30px,3.4vw,46px);
  font-family:var(--font-mono);font-size:13.5px;line-height:1.6;letter-spacing:.04em;
  color:var(--muted-on-mist)}
/* THE RULE. Largest thing after the heading, tightest measure — the double
   negative is the section's whole argument and it was buried at body size. */
.brd__rule{max-width:26ch;margin:0 auto clamp(38px,4.2vw,58px);
  font-size:clamp(23px,2.8vw,35px);font-weight:600;line-height:1.16;
  letter-spacing:-.014em;color:var(--navy);text-wrap:pretty}
.brd__p{max-width:58ch;margin:0 auto clamp(34px,3.8vw,50px);
  font-size:var(--fs-body-lg);line-height:1.62;color:var(--navy);text-wrap:pretty}
/* The closing, held apart by the site's 30x2 orange rule — centred, because the
   page is. Graphic use of --orange on a light ground, which is the only legal
   use of it here. */
.brd__close{position:relative;max-width:50ch;margin:0 auto;padding-top:clamp(30px,3.4vw,44px);
  font-size:var(--fs-body-lg);line-height:1.62;color:var(--navy);text-wrap:pretty}
.brd__close::before{content:"";position:absolute;top:0;left:50%;translate:-50% 0;
  width:30px;height:2px;background:var(--orange)}

@media (prefers-reduced-motion:reduce){
  .brd__h .reveal-line>span{transform:none;transition:none}
  .brd__num{opacity:1;scale:1;transition:none}}

/* ==========================================================================
   THE BOARD SECTION — BRIGHT ON CREAM
   Founder ruling: the whole section had to be noticeable and bright, and a
   dark plate was built for it and REJECTED. It stays on stone.

   SO THE LIGHT IS ORANGE, USED AS GRAPHIC. On a light ground --orange and
   --green-bright are legal as GRAPHIC ONLY and never as text; --orange-ink is
   the text-weight variant. Every bright thing below is therefore a graphic —
   the tape, the stroked figure, the brackets, the wash — and every word on the
   section stays navy or orange-ink. Nothing here recolours a single character.

   Existing tokens only. Appended, reversible in one delete.
   ========================================================================== */

/* THE FIGURE. Was stroked navy at 13% and it read as a watermark. Now --orange,
   still OUTLINED AND NEVER FILLED, and pulled up behind the heading. This is the
   single biggest change in the section: an orange figure at this scale is a
   graphic, which is the one thing orange is allowed to be on cream. */
.brd__num{-webkit-text-stroke:2px rgba(224,122,47,.62);font-size:clamp(210px,30vw,460px)}

/* A warm wash layered into the record sheet — no new element, and the sheet's
   own radial mask keeps it a pool rather than a rectangle. Faint on purpose:
   it lifts the ground, it does not tint the type. */
.brd__sheet{background:
    radial-gradient(52% 60% at 50% 44%,rgba(224,122,47,.22),transparent 74%),
    linear-gradient(rgba(20,35,63,.14) 1px,transparent 1px) 0 0/100% 34px,
    linear-gradient(90deg,rgba(20,35,63,.14) 1px,transparent 1px) 0 0/34px 100%}

/* THE HEAD NEEDS A BOX BEFORE IT CAN BE FRAMED.

   .brd__head had padding:0, so .brd__tape's bottom margin COLLAPSED OUT of it
   and the head ended flush with the bar (head bottom == tape bottom, measured
   exactly). A bracket pinned to bottom:0 then had nowhere to sit and drew 14px
   of itself ON TOP of the tape's last segment -- orange 2px over orange-soft,
   which reads as a smudge on the bar, not as a frame. The top corner had the
   same fault against the eyebrow.

   The padding is the fix, not new bracket offsets: it contains the margin AND
   gives both corners real clearance. Vertical only -- horizontal padding would
   inset the tape from the column edges, and the tape spanning the full column
   is the point of it. The gap under the tape now comes from this padding
   instead of from a margin escaping to .brd__lede. */
.brd__head{padding:clamp(34px,3.9vw,52px) 0 clamp(40px,4.6vw,60px)}

/* Corner brackets: 22px L-shapes, 2px, orange at 50%, opposite corners. Frames
   the head as a readout rather than matting it as art. */
.brd__head::before,.brd__head::after{content:"";position:absolute;
  width:22px;height:22px;opacity:.5;pointer-events:none;z-index:1;
  opacity:0;transition:opacity 700ms var(--ease-enter) 300ms}
.brd__head::before{top:0;left:0;border-top:2px solid var(--orange);border-left:2px solid var(--orange)}
.brd__head::after{bottom:0;right:0;border-bottom:2px solid var(--orange);border-right:2px solid var(--orange)}
.brd__head:has(.brd__h.is-in)::before,.brd__head:has(.brd__h.is-in)::after{opacity:.5}

/* The heading steps up one existing rung, --fs-band rather than --fs-section,
   because it is now the section's anchor rather than one head among four. */
.brd__h{font-size:var(--fs-band);margin-bottom:clamp(26px,3vw,38px)}

/* THE SEAT REGISTER. One continuous 8-segment bar, full shell width, SQUARE —
   no radius, no gaps, no vertical rules. The alternating --orange / --orange-soft
   is the tape device's only permitted divider. 14px rather than the 8px used
   elsewhere: across a full shell an 8px bar reads as a hairline, and this one is
   the section's loud element. Each segment fills from its own left edge on a
   70ms stagger — a board is constituted one seat at a time. */
.brd__tape{position:relative;z-index:2;display:grid;grid-template-columns:repeat(8,1fr);
  height:22px;border-radius:0;overflow:hidden;
  margin:0 auto;max-width:100%}
.brd__tape>span{display:block;height:100%;background:var(--orange);
  transform-origin:0 50%;scale:0 1;transition:scale 620ms var(--ease-enter)}
.brd__tape>span:nth-child(even){background:var(--orange-soft)}
.brd__head:has(.brd__h.is-in) .brd__tape>span{scale:1 1}
.brd__tape>span:nth-child(2){transition-delay:70ms}
.brd__tape>span:nth-child(3){transition-delay:140ms}
.brd__tape>span:nth-child(4){transition-delay:210ms}
.brd__tape>span:nth-child(5){transition-delay:280ms}
.brd__tape>span:nth-child(6){transition-delay:350ms}
.brd__tape>span:nth-child(7){transition-delay:420ms}
.brd__tape>span:nth-child(8){transition-delay:490ms}

/* THE RULE steps up with the heading — it is the section's whole argument and
   it was sized as ordinary emphasis. The paragraph itself stays navy.

   THE em NEEDS ITS COLOUR DECLARED HERE. The base em rule (em,.em) carries the
   TYPOGRAPHY of the device only -- Archivo, font-stretch 62%, weight 800,
   italic -- and never a colour, because the correct colour depends on the
   ground: orange-soft on navy, orange-ink on light. Every other use on the site
   states it per context (.pull__q em, .wwr__def em, and so on). Without this
   line the emphasis rendered navy-on-navy and read as italic only.

   orange-ink #A9501A, NOT --orange. Raw orange measures 2.51:1 on stone -- it
   is GRAPHIC ONLY on light grounds and may never carry a character. orange-ink
   is the text-weight variant that exists for exactly this. */
.brd__rule{font-size:clamp(26px,3.4vw,44px);max-width:24ch}
.brd__rule em{color:var(--orange-ink)}

@media (prefers-reduced-motion:reduce){
  .brd__tape>span{scale:1 1;transition:none}
  .brd__head::before,.brd__head::after{opacity:.5;transition:none}}


/* ==========================================================================
   THE BOARD SECTION — WHY IT STILL SITS QUIET, MEASURED

   Founder: the section blends into the page. The cause is not this section,
   it is the palette. Measured contrast between the light grounds:

       canvas vs stone   1.13
       canvas vs mist    1.19
       stone  vs mist    1.05

   All three are within 1.2 of each other, so NO light ground makes a band
   read as separate. Moving this section to mist was measured and rejected on
   its own terms as well: orange-ink drops to 4.32 there and fails AA, which
   would break the eyebrow and the three emphasised words.

   Ground contrast on this site is therefore navy or navy-deep, and the dark
   plate for this section was built and rejected by ruling. So the separation
   has to come from GRAPHICS, and the block above raises every one of them:
   the figure's stroke, the warm wash, the record grid and the tape's weight.

   A top or bottom border across the section would separate it instantly and
   is NOT done here: bands are the frame on this site and sections never
   separate by borders or floating cards. That is a ruling to change, not a
   value to tune, so it is being reported rather than taken.
   ========================================================================== */

/* ==========================================================================
   THE BLEAD BAND — THE SECOND LINE

   "They fall out at the handoff, and nobody finds out." is the sentence the
   page argues toward. Line one stays white so line two is the one that lights.

   NO RAIL. A 3px orange rule under the line was built and rejected -- the
   founder wants the WORDS bright and bold, not a graphic next to them.

   BRIGHTNESS IS LEGAL HERE AND ALMOST NOWHERE ELSE. The plate is navy-deep,
   where --orange-soft carries text at 9.75:1. Everywhere else on About the
   ground is light, orange is graphic-only, and the brightest a word can be is
   orange-ink at 4.55.

   BOLD, ON A FONT WITH ONE WEIGHT. Anton ships at 400 only, so weight comes
   from -webkit-text-stroke in the type's own colour -- the same primitive the
   site uses for outlined figures, inverted: matched to the fill it thickens
   the glyph instead of hollowing it. That also reads brighter, because more
   lit pixels per letter is the only kind of glow available here.

   NO text-shadow, EVER, ON THIS LINE. .blead__l carries overflow:hidden --
   that clip IS the clip-wipe -- and a shadow cannot escape a clipping
   ancestor; a bloom renders as a hard-edged rectangle sliced to the line box.
   Built, measured and removed once already.

   IT IS A KEYFRAME ANIMATION, NOT A TRANSITION. The span's transition
   property already belongs to the clip-wipe; redeclaring it here would kill
   the wipe silently. The words arrive white with the wipe, then warm to
   orange-soft and thicken as they settle -- the line lighting up after it
   lands, rather than two effects running at once. */
.blead__l+.blead__l{color:var(--orange-soft)}

/* WORD BY WORD. The line used to wipe as one block. Now each word rises out of
   the line box on its own 62ms delay, so the sentence assembles left to right
   -- the site's clip-wipe device applied per word rather than per line.

   The OUTER span therefore stops moving: its transform is the per-line wipe and
   it would double up with the per-word one. Only line two changes; line one
   still wipes as a block, which is what makes the second line read as the one
   being spelled out.

   The line box's own overflow:hidden is what the words rise out of. No extra
   clip, and nothing here casts a shadow, so there is nothing for that clip to
   slice. */
.blead__l+.blead__l>span{transform:none}
.blead__w{display:inline-block;font-style:normal;transform:translateY(108%);
  transition:transform 760ms var(--ease-enter)}
.blead.is-in .blead__l+.blead__l .blead__w{transform:none}
.blead__w:nth-child(2){transition-delay:62ms}
.blead__w:nth-child(3){transition-delay:124ms}
.blead__w:nth-child(4){transition-delay:186ms}
.blead__w:nth-child(5){transition-delay:248ms}
.blead__w:nth-child(6){transition-delay:310ms}
.blead__w:nth-child(7){transition-delay:372ms}
.blead__w:nth-child(8){transition-delay:434ms}
.blead__w:nth-child(9){transition-delay:496ms}
.blead__w:nth-child(10){transition-delay:558ms}
.blead__l+.blead__l>span{-webkit-text-stroke-color:var(--orange-soft);
  -webkit-text-stroke-width:1.1px}
@keyframes blead-warm{
  from{color:var(--on-dark);-webkit-text-stroke-width:0}
  to{color:var(--orange-soft);-webkit-text-stroke-width:1.1px}}
.blead.is-in .blead__l+.blead__l>span{animation:blead-warm 1000ms var(--ease-enter) 1180ms both}

@media (prefers-reduced-motion:reduce){
  .blead.is-in .blead__l+.blead__l>span{animation:none}}

@media (prefers-reduced-motion:reduce){
  .blead__w{transform:none;transition:none}}

/* ==========================================================================
   WHO WE ARE — SPACING RHYTHM

   Founder: too much dead space. Measured, the amount was not the fault; the
   IRREGULARITY was. The gaps between blocks ran 26 / 27 / 46 / 35 / 59 / 41.
   Six different values in one section, so no interval reads as intentional and
   every one of them reads as a hole.

   Now two intervals and nothing else:
       24px  between a block and the one that continues its thought
       32px  before a block that changes register

   The credential, the mission and the definition are one argument, so they sit
   on the tight interval. The ledger changes register -- it stops arguing and
   starts counting -- so it gets the wide one, and so does the close. That is
   the only place a bigger gap now appears, which is what makes it mean
   something.

   SECTION PADDING IS UNTOUCHED at var(--section-y). It is the site's band
   rhythm and it is what separates this section from its neighbours; tightening
   it here would make this band shorter than every other one on the page. The
   space between BLOCKS is the thing that was wrong.
   ========================================================================== */
/* The heading needs ~5px MORE than the others to land on the same visual gap.
   Its last .reveal-line carries margin-bottom:-.11em -- the clip-wipe's own
   compensation for Anton's depth -- which eats into the space below it. Set to
   the shared interval it measured 14 against the others' 18. This is the box
   compensating for the device, not a different interval. */
.wwr__h{margin-bottom:clamp(23px,2.6vw,29px)}
.wwr__reg{margin-bottom:clamp(18px,2vw,24px)}
.wwr__mission{margin-bottom:clamp(18px,2vw,24px)}
.wwr__def{margin-bottom:clamp(24px,2.7vw,32px)}
.wwr__ledger{margin-bottom:clamp(24px,2.7vw,32px)}

/* ==========================================================================
   WHO WE ARE — TIGHTER TOP AND BOTTOM
   Founder: micro whitespace above "Who we are", and under the closing line.

   This tightens the SECTION's own padding, which is normally var(--section-y)
   and shared by every band on the page. That shared value is the site's band
   rhythm, so this section is now deliberately shorter at both ends than its
   neighbours. Stated plainly because it is a real trade: the band separation
   that ground colour cannot supply on a light page came partly from this
   padding, and there is less of it here now.

   Scoped by aria-labelledby so it reaches this section and nothing else -- no
   other band moves, and the rule dies with the section if it is ever removed.

   The internal 18 / 25 rhythm is untouched. This is the space around the
   block, not inside it.
   ========================================================================== */
[aria-labelledby="who-h"]{padding-block:clamp(46px,5.6vw,78px)}

/* ==========================================================================
   THE MISSION LINE — EMPHASIS + MACRO FIELD

   THE em NEEDS ITS COLOUR DECLARED HERE. The base em rule carries the device's
   TYPOGRAPHY only -- Archivo, font-stretch 62%, weight 800, italic -- and never
   a colour, because the right colour depends on the ground: orange-soft on
   navy, orange-ink on light. Every other use on the site states it per context.
   Without this line the emphasis renders navy-on-navy and reads as italic only.

   orange-ink #A9501A measures 4.55:1 on stone. Raw --orange is 2.51 and is
   GRAPHIC ONLY on a light ground -- it may never carry a character.

   MACRO FIELD, ABOVE AND BELOW. The line is the section's thesis, so it is
   lifted out of the 18 / 25 rhythm and stood on its own. The space above comes
   from the credential's margin-bottom and the space below from the line's own,
   so the two are declared together and stay equal.

   This is now the section's ONLY large interval. Everything else keeps the
   tight rhythm -- a macro gap only means something as the exception. */
.wwr__reg{margin-bottom:clamp(58px,7vw,96px)}
.wwr__mission{margin-bottom:clamp(58px,7vw,96px)}

/* ==========================================================================
   ABOUT — THE EMPHASIS WORD IN EVERY TITLE
   Founder: make the titles match the landing page.

   MEASURED FIRST: the fonts already matched exactly. All six titles were
   Anton, uppercase, weight 400, same as index. What index had and About did
   not was the EMPHASIS WORD inside the headline -- "EXPECT", "HIDE" -- so that
   is what was added, not a font change.

   THE em RULE CARRIES TYPOGRAPHY ONLY. The base "em,.em" rule sets the device
   -- Archivo, font-stretch 62%, weight 800, italic -- and never a colour,
   because the correct colour depends on the ground. Declared here per ground,
   the same way index does it.

   orange-ink #A9501A on the light grounds. Raw --orange is GRAPHIC ONLY there.
   orange-soft #F2B183 on the blead plate, which is navy-deep and the one place
   on the page a bright orange may carry a character. */
.display-hero em,.abt__h em{color:var(--orange-ink)}
/* "handoff" now matches LINE ONE, not its own line: the founder's ruling is that
   the word reads as the same voice as "They do not fall out of the system by
   accident." So it takes --on-dark against the orange-soft line, inverting the
   emphasis — the word is the one un-lit thing in a lit sentence. The inherited
   orange text-stroke is zeroed on it too, or the white face would carry an
   orange outline. */
.blead__l em{color:var(--on-dark);-webkit-text-stroke-width:0}

/* ==========================================================================
   05 THE BOARD — THE FILING SPREAD (.bspr)        appended 2026-08-10
   One block, at the end, reversible in one delete. No new token, colour, font,
   radius or type step: --navy, --hairline, --orange, --stone, the 34px record
   grid and the existing eyebrow are all already in the system.

   WHY IT EXISTS. The founder paragraph (58ch) and the closing (50ch) were both
   centred in a 1440 shell. At 1440 that is ~430px of empty stone down each
   side of a 580px ribbon, twice in a row — read as missing content, not as
   deliberate space. The fix is layout and rules, NOT more elements: the two
   paragraphs are a history and a verdict, so they are ranked and set side by
   side across the full shell.

   THE 2px NAVY RULE over the spread and the 1px hairline between the columns
   are the site's own devices (01's docket rule, the ledger seams). Hard edges,
   no card, no radius, no shadow, no box — a spread is a page, not a panel.

   MOTION. Everything here is keyed to the .rv/.is-in observer the page already
   runs (motion.js §4) — no new engine, no new keyframes, nothing on a clock.
   The top rule draws left to right, the column hairline draws top to bottom
   after it, then the two columns rise. Compositor-only (transform), and the
   reduced-motion guard at the bottom settles all three instantly.
   ========================================================================== */
.bspr{position:relative;isolation:isolate;display:grid;
  grid-template-columns:1.12fr .88fr;gap:clamp(24px,3.4vw,60px);align-items:start;
  margin-top:clamp(46px,5.2vw,78px);padding:clamp(28px,3.2vw,44px) 0 clamp(30px,3.4vw,48px)}
/* The rule is a pseudo-element rather than a border so it can draw. */
.bspr::before{content:"";position:absolute;top:0;left:0;right:0;height:2px;
  background:var(--navy);transform:scaleX(0);transform-origin:0 50%;
  transition:transform 760ms var(--ease-scrub)}
.bspr.is-in::before{transform:scaleX(1)}
/* The record sheet, pooled — same 34px grid and radial mask as .brd__sheet, at
   a lower alpha because type sits directly on it here. */
.bspr__sheet{position:absolute;inset:2px -1.5% -8%;z-index:-1;pointer-events:none;
  background:linear-gradient(rgba(20,35,63,.075) 1px,transparent 1px) 0 0/100% 34px,
    linear-gradient(90deg,rgba(20,35,63,.075) 1px,transparent 1px) 0 0/34px 100%;
  -webkit-mask-image:radial-gradient(94% 80% at 40% 38%,#000 0 30%,transparent 76%);
  mask-image:radial-gradient(94% 80% at 40% 38%,#000 0 30%,transparent 76%)}
.bspr__col{position:relative;opacity:0;transform:translateY(16px);
  transition:opacity 700ms var(--ease-enter) 180ms,transform 700ms var(--ease-enter) 180ms}
.bspr__col+.bspr__col{transition-delay:320ms}
.bspr.is-in .bspr__col{opacity:1;transform:none}
/* The verdict column, across a hairline. The rule draws with the spread. */
.bspr__col--v{padding-left:clamp(20px,2.6vw,46px)}
.bspr__col--v::before{content:"";position:absolute;left:0;top:6px;bottom:6px;width:1px;
  background:var(--hairline);transform:scaleY(0);transform-origin:50% 0;
  transition:transform 700ms var(--ease-enter) 300ms}
.bspr.is-in .bspr__col--v::before{transform:scaleY(1)}
/* Both paragraphs are LEFT-set now and take their column's measure, so their
   centring margins and the centred orange rule on .brd__close have to go. The
   rule stays — it is the closing's marker — pinned to the column's left edge. */
.bspr .brd__p,.bspr .brd__close{margin:clamp(16px,1.8vw,22px) 0 0;max-width:46ch}
.bspr .brd__close{padding-top:0}
.bspr .brd__close::before{left:0;translate:0 0;position:relative;display:block;
  margin-bottom:clamp(14px,1.6vw,20px)}
/* LEFT-SET, EXPLICITLY. about.html carries a page-wide centring rule —
   `.p-about main :is(h1,h2,p,li){text-align:center}` (0,2,3) plus
   `.p-about main .eyebrow{justify-content:center}` — which beats `.bspr .brd__p`
   (0,2,0) on specificity. Without these two lines the spread renders as two
   ragged-centred ribbons with the orange marker pinned to the column edge: the
   exact defect the spread exists to remove. Stated here rather than by editing
   the page rule, so this block stays reversible in one delete. */
.bspr,.bspr .brd__p,.bspr .brd__close,.bspr .eyebrow{text-align:left}
/* The justify-content half of that fix needs the page prefix to win: the rule it
   is beating is `.p-about main .eyebrow` at (0,2,1), so `.bspr .eyebrow` (0,2,0)
   lost and the kickers kept floating centred over flush-left copy. */
.p-about main .bspr .eyebrow{justify-content:flex-start}
/* Both columns' first baseline lands on the same line: the closing's orange rule
   is a block in the flow now, so it replaces the gap under the eyebrow instead
   of adding to it. */
.bspr .brd__close::before{margin-top:0}
/* THE RULE OVER THE SPREAD IS GONE (founder ruling 2026-08-10) — the two
   columns stand on their own space. The pseudo-element stays declared so the
   block is still one delete; only its content is dropped. */
.bspr::before{content:none}
.bspr{padding-top:0}
/* MICRO WHITESPACE UNDER THE LABEL (founder ruling 2026-08-10). The eyebrows
   sat 26px + 22px = ~48px off their own paragraphs, which read as two separate
   blocks instead of a label and the thing it labels. Tightened to a micro gap so
   each kicker sits ON its paragraph. The macro spacing in this section stays
   where it is — around the rule and above the rail. */
.bspr .sec__head{margin-bottom:10px}
.bspr .brd__p,.bspr .bspr__col--v .brd__close{margin-top:0}
/* ONE ORANGE MARK PER COLUMN. The closing paragraph carries its own 30x2 marker
   from .brd__close, and in this spread its column already has an eyebrow with
   the same mark — two marks, one above the other, read as a defect. The
   paragraph's own marker is dropped; the kicker's is the one that stays. */
.bspr .brd__close::before{content:none}

/* ==========================================================================
   05 THE BOARD — "THE BOARD" AS A PLATE          appended 2026-08-10
   Founder ruling: the board of directors is the governance of this nonprofit
   and its label was a 13px eyebrow. It is now the section's second loud
   element, and the ONLY way to make it genuinely BRIGHT is to change the
   ground under it: --orange and --orange-soft are graphic-only on stone and may
   never carry a character there. On a --navy-deep plate orange-soft measures
   8.9:1 and is legal as text — so the label gets its own dark plate, which is
   the same move 03 The Glass makes with its wordmark.

   No new token, font or device: navy-deep plate, Anton uppercase, orange-soft
   type, the site's 30x2 orange bar mirrored to both sides, and the warm glow
   that is already legal on navy grounds. text-shadow is safe here because
   nothing in this block clips (the reason it is banned on .blead__l).

   It stays a full step under the heading — clamp to 46px against the head's
   --fs-band 84px — so the section still has ONE loudest thing. The plate
   scales in with its own reveal; the two bars draw outward after it. */
.brd__head .sec__head{position:relative;z-index:3;
  display:flex;width:max-content;max-width:100%;align-items:center;
  gap:clamp(12px,1.5vw,22px);margin:0 auto clamp(26px,3vw,40px);
  padding:clamp(11px,1.2vw,17px) clamp(18px,2.2vw,34px);
  background:var(--navy-deep);
  font-family:var(--font-display);font-weight:400;text-transform:uppercase;
  font-size:clamp(24px,3.1vw,46px);line-height:1;letter-spacing:.03em;
  color:var(--orange-soft);
  text-shadow:0 0 32px rgba(224,122,47,.5),0 0 78px rgba(224,122,47,.24);
  transform:scale(.94);transition:opacity 640ms var(--ease-enter),transform 760ms var(--ease-enter)}
.brd__head .sec__head.is-in{transform:none}
/* The 30x2 bar, mirrored — a register mark either side of the words. Raw
   --orange is legal here: it is a GRAPHIC, and the ground is navy-deep. */
.brd__head .sec__head::before,.brd__head .sec__head::after{content:"";flex:none;
  width:clamp(22px,2.4vw,40px);height:3px;background:var(--orange);
  transform:scaleX(0);transition:transform 520ms var(--ease-scrub) 420ms}
.brd__head .sec__head::before{transform-origin:100% 50%}
.brd__head .sec__head::after{transform-origin:0 50%}
.brd__head .sec__head.is-in::before,.brd__head .sec__head.is-in::after{transform:scaleX(1)}
/* --- PLATE REMOVED, STREAKS ADDED (founder ruling 2026-08-10) -------------
   The navy-deep plate is gone: the label sits directly on the stone ground with
   no background. That changes what colours are legal again — orange-soft cannot
   carry a character on stone (2.4:1) — so the words are now NAVY with the shine
   cut through them in orange-ink #A9501A, the text-weight variant. Both pass on
   stone at this size (Anton 24-46px is large text, 3:1 floor; navy is 12.4:1 and
   orange-ink 4.6:1).

   THE SHINE IS THE FILL, NOT A LAYER. A gradient runs through the glyphs via
   background-clip:text — two bright streaks raked at 104deg travelling left to
   right, 5.5s, and the base of the gradient is navy so the letters read as navy
   type with light passing over them rather than as coloured type. Nothing is
   overlaid, so nothing can wash out the words.

   @supports guards it: where background-clip:text is unavailable the label stays
   solid navy and loses only the shine. The glow is gone with the plate — a bloom
   on a light ground is a smudge, not brightness. */
.brd__head .sec__head{background:none;padding:0;text-shadow:none;
  color:var(--navy);overflow:visible}
@supports ((-webkit-background-clip:text) or (background-clip:text)){
  .brd__head .sec__head{
    background-image:linear-gradient(104deg,
      var(--navy) 0 30%,var(--orange-ink) 38%,#D98A3E 42%,var(--orange-ink) 46%,
      var(--navy) 54% 72%,var(--orange-ink) 79%,#D98A3E 82%,var(--orange-ink) 85%,
      var(--navy) 92% 100%);
    /* TILED, NOT no-repeat. With no-repeat any part of the box the gradient
       image does not cover gets NO paint, and glyphs clipped to it are fully
       transparent — measured: 58px of this 182px label was invisible at rest,
       and most of it blanked out near the end of every cycle, because the
       animated background-position resolves OUTSIDE the image. Tiling paints
       every glyph at every position, and the seam is invisible because the
       gradient both starts and ends on --navy. */
    background-size:260% 100%;background-repeat:repeat;background-position:120% 0;
    -webkit-background-clip:text;background-clip:text;
    color:transparent;-webkit-text-fill-color:transparent}
  .brd__head .sec__head.is-in{animation:brd-shine 5.5s linear 700ms infinite}
}
@keyframes brd-shine{from{background-position:120% 0}to{background-position:-60% 0}}

/* MACRO WHITESPACE AROUND THE RULE (founder ruling 2026-08-10). The section's
   whole argument now stands alone: the same clamp the site uses for SECTION
   padding — clamp(80px,10vw,160px) — above it and below it, so it is separated
   from the seat register above and the spread below by a full section's worth of
   air rather than by a paragraph gap. The space IS the emphasis; nothing was
   added to fill it and nothing about the sentence changed. */
.brd__rule{margin-top:clamp(80px,10vw,160px);margin-bottom:clamp(80px,10vw,160px)}

/* ==========================================================================
   05 THE BOARD — THE RAIL TITLE (.brd__rt)        appended 2026-08-10
   The portraits had no heading. This is an H3 under the section's H2, in the
   display face at --fs-section, over the site's 2px navy rule, with the same
   raked shine the section label carries — one device, used twice in one
   section, rather than a second idea. Navy base, orange-ink streaks: the only
   two colours legal for type on stone at this size.
   ========================================================================== */
.brd__rt{position:relative;margin:clamp(80px,10vw,160px) 0 0;padding-top:0;
  font-family:var(--font-display);font-weight:400;text-transform:uppercase;
  font-size:var(--fs-section);line-height:.94;letter-spacing:-.018em;color:var(--navy);
  /* Centred explicitly: the page-wide centring rule covers h1, h2, p and li —
     an h3 is not in that list, so it would otherwise sit left of a rule that
     draws from the centre. */
  text-align:center}
/* THE RULE ABOVE THE TITLE IS GONE (founder ruling 2026-08-10). The 2px navy
   line closed the spread and the title off from each other; the macro space
   above the title does that job on its own. */
.brd__rt::before{content:none}
.brd__rt .reveal-line{display:block;overflow:hidden;padding-bottom:.14em;margin-bottom:-.11em}
.brd__rt .reveal-line>span{display:block;transform:translateY(105%);
  transition:transform 820ms var(--ease-enter) 120ms}
.brd__rt.is-in .reveal-line>span{transform:none}
@supports ((-webkit-background-clip:text) or (background-clip:text)){
  .brd__rt .reveal-line>span{
    background-image:linear-gradient(104deg,
      var(--navy) 0 34%,var(--orange-ink) 41%,#D98A3E 45%,var(--orange-ink) 49%,
      var(--navy) 58% 100%);
    /* Tiled, for the reason written on the label above. */
    background-size:240% 100%;background-repeat:repeat;background-position:130% 0;
    -webkit-background-clip:text;background-clip:text;
    color:transparent;-webkit-text-fill-color:transparent}
  .brd__rt.is-in .reveal-line>span{animation:brd-shine 6.5s linear 900ms infinite}
}
@media (prefers-reduced-motion:reduce){
  .brd__rt .reveal-line>span{transform:none;transition:none;animation:none;background-position:46% 0}
}
@media (prefers-reduced-motion:reduce){
  .brd__head .sec__head.is-in{animation:none}
  .brd__head .sec__head{background-position:44% 0;transform:none}
  .brd__head .sec__head::before,.brd__head .sec__head::after{transform:none;transition:none}
}
@media (max-width:900px){
  .bspr{grid-template-columns:1fr;gap:clamp(26px,4vw,40px)}
  .bspr__col--v{padding-left:0;padding-top:clamp(24px,3.4vw,34px)}
  .bspr__col--v::before{left:0;right:0;top:0;bottom:auto;width:auto;height:1px;
    transform:scaleX(0);transform-origin:0 50%}
  .bspr.is-in .bspr__col--v::before{transform:scaleX(1)}
  .bspr .brd__p,.bspr .brd__close{max-width:60ch}
}
@media (prefers-reduced-motion:reduce){
  .bspr::before,.bspr__col--v::before{transform:none;transition:none}
  .bspr__col{opacity:1;transform:none;transition:none}
}


/* ==========================================================================
   LAUNCH PLATE — ALERT TREATMENT (.lnch--alert additions)
   Appended block. Reversible in one delete; edits nothing above.

   Founder override on record: the season and the North Bay wording ship as
   written. Both conflict with the no-dates and Vallejo-only rules and were
   flagged before this pass; keeping them was the founder's call.

   Two jobs. (1) The status kicker is scaled up and its live dot is rebuilt as
   a lit lamp — a specular radial core, a breathing halo, and one expanding
   ring on a 2.6s clock. (2) The season carries --orange-ink (#A9501A, 5.2:1
   on cream) so it reads as an alert, with a white light stream crossing it
   left to right.

   The stream is a SECOND layer, not a recolour of the glyphs: .lnch__sh::after
   repeats the word from data-t and clips a narrow white band to the letter
   shapes. The base word underneath stays fully opaque orange-ink at all times,
   so no frame of the animation ever drops the text below contrast — a
   background-clip shimmer on the word itself would make the letters vanish as
   the white core passed over them on a cream ground.

   Both animations are paused until .is-in, so nothing runs off-screen, and
   both are switched off entirely under prefers-reduced-motion.
   ========================================================================== */
.lnch__k{font-size:13px;letter-spacing:.18em;gap:13px;padding-top:20px;font-weight:500}
.lnch__k::before{width:clamp(220px,30vw,400px)}
.lnch__k i{width:12px;height:12px;
  background:radial-gradient(circle at 34% 30%,#BFFFDE 0,var(--green-bright) 42%,var(--green) 100%);
  box-shadow:0 0 0 4px rgba(46,125,91,.16),0 0 12px 2px rgba(63,191,132,.55);
  position:relative;animation:lnch-lamp 2.6s ease-in-out infinite;animation-play-state:paused}
.lnch__k i::after{content:"";position:absolute;inset:0;border-radius:50%;
  border:1px solid var(--green-bright);
  animation:lnch-ring 2.6s var(--ease-enter) infinite;animation-play-state:paused}
.lnch.is-in .lnch__k i,.lnch.is-in .lnch__k i::after{animation-play-state:running}
@keyframes lnch-lamp{
  0%,100%{box-shadow:0 0 0 4px rgba(46,125,91,.16),0 0 10px 1px rgba(63,191,132,.45);transform:scale(1)}
  50%{box-shadow:0 0 0 6px rgba(46,125,91,.2),0 0 22px 5px rgba(63,191,132,.9);transform:scale(1.14)}}
@keyframes lnch-ring{
  0%{transform:scale(1);opacity:.75}
  70%,100%{transform:scale(2.9);opacity:0}}
@media (max-width:640px){.lnch__k{font-size:11.5px;letter-spacing:.13em}}

/* The season carries orange-ink and is cut in relief: a 30deg extrusion in the
   site's own device (same axis as .closer and .cap), lit from the top-left so
   the face reads as raised metal rather than flat type. The extrusion is
   graphic only — the word itself is orange-ink at full opacity. */
.lnch__d--alert{color:var(--orange-ink);
  text-shadow:
    -1px -1px 0 rgba(255,244,232,.55),
    1px .6px 0 rgba(120,52,12,.34),2px 1.2px 0 rgba(120,52,12,.3),
    3px 1.8px 0 rgba(120,52,12,.26),4px 2.4px 0 rgba(120,52,12,.22),
    5px 3px 0 rgba(120,52,12,.18),6px 3.6px 0 rgba(120,52,12,.14),
    7px 4.2px 0 rgba(120,52,12,.1),8px 4.8px 14px rgba(120,52,12,.22)}
.lnch__sh{position:relative;display:block}
/* The streak. Broad, not a hairline: the white band spans about a third of the
   sweep width so it crosses two or three letters at once and reads as a sheet
   of light passing over relief, not a scanline. Warm shoulders on both sides
   (orange-soft) keep it from looking like a blown-out gap on cream.
   9.5s clock: 55% of it is the traverse, the remaining 45% is rest off the
   right edge, so it passes roughly every nine seconds instead of strobing. */
.lnch__sh::after{content:attr(data-t);position:absolute;inset:0;pointer-events:none;
  background-image:linear-gradient(105deg,
    rgba(255,255,255,0) 22%,rgba(242,177,131,.45) 33%,rgba(255,255,255,.8) 42%,
    #FFFFFF 50%,rgba(255,255,255,.8) 58%,rgba(242,177,131,.45) 67%,
    rgba(255,255,255,0) 78%);
  background-size:320% 100%;background-repeat:no-repeat;background-position:190% 0;
  -webkit-background-clip:text;background-clip:text;color:transparent;
  filter:drop-shadow(0 0 22px rgba(255,255,255,.95)) drop-shadow(0 0 7px rgba(242,177,131,.9));
  animation:lnch-stream 9.5s cubic-bezier(.4,0,.35,1) infinite;animation-play-state:paused}
.lnch.is-in .lnch__sh::after{animation-play-state:running}
@keyframes lnch-stream{0%{background-position:190% 0}55%,100%{background-position:-120% 0}}
.lnch--alert .lnch__bar,.lnch__d--alert ~ .lnch__bar{box-shadow:0 0 26px -6px rgba(224,122,47,.85)}
@media (prefers-reduced-motion:reduce){
  .lnch__k i,.lnch__k i::after,.lnch__sh::after{animation:none}
  .lnch__sh::after{opacity:0}}


/* ==========================================================================
   THE CLOSER — MACRO AIR (appended block, reversible in one delete)

   Founder ruling: the closing monument gets macro whitespace above and below.
   The existing rule sets margin-top clamp(64px,8vw,120px) and no bottom space
   at all, so the line sat close under the launch plate and ran straight into
   the section edge.

   The gap ABOVE is clamp(140px,17vw,260px) — wider than the launch plate's
   own clamp(90px,11vw,170px), which makes it the largest piece of air on the
   page. The gap BELOW is deliberately MICRO, clamp(16px,1.6vw,24px): the
   founder's ruling is macro above, micro below, so the line reads as the end
   of the section rather than as something with more to come after it. Do not
   symmetrise these two — the asymmetry is the point.
   ========================================================================== */
.closer{margin-top:clamp(140px,17vw,260px);margin-bottom:clamp(16px,1.6vw,24px)}
@media (max-width:640px){.closer{margin-top:clamp(96px,22vw,150px);margin-bottom:14px}}


/* ==========================================================================
   LAUNCH PLATE — RELIEF + LIGHT STREAM (appended block, reversible in one delete)
   Edits nothing above it; deleting this block restores the previous pass.

   Founder ruling: the season was sitting on a visible peach plate. It must sit
   on the page's own cream ground, cut in relief, with one sheet of light
   travelling across it from left to right.

   1. NO PAINTED GROUND. The previous pass clipped a gradient BACKGROUND to the
      glyphs. Wherever background-clip:text is not honoured — an older engine, a
      capture or print pass, a filter forcing a raster fallback — that gradient
      paints as a full RECTANGLE behind the word, which is the plate the founder
      saw. The streak is now a MASKED TEXT layer: the overlay paints glyphs and
      nothing else, so no code path can produce a box. The 22px white
      drop-shadow goes with it — on cream it read as a cloud, not as light.

   2. DEEPER RELIEF. The face stays orange-ink at full opacity. A cream light
      line sits on the top-left edge, a nine-step 30deg extrusion falls away to
      the bottom-right darkening with depth, and one soft contact shadow sets it
      on the ground. Light comes from the top-left, the same axis as every other
      extrusion on the page.

   The stream is graphic only: it never carries a word and the base word is
   fully legible at every frame of the 9.5s clock. Off under reduced motion.
   ========================================================================== */
.lnch__d--alert{color:var(--orange-ink);
  text-shadow:
    -1px -1px 0 rgba(255,250,243,.9),-1.6px -1px 0 rgba(255,250,243,.5),
    1px .6px 0 rgba(120,52,12,.55),2px 1.2px 0 rgba(116,50,11,.5),
    3px 1.8px 0 rgba(110,47,10,.45),4px 2.4px 0 rgba(104,44,10,.4),
    5px 3px 0 rgba(97,41,9,.34),6px 3.6px 0 rgba(90,38,8,.28),
    7px 4.2px 0 rgba(83,35,7,.22),8px 4.8px 0 rgba(76,32,6,.16),
    11px 7px 20px rgba(120,52,12,.24)}
.lnch__sh::after{
  background-image:none;background:none;-webkit-background-clip:border-box;background-clip:border-box;
  color:#FFF9F1;filter:none;
  text-shadow:0 0 12px rgba(255,255,255,.6),0 0 26px rgba(242,177,131,.55),0 1px 0 rgba(255,255,255,.7);
  -webkit-mask-image:linear-gradient(105deg,transparent 41%,rgba(0,0,0,.3) 46%,rgba(0,0,0,.9) 49%,#000 50%,rgba(0,0,0,.9) 51%,rgba(0,0,0,.3) 54%,transparent 59%);
  mask-image:linear-gradient(105deg,transparent 41%,rgba(0,0,0,.3) 46%,rgba(0,0,0,.9) 49%,#000 50%,rgba(0,0,0,.9) 51%,rgba(0,0,0,.3) 54%,transparent 59%);
  -webkit-mask-size:300% 100%;mask-size:300% 100%;
  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;
  -webkit-mask-position:165% 0;mask-position:165% 0;
  opacity:0;
  animation:lnch-stream-mask 4s cubic-bezier(.42,.06,.42,1) infinite;animation-play-state:paused}
/* The light layer is a solid white word held back by the mask. Where masking is
   not supported it would paint over the whole word, so it stays at opacity 0
   until support is proven — the failure mode is no shine, never a white word. */
@supports ((-webkit-mask-image:linear-gradient(#000,#000)) or (mask-image:linear-gradient(#000,#000))){
  .lnch__sh::after{opacity:1}}
/* p decreasing moves the lit band from the left edge to the right edge. Founder
   ruling: the streak passes every 4s and the travel itself is SLOW. 94% of the
   clock is the traverse (~3.8s edge to edge) with only a beat of rest off the
   right edge — the interval is held at 4s by spending it on the crossing, not
   on the pause. The band is narrow — ~18% of the sweep — so it crosses one or
   two letters at a time and the word stays orange-ink relief at every frame. */
@keyframes lnch-stream-mask{
  0%{-webkit-mask-position:165% 0;mask-position:165% 0}
  94%,100%{-webkit-mask-position:-65% 0;mask-position:-65% 0}}
@media (prefers-reduced-motion:reduce){.lnch__sh::after{animation:none;opacity:0}}
/* The clip-wipe line is overflow:hidden, so it was cutting the relief off at its
   own box edge: the final L lost its 11px right-hand extrusion and its contact
   shadow, which is why FALL read as sliced. The line now carries horizontal and
   bottom padding to clear the deepest shadow step, cancelled by equal negative
   margin so the centring and the vertical rhythm are unchanged. The wipe start
   moves to 155% because the clip box is now taller than the glyphs \u2014 at 105%
   the word would peek below the mask before entry. */
.lnch__d--alert .lnch__line{padding:.06em 34px .2em;margin:0 -34px -.2em}
.lnch__d--alert .lnch__line>span{transform:translateY(155%)}
.lnch.is-in .lnch__d--alert .lnch__line>span{transform:none}
@media (prefers-reduced-motion:reduce){.lnch__d--alert .lnch__line>span{transform:none}}


/* ==========================================================================
   CLOSER — RECORD GROUND (appended block, reversible in one delete)

   Founder ruling: the closing monument needed a graphic behind it. The rule it
   must not break is that nothing solid may sit behind the words, so this is a
   MASKED GROUND, not a panel: an ellipse mask removes it completely behind the
   type and fades it out at every edge, exactly the device the pull band uses.
   Nothing here is invented — record sheet, survey scan and corner brackets are
   all existing signature devices.

   Three layers, all pointer-events none, all behind the type on z-index -1:
   1. RECORD SHEET  34px hairline grid, navy at .13, drifting one cell over 52s.
      The closer IS the verdict on a record, so the record is the ground.
   2. SURVEY SCAN   one orange hairline descending the block every 6.5s with a
      warm core. It is the only lit element and it never touches a word.
   3. BRACKETS      22px L-shapes at opposite corners, 2px orange at .5 — frames
      the block as a readout rather than matting it as art.

   Motion is paused until .closer.is-in and off entirely under reduced motion.
   ========================================================================== */
.closer{position:relative;isolation:isolate}
.clbg{position:absolute;z-index:-1;left:50%;top:50%;transform:translate(-50%,-50%);
  width:min(1360px,106vw);height:calc(100% + clamp(110px,14vw,220px));
  pointer-events:none;overflow:hidden;
  -webkit-mask-image:radial-gradient(ellipse 58% 50% at 50% 50%,transparent 0 40%,rgba(0,0,0,.85) 70%,#000 80%,transparent 100%);
  mask-image:radial-gradient(ellipse 58% 50% at 50% 50%,transparent 0 40%,rgba(0,0,0,.85) 70%,#000 80%,transparent 100%)}
.clbg__grid{position:absolute;inset:-40px;
  background-image:
    repeating-linear-gradient(90deg,rgba(20,35,63,.13) 0 1px,transparent 1px 34px),
    repeating-linear-gradient(0deg,rgba(20,35,63,.13) 0 1px,transparent 1px 34px);
  animation:clbg-drift 52s linear infinite;animation-play-state:paused}
@keyframes clbg-drift{to{transform:translate3d(-34px,-34px,0)}}
/* The scan is a gradient band moved by background-position — no element travels,
   so it cannot overflow the block or force a repaint of the grid. */
.clbg__scan{position:absolute;inset:0;
  background-image:linear-gradient(180deg,
    transparent 45%,rgba(224,122,47,.22) 48%,rgba(224,122,47,.8) 49.6%,
    rgba(255,226,192,.95) 50%,rgba(224,122,47,.8) 50.4%,rgba(224,122,47,.22) 52%,transparent 55%);
  background-size:100% 260%;background-repeat:no-repeat;background-position:0 -70%;
  animation:clbg-scan 6.5s cubic-bezier(.45,0,.5,1) infinite;animation-play-state:paused}
@keyframes clbg-scan{0%{background-position:0 -70%;opacity:0}
  10%{opacity:1}80%{opacity:1}100%{background-position:0 170%;opacity:0}}
.closer.is-in .clbg__grid,.closer.is-in .clbg__scan{animation-play-state:running}
.clbk{position:absolute;z-index:-1;width:22px;height:22px;pointer-events:none;
  border-left:2px solid rgba(224,122,47,.5);border-top:2px solid rgba(224,122,47,.5);
  left:clamp(4px,3vw,54px);top:-16px;opacity:0;transition:opacity 700ms var(--ease-enter) 520ms}
.clbk--b{left:auto;right:clamp(4px,3vw,54px);top:auto;bottom:-16px;
  border-left:0;border-top:0;
  border-right:2px solid rgba(224,122,47,.5);border-bottom:2px solid rgba(224,122,47,.5);
  transition-delay:660ms}
.closer.is-in .clbk{opacity:1}
@media (max-width:640px){
  .clbg{width:112vw;height:calc(100% + 80px)}
  .clbg__grid{background-size:auto}
  .clbk{width:16px;height:16px;top:-10px}
  .clbk--b{bottom:-10px}}
@media (prefers-reduced-motion:reduce){
  .clbg__grid{animation:none}
  .clbg__scan{animation:none;opacity:0}
  .clbk{transition:none;opacity:1}}


/* ==========================================================================
   SITEWIDE RUNNING TEXT (appended block, reversible in one delete)

   Founder ruling: the running-text face used on the About page goes on every
   page. Space Grotesk was already live there, scoped to body.p-about; that
   scope is removed and the face is declared once, here, for the whole site.

   It is applied by REDECLARING --font-body — the single lever the stylesheet
   already uses for every piece of running text (12 call sites, and no rule
   anywhere hard-codes Archivo except the two @font-face declarations). So
   nothing is restyled element by element: every headline stays Anton, every
   mono kicker and docket line stays mono, the header keeps its command face,
   and only what was already set in the body face changes.

   ONE carve-out, and it is structural, not taste: em / .em is the site's
   orange emphasis device, which is Archivo at font-stretch 62%, weight 800,
   italic. Space Grotesk has neither a width axis nor a true italic, so those
   words keep Archivo or the device dies. Archivo stays loaded and self-hosted
   for exactly that reason — do not remove its @font-face rules.

   The .btn carve-out from the About-only pass is deliberately NOT carried
   over: it existed so that page's buttons matched the rest of the site, and
   now the rest of the site is this face.
   ========================================================================== */
:root{--font-body:"Space Grotesk","Archivo",system-ui,-apple-system,"Segoe UI",sans-serif}
em,.em{font-family:"Archivo",system-ui,-apple-system,"Segoe UI",sans-serif}


/* ==========================================================================
   01 THE CRISIS — "EXPENSIVE" TAKES THE EMPHASIS COLOUR
   (appended block, reversible in one delete)

   Founder ruling: the word needs a different colour. It was navy, the same as
   the rest of the claim — the em device was carrying weight and italic but no
   colour here.

   The colour is ORANGE-INK #A9501A, not --orange. On this cream ground
   (#FBF8F3) orange-ink measures about 5.1:1 and passes as body text; plain
   --orange measures about 3.0:1 and is GRAPHIC ONLY on light grounds. Do not
   swap it back to --orange because it looks brighter — it fails.

   The word keeps Archivo at font-stretch 62% / 800 / italic: that IS the
   emphasis device, and this rule changes nothing but the colour.
   ========================================================================== */
.crisis__h em{color:var(--orange-ink)}


/* ==========================================================================
   PULL QUOTE — "A DATA DESERT." BREATHES (appended block, reversible in one delete)

   Founder question: shiny streak or pulsing glow. PULSE, for three reasons.
   1. The streak is already this page's device — it runs on LATE FALL. Using it
      twice spends the same boldness twice and neither moment stays loud.
   2. A streak reads as light crossing RELIEF. LATE FALL is extruded type on
      cream and has edges to catch the light. This phrase is flat lit type on
      navy; a streak would have nothing to travel over.
   3. The phrase already carries a warm glow. The pulse is that glow breathing,
      so it amplifies what is there instead of adding a fourth device — and on
      a line quoting a state auditor, a moving streak reads decorative while a
      slow ember reads like something still burning.

   COLOUR DOES NOT MOVE. --orange-soft on navy is the measured pass (8.9:1) and
   only the shadow alphas animate, so the phrase can never dim below it. 5.6s,
   symmetric ease, paused until the band is in view, off under reduced motion.
   ========================================================================== */
.pull__q em{animation:pull-ember 5.6s ease-in-out infinite;animation-play-state:paused}
.pull.is-in .pull__q em{animation-play-state:running}
@keyframes pull-ember{
  0%,100%{text-shadow:0 0 34px rgba(224,122,47,.3),0 0 78px rgba(224,122,47,.14)}
  50%{text-shadow:0 0 52px rgba(242,177,131,.66),0 0 120px rgba(224,122,47,.34),0 0 190px rgba(224,122,47,.16)}}
@media (prefers-reduced-motion:reduce){
  .pull__q em{animation:none;text-shadow:0 0 42px rgba(224,122,47,.42),0 0 96px rgba(224,122,47,.2)}}


/* ==========================================================================
   THE DATA DESERT — TWO WORDS TAKE THE EMPHASIS COLOUR
   (appended block, reversible in one delete)

   Founder ruling: "never" in the headline and the $9.4B figure each need a
   different colour. Both were navy on the cream ground, same as everything
   around them.

   ORANGE-INK #A9501A, not --orange: on this ground (#FBF8F3) orange-ink
   measures about 5.1:1 and passes as text, while --orange measures about
   3.0:1 and is GRAPHIC ONLY on light grounds. Do not brighten it.

   Only the SECOND figure changes. $24B and 2021 stay navy on purpose — if all
   three were coloured, none of them would be the one being pointed at.
   "never" keeps Archivo 62% italic; this changes its colour and nothing else.
   ========================================================================== */
.dsrt__hl em{color:var(--orange-ink)}
.fstage__figs>div:nth-child(2)>b{color:var(--orange-ink)}


/* ==========================================================================
   THE DATA DESERT CLOSER — "FIX" MATCHES "NEVER"
   (appended block, reversible in one delete)

   Founder ruling: "fix" takes the same treatment as "never" — same device,
   different colour from the words around it. The word is now wrapped in the
   site's em, so it picks up Archivo at font-stretch 62% / 800 / italic, and
   the colour is stated here because the em device deliberately carries no
   colour of its own (the correct one depends on the ground).

   Ground is cream, so it is ORANGE-INK, the same emphasis colour "never" and
   "expensive" carry. One emphasis colour per page, not three.
   ========================================================================== */
.dsrt__closer em{color:var(--orange-ink)}


/* ==========================================================================
   THE FIGURES IN RELIEF (appended block, reversible in one delete)

   Founder ruling: the headline figures in three sections read in 3D. The
   device is the site's existing 30deg extrusion — the same axis as LATE FALL,
   the closer and the isometric fields — not a new effect: light from the
   top-left, a nine-step extrusion falling to the bottom-right and darkening
   with depth, then one soft contact shadow to set the figure on its ground.

   THREE GROUNDS, THREE RECIPES. An extrusion colour that reads on cream is
   invisible on navy-deep, so each set is built against its ACTUAL ground:
     .rcpt__fig      navy on cream        — navy extrusion, cream light line
     .fstage__figs b navy on cream, and the middle figure orange-ink, which
                     gets a burnt-brown extrusion instead — a navy shadow under
                     an orange figure reads as a printing error
     .gpv__v         white on navy-deep   — near-black extrusion, no light line
                     (a light line on white type is invisible) and a faint cool
                     halo doing the contact-shadow job instead

   TEXT COLOUR DOES NOT CHANGE ANYWHERE HERE, so every measured contrast ratio
   on this page still stands. The extrusion is graphic only.

   ZERO IS EXCLUDED ON PURPOSE. .rcpt__fig--hollow is drawn hollow and outlined
   because there is nothing behind it — extruding it would give it a solid body
   and destroy the one idea that cell carries. Do not add it.
   ========================================================================== */
/* SOFTENED — founder ruling: the front was reading too bold. Five steps
   instead of nine, alphas roughly halved, and the contact shadow pulled in.
   It still reads as relief; it no longer reads as a logo. */
.rcpt__fig,.fstage__figs>div>b{
  text-shadow:
    -.5px -.5px 0 rgba(255,252,247,.55),
    1px .6px 0 rgba(20,35,63,.26),2px 1.2px 0 rgba(19,33,60,.2),
    3px 1.8px 0 rgba(18,31,56,.15),4px 2.4px 0 rgba(17,29,53,.1),
    5px 3px 0 rgba(16,27,49,.07),
    7px 4.5px 14px rgba(20,35,63,.14)}
/* The hollow ZERO keeps its outline and takes no body. */
.rcpt__fig--hollow{text-shadow:none}
/* The orange figure gets its own extrusion, in burnt brown. */
.fstage__figs>div:nth-child(2)>b{
  text-shadow:
    -.5px -.5px 0 rgba(255,250,243,.6),
    1px .6px 0 rgba(120,52,12,.26),2px 1.2px 0 rgba(116,50,11,.2),
    3px 1.8px 0 rgba(110,47,10,.15),4px 2.4px 0 rgba(104,44,10,.1),
    5px 3px 0 rgba(97,41,9,.07),
    7px 4.5px 14px rgba(120,52,12,.14)}
/* White figures on the dark public-view pane. */
.gpv__v{
  text-shadow:
    1px .6px 0 rgba(4,10,20,.5),2px 1.2px 0 rgba(4,10,20,.42),
    3px 1.8px 0 rgba(4,10,20,.34),4px 2.4px 0 rgba(4,10,20,.26),
    5px 3px 0 rgba(4,10,20,.18),
    7px 4.5px 16px rgba(0,0,0,.35)}


/* ==========================================================================
   THE BAND — "HAPPENS" TAKES THE EMPHASIS COLOUR
   (appended block, reversible in one delete)

   Founder ruling: the word needs a different colour. It was white, the same as
   the rest of the line.

   The ground here is a PHOTOGRAPH under a scrim, not a flat token, so the only
   safe orange is --orange-soft #F2B183 — the tint the site already uses for
   text on dark — plus a small dark halo so the word holds if the image behind
   it runs light. --orange itself never carries text over imagery.
   ========================================================================== */
.gband__title em{color:var(--orange-soft);text-shadow:0 2px 18px rgba(4,10,20,.7),0 0 42px rgba(11,23,41,.5)}


/* ==========================================================================
   EMPHASIS INK, BRIGHTENED (appended block, reversible in one delete)

   Founder ruling: the emphasised words on the cream sections read dull. They
   go to #C25E14, chosen from measured options.

   WHY NOT THE BRIGHT ORANGE. --orange #E07A2F measures 2.83:1 on this cream
   ground. That fails even the 3:1 large-text floor, so it cannot carry a word
   on cream at any size — this is not a preference, it is the reason the site
   has two orange tints in the first place. #C25E14 measures about 4.0:1: it
   clears the large-text floor with room, and every word it lands on here is
   50px or larger display type.

   SCOPE IS DISPLAY-SIZE EMPHASIS ON LIGHT GROUNDS ONLY. --orange-ink itself is
   NOT redeclared, because it is also used at caption and body sizes elsewhere
   where 4.0:1 would fail. Any new small-text emphasis keeps #A9501A.

   The dark-ground words are untouched and stay --orange-soft: on navy that
   tint measures 8.5–9.8:1, and the same hex cannot serve both grounds. Two
   tints is the system working, not a mismatch.
   ========================================================================== */
.display-hero em,.abt__h em,.crisis__h em,.dsrt__hl em,.dsrt__closer em,
.wwr__def em,.wwr__mission em,.wwr__close em,.brd__rule em,
.fstage__figs>div:nth-child(2)>b{color:#C25E14}

/* motion-plus.css loads AFTER this stylesheet and re-declares the emphasis
   colour on .display-hero em and .display-section em, so at equal specificity
   it won and four words (here, expect, hide, Vallejo) stayed on the old ink.
   These two rules out-specify it WITHOUT !important and without editing that
   file. .display-section is scoped through .band-canvas on purpose: the same
   class is used inside dark bands, where #C25E14 measures 2.4:1 and would be
   illegible — only the cream bands may take it. */
body .display-hero em{color:#C25E14}
.band-canvas .display-section em{color:#C25E14}


/* ==========================================================================
   FOOTER MARK — REFIT FOR THE LONGER NAME
   (appended block, reversible in one delete)

   Founder ruling: the footer mark reads "Pathfinders for Hope" — the entity
   that exists and holds the EIN — not the program name.

   The mark is white-space:nowrap and was sized clamp(44px,12.4vw,214px) for a
   19-character string. The new string is 20 characters and measures about 8.4%
   wider at the same size, so it ran past its own padding box at every width
   tested: +39px at 1440, +35px at 768, +23px at 360, +59px at 320. (MEASURED
   by rendering the real face, not by reading the declaration — a canvas
   measurement silently fell back to a substitute font and was 9% out.)

   Note the 320px overflow is NOT new: the old string was already +32px there,
   clipped by body overflow-x. This refit fixes both.

   New sizing is set so the rendered string clears its padding at 320, 360,
   768, 1440 and 1920. Do not raise the floor back to 44px — that is what
   breaks 320.
   ========================================================================== */
.close__mark{font-size:clamp(34px,11.3vw,190px)}


/* ==========================================================================
   NAV — BRIGHT DONATE + LARGER MARK (appended block, reversible in one delete)

   Founder ruling: the donate button reads as a bright sharp green, and the
   logo runs a little larger.

   THE LABEL HAD TO CHANGE COLOUR FOR THE GREEN TO GET BRIGHT. The button was
   white on a deep green gradient (#1B8055 → #14663F) at 5.0:1. White text caps
   how bright the fill can go: on --green-bright #3FBF84, white measures 2.2:1
   and is illegible, so "bright green + white label" is not a combination that
   exists. Navy on bright green measures 4.95:1 at the darkest point of the new
   gradient, so the label goes navy and the fill gets to be the bright green.
   This does not break the brand rule — green-bright is being used as a GRAPHIC
   fill here, not as text on a light ground.

   Do not put the white label back on this fill without re-measuring; it fails.
   ========================================================================== */
/* motion-plus.css loads AFTER this file and paints the button with
   .nav__cta .btn--primary, which beats a plain .nav .btn--primary at equal
   specificity, so the first attempt at this rule changed nothing. These
   selectors out-specify it without !important and without editing that file. */
.nav .nav__cta .btn--primary,.nav__cta .btn--primary.btn--sm{
  background-image:linear-gradient(#45CE8D,#35AE76);background-color:#3FBF84;color:var(--navy);
  border-color:#2E9E68;box-shadow:0 1px 0 rgba(255,255,255,.45) inset,0 2px 14px -4px rgba(63,191,132,.6)}
.nav .nav__cta .btn--primary:hover,.nav__cta .btn--primary.btn--sm:hover{
  background-image:linear-gradient(#4FD897,#3ABB80)}
.nav .nav__cta .btn--primary .btn__arrow{color:var(--navy)}
/* The mark was rendering at 32x28 from a 38x34 source — smaller than the file
   it is drawn from, so this is a size-up into detail it already has, not an
   upscale. 25% up; the nav row height is set by the wordmark block, not by
   the mark, so nothing else moves. */
/* The mark has TWO sizes and the visible one is the condensed state:
   .nav__mark is 38px at the top of the page, but .nav.is-condensed .nav__mark
   drops it to 28px, and the nav is condensed for all but the first screen —
   which is why it measured 28px, not 38px. Both go up together, or it grows
   at the top of the page and stays small everywhere else. */
.nav__mark{height:46px;width:auto}
.nav.is-condensed .nav__mark{height:35px}


/* ==========================================================================
   NAV — CONTACT TAB (appended block, reversible in one delete)

   Founder ruling: a Contact item in the header that jumps to 05 Contact, and
   it has to be noticeable.

   NOTICEABLE WITHOUT A SECOND BUTTON. Donate is the only pill in this header
   and stays that way — two pills side by side and neither is the primary
   action. Contact instead gets the site's own flag devices: a small orange
   node before the word and a permanent orange rule under it, so it reads as
   the one marked item in a run of plain links. The rule is always drawn, not
   a hover state, which is what makes it read as a tab rather than a link.

   Colour is --orange as a GRAPHIC (node and rule only). The word itself stays
   navy, because orange text on this cream header measures 2.83:1.

   The selectors are prefixed to out-specify motion-plus.css, which loads after
   this file and owns several nav styles.
   ========================================================================== */
.nav .nav__link--contact{position:relative;color:var(--navy);font-weight:600;
  display:inline-flex;align-items:center;gap:7px}
.nav .nav__link--contact::before{content:"";width:6px;height:6px;flex:none;border-radius:50%;
  background:var(--orange);box-shadow:0 0 0 3px rgba(224,122,47,.16)}
.nav .nav__link--contact::after{content:"";position:absolute;left:13px;right:0;bottom:-5px;height:2px;
  background:var(--orange);transform:scaleX(1);opacity:1}
.nav .nav__link--contact:hover{color:var(--orange-ink)}
.nav .nav__link--contact:hover::after{box-shadow:0 0 12px rgba(224,122,47,.7)}





/* ==========================================================================
   VERDICT BAND (.vdt)                    appended block, reversible in one delete

   The page's closing statement, moved out of the footer and given its own band.
   Order at the end of the page is now: Evidence (cream, the receipts) → VERDICT
   (navy, the claim) → footer (navy-deep, the sign-off). Argument, verdict,
   signature.

   GROUND: --navy on purpose. The footer below is navy-deep and the rule is that
   no two adjacent grounds may match — navy against navy-deep is the same pair
   the pull quote and 02 already use, so the seam reads as a section break.

   TYPE: band scale, three clip-wiped lines, 90ms apart, using the site's
   standard clip device (padding-bottom .14em / margin-bottom -.11em to clear
   Anton's depth). "No one gets lost." is the em and takes --orange-soft, which
   is legal here only because the ground is navy.

   GROUND GRAPHIC: the record sheet — 34px hairline grid, radially masked so it
   is completely absent behind the words and dissolves at every edge. It drifts
   one cell over 60s and is paused until the band is in view. Nothing else: no
   plate, no border, no bloom.

   NO BUTTON. See the markup comment in index.html — this is a founder ruling,
   not an omission.
   ========================================================================== */
.vdt{position:relative;overflow:hidden;isolation:isolate;
  padding-block:clamp(96px,12vw,190px);text-align:center}
.vdt__sheet{position:absolute;inset:-40px;z-index:-1;pointer-events:none;
  background-image:
    repeating-linear-gradient(90deg,rgba(221,231,228,.11) 0 1px,transparent 1px 34px),
    repeating-linear-gradient(0deg,rgba(221,231,228,.11) 0 1px,transparent 1px 34px);
  -webkit-mask-image:radial-gradient(ellipse 62% 54% at 50% 50%,transparent 0 38%,rgba(0,0,0,.9) 68%,#000 78%,transparent 100%);
  mask-image:radial-gradient(ellipse 62% 54% at 50% 50%,transparent 0 38%,rgba(0,0,0,.9) 68%,#000 78%,transparent 100%);
  animation:vdt-drift 60s linear infinite;animation-play-state:paused}
.vdt.is-in .vdt__sheet{animation-play-state:running}
@keyframes vdt-drift{to{transform:translate3d(-34px,-34px,0)}}
.vdt__l{margin:0 auto;max-width:22ch;
  font-family:var(--font-display);text-transform:uppercase;font-weight:400;
  color:var(--on-dark);font-size:clamp(40px,6vw,84px);line-height:.96;letter-spacing:-.02em}
.vdt__line{display:block;overflow:hidden;padding-bottom:.14em;margin-bottom:-.11em}
.vdt__line>span{display:block;transform:translateY(105%);
  transition:transform 860ms var(--ease-enter)}
.vdt.is-in .vdt__line>span{transform:none}
.vdt.is-in .vdt__line:nth-child(2)>span{transition-delay:90ms}
.vdt.is-in .vdt__line:nth-child(3)>span{transition-delay:180ms}
.vdt__l em{color:var(--orange-soft)}
@media (prefers-reduced-motion:reduce){
  .vdt__line>span{transform:none;transition:none}
  .vdt__sheet{animation:none}}
/* The footer is now a utility strip: no claim, no CTA. Its first element is the
   meta row, so it needs its own top space back. */
.close__meta{margin-top:clamp(34px,4.4vw,58px)}


/* ==========================================================================
   VERDICT BAND — SECOND PASS (appended block, reversible in one delete)

   Founder ruling: the band has to be ANTON throughout, with ONE WORD in a
   different colour, and it has to hit much harder.

   1. THE EM STOPS BEING THE EM HERE. Line three was rendering in the site's
      emphasis device — Archivo, font-stretch 62%, italic — so it read as a
      different typeface from the two Anton lines above it. On this band the em
      is overridden to Anton upright and carries ONLY colour. The device is
      untouched everywhere else on the site; this is a scoped override.

   2. ONE WORD, NOT ONE LINE. The em now wraps "lost." alone — the word the
      whole site is built on — in --orange-soft with a warm bloom. Everything
      else in the band is white.

   3. IT HITS HARDER THROUGH SCALE AND TIGHTNESS, NOT MORE ELEMENTS. Type goes
      up to 104px with line-height .88 and a 26ch measure so the three lines
      hold the band edge to edge; a 6px orange bar draws in under the last line
      on entry, and 22px corner brackets frame the whole band as a readout.
      Those are all existing site devices — nothing new is invented.

   Contrast on the navy ground: white 15.65:1, orange-soft 8.49:1. The bloom is
   a shadow only, so neither number moves.
   ========================================================================== */
.vdt{padding-block:clamp(104px,13vw,210px)}
.vdt__l{max-width:26ch;font-size:clamp(46px,7.4vw,104px);line-height:.88;letter-spacing:-.026em}
/* Anton upright, colour only — no italic, no width axis, no synthetic slant. */
.vdt__l em{font-family:var(--font-display);font-style:normal;font-weight:400;
  font-stretch:100%;letter-spacing:inherit;color:var(--orange-soft);
  text-shadow:0 0 38px rgba(224,122,47,.42),0 0 96px rgba(224,122,47,.2)}
/* The bar draws once on entry, under the last line. Graphic only — it never
   carries a word, same as the crisis verdict rule and the launch plate. */
.vdt__bar{display:block;height:6px;width:0;margin:clamp(26px,3vw,44px) auto 0;
  background:var(--orange);box-shadow:0 0 30px -6px rgba(224,122,47,.8);
  transition:width 900ms var(--ease-scrub) 420ms}
.vdt.is-in .vdt__bar{width:clamp(180px,26vw,340px)}
.vdt__bk{position:absolute;width:22px;height:22px;pointer-events:none;
  border-left:2px solid rgba(224,122,47,.5);border-top:2px solid rgba(224,122,47,.5);
  left:clamp(16px,3vw,44px);top:clamp(30px,4vw,58px);opacity:0;
  transition:opacity 700ms var(--ease-enter) 620ms}
.vdt__bk--b{left:auto;top:auto;right:clamp(16px,3vw,44px);bottom:clamp(30px,4vw,58px);
  border-left:0;border-top:0;
  border-right:2px solid rgba(224,122,47,.5);border-bottom:2px solid rgba(224,122,47,.5);
  transition-delay:760ms}
.vdt.is-in .vdt__bk{opacity:1}
@media (prefers-reduced-motion:reduce){
  .vdt__bar{transition:none;width:clamp(180px,26vw,340px)}
  .vdt__bk{transition:none;opacity:1}}

/* ==========================================================================
   NAV — LINKS VISIBLE 1081-1240 (appended block, reversible in one delete)

   Founder ruling: the eight nav items must be on screen, not behind the
   burger — Home / About / Get help / Organizations pointing at the real
   pages, and The Crisis / The System / The Pilot / Contact as landing-page
   section anchors.

   WHY THIS IS A RESTORE, NOT A NEW BREAKPOINT. styles.css already carries
   @media (max-width:1240px){.nav__links{gap:18px}.nav__link{font-size:13px}}
   — a rule whose only purpose is to tighten the links so they FIT between
   1080 and 1240. A second, later max-width:1240px block then sets
   .nav__links{display:none}, which made that tightening dead code and moved
   the collapse up from 1080 to 1240. This block restores the documented
   intent: tightened-but-visible down to 1080, burger below it. No new
   breakpoint is introduced — 1080 and 1240 both already exist.

   Equal specificity to the rule it overrides (0,1,0); it wins on source
   order because this block is last in the file. Do not add !important.
   Delete this block to return to burger-at-1240.
   ========================================================================== */
@media (min-width:1081px) and (max-width:1240px){
  .nav__links{display:flex}
  .nav__burger{display:none}
}


/* ==========================================================================
   NAV LINKS — THICKER + ALTERNATING INK (appended block, reversible in one delete)

   Founder instruction: the nav items read too light; make them thicker in
   height and width and alternate the colour every other item.

   COLOUR IS FROM THE LOCKED SET, NOT NEW. The nav ground is canvas #FBF8F3.
   navy #14233F measures 14.77:1 and orange-ink #A9501A measures 5.15:1 on it -
   both pass. Plain orange #E07A2F is 2.83:1 and is NOT used as text here;
   it stays the graphic (the contact dot and the underline) exactly as before.
   No new token, no new colour.

   Alternation is per ITEM via nth-child, not per word - "every other word"
   with multi-word items (GET HELP, THE CRISIS) would split inside a link.
   ========================================================================== */
/* HEIGHT ONLY. The font-size and letter-spacing bumps were reverted on
   founder instruction - they widened the run and crowded eight items.
   Vertical padding is the only thickness change; horizontal padding, size and
   tracking are left at their authored values. */
/* HEIGHT ONLY - the size and tracking bumps were reverted on founder
   instruction; they widened the run. Vertical padding is the only thickness
   change.

   ALTERNATING INK, CORRECTED. The first version of this block selected
   .nav__links li:nth-child(...). There are no <li> elements in this nav - the
   links are direct <a> children of <nav class="nav__links"> - so that rule
   matched nothing and shipped with no effect. It now selects the anchors
   directly. Colours are from the locked set: navy 14.77:1 and orange-ink
   5.15:1 on canvas. Plain orange stays graphic-only. */
.nav__links .nav__link{padding-top:16px;padding-bottom:16px}
.nav__links > a.nav__link:nth-of-type(odd){color:#14233F}
.nav__links > a.nav__link:nth-of-type(even){color:#A9501A}
.nav__case-t{color:#14233F}
/* Contact is the sixth visible item and must read orange-ink so the
   alternation holds across the dropdown: navy, orange, navy, orange, navy
   (The Case), orange (Contact). Targeted by href because the contact link
   carries no distinguishing class on every page. */
.nav__links > a.nav__link[href$="#contact"]{color:#A9501A}
.nav__links > a.nav__link[href$="#contact"]:hover{color:#14233F}
.nav__links .nav__link:hover{color:#A9501A}
.nav__links > a.nav__link:nth-of-type(even):hover{color:#14233F}

/* ==========================================================================
   THE CASE - NAV DROPDOWN (appended block, reversible in one delete)

   Founder ruling: The Crisis, The System, The Glass and The Pilot consolidate
   under one parent, "The Case". Bar goes from eight items to six.

   NO JAVASCRIPT ON PURPOSE. Opening is CSS only - :hover for pointer and
   :focus-within for keyboard, with the trigger a real <button> so it is
   reachable by tab and by touch. Two engines drive this nav across the site
   (motion.js and nav-lite.js) and a JS dropdown would have to be added to
   both; a CSS panel touches neither and deletes cleanly.
   KNOWN LIMIT: with no JS, clicking the trigger does not toggle it shut -
   it closes on focus-out or pointer-out. Documented, not a defect to chase.

   Hard edges and a hairline border, not a rounded card: on this site rounding
   means a door a person walks through, and this is a panel. */
.nav__case{position:relative;display:inline-block}
.nav__case-t{background:none;border:0;padding:16px 0;cursor:pointer;font:inherit;letter-spacing:inherit;text-transform:inherit}
/* chevron removed on founder instruction - no marker on the trigger */
.nav__case-m{position:absolute;top:100%;left:0;min-width:212px;background:var(--canvas);border:1px solid var(--hairline);padding:6px 0;display:none;z-index:120}
.nav__case:hover .nav__case-m,.nav__case:focus-within .nav__case-m{display:block}
.nav__case-i{display:block;padding:11px 18px;white-space:nowrap;color:#14233F}
.nav__case-i:hover{color:#A9501A;background:var(--stone)}
/* BELOW 1080 THE PANEL IS ALWAYS OPEN, so the trigger controls nothing.
   It is removed from the layout and therefore from the tab order rather than
   left as a button a keyboard user can reach and activate to no effect. The
   four items simply sit flat in the burger sheet.

   aria-expanded was REMOVED from the trigger in markup. Opening is CSS only
   - :hover and :focus-within - so nothing can update that attribute, and an
   element must not claim a state it never maintains. Above 1080 the button
   stays focusable and tabbing to it opens the panel; the state is real, it is
   just not announced. */
@media (max-width:1080px){
  /* .nav__links is a flex column with align-items:flex-start, so every item
     sizes to its content. The sibling anchors escape that through an existing
     mobile .nav__link width rule - but .nav__case is a <div> and never matches
     that selector, so it collapsed to 98px against 815px rows and dragged the
     menu and its four items down with it. width:100% on all three gives them
     the sibling treatment. Padding is zeroed on both sides to match the
     13px 0 the sibling links use. */
  .nav__case{display:block;width:100%}
  .nav__case-t{display:none}
  .nav__case-m{position:static;display:block;width:100%;min-width:0;border:0;background:none;padding:0}
  .nav__case-i{width:100%;padding-left:0;padding-right:0}

  /* ALTERNATION ACROSS THE FLATTENED COLUMN. In the bar the four children sit
     inside a closed panel and uniform navy is right, so this is scoped to this
     block only.

     Nine items, and position 9 is Contact. Perfect alternation needs 9 to be
     navy because 1 is navy and 9 is odd - but Contact is pinned orange-ink for
     the SIX-item bar, where it lands on an even position. So Contact is
     flipped to navy here and only here. Sequence becomes
     navy orange navy orange navy orange navy orange navy - zero adjacent
     pairs. Both inks pass on the sheet ground: navy 14.77:1, orange-ink
     5.15:1. */
  .nav__case-i:nth-of-type(even){color:#A9501A}
  .nav__links > a.nav__link[href$="#contact"]{color:#14233F}
}


/* ==========================================================================
   TRIAL - ORBITRON ON THE NAV (appended block, delete to revert)

   Founder asked to see it. This is a TRIAL, not a ruling: Orbitron is a font
   the site does not carry, and the design system is locked, so it ships only
   if the founder says so. Deleting this block restores Chakra Petch with no
   other change.

   Scoped to the nav items only - the wordmark, ticker, buttons and every other
   use of --font-command are untouched, so nothing outside the nav run moves.
   Orbitron is a WIDE face; size is stepped down and tracking tightened to hold
   the six-item run at the width the founder already accepted.
   ========================================================================== */
/* THICKER. Orbitron tops out at 700 and is a wide face, so weight alone
   does not read heavy - the size comes up with it and the tracking comes in to
   pay for the extra width. Delete this whole trial block to return to
   Chakra Petch. */
.nav__links .nav__link{font-family:"Orbitron","Chakra Petch",system-ui,sans-serif;font-weight:700;font-size:13px;letter-spacing:.02em}
.nav__case-i{font-weight:700;font-size:13px;letter-spacing:.02em}
@media (max-width:1240px){.nav__links .nav__link{font-size:12px;letter-spacing:.01em}}

/* ==========================================================================
   HEADER TABS - THICKER (founder instruction)
   Each nav item gets more height and more width so it reads as a tab rather
   than a bare word. Padding only: no new token, no colour change, and the
   orange underline still spans the item because ::after is width:100%.
   The row gap comes down so the wider items do not push the run out of the
   1240 breakpoint. Delete this block to restore.
   ========================================================================== */
.nav__links{gap:10px}
.nav__links .nav__link{padding:20px 16px}
.nav__case-m .nav__link{padding:14px 16px}
@media (max-width:1240px){.nav__links .nav__link{padding:16px 12px}}

/* ============================================================
   ABOUT DROPDOWN — colour run repair, 2026-08-14

   About became a .nav__case <div>, which took it OUT of the
   `.nav__links > a.nav__link:nth-of-type(odd/even)` run. That run
   is what alternates navy/orange across the bar, so removing one
   anchor re-coloured every item after it. The intended rhythm is
   Home navy / About orange / Get help navy / Organizations orange
   / The Case navy / Contact orange, so the two items whose parity
   flipped are re-asserted by href, and the About trigger is given
   the orange it inherited as an anchor. The generic .nav__case-t
   rule keeps The Case navy.
   Both inks pass on the header ground: navy 14.77:1, orange-ink
   5.15:1 — same pair already cleared for this bar. */
.nav__links .nav__about-t{color:#A9501A}
.nav__links > a.nav__link[href$="get-help.html"]{color:#14233F}
.nav__links > a.nav__link[href$="for-organizations.html"]{color:#A9501A}
