/* ==========================================================================
   DocBridge — page layer. Builds on system.css.
   ========================================================================== */

/* ---- Nav ------------------------------------------------------------------ */
.nav{position:absolute;top:0;left:0;right:0;z-index:5;display:flex;align-items:center;justify-content:space-between;
  padding:1.5rem var(--gutter);color:var(--on-ink)}
.wordmark{font-family:var(--sans);font-weight:520;letter-spacing:-.018em;font-size:1.125rem;text-decoration:none;color:inherit}
.nav-links{display:flex;gap:2.25rem;align-items:center}
.nav-link{font-family:var(--sans);font-size:var(--fs-small);text-decoration:none;color:var(--on-ink-2);transition:color 480ms var(--ease-rise)}
.nav-link:hover{color:var(--on-ink)}
.nav-menu{display:none;position:relative}
.nav-menu summary{list-style:none;cursor:pointer;padding:.4rem 0}
.nav-menu summary::-webkit-details-marker{display:none}
.nav-sheet{position:absolute;right:0;top:2.4rem;display:flex;flex-direction:column;gap:1.1rem;align-items:flex-end;
  padding:1.25rem 1.25rem 1.25rem 2.5rem;background:var(--ink-800);border:1px solid var(--rule-ink)}

/* ---- Buttons: one CTA, present everywhere, never shouting ------------------ */
.btn{display:inline-flex;align-items:center;gap:.6rem;font-family:var(--sans);font-weight:500;font-size:var(--fs-small);
  line-height:1;padding:.85rem 1.35rem;border:1px solid var(--bone-100);border-radius:2px;text-decoration:none;color:var(--on-ink);
  transition:background 480ms var(--ease-rise),color 480ms var(--ease-rise),border-color 480ms var(--ease-rise)}
.btn-solid{background:var(--bone-100);color:var(--ink-900)}
.btn-solid:hover{background:var(--bone-50)}
.btn-quiet{border-color:var(--rule-ink);color:var(--on-ink-2)}
.btn-quiet:hover{border-color:var(--on-ink-2);color:var(--on-ink)}

/* ---- Hero ----------------------------------------------------------------- */
/* the track is taller than the viewport; the pin sticks while scroll scrubs the timeline */
.hero{position:relative;height:calc(100svh + var(--hero-scrub, 120svh));background:var(--ink-900)}
.hero-pin{position:sticky;top:0;height:100svh}
.hero-pin{min-height:100svh;display:grid;grid-template-columns:minmax(0,56fr) minmax(0,44fr);align-items:center;
  gap:var(--s-8);padding:calc(var(--s-8) + 3.5rem) var(--gutter) var(--s-8);overflow:hidden}
.hero-light{position:absolute;inset:0;pointer-events:none;z-index:0;
  background:radial-gradient(55% 45% at 76% 28%, rgba(230,190,114,.11), rgba(230,190,114,0) 70%)}
.hero-copy{position:relative;z-index:1;max-width:46rem}
.hero-h{font-family:var(--serif);font-weight:400;font-size:clamp(3rem, .9rem + 6vw, 7rem);line-height:.94;letter-spacing:-.03em}
.hero-h .l{display:block}
.hero-h .q{font-style:italic}
.hero-cta{margin-top:var(--s-7)}

/* rise with per-line stagger; --t offsets a whole block */
.rise>*{animation-delay:calc(var(--t,0ms) + var(--stagger)*var(--i,0))}
.hero-h .l:nth-child(1){--i:0}.hero-h .l:nth-child(2){--i:1}.hero-h .l:nth-child(3){--i:2}.hero-h .l:nth-child(4){--i:3}

/* ---- Stage: the fax arrives ------------------------------------------------ */
.stage{position:relative;z-index:1;width:100%;aspect-ratio:7/8;max-height:min(80vh,680px);container-type:inline-size}

.fax{position:absolute;left:4%;top:7%;width:52%;aspect-ratio:8.5/11;
  animation:lift var(--dur-rise) var(--ease-rise) 2450ms forwards}
@keyframes lift{to{transform:translateY(-14px) rotate(-1.6deg)}}

.fax .paper{position:absolute;inset:0;padding:8% 7.5%;font-size:clamp(6px, 2.55cqw, 9.5px);
  clip-path:inset(0 0 100% 0);animation:print var(--dur-render) linear 300ms forwards}
