/* Living Atlas — the shared style layer (WO-033 Phase 1).
   ONE stylesheet for every page. It is the founder's design idiom as
   established by the two transplants (WO-031 Timeline, WO-032 decision
   pages), extracted — not redesigned. Order of business:
     §1 tokens        — the idiom's literals named once (used by §5 only;
                        the transplanted rules in §3–§4 keep their literals
                        verbatim so Phase 1 stillness holds by construction)
     §2 base          — the mockups' own <style> block (both mockups agree)
     §3 shared        — rules both transplant blocks carried identically:
                        chips, toggles, reduced motion, the header band
     §4 transplants   — the WO-031 and WO-032 addition blocks, verbatim,
                        each rule an enumerated intervention listed in its
                        order's PR Deviations
     §5 components    — the idiom written once as classes for the pages
                        that have no mockup (index pages, entities, 404):
                        mono labels, chips, cards, silence blocks, tables,
                        the Phase B machinery (WO-030) in the dark idiom
   The epistemics remain the visual language: coral solid = verified/in
   force · cyan dashed = proposed/reported · slate ◐ = inferred (word
   visible) · amber ◈ = monitored question. status_class() in the build is
   still the one function that assigns a status class; nothing here maps a
   status to a colour on its own. Fonts are self-hosted via fonts.css. */

/* ── §1 tokens ─────────────────────────────────────────────────────────── */
:root{
  --ink:#0B1418;        /* page ground (mockup body) */
  --panel:#0E1B20;      /* recessed layer */
  --card:#152730;       /* raised row */
  --raised:#132229;     /* continue / exit cards */
  --cream:#EDE9E0;      /* display text */
  --text:#C3CFD1;       /* body prose */
  --text-2:#9DAFB2;     /* secondary prose, chips */
  --meta:#8AA0A4;       /* mono meta */
  --meta-2:#6E858A;     /* mono labels, kickers */
  --hair:#223037;       /* structural rules (header, steps) */
  --hair-card:#1B2A31;  /* card borders */
  --hair-row:#16232A;   /* row rules inside cards */
  --rule:#3A4C54;       /* section-header rule */
  --edge:#2A3A42;       /* chip / button edge */
  --coral:#F08A6B; --cyan:#67D7E5; --amber:#E8B860;
  --font-text:'Schibsted Grotesk',system-ui,sans-serif;
  --font-mono:'IBM Plex Mono',ui-monospace,monospace;
}
@supports (color: oklch(0% 0 0)){
  :root{--coral:oklch(.70 .17 35); --cyan:oklch(.82 .14 190); --amber:oklch(78% .13 75)}
}

