/* =====================================================================
   GridSignals app stylesheet.

   Extracted verbatim from the single-file page's <style> block (the CSP
   refactor: no inline style anywhere), with three additions at the end:
   the self-hosted font faces, the app shell / route chrome, and the two
   new Route 1 surfaces -- the one-line band summary and the history
   statistics block.

   THE FONTS ARE SELF-HOSTED. The page previously loaded IBM Plex from
   Google's font CDN, over two preconnected third-party hosts. Both hosts
   are gone; the latin subsets are vendored under fonts/ and served from
   this origin, so `font-src 'self'` holds with no exception, and the page
   makes no request off its own origin at all. The families named in
   the rules below are unchanged, so every rule that asked for IBM Plex
   still gets IBM Plex -- from here instead of from Google.
   ===================================================================== */

/* ---------- self-hosted faces (SIL OFL 1.1; see fonts/LICENSE.txt) ---------- */
@font-face{
  font-family:"IBM Plex Sans";
  font-style:normal;
  font-weight:100 700;            /* one variable file covers 400/500/600/700 */
  font-display:swap;
  src:url("/fonts/ibm-plex-sans-latin.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"IBM Plex Mono";
  font-style:normal;font-weight:400;font-display:swap;
  src:url("/fonts/ibm-plex-mono-400-latin.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"IBM Plex Mono";
  font-style:normal;font-weight:500;font-display:swap;
  src:url("/fonts/ibm-plex-mono-500-latin.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}
@font-face{
  font-family:"IBM Plex Mono";
  font-style:normal;font-weight:600;font-display:swap;
  src:url("/fonts/ibm-plex-mono-600-latin.woff2") format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD;
}

/* ---------- palette: complete light set on bare :root ---------- */
:root{
  --ground:#F2F4F7;
  --surface:#FFFFFF;
  --surface-2:#F7F9FB;
  --ink:#111823;
  --ink-2:#4F5B6B;
  --ink-3:#7C8899;
  --rule:#D5DBE3;
  --rule-2:#E7EBF1;
  --accent:#1D5C8F;
  --accent-soft:#D9E7F2;
  --quote:#B0632B;
  --hazard:#A0362A;
  --hazard-soft:#F2DCD8;
  --crossing:#5B4699;
  --crossing-soft:#E4DDF2;
  --ok:#2A6449;
  --on-accent:#FFFFFF;
  --shadow:0 1px 2px rgba(17,24,35,.06),0 10px 26px -14px rgba(17,24,35,.20);
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --ground:#0C1117;
    --surface:#141B24;
    --surface-2:#1A232E;
    --ink:#E8EDF4;
    --ink-2:#9DAABA;
    --ink-3:#75828F;
    --rule:#26303C;
    --rule-2:#1E2732;
    --accent:#67A6DF;
    --accent-soft:#1A3245;
    --quote:#DA9058;
    --hazard:#E37364;
    --hazard-soft:#39221F;
    --crossing:#AE95E3;
    --crossing-soft:#292240;
    --ok:#5FB489;
    --on-accent:#0C1117;
    --shadow:0 1px 2px rgba(0,0,0,.45),0 12px 30px -16px rgba(0,0,0,.75);
  }
}
:root[data-theme="dark"]{
  --ground:#0C1117;
  --surface:#141B24;
  --surface-2:#1A232E;
  --ink:#E8EDF4;
  --ink-2:#9DAABA;
  --ink-3:#75828F;
  --rule:#26303C;
  --rule-2:#1E2732;
  --accent:#67A6DF;
  --accent-soft:#1A3245;
  --quote:#DA9058;
  --hazard:#E37364;
  --hazard-soft:#39221F;
  --crossing:#AE95E3;
  --crossing-soft:#292240;
  --ok:#5FB489;
  --on-accent:#0C1117;
  --shadow:0 1px 2px rgba(0,0,0,.45),0 12px 30px -16px rgba(0,0,0,.75);
}

/* ---------- base ---------- */
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;
  background:var(--ground);
  color:var(--ink);
  font-family:"IBM Plex Sans",ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Helvetica,Arial,sans-serif;
  font-size:15px;
  line-height:1.55;
  -webkit-font-smoothing:antialiased;
}
h1,h2{margin:0;letter-spacing:-.012em;text-wrap:balance}
.wrap{max-width:1160px;margin:0 auto;padding:30px 22px 64px;display:flex;flex-direction:column;gap:22px}
.mono{font-family:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-variant-numeric:tabular-nums}
.eyebrow{font-size:10.5px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3)}
.vh{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap}

:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:3px}
svg .slot:focus{outline:none}
svg .slot:focus-visible rect.hit{stroke:var(--accent);stroke-width:1.5;stroke-dasharray:2 2;fill:var(--accent-soft);fill-opacity:.35}