@keyframes print{to{clip-path:inset(0 0 0 0)}}
.fx-head{font-family:var(--mono);text-transform:uppercase;letter-spacing:.14em;opacity:.55;font-size:.95em}
.fx-meta{display:grid;grid-template-columns:1fr auto;gap:.35em 1.5em;margin-top:2.2em;font-family:var(--mono);opacity:.72;letter-spacing:.02em}
.fx-meta span:nth-child(even){text-align:right}
.bars{margin-top:2.4em}
.bars i{display:block;height:.28em;margin:.72em 0;background:rgba(11,15,23,.62);border-radius:1px}
.bars i:nth-child(1){width:72%}.bars i:nth-child(2){width:88%}.bars i:nth-child(3){width:81%}.bars i:nth-child(4){width:90%}
.bars i:nth-child(5){width:64%}.bars i:nth-child(6){width:0;margin:.4em 0}.bars i:nth-child(7){width:84%}.bars i:nth-child(8){width:92%}
.bars i:nth-child(9){width:77%}.bars i:nth-child(10){width:86%}.bars i:nth-child(11){width:58%}.bars i:nth-child(12){width:0;margin:.4em 0}
.bars i:nth-child(13){width:89%}.bars i:nth-child(14){width:83%}.bars i:nth-child(15){width:91%}.bars i:nth-child(16){width:46%}
.fx-foot{position:absolute;left:7.5%;bottom:6%;font-family:var(--mono);opacity:.5;letter-spacing:.06em}

/* print head: a warm line at the leading edge, with a faint shimmer trailing it */
.fax .head{position:absolute;left:-3%;right:-3%;top:0;height:2px;background:var(--brass-300);opacity:0;
  box-shadow:0 0 14px 3px rgba(230,190,114,.45);animation:head var(--dur-render) linear 300ms forwards}
@keyframes head{0%{top:0;opacity:1}96%{opacity:1}100%{top:100%;opacity:0}}
.shimmer{position:absolute;left:0;right:0;height:16%;top:-16%;pointer-events:none;
  background:linear-gradient(to bottom, rgba(255,250,235,0), rgba(255,250,235,.55) 85%, rgba(255,250,235,0));
  mix-blend-mode:soft-light;animation:shimmer var(--dur-render) linear 300ms forwards}
@keyframes shimmer{to{top:100%}}

/* read: a single cold line passes down the page once */
.fax .scan{position:absolute;left:-2%;right:-2%;top:0;height:1px;background:var(--signal);opacity:0;
  box-shadow:0 0 10px 2px var(--signal-glow);animation:scan 1000ms var(--ease-travel) 2900ms forwards}
@keyframes scan{0%{top:0;opacity:.9}90%{opacity:.9}100%{top:100%;opacity:0}}

/* matched: the case card settles over the lower corner of the page */
.case{position:absolute;left:44%;top:44%;width:56%;padding:1rem 1.1rem;
  background:rgba(18,24,38,.82);border:1px solid var(--rule-ink);backdrop-filter:blur(6px);
  opacity:0;animation:settle var(--dur-snap) var(--ease-snap) var(--t) forwards}
.case-title{font-family:var(--sans);font-size:clamp(.9rem, 3.4cqw, 1.05rem);line-height:1.3;margin-top:.35rem;text-wrap:balance}
.case-meta{margin-top:.55rem;font-size:clamp(.66rem, 2.6cqw, .8125rem)}
.case-conf{margin-top:.25rem;font-size:clamp(.66rem, 2.6cqw, .8125rem)}

/* notified: one badge, one pulse */
.notify{position:absolute;right:0;top:0;display:inline-flex;align-items:center;gap:.6rem;padding:.55rem .8rem;
  border:1px solid var(--rule-ink);background:rgba(11,15,23,.7);color:var(--on-ink-2);font-size:clamp(.66rem, 2.6cqw, .8125rem);
  opacity:0;animation:rise var(--dur-rise) var(--ease-rise) var(--t) forwards}
.notify .dot{width:6px;height:6px;border-radius:50%;background:var(--signal);box-shadow:0 0 8px var(--signal-glow);
  animation:pulse-once 900ms var(--ease-travel) calc(var(--t) + 300ms) 1}

/* the readout: mono, types on one beat after each event */
.readout{list-style:none;margin:0;padding:0;position:absolute;left:0;right:0;top:calc(7% + 52% * 11 / 8.5 + 1.25rem);
  display:grid;gap:.35rem;color:var(--on-ink-2);font-size:clamp(.66rem, 2.5cqw, .8125rem)}
.readout li{display:grid;grid-template-columns:5.5em 1fr;gap:1em;opacity:0;transition:opacity 500ms var(--ease-rise)}
.readout li.on,.no-js .readout li{opacity:1}
.readout .k{color:var(--on-ink-3);text-transform:uppercase;letter-spacing:.12em;font-size:.85em;padding-top:.12em}
.readout .v{overflow-wrap:anywhere}
.readout .c{visibility:hidden}.readout .c.on{visibility:visible}
.no-js .readout .c{visibility:visible}

