/* MIMS stylesheet.
 *
 * HOW THIS FILE IS ORGANISED — read this before adding rules.
 *
 * It is two layers, in this order, and the order is load-bearing:
 *
 *   LAYER 1 — structure (top of file to "2026 polish pass").
 *     Tokens, base, layout, then one block per surface: map, modal, stories,
 *     feasibility, table, architects, overview, scale, compare, pitch, map book,
 *     aggregate, flagship bar, case-file chrome. Geometry and behaviour live here.
 *
 *   LAYER 2 — polish (from "2026 polish pass" onward).
 *     Deliberately last so it can enhance Layer 1 without editing it: motion tokens,
 *     bento stat cards, glass toolbars, glows, shimmer, entrance animations, then the
 *     newer feature surfaces (playground, Lane B, coverage meters, flip cards, your town).
 *
 * So a selector appearing twice is usually intentional — base in Layer 1, enhancement in
 * Layer 2 — not a mistake. Before "fixing" a duplicate, check whether the second rule is
 * additive. A 2026-08-03 audit found only four rules that were genuinely doing nothing;
 * those were removed and the removals are commented in place. Everything else that repeats,
 * repeats on purpose.
 *
 * Rules of thumb:
 *   - Changing how something LOOKS at rest -> edit Layer 1.
 *   - Changing hover, motion, glow, or elevation -> edit Layer 2.
 *   - Responsive overrides live next to the block they modify, not in one @media pile.
 *   - Colour and spacing come from the tokens below. No raw hex outside :root unless the
 *     value is an alpha wash over an existing token.
 */
:root{
  --bg:#0d1017;--panel:#151923;--panel2:#1b2130;--line:#262d3d;--text:#e8ebf0;--muted:#8b95a7;
  --accent:#f7931a;--green:#3fb950;--blue:#4a90d9;--amber:#d9a441;--red:#e5534b;--purple:#a371f7;--gray:#5b6472;--accent-t:#ffb04a;--amber-t:#ecc873;--red-t:#ff7a72;
}
*{box-sizing:border-box}
/* min-height, not height. With a fixed 100% height the body is pinned to the
   viewport, the main element's flex sizing is capped by it, and long content
   overflows UNDERNEATH whatever follows - which is what the correction bar
   landed in on 2026-08-20. min-height lets the body grow with its content, and
   the flex grow on main still pushes the footer down on short pages.
   NB: do not write a CSS rule in brace form inside a comment here. The selftest
   parser does not skip comments, so it reads one as a real rule and then reports
   it as fully shadowed by the real one further down. */
html,body{margin:0;min-height:100%}
body{background:var(--bg);color:var(--text);font:14px/1.55 -apple-system,BlinkMacSystemFont,Segoe UI,Roboto,sans-serif;display:flex;flex-direction:column}
a{color:var(--blue);text-decoration:none}a:hover{text-decoration:underline}
header{position:sticky;top:0;z-index:5;background:rgba(13,16,23,.92);backdrop-filter:blur(6px);
  border-bottom:1px solid var(--line);padding:14px 26px;display:flex;align-items:center;gap:20px;flex-wrap:wrap}