/* ---------- header ---------- */
header.top{
  display:flex;flex-wrap:wrap;gap:14px 26px;align-items:baseline;justify-content:space-between;
  border-bottom:1px solid var(--rule);padding-bottom:16px;
}
header.top h1{font-size:26px;font-weight:700}
header.top .daycx{display:block;margin-top:4px;font-size:13.5px;color:var(--ink-2)}
.asof{font-size:12px;color:var(--ink-2);white-space:nowrap}
.asof b{font-weight:500;color:var(--ink)}

/* ---------- summary strip ---------- */
.summary{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.stat{
  background:var(--surface);border:1px solid var(--rule);border-radius:6px;
  padding:12px 14px;box-shadow:var(--shadow);min-width:0;
}
.stat .v{font-size:21px;font-weight:600;margin-top:3px;letter-spacing:-.01em}
.stat .m{font-size:12.5px;color:var(--ink-2);margin-top:1px}

/* ---------- panel + controls ---------- */
.panel{background:var(--surface);border:1px solid var(--rule);border-radius:6px;box-shadow:var(--shadow)}
.controls{
  display:flex;flex-wrap:wrap;gap:14px 22px;align-items:flex-end;
  padding:14px 16px;border-bottom:1px solid var(--rule-2);
}
.ctl{display:flex;flex-direction:column;gap:5px;min-width:0}
.ctl > label,.ctl > .eyebrow{line-height:1.2}
select,input[type="date"]{
  font-family:inherit;font-size:14px;color:var(--ink);background:var(--surface-2);
  border:1px solid var(--rule);border-radius:4px;padding:6px 9px;min-height:34px;
}
input[type="date"]{font-family:"IBM Plex Mono",ui-monospace,monospace;font-variant-numeric:tabular-nums}
.seg{display:inline-flex;border:1px solid var(--rule);border-radius:4px;overflow:hidden;background:var(--surface-2)}
.seg button{
  font-family:"IBM Plex Mono",ui-monospace,monospace;font-variant-numeric:tabular-nums;
  font-size:13px;color:var(--ink-2);background:transparent;border:0;
  padding:7px 13px;min-height:34px;cursor:pointer;border-left:1px solid var(--rule);
}
.seg button:first-child{border-left:0}
.seg button[aria-pressed="true"]{background:var(--accent);color:var(--on-accent);font-weight:600}
.seg button:hover:not([aria-pressed="true"]){background:var(--accent-soft);color:var(--ink)}
.certtag{font-size:11px;color:var(--ink-3);margin-top:3px}
.rangewrap{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.rangewrap .dash{color:var(--ink-3)}
.ctl .hint{font-size:11px;color:var(--ink-3)}
.msg{font-size:12.5px;color:var(--quote);padding:0 16px 12px}
.msg:empty{display:none}

/* ---------- chart ---------- */
.chartbox{padding:10px 8px 4px;position:relative}
.chartbox svg{display:block;width:100%;height:auto}
.readout{
  display:flex;flex-wrap:wrap;gap:6px 18px;align-items:baseline;
  padding:8px 16px 14px;font-size:13px;color:var(--ink-2);min-height:38px;
}
.readout .k{color:var(--ink-3);font-size:11px;letter-spacing:.08em;text-transform:uppercase}
.readout .val{color:var(--ink);font-weight:500}
.readout .wh{color:var(--quote)}
.legend{display:flex;flex-wrap:wrap;gap:8px 18px;padding:0 16px 14px;font-size:12px;color:var(--ink-2)}
.legend span{display:inline-flex;align-items:center;gap:6px}
.legend i{width:16px;height:0;border-top-width:2px;border-top-style:solid;display:inline-block}
.legend i.act{border-color:var(--ink-2)}
.legend i.fc{border-color:var(--accent)}
.legend i.env{height:9px;border:1px solid var(--accent);background:var(--accent-soft);border-radius:2px}
.legend i.thin{height:9px;width:9px;border:1px dashed var(--ink-3);border-radius:50%}
.legend i.wh{height:9px;border:1px dashed var(--quote);border-radius:2px;background:transparent}

/* ---------- publication line ---------- */
.publine{margin:0;padding:0 16px 12px;font-size:12.5px;color:var(--ink-2)}
.publine:empty{display:none}
.publine b{font-weight:500;color:var(--ink)}
.publine .wh{color:var(--quote)}


/* ---------- svg text ---------- */
svg text{font-family:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-variant-numeric:tabular-nums}
svg .ax{font-size:11px;fill:var(--ink-3)}
svg .axt{font-size:10px;fill:var(--ink-3);letter-spacing:.06em}
svg .axd{font-family:"IBM Plex Sans",ui-sans-serif,system-ui,sans-serif;font-size:11.5px;font-weight:600;fill:var(--ink-2)}
svg .seamtx{font-size:10px;fill:var(--ink-3);letter-spacing:.09em;text-transform:uppercase}
svg .gaptx{font-family:"IBM Plex Sans",ui-sans-serif,system-ui,sans-serif;font-size:11px;fill:var(--ink-3);letter-spacing:.04em}
svg .whtx{font-family:"IBM Plex Sans",ui-sans-serif,system-ui,sans-serif;font-size:10.5px;fill:var(--quote);letter-spacing:.05em}

/* ---------- table ---------- */
.tablewrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
table{border-collapse:collapse;width:100%;font-size:13.5px}
caption{text-align:left;padding:14px 16px 8px;color:var(--ink-2);font-size:12.5px}
th,td{padding:6px 14px;text-align:right;white-space:nowrap;border-bottom:1px solid var(--rule-2)}
th:first-child,td:first-child{text-align:left}
thead th{
  position:sticky;top:0;background:var(--surface);z-index:1;
  font-size:10.5px;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-3);font-weight:600;
  border-bottom:1px solid var(--rule);
}
tbody td{font-family:"IBM Plex Mono",ui-monospace,monospace;font-variant-numeric:tabular-nums}
tbody tr:hover td{background:var(--surface-2)}
tbody tr.dayhead td{
  background:var(--surface-2);font-family:inherit;color:var(--ink-2);
  font-size:11px;letter-spacing:.09em;text-transform:uppercase;font-weight:600;
}
tbody tr.gap td{background:var(--surface-2);color:var(--ink-3);font-family:inherit;text-align:left}
td.na{color:var(--ink-3)}
td.wh{color:var(--quote)}
tbody tr.dayhead td .pub{font-family:"IBM Plex Sans",ui-sans-serif,system-ui,sans-serif;
  font-size:11px;font-weight:400;letter-spacing:0;text-transform:none;color:var(--ink-3);margin-left:12px}
tbody tr.dayhead td .pub.wh{color:var(--quote)}
td .flag{color:var(--ink-3);font-size:11px;margin-left:6px}
td .prov{color:var(--ink-3);font-size:11px;margin-left:6px}

/* ---------- unavailable values ---------- */
.sr-only{
  position:absolute;width:1px;height:1px;overflow:hidden;
  clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;padding:0;margin:-1px;
}
td.unavail{color:var(--ink-3);background:var(--surface-2);box-shadow:inset 0 -1px 0 var(--rule)}
tbody tr:hover td.unavail{background:var(--surface-2)}
.segnotes{padding:0 16px}
.segnotes:empty{display:none}
.segment-note{margin:0 0 10px;font-size:12.5px;color:var(--ink-2)}

/* ---------- footer ---------- */
footer{border-top:1px solid var(--rule);padding-top:14px;color:var(--ink-3);font-size:12px}
footer .tag{
  display:inline-block;border:1px solid var(--rule);border-radius:3px;
  padding:0 6px;margin-right:8px;font-size:10.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);
}