/* ---- Reveal on enter: rise 16px, 700ms, staggered by line ------------------ */
.reveal>*{opacity:0;transform:translateY(16px);
  transition:opacity var(--dur-rise) var(--ease-rise),transform var(--dur-rise) var(--ease-rise)}
.reveal>*:nth-child(2){transition-delay:var(--stagger)}
.reveal>*:nth-child(3){transition-delay:calc(var(--stagger)*2)}
.reveal>*:nth-child(4){transition-delay:calc(var(--stagger)*3)}
.reveal>*:nth-child(5){transition-delay:calc(var(--stagger)*4)}
.reveal.in>*,.no-js .reveal>*{opacity:1;transform:none}

/* ---- 2 · The admission: one statement, near silence ------------------------ */
.admit{min-height:100svh;display:grid;align-content:end;padding:var(--section-pad) var(--gutter) clamp(5rem, 13vh, 9rem)}
.admit-h{font-family:var(--serif);font-weight:400;font-size:var(--fs-h2);line-height:var(--lh-h2);letter-spacing:var(--ls-h2);
  max-width:21ch;margin-left:clamp(0px, 47vw, 54rem);text-wrap:balance}
.admit-h .l{display:block}
.admit-h .q{font-style:italic;color:var(--on-bone-2);margin-top:.35em}

/* ---- Responsive ----------------------------------------------------------- */
@media (max-width:1100px){
  .hero-pin{grid-template-columns:minmax(0,52fr) minmax(0,48fr);gap:var(--s-6)}
}
@media (max-width:900px){
  .hero{height:auto}
  .hero-pin{position:static;height:auto;min-height:100svh}
  .hero-pin{grid-template-columns:1fr;align-items:start;gap:var(--s-8);padding-top:calc(var(--s-8) + 3rem)}
  .hero-copy{max-width:36rem}
  .stage{max-width:34rem;margin-left:auto;aspect-ratio:7/8.4}
  .hero-light{background:radial-gradient(60% 40% at 80% 55%, rgba(230,190,114,.11), rgba(230,190,114,0) 70%)}
}
@media (max-width:640px){
  .nav{padding:1.15rem var(--gutter)}
  .nav-links{display:none}
  .nav-menu{display:block}
  .hero-pin{gap:var(--s-7);padding-top:calc(var(--s-7) + 3rem);padding-bottom:var(--s-7)}
  .hero-h{line-height:.96}
  .stage{max-width:none;margin-left:0;margin-right:calc(var(--gutter) * -.35);aspect-ratio:7/9.4}
  .fax{left:0;top:12%;width:56%}
  .fx-meta{grid-template-columns:1fr}
  .fx-meta span:nth-child(even){display:none}
  .case{left:38%;width:62%;top:44%}
  .notify{top:0}
  .readout{top:calc(12% + 56% * 11 / 8.5 + 1.5rem);gap:.45rem}
  .readout li{grid-template-columns:5em 1fr;gap:.8em}
  .admit{min-height:88svh}
  .admit-h{margin-left:0;max-width:16ch}
}

@media (prefers-reduced-motion: reduce){
  .fax{transform:translateY(-14px) rotate(-1.6deg)}
  .fax .paper{clip-path:none}
  .fax .head,.fax .scan,.shimmer{display:none}
  .case,.notify{opacity:1}
  .readout li{opacity:1}
}

/* ==========================================================================
   3 · The pipeline. Pinned stage; scroll moves the document down the route.
   Timeline is 6500 virtual ms; every keyframe percentage below is t / 6500.
   ========================================================================== */
.pipe{position:relative;height:calc(100svh + var(--pipe-scrub, 540svh));background:var(--ink-900)}
.pipe-pin{position:sticky;top:0;height:100svh;overflow:hidden;display:grid;
  grid-template-columns:minmax(0,38fr) minmax(0,62fr);gap:var(--s-7);padding:var(--s-8) var(--gutter) var(--s-7)}

/* copy column */
.pipe-copy{position:relative;z-index:1;display:flex;flex-direction:column;justify-content:space-between;min-height:0}
.pipe-h .l{display:block}
.beats{list-style:none;margin:0;padding:0;position:relative;min-height:11rem}
.beats li{position:absolute;left:0;right:0;bottom:0;opacity:0;transform:translateY(10px);
  transition:opacity 520ms var(--ease-rise),transform 520ms var(--ease-rise)}
.beats li.is-on{opacity:1;transform:none}
.beat-h{font-family:var(--sans);font-size:var(--fs-lead);line-height:1.4;max-width:26ch;color:var(--on-ink)}
.beat-m{margin-top:var(--s-4);color:var(--on-ink-2);overflow-wrap:anywhere;max-width:40ch}
.beat-m .c{visibility:hidden}.beat-m .c.on{visibility:visible}
.no-js .beat-m .c,.is-static .beat-m .c{visibility:visible}