.brand{font-size:17px;font-weight:700}.brand b{color:var(--accent-t)}
.brand small{font-weight:400;color:var(--muted);font-size:12px;margin-left:8px}
.stats{color:var(--muted);font-size:12px}.stats b{color:var(--text)}
.tabs{margin-left:auto;display:flex;gap:0;flex-wrap:wrap;align-items:center}
.tabsep{align-self:center;width:1px;height:15px;background:var(--line);margin:0 10px}
.tab{padding:7px 15px;border:1px solid var(--line);border-radius:8px;color:var(--muted);background:var(--panel)}
.tab.on{color:#111;background:var(--accent);border-color:var(--accent);font-weight:600}
.tab:hover{text-decoration:none}
.toolbar{display:flex;gap:10px;align-items:center;padding:14px 26px 4px}
.toolbar input{min-width:280px;background:var(--panel);border:1px solid var(--line);color:var(--text);border-radius:9px;padding:9px 12px;font-size:13px;outline:none}
.toolbar input:focus{border-color:var(--accent)}
.toolbar select{background:var(--panel);border:1px solid var(--line);color:var(--text);border-radius:9px;padding:9px 10px;font-size:13px;outline:none;cursor:pointer}
.toolbar select:focus{border-color:var(--accent)}
.count{color:var(--muted);font-size:12px;margin-left:auto}
.filters{display:flex;gap:6px;flex-wrap:wrap}
.fbtn{background:var(--panel);border:1px solid var(--line);color:var(--muted);border-radius:20px;padding:6px 12px;font-size:12px;cursor:pointer}
.fbtn:hover{color:var(--text);border-color:var(--accent)}
.fbtn.on{color:#111;background:var(--accent);border-color:var(--accent);font-weight:600}
main{flex:1;padding:14px 26px 40px;min-height:0}
.loading{color:var(--muted);padding:40px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:16px}
.card{background:var(--panel);border:1px solid var(--line);border-radius:14px;overflow:hidden;cursor:pointer;transition:transform .08s,border-color .12s}
.card:hover{transform:translateY(-3px);border-color:var(--accent)}
.thumb{height:150px;background-size:cover;background-position:center;background:linear-gradient(135deg,#232a38,#2f3f52)}
a.tab:focus-visible,.fbtn:focus-visible,.sortbar button:focus-visible,button:focus-visible,input:focus-visible,.card:focus-visible,summary:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
img.thumb{width:100%;object-fit:cover;display:block}
.ph{height:150px;display:flex;align-items:center;justify-content:center;font-size:30px;font-weight:800;color:#0d1017;background:linear-gradient(135deg,#2b3346,#39506b)}
.cbody{padding:11px 13px 13px}
.cname{font-weight:650;line-height:1.25}
.cmeta{color:var(--muted);font-size:12px;margin:2px 0 9px}
.cbar{height:6px;background:var(--panel2);border-radius:4px;overflow:hidden}
.cbar>i{display:block;height:100%;background:var(--accent)}
.ctags{display:flex;gap:6px;margin-top:9px;flex-wrap:wrap}
.tag{font-size:10.5px;padding:2px 8px;border-radius:20px;background:var(--panel2);color:var(--muted);border:1px solid var(--line)}
.tag.deep{color:var(--green);border-color:rgba(63,185,80,.4)}
.tag.stub{color:var(--amber-t);border-color:rgba(217,164,65,.4)}
/* map */
#map{width:100%;height:calc(100vh - 160px);border:1px solid var(--line);border-radius:14px;overflow:hidden}
.maplibregl-popup-content{background:var(--panel);color:var(--text);border:1px solid var(--line);border-radius:9px;font:13px/1.4 inherit;padding:9px 12px}
.maplibregl-popup-content b{color:var(--accent-t)}
.maplibregl-popup-content a{cursor:pointer}
.maplibregl-popup-tip{border-top-color:var(--panel)!important;border-bottom-color:var(--panel)!important}
.legend{margin-top:10px;color:var(--muted);font-size:12px;display:flex;gap:14px;flex-wrap:wrap}
.legend i{display:inline-block;width:11px;height:11px;border-radius:50%;margin-right:5px;vertical-align:-1px}
/* modal */
.ov{position:fixed;inset:0;background:rgba(5,7,11,.72);z-index:20;display:none;overflow:auto;padding:30px 16px}
.ov.on{display:block}
.modal{max-width:900px;margin:0 auto;background:var(--panel);border:1px solid var(--line);border-radius:16px;overflow:hidden;position:relative}
.mx{position:absolute;top:12px;right:14px;z-index:2;background:rgba(0,0,0,.5);color:#fff;border:none;border-radius:50%;width:34px;height:34px;font-size:22px;line-height:1;cursor:pointer}
.mx:hover{background:var(--accent);color:#111}
.apic-lg{width:88px;height:88px;border-radius:12px;object-fit:cover;flex-shrink:0;background:linear-gradient(135deg,#2b3346,#39506b)}
.agal{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;margin-top:8px}
.agal a{display:block;color:var(--muted)}.agal a:hover{color:var(--accent-t)}
.agal img{width:100%;height:110px;object-fit:cover;border-radius:8px;display:block}
.agal .tiny{display:block;margin-top:3px;line-height:1.3}
.hero{height:300px;position:relative;background-color:#1b2130;overflow:hidden}
.hero-bg{position:absolute;inset:0;background-size:cover;background-position:center;filter:blur(26px) brightness(.5);transform:scale(1.12)}
.hero-img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;object-position:center;z-index:1}
.hero .x{position:absolute;top:12px;right:14px;z-index:2;background:rgba(0,0,0,.55);color:#fff;border-radius:50%;width:34px;height:34px;display:flex;align-items:center;justify-content:center;cursor:pointer;font-size:20px}
.mbody{padding:20px 24px 26px}
.mtitle{font-size:22px;font-weight:700;margin:0}
.msub{color:var(--muted);margin:3px 0 14px}
.flag{background:var(--panel2);border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:8px;padding:10px 12px;font-size:13px;margin-top:8px}
.flag.red{border-left-color:var(--red)}.flag.amber{border-left-color:var(--amber)}
.facts{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:10px;margin:14px 0}
.fact{background:var(--panel2);border:1px solid var(--line);border-radius:9px;padding:8px 11px}
.fact .k{color:var(--muted);font-size:10.5px;text-transform:uppercase;letter-spacing:.05em}
.fact .v{margin-top:2px}
/* Verification chip: "✓ source" links a field to the exact source it came from (field-level provenance). */
.srcchip{display:inline-block;margin-left:6px;font-size:10px;font-weight:700;letter-spacing:.02em;color:var(--green);border:1px solid rgba(63,185,80,.4);border-radius:20px;padding:1px 7px;text-decoration:none;vertical-align:middle;white-space:nowrap}
.srcchip:hover{background:rgba(63,185,80,.12);border-color:var(--green)}

/* Sentence case since 2026-08-05, and this is the tone alignment, not a nitpick.
   ALL-CAPS tracked headers are dashboard voice — they announce a widget. But full
   sentence case reads as body text and stops working as a header at all, which is
   what Ron caught. Heading case is the middle: "Physics Doesn't Add Up" is legibly
   a heading without shouting. Same words, three registers, and only this one both
   separates sections and matches the voice of the cards underneath.
   h4 is the section header on 14 modules, so this single rule carries Stories,
   Patterns, Feasibility, Threshold and the rest with it. Slightly larger and closer
   to the text colour, because a header that is legible does not need to be loud. */
h4{margin:22px 0 9px;font-size:14px;font-weight:650;color:var(--text);letter-spacing:-.005em;border-bottom:1px solid var(--line);padding-bottom:6px}
.chip{display:inline-block;padding:2px 9px;border-radius:20px;font-size:11.5px;margin:2px 3px 2px 0;background:var(--panel2);border:1px solid var(--line)}
.row{padding:6px 0;border-bottom:1px solid var(--line);font-size:13px}.row:last-child{border-bottom:none}
.note{color:var(--muted);font-size:12px}
code{background:var(--panel2);border:1px solid var(--line);border-radius:5px;padding:1px 5px;font-size:12px}
.frec{margin-top:8px;font-size:12.5px;columns:2;column-gap:24px}
.frec>div{break-inside:avoid;padding:2px 0;border-bottom:1px solid var(--line)}
.frec .fk2{color:var(--muted);text-transform:uppercase;font-size:10px;letter-spacing:.04em;margin-right:6px}
.era .eraimg{width:100%;max-height:380px;object-fit:contain;border-radius:8px;background:#1b2130;display:block}
.era input[type=range]{width:100%;margin:10px 0 4px;accent-color:var(--accent)}
.era .eracap{margin-bottom:6px}
@media(max-width:600px){.frec{columns:1}}
.tag.red{color:var(--red-t);border-color:rgba(229,83,75,.4)}
.tag.amber{color:var(--amber-t);border-color:rgba(217,164,65,.4)}
/* stories */
.stories-idx{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px;margin-bottom:8px}
.scard{display:block;background:var(--panel);border:1px solid var(--line);border-radius:14px;overflow:hidden;color:inherit;transition:transform .1s,border-color .12s}
.scard:hover{border-color:var(--accent);text-decoration:none;transform:translateY(-3px)}
.schero{height:120px;background-size:cover;background-position:center}
.schero.ph{background:linear-gradient(135deg,#2b3346,#39506b)}
.scbody{padding:16px}
.scard .st{font-size:15px;font-weight:700;margin-bottom:6px;text-transform:uppercase;letter-spacing:.06em}
.scard .stake{margin-top:10px;color:var(--text);font-size:12.5px;border-top:1px solid var(--line);padding-top:10px}
.story{max-width:820px}
.story h2{margin:6px 0 4px}
.story .back{display:inline-block;margin-bottom:8px;font-size:12px}
.sbody{margin-top:16px}
.srow{padding:10px 0;border-bottom:1px solid var(--line)}
.srow .sh{font-size:14px;margin-bottom:3px}
.srow a{color:var(--text)}.srow a:hover{color:var(--accent-t)}
.sbar{height:6px;background:var(--panel2);border-radius:4px;overflow:hidden;margin:5px 0}
.sbar>i{display:block;height:100%;border-radius:4px;background:var(--accent)}
.lband{position:relative;height:9px;background:var(--panel2);border-radius:4px;margin:5px 0}
.lband>.lb-range{position:absolute;top:0;height:100%;border-radius:4px;background:linear-gradient(90deg,var(--green),var(--amber),var(--red));opacity:.6}
.lband>.lb-mid{position:absolute;top:-2px;width:2px;height:13px;background:#fff;border-radius:1px;box-shadow:0 0 2px rgba(0,0,0,.6)}
.otl{display:flex;height:14px;border-radius:5px;overflow:hidden;margin:6px 0 0;border:1px solid var(--line)}
.otl>i{display:block;height:100%;cursor:help}
/* feasibility cockpit */
.feas{display:flex;gap:10px;flex-wrap:wrap;margin:12px 0}
.fchip{background:var(--panel2);border:1px solid var(--line);border-left:3px solid var(--gray);border-radius:8px;padding:7px 12px;min-width:120px}
.fchip.green{border-left-color:var(--green)}.fchip.amber{border-left-color:var(--amber)}.fchip.red{border-left-color:var(--red)}
.fchip .fk{color:var(--muted);font-size:10.5px;text-transform:uppercase;letter-spacing:.05em}
.fchip .fv{font-size:17px;font-weight:650;margin-top:2px;font-variant-numeric:tabular-nums}
/* table */
.tblwrap{overflow:auto;border:1px solid var(--line);border-radius:12px}
table.dense{border-collapse:collapse;width:100%;font-size:12.5px}
table.dense th,table.dense td{border-bottom:1px solid var(--line);padding:6px 9px;text-align:left;white-space:nowrap}
table.dense thead th{position:sticky;top:0;background:var(--panel2);color:var(--muted);z-index:1}
table.dense .th-sort{cursor:pointer;user-select:none}
table.dense .th-sort:hover{color:var(--text)}
table.dense tbody tr{cursor:pointer}
table.dense tbody tr:hover td{background:var(--panel2)}
table.dense .ctr{text-align:center}
/* architects */
.acards{display:grid;grid-template-columns:repeat(auto-fill,minmax(360px,1fr));gap:14px;margin-top:14px}
.acard{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:13px;cursor:pointer;transition:border-color .12s,transform .08s}
.acard:hover{border-color:var(--accent);transform:translateY(-2px)}
.ahead{display:flex;gap:12px}
.apic{width:64px;height:64px;border-radius:10px;object-fit:cover;flex-shrink:0;background:linear-gradient(135deg,#2b3346,#39506b);font-size:24px}
.abody{min-width:0}
.aphotos{display:flex;gap:6px;margin-top:11px;flex-wrap:wrap}
.aphotos img{width:62px;height:46px;object-fit:cover;border-radius:6px;display:block;transition:transform .1s}
.aphotos a:hover img{transform:scale(1.05);outline:1px solid var(--accent)}
.aname{font-weight:650}
.alist{margin-top:7px;font-size:12px;line-height:1.7}
.alist a{color:var(--muted)}.alist a:hover{color:var(--accent-t)}
.sortbar{margin:14px 0 4px;color:var(--muted);font-size:12px;display:flex;gap:8px;align-items:center}
.sortbar button{background:var(--panel);border:1px solid var(--line);color:var(--muted);border-radius:8px;padding:5px 11px;font-size:12px;cursor:pointer}
.sortbar button:hover{color:var(--text);border-color:var(--accent)}
.sortbar button.on{color:#111;background:var(--accent);border-color:var(--accent);font-weight:600}
/* overview */
.ovstats{display:flex;flex-wrap:wrap;gap:12px;margin:16px 0}
.ovstat{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 18px;min-width:120px}
/* .ovstat .ovn / .ovl base rules removed 2026-08-03: every property was overridden by the
   polish layer below (§ bento stat cards), so they set nothing and only made the file
   look like it disagreed with itself. Edit the bento rules, not here. */
.ovgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:14px;margin-top:8px}
.ovpanel{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:15px}
/* photo→voxel pilot on Overview */
.voxel-panel{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:15px 16px 14px;margin:18px 0 8px;border-left:3px solid var(--purple);max-width:560px}
.voxel-head{display:flex;align-items:center;gap:10px}
.voxel-head .ovt{font-weight:650;font-size:15px}
.voxel-canvas{width:100%;display:block;border-radius:10px;background:#0a0d14;border:1px solid var(--line);cursor:grab;touch-action:none}
.voxel-canvas:active{cursor:grabbing}
.voxel-status{margin-top:8px;line-height:1.4}
.voxel-thumbs{display:flex;gap:8px;margin-top:8px;flex-wrap:wrap}
.voxel-thumbs img{height:56px;width:auto;border-radius:6px;border:1px solid var(--line);object-fit:cover;background:var(--panel2)}
.voxel-thumbs a:hover img{border-color:var(--accent)}
.ovhead{display:flex;align-items:center;justify-content:space-between;gap:8px;color:inherit}
.ovhead:hover{text-decoration:none}.ovhead:hover .ovt{color:var(--accent-t)}
.ovhead .ovt{font-size:15px;font-weight:650}
.ovbody{margin-top:10px;font-size:13px;line-height:1.9;border-top:1px solid var(--line);padding-top:8px}
.ovbody a{color:var(--text)}.ovbody a:hover{color:var(--accent-t)}
/* comparative scale */
.scwrap{overflow-x:auto;padding:10px 0 4px;margin-top:14px;border-top:1px solid var(--line)}
.scrow{display:flex;align-items:flex-end;gap:14px;min-height:360px;padding-top:10px}
.scblock{flex:0 0 auto;width:84px;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;text-decoration:none;color:inherit}
.scblock:hover{text-decoration:none}
.scval{font-size:11px;font-weight:650;color:var(--text);margin-bottom:4px;font-variant-numeric:tabular-nums;white-space:nowrap}
.scbar{width:74px;border-radius:6px 6px 0 0;border:1px solid var(--line);border-bottom:3px solid var(--accent);box-shadow:0 -2px 10px rgba(0,0,0,.3)}
.scblock:hover .scbar{border-color:var(--accent)}
.sclabel{font-size:10.5px;color:var(--muted);text-align:center;margin-top:6px;line-height:1.25;max-width:84px}
.scblock:hover .sclabel{color:var(--accent-t)}
/* responsive */
@media (max-width:680px){
  header{padding:10px 14px;gap:10px}
  .brand small{display:none}
  /* One swipeable row instead of many wrapped rows eating the header (review defect 10). */
  .tabs{gap:0;flex:1 1 100%;margin-left:0;flex-wrap:nowrap;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none}
  .tabs::-webkit-scrollbar{display:none}
  .tab{padding:6px 11px;font-size:12.5px;white-space:nowrap;flex:0 0 auto}
  .tabsep{display:none}
  .toolbar{padding:10px 14px 4px}
  .toolbar input{min-width:0;flex:1 1 100%}
  .count{margin-left:0}
  main{padding:12px 14px 40px}
  .grid{grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
  .ovgrid{grid-template-columns:1fr}
  .ovstat{flex:1 1 40%;min-width:0}
  #map{height:calc(100vh - 220px)}
  .ov{padding:14px 8px}
  .modal{border-radius:12px}
  .mbody{padding:16px}
  .facts{grid-template-columns:1fr 1fr}
}
@media (max-width:420px){
  .grid{grid-template-columns:1fr 1fr}
  .facts{grid-template-columns:1fr}
}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}
/* compare */
#cmpbar{position:fixed;bottom:18px;right:18px;z-index:15;background:var(--panel);border:1px solid var(--accent);border-radius:24px;padding:8px 15px;font-size:13px;box-shadow:0 4px 18px rgba(0,0,0,.45);display:flex;gap:12px;align-items:center}
#cmpbar a{color:var(--accent-t);font-weight:600}
#cmpbar #cmpclear{cursor:pointer;color:var(--muted)}
.cmptable{border-collapse:collapse;width:100%;font-size:13px;margin-top:12px}
.cmptable td{border:1px solid var(--line);padding:8px 12px;text-align:left;vertical-align:top;min-width:130px}
.cmptable .cmpk{color:var(--muted);white-space:nowrap;font-size:12px;min-width:auto}
.cmptable tr:first-child td{background:var(--panel2)}
/* pitch hero (documentary landing) */
.pitch{position:relative;overflow:hidden;margin:6px 0 26px;padding:40px 30px 30px;border-radius:18px;background:radial-gradient(130% 150% at 50% -10%,#1c2c48 0%,#12161f 58%,#0e1219 100%);border:1px solid var(--line);text-align:center}
/* blueprint-grid motif — a survey sheet under the investigation, subtle so text always leads */
.pitch::before{content:"";position:absolute;inset:0;pointer-events:none;opacity:.5;
  background-image:linear-gradient(rgba(122,162,214,.06) 1px,transparent 1px),linear-gradient(90deg,rgba(122,162,214,.06) 1px,transparent 1px),radial-gradient(circle at 50% 0,rgba(74,144,217,.10),transparent 60%);
  background-size:34px 34px,34px 34px,100% 100%;mask-image:linear-gradient(#000,transparent 85%)}
.pitch>*{position:relative;z-index:1}
.pcap{width:100%;height:12px;display:block;margin:8px 0 2px}
.pitch-caplegend{color:var(--muted);font-size:11px;margin:12px auto 0;max-width:1020px;text-align:left}
.pcl-cap{color:var(--text);font-weight:700}.pcl-over{color:var(--red-t)}
.pitch-eyebrow{color:var(--accent-t);font-size:11px;letter-spacing:.2em;text-transform:uppercase;font-weight:600}
.pitch-h1{font-size:34px;line-height:1.14;font-weight:750;margin:14px auto 0;max-width:840px;letter-spacing:-.01em}
.pitch-sub{color:var(--muted);font-size:15px;line-height:1.75;max-width:720px;margin:16px auto 0}
.pitch-verdict{color:var(--text);font-size:15px;line-height:1.65;max-width:720px;margin:12px auto 0;padding:10px 16px;border-left:3px solid var(--accent);background:var(--panel2);border-radius:0 8px 8px 0;font-weight:600}
.pitch-cta{margin-top:22px;display:flex;gap:12px;justify-content:center;flex-wrap:wrap}
.pitch-btn{background:var(--accent);color:#111;font-weight:600;padding:11px 22px;border-radius:24px;font-size:14px}
.pitch-btn:hover{text-decoration:none;filter:brightness(1.08)}
.pitch-btn.ghost{background:transparent;color:var(--text);border:1px solid var(--border,var(--line))}
.pitch-btn.ghost:hover{border-color:var(--accent);filter:none}
.pitch-cases{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:14px;margin:28px auto 0;max-width:1020px;text-align:left}
.pitch-case{background:rgba(255,255,255,.03);border:1px solid var(--line);border-radius:14px;padding:16px 18px;color:inherit;display:block}
.pitch-case:hover{border-color:var(--accent);text-decoration:none;background:rgba(255,255,255,.05)}
.pitch-case-num{font-size:30px;font-weight:750;color:var(--red-t);font-variant-numeric:tabular-nums;line-height:1}
.pitch-case-txt{font-size:13px;line-height:1.6;margin-top:8px;color:var(--text)}
.pitch-case-tag{color:var(--muted);font-size:11.5px;margin-top:9px}
.pitch-bar{color:var(--muted);font-size:13px;line-height:1.75;max-width:780px;margin:26px auto 0;border-top:1px solid var(--line);padding-top:18px}
.pitch-bar b{color:var(--text)}
@media (max-width:680px){.pitch-h1{font-size:25px}.pitch{padding:26px 16px 22px}}

/* ---- Map Book: standalone printable dossier (screen = paper sheet; print = clean) ---- */
.ovbook{margin:26px auto 8px;text-align:center;display:flex;flex-direction:column;gap:4px;align-items:center}
.ovbook a{font-weight:700;color:var(--accent-t);text-decoration:none;font-size:15px}
.ovbook a:hover{text-decoration:underline}
.book{max-width:840px;margin:0 auto;padding:0 12px 60px}
.book-nav{position:sticky;top:0;z-index:5;display:flex;justify-content:space-between;align-items:center;gap:10px;padding:10px 2px;background:var(--bg,#0b0d12);border-bottom:1px solid rgba(255,255,255,.08);margin-bottom:16px}
.book-back,.book-link{color:var(--muted);text-decoration:none;font-weight:600;font-size:14px}
.book-back:hover,.book-link:hover{color:#fff}
.book-actions{display:flex;gap:12px;align-items:center}
.book-print{cursor:pointer;border:1px solid var(--accent);background:var(--accent);color:#0b0d12;font-weight:700;border-radius:8px;padding:7px 14px;font-size:14px}
.bookpage{background:#f6f4ee;color:#1c1b18;border-radius:10px;padding:40px 46px;margin:0 auto 22px;box-shadow:0 8px 30px rgba(0,0,0,.35);max-width:820px;line-height:1.5}
.bookpage p{margin:8px 0}
.bp-eyebrow{text-transform:uppercase;letter-spacing:.18em;font-size:11px;font-weight:700;color:#9a5b2e}
.bp-title{font-size:32px;line-height:1.12;font-weight:800;margin:6px 0 4px;color:#141311}
.bp-sub{color:#5b574e;font-size:14px;margin-bottom:16px}
.bp-tag{display:inline-block;background:#e7e2d6;color:#3d3a33;border-radius:5px;padding:1px 7px;font-size:12px;font-weight:600}
.bp-hero{margin:12px 0 6px;border-radius:8px;overflow:hidden;background:#e7e2d6}
.bp-hero img{display:block;width:100%;max-height:420px;object-fit:contain;background:#ded8c9}
.bp-hero-ph{display:flex;align-items:center;justify-content:center;height:220px;font-size:64px;font-weight:800;color:#b9b09b}
.bp-callout{border-left:4px solid #b23b2e;background:#f3e4e1;padding:12px 16px;border-radius:0 8px 8px 0;margin:16px 0;color:#3a1f1b}
.bp-section{margin:20px 0}
.bp-section h3{font-size:14px;text-transform:uppercase;letter-spacing:.08em;color:#8a3d1f;border-bottom:1px solid #ddd6c6;padding-bottom:5px;margin:0 0 8px}
.bp-persp{margin:5px 0}
.bp-note{color:#7a7568;font-size:12.5px;font-style:italic;margin-top:6px}
.bp-chips{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.bp-chip{border:1px solid #ded8c9;border-radius:8px;padding:10px 12px;background:#fbfaf5}
.bp-chip .bp-ck{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.05em;color:#7a7568}
.bp-chip .bp-cv{display:block;font-size:20px;font-weight:800;color:#2a2822;margin-top:2px}
.bp-chip.red .bp-cv{color:#b23b2e}.bp-chip.amber .bp-cv{color:#a9741b}.bp-chip.green .bp-cv{color:#2f7d4f}
.bp-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:4px 20px}
.bp-fact{display:flex;justify-content:space-between;gap:10px;border-bottom:1px dotted #d8d1c1;padding:4px 0;font-size:14px}
.bp-fk{color:#7a7568}.bp-fv{font-weight:600;text-align:right}
.bp-verdict{background:#eef0f2;border:1px solid #d7dae0;border-radius:8px;padding:12px 16px;margin:18px 0;font-size:14px;color:#2a2f38}
.bp-src{font-size:13px;margin:4px 0}
.bp-src a{color:#2a5db0}
.bp-foot{margin-top:26px;padding-top:12px;border-top:2px solid #ddd6c6;font-size:12px;color:#8a857a}
.bp-cover{text-align:center;padding:70px 46px}
.bp-cover-title{font-size:46px;font-weight:900;margin:10px 0 6px;color:#141311}
.bp-cover-sub{font-size:16px;color:#4a463d;max-width:560px;margin:0 auto 14px}
.bp-cover-count{font-size:13px;text-transform:uppercase;letter-spacing:.12em;color:#8a857a}
.bp-cover-honest{max-width:600px;margin:26px auto 0;font-size:13.5px;color:#5b574e;border-top:1px solid #ddd6c6;padding-top:18px}
@media (max-width:680px){.bookpage{padding:26px 20px}.bp-title{font-size:26px}.bp-cover-title{font-size:34px}}
@media print{
  header,.toolbar,#toolbar,#ov,.book-nav,.book-print{display:none!important}
  body{background:#fff!important}
  .book{max-width:none;padding:0}
  .bookpage{box-shadow:none;background:#fff!important;color:#000!important;border-radius:0;margin:0;max-width:none;break-after:page;page-break-after:always}
  .bookpage:last-child{break-after:auto;page-break-after:auto}
  .bp-hero img{max-height:340px}
  a{color:#000!important;text-decoration:none!important}
}

/* ---- Aggregate labor-demand view ---- */
.agg-supply{margin:8px 0}
.agg-row{display:grid;grid-template-columns:150px 1fr 190px;align-items:center;gap:10px;margin:7px 0}
.agg-lab{font-size:13px;color:var(--muted)}
.agg-val{font-size:13px;text-align:right}
.agg-bar{height:14px;background:var(--panel2);border-radius:4px;overflow:hidden}
.agg-bar>i{display:block;height:100%;border-radius:4px}
.agg-town{background:var(--blue)}
.agg-trade{background:var(--green)}
.agg-band{position:relative;height:14px;background:var(--panel2);border-radius:4px}
.agg-band>.agg-range{position:absolute;top:0;height:100%;border-radius:4px;background:linear-gradient(90deg,var(--amber),var(--red));opacity:.75}
.agg-band>.agg-mid{position:absolute;top:-2px;width:2px;height:18px;background:#fff;border-radius:1px;box-shadow:0 0 2px rgba(0,0,0,.7)}
.agg-matrix{border-collapse:collapse;margin:8px 0;width:100%;max-width:560px}
.agg-matrix th{text-align:left;font-size:12px;color:var(--muted);font-weight:600;padding:6px 10px}
.agg-matrix td.agg-cell{border:1px solid var(--line);border-radius:6px;padding:8px 12px;text-align:center;vertical-align:middle}
.agg-cell b{display:block;font-size:19px}
.agg-cell .tiny{color:var(--muted)}
.agg-cell.red{background:rgba(220,70,60,.14)}.agg-cell.red b{color:var(--red-t)}
.agg-cell.amber{background:rgba(200,150,30,.13)}.agg-cell.amber b{color:var(--amber-t)}
.agg-cell.green{background:rgba(60,160,90,.12)}.agg-cell.green b{color:var(--green)}
@media (max-width:680px){.agg-row{grid-template-columns:96px 1fr;grid-template-areas:"lab bar" "val val"}.agg-lab{grid-area:lab}.agg-val{grid-area:val;text-align:left}}

/* ---- Flagship record bar (uniform-bar checklist in detail) ---- */
.flagbar{margin:10px 0;border:1px solid var(--line);border-radius:10px;background:var(--panel2);padding:8px 12px}
.flagbar>summary{cursor:pointer;font-size:13px;list-style:none}
.flagbar>summary::-webkit-details-marker{display:none}
.fbgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:2px 16px;margin-top:8px}
.fbrow{display:flex;gap:8px;align-items:baseline;font-size:12.5px;padding:2px 0}
.fbrow .fbmark{font-weight:800;width:14px;flex-shrink:0;text-align:center}
.fbrow.ok .fbmark{color:var(--green)}
.fbrow.miss .fbmark{color:var(--muted)}
.fbrow.miss-crit .fbmark{color:var(--red-t)}
.fbrow.miss-crit{color:var(--text)}
.fbrow.miss{color:var(--muted)}

/* ---- Uniform investigative "case file" aesthetic ---- */
.viewhead{margin:2px 0 18px}
.eyebrow{text-transform:uppercase;letter-spacing:.2em;font-size:11px;font-weight:700;color:var(--accent-t)}
.vtitle{font-size:22px;font-weight:750;margin:6px 0 0;letter-spacing:-.01em}
.dek{color:var(--muted);font-size:14px;line-height:1.65;max-width:780px;margin:8px 0 0}
.case{margin:12px 0 6px}
.case .lead-in{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.16em;font-weight:700;margin-bottom:8px}
.case p{margin:0 0 11px;font-size:14.5px;line-height:1.66;max-width:760px}
.case p:first-of-type{font-size:15.5px}
.case p:last-child{margin-bottom:0;color:var(--muted)}
.bynum-lab{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.12em;font-weight:700;margin:16px 0 6px}
details.thr{margin:10px 0 2px}
details.thr>summary{cursor:pointer;color:var(--muted);font-size:12.5px;list-style:none}
details.thr>summary::-webkit-details-marker{display:none}
details.thr>summary::before{content:"▸ ";color:var(--accent-t)}
details.thr[open]>summary::before{content:"▾ "}
details.thr .flag{margin-top:8px}

/* ---- Deep-vs-stub coverage indicator (Overview) ---- */
.coverage{margin:14px 0 4px;max-width:760px}
.cov-bar{height:8px;background:var(--panel2);border-radius:5px;overflow:hidden;border:1px solid var(--line)}
.cov-bar>i{display:block;height:100%;background:linear-gradient(90deg,var(--accent),var(--amber));border-radius:5px}
.cov-lab{color:var(--muted);font-size:12.5px;line-height:1.6;margin-top:6px}
.cov-lab b{color:var(--text)}

/* ---- Then vs now (modern-equivalent comparison) ---- */
.tvn{margin:6px 0 4px}
.tvn.tvn-flag{border-left:3px solid var(--red);background:var(--panel2);border-radius:0 8px 8px 0;padding:10px 14px}
.tvn.tvn-flag p:first-child{color:var(--text)}

/* ---- Ownership flow (temporal Sankey) ---- */
.ownflow{width:100%;height:auto;max-height:360px;display:block;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:6px}
.ownflow text{font-family:inherit}

/* ---- Evidence-convergence dots (cards) ---- */
.evdots{display:flex;gap:4px;margin-top:7px}
.evd{width:7px;height:7px;border-radius:50%;border:1px solid var(--gray);background:transparent}
.evd.on{background:var(--green);border-color:var(--green)}

/* ---- Threshold ladder ---- */
.thrladder{width:100%;max-width:620px;height:auto;display:block;background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px;margin:4px 0}

/* ---- Imageless-card texture (rubric #4: a placeholder that explains, not a void) ---- */
.ph{background:linear-gradient(135deg,#2b3346,#39506b);position:relative;overflow:hidden}
.ph::after{content:"";position:absolute;inset:0;background:repeating-linear-gradient(45deg,rgba(255,255,255,.03) 0 2px,transparent 2px 14px)}

/* ==== 2026 polish pass: motion tokens, bento, glass, glow — zero libs ==== */
:root{--ease:cubic-bezier(.22,.9,.3,1);--fast:.15s;--med:.3s;--glow-red:0 0 18px rgba(229,83,75,.25);--glow-acc:0 0 20px rgba(247,147,26,.28)}
@media (prefers-reduced-motion: reduce){*,*::before,*::after{animation:none!important;transition:none!important}}

/* view entrance — content rises in on every tab swap */
@keyframes riseIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
main>*{animation:riseIn var(--med) var(--ease) both}

/* sleek scrollbar */
::-webkit-scrollbar{width:10px;height:10px}
::-webkit-scrollbar-track{background:var(--bg)}
::-webkit-scrollbar-thumb{background:#2a3244;border-radius:6px;border:2px solid var(--bg)}
::-webkit-scrollbar-thumb:hover{background:#3a4560}

/* bento stat cards — gradient hairline, hover lift + glow, big numerals */
.ovstats{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;margin:10px 0 4px}
.ovstat{position:relative;background:linear-gradient(180deg,rgba(255,255,255,.035),rgba(255,255,255,0)) ,var(--panel);border-radius:14px;padding:14px 16px;transition:transform var(--fast) var(--ease),border-color var(--fast) var(--ease),box-shadow var(--med) var(--ease)}
.ovstat:hover{transform:translateY(-2px);border-color:rgba(247,147,26,.45);box-shadow:var(--glow-acc)}
.ovstat .ovn{font-size:26px;font-weight:800;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.ovstat .ovl{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.08em;margin-top:2px}

/* cards — image zoom, gradient edge on hover */
.card{will-change:transform}
.card:hover{box-shadow:0 12px 30px rgba(0,0,0,.45),var(--glow-acc)}
.card .thumb,.card img.thumb{transition:transform var(--med) var(--ease)}
.card:hover .thumb,.card:hover img.thumb{transform:scale(1.045)}
/* removed 2026-08-03: `.card{overflow:hidden}` repeated what the base .card rule already sets */

/* pitch — fluid gradient headline, glass case cards, glowing CTA */
.pitch-h1{font-size:clamp(26px,4.2vw,40px);background:linear-gradient(92deg,#fff 30%,#ffd9a0 70%,var(--accent));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.pitch-btn{transition:transform var(--fast) var(--ease),box-shadow var(--med) var(--ease),filter var(--fast)}
.pitch-btn:hover{transform:translateY(-1px);box-shadow:var(--glow-acc)}
.pitch-case{backdrop-filter:blur(8px);background:rgba(21,25,35,.55);transition:transform var(--fast) var(--ease),border-color var(--fast),box-shadow var(--med)}
.pitch-case:hover{transform:translateY(-3px);box-shadow:0 10px 26px rgba(0,0,0,.4)}
.pitch-case-num{text-shadow:0 0 22px rgba(229,83,75,.45)}

/* glass toolbars + sortbars */
.sortbar{position:sticky;top:64px;z-index:4;backdrop-filter:blur(10px);background:rgba(13,16,23,.7);border:1px solid var(--line);border-radius:12px;padding:8px 12px;display:inline-flex;gap:6px;align-items:center;margin:4px 0 12px}
.sortbar button{transition:all var(--fast) var(--ease)}

/* panels & flags — soft elevation on hover, consistent radius */
.ovpanel{transition:transform var(--fast) var(--ease),border-color var(--fast),box-shadow var(--med)}
.ovpanel:hover{transform:translateY(-2px);border-color:rgba(122,162,214,.4);box-shadow:0 10px 24px rgba(0,0,0,.35)}

/* skeleton shimmer replaces plain "Loading…" */
@keyframes shimmer{from{background-position:-400px 0}to{background-position:400px 0}}
.loading{position:relative;color:transparent!important;min-height:120px;border-radius:12px;overflow:hidden}
.loading::before{content:"";position:absolute;inset:0;border-radius:12px;background:linear-gradient(90deg,var(--panel) 25%,var(--panel2) 50%,var(--panel) 75%);background-size:800px 100%;animation:shimmer 1.2s linear infinite}
.loading::after{content:"assembling the case files…";position:absolute;left:16px;top:14px;color:var(--muted);font-size:13px}

/* alarming numbers get a pulse of presence (once, subtle) */
.ovn[style*="--red"]{text-shadow:var(--glow-red)}
.pcap{filter:drop-shadow(0 0 6px rgba(229,83,75,.15))}

/* tables: row hover glow */
tbody tr{transition:background var(--fast)}
tbody tr:hover{background:rgba(247,147,26,.06)}

/* modal entrance */
@keyframes modalUp{from{opacity:0;transform:translateY(16px) scale(.985)}to{opacity:1;transform:none}}
.ov.on .modal{animation:modalUp var(--med) var(--ease)}

/* ---- Counterfactual Playground ---- */
.pg{max-width:860px}
.pg-h{font-size:21px;font-weight:750;margin:6px 0 0}
.pg-grid{display:grid;gap:18px;margin:18px 0 6px}
.pg-row{transition:opacity var(--fast)}
.pg-lab{font-size:13.5px;font-weight:600;display:flex;gap:10px;align-items:baseline}
.pg-val{color:var(--accent-t);font-variant-numeric:tabular-nums;font-weight:750}
.pg-ghost{color:var(--muted);font-size:11px}
.pg-track{position:relative;margin-top:6px}
.pg-band{position:absolute;top:50%;transform:translateY(-50%);height:14px;background:rgba(63,185,80,.14);border:1px solid rgba(63,185,80,.25);border-radius:7px;pointer-events:none}
.pg-track input[type=range]{width:100%;accent-color:var(--accent);position:relative;z-index:1}
.pg-row.off .pg-track input[type=range]{accent-color:var(--red)}
.pg-row.off .pg-val{color:var(--red-t)}
.pg-src{color:var(--muted);font-size:11.5px;margin-top:3px;font-style:italic}
.pg-actions{display:flex;gap:8px;margin:14px 0;flex-wrap:wrap}
.pg-verdict{font-size:16px;margin:12px 0 6px}
.pg-n{font-size:26px;font-weight:800;font-variant-numeric:tabular-nums}
.pg-warn{color:var(--amber-t);font-size:13px;border-left:3px solid var(--amber);padding:6px 10px;background:var(--panel2);border-radius:0 8px 8px 0;margin:8px 0}
.pg-ok{color:var(--green);font-size:12.5px;margin:8px 0}
.pg-movers{display:flex;gap:8px;flex-wrap:wrap;margin-top:10px}
.pg-chip{display:inline-block;padding:5px 11px;border-radius:18px;border:1px solid var(--line);background:var(--panel);font-size:12px;color:var(--text)}
.pg-chip.red{border-color:rgba(229,83,75,.5)}.pg-chip.red b{color:var(--red-t)}
.pg-chip.amber{border-color:rgba(217,164,65,.5)}.pg-chip.amber b{color:var(--amber-t)}
.pg-chip.green{border-color:rgba(63,185,80,.4)}.pg-chip.green b{color:var(--green)}

/* ===== Lane B surfaces — craft pass 2026-08-03 (C1–C6) ===== */
.lb-block{margin-top:28px;padding-top:8px;border-top:1px solid var(--line)}
.lb-head{margin-bottom:10px}
.lb-title{margin:4px 0 6px;font-size:18px;font-weight:750;letter-spacing:.01em}
.lb-dek{margin:0 0 6px;font-size:14px;line-height:1.5;color:var(--text);max-width:720px}
.lb-thr-line{font-size:11.5px;color:var(--muted);margin-bottom:4px}
.lb-caveat{border-left:3px solid var(--amber);background:var(--panel2)}
.lb-qid{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;color:var(--blue)}
.lb-details{margin-top:12px}
.lb-details>summary{cursor:pointer;color:var(--muted);font-weight:600;font-size:13px}
.lb-ev-pop{margin:8px 0;padding:8px 10px;background:var(--panel2);border:1px solid var(--line);border-radius:8px}
.lb-axis-wrap{margin:10px 0 6px}
.lb-axis{position:relative;height:56px;background:var(--panel2);border:1px solid var(--line);border-radius:10px;overflow:hidden}
.lb-axis-track{position:absolute;left:8px;right:8px;top:14px;height:28px}
.lb-ev{position:absolute;top:50%;transform:translate(-50%,-50%);border-radius:50%;display:flex;align-items:center;justify-content:center;font-size:9px;color:#111;cursor:pointer;opacity:.92;line-height:1;border:0;padding:0}
.lb-ev:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.lb-panic{position:absolute;top:0;bottom:0;width:10px;margin-left:-5px;background:rgba(217,164,65,.18);pointer-events:none}
.lb-axis-labels{position:absolute;left:8px;right:8px;bottom:2px;display:flex;justify-content:space-between;font-size:10px;color:var(--muted)}
.lb-legend{display:flex;flex-wrap:wrap;gap:4px;margin:6px 0 4px}
.lb-table{width:100%;border-collapse:collapse;font-size:12.5px;margin-top:6px}
.lb-table th,.lb-table td{border-bottom:1px solid var(--line);padding:6px 8px;text-align:left;vertical-align:top}
.lb-table th{color:var(--muted);font-weight:600;font-size:11px;text-transform:uppercase;letter-spacing:.04em}
.lb-hm .lb-hm-cell{text-align:center;font-variant-numeric:tabular-nums;font-weight:650;min-width:64px}
.lb-check{display:inline-flex;align-items:center;gap:6px;cursor:pointer;margin-right:10px}
.lb-check input{accent-color:var(--accent)}
.lb-basemap-bar{display:flex;flex-wrap:wrap;align-items:center;gap:12px;padding:8px 0 10px;color:var(--muted);font-size:12.5px}
.lb-op{display:inline-flex;align-items:center;gap:8px}
.lb-op input[type=range]{width:120px;accent-color:var(--accent)}
.lb-arch-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px;margin-top:10px}
.lb-arch-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px}
.lb-arch-card .aname{font-weight:700;font-size:15px}
.lb-chain{display:inline-flex;gap:4px;align-items:center;margin:6px 0}
.lb-chain>i{display:inline-block;width:18px;height:10px;border-radius:3px;border:1px solid var(--line)}
.lb-chain>i.solid{background:var(--green);border-color:rgba(63,185,80,.5)}
.lb-chain>i.broken{background:transparent;border:1.5px dashed var(--red)}
.lb-chain>i.fog{background:rgba(139,149,167,.35);border-style:dashed}
.lb-opacity-card{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:10px 0}
.lb-opacity-sent{font-size:13.5px;margin:4px 0 6px;line-height:1.4}
.lb-opacity-slot:empty{display:none}

/* Material source / district set (Yule↔Lincoln, Bunker Hill) */
.mat-links{margin:12px 0 4px;display:flex;flex-direction:column;gap:8px}
.mat-link{background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:12px 14px;border-left:3px solid var(--blue)}
.mat-link-source{border-left-color:var(--accent)}
.mat-link-district{border-left-color:var(--purple)}
.mat-link-body{font-size:14px;line-height:1.5;margin:4px 0}
.mat-link .tag{margin-left:6px}

/* Pitch entrance hall + museum hooks */
.pitch-entrance{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;margin:22px auto 8px;max-width:1040px;text-align:left}
@media(max-width:900px){.pitch-entrance{grid-template-columns:1fr 1fr}}
@media(max-width:520px){.pitch-entrance{grid-template-columns:1fr}}
.pitch-beat{background:rgba(255,255,255,.03);border:1px solid var(--line);border-radius:12px;padding:12px 12px 14px;min-height:110px}
.pitch-beat .pb-n{display:inline-block;width:22px;height:22px;border-radius:50%;background:var(--accent);color:#111;font-size:12px;font-weight:800;text-align:center;line-height:22px;margin-bottom:6px}
.pitch-beat .pb-t{font-size:11px;text-transform:uppercase;letter-spacing:.12em;color:var(--muted);font-weight:700}
.pitch-beat .pb-b{font-size:13px;line-height:1.45;margin-top:6px;color:var(--text)}
.pitch-museum{margin:20px auto 0;max-width:1040px;text-align:left}
.pitch-museum-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin-top:8px}
@media(max-width:700px){.pitch-museum-grid{grid-template-columns:1fr}}
.pitch-mcard{display:block;padding:14px 16px;border-radius:12px;border:1px solid var(--line);background:rgba(255,255,255,.03);color:inherit}
.pitch-mcard:hover{border-color:var(--accent);text-decoration:none;background:rgba(255,255,255,.06)}
.pitch-mcard b{display:block;font-size:14px;margin-bottom:4px}
.pitch-mcard span{font-size:12.5px;color:var(--muted);line-height:1.4}
.pitch-cases-lab{margin:24px auto 8px;max-width:1020px;text-align:left;font-size:11px;text-transform:uppercase;letter-spacing:.14em;color:var(--muted);font-weight:700}

/* Overview expansions 2026-08-01 */
.ov-qs .ov-qlist{margin:8px 0 0 1.1em;padding:0;color:var(--text);line-height:1.45}
.ov-qs .ov-qlist li{margin:0 0 8px}
.ov-cases{margin-top:18px}
.ov-casegrid{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-top:10px}
@media(max-width:800px){.ov-casegrid{grid-template-columns:1fr}}
.ov-casecard{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:12px 14px}
.ov-casecard.likely{border-left:3px solid var(--green)}
.ov-casecard.upper{border-left:3px solid var(--amber)}
.ov-case-stat{font-size:18px;font-weight:750;margin:6px 0}
.ov-caselist{margin:8px 0 0 1.1em;padding:0;font-size:13px}
.ov-caselist li{margin:4px 0}
.ov-chartrow{display:grid;grid-template-columns:1fr 1fr;gap:14px}
@media(max-width:800px){.ov-chartrow{grid-template-columns:1fr}}
.ov-chart{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px}
.ov-chart-h{font-size:12px;color:var(--muted);margin-bottom:8px}
.ov-bars{display:flex;align-items:flex-end;gap:3px;height:90px;padding:0 2px}
.ov-barcol{flex:1;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;min-width:0}
.ov-barcol i{display:block;width:100%;max-width:14px;border-radius:3px 3px 0 0}
.ov-barcol span{font-size:9px;color:var(--muted);margin-top:3px}
.ov-taxrow{display:grid;grid-template-columns:44px 1fr 64px 1fr 72px;gap:6px;align-items:center;font-size:11.5px;margin:3px 0}
.ov-taxbar{height:10px;background:var(--panel2);border-radius:4px;overflow:hidden}
.ov-taxbar i{display:block;height:100%}
.ov-taxbar i.b{background:var(--blue)}
.ov-taxbar i.t{background:var(--amber)}
.ov-taxy{color:var(--muted);font-variant-numeric:tabular-nums}
.ov-taxn{font-variant-numeric:tabular-nums;color:var(--muted);font-size:11px}
.ov-taxcity{font-weight:650;margin:10px 0 4px}
.ov-taxblock{margin-bottom:8px}
.arch-unlikely{margin-top:8px;border:1px solid var(--line);border-radius:8px;background:var(--panel2);padding:6px 10px;font-size:12px}
.arch-unlikely>summary{cursor:pointer;color:var(--amber-t);font-weight:600}
.arch-unlikely ul{margin:6px 0 0 1.1em;padding:0}
.arch-unlikely li{margin:4px 0;color:var(--text)}

/* ---- Coverage meters (E7: every feature states its real reach) ---- */
.covm{display:flex;align-items:center;gap:10px;margin:8px 0 12px;max-width:820px}
.covm.wide{margin:10px 0 16px}
.covm-bar{flex:0 0 120px;height:6px;background:var(--panel2);border-radius:4px;overflow:hidden}
.covm-bar>i{display:block;height:100%;border-radius:4px}
.covm-bar>i.green{background:var(--green)}.covm-bar>i.amber{background:var(--amber)}.covm-bar>i.red{background:var(--red)}
.covm-txt{color:var(--muted);font-size:12.5px;line-height:1.5}
.covm-txt b{color:var(--text)}
.covt{width:100%;max-width:780px;border-collapse:collapse;margin-top:8px;font-size:13px}
.covt td{padding:5px 8px;border-bottom:1px solid var(--line);vertical-align:middle}
.covt td:first-child{white-space:nowrap}
.covt .covt-bar span{display:block;width:110px;height:6px;background:var(--panel2);border-radius:4px;overflow:hidden}
.covt .covt-bar i{display:block;height:100%;border-radius:4px}
.covt .covt-bar i.green{background:var(--green)}.covt .covt-bar i.amber{background:var(--amber)}.covt .covt-bar i.red{background:var(--red)}
.covt .covt-n{white-space:nowrap;text-align:right}

/* ---- 9.1 "What would it take?" — the seven categories as flip cards ---- */
.wwit-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px;margin-top:14px}
.wwit-card{position:relative;min-height:290px;perspective:1200px;cursor:pointer;outline:none}
.wwit-card:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:14px}
.wwit-inner{position:absolute;inset:0;transform-style:preserve-3d;transition:transform .5s cubic-bezier(.2,.7,.3,1)}
.wwit-card.is-flipped .wwit-inner{transform:rotateY(180deg)}
.wwit-face{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;
  background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:14px 15px;
  display:flex;flex-direction:column;overflow:auto}
.wwit-card:hover .wwit-face{border-color:var(--accent)}
.wwit-back{transform:rotateY(180deg);background:var(--panel2)}
.wwit-eyebrow{font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--muted)}
.wwit-title{margin:6px 0 0;font-size:15px;font-weight:700;line-height:1.3;color:var(--text)}
.wwit-ceiling{margin-top:12px;font-size:12.5px;color:var(--muted)}
.wwit-ceiling b{color:var(--text)}
.wwit-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:7px;vertical-align:1px}
.wwit-dot.amber{background:var(--amber)}
.wwit-dot.gray{background:transparent;border:1px solid var(--gray)}
.wwit-reach{margin-top:4px;font-size:12px;color:var(--muted)}
.wwit-hint{margin-top:auto;padding-top:12px;font-size:11.5px;color:var(--accent-t)}
.wwit-ask{margin-top:9px;font-size:12.5px;line-height:1.5;color:var(--text)}
.wwit-where,.wwit-checked{margin-top:9px;font-size:11.5px;line-height:1.5;color:var(--muted)}
.wwit-where b{color:var(--green)}
.wwit-checked b{color:var(--amber-t)}
@media (prefers-reduced-motion: reduce){
  .wwit-inner{transition:none}
  .wwit-card.is-flipped .wwit-inner{transform:none}
  .wwit-back{transform:none}
  .wwit-face{backface-visibility:visible;-webkit-backface-visibility:visible}
  .wwit-card .wwit-back{visibility:hidden}
  .wwit-card.is-flipped .wwit-front{visibility:hidden}
  .wwit-card.is-flipped .wwit-back{visibility:visible}
}

/* ---- 4.2 Table column micro-stats: sparkline + n/missing inside numeric headers ---- */
.tms-wrap{display:block;margin-top:4px;font-weight:400;line-height:1;cursor:pointer}
.tms-spark{display:block}
.tms-spark rect{fill:currentColor;opacity:.5}
.tms-n{display:block;margin-top:2px;font-size:9.5px;letter-spacing:.02em;font-variant-numeric:tabular-nums;color:var(--muted)}
.tms-miss.tms-hi{color:var(--amber-t)}

/* ---- Your town exhibit (7.1) ---- */
.yt{max-width:860px;margin:26px 0 8px}
.yt-h{font-size:21px;font-weight:750;margin:6px 0 0}
.yt-form{display:flex;gap:8px;align-items:center;margin:14px 0 6px;flex-wrap:wrap}
.yt-form input{width:170px;background:var(--panel);border:1px solid var(--line);color:var(--text);border-radius:9px;padding:9px 12px;font-size:15px;font-variant-numeric:tabular-nums}
.yt-form input:focus{border-color:var(--accent);outline:none}
.yt-verdict{font-size:16px;margin:14px 0 10px;line-height:1.6}
.yt-n{font-size:26px;font-weight:800;color:var(--red-t);font-variant-numeric:tabular-nums}
.yt-list{display:flex;flex-direction:column;gap:6px}
@keyframes ytIn{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.yt-row{display:grid;grid-template-columns:62px 1fr auto;gap:12px;align-items:center;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--panel);color:inherit;animation:ytIn .4s var(--ease,ease) both}
.yt-row:hover{text-decoration:none;border-color:var(--accent)}
.yt-pct{font-weight:800;font-variant-numeric:tabular-nums;text-align:right}
.yt-row.red .yt-pct,.yt-row.red .yt-word{color:var(--red-t)}
.yt-row.amber .yt-pct,.yt-row.amber .yt-word{color:var(--amber-t)}
.yt-row.green .yt-pct,.yt-row.green .yt-word{color:var(--green)}
.yt-say{display:block;color:var(--muted);font-size:12.5px;margin-top:2px;line-height:1.5}
.yt-word{font-size:11.5px;text-transform:uppercase;letter-spacing:.08em;white-space:nowrap}
@media (prefers-reduced-motion: reduce){.yt-row{animation:none}}
@media (max-width:680px){.yt-row{grid-template-columns:52px 1fr}.yt-word{display:none}}

/* ---- District record sets ---- */
.dist-links{margin-top:8px;font-size:13px;line-height:1.9}
.dist-links a{margin-right:2px}

/* ---- Feature markers: the per-building dot matrix (Layer 2) ----
   Three states must stay visually distinct at 7px, including for red/green
   colour blindness — so state is carried by fill AND border weight, never by
   hue alone. `yes-conv` (evidence for the ordinary account) is deliberately
   the calm colour; `yes-alt` is the only one that draws the eye. */
.mk{display:inline-block;width:7px;height:7px;border-radius:2px;margin-right:2px;vertical-align:middle;border:1px solid transparent}
.mk-yes{background:var(--text);border-color:var(--text)}
.mk-yes-alt{background:var(--accent);border-color:var(--accent);box-shadow:0 0 5px rgba(247,147,26,.5)}
.mk-yes-conv{background:var(--green);border-color:var(--green)}
.mk-no{background:transparent;border-color:var(--muted)}
.mk-unk{background:transparent;border-color:var(--line);border-style:dotted}

.mk-strip{display:flex;align-items:center;gap:4px;margin:6px 0 2px}
.mk-strip .mk{width:8px;height:8px;margin-right:0}
.mk-count{font-size:10px;color:var(--muted);font-variant-numeric:tabular-nums;letter-spacing:.03em}

.mk-panel{margin:16px 0;padding:14px 16px;background:var(--panel);border:1px solid var(--line);border-radius:12px}
.mk-phead{display:flex;justify-content:space-between;align-items:baseline;gap:12px;margin-bottom:10px;flex-wrap:wrap}
.mk-pcov{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.mk-qgroup{margin:10px 0;padding-top:9px;border-top:1px solid var(--line)}
.mk-qgroup:first-of-type{border-top:0;padding-top:0}
.mk-qhead{font-size:12px;margin-bottom:6px}
.mk-qhead b{margin-right:8px}
.mk-qhead span{color:var(--muted)}
.mk-list{display:flex;flex-wrap:wrap;gap:5px 12px}
.mk-item{font-size:11.5px;color:var(--muted);display:inline-flex;align-items:center;gap:2px}
.mk-i-yes,.mk-i-yes-conv{color:var(--text)}
.mk-i-yes-alt{color:var(--accent-t)}
.mk-i-unk{opacity:.5}
.mk-none{font-size:11px;color:var(--muted);font-style:italic;margin-top:4px}
.mk-legend{display:flex;flex-wrap:wrap;gap:6px 16px;margin-top:12px;padding-top:10px;border-top:1px solid var(--line);font-size:10.5px;color:var(--muted)}
.mk-foot{margin-top:9px;font-size:10.5px;color:var(--muted);line-height:1.5}

.mk-cov{margin:14px 0}
.mk-covhead{font-size:12px;color:var(--muted);margin-bottom:8px}
.mk-fix{color:var(--amber-t)}
.mk-dim{opacity:.45}
.mk-bar{display:inline-block;width:64px;height:5px;background:var(--line);border-radius:3px;overflow:hidden;margin-right:7px;vertical-align:middle}
.mk-bar i{display:block;height:100%;background:var(--accent)}
@media (max-width:680px){.mk-strip{gap:5px}.mk-legend{gap:4px 10px}}

/* ---- Absence panel (Layer 2) ---- */
.ab-wrap{margin:22px 0}
.ab-dek{color:var(--muted);font-size:12.5px;max-width:74ch;line-height:1.6;margin:4px 0 14px}
.ab-table td{vertical-align:middle}
.ab-spark{white-space:nowrap}
.ab-band{display:inline-flex;align-items:flex-end;height:48px;width:13px;margin-right:2px;vertical-align:bottom}
.ab-band i{display:block;width:100%;border-radius:2px 2px 0 0;opacity:.85}
.ab-num{font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}
.ab-tag{font-size:10.5px;border:1px solid;border-radius:10px;padding:1px 7px;white-space:nowrap}
.ab-note{color:var(--muted);font-size:11px;max-width:42ch;line-height:1.45}
.ab-foot{margin-top:12px;padding-top:11px;border-top:1px solid var(--line);color:var(--muted);font-size:11.5px;line-height:1.6}
.ab-foot p{margin:6px 0}
@media (max-width:900px){.ab-note{display:none}}

/* ---- Opening deck (Layer 2) ----
   One card at a time. The watermark is a real building from the catalogue,
   pushed far enough back that the text always wins — if the image competes with
   the words, the card has failed at its only job. */
/* Column flex, everything in flow. The nav and the CTA row used to be
   `position:absolute` pinned to `bottom:22px` and `bottom:64px`, with the card
   reserving clearance via `padding-bottom:52px` (104 on the last card). Three magic
   numbers that had to stay in agreement, and they did not: the CTA row overlapped the
   nav by 6px, and at any width where the CTA links wrapped to a second line it climbed
   into the closing paragraph. In flow they cannot collide with each other or with the
   text at any width, and the three magic numbers are gone. */
.dk{position:relative;min-height:min(78vh,720px);display:flex;flex-direction:column;align-items:center;justify-content:center;padding:8px 0 32px}
/* Cards were `position:absolute;inset:0`, which pinned every card to the deck's
   720px box regardless of how much text it held. Card 2 needs 857px. With
   `align-items:center` the surplus escaped equally out of the TOP and the BOTTOM,
   so the opening line rode up out of the container and the closing line ran under
   the nav. It read as cropping. It was overflow.
   Only one card is ever `display:flex`, so they never needed to be stacked in the
   first place — in-flow is enough, and now the deck grows to whatever the active
   card actually needs. */
.dk-card{position:relative;width:100%;display:none;align-items:center;justify-content:center;padding:0 4vw}
.dk-card.on{display:flex;animation:dkIn .42s var(--ease,cubic-bezier(.2,.7,.3,1))}
@keyframes dkIn{from{opacity:0;transform:translateY(14px)}to{opacity:1;transform:none}}
/* The watermark used to fill the whole card. On a wide monitor that box is 3.5:1,
   and `cover` on a 3.5:1 frame crops a portrait building photo down to a band of
   masonry — the building was gone. Constrained to a portrait-friendly column so
   `cover` has something close to the photo's own aspect to work with. */
.dk-wm{position:absolute;top:0;bottom:0;left:50%;transform:translateX(-50%);
  width:min(100%,1180px);background-size:cover;background-position:center 42%;opacity:.10;
  filter:grayscale(1) contrast(1.1);pointer-events:none;
  -webkit-mask-image:radial-gradient(ellipse at 50% 45%,#000 20%,transparent 78%);
          mask-image:radial-gradient(ellipse at 50% 45%,#000 20%,transparent 78%)}
.dk-inner{position:relative;max-width:65ch;width:100%}
.dk-num{font-size:11px;letter-spacing:.14em;color:var(--accent-t);font-variant-numeric:tabular-nums;margin-bottom:10px}
.dk-num span{color:var(--muted)}
.dk-h{font-size:clamp(26px,4.2vw,40px);line-height:1.12;letter-spacing:-.02em;margin:0 0 18px}
.dk-b{font-size:15.5px;line-height:1.68;color:var(--text);margin:0 0 13px;max-width:62ch}
/* beat 2 is the counterargument — set it back so the reader feels the concession */
.dk-b1{color:var(--muted)}
/* beat 3 is the only part that is ours */
.dk-b2{border-left:2px solid var(--accent);padding-left:14px}
.dk-b3{color:var(--muted);font-size:14.5px}
.dk-fig{margin-top:18px;padding-top:14px;border-top:1px solid var(--line);display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
.dk-fig b{font-size:30px;font-weight:750;color:var(--accent-t);font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.dk-fig span{font-size:12px;color:var(--muted);max-width:44ch;line-height:1.5}
/* order: card (0) -> CTA row (2) -> arrows and dots (3). DOM order is card, nav, end. */
.dk-nav{order:3;margin-top:24px;display:flex;align-items:center;gap:16px;z-index:2}
.dk-nav button{background:var(--panel);border:1px solid var(--line);color:var(--text);border-radius:50%;
  width:34px;height:34px;cursor:pointer;font-size:15px;line-height:1;transition:border-color .15s,opacity .15s}
.dk-nav button:hover:not(:disabled){border-color:var(--accent)}
.dk-nav button:disabled{opacity:.28;cursor:default}
.dk-dots{display:flex;gap:7px}
.dk-dots i{width:6px;height:6px;border-radius:50%;background:var(--line);cursor:pointer;transition:background .2s,transform .2s}
.dk-dots i.on{background:var(--accent);transform:scale(1.45)}
.dk-end{order:2;margin-top:30px;display:none;gap:14px 20px;align-items:center;justify-content:center;flex-wrap:wrap;max-width:65ch;z-index:2}
.dk-end.on{display:flex;animation:dkIn .4s ease}
.dk-cta{background:var(--accent);color:#111;font-weight:650;padding:11px 24px;border-radius:24px;font-size:14.5px;white-space:nowrap}
.dk-cta:hover{text-decoration:none;filter:brightness(1.08)}
.dk-alt{color:var(--muted);font-size:12.5px;white-space:nowrap}
@media (max-width:680px){
  .dk{min-height:82vh;padding-bottom:96px}
  .dk-b{font-size:15px;line-height:1.62}
  .dk-fig b{font-size:25px}
  .dk-end{flex-direction:column;gap:10px}
}
@media (prefers-reduced-motion:reduce){.dk-card.on,.dk-end.on{animation:none}}

/* ---- Threshold, plain-language pass (2026-08-05) ----
   The page was written as an evidentiary standard and read like one. Ron, who owns
   the project and knows stats, said he could barely follow it — which means no
   visitor could. The adopted wording is unchanged and still on the page; it just no
   longer stands in front of the plain sentence. */
.thr-why{border-left:3px solid var(--accent);padding:2px 0 2px 16px;margin-top:4px}
.thr-why h3{margin:0 0 8px;font-size:19px;letter-spacing:-.01em}
.thr-why p{margin:0;font-size:15px;line-height:1.62;max-width:70ch;color:var(--text)}
.thr-plain{font-size:14.5px;line-height:1.6;color:var(--text);max-width:74ch;margin-top:5px}
.thr-formal{margin-top:8px}
.thr-formal summary{cursor:pointer;color:var(--muted);font-size:12px;letter-spacing:.01em}
.thr-formal summary:hover{color:var(--accent-t)}
.thr-formal .note{margin-top:6px;padding-left:12px;border-left:1px solid var(--line)}

/* Under-construction marker (2026-08-05). Small on purpose: it sets expectations,
   it does not apologise. A project that publishes its own defect log can afford to
   say which rooms are unfinished. */
.wip{display:inline-flex;align-items:center;gap:9px;font-size:11.5px;color:var(--muted);
  border:1px dashed var(--line);border-radius:20px;padding:4px 12px;margin-bottom:12px}
.wip span{color:var(--accent-t);font-weight:650;letter-spacing:.02em}

/* Empty story cards (2026-08-05). A story with no records must not look like a card
   that failed to load — it must look deliberate and say why it is empty. */
.scard.isempty{opacity:.72}
.schero.ph.none{display:flex;align-items:center;justify-content:center;
  border:1px dashed var(--line);background:transparent}
.schero.ph.none span{font-size:10.5px;color:var(--muted);letter-spacing:.04em}
.stake.stempty{color:var(--muted);font-style:italic}

/* ---- Open Inquiry (2026-08-06) ---- documentary voice, collaboration surface. */
.iq-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px;margin:10px 0 4px}
.iq-line{background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:14px 16px}
.iq-cat{font-size:10.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--accent-t);font-weight:650;margin-bottom:6px}
.iq-h{font-size:16px;margin:0 0 8px;letter-spacing:-.01em}
.iq-see{font-size:14px;line-height:1.6;color:var(--text);margin:0 0 8px}
.iq-do{font-size:13.5px;line-height:1.6;color:var(--muted);margin:0;border-left:2px solid var(--accent);padding-left:12px}
.iq-two{display:grid;grid-template-columns:2fr 1fr;gap:18px;margin-top:8px}
.iq-two p{font-size:14.5px;line-height:1.62;max-width:68ch}
.iq-rule{background:var(--panel2);border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:12px;padding:14px 16px;align-self:start}
.iq-rk{font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--accent-t);font-weight:700;margin-bottom:8px}
.iq-rule p{font-size:13.5px;line-height:1.6;color:var(--muted);margin:0}
.iq-vision,.iq-path{max-width:74ch}
.iq-vision p,.iq-path p{font-size:14.5px;line-height:1.66;margin:0 0 11px}
.iq-lead,.iq-path .iq-close{font-size:17px;font-weight:600;letter-spacing:-.01em;color:var(--text)}
.iq-props{margin:4px 0 12px;padding-left:0;list-style:none}
.iq-props li{font-size:14px;line-height:1.6;margin:0 0 10px;padding-left:16px;border-left:2px solid var(--line)}
.iq-die{color:var(--muted)}
.iq-cta-row{display:flex;gap:16px;align-items:center;flex-wrap:wrap;margin:22px 0 6px}
@media (max-width:720px){.iq-two{grid-template-columns:1fr}}

/* Open Inquiry — strategic-domains rework (2026-08-06) */
/* Authority banner: this tab is speculation, marked subordinate to the evidence tabs.
   Dashed amber frame + muted so it can never read like a Threshold result. */
.iq-authority{max-width:74ch;margin:0 0 16px;padding:11px 14px;border:1px dashed var(--amber);border-radius:9px;background:var(--panel2);color:var(--muted);font-size:13.5px;line-height:1.55}
.iq-auth-badge{display:inline-block;margin-right:8px;padding:2px 9px;border-radius:20px;font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--amber-t);border:1px solid var(--amber)}
.iq-frame{max-width:74ch;margin-bottom:14px}
.iq-frame p{font-size:14.5px;line-height:1.64;margin:0 0 10px}
.iq-beat{font-size:13px;line-height:1.55;color:var(--muted);margin:8px 0 0;padding-left:12px;border-left:2px solid var(--line)}
.iq-adjacent{font-size:13px;line-height:1.6;color:var(--muted);max-width:74ch;margin:14px 0 4px;padding:10px 14px;border:1px dashed var(--line);border-radius:10px}

/* Open Inquiry — "Where this leads" gated speculation view (2026-08-06) */
.iq-gate{background:var(--panel2);border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:12px;padding:14px 16px;margin:10px 0 16px;max-width:74ch}
.iq-gate-k{font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--accent-t);font-weight:700;margin-bottom:8px}
.iq-gate p{font-size:14px;line-height:1.62;margin:0;color:var(--text)}
.iq-qs{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:14px;margin:8px 0 6px}
.iq-q{background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:14px 16px}
.iq-qh{font-size:15.5px;margin:0 0 8px;letter-spacing:-.01em;color:var(--accent-t)}
.iq-q p{font-size:14px;line-height:1.62;margin:0;color:var(--text)}

/* Table view toggles (2026-08-06) */
.tbltools{display:flex;gap:16px;align-items:center;flex-wrap:wrap;margin-bottom:10px}
.tbl-toggle{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--muted);cursor:pointer;user-select:none}
.tbl-toggle input{accent-color:var(--accent);cursor:pointer}

/* Feasibility — collapsed qualifiers + card grid (2026-08-06) */
.feas-stats{display:flex;gap:10px;flex-wrap:wrap;margin:10px 0}
.feas-chip{background:var(--panel2);border:1px solid var(--line);border-radius:10px;padding:8px 14px;display:flex;flex-direction:column;gap:1px;min-width:96px}
.feas-chip b{font-size:20px;font-weight:700;font-variant-numeric:tabular-nums;letter-spacing:-.02em}
.feas-chip span{font-size:11px;color:var(--muted)}
.feas-chip.red b{color:var(--red-t)} .feas-chip.amber b{color:var(--amber-t)}
.feas-more{margin:2px 0 6px}
.feas-more summary{cursor:pointer;color:var(--muted);font-size:12.5px}
.feas-more summary:hover{color:var(--accent-t)}
.feas-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:10px;margin:4px 0}
.feas-card{background:var(--panel2);border:1px solid var(--line);border-radius:11px;padding:11px 13px;display:block}
a.feas-card.fc-link{color:inherit}
a.feas-card.fc-link:hover{border-color:var(--accent);text-decoration:none}
.fc-top{display:flex;justify-content:space-between;align-items:baseline;gap:8px;margin-bottom:4px}
.fc-top b{font-size:13.5px;letter-spacing:-.01em;line-height:1.25}
.fc-sub{font-size:11.5px;color:var(--muted);margin-bottom:7px;display:flex;gap:6px;flex-wrap:wrap;align-items:center}

/* Open Inquiry — living-project note, contact, roadmap + blockers (2026-08-06) */
.iq-living{background:rgba(255,176,74,.06);border:1px solid rgba(255,176,74,.28);border-radius:12px;padding:13px 16px;margin:10px 0 16px;max-width:76ch;font-size:14px;line-height:1.6;color:var(--text)}
.iq-live-k{display:block;font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--accent-t);font-weight:700;margin-bottom:6px}
.iq-contact{display:flex;gap:14px;align-items:center;flex-wrap:wrap;margin-top:14px}
.iq-contact-note{font-size:12px;color:var(--muted)}
.iq-road{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:6px 0}
.iq-road-col{background:var(--panel2);border:1px solid var(--line);border-radius:12px;padding:14px 16px}
.iq-road-k{font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:var(--accent-t);font-weight:700;margin-bottom:8px}
.iq-road ul{margin:0;padding-left:18px}
.iq-road li{font-size:13.5px;line-height:1.55;margin-bottom:8px;color:var(--text)}
.iq-block{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:12px;margin:6px 0}
.iq-blk{background:var(--panel2);border:1px solid var(--line);border-left:3px solid var(--accent);border-radius:11px;padding:12px 14px;font-size:13.5px;line-height:1.55}
@media (max-width:720px){.iq-road{grid-template-columns:1fr}}

/* ---- Card evidence meter (2026-08-19) --------------------------------------
   Replaces four readings of one idea: the bare .cbar, a duplicate ${pct}% chip,
   six unlabelled evidence dots and the marker strip. All four answered "how well
   do we know this building?" and none of them said so on the card. Dots and the
   marker strip moved to the detail panel, which has room to name them.
   Sequential by the book: one hue, a light track of that hue, more-is-more, so
   the state reads across the whole bar rather than only at the fill edge. */
.mrow{display:flex;justify-content:space-between;align-items:baseline;margin-top:9px}
.mlab{font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:600}
.mval{font-size:12px;font-weight:700;font-variant-numeric:tabular-nums}
.meter{height:6px;border-radius:4px;overflow:hidden;margin-top:4px;background:rgba(247,147,26,.16)}
.meter>i{display:block;height:100%;border-radius:4px;background:var(--accent)}
.meter.lo>i{background:#8a6a3a}
.meter.mid>i{background:#c98f2f}
.meter.hi>i{background:var(--accent)}
.msub{color:var(--muted);font-size:11px;margin-top:5px}
.needs{margin-top:8px;font-size:10.5px;color:var(--muted);border-top:1px dashed var(--line);padding-top:6px}
/* Fate marks are neutral, not alarming. A demolished building is a fact, not a finding. */
.tag.gray{color:var(--muted);border-color:var(--line)}

/* ---- Grouped filter bar (2026-08-19) ---------------------------------------
   Ron: "the reader has no idea what these are", and "make the buttons touch on
   the right and left edges if grouped btw a pipe". Buttons inside a group share
   an edge and read as one control; the pipe carries the separation between
   groups. Borders collapse with a -1px margin so a shared edge stays 1px. */
#filters{display:flex;flex-wrap:wrap;align-items:center;gap:0}
.fgroup{display:inline-flex;align-items:center;flex-wrap:wrap}
.flab{font-size:10px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);font-weight:700;margin-right:8px;white-space:nowrap}
.fsep{display:inline-block;width:1px;height:17px;background:var(--line);margin:0 13px;flex:none}
.fgroup .fbtn{border-radius:0}
.fgroup .fbtn+.fbtn{margin-left:-1px}
.fgroup .fbtn:first-of-type{border-radius:20px 0 0 20px}
.fgroup .fbtn:last-of-type{border-radius:0 20px 20px 0}
/* a selected button must paint its whole border, not have it overlapped by the next */
.fgroup .fbtn.on,.fgroup .fbtn:hover{position:relative;z-index:1}

/* Same treatment on the header tabs, which are already pipe-grouped. */
.tabs .tab{border-radius:0}
.tabs .tab+.tab{margin-left:-1px}
.tabs .tab:first-of-type{border-radius:8px 0 0 8px}
.tabs .tab:last-of-type{border-radius:0 8px 8px 0}
.tabs .tabsep+.tab{border-radius:8px 0 0 8px}
.tabs .tab:has(+.tabsep){border-radius:0 8px 8px 0}
/* A group of one - Stories, Threshold, Questions - matched both the "first in group" and
   "last in group" rules above, and the later one won, so it rendered with two square corners
   against nothing. Round it on both sides. Ordering matters: these must stay last. */
.tabs .tabsep+.tab:has(+.tabsep){border-radius:8px}
.tabs .tab:first-of-type:has(+.tabsep){border-radius:8px}
.tabs .tabsep+.tab:last-of-type{border-radius:8px}
.tabs .tab.on,.tabs .tab:hover{position:relative;z-index:1}

/* ---- Correction bar (2026-08-19, Ron) --------------------------------------
   On every page and every building rather than buried on one tab. Quiet by
   design: it is a standing offer, not a call to action competing with the
   content above it. Sits outside #view so route changes cannot wipe it. */
.tipbar{display:flex;gap:12px;align-items:center;flex-wrap:wrap;
  max-width:1020px;margin:34px auto 0;padding:16px 20px 20px;
  border-top:1px solid var(--line)}
.tipbar-note{font-size:12px;color:var(--muted)}
.tipbar-note b{color:var(--text);font-weight:600}
@media(max-width:640px){.tipbar{margin-top:24px;padding:14px 14px 18px;gap:8px}}

/* Map coverage note (2026-08-20). The map can only draw what has coordinates, and
   28% of the corpus does not. Stating the gap under the map is the same discipline
   the rest of the catalogue uses for a missing field: absence is recorded, not hidden. */
.mapcov{margin-top:10px;padding:11px 14px;background:var(--panel);border:1px solid var(--line);
  border-left:3px solid var(--amber);border-radius:10px;font-size:12.5px;line-height:1.55;color:var(--text)}
.mapcov b{color:var(--accent-t)}
.mapcov-note{display:block;margin-top:4px;color:var(--muted);font-size:11.5px}

/* Architect state filter (2026-08-20). 4,199 architects, 80 cards rendered - without a
   way to narrow, nobody finds their own state. */
.ar-state{margin-left:14px;font-size:12px;color:var(--muted)}
.ar-state select{margin-left:6px;background:var(--panel2);color:var(--text);border:1px solid var(--line);border-radius:8px;padding:5px 9px;font-size:12px}
.ar-scope{color:var(--muted);font-size:12.5px;margin:8px 0 14px}
.ar-scope b{color:var(--text)}


/* Labour-ratio meters (analytics.js::ratioMeter_). Not the same object as .sbar: .sbar is a
   share of its own track and always fits. These carry a break-even mark, because the values
   that matter are the ones that cross it, and each denominator gets its own row so the
   number a reader sees is the number the bar beside it is drawing. */
.rline{display:flex;align-items:center;gap:7px;margin:4px 0}
.rlab{flex:0 0 52px;font-size:11px;color:var(--muted)}
.rval{flex:0 0 auto;min-width:56px;text-align:right;font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.rbar{position:relative;flex:1 1 auto;height:7px;background:var(--panel2);border-radius:4px}
.rbar>i{display:block;height:100%;border-radius:4px}
.rbar-mark{position:absolute;top:-2px;bottom:-2px;width:1px;margin-left:-1px;background:var(--muted);opacity:.65}
.rbar-over>i{border-top-right-radius:0;border-bottom-right-radius:0}
/* Ragged end for a value that ran past the track. Striped against the TRACK colour, not
   transparent: over a red fill a red-on-transparent hatch is invisible, which is how the
   first pass shipped a 1448% bar that looked identical to a 150% one. */
.rbar-over::after{content:"";position:absolute;right:0;top:0;bottom:0;width:9px;border-radius:0 4px 4px 0;background:repeating-linear-gradient(115deg,var(--panel2) 0 2px,transparent 2px 4px)}
.rbar-legend{font-size:12px;color:var(--muted);margin:2px 0 8px}
/* What the headline counts (overview.js::recordMix). One quiet line under the stat tiles:
   7,874 is a true count of records and never was a count of buildings. */
.ovmix{color:var(--muted);font-size:12.5px;line-height:1.55;margin:2px 0 14px}
.ovmix b{color:var(--text);font-weight:600;font-variant-numeric:tabular-nums}