/* ── §2 base — the mockups' own style block ────────────────────────────── */
@keyframes atlasGrow { from { transform: scaleX(0); } to { transform: scaleX(1); } }
@keyframes atlasFade { from { opacity: 0; } to { opacity: 1; } }
html { scroll-behavior: smooth; }
body { margin: 0; background: #0B1418; color: #EDE9E0; font-family: 'Schibsted Grotesk', sans-serif; }
a { color: inherit; }
a:hover { color: oklch(.70 .17 35); }

/* ── §3 shared — identical in both transplant blocks ───────────────────── */
a.src{font-family:'IBM Plex Mono',monospace; font-size:11px; text-decoration:none; padding:1px 6px; border:1px solid #2A3A42; color:#9DAFB2; white-space:nowrap; display:inline-block}
a.src:hover{color:oklch(.70 .17 35)}
details>summary{list-style:none; cursor:pointer}
details>summary::-webkit-details-marker{display:none}
@media (prefers-reduced-motion: reduce){
  *{animation:none !important; transition:none !important}
  html{scroll-behavior:auto}
}
/* the canonical site band (one build function emits it on every page):
   WO-031 header ruling, revised (2026-09-04, PR #37 review) — at ≤600px
   the band is TWO stacked rows: the wordmark row, then all five items in
   one full-width row, no horizontal scroll, nothing cut off. To fit five at
   375px the boxes are dropped for plain mono labels a step smaller, spread
   edge to edge; the current page carries a coral underline. Desktop
   untouched. (WO-033: the current-item selector is `.on` on every page.) */
@media (max-width:600px){
  .pad{padding-left:20px !important; padding-right:20px !important}
  .hdr{display:block !important; padding:10px 20px 0 !important; white-space:normal !important}
  .hdr>a{font-size:10px !important; letter-spacing:.16em !important; padding-bottom:9px; display:block}
  .hdr>div{display:flex; justify-content:space-between; gap:0 !important; padding-bottom:10px; flex-wrap:nowrap}
  .hdr>div a{border:none !important; padding:0 0 3px !important; font-size:10px !important; letter-spacing:.05em !important; flex:0 0 auto}
  .hdr>div a.on{color:#EDE9E0 !important; border-bottom:2px solid oklch(.70 .17 35) !important}
}

/* ── §4a the Timeline (WO-031 block, verbatim) ─────────────────────────── */
.cites{flex-wrap:wrap}
.exitcard:hover{border-color:oklch(.70 .17 35)}
.rulenote{font-family:'IBM Plex Mono',monospace; font-size:11px; line-height:1.8; color:#9DAFB2; padding:12px 0; overflow-wrap:anywhere}
.rulenote a{color:#C3CFD1}
@media (max-width:900px){
  #timeline{display:block !important}
  #tl-panel{position:static !important; height:auto !important; max-height:none !important; margin-bottom:40px}
  [data-step]{min-height:0 !important; padding:40px 0}
  .ori3{grid-template-columns:1fr !important}
  .ori3>div{border-right:none !important; padding:16px 0 !important; border-bottom:1px solid #223037}
  .ori3>div:last-child{border-bottom:none}
}
@media (max-width:600px){
  /* header→hero gap + hero internal spacing, tightened proportionally */
  .hero-wrap{padding:36px 0 44px !important}
  .hero-p{margin-bottom:24px !important}
  .hero-wrap div a{padding:11px 14px !important}
  .hero-p{font-size:25px !important}
  .syear{font-size:32px !important}
  .stitle{font-size:24px !important}
  .cnum{font-size:19px !important}
  .blab{font-size:8px !important; letter-spacing:0 !important}
  /* WO-031 review fix (2026-09-04, PR #37 phone review): map node text
     clamped in the mockup's idiom — kind to one ellipsised line, name to
     two clamped lines one step smaller, meta hidden at phone width. */
  .nkind{white-space:nowrap; overflow:hidden; text-overflow:ellipsis}
  .nname{font-size:11px !important; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden}
  .nmeta{display:none !important}
}

/* ── §4b the decision pages (WO-032 block, verbatim) ───────────────────── */
.layer>summary{padding:18px 22px; display:grid; grid-template-columns:minmax(0,1fr) auto auto; gap:20px; align-items:start}
.layer .caret-c::after{content:"+"}
.layer[open] .caret-c::after{content:"−"}
.claim{background:transparent; border-top:1px solid #16232A; padding:12px 0; font-size:15px; line-height:1.65; color:#C3CFD1}
.claim p{margin:0 0 8px; max-width:82ch}
.claim-meta{font-family:'IBM Plex Mono',monospace; font-size:10px; color:#6E858A; display:flex; flex-wrap:wrap; gap:6px; align-items:baseline; min-width:0; overflow-wrap:anywhere}
.stlabel{letter-spacing:.1em; text-transform:uppercase}
.st-verified-t{color:oklch(.70 .17 35)} .st-reported-t,.st-proposed-t{color:oklch(.82 .14 190)}
.st-inferred-t,.st-resolved-t{color:#8AA0A4} .st-monitored-t{color:oklch(78% .13 75)}
.promo{color:oklch(.82 .14 190); font-family:'IBM Plex Mono',monospace; font-size:10px; letter-spacing:.08em; text-transform:uppercase}
.claimedby{color:#8AA0A4; font-family:'IBM Plex Mono',monospace; font-size:10px}
details.more>summary,details.prov>summary{font-family:'IBM Plex Mono',monospace; font-size:10px; letter-spacing:.08em; text-transform:uppercase; color:#6E858A; padding:4px 0}
details.prov{display:inline-block}
details.prov code{font-size:10px; color:#8AA0A4; overflow-wrap:anywhere; white-space:normal}
.silence{border:1px dashed oklch(78% .13 75); background:#0E1B20; padding:14px 18px; margin:14px 0}
.silence .wt{font-family:'IBM Plex Mono',monospace; font-size:10px; letter-spacing:.16em; text-transform:uppercase; color:oklch(78% .13 75); margin-bottom:6px}
.silence .why{font-size:13px; line-height:1.6; color:#9DAFB2; margin:0; max-width:76ch}
table.docket{width:100%; border-collapse:collapse; font-size:13px; line-height:1.5; color:#C3CFD1}
table.docket th{font-family:'IBM Plex Mono',monospace; font-size:9px; letter-spacing:.14em; text-transform:uppercase; color:#6E858A; text-align:left; border-bottom:1px solid #3A4C54; padding:6px 10px 6px 0}
table.docket td{border-bottom:1px solid #16232A; padding:9px 10px 9px 0; vertical-align:top}
table.docket .mono{font-family:'IBM Plex Mono',monospace}
table.docket .fine{color:#8AA0A4; font-size:12px}
.pill{font-family:'IBM Plex Mono',monospace; font-size:9px; letter-spacing:.1em; text-transform:uppercase; padding:2px 7px; border:1px solid #2A3A42; color:#9DAFB2}
.pill-fact{color:oklch(.70 .17 35); border-color:oklch(.70 .17 35)}
.pill-open{color:oklch(.82 .14 190); border-style:dashed; border-color:oklch(.82 .14 190)}
.pill-warn{color:oklch(78% .13 75); border-style:dashed; border-color:oklch(78% .13 75)}
.pill-plain{color:#9DAFB2}
p.fine{font-size:12px; line-height:1.6; color:#8AA0A4}
p.fine a{color:inherit}
.scrubber h2{font-weight:600; font-size:22px; letter-spacing:-.02em}
.scrubber .lede-s{font-size:14px; color:#9DAFB2; max-width:76ch}
.scrubber ol.timeline{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:10px}
.scrubber li.tstate{background:#0E1B20; border:1px solid #1B2A31; padding:14px 18px}
.scrubber .tdate{font-family:'IBM Plex Mono',monospace; font-size:10px; color:#6E858A}
.scrubber h3{font-size:16px; margin:4px 0 6px}
.scrubber .tinstr{font-family:'IBM Plex Mono',monospace; font-size:10px; color:#8AA0A4; margin-bottom:6px}
.scrubber .scrub-controls{display:flex; gap:10px; align-items:center; margin:10px 0 4px}
.scrubber .sbtn{font:inherit; background:none; border:1px solid #2A3A42; color:#C3CFD1; padding:7px 10px; cursor:pointer; flex:0 0 auto; display:inline-flex; align-items:center; justify-content:center; line-height:0}
/* WO-034 PR #41 review (2026-09-22): the arrows are inline SVG triangles
   (◀ ▶ rendered as emoji on iOS); currentColor, same size at every width. */
.scrubber .sbtn svg{width:10px; height:12px; display:block}
.scrubber .sbtn:hover{color:oklch(.70 .17 35); border-color:oklch(.70 .17 35)}
/* WO-033 PR #39 review 2 (2026-09-21): the state label is its own row below
   the controls (min-height reserved), so varying label text never moves the
   arrows or the slider across the six states. */
.scrubber .scrub-pos{display:block; font-size:11px; line-height:1.6; min-height:18px; color:#6E858A; margin:0 0 12px}
.scrubber .scrub-pos:empty{display:none}
/* WO-033 PR #39 review 3 (2026-09-21): the decision page's in-page anchors
   as a TOC under the title — unboxed, smaller mono, content not chrome. */
.toc{display:flex; flex-wrap:wrap; gap:6px 18px; align-items:baseline; margin:-8px 0 28px; font-family:'IBM Plex Mono',monospace; font-size:10px; letter-spacing:.12em; text-transform:uppercase}
.toc-l{color:#6E858A}
.toc a{color:#9DAFB2; text-decoration:none; border-bottom:1px solid #2A3A42; padding-bottom:2px}
.toc a:hover{color:oklch(.70 .17 35); border-bottom-color:oklch(.70 .17 35)}
/* WO-033 Phase 3 — the thesis scrubber, fixed. The two hiding rules that
   make the range a scrubber lived in the retired v1 sheet (atlas.css) and
   never reached the transplanted page; they live here now. Without
   JavaScript (no .js-on) and under prefers-reduced-motion (the script
   stands down) every state renders stacked, dated. */
.scrubber.js-on .tstate{display:none}
.scrubber.js-on .tstate.current{display:block}
.scrubber .scrub-controls input[type=range]{flex:1; accent-color:#EDE9E0; min-width:0}
.scrubber .tline{border-top:1px solid #16232A; padding:10px 0 4px; margin:0}
.scrubber .tline:first-of-type{border-top:0; padding-top:4px}
.scrubber .tline p{margin:0 0 6px; font-size:15px; line-height:1.6; color:#C3CFD1; max-width:82ch}
.scrubber .tstate>.claim-meta{margin-top:8px}
.scrubber .tstate-head{display:flex; justify-content:space-between; align-items:baseline; gap:12px; flex-wrap:wrap}
@media (max-width:900px){
  .hero2{grid-template-columns:1fr !important; gap:28px !important}
  .kf4{grid-template-columns:1fr 1fr !important}
  .kf4>div{border-right:none !important; padding:18px 0 !important; border-bottom:1px solid #1B2A31}
  .bl-row{grid-template-columns:1fr !important; gap:6px !important}
  .lay-row{grid-template-columns:minmax(0,1fr) auto !important}
  .lay-row .caret-c{display:none}
  .edge-row{grid-template-columns:1fr !important; gap:8px !important}
  .cont3{grid-template-columns:1fr !important}
}
@media (max-width:600px){
  /* (the WO-032 contextual-bar phone rules were removed here with the bar
     itself — WO-033 PR #39 review 3; the anchors are the .toc under the
     title, which wraps by itself) */
  .pgh1{font-size:40px !important}
  .pgstat{font-size:20px !important; margin-bottom:22px !important}
  .heropad{padding-top:36px !important}
  .kf4{grid-template-columns:1fr !important}
  .kfv{font-size:26px !important}
  .sechdr{flex-wrap:wrap}
  .sechdr>div{flex-wrap:wrap !important}
  .layer>summary{padding:14px 14px !important; gap:10px !important}
  .layer .lbody{padding:0 14px 16px !important}
  /* WO-034 PR #41 review (2026-09-22): no two-column squeeze on phones —
     the status pill takes its own row above the layer title; the title and
     summary run the full card width. */
  .lay-row{display:flex !important; flex-direction:column !important; align-items:flex-start !important; gap:8px !important}
  .lay-row>span:nth-child(2){order:-1}
  .lay-row>span:first-child{width:100%}
  .cites{flex-wrap:wrap}
}

/* ── §5 components — the idiom written once as classes, for the pages that
      have no mockup (index pages, entity pages, 404). Every rule is scoped
      under body.v2 so nothing here can reach a transplanted page (Phase 1
      stillness holds). Values are the decision mockup's own literals via
      the §1 tokens: hero = .pgh1/.pgstat, section header = the coral mono
      label over a #3A4C54 rule (.sechdr), layer title = 19px/600/-.02em,
      dossier prose = 15px/1.65 #C3CFD1, cards = #0E1B20 on #1B2A31,
      status left-borders = 3px in the status colour (assigned by
      status_class() in the build, never here). ──────────────────────── */
.v2 main{padding:72px 0 0; display:block}
.v2 .pgno{font-family:var(--font-mono); font-size:11px; letter-spacing:.18em; text-transform:uppercase; color:var(--meta-2); margin:0 0 20px}
.v2 .pgtitle{font-weight:700; font-size:66px; line-height:1.02; letter-spacing:-.035em; margin:0 0 26px; color:var(--cream)}
.v2 .statement,.v2 .qframe{font-size:26px; line-height:1.45; letter-spacing:-.01em; margin:0 0 30px; max-width:34ch; text-wrap:pretty; color:var(--cream)}
.v2 h2{font-family:var(--font-mono); font-weight:500; font-size:10px; letter-spacing:.2em; text-transform:uppercase; color:var(--coral); border-bottom:1px solid var(--rule); padding-bottom:10px; margin:64px 0 26px}
.v2 h3{font-weight:600; font-size:19px; letter-spacing:-.02em; line-height:1.3; margin:0 0 8px; color:var(--cream)}
.v2 h3 a{text-decoration:none}
.v2 h4.label{font-family:var(--font-mono); font-size:10px; letter-spacing:.16em; text-transform:uppercase; color:var(--meta-2); font-weight:500; margin:18px 0 8px}
.v2 p{font-size:15px; line-height:1.65; color:var(--text); max-width:82ch; margin:0 0 12px}
.v2 .fine,.v2 p.fine{font-size:12px; line-height:1.6; color:var(--meta)}
.v2 .fine a,.v2 p.fine a{color:inherit}
.v2 .mono{font-family:var(--font-mono)}
.v2 code{font-family:var(--font-mono); font-size:.92em; color:var(--meta)}
.v2 .rec-note{font-family:var(--font-mono); font-size:10px; letter-spacing:.16em; text-transform:uppercase; color:var(--meta-2); margin:48px 0 12px}
.v2 .card,.v2 .datestrip,.v2 .gap-decision,.v2 .qcard,.v2 .grand,.v2 .money-group{background:var(--panel); border:1px solid var(--hair-card); padding:22px 26px; margin:0 0 14px}
.v2 .money-group h2{margin-top:0}
.v2 .qcard{border-left:3px solid var(--amber)}
.v2 .qcard.q-resolved{border-left:3px solid var(--meta)}
.v2 .qid{font-family:var(--font-mono); font-size:10px; letter-spacing:.12em; text-transform:uppercase; color:var(--amber); display:block; margin-bottom:8px}
.v2 .q-resolved .qid{color:var(--meta)}
.v2 .qstat{color:var(--cream)}
.v2 .qmeta{font-size:14px; line-height:1.55; color:var(--text-2); margin-top:10px}
.v2 .qmeta b{color:var(--cream); font-weight:600}
.v2 .qmeta ul{margin:6px 0 0 18px; padding:0}
.v2 .wq{border:1px dashed var(--amber); background:var(--panel); padding:22px 26px; overflow-wrap:anywhere; min-width:0}
.v2 .wq .wt{font-family:var(--font-mono); font-size:10px; letter-spacing:.16em; text-transform:uppercase; color:var(--amber); margin-bottom:8px}
.v2 .wq h3{font-size:16px}
.v2 .wq .why{font-size:14px; color:var(--text-2)}
.v2 .wq .cust{font-size:13px; margin-top:10px}
.v2 .wq details{margin-top:10px}
.v2 .wq summary{font-family:var(--font-mono); font-size:10px; letter-spacing:.1em; text-transform:uppercase; color:var(--amber); padding:4px 0}
.v2 .ch119{font-family:var(--font-mono); font-size:11px; line-height:1.6; color:var(--text-2); background:var(--ink); border:1px solid var(--hair-card); padding:14px; white-space:pre-wrap; overflow-wrap:anywhere; margin:8px 0 12px}
.v2 .wantgrid{display:grid; grid-template-columns:1fr 1fr; gap:14px; margin-top:22px}
.v2 .banner{border:1px solid var(--coral); background:var(--panel); padding:22px 26px; margin:0 0 22px; font-size:15px; line-height:1.65; color:var(--text)}
.v2 .banner-open{border:1px dashed var(--cyan)}
.v2 .banner-monitored{border:1px dashed var(--amber)}
.v2 .datestrip{display:grid; gap:14px}
.v2 .ds-row{display:grid; grid-template-columns:minmax(160px,240px) minmax(0,1fr); gap:16px; align-items:baseline}
.v2 .ds-who{font-family:var(--font-mono); font-size:11px; letter-spacing:.06em; text-transform:uppercase; color:var(--cream)}
.v2 .ds-what{font-size:14px; line-height:1.55; color:var(--text-2)}
.v2 .money-total{font-family:var(--font-mono); font-size:13px; color:var(--cream); margin:0 0 12px; font-variant-numeric:tabular-nums}
.v2 .money-total b,.v2 .grand b{color:var(--coral)}
.v2 .money-total .prop,.v2 .grand .prop{color:var(--cyan)}
.v2 .grand{font-family:var(--font-mono); font-size:13px; line-height:1.9; color:var(--text); font-variant-numeric:tabular-nums; margin-top:34px}
.v2 .grand b,.v2 .grand .prop{font-size:19px}
.v2 .gap-cols{display:grid; grid-template-columns:1fr 1fr; gap:0; border:1px solid var(--hair-card); margin-top:10px}
.v2 .gap-col{padding:16px 18px; min-width:0}
.v2 .gap-col.pitch{border-right:1px solid var(--hair-card)}
.v2 .gh{font-family:var(--font-mono); font-size:10px; letter-spacing:.12em; text-transform:uppercase; margin-bottom:8px}
.v2 .pitch .gh{color:var(--cyan)} .v2 .bind .gh{color:var(--coral)}
.v2 .gap-col p{margin:0 0 8px} .v2 .pitch p{color:var(--text-2)}
.v2 .nogap{border:1px dashed var(--edge); padding:14px 18px; margin-top:10px; color:var(--text-2); font-size:15px; line-height:1.6}
.v2 .claim-meta{margin-top:6px}
.v2 .stlabel{font-family:var(--font-mono); font-size:10px}
.v2 .edges{list-style:none; margin:0; padding:0; display:flex; flex-direction:column; gap:8px}
.v2 .edge{background:var(--card); padding:15px 18px; font-size:15px; line-height:1.55; color:var(--text); border-left:3px solid var(--edge)}
.v2 .edge.st-verified{border-left-color:var(--coral)}
.v2 .edge.st-reported,.v2 .edge.st-proposed{border-left-color:var(--cyan); border-left-style:dashed}
.v2 .edge.st-inferred,.v2 .edge.st-resolved{border-left-color:var(--meta)}
.v2 .edge.st-monitored{border-left-color:var(--amber); border-left-style:dashed}
.v2 .edge b{font-weight:600; color:var(--cream)}
.v2 .rel-t{font-family:var(--font-mono); font-size:11px; color:var(--meta)}
.v2 .srclist{list-style:none; margin:0; padding:0}
.v2 .srclist li{font-size:14px; color:var(--text-2); margin:6px 0}
.v2 table.docket{margin-top:6px}
.v2 table.docket td{overflow-wrap:anywhere}
.v2 table.docket td.mono{white-space:nowrap; font-variant-numeric:tabular-nums}
.v2 table.docket td a,.v2 .ds-who a{text-decoration:none; color:var(--cream); font-weight:600}
.v2 .pill{white-space:nowrap; display:inline-block; margin-top:4px}
.v2 .srctable td:first-child{font-family:var(--font-mono); font-weight:600; white-space:nowrap}
/* WO-035 addendum 2 (PR #43, founder formatting fix): the anchored
   highlight clears the text on all four sides without shifting layout for
   non-targeted entries. A table row cannot take padding plus a negative
   margin, so the source-row ring is drawn OUTSIDE the row box (positive
   outline offset: 10px past the row edge — with the cells' 9px vertical
   padding that is ≥10px of clearance on every side, and nothing reflows).
   The Q-cards and wanted cards, already padded 22px 26px, take the same
   amber ring inside their own padding. Every anchored id scrolls to rest
   below the sticky band (measured: 58px at 1400, 60px two-row at ≤600)
   plus the ring's offset and breathing room, so the ring is never cut off
   on arrival. */
:root{--hdr-h:58px}
@media (max-width:600px){:root{--hdr-h:60px}}
[id]{scroll-margin-top:calc(var(--hdr-h) + 28px)}
.v2 tr:target{outline:2px solid var(--amber); outline-offset:10px}
.v2 .qcard:target,.v2 .wq:target{outline:2px solid var(--amber); outline-offset:-2px}
.v2 .instr-state{white-space:normal}
.v2 .foot{border-top:1px solid var(--hair); margin-top:64px}
.v2 :focus-visible{outline:2px solid var(--cream); outline-offset:2px}
.v2 .e404{padding:120px 0 80px; max-width:60ch}
/* WO-035 — the Money page on the four questions: the same idiom as
   classes (top-line figures = the decision mockup's key-fact figure,
   32px/700/-.025em tabular; rule lines = the Timeline's rulenote; funder
   cards = .card; the funder × decision matrix = flex cells so no table
   overflows at phone width). Stage colours come from the tokens: coral
   committed, cyan requested/reported — nothing here maps a status. */
.v2 .topline{display:flex; gap:32px; flex-wrap:wrap; margin:0 0 6px}
.v2 .kfig{display:flex; flex-direction:column; gap:4px; margin:10px 0}
.v2 .kfig .kv{font-weight:700; font-size:22px; letter-spacing:-.02em; font-variant-numeric:tabular-nums; line-height:1.1}
.v2 .kfig.tfig .kv{font-size:32px; letter-spacing:-.025em}
.v2 .kfig .kl{font-family:var(--font-mono); font-size:10px; letter-spacing:.14em; text-transform:uppercase; color:var(--meta-2)}
.v2 .kfig .kc,.v2 .mxcell .kc{display:flex; flex-wrap:wrap; gap:4px; margin-top:2px}
.v2 .c-committed{color:var(--coral)} .v2 .c-requested,.v2 .c-reported{color:var(--cyan)}
.v2 .rule{font-family:var(--font-mono); font-size:11px; line-height:1.8; color:var(--text-2); margin:8px 0 18px; max-width:90ch; overflow-wrap:anywhere}
.v2 .rule a{color:var(--text)}
.v2 .recon{font-size:15px; line-height:1.65; color:var(--text); max-width:82ch; margin:18px 0 0; padding:16px 20px; border:1px dashed var(--edge); background:var(--panel)}
.v2 .recon .kc{display:inline-flex; flex-wrap:wrap; gap:4px; vertical-align:middle}
.v2 .recon .rlink{font-family:var(--font-mono); font-size:11px; color:var(--text-2); white-space:nowrap}
.v2 .fgrid{display:grid; grid-template-columns:repeat(4,minmax(0,1fr)); gap:14px}
.v2 .fcard{margin:0; min-width:0}
.v2 .fcard h3{font-family:var(--font-mono); font-weight:500; font-size:11px; letter-spacing:.14em; text-transform:uppercase; color:var(--cream); margin:0 0 6px}
.v2 .fcard .fpsub{margin:0 0 4px; color:var(--meta-2)}
.v2 .fparties{border-top:1px solid var(--hair-row); margin-top:10px; padding-top:8px}
.v2 .fparties .kl{font-family:var(--font-mono); font-size:10px; letter-spacing:.14em; text-transform:uppercase; color:var(--meta-2); margin-bottom:6px}
.v2 .fparty{display:flex; flex-direction:column; gap:2px; padding:6px 0; border-top:1px solid var(--hair-row); font-size:12px; line-height:1.5}
.v2 .fparty:first-of-type{border-top:0}
.v2 .fpname{color:var(--cream); font-weight:600}
.v2 .fpv{font-family:var(--font-mono); font-size:11px; font-variant-numeric:tabular-nums; color:var(--text-2); display:flex; flex-wrap:wrap; gap:4px 8px; align-items:baseline}
.v2 .mx{border:1px solid var(--hair-card); background:var(--panel)}
.v2 .mxrow{display:grid; grid-template-columns:minmax(150px,200px) minmax(0,1fr); gap:16px; padding:16px 22px; border-top:1px solid var(--hair-row)}
.v2 .mxrow:first-child{border-top:0}
.v2 .mxwho{font-family:var(--font-mono); font-size:11px; letter-spacing:.06em; text-transform:uppercase; color:var(--cream)}
.v2 .mxcells{display:flex; flex-wrap:wrap; gap:8px}
.v2 .mxcell{display:flex; flex-direction:column; gap:3px; min-width:120px; max-width:200px; padding:10px 12px; background:var(--card); text-decoration:none; font-size:12px}
.v2 .mxcell.mxnone{background:transparent; border:1px dashed var(--hair-card); color:var(--meta-2)}
.v2 .mxd{font-weight:600; color:var(--cream); line-height:1.3; text-decoration:none}
.v2 .mxv{font-family:var(--font-mono); font-size:11px; font-variant-numeric:tabular-nums}
.v2 .stackblk h3{margin-bottom:0}
/* PR #42 review: stack legend rows are full-width single rows under the
   bar at every width; the version-by-version block is a closed toggle in
   the Timeline's "how this is counted →" idiom (summary styles inline, as
   the transplanted pages carry theirs). Scoped to both page classes. */
.stack-legend .slrow>span:last-child{margin-left:auto}
.slrow .pill{white-space:nowrap}
@media (max-width:600px){
  .stack-legend .slrow{gap:8px}
  .stack-legend .slrow>span:first-child{min-width:64px}
}
.v2 .stackblk h3 a{color:var(--cream)}
.v2 .money-total span{font-size:19px}
@media (max-width:900px){
  .v2 .fgrid{grid-template-columns:1fr 1fr}
  .v2 .mxrow{grid-template-columns:1fr; gap:8px}
}
@media (max-width:600px){
  .v2 .fgrid{grid-template-columns:1fr}
  .v2 .topline{gap:18px}
  .v2 .kfig.tfig .kv{font-size:28px}
  .v2 .mxcell{min-width:0; flex:1 1 44%; max-width:none}
}
@media (max-width:900px){
  .v2 .wantgrid,.v2 .gap-cols{grid-template-columns:1fr}
  .v2 .gap-col.pitch{border-right:0; border-bottom:1px solid var(--hair-card)}
  .v2 .ds-row{grid-template-columns:1fr; gap:4px}
}
@media (max-width:600px){
  .v2 main{padding-top:36px}
  .v2 .pgtitle{font-size:40px}
  .v2 .statement,.v2 .qframe{font-size:20px; margin-bottom:22px}
  .v2 .card,.v2 .datestrip,.v2 .gap-decision,.v2 .qcard,.v2 .grand,.v2 .money-group,.v2 .wq,.v2 .banner{padding:16px 16px}
  .v2 h2{margin-top:44px}
  /* tables → stacked rows: one card per row, header row dropped */
  .v2 table.docket,.v2 table.docket tbody,.v2 table.docket tr,.v2 table.docket td{display:block; width:100%}
  .v2 table.docket thead{display:none}
  .v2 table.docket tr{border-top:1px solid var(--hair-row); padding:10px 0}
  .v2 table.docket td{padding:3px 0; border:0}
  /* WO-034 PR #41 review (2026-09-22): on the Decisions index the status
     pill row comes first, above the decision title; every cell full width. */
  .v2 table.docket.idx tr{display:flex; flex-direction:column; align-items:flex-start}
  .v2 table.docket.idx td{width:100%}
  .v2 table.docket.idx td:nth-child(2){order:-1; padding-top:0}
  .v2 table.docket.idx td:nth-child(2) .pill{margin-top:0}
  .v2 .srctable td:first-child{white-space:normal}
  .v2 table.docket td.mono{white-space:normal}
  .v2 .pill{white-space:normal; line-height:1.6}
  .v2 .ch119{font-size:10px}
  .v2 .e404{padding:64px 0 40px}
}