/* stage */
.pipe-stage{position:relative;min-height:0;container-type:inline-size}
/* the route: a rule, and one short signal pulse that leads the document down it */
.proute{position:absolute;left:14%;top:-6%;bottom:-6%;width:1px;background:var(--rule-ink)}
.ppulse{position:absolute;left:calc(14% - 1px);width:2px;height:7%;top:-14%;border-radius:1px;
  background:linear-gradient(to bottom, rgba(182,243,255,0), var(--signal));box-shadow:0 0 8px 1px var(--signal-glow);
  animation:ppulse 6500ms linear both}
@keyframes ppulse{
  0%{top:-14%;animation-timing-function:var(--ease-travel)} 9.23%{top:-1%} 15.38%{top:-1%;animation-timing-function:var(--ease-travel)}
  24.62%{top:17%} 30.77%{top:17%;animation-timing-function:var(--ease-travel)} 40%{top:35%}
  69.23%{top:35%;animation-timing-function:var(--ease-travel)} 76.92%{top:55%} 84.62%{top:55%;animation-timing-function:var(--ease-travel)}
  92.31%{top:73%} 100%{top:73%}}

.stations{list-style:none;margin:0;padding:0}
.st{position:absolute;left:0;top:var(--y);width:14%;display:flex;align-items:center;justify-content:flex-end;gap:.7rem;transform:translateY(-50%)}
.st .lbl{font-family:var(--mono);font-size:clamp(.6rem, 1.5cqw, .7rem);letter-spacing:.12em;text-transform:uppercase;color:var(--on-ink-3)}
.st .dot{position:absolute;right:-3px;width:6px;height:6px;border-radius:50%;background:var(--ink-600)}
.st .dot-live{position:absolute;right:-3px;width:6px;height:6px;border-radius:50%;background:var(--signal);
  box-shadow:0 0 10px 2px var(--signal-glow);opacity:0;animation:6500ms steps(1,end) both}
.st .dot-live.s1{animation-name:lit1}.st .dot-live.s2{animation-name:lit2}.st .dot-live.s3{animation-name:lit3}
.st .dot-live.s5{animation-name:lit5}.st .dot-live.s6{animation-name:lit6}
@keyframes lit1{0%{opacity:0}9.23%{opacity:1}24.62%{opacity:0}100%{opacity:0}}
@keyframes lit2{0%{opacity:0}24.62%{opacity:1}40%{opacity:0}100%{opacity:0}}
@keyframes lit3{0%{opacity:0}40%{opacity:1}76.92%{opacity:0}100%{opacity:0}}
@keyframes lit5{0%{opacity:0}76.92%{opacity:1}92.31%{opacity:0}100%{opacity:0}}
@keyframes lit6{0%{opacity:0}92.31%{opacity:1}100%{opacity:1}}

/* the document */
.pdoc{position:absolute;left:19%;top:-45%;width:21%;aspect-ratio:8.5/11;opacity:0;container-type:inline-size;
  animation:pdoc 6500ms linear both;transform-origin:100% 20%}
@keyframes pdoc{
  0%{top:-45%;opacity:0;transform:none}
  2%{opacity:1}
  9.23%{top:4%;animation-timing-function:var(--ease-travel)}
  15.38%{top:4%;animation-timing-function:var(--ease-travel)}
  24.62%{top:22%;animation-timing-function:linear}
  30.77%{top:22%;animation-timing-function:var(--ease-travel)}
  40%{top:40%;animation-timing-function:linear}
  69.23%{top:40%;transform:none;opacity:1;animation-timing-function:var(--ease-travel)}
  76.92%{top:40%;transform:translateX(120%) scale(.28);opacity:0}
  100%{top:40%;transform:translateX(120%) scale(.28);opacity:0}}
.pdoc .paper{position:absolute;inset:0;padding:8% 7.5%;font-size:clamp(5px, 4.3cqw, 8.5px);overflow:hidden}
.pdoc .fx-meta{grid-template-columns:1fr;gap:.45em;margin-top:1.8em}
.pdoc .fx-meta span:nth-child(even){display:none}
.pdoc .bars{margin-top:1.8em}.pdoc .bars i{margin:.62em 0}
.pdoc .scan{position:absolute;left:-2%;right:-2%;top:0;height:1px;background:var(--signal);opacity:0;
  box-shadow:0 0 10px 2px var(--signal-glow);animation:pscan 6500ms linear both}
@keyframes pscan{0%{top:0;opacity:0}25.38%{top:0;opacity:0}25.5%{opacity:.9}30.5%{top:100%;opacity:.9}30.77%{opacity:0}100%{top:100%;opacity:0}}