@media (max-width:720px){
  .summary{grid-template-columns:1fr}
  header.top h1{font-size:22px}
  .wrap{padding:22px 14px 48px}
}
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{animation-duration:.001ms !important;animation-iteration-count:1 !important;transition-duration:.001ms !important;scroll-behavior:auto !important}
}


/* =====================================================================
   THE APP SHELL (new in phase 2a)
   ===================================================================== */

/* ---------- masthead + route nav ---------- */
header.site{
  display:flex;flex-wrap:wrap;gap:10px 24px;align-items:baseline;justify-content:space-between;
  border-bottom:1px solid var(--rule);padding-bottom:12px;
}
header.site .brand{
  font-size:17px;font-weight:700;letter-spacing:-.01em;color:var(--ink);text-decoration:none;
}
header.site .brand:hover{color:var(--accent)}
nav.routes{display:flex;flex-wrap:wrap;gap:2px}
nav.routes a{
  font-size:13px;color:var(--ink-2);text-decoration:none;
  padding:5px 11px;border-radius:4px;border:1px solid transparent;
}
nav.routes a:hover{background:var(--surface-2);color:var(--ink)}
nav.routes a[aria-current="page"]{
  background:var(--accent);color:var(--on-accent);font-weight:600;border-color:var(--accent);
}
.route[hidden]{display:none}
.route{display:flex;flex-direction:column;gap:22px}