/* the case card */
.pcase{position:absolute;left:46%;top:40%;width:44%;padding:1rem 1.1rem;background:rgba(18,24,38,.82);
  border:1px solid var(--rule-ink);backdrop-filter:blur(6px);opacity:0;
  animation:settle var(--dur-snap) var(--ease-snap) 2650ms both}
.pcase .case-title{font-size:clamp(.85rem, 1.9cqw, 1.05rem)}
.pcase .case-meta,.pcase .case-conf{font-size:clamp(.62rem, 1.4cqw, .8125rem)}

/* the exception */
.pheld{position:absolute;left:52%;top:58%;width:34%;opacity:0;container-type:inline-size;animation:pheld 6500ms linear both}
@keyframes pheld{
  0%{opacity:0;transform:translateY(-24px)}
  46.15%{opacity:0;transform:translateY(-24px);animation-timing-function:var(--ease-rise)}
  53.85%{opacity:1;transform:none}
  64.62%{opacity:1;transform:none;animation-timing-function:var(--ease-travel)}
  69.23%{opacity:0;transform:translateX(-40%) scale(.6)}
  100%{opacity:0;transform:translateX(-40%) scale(.6)}}
.pheld-doc{width:40%;aspect-ratio:8.5/11;padding:7% 7%;font-size:clamp(4.5px, 1.7cqw, 7px);overflow:hidden;
  box-shadow:0 20px 40px -24px rgba(0,0,0,.9),0 0 0 1px var(--brass-700)}
.pheld-doc .fx-meta{grid-template-columns:1fr;gap:.4em;margin-top:1.5em}
.pheld-doc .fx-meta span:nth-child(even){display:none}
.pheld-doc .bars{margin-top:1.6em}
.pheld-chip{position:absolute;left:44%;top:14%;display:inline-flex;align-items:center;gap:.55rem;padding:.5rem .7rem;
  border:1px solid rgba(230,190,114,.35);color:var(--brass-300);background:rgba(11,15,23,.7);
  font-size:clamp(.6rem, 1.35cqw, .78rem);white-space:nowrap;animation:6500ms steps(1,end) both}
.pheld-chip .pip{width:6px;height:6px;border-radius:50%;background:var(--brass-400)}
.pheld-chip.held{animation-name:chip-held}
.pheld-chip.ok{animation-name:chip-ok;border-color:var(--rule-ink);color:var(--on-ink-2)}
.pheld-chip.ok .pip{background:var(--bone-200)}
@keyframes chip-held{0%{opacity:1}61.54%{opacity:1}61.55%{opacity:0}100%{opacity:0}}
@keyframes chip-ok{0%{opacity:0}61.54%{opacity:0}61.55%{opacity:1}100%{opacity:1}}

/* filed */
.pfiled{position:absolute;left:19%;top:62%;transform:translateY(-50%);max-width:70%;color:var(--on-ink-2);
  font-size:clamp(.62rem, 1.45cqw, .8125rem);overflow-wrap:anywhere;opacity:0;animation:pfiled 6500ms linear both}
@keyframes pfiled{0%{opacity:0;transform:translateY(calc(-50% + 12px))}76.92%{opacity:0;transform:translateY(calc(-50% + 12px));animation-timing-function:var(--ease-rise)}84%{opacity:1;transform:translateY(-50%)}100%{opacity:1;transform:translateY(-50%)}}

/* notified */
.pnotify{position:absolute;left:19%;top:80%;transform:translateY(-50%);display:inline-flex;align-items:center;gap:.6rem;
  padding:.55rem .8rem;border:1px solid var(--rule-ink);background:rgba(11,15,23,.7);color:var(--on-ink-2);
  font-size:clamp(.62rem, 1.45cqw, .8125rem);white-space:nowrap;opacity:0;animation:pnotify 6500ms linear both}
@keyframes pnotify{0%{opacity:0;transform:translateY(calc(-50% + 14px))}92.31%{opacity:0;transform:translateY(calc(-50% + 14px));animation-timing-function:var(--ease-rise)}98%{opacity:1;transform:translateY(-50%)}100%{opacity:1;transform:translateY(-50%)}}
.pnotify .dot{width:6px;height:6px;border-radius:50%;background:var(--signal);box-shadow:0 0 8px var(--signal-glow);
  animation:pnotify-dot 6500ms linear both}
@keyframes pnotify-dot{0%{transform:scale(1)}94%{transform:scale(1)}96%{transform:scale(1.7);opacity:.5}98%{transform:scale(1);opacity:1}100%{transform:scale(1)}}

/* responsive */
@media (max-width:900px){
  .pipe-pin{grid-template-columns:1fr;grid-template-rows:auto minmax(0,1fr);gap:var(--s-5);padding-top:var(--s-7)}
  .pipe-copy{justify-content:flex-start;gap:var(--s-5)}
  .beats{min-height:9rem}
  .beats li{bottom:auto;top:0}
  .beat-h{font-size:1.0625rem;max-width:34ch}
  .beat-m{margin-top:var(--s-3);font-size:.75rem}
  .pdoc{width:30%;left:20%}
  .pcase{left:50%;width:48%;padding:.75rem .85rem}
  .pheld{left:54%;top:60%;width:40%}
  .pfiled,.pnotify{left:20%}
}
@media (max-width:640px){
  .pipe-h{font-size:clamp(2rem, 9vw, 2.6rem)}
  .st .lbl{display:none}
  .pdoc{width:30%;left:18%}
  .pcase{left:50%;width:50%;top:26%;padding:.65rem .75rem}
  .pcase .case-meta{display:none}
  .pcase .case-title{font-size:.8rem}
  .pheld{left:52%;top:66%;width:46%}
  .pheld-doc{width:44%}
  .pheld-chip{left:0;top:auto;bottom:-2.2rem;font-size:.62rem}
  .pfiled{max-width:78%;left:18%;font-size:.66rem}
  .pnotify{left:18%;white-space:normal;font-size:.66rem;max-width:78%}
}

/* reduced motion or no JS: a static composition, the sequence complete */
@media (prefers-reduced-motion: reduce){
  .pipe{height:auto}
  .pipe-pin{position:static;height:auto;min-height:100svh;grid-template-rows:auto}
  .beats{min-height:0;display:grid;gap:var(--s-5)}
  .beats li{position:static;opacity:1;transform:none}
  .pipe-stage{min-height:60svh}
}
.is-static .beats{min-height:0;display:grid;gap:var(--s-5)}
.is-static .beats li{position:static;opacity:1;transform:none}


/* ==========================================================================
   4 · What it removes. Pinned. It rains paper while the list is struck through.
   Timeline 5800 virtual ms; strikes at --d; the intro plays when the pin engages.
   ========================================================================== */
.removes{position:relative;height:calc(100svh + var(--removes-scrub, 230svh));background:var(--bone-100)}
.removes-pin{position:sticky;top:0;height:100svh;overflow:hidden;display:grid;align-content:start;
  padding:clamp(5rem, 15vh, 9rem) var(--gutter) var(--s-8)}
.removes-in{position:relative;z-index:2000;margin-left:clamp(0px, 24vw, 28rem);max-width:38rem}
.cuts{list-style:none;margin:var(--s-7) 0 0;padding:0;display:grid;gap:var(--s-5)}
.cut{font-family:var(--serif);font-size:var(--fs-h3);line-height:1.12;letter-spacing:-.015em;color:var(--on-bone);
  background-image:linear-gradient(var(--brass-700),var(--brass-700));background-repeat:no-repeat;
  background-size:0% 1px;background-position:0 .58em;-webkit-box-decoration-break:clone;box-decoration-break:clone;
  animation:cut 900ms var(--ease-travel) var(--d,0ms) both}
@keyframes cut{from{background-size:0% 1px;color:var(--on-bone)}to{background-size:100% 1px;color:var(--on-bone-3)}}

/* the rain: many small sheets. JS places them; scroll moves them. */
.rain{position:absolute;inset:0;z-index:1;pointer-events:none;overflow:hidden}
.sheet{position:absolute;left:0;top:0;aspect-ratio:8.5/11;will-change:transform;transform:translate3d(0,-200px,0);
  background:linear-gradient(180deg,var(--bone-50) 0%,var(--bone-100) 55%,var(--bone-200) 100%);
  box-shadow:0 8px 16px -8px rgba(11,15,23,.55),0 0 0 .5px rgba(11,15,23,.12)}
.sheet::before{content:"";position:absolute;left:14%;right:14%;top:20%;height:46%;
  background:repeating-linear-gradient(to bottom, rgba(11,15,23,.32) 0 1px, transparent 1px 4px)}

@media (max-width:640px){
  .removes-in{margin-left:0}
  .cuts{gap:var(--s-4)}
}
/* reduced motion: no pin, the list already struck, a still of the rain */
@media (prefers-reduced-motion: reduce){
  .removes{height:auto}
  .removes-pin{position:static;height:auto;min-height:100svh}
  .cut{animation:none;background-size:100% 1px;color:var(--on-bone-3)}
}
.no-js .cut{animation:none;background-size:100% 1px;color:var(--on-bone-3)}

/* ==========================================================================
   5 · Who it is for. Personal injury first. One line each, quiet.
   ========================================================================== */