/* ---------- data-layer status (fetch in flight / fetch failed) ---------- */
.loadstate{
  font-size:13px;color:var(--ink-2);background:var(--surface);border:1px solid var(--rule);
  border-radius:6px;padding:12px 14px;box-shadow:var(--shadow);
}
.loadstate:empty{display:none}
.loadstate.bad{color:var(--hazard);background:var(--hazard-soft);border-color:var(--hazard)}

/* ---------- the one summary line that replaced the per-hour x marks ---------- */
.bandsum{
  margin:0;padding:0 16px 12px;font-size:12.5px;color:var(--ink-2);
}
.bandsum:empty{display:none}
.bandsum b{font-weight:500;color:var(--ink);font-family:"IBM Plex Mono",ui-monospace,monospace;font-variant-numeric:tabular-nums}

/* ---------- history statistics ---------- */
.histstats{
  border-top:1px solid var(--rule-2);padding:12px 16px 14px;
  display:flex;flex-direction:column;gap:8px;
}
.histstats[hidden]{display:none}
.histstats .row{display:flex;flex-wrap:wrap;gap:8px 26px;align-items:baseline}
.histstats .fig{display:flex;flex-direction:column;gap:2px;min-width:0}
.histstats .fig .k{font-size:10.5px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3)}
.histstats .fig .v{
  font-size:18px;font-weight:600;letter-spacing:-.01em;
  font-family:"IBM Plex Mono",ui-monospace,monospace;font-variant-numeric:tabular-nums;
}
.histstats .fig .m{font-size:12px;color:var(--ink-2)}
.histstats .refuse{font-size:13px;color:var(--quote)}
.histstats .basis{font-size:12.5px;color:var(--ink-2);margin:0}
.histstats .caveat{font-size:12.5px;color:var(--quote);margin:0}
.histstats .caveat:empty,.histstats .basis:empty{display:none}

/* =====================================================================
   ROUTES 2-4 (phase 2b)
   ===================================================================== */

/* ---------- likelihood bands. Three named states, never a number ---------- */
.lk{
  display:inline-block;border-radius:3px;padding:0 7px;font-size:10.5px;font-weight:600;
  letter-spacing:.09em;text-transform:uppercase;border:1px solid transparent;white-space:nowrap;
}
.lk.high{background:var(--hazard-soft);color:var(--hazard);border-color:var(--hazard)}
.lk.elevated{background:var(--accent-soft);color:var(--accent);border-color:var(--accent)}
.lk.possible{background:var(--surface-2);color:var(--ink-2);border-color:var(--rule)}

/* ---------- constraint listing inside a table cell ---------- */
td.cx{text-align:left;white-space:normal;font-family:"IBM Plex Sans",ui-sans-serif,system-ui,sans-serif}
td.cx ul{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:4px}
td.cx li{display:flex;flex-wrap:wrap;gap:6px;align-items:baseline;font-size:12.5px}
td.cx .cxname{font-family:"IBM Plex Mono",ui-monospace,monospace;color:var(--ink)}
td.cx .cxmeta{color:var(--ink-3);font-size:11px}
td.cx .sp{color:var(--quote);font-family:"IBM Plex Mono",ui-monospace,monospace;font-variant-numeric:tabular-nums}
td.cx .est{color:var(--ink-3);font-size:11px}
td.cx .none{color:var(--ink-3);font-size:12.5px}

/* ---------- the R11 contribution panel (rendered only when populated) ---------- */
#cgEstimatePanel[hidden]{display:none}
.contrib{padding:14px 16px}
.contrib h2{font-size:15px;font-weight:600;margin-bottom:4px}
.contrib .lede{font-size:12.5px;color:var(--ink-2);margin:4px 0 12px}
.contrib .grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.contrib .fig{background:var(--surface-2);border:1px solid var(--rule-2);border-radius:5px;padding:10px 12px}
.contrib .fig .k{font-size:10.5px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3)}
.contrib .fig .v{font-size:20px;font-weight:600;font-family:"IBM Plex Mono",ui-monospace,monospace;font-variant-numeric:tabular-nums}
.contrib .fig .m{font-size:12px;color:var(--ink-2)}
.contrib ul.names{margin:12px 0 0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:6px}
.contrib ul.names li{
  font-family:"IBM Plex Mono",ui-monospace,monospace;font-size:12px;
  border:1px solid var(--rule);border-radius:3px;padding:1px 7px;color:var(--ink-2);background:var(--surface-2);
}