.who{min-height:100svh;display:grid;align-content:center;padding:var(--section-pad) var(--gutter)}
.who-in{max-width:64rem;margin-left:clamp(0px, 8vw, 8rem)}
.who h2 .l{display:block}
.who-mono{margin-top:var(--s-5)}
.who-list{margin:var(--s-9) 0 0;display:grid;gap:0}
.who-row{display:grid;grid-template-columns:minmax(0,17rem) minmax(0,1fr);gap:var(--s-6);padding:var(--s-5) 0;border-top:1px solid var(--rule-ink)}
.who-row:last-child{border-bottom:1px solid var(--rule-ink)}
.who-row dt{font-family:var(--serif);font-size:var(--fs-h3);line-height:1.05;letter-spacing:-.015em;margin:0}
.who-row dd{margin:0;font-family:var(--sans);font-size:var(--fs-body);line-height:var(--lh-body);color:var(--on-ink-2);max-width:38ch;align-self:center}
.who-row.is-first dd{color:var(--on-ink)}
.who-row:not(.is-first) dt{color:var(--on-ink-2)}
@media (max-width:760px){
  .who-in{margin-left:0}
  .who-row{grid-template-columns:1fr;gap:var(--s-2)}
  .who-row dt{font-size:1.5rem}
}

/* ==========================================================================
   6 · What is next. Channels converging on one route.
   ========================================================================== */
.next{min-height:100svh;display:grid;grid-template-columns:minmax(0,40fr) minmax(0,60fr);align-items:center;gap:var(--s-8);
  padding:var(--section-pad) var(--gutter)}
.next-copy .v-lead{margin-top:var(--s-6)}
.next-fig{margin:0;width:100%}
.routes{width:100%;height:auto;display:block;overflow:visible}
.routes .ch{fill:none;stroke-width:1.25;stroke-linecap:round;stroke-dasharray:1;stroke-dashoffset:1;
  transition:stroke-dashoffset 1600ms var(--ease-travel)}
.routes .ch.live{stroke:var(--brass-700);stroke-width:1.75}
.routes .ch.soon{stroke:rgba(11,15,23,.5)}
.routes .ch.later{stroke:rgba(11,15,23,.3);stroke-dasharray:.02 .015;stroke-dashoffset:0;opacity:0;transition:opacity 900ms var(--ease-rise) 1200ms}
.routes .ch.out{stroke:var(--ink-900);stroke-width:1.75;transition-delay:1500ms}
.routes .node{fill:var(--brass-500);opacity:0;transition:opacity 500ms var(--ease-rise) 1500ms}
.routes .lbl{font-family:var(--mono);font-size:11px;letter-spacing:.14em;text-transform:uppercase;fill:var(--on-bone-3);
  opacity:0;transition:opacity 700ms var(--ease-rise)}
.routes .out-lbl{fill:var(--on-bone-2);transition-delay:1800ms}
.reveal.in .routes .ch{stroke-dashoffset:0}
.reveal.in .routes .ch.later,.reveal.in .routes .node,.reveal.in .routes .lbl{opacity:1}
.reveal.in .routes .lbl:nth-of-type(1){transition-delay:200ms}.reveal.in .routes .lbl:nth-of-type(2){transition-delay:400ms}
.reveal.in .routes .lbl:nth-of-type(3){transition-delay:600ms}.reveal.in .routes .lbl:nth-of-type(4){transition-delay:1200ms}
.reveal.in .routes .ch.live{transition-delay:100ms}.reveal.in .routes .ch.soon:nth-of-type(2){transition-delay:400ms}
.reveal.in .routes .ch.soon:nth-of-type(3){transition-delay:600ms}
.no-js .routes .ch{stroke-dashoffset:0}.no-js .routes .lbl,.no-js .routes .node,.no-js .routes .ch.later{opacity:1}
.next-fig.reveal>*{opacity:1;transform:none}   /* the figure reveals its own parts */
@media (max-width:900px){
  .next{grid-template-columns:1fr;gap:var(--s-7);align-content:center}
  .next-fig{max-width:36rem}
}
@media (max-width:640px){.routes .lbl{font-size:13px}}

/* ==========================================================================
   7 · The close. The covenant, then the one action.
   ========================================================================== */
.close{min-height:100svh;display:grid;grid-template-columns:minmax(0,52fr) minmax(0,48fr);gap:var(--s-9);align-items:start;
  padding:var(--section-pad) var(--gutter)}
.close-h{font-family:var(--serif);font-weight:400;font-size:clamp(2.75rem, .9rem + 5.4vw, 6.25rem);line-height:.94;letter-spacing:-.03em}
.close-h .l{display:block}
.close-h .q{font-style:italic;color:var(--on-ink-2)}
.close-copy .v-lead{margin-top:var(--s-7)}

.demo-form{display:grid;gap:var(--s-5);max-width:34rem;margin-top:.6rem}
.f-row{display:grid;grid-template-columns:1fr 1fr;gap:var(--s-5)}
.f-field{display:grid;gap:.5rem;min-width:0}
.f-field .v-label{color:var(--on-ink-2)}
.f-field em{font-style:normal;text-transform:none;letter-spacing:0;color:var(--on-ink-3);margin-left:.4em}
.f-field input,.f-field select,.f-field textarea{width:100%;font:inherit;font-size:var(--fs-body);color:var(--on-ink);
  background:rgba(239,232,217,.04);border:1px solid var(--rule-ink);border-radius:2px;padding:.8rem .9rem;min-width:0;
  transition:border-color 480ms var(--ease-rise),background 480ms var(--ease-rise)}
.f-field select{appearance:none;-webkit-appearance:none;background-image:linear-gradient(45deg,transparent 50%,var(--on-ink-2) 50%),linear-gradient(-45deg,transparent 50%,var(--on-ink-2) 50%);
  background-position:calc(100% - 1.15rem) 55%,calc(100% - .85rem) 55%;background-size:.3rem .3rem;background-repeat:no-repeat;padding-right:2.4rem}
.f-field select option{color:var(--ink-900)}
.f-field textarea{resize:vertical;min-height:6rem}
.f-field input:hover,.f-field select:hover,.f-field textarea:hover{border-color:var(--on-ink-3)}
.f-field input:focus-visible,.f-field select:focus-visible,.f-field textarea:focus-visible{outline:2px solid var(--signal);outline-offset:2px;border-color:transparent}
.f-field.is-bad input,.f-field.is-bad textarea{border-color:var(--brass-400)}
.f-hp{position:absolute !important;left:-10000px;top:auto;width:1px;height:1px;overflow:hidden}
.f-foot{display:flex;align-items:center;gap:var(--s-5);flex-wrap:wrap}
.f-status{margin:0;color:var(--on-ink-2);min-height:1.5em}
.f-status.is-error{color:var(--brass-300)}
.f-status.is-ok{color:var(--signal)}
.demo-form.is-sent .f-row,.demo-form.is-sent .f-field,.demo-form.is-sent button{display:none}
@media (max-width:900px){
  .close{grid-template-columns:1fr;gap:var(--s-8)}
  .demo-form{max-width:40rem}
}
@media (max-width:560px){.f-row{grid-template-columns:1fr}}

/* ---- Footer ---------------------------------------------------------------- */
.foot{display:flex;align-items:center;justify-content:space-between;gap:var(--s-5);flex-wrap:wrap;
  padding:var(--s-6) var(--gutter) var(--s-7);border-top:1px solid var(--rule-ink)}
.foot-links{display:flex;gap:2rem}
.foot .v-mono{margin:0}

/* ---- About page ------------------------------------------------------------ */
.about{min-height:100svh;display:grid;grid-template-columns:minmax(0,38fr) minmax(0,62fr);gap:var(--s-8);align-items:start;
  padding:calc(var(--s-8) + 4rem) var(--gutter) var(--s-9)}
.about h1 .l{display:block}
.about-body{max-width:36rem;display:grid;gap:var(--s-5);margin-top:.8rem}
.about-body p{font-size:var(--fs-lead);line-height:1.5;color:var(--on-ink-2)}
.about-body p strong{font-weight:500;color:var(--on-ink)}
.about-body p.v-mono{margin-top:var(--s-4);font-size:var(--fs-mono);line-height:var(--lh-mono)}
.about-cta{margin-top:var(--s-7)}
@media (max-width:900px){.about{grid-template-columns:1fr;gap:var(--s-7)}}

/* ---- Back to top: bottom-left, appears once the hero is behind you ---------- */
.totop{position:fixed;left:clamp(1rem, 3vw, 2.5rem);bottom:clamp(1rem, 3vw, 2rem);z-index:50;width:2.75rem;height:2.75rem;
  display:grid;place-items:center;color:var(--on-ink);background:rgba(11,15,23,.82);border:1px solid rgba(239,232,217,.28);border-radius:2px;
  backdrop-filter:blur(6px);opacity:0;visibility:hidden;transform:translateY(8px);
  transition:opacity 480ms var(--ease-rise),transform 480ms var(--ease-rise),visibility 0s 480ms,border-color 480ms var(--ease-rise)}
.totop.is-on{opacity:1;visibility:visible;transform:none;transition:opacity 480ms var(--ease-rise),transform 480ms var(--ease-rise),visibility 0s 0s,border-color 480ms var(--ease-rise)}
.totop:hover{border-color:var(--on-ink)}
.totop:focus-visible{outline:2px solid var(--signal);outline-offset:3px}