/* ---------- per-delivery status ---------- */
.st{
  display:inline-block;border-radius:3px;padding:0 7px;font-size:10.5px;font-weight:600;
  letter-spacing:.09em;text-transform:uppercase;border:1px solid;white-space:nowrap;
}
.st.settled{background:var(--surface-2);color:var(--ok);border-color:var(--ok)}
.st.provisional{background:var(--surface-2);color:var(--quote);border-color:var(--quote)}
.st.progress{background:var(--surface-2);color:var(--ink-3);border-color:var(--rule)}
.legend i.dot{width:9px;height:9px;border-radius:50%;border:2px solid;border-top-width:2px;display:inline-block}
.legend i.dot.settled{border-color:var(--ok);background:var(--ok)}
.legend i.dot.provisional{border-color:var(--quote);background:var(--surface)}
.legend i.dot.progress{border-color:var(--ink-3);background:var(--surface)}

/* ---------- offers ---------- */
td.side{text-align:left;font-family:"IBM Plex Sans",ui-sans-serif,system-ui,sans-serif;color:var(--ink-2)}
td.step .px{color:var(--ink)}
td.step .sh{color:var(--ink-3);font-size:11px;margin-left:6px}
.basisline{margin:0;padding:10px 16px 14px;font-size:12.5px;color:var(--ink-2);border-top:1px solid var(--rule-2)}
.basisline:empty{display:none}

/* ---------- services tiers ---------- */
.tiers{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:14px}
.tier{
  background:var(--surface);border:1px solid var(--rule);border-radius:6px;
  box-shadow:var(--shadow);padding:16px;display:flex;flex-direction:column;gap:8px;
}
.tier h2{font-size:18px;font-weight:700}
.tier .badge{
  align-self:flex-start;font-size:10px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;
  color:var(--quote);background:var(--surface-2);border:1px solid var(--quote);border-radius:3px;padding:1px 7px;
}
.tier .lede{font-size:13px;color:var(--ink-2);margin:0}
.tier ul{margin:0;padding-left:18px;font-size:13px;color:var(--ink-2);display:flex;flex-direction:column;gap:4px}
.tier .price{
  margin-top:auto;padding-top:10px;border-top:1px solid var(--rule-2);
  font-size:15px;font-weight:600;color:var(--ink);
}
.tier .price .sub{display:block;font-size:11.5px;font-weight:400;color:var(--ink-3);margin-top:2px}

/* ---------- trial form ---------- */
.trial{padding:16px;display:flex;flex-direction:column;gap:10px}
.trial h2{font-size:16px;font-weight:600}
.trial .lede{font-size:13px;color:var(--ink-2);margin:0}
.trial .fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px}
.trial input{
  font-family:inherit;font-size:14px;color:var(--ink);background:var(--surface-2);
  border:1px solid var(--rule);border-radius:4px;padding:6px 9px;min-height:34px;width:100%;
}
.trial .actions{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:center}
.trial button{
  font-family:inherit;font-size:14px;font-weight:600;color:var(--on-accent);background:var(--accent);
  border:1px solid var(--accent);border-radius:4px;padding:7px 16px;min-height:34px;cursor:pointer;
}
.trial textarea{
  font-family:inherit;font-size:14px;color:var(--ink);background:var(--surface-2);
  border:1px solid var(--rule);border-radius:4px;padding:6px 9px;width:100%;
  min-height:62px;resize:vertical;
}
.trial .wide{grid-column:1/-1}
.trial button:hover{filter:brightness(1.08)}
/* IN FLIGHT. The control is disabled for the duration of the request so a
   second click cannot file a second one -- and it has to LOOK disabled, or the
   reader clicks again and reads the pause as a dead page. */
.trial button[disabled]{opacity:.55;cursor:progress;filter:none}
.trial button[disabled]:hover{filter:none}
.trial .hint{font-size:11.5px;color:var(--ink-3)}
/* The outcome of a public form. The accepting colour is written by the SAME
   branch that writes the accepting sentence, so a refusal cannot arrive
   wearing it. */
.msg.ok{color:var(--ok)}
.msg.bad{color:var(--hazard)}

/* ---------- disclaimer ---------- */
.disclaimerbox{padding:14px 16px}
.disclaimer{margin:0;font-size:12px;line-height:1.6;color:var(--ink-2)}
.disclaimer:empty{display:none}

/* ---------- plot marks shared by routes 2 and 3 ---------- */
svg .zero{stroke:var(--ink-3);stroke-width:1;stroke-dasharray:1 3}

@media (max-width:720px){
  header.site{gap:8px 14px}
  .tiers{grid-template-columns:1fr}
}
