
/* A data publication with a broadcast masthead. Server-rendered, self-hosted fonts, no request to
   any other origin. One stylesheet, inlined into every page. Display: Big Shoulders Display
   (headlines, big numbers). Reading: Public Sans. Labels and data: IBM Plex Mono. All three under
   the SIL Open Font License (texts in /static/fonts). */

@font-face{font-family:"Big Shoulders Display";font-style:normal;font-weight:700 900;
  font-display:swap;src:url(/static/fonts/BigShouldersDisplay-latin-wght.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:"Public Sans";font-style:normal;font-weight:400 700;font-display:swap;
  src:url(/static/fonts/PublicSans-latin-wght.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:"Public Sans";font-style:italic;font-weight:400;font-display:swap;
  src:url(/static/fonts/PublicSans-latin-italic-400.woff2) format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,
    U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:400;font-display:swap;
  src:url(/static/fonts/IBMPlexMono-latin-400.woff2) format("woff2");
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,
    U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"IBM Plex Mono";font-style:normal;font-weight:500;font-display:swap;
  src:url(/static/fonts/IBMPlexMono-latin-500.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(/static/fonts/IBMPlexMono-latin-600.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}

:root{
  /* The rating palette, one definition for every map, tile, dot and chip (design review
     2026-10-07: four copies had drifted; Toss-up vs pale R merged for colour-blind readers). */
  --c-sd:#122e8a;--c-ld:#3166d8;--c-nd:#94b6ff;--c-d2:#c8d9fc;--c-tu:#b4b9c6;--c-r2:#fbd2cc;--c-nr:#ff9389;--c-lr:#d22c25;--c-sr:#8a130e;
  
  /* Type scale in rem from a 16px base, so a reader's own setting still wins. */
  --f-2xs:.6875rem; --f-xs:.75rem; --f-sm:.875rem; --f-md:1rem;
  --f-lg:1.125rem; --f-xl:1.375rem; --f-2xl:1.75rem; --f-3xl:2.375rem; --f-4xl:3.25rem;
  --s1:.25rem; --s2:.5rem; --s3:.75rem; --s4:1rem; --s5:1.5rem;
  --s6:2rem; --s7:3rem; --s8:4rem;
  --r-sm:4px; --r-md:6px; --r-lg:8px;
  --gutter:16px;

  /* A deliberate neutral reading surface (cool grey, not cream) under a navy broadcast band. */
  --ink:#0e1525;          /* body text: 16.9:1 on --surface */
  --ink-soft:#364157;     /* secondary text that is still text: 9.6:1 */
  --dim:#56607a;          /* captions, labels, provenance: 6.3:1 on --surface, 5.8:1 on --bg */
  --rule:#d5dae4;
  --rule-soft:#e7eaf0;
  --bg:#f3f5f8;
  --surface:#fff;
  --surface-2:#edf0f5;
  --navy:#08132e; --navy-2:#0d2253; --gold:#ffc83d; --gold-ink:#7a5200;
  --now:#1d4ed8;          /* nowcast */
  --eday:#a14a07;         /* election day */
  --dem:#1d55d8;          /* 6.2:1 on white */
  --rep:#c0261e;          /* 5.9:1 on white */
  --ind:#6b3fa0;
  --accent:#1a4fcf;
  --shadow:0 1px 2px rgba(14,21,37,.06),0 1px 3px rgba(14,21,37,.07);
  --shadow-lift:0 2px 4px rgba(14,21,37,.06),0 10px 24px rgba(14,21,37,.10);
  --display:"Big Shoulders Display","Arial Narrow","Roboto Condensed","Helvetica Neue",
    Arial,sans-serif;
  --sans:"Public Sans",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",
    Arial,sans-serif;
  --serif:var(--sans);
  --mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  color-scheme:light;
}
@media(prefers-color-scheme:dark){
  :root{
    --ink:#e8ecf5; --ink-soft:#bcc5d8; --dim:#97a2bb;
    --rule:#28324a; --rule-soft:#1d2539;
    --bg:#0a1020; --surface:#111a2e; --surface-2:#16213a;
    --gold-ink:#ffc83d;
    --now:#86a9ff; --eday:#f0a94a; --dem:#7ea6ff; --rep:#ff7d73; --ind:#c39bf2;
    --accent:#8fb3ff;
    --shadow:0 1px 2px rgba(0,0,0,.45); --shadow-lift:0 8px 26px rgba(0,0,0,.55);
    color-scheme:dark;
  }
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%}
body{
  margin:0; background:var(--bg); color:var(--ink);
  font:400 var(--f-md)/1.6 var(--sans);
  -webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
}
main{display:block;min-width:0;overflow-wrap:break-word;padding-bottom:var(--s7)}
.wrap{max-width:76rem;margin:0 auto;padding:0 var(--gutter);min-width:0}
.vh{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap;border:0}

/* ---- headings ---------------------------------------------------------------------- */
h1{
  font:800 clamp(2.1rem,4.6vw,3.25rem)/1 var(--display); letter-spacing:.005em;
  text-transform:uppercase; margin:var(--s6) 0 var(--s3); max-width:30ch; text-wrap:balance;
}
.sub{
  color:var(--ink-soft); margin:0 0 var(--s6);
  font:400 var(--f-lg)/1.5 var(--sans); max-width:62ch;
}
h2{
  font:800 var(--f-2xl)/1.05 var(--display); letter-spacing:.01em; text-transform:uppercase;
  margin:var(--s7) 0 var(--s4); padding-bottom:var(--s2);
  border-bottom:3px solid var(--ink);
}
h3{font:700 var(--f-lg)/1.35 var(--sans);letter-spacing:-.005em;margin:var(--s5) 0 var(--s3)}
p{margin:0 0 var(--s4);max-width:74ch}
strong,b{font-weight:700}
code{font:var(--f-sm)/1.5 var(--mono);background:var(--surface-2);
  padding:.1em .35em;border-radius:3px;border:1px solid var(--rule-soft)}
ul{margin:0 0 var(--s4);padding-left:var(--s5);max-width:74ch}
li{margin:0 0 var(--s2)}
hr{border:0;border-top:1px solid var(--rule);margin:var(--s6) 0}

a{color:var(--accent);text-decoration:underline;text-decoration-color:transparent;
  text-underline-offset:.18em;text-decoration-thickness:from-font;border-radius:2px}
a:hover{text-decoration-color:currentColor}
:focus-visible{outline:2px solid var(--accent);outline-offset:3px}

/* ---- a race, and its two products ---------------------------------------------- */
.race{
  border:1px solid var(--rule); border-radius:var(--r-lg); background:var(--surface);
  padding:var(--s4) var(--s5) var(--s5); margin:0 0 var(--s4); box-shadow:var(--shadow);
}
.race h2{
  font-size:var(--f-xl); margin:0 0 var(--s4);
  border:0; padding:0; display:flex; flex-wrap:wrap; gap:var(--s2); align-items:baseline;
}
h2 .cov{color:var(--dim);font:500 var(--f-xs) var(--mono);text-transform:none;letter-spacing:0;
  font-variant-numeric:tabular-nums}
.pair{display:grid;grid-template-columns:1fr 1fr;gap:var(--s3)}
@media(max-width:36rem){.pair{grid-template-columns:1fr}}

.card{
  border:1px solid var(--rule); border-radius:var(--r-md); padding:var(--s4);
  background:var(--surface-2); position:relative; overflow:hidden;
}
.card::before{content:"";position:absolute;inset:0 auto 0 0;width:4px;background:var(--rule)}
.card:has(.tag.now)::before{background:var(--now)}
.card:has(.tag.eday)::before{background:var(--eday)}
.tag{
  font:600 var(--f-2xs)/1.4 var(--mono); letter-spacing:.12em; text-transform:uppercase;
  display:inline-block; margin:0 0 var(--s1);
}
.tag.now{color:var(--now)} .tag.eday{color:var(--eday)}
.q{color:var(--dim);font-size:var(--f-xs);margin:0 0 var(--s3);line-height:1.4}
.who{font-size:var(--f-sm);color:var(--ink-soft);margin:0 0 var(--s1);font-weight:600}
.big{
  font:800 var(--f-4xl)/1 var(--display); letter-spacing:.005em;
  font-variant-numeric:tabular-nums; display:block; margin:0 0 var(--s1);
}
.margin{color:var(--ink-soft);font:500 var(--f-sm) var(--mono);font-variant-numeric:tabular-nums}
.miss{color:var(--eday);font-weight:700}
.prov{
  color:var(--dim); font:400 var(--f-2xs)/1.5 var(--mono); margin-top:var(--s3);
  font-variant-numeric:tabular-nums; word-break:break-word;
}
.withheld{
  border:1px dashed var(--dim); border-radius:var(--r-md); padding:var(--s4);
  color:var(--ink-soft); font-size:var(--f-sm);
  background:repeating-linear-gradient(135deg,var(--surface-2) 0 6px,var(--surface) 6px 12px);
}

/* ---- the question/answer race page --------------------------------------------- */
.qa{border-top:1px solid var(--rule);padding:var(--s5) 0 var(--s2)}
.qa:first-of-type{border-top:0}
.qa h3{font:700 var(--f-lg)/1.3 var(--sans);margin:0 0 var(--s3);color:var(--ink)}
.qa p{margin:0 0 var(--s3);color:var(--ink-soft)}
.figs{display:flex;flex-wrap:wrap;gap:var(--s5);margin:0 0 var(--s4)}
.fig{min-width:8rem}
.fig .n{
  font:800 var(--f-3xl)/1 var(--display); letter-spacing:.005em;
  font-variant-numeric:tabular-nums; display:block;
}
.fig .l{color:var(--dim);font:400 var(--f-xs)/1.45 var(--sans)}
.fig .l+.l{font-family:var(--mono);font-size:var(--f-2xs)}
.unans{
  color:var(--ink-soft); font-style:italic; border-left:3px solid var(--rule);
  padding-left:var(--s3); margin:0 0 var(--s3);
}
.method{color:var(--dim);font-size:var(--f-sm);line-height:1.55;margin:0 0 var(--s3);max-width:74ch}

/* ---- dials ---------------------------------------------------------------------- */
.gauges{
  display:grid; grid-template-columns:repeat(auto-fit,minmax(15rem,1fr));
  gap:var(--s4); margin:0 0 var(--s6);
}
.gauge{
  margin:0; text-align:center; padding:var(--s4) var(--s2) var(--s3);
  border:1px solid var(--rule); border-radius:var(--r-lg);
  background:var(--surface); box-shadow:var(--shadow);
}
.gauge svg{width:100%;height:auto;max-width:17.5rem}
.g-label{
  font:600 var(--f-2xs)/1.4 var(--mono); letter-spacing:.12em; color:var(--dim);
  margin:0 0 var(--s2); text-transform:uppercase;
}
.g-rep{stroke:#e0908a;opacity:.55;stroke-linecap:butt}
.g-dem{stroke:#8aa8e6;opacity:.55;stroke-linecap:butt}
.g-band{stroke:var(--ink);opacity:.24;stroke-linecap:butt}
.g-thresh{stroke:var(--ink);stroke-width:2.5}
.g-needle{stroke:var(--ink);stroke-width:3;stroke-linecap:round}
.g-hub{fill:var(--ink)}
.g-read{fill:var(--ink);font:800 34px var(--display);text-anchor:middle;
  font-variant-numeric:tabular-nums}
.g-readsub{fill:var(--dim);font:400 11px var(--mono);text-anchor:middle}
.g-end{fill:var(--dim);font:400 10px var(--mono);text-anchor:start}
.g-end.g-right{text-anchor:end}
.g-cap{color:var(--dim);font-size:var(--f-2xs);margin-top:var(--s2);line-height:1.45}

/* ---- charts --------------------------------------------------------------------- */
.trend,.hist{
  width:100%; height:auto; max-width:35rem; display:block;
  margin:var(--s2) 0 var(--s2);
}
.t-band{fill:var(--eday);opacity:.15}
.t-line{fill:none;stroke:var(--eday);stroke-width:2.25;stroke-linejoin:round;stroke-linecap:round}
.t-zero{stroke:var(--ink);opacity:.25;stroke-width:1}
.t-spec{stroke:var(--dim);stroke-width:1;stroke-dasharray:2 3;opacity:.6}
.t-spec-label{fill:var(--dim);font:400 9px var(--mono)}
.t-tick{fill:var(--dim);font:400 10px var(--mono)}
.h-d{fill:var(--dem);opacity:.85}
.h-r{fill:var(--rep);opacity:.75}
.h-split{fill:var(--dim);opacity:.5}
.h-maj{stroke:var(--ink);stroke-width:1.5}
.h-maj-label{fill:var(--ink);font:600 10px var(--mono)}
.h-tick{fill:var(--dim);font:400 10px var(--mono)}

/* ---- tables --------------------------------------------------------------------- */
table{
  border-collapse:separate; border-spacing:0; width:100%; font-size:var(--f-sm);
  margin:0 0 var(--s5); background:var(--surface);
  border:1px solid var(--rule); border-radius:var(--r-md); overflow:hidden;
}
th,td{text-align:left;padding:var(--s2) var(--s3);border-bottom:1px solid var(--rule-soft)}
thead th{
  color:var(--dim); font:600 var(--f-2xs)/1.35 var(--mono); letter-spacing:.08em;
  text-transform:uppercase; background:var(--surface-2);
  border-bottom:1px solid var(--rule); white-space:nowrap; position:sticky; top:0;
}
tbody tr:last-child td{border-bottom:0}
tbody tr:hover{background:var(--surface-2)}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
td.num{font-family:var(--mono);font-size:.95em}
.table-wrap{overflow-x:auto;margin:0 0 var(--s5);max-width:100%;-webkit-overflow-scrolling:touch;
  border-radius:var(--r-md)}
.table-wrap>table{margin:0}
.table-wrap:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
/* Scroll cue: the right edge fades while there is more table to the right (design review
   2026-10-07: nothing said a 1,172 px table scrolled inside a 356 px phone). Driven by the
   container's own scroll position, so a table that fits has no timeline and no fade; browsers
   without scroll timelines show the table as before. */
@property --tw-fade{syntax:"<length>";inherits:false;initial-value:0px}
@supports (animation-timeline:scroll()){
  .table-wrap{animation:tw-fade linear both;animation-timeline:scroll(self inline);
    -webkit-mask-image:linear-gradient(to left,transparent,#000 var(--tw-fade));
    mask-image:linear-gradient(to left,transparent,#000 var(--tw-fade))}
  @keyframes tw-fade{from,92%{--tw-fade:3rem}to{--tw-fade:0px}}
}
/* A link alone in a table cell is a tap target, not inline text: at least 24 px tall (WCAG 2.2
   2.5.8; district codes measured 27x16). */
td>a:first-child{display:inline-block;padding:.3em 0;min-width:24px}
/* A phone never scrolls the page sideways: any table not already in a labelled scroll container
   scrolls inside its own box instead of widening the document (comms review, C20). */
@media(max-width:48rem){
  main table{display:block;overflow-x:auto;max-width:100%}
  /* A labelled, focusable scroller is the one that scrolls: its table keeps table layout, or
     the table scrolled inside a wrapper with nothing to scroll and arrow keys moved neither
     (audit U05, 2026-10-09: ten tables on /accuracy). */
  .table-wrap>table,.table-scroll>table{display:table;overflow:visible}
}
.table-scroll:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* ---- tile map -------------------------------------------------------------------- */
.map{
  display:grid; grid-template-columns:repeat(11,1fr); gap:3px;
  margin:0 0 var(--s3); max-width:35rem;
}
.tile{
  min-width:0; overflow:hidden; position:relative;
  aspect-ratio:1; border-radius:var(--r-sm); display:flex; flex-direction:column;
  align-items:center; justify-content:center; font:800 .8rem/1 var(--display);
  color:#fff; text-decoration:none; letter-spacing:.02em;
  box-shadow:inset 0 1px 0 rgba(255,255,255,.25),inset 0 -2px 0 rgba(0,0,0,.18);
}
.tile:hover{outline:2px solid var(--ink);outline-offset:1px;text-decoration:none}
/* Full opacity: at .92 the label blended toward its tile and measured 4.49:1 on Lean R (audit
   U04, 2026-10-09; the minimum is 4.5:1). */
.tile .p{font:500 9px/1.1 var(--mono);font-variant-numeric:tabular-nums}
.tile.empty{background:none;box-shadow:none}
.t-none{background:repeating-linear-gradient(135deg,var(--surface-2) 0 4px,var(--rule) 4px 7px);
  color:var(--ink-soft)}
.t-off{background:var(--surface-2);color:var(--dim);font-weight:700;box-shadow:none}
.t-d5{background:var(--c-sd)}.t-d4{background:var(--c-ld)}.t-d3{background:var(--c-nd);color:#06122e}
.t-d2{background:var(--c-d2);color:#06122e}
.t-toss{background:var(--c-tu);color:#1a1608}
.t-r2{background:var(--c-r2);color:#2a0705}
.t-r3{background:var(--c-nr);color:#2a0705}.t-r4{background:var(--c-lr)}.t-r5{background:var(--c-sr)}
.tile-keys{display:flex;flex-wrap:wrap;gap:var(--s1) var(--s3);margin:0 0 var(--s2);
  font:500 var(--f-2xs)/1.5 var(--mono);color:var(--ink-soft)}
.tk{display:inline-flex;align-items:center;gap:.35em}
.tk .tile{width:.95em;height:.95em;aspect-ratio:auto;display:inline-block;border-radius:2px;
  opacity:1;box-shadow:none}
.legend{color:var(--dim);font-size:var(--f-xs);margin:0 0 var(--s5);line-height:1.5}
.doc-grid{list-style:none;padding:0;margin:0 0 var(--s6);display:grid;
  grid-template-columns:repeat(auto-fit,minmax(18rem,1fr));gap:var(--s4);max-width:none}
.doc-card{border:1px solid var(--rule);border-radius:var(--r-lg);background:var(--surface);
  padding:var(--s4);box-shadow:var(--shadow);transition:box-shadow .12s ease;
  border-top:4px solid var(--navy-2)}
.doc-card:hover{box-shadow:var(--shadow-lift)}
.doc-card.missing{background:var(--surface-2);border-style:dashed}
.doc-t{font:800 var(--f-xl)/1.1 var(--display);text-transform:uppercase;letter-spacing:.01em;
  display:block;margin:0 0 var(--s2)}
.doc-b{color:var(--ink-soft);font-size:var(--f-sm);margin:0 0 var(--s2);line-height:1.5}
.doc-m{color:var(--dim);font:400 var(--f-2xs)/1.5 var(--mono);margin:0;
  font-variant-numeric:tabular-nums}
.toc{border:1px solid var(--rule);border-radius:var(--r-md);background:var(--surface);
  padding:var(--s4) var(--s4) var(--s3);margin:0 0 var(--s6)}
.toc-h{font:600 var(--f-2xs)/1.4 var(--mono);letter-spacing:.12em;text-transform:uppercase;
  color:var(--dim);margin:0 0 var(--s2)}
.toc ul{list-style:none;padding:0;margin:0;columns:2;column-gap:var(--s5);max-width:none}
@media(max-width:36rem){.toc ul{columns:1}}
.toc li{margin:0 0 var(--s1);font-size:var(--f-sm);break-inside:avoid}
.toc li.lvl2{padding-left:var(--s3)}
.prose{max-width:none}
.prose h1{font-size:var(--f-3xl);margin:var(--s6) 0 var(--s3)}
.prose h2{font-size:var(--f-2xl);margin:var(--s6) 0 var(--s3);scroll-margin-top:var(--s4)}
.prose h3{font-size:var(--f-lg);margin:var(--s5) 0 var(--s2);border:0;padding:0;
  scroll-margin-top:var(--s4)}
.prose h4{font:700 var(--f-md)/1.4 var(--sans);margin:var(--s4) 0 var(--s2)}
.prose p,.prose li{max-width:76ch}
.prose blockquote{margin:0 0 var(--s4);padding:var(--s2) 0 var(--s2) var(--s4);
  border-left:3px solid var(--gold);color:var(--ink-soft)}
.prose pre{background:var(--surface-2);border:1px solid var(--rule);border-radius:var(--r-md);
  padding:var(--s3) var(--s4);overflow-x:auto;font:var(--f-sm)/1.55 var(--mono);
  margin:0 0 var(--s4)}
.prose pre code{background:none;border:0;padding:0;font-size:inherit}
.prose table{font-size:var(--f-sm)}
.prose hr{margin:var(--s7) 0}
.prose a{overflow-wrap:anywhere}

code.hash{word-break:break-all;font-size:.78em}
/* ---- footer / nav ---------------------------------------------------------------- */
.note{
  color:var(--dim); font-size:var(--f-sm); border-top:1px solid var(--rule);
  margin-top:var(--s7); padding-top:var(--s4); line-height:1.6;
}
.note a{color:var(--ink-soft);font-weight:600}
.note a:hover{color:var(--accent)}

@media(max-width:36rem){
  .big{font-size:var(--f-3xl)}
  .race{padding:var(--s4);border-radius:var(--r-md)}
  h2{font-size:var(--f-xl)}
}
.maps>*{min-width:0}
@media print{
  body{background:#fff;color:#000}
  .masthead,.bc{background:#fff!important;color:#000}
  .race,.gauge,table{box-shadow:none;break-inside:avoid}
  a{text-decoration:none}
}

/* ---- masthead: the navy broadcast band ------------------------------------------- */
.masthead{background:radial-gradient(900px 300px at 15% -40%,#1b3c8c 0%,transparent 70%),
  linear-gradient(180deg,var(--navy-2),var(--navy));color:#f4f7ff;
  border-bottom:3px solid var(--gold)}
.mast-in{max-width:76rem;margin:0 auto;padding:var(--s4) var(--gutter) 0;min-width:0}
.mast-row{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;
  gap:var(--s2) var(--s5);padding-bottom:var(--s3)}
.brand{color:#fff;text-decoration:none;display:inline-block;line-height:.85}
.brand:hover{text-decoration:none}
.wordmark{font:900 clamp(2.1rem,5vw,3.25rem)/.85 var(--display);text-transform:uppercase;
  letter-spacing:.01em;color:#fff;display:block}
.wordmark b{color:var(--gold);font-weight:900}
.tagline{margin:0;font:800 1.05rem/1.1 var(--display);text-transform:uppercase;
  letter-spacing:.03em;color:#fff;max-width:none;text-align:right}
.tagline-sub{display:block;font:400 var(--f-xs)/1.4 var(--sans);text-transform:none;
  letter-spacing:0;color:#b4c0de;margin-top:.35em}
.nav{display:flex;flex-wrap:wrap;gap:0 var(--s3);font:500 var(--f-xs)/1 var(--mono);
  text-transform:uppercase;letter-spacing:.05em;border-top:1px solid rgba(255,255,255,.12)}
.nav a{color:#c3cde6;padding:.85em 0 .75em;border-bottom:3px solid transparent;
  text-decoration:none;white-space:nowrap;margin-bottom:-3px}
.nav a:hover{color:#fff;text-decoration:none}
.nav a[aria-current=page]{color:var(--gold);border-bottom-color:var(--gold);font-weight:600}
.nav a:focus-visible,.brand:focus-visible{outline:2px solid var(--gold);outline-offset:2px}
.asof{display:block;color:#b4c0de;font:400 var(--f-2xs)/1.4 var(--mono);letter-spacing:.06em;
  text-transform:uppercase;padding:var(--s2) 0 var(--s3)}
.nav+.asof{border-top:1px solid rgba(255,255,255,.08)}
/* the front page: the wordmark large, the tagline as the slogan */
.mast-home .mast-row{flex-direction:column;align-items:flex-start;padding-top:var(--s3);
  padding-bottom:var(--s4)}
.mast-home .wordmark{font-size:clamp(2.75rem,9vw,5.25rem)}
.mast-home .tagline{text-align:left;max-width:none;font-size:clamp(1.4rem,3.4vw,2.5rem);
  line-height:1}
.mast-home .tagline-sub{font-size:var(--f-md);margin-top:.5em}
/* skip link: off screen until focused */
.skip{position:absolute;left:-999px;top:0;z-index:50;background:var(--gold);color:#0b1330;
  padding:.6em 1em;font-weight:700}
.skip:focus{left:var(--s3);top:var(--s3)}
/* "More": the sections outside the masthead's seven */
.nav-more{position:relative;display:inline-block}
.nav-more summary{cursor:pointer;list-style:none}
.nav-more summary::-webkit-details-marker{display:none}
.nav-more summary::after{content:" ▾"}
.nav-more .nm-list{position:absolute;right:0;top:calc(100% + 8px);z-index:20;display:grid;
  min-width:13rem;padding:var(--s2);background:var(--navy-2,#0f1d45);border:1px solid
  rgba(255,255,255,.15);border-radius:6px;box-shadow:0 10px 30px rgba(0,0,0,.4)}
.nav-more .nm-list a{padding:.45em .6em}
.navmenu .nm-sep{border-top:1px solid rgba(255,255,255,.2);margin:.4em 0}
/* Charts on phones: an SVG scales as a whole, so 10-11 px labels in a 560-960 px viewBox came out
   at 3.5-6 px on a 390 px screen (design review 2026-10-07). Larger text, fewer labels. */

.raters-tbl{max-width:38rem}
.callout{border-left:4px solid var(--gold);background:var(--surface-2,#eef1f7);
  padding:var(--s3) var(--s4);border-radius:4px}
/* a race page's reference sections, closed */
.more-qa{margin:var(--s6) 0;border:1px solid var(--line,#d8dce6);border-radius:8px;
  padding:var(--s3) var(--s4)}
.more-qa>summary{cursor:pointer;font-weight:700;color:var(--ink-soft)}
.more-qa[open]>summary{margin-bottom:var(--s3)}
/* breadcrumb above a race's title */
.crumb{font:600 var(--f-xs)/1.4 var(--mono);letter-spacing:.06em;text-transform:uppercase;
  color:var(--dim);margin:var(--s4) 0 calc(-1*var(--s2))}
.crumb a{color:var(--dim)}
/* the phone menu: shown only below the breakpoint, where the full nav does not fit */
.navmenu{display:none}
@media(max-width:48rem){
  .page .tagline{text-align:left;font-size:var(--f-md)}
  .page .tagline-sub{display:none}
  /* fifteen sections do not fit a phone: a Menu button opens them all, no sideways strip */
  .nav{display:none}
  .navmenu{display:block;border-top:1px solid rgba(255,255,255,.12);padding:var(--s2) 0}
  .navmenu summary{display:inline-flex;align-items:center;gap:.6em;cursor:pointer;
    list-style:none;font:800 1.05rem/1 var(--display);text-transform:uppercase;
    letter-spacing:.08em;color:#0b1330;background:var(--gold);padding:.6em 1em;
    border-radius:3px;min-height:44px;box-sizing:border-box}
  .navmenu summary::-webkit-details-marker{display:none}
  .navmenu summary:focus-visible{outline:2px solid #fff;outline-offset:3px}
  .nm-cur{font-weight:600;letter-spacing:.04em;opacity:.8}
  .nm-icon{width:1.1em;height:.8em;flex:none;
    background:linear-gradient(currentColor 0 0) top/100% 2px no-repeat,
      linear-gradient(currentColor 0 0) center/100% 2px no-repeat,
      linear-gradient(currentColor 0 0) bottom/100% 2px no-repeat}
  .navmenu[open] .nm-icon{background:linear-gradient(45deg,transparent 45%,currentColor 45% 55%,
      transparent 55%),linear-gradient(-45deg,transparent 45%,currentColor 45% 55%,
      transparent 55%)}
  .navmenu ul{list-style:none;margin:var(--s3) 0 var(--s2);padding:0;display:grid;
    grid-template-columns:repeat(2,minmax(0,1fr));gap:2px var(--s3)}
  .navmenu li{margin:0}
  .navmenu a{display:block;padding:.7em .6em;min-height:44px;box-sizing:border-box;
    color:#e3e9f8;text-decoration:none;font:500 var(--f-sm)/1.3 var(--mono);
    text-transform:uppercase;letter-spacing:.05em;border-left:3px solid transparent}
  .navmenu a:hover{color:#fff;background:rgba(255,255,255,.06)}
  .navmenu a:focus-visible{outline:2px solid var(--gold);outline-offset:-2px}
  .navmenu a[aria-current=page]{color:var(--gold);border-left-color:var(--gold);font-weight:700;
    background:rgba(255,255,255,.05)}
  .navmenu+.asof{border-top:1px solid rgba(255,255,255,.08)}
}

/* ---- the question box and footer ---------------------------------------------------- */
.askbox{border:1px solid var(--rule);border-top:4px solid var(--gold);border-radius:var(--r-lg);
  padding:var(--s4) var(--s5) var(--s4);margin:var(--s6) 0 var(--s5);background:var(--surface);
  max-width:56rem;box-shadow:var(--shadow-lift)}
.askbox-label{display:block;font:800 var(--f-2xl)/1 var(--display);text-transform:uppercase;
  letter-spacing:.01em;margin-bottom:var(--s3)}
.askbox-row{display:flex;gap:var(--s2)}
.askbox input{flex:1;min-width:0;font:inherit;font-size:1.05rem;padding:.7rem .9rem;
  border:2px solid var(--rule);border-radius:var(--r-md);background:var(--bg);color:var(--ink)}
.askbox input:focus{border-color:var(--accent);outline:none}
.askbox input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.askbox button{font:800 1.15rem/1 var(--display);text-transform:uppercase;letter-spacing:.06em;
  padding:.6rem 1.4rem;border:0;border-radius:var(--r-md);background:var(--navy-2);color:#fff;
  cursor:pointer}
.askbox button:hover{background:var(--navy)}
.signup-line{margin:calc(-1*var(--s3)) 0 var(--s5);font-size:var(--f-sm)}
.askbox-try{margin:var(--s2) 0 0;font-size:var(--f-sm);color:var(--dim)}
.foot{border-top:3px solid var(--gold);margin:var(--s8) 0 0;background:var(--navy);
  color:#b4c0de}
.foot-in{max-width:76rem;margin:0 auto;padding:var(--s5) var(--gutter) var(--s6)}
.foot .note{max-width:none;margin:0;color:#b4c0de;border-top-color:rgba(255,255,255,.12)}
.foot .note a{color:#e3e9fb}
.foot .note a:hover{color:var(--gold)}
.foot .note+.note{margin-top:var(--s3)}
.foot :focus-visible{outline-color:var(--gold)}
details.more{margin:var(--s5) 0;border-top:1px solid var(--rule);padding-top:var(--s3)}
details.more summary{cursor:pointer;font-weight:600;color:var(--ink-soft)}
details.more[open] summary{margin-bottom:var(--s3)}

/* ---- front page: chambers -------------------------------------------------------- */
.hero{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s4);
  margin:var(--s6) 0 var(--s7)}
@media(max-width:52rem){.hero{grid-template-columns:1fr}}
.chamber{background:var(--surface);border:1px solid var(--rule);border-radius:var(--r-lg);
  padding:var(--s4) var(--s5) var(--s4);box-shadow:var(--shadow);display:flex;
  flex-direction:column;min-width:0}
.c-head{display:flex;align-items:center;justify-content:space-between;gap:var(--s2);
  margin:0 0 var(--s2)}
.c-head h2{margin:0;padding:0;border:0;font:600 var(--f-xs)/1.3 var(--mono);letter-spacing:.14em;
  text-transform:uppercase;color:var(--gold-ink)}
.badge{font:600 var(--f-2xs)/1.3 var(--mono);letter-spacing:.06em;text-transform:uppercase;
  padding:.2em .6em;border-radius:3px;border:1px solid var(--rule);color:var(--ink-soft);
  white-space:nowrap}
.badge-warn{color:var(--eday);border-color:var(--eday);
  background:color-mix(in srgb,var(--eday) 8%,transparent)}
.verdict{font:800 var(--f-xl)/1.1 var(--display);text-transform:uppercase;letter-spacing:.01em;
  margin:0 0 var(--s2);color:var(--ink)}
.c-big{font:900 var(--f-4xl)/.95 var(--display);letter-spacing:.005em;
  font-variant-numeric:tabular-nums;margin:0 0 var(--s3)}
.c-big .what{display:block;font:500 var(--f-sm)/1.4 var(--sans);letter-spacing:0;
  text-transform:none;color:var(--ink-soft);margin-top:var(--s2)}
.c-withheld{font-size:var(--f-sm);color:var(--ink);margin-top:var(--s2)}
.c-note{color:var(--ink-soft);font-size:var(--f-xs);line-height:1.5;
  margin:calc(-1*var(--s2)) 0 var(--s3)}
.seats{color:var(--ink-soft);font-size:var(--f-sm);font-variant-numeric:tabular-nums;
  margin:0 0 var(--s3)}
.chamber .hist{margin:auto 0 var(--s2)}
.chamber .hist + p{display:none}          /* the histogram's caption repeats what the card says */
.second{color:var(--ink-soft);font-size:var(--f-sm);margin:0 0 var(--s2);padding-top:var(--s2);
  border-top:1px solid var(--rule-soft)}
.chamber .prov{margin:0}

/* ---- front page: races table & maps --------------------------------------------- */
.lede{color:var(--ink-soft);max-width:74ch}
table.races{width:100%;border-collapse:collapse;font-size:var(--f-sm);
  font-variant-numeric:tabular-nums;margin:0 0 var(--s3)}
table.races th{text-align:left;color:var(--dim);font:600 var(--f-2xs)/1.3 var(--mono);
  letter-spacing:.08em;text-transform:uppercase;padding:var(--s2) var(--s3);
  border-bottom:2px solid var(--ink)}
table.races td{padding:var(--s2) var(--s3);border-bottom:1px solid var(--rule-soft);
  vertical-align:baseline}
table.races .num{text-align:right}
table.races tr:hover td{background:var(--surface-2)}
table.profile td.diff{color:var(--ink-soft)}
.maps{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--s5);align-items:start}
@media(max-width:52rem){.maps{grid-template-columns:minmax(0,1fr)}}
.maps h2{margin-top:0}
.map-block{min-width:0}
/* ---- district dossier ------------------------------------------------------------- */
.facts{border-top:1px solid var(--rule);margin:0 0 var(--s4)}
.fact-row{display:grid;grid-template-columns:9rem 1fr;gap:var(--s3);padding:var(--s3) 0;
  border-bottom:1px solid var(--rule-soft)}
@media(max-width:36rem){.fact-row{grid-template-columns:1fr}}
.fact-k{color:var(--dim);font:600 var(--f-2xs)/1.4 var(--mono);letter-spacing:.08em;
  text-transform:uppercase;padding-top:.3em}
.fact{margin:0 0 var(--s2)}
.fact-v{display:block;font-weight:600}
.fact-q{display:block;color:var(--ink-soft);font:italic 400 var(--f-sm)/1.5 var(--sans);
  margin-top:.15em}
.fact-q::before,.fact-q::after{content:'“';color:var(--dim)} .fact-q::after{content:'”'}
.tech{color:var(--dim);font-size:var(--f-xs);line-height:1.5;margin:var(--s2) 0 var(--s4)}
@media(prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.001ms!important;animation-delay:0s!important;
    animation-iteration-count:1!important;transition:none!important}
}

.house-viz{margin:var(--s7) 0}
.powerbar{margin:var(--s4) 0 var(--s5)}
.pb-head{display:flex;justify-content:space-between;align-items:baseline;gap:var(--s3);
  font-weight:650;margin-bottom:var(--s1);flex-wrap:wrap}
.pb-d{color:var(--dem)} .pb-r{color:var(--rep)} .pb-exp{color:var(--ink-soft);font-weight:500}
.powerbar svg{width:100%;height:auto;display:block}
.pb-n{fill:#fff;font-size:15px;font-weight:700;text-anchor:middle;
  paint-order:stroke;stroke:rgba(0,0,0,.18);stroke-width:2px}
.pb-n-dark{fill:#1f2937;stroke:none}
.pb-maj{stroke:var(--ink);stroke-width:2.5;stroke-dasharray:4 3}
.pb-maj-t{fill:var(--ink);font-size:12px;font-weight:700;text-anchor:middle}
.pb-legend{display:flex;flex-wrap:wrap;gap:var(--s2) var(--s4);margin-top:var(--s2);
  font-size:var(--f-sm);color:var(--ink-soft)}
.pb-key i{display:inline-block;width:.9em;height:.9em;border-radius:2px;margin-right:.35em;
  vertical-align:-.1em}
.r-wh{fill:#e5e7eb;background:#e5e7eb;stroke:#6b7280;stroke-width:1;stroke-dasharray:2 1.5}
.r-sd{fill:var(--c-sd);background:var(--c-sd)} .r-ld{fill:var(--c-ld);background:var(--c-ld)}
.r-nd{fill:var(--c-nd);background:var(--c-nd)} .r-tu{fill:var(--c-tu);background:var(--c-tu)}
.r-nr{fill:var(--c-nr);background:var(--c-nr)} .r-lr{fill:var(--c-lr);background:var(--c-lr)}
.r-sr{fill:var(--c-sr);background:var(--c-sr)}
.dotmap{margin:0}
.dotmap svg{width:100%;height:auto;display:block;background:var(--surface);
  border:1px solid var(--rule);border-radius:12px}
.dot{stroke:var(--surface);stroke-width:1;transition:r .12s}
a:hover .dot{stroke:var(--ink);stroke-width:2.2}
.dm-st{font-size:8.5px;font-weight:800;fill:#fff;text-anchor:middle;pointer-events:none;
  letter-spacing:.05em;paint-order:stroke;stroke:rgba(17,24,39,.55);stroke-width:2.2px}
.dotmap figcaption{font-size:var(--f-sm);color:var(--dim);margin-top:var(--s2);max-width:60rem}

.race-hero{border:1px solid var(--rule);border-radius:14px;background:var(--surface);
  padding:var(--s5);margin:var(--s4) 0 var(--s6);box-shadow:0 1px 2px rgba(0,0,0,.04)}
.chip{display:inline-block;padding:.25em .8em;border-radius:999px;font-weight:700;
  font-size:var(--f-sm);color:#fff;letter-spacing:.02em}
.chip.r-nd,.chip.r-tu,.chip.r-nr{color:#1f2937}
.h2h{display:flex;justify-content:space-between;gap:var(--s4);margin:var(--s3) 0 var(--s2)}
.h2h-side{display:flex;flex-direction:column}
.h2h-side.r{align-items:flex-end;text-align:right}
.h2h-p{font-size:2.8rem;font-weight:800;line-height:1}
.h2h-name{font-size:1.35rem;font-weight:720;letter-spacing:-.01em;margin-top:.15em}
.h2h-party{font-size:var(--f-sm);color:var(--dim)}
.h2h-side.d .h2h-p,.h2h-side.d .h2h-name{color:var(--dem)}
.h2h-side.r .h2h-p,.h2h-side.r .h2h-name{color:var(--rep)}
.h2h-side.i .h2h-p,.h2h-side.i .h2h-name{color:#6b46a0}
.probbar .pi{background:#6b46a0} .mr-i{fill:#6b46a0;opacity:.18}
.h2h-side:not(.lead) .h2h-p{font-weight:500}  /* full colour: opacity failed AA (design review) */
.probbar{display:flex;height:16px;border-radius:999px;overflow:hidden;margin:var(--s2) 0 var(--s5)}
.probbar .pd{background:var(--dem)} .probbar .pr{background:var(--rep)}
.mrange{margin:0 0 var(--s4)} .mrange svg{width:100%;height:auto;display:block}
.mrange figcaption,.why figcaption{font-size:var(--f-sm);color:var(--dim);font-weight:600;
  margin-bottom:var(--s1)}
.mr-r{fill:var(--rep);opacity:.10} .mr-d{fill:var(--dem);opacity:.10}
/* The 90% range against its track: .22 on an .18 track was about 1.3:1 (design review). */
.mr-band{fill:var(--ink);opacity:.5}
.mr-mid{fill:var(--ink);stroke:var(--surface);stroke-width:3}
.mr-lab{fill:var(--ink);font-size:15px;font-weight:750;text-anchor:middle}
.mr-tick{stroke:var(--rule);stroke-width:1}
.mr-tl{fill:var(--dim);font-size:11px;text-anchor:middle}
.why{margin:var(--s2) 0 0}
.wy-row{display:grid;grid-template-columns:minmax(10rem,16rem) 1fr;gap:var(--s3);
  align-items:center;padding:3px 0}
.wy-lab{font-size:var(--f-sm);color:var(--ink-soft);text-align:right}
.wy-track{position:relative;height:20px;background:linear-gradient(var(--rule),var(--rule))
  center/1px 100% no-repeat}
.wy-bar{position:absolute;top:3px;height:14px;border-radius:3px}
.wy-bar.d{background:var(--dem)} .wy-bar.r{background:var(--rep)}
.wy-v{font-size:12px;font-weight:700;white-space:nowrap}
.wy-note{font-size:var(--f-xs);color:var(--ink-soft);margin:0 0 var(--s2);max-width:60rem}
.rh-top{display:flex;flex-wrap:wrap;align-items:center;gap:var(--s2) var(--s3)}
.rh-what{font-size:var(--f-sm);font-weight:600;color:var(--ink-soft)}
.pb-rule{font-size:var(--f-xs);color:var(--dim);margin:0 0 var(--s2)}
.wy-v.d{color:var(--dem)} .wy-v.r{color:var(--rep)}
@media(max-width:40rem){.h2h-p{font-size:2rem}.wy-row{grid-template-columns:minmax(0,11rem) 1fr}
  .h2h-name{font-size:1.1rem}}

.trends{margin:var(--s6) 0}
.trend-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(16rem,1fr));gap:var(--s4)}
.trend{margin:0;border:1px solid var(--rule);border-radius:12px;background:var(--surface);
  padding:var(--s3) var(--s4)}
.trend figcaption{display:flex;justify-content:space-between;gap:var(--s2);font-size:var(--f-sm)}
.trend figcaption span{color:var(--ink-soft)}
.trend svg{width:100%;height:auto;display:block}
.tc-grid{stroke:var(--rule);stroke-width:1} .tc-ax{fill:var(--dim);font-size:9px;text-anchor:end}
.tc-line{fill:none;stroke:var(--dem);stroke-width:2.5;stroke-linejoin:round}
.tc-band{fill:var(--dem);opacity:.15} .tc-dot{fill:var(--dem)}
.tc-model{stroke:var(--ink);stroke-dasharray:3 3;opacity:.5}
.tc-mlab{fill:var(--ink-soft);font-size:8.5px}
.tc-maj{stroke:var(--ink);stroke-dasharray:4 3;opacity:.6}

.chamber{border-top:5px solid var(--rule)}
.chamber.lean-d{border-top-color:var(--dem)} .chamber.lean-r{border-top-color:var(--rep)}
.chamber.lean-even{border-top-color:#c9c4b8}
.chamber .c-big{font-size:3.4rem;line-height:1;letter-spacing:-.03em}
.chamber.lean-d .c-big,.chamber.lean-d .verdict{color:var(--dem)}
.chamber.lean-r .c-big,.chamber.lean-r .verdict{color:var(--rep)}
.chamber .c-big .what{color:var(--ink-soft)}
.chamber .verdict{font-weight:700}

@media(max-width:40rem){
  .powerbar svg{height:72px}
  .pb-n,.pb-maj-t{display:none}
  .pb-legend::after{content:"Dashed line: 218 for a majority";flex-basis:100%;color:var(--dim)}
  .pb-head{font-size:var(--f-sm)}
  .chamber .c-big{font-size:2.8rem}
}

.ask-form{display:flex;gap:var(--s2);margin:var(--s4) 0 var(--s2)}
.ask-form input{flex:1;font-size:1.05rem;padding:.7em .9em;border:1px solid var(--rule);
  border-radius:10px;background:var(--surface);color:var(--ink)}
.ask-form button{font-size:1rem;font-weight:700;padding:0 1.3em;border:0;border-radius:10px;
  background:var(--ink);color:var(--bg);cursor:pointer}
.ask-note{font-size:var(--f-sm);color:var(--dim);margin:0 0 var(--s5)}
.askbox .ask-note{margin:var(--s2) 0 0}
.ask-answer{border:1px solid var(--rule);border-radius:14px;background:var(--surface);
  padding:var(--s5);margin:0 0 var(--s6)}
.ask-answer h2{margin-top:0}
.ask-kind{font-size:var(--f-xs);text-transform:uppercase;letter-spacing:.06em;color:var(--dim);
  margin:0 0 var(--s1);font-weight:700}
.ask-table{width:100%;border-collapse:collapse;margin:var(--s3) 0;font-size:var(--f-sm)}
.ask-table th,.ask-table td{padding:.45em .6em;border-bottom:1px solid var(--rule);text-align:left}
.ask-table td.num{font-variant-numeric:tabular-nums}
.ask-read{font-size:var(--f-sm);color:var(--dim);margin:0 0 var(--s2)}
.ask-tech{font-size:var(--f-xs);color:var(--dim);margin:var(--s2) 0 0}
.ask-tech summary{cursor:pointer}
.ask-none{border-left:4px solid var(--eday)}
.ask-examples ul{columns:2;gap:var(--s5);padding-left:1.1em}
.ask-examples li{margin:0 0 var(--s2)}
@media(max-width:40rem){.ask-examples ul{columns:1}}

.summary-lede{font-size:1.25rem;line-height:1.5;font-weight:600;max-width:52rem;
  margin:0 0 var(--s5)}
.c-more{margin:var(--s2) 0 0;font-size:var(--f-sm)}
.changes{border:1px solid var(--rule);border-radius:14px;background:var(--surface);
  padding:var(--s3) var(--s4);margin:var(--s5) 0}
.changes h2{font-size:var(--f-md);margin:0 0 var(--s2);border:0;padding:0}
.changes ul{list-style:none;padding:0;margin:0;display:flex;flex-wrap:wrap;gap:var(--s2) var(--s5)}
.chg{font-size:var(--f-sm)} .chg .d{color:var(--dim)}
.chg.up .d{color:var(--dem)} .chg.down .d{color:var(--rep)}
.chg.model{color:var(--dim);font-style:italic}
.changes .more{font-size:var(--f-sm);display:inline-block;margin-top:var(--s2)}

.hero-one{grid-template-columns:minmax(0,34rem)}

.polls td{vertical-align:top} .polls .sub2,.sub2{color:var(--dim);font-size:var(--f-xs)}
.polls .pd{color:var(--dem)} .polls .pr{color:var(--rep)}
.flag{display:inline-block;margin-top:2px;font-size:var(--f-xs);color:#9a5b00;
  border:1px solid #e0b46a;border-radius:999px;padding:0 6px}
.tabs{display:flex;gap:var(--s2);margin:var(--s3) 0 var(--s4);flex-wrap:wrap}
.tab{padding:4px 12px;border:1px solid var(--rule);border-radius:999px;font-size:var(--f-sm)}
.tab.on{background:var(--ink);color:var(--surface);border-color:var(--ink)}

a.term{color:inherit;text-decoration:underline dotted;text-underline-offset:3px;
  text-decoration-color:var(--dim);cursor:help}
.glossary dt{font-weight:700;font-size:var(--f-md);margin-top:var(--s5);scroll-margin-top:80px}
.glossary dd{margin:var(--s1) 0 0;max-width:46rem}
.glossary dd p{margin:0 0 var(--s2)}
.glossary dt:target{background:#fff3c4}

.office .rating{display:inline-block;padding:1px 8px;border-radius:999px;font-size:var(--f-xs);
  font-weight:600;white-space:nowrap}
.office .r-sd{background:var(--c-sd);color:#fff}.office .r-ld{background:var(--c-ld);color:#fff}
.office .r-nd{background:var(--c-nd);color:#0b1330}
.office .r-tu{background:var(--c-tu);color:#0b1330}
.office .r-nr{background:var(--c-nr);color:#2a0705}.office .r-lr{background:var(--c-lr);color:#fff}
.office .r-sr{background:var(--c-sr);color:#fff}
.indies li{margin:0 0 var(--s2);max-width:52rem}

.stale-notice[data-text]::before{content:attr(data-text)}
.stale-notice{margin:var(--s4,1rem) 0;padding:.75rem 1rem;border:1px solid #b4530a;
  border-left-width:6px;border-radius:8px;background:#fff7ed;color:#431407}
@media(prefers-color-scheme:dark){.stale-notice{background:#2a1a0b;color:#fde7cf;
  border-color:#e8a33a}}

/* ==== front page: the broadcast stage ============================================== */
.bc{background:radial-gradient(1000px 420px at 70% 30%,rgba(23,58,143,.55) 0%,transparent 70%),
  linear-gradient(180deg,var(--navy-2),var(--navy) 70%);color:#f4f7ff;overflow:hidden;
  border-bottom:3px solid var(--gold);--bc-dim:#b4c0de;--bc-line:#2a3d74}
.bc-in{max-width:76rem;margin:0 auto;padding:0 var(--gutter)}
.bc a{color:inherit}
.bc .live{display:inline-flex;align-items:center;gap:.6em;margin:var(--s5) 0 var(--s3);
  font:600 var(--f-xs)/1.3 var(--mono);letter-spacing:.12em;text-transform:uppercase;
  background:rgba(229,50,45,.16);border:1px solid rgba(255,110,100,.55);padding:.45em .8em;
  border-radius:3px;max-width:100%}
.bc .live i{flex:none;width:.6em;height:.6em;border-radius:50%;background:#ff4b45;
  box-shadow:0 0 10px #ff4b45;animation:bc-pulse 1.6s infinite}
@keyframes bc-pulse{50%{opacity:.25}}
.bc h1{color:#c3cde6;margin:0 0 var(--s1);font-size:clamp(1.25rem,2.2vw,1.6rem);max-width:none;
  letter-spacing:.06em}
.bc-headline{font:900 clamp(2.1rem,5.4vw,4rem)/.98 var(--display);text-transform:uppercase;
  letter-spacing:.005em;color:#fff;margin:var(--s3) 0 var(--s4);max-width:none;text-wrap:balance}
.hl{display:inline}.hl-k{color:var(--gold)}.hl-d{color:#9dbcff}.hl-r{color:#ff9b94}.hl-n{color:#fff}
.bc .sub{color:var(--bc-dim);margin:0 0 var(--s3);font-size:var(--f-sm);
  font-family:var(--mono);letter-spacing:.02em}
/* The first screen's scoreboard (elab.api.home.scoreboard): each chamber's number. */
.scoreboard{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--s3);
  margin:var(--s3) 0 var(--s4)}
.sb{display:flex;flex-direction:column;gap:.15em;padding:var(--s3) var(--s4);text-decoration:none;
  border:1px solid var(--bc-line);border-radius:6px;background:rgba(255,255,255,.04);color:#fff}
.sb:hover,.sb:focus-visible{text-decoration:none;border-color:var(--gold)}
.sb-k{font:700 var(--f-xs)/1.2 var(--mono);letter-spacing:.12em;text-transform:uppercase;
  color:var(--gold)}
.sb-n{font:900 clamp(2.4rem,6vw,4rem)/1 var(--display);letter-spacing:-.01em}
.sb-acc-d .sb-n,.sb-acc-d .sb-v{color:#9dbcff}.sb-acc-r .sb-n,.sb-acc-r .sb-v{color:#ff9b94}
.sb-w{font-size:var(--f-sm);color:#dfe6f8}
.sb-v{font:800 var(--f-sm)/1.2 var(--display);text-transform:uppercase;letter-spacing:.04em}
@media(max-width:40rem){.scoreboard{grid-template-columns:minmax(0,1fr);gap:var(--s2)}
  .sb{display:grid;grid-template-columns:auto 1fr;column-gap:var(--s3);align-items:baseline}
  .sb-k{grid-column:1/-1}.sb-n{grid-row:2/4;font-size:2.6rem}}
.bc .summary-lede{color:#dfe6f8;font-size:clamp(.98rem,1.5vw,1.1rem);font-weight:500;
  max-width:60rem;margin:0 0 var(--s4)}
.bc .summary-lede a{color:#fff}
/* Wide: the map beside the Senate, the key races across, the House beside the governors.
   Narrow: one column, the key races under the map. The DOM is in reading order either way. */
/* The House panel sits under the map, beside the tall Senate panel: with the key races there,
   the map column ended about 900 px above the Senate panel and left an empty block as tall as
   the map (owner, 2026-10-09). The governors' ledger then takes the full width. */
.bc-stage{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:var(--s4);
  align-items:start;padding:var(--s3) 0 var(--s4);
  grid-template-rows:auto auto 1fr auto;
  grid-template-areas:"map map map map senate senate" "house house house house senate senate"
    "keys keys keys keys senate senate"
    "governors governors governors governors governors governors"}
@media(max-width:56rem){.bc-stage{grid-template-columns:minmax(0,1fr);
  grid-template-areas:"map" "keys" "senate" "house" "governors"}
  .bc-stage:has(#bm-governor:checked){grid-template-areas:"map" "governors" "keys" "senate"
    "house"}
  .bc-stage:has(#bm-house:checked){grid-template-areas:"map" "house" "keys" "senate"
    "governors"}}
.bc-stage>*{min-width:0}
.bs-map{grid-area:map;align-self:start}  /* at the top beside the taller Senate ledger */
.bs-keys{grid-area:keys}
.bc-stage>.bp-senate{grid-area:senate}
.bc-stage>.bp-house{grid-area:house}
.bc-stage>.bp-governors{grid-area:governors}
.bs-keys .lower{margin:0}
/* Each panel is as tall as its content: the race ledgers and the House chart have different
   needs, and stretching them to one height left large empty gaps (graphics handoff plan). */
.bc-stage>.bp{align-self:start}
/* Proportional where there is room. In a narrow panel or on a phone, each race keeps 9 px and
   the seats not up shrink to a labelled block (35 of 100 seats in a 400 px panel would be 4 px);
   in the narrowest, the races take whatever the two blocks leave */
.bc-stage>.bp-governors .hemi-blocks{max-width:22rem}

/* the map, tilted */
.bmapbox{min-width:0;container-type:inline-size}
.bm-tabs{display:flex;gap:6px;margin:0 0 var(--s3);flex-wrap:wrap}
.bm-tabs label{font:800 1rem/1 var(--display);text-transform:uppercase;letter-spacing:.06em;
  padding:.5em 1em;border:1px solid var(--bc-line);background:rgba(255,255,255,.05);
  color:var(--bc-dim);border-radius:3px;cursor:pointer;user-select:none}
#bm-senate:checked~.bm-tabs label[for=bm-senate],
#bm-house:checked~.bm-tabs label[for=bm-house],
#bm-governor:checked~.bm-tabs label[for=bm-governor]{background:var(--gold);color:#0b1330;
  border-color:var(--gold)}
#bm-senate:focus-visible~.bm-tabs label[for=bm-senate],
#bm-house:focus-visible~.bm-tabs label[for=bm-house],
#bm-governor:focus-visible~.bm-tabs label[for=bm-governor]{outline:2px solid var(--gold);
  outline-offset:2px}
.bmaps{perspective:1100px;padding:var(--s2) 0 var(--s3)}
.bmap{--t:min(52px,calc((100vw - 2*var(--gutter) - 12px)/11.6));
  --t:min(60px,calc((100cqw - 12px)/11.6));
  display:grid;
  grid-template-columns:repeat(11,var(--t));grid-auto-rows:var(--t);gap:calc(var(--t)*.1);
  transform:rotateX(22deg) rotateZ(-2deg);transform-origin:50% 60%;margin:0 auto;
  width:max-content;max-width:100%}
#bm-senate:checked~.bmaps :is(.bmap-governor,.bmap-house),
#bm-governor:checked~.bmaps :is(.bmap-senate,.bmap-house),
#bm-house:checked~.bmaps :is(.bmap-senate,.bmap-governor){display:none}
/* The House map: the 435-district dot map (elab.api.visuals), on the dark stage. */
.bmap-house .dotmap{margin:0}
.bmap-house .dotmap svg{width:100%;height:auto;display:block;background:transparent;
  box-shadow:none;border:0}
.bmap-house .dm-st{fill:#c3cde6}
.bmap-house figcaption{color:var(--bc-dim);font-size:var(--f-xs);margin-top:var(--s2)}
/* The chamber panel beside the map follows the map: the governors beside the governor map,
   the House beside the House map (the Senate's panel moves down to the freed place). */
/* The key-races strip follows the map too: Senate races under the Senate map, and so on. */
.bc-stage:not(:has(#bm-governor:checked)) .lower[data-office=governor]{display:none}
.bc-stage:not(:has(#bm-house:checked)) .lower[data-office=house]{display:none}
.bc-stage:has(#bm-governor:checked) .lower[data-office=senate]{display:none}
.bc-stage:has(#bm-house:checked) .lower[data-office=senate]{display:none}
@media(min-width:56.01rem){
  .bc-stage:has(#bm-governor:checked){grid-template-areas:
    "map map map map governors governors" "house house house house governors governors"
    "keys keys keys keys governors governors" "senate senate senate senate senate senate"}
  .bc-stage:has(#bm-house:checked){grid-template-areas:
    "map map map map house house" "keys keys keys keys keys keys"
    "senate senate senate governors governors governors"}}
.bt{position:relative;border-radius:5px;display:flex;flex-direction:column;align-items:center;
  justify-content:center;line-height:1;text-decoration:none;color:#fff;background:#28355e;
  box-shadow:0 1px 0 rgba(255,255,255,.35) inset,0 -5px 9px rgba(0,0,0,.22) inset,
    0 4px 0 rgba(0,0,0,.45),0 8px 14px rgba(0,0,0,.5);text-shadow:0 1px 2px rgba(0,0,0,.4)}
.bt:hover,.bt:focus-visible{text-decoration:none;outline:2px solid #fff;outline-offset:2px;
  z-index:2}
.bt-s{font:800 calc(var(--t)*.36)/1 var(--display);letter-spacing:.02em}
.bt-p{font:500 calc(var(--t)*.22)/1 var(--mono);opacity:.92;margin-top:.12em}
.bt.t-d5{background:var(--c-sd)}.bt.t-d4{background:var(--c-ld)}
.bt.t-d3{background:var(--c-nd);color:#06122e}
.bt.t-d2{background:var(--c-d2);color:#06122e}.bt.t-toss{background:var(--c-tu);color:#0b1330}
.bt.t-r2{background:var(--c-r2);color:#2a0705}.bt.t-r3{background:var(--c-nr);color:#2a0705}
.bt.t-r4{background:var(--c-lr)}.bt.t-r5{background:var(--c-sr)}
.bt.t-d3,.bt.t-d2,.bt.t-toss,.bt.t-r2,.bt.t-r3{text-shadow:none}
.bt.t-off{background:#18244a;color:rgba(255,255,255,.66);text-shadow:none;
  box-shadow:0 3px 0 rgba(0,0,0,.4),0 6px 10px rgba(0,0,0,.35)}
.bt.t-none,.bt.bt-held{background:repeating-linear-gradient(135deg,#33416e 0 4px,#1b2650 4px 8px);
  color:#e6ebff;outline:1px dashed #9fb0e0;outline-offset:-3px}
.bt-close::after,.bt-keyclose::after{content:"";position:absolute;inset:-3px;border-radius:7px;
  border:2px solid var(--gold);pointer-events:none}
.bt-i{position:absolute;top:2px;right:3px;font:700 calc(var(--t)*.2)/1 var(--mono);
  background:#5b2a91;color:#fff;border-radius:2px;padding:1px 2px;text-shadow:none}
.bkeys{display:flex;flex-wrap:wrap;gap:var(--s1) var(--s3);margin:var(--s3) 0 0;
  font:500 var(--f-2xs)/1.4 var(--mono);color:var(--bc-dim)}
.bk{display:inline-flex;align-items:center;gap:.45em}
.bk .bt{width:1.05em;height:1.05em;border-radius:2px;box-shadow:none;display:inline-block;
  --t:14px;outline-offset:-1px}
.bk .bt-keyclose{background:transparent}
.bk .bt-keyclose::after{inset:0;border-radius:2px}
.bk .bt-i{top:-1px;right:-1px;padding:0 1px;font-size:8px}

/* chamber panels */
.bp{background:linear-gradient(180deg,rgba(255,255,255,.08),rgba(255,255,255,.02));
  border:1px solid var(--bc-line);border-radius:6px;padding:var(--s3) var(--s4) var(--s3);
  box-shadow:0 20px 40px -24px rgba(0,0,0,.9);min-width:0}
.bp-k{font:600 var(--f-xs)/1.2 var(--mono);letter-spacing:.14em;text-transform:uppercase;
  color:var(--gold);margin:0;padding:0;border:0}
.bp-top{display:flex;justify-content:space-between;align-items:center;gap:var(--s2)}
.bp .badge{color:#ffc97a;border-color:#ffc97a;background:transparent}
.bp-verdict{font:800 var(--f-xl)/1.05 var(--display);text-transform:uppercase;letter-spacing:.01em;
  margin:var(--s2) 0 0}
.bp-row{display:flex;align-items:center;gap:var(--s2) var(--s3);flex-wrap:wrap}
.bp-big{font:900 clamp(3rem,6vw,4.4rem)/.95 var(--display);margin:var(--s1) 0 0;
  font-variant-numeric:tabular-nums;letter-spacing:.005em}
.bp-d{color:#8db0ff}.bp-r{color:#ff8a83}.bp-n{color:#fff}
.bp-what{margin:var(--s1) 0 0;color:#e3e9fb;font-size:var(--f-sm);font-weight:600}
.bp-seats{margin:2px 0 0;color:var(--bc-dim);font-size:var(--f-xs)}
.bp-seats a,.bp-what a{color:inherit}
.bp .c-note{color:#c9d3ee;font-size:var(--f-xs);line-height:1.5;margin:var(--s2) 0 0}
.bp .c-note a,.bp .c-more a{color:var(--gold);text-decoration:underline;
  text-decoration-color:rgba(255,200,61,.45)}
.bp .c-note a.term{color:inherit;text-decoration-color:#9fb0e0}
.bp .c-more{margin:var(--s2) 0 0;font-size:var(--f-sm)}
.bp-hist{margin:var(--s1) auto 0;max-width:21rem}
.bp-hist .hist{margin:0;max-width:100%}
.bp-hist .hist + p{display:none}          /* the histogram's caption repeats the panel */
.bp .h-d{fill:#5b8cff;opacity:.9}.bp .h-r{fill:#ff5f58;opacity:.85}.bp .h-split{fill:#9fb0e0}
.bp .h-maj{stroke:var(--gold)}.bp .h-maj-label{fill:var(--gold)}.bp .h-tick{fill:var(--bc-dim)}
.delta{font:600 var(--f-2xs)/1.3 var(--mono);padding:.35em .6em;border-radius:3px;
  background:rgba(255,200,61,.12);color:var(--gold);border:1px solid rgba(255,200,61,.5);
  letter-spacing:.03em;white-space:nowrap}
.hemi{display:block;width:100%;max-width:21rem;height:auto;margin:var(--s2) auto 0}
.hemi-blocks{max-width:17rem}
.hm-d circle,.hm-sd{fill:#5b8cff}.hm-r circle,.hm-sr{fill:#ff5f58}
.hm-line{stroke:var(--gold);stroke-width:1.6;stroke-dasharray:3 3}
.hm-t{fill:var(--bc-dim);font:500 11px var(--mono);text-anchor:middle}

/* key races: the lower third */
.lower{display:grid;grid-template-columns:auto minmax(0,1fr);border:1px solid var(--bc-line);
  border-radius:4px;overflow:hidden;margin:var(--s4) 0 0;background:rgba(3,8,24,.7)}
.lower-tag{font:900 1.15rem/1 var(--display);text-transform:uppercase;letter-spacing:.04em;
  background:#d92a24;color:#fff;padding:var(--s3);display:flex;align-items:center;margin:0;
  border:0}
.keys{display:grid;grid-template-columns:repeat(auto-fit,minmax(9.5rem,1fr))}
.key{min-width:0;padding:var(--s2) var(--s3);border-left:1px solid var(--bc-line);
  border-top:1px solid var(--bc-line);margin-top:-1px;display:block;color:#fff}
.key:hover{text-decoration:none;background:rgba(255,255,255,.05)}
.key-st{font:800 1.1rem/1.1 var(--display);text-transform:uppercase;display:block;
  letter-spacing:.02em}
.key-vs{display:flex;justify-content:space-between;gap:6px;font:500 var(--f-2xs)/1.35 var(--mono);
  color:var(--bc-dim);margin-top:2px;flex-wrap:wrap}
.kv-d{color:#a9c3ff}.kv-i{color:#d8b8ff}.kv-r{color:#ffaaa4;text-align:right;margin-left:auto}
.kbar{display:block;height:6px;border-radius:2px;margin-top:6px;background:#e5322d;overflow:hidden}
.kbar i{display:block;height:100%}
.kb-d{background:#3d74ff}.kb-i{background:#9a5fe0}
@media(max-width:40rem){.lower{grid-template-columns:minmax(0,1fr)}
  .lower-tag{justify-content:center;padding:var(--s2)}}

/* ticker and foot */
.ticker{margin:var(--s4) 0 0;border-top:2px solid var(--gold);background:rgba(0,0,0,.35);
  overflow:hidden;white-space:nowrap;font:600 var(--f-sm)/1 var(--mono);color:#fff;
  text-transform:uppercase;letter-spacing:.03em}
.tk-run{display:inline-block;padding:.75em 0;animation:bc-crawl 75s linear infinite}
.ticker:hover .tk-run{animation-play-state:paused}
.tk-run em{font-style:normal;color:var(--gold);margin:0 1em}
@keyframes bc-crawl{from{transform:translateX(0)}to{transform:translateX(-50%)}}
.bc-foot{display:flex;flex-wrap:wrap;gap:var(--s2) var(--s4);align-items:center;
  justify-content:space-between;padding-top:var(--s3);padding-bottom:var(--s4)}
.bc-foot p{margin:0;font:500 var(--f-xs)/1.5 var(--mono);color:var(--bc-dim);max-width:60rem}
.replay{font:800 1rem/1 var(--display);text-transform:uppercase;letter-spacing:.06em;
  padding:.6em 1.1em;border-radius:3px;border:1px solid var(--gold);background:transparent;
  color:var(--gold);cursor:pointer}
.replay:hover{background:rgba(255,200,61,.12)}
.replay:focus-visible,.bc a:focus-visible{outline:2px solid var(--gold);outline-offset:2px}

/* the front page's "Forecast as of" stamp, as the live tag */
.mast-home .asof{display:inline-flex;align-items:center;gap:.6em;margin:var(--s3) 0;
  padding:.45em .8em;color:#fff;font-weight:600;letter-spacing:.1em;border-radius:3px;
  background:rgba(229,50,45,.16);border:1px solid rgba(255,110,100,.55);max-width:100%}
.mast-home .asof::before{content:"";flex:none;width:.6em;height:.6em;border-radius:50%;
  background:#ff4b45;box-shadow:0 0 10px #ff4b45;animation:bc-pulse 1.6s infinite}
.mast-home .nav+.asof,.mast-home .navmenu+.asof{border-top:1px solid rgba(255,110,100,.55)}
/* the title and the ballot counts, folded into one small line over the headline */
.bc h1.bc-kicker{font:600 var(--f-xs)/1.5 var(--mono);text-transform:uppercase;
  letter-spacing:.08em;color:#dfe6f8;margin:0;max-width:none}
.bc-counts{color:var(--bc-dim);font-weight:400}
.bc .bc-headline{margin-bottom:var(--s3)}
.bc .finder{margin:0 0 var(--s4)}
.page-home .masthead{border-bottom:0;background:radial-gradient(900px 340px at 12% -30%,
  #1d47a8 0%,transparent 70%),var(--navy-2)}
.bc h1{padding-top:var(--s5)}

/* the sequence: runs only when the script adds .bc-play, so the markup is the final state */
.bmap.bm-anim .bt{animation:bc-flip .62s cubic-bezier(.2,.9,.3,1.2) both;
  animation-delay:calc(var(--o)*42ms + 120ms)}
@keyframes bc-flip{0%{transform:none}45%{transform:translateY(-12px) rotateX(-88deg);
  filter:brightness(1.5)}100%{transform:none}}
.bc-play .kbar i{animation:bc-grow 1.3s .4s cubic-bezier(.2,.8,.2,1) both}
@keyframes bc-grow{from{width:50%}}
.bc-play .delta{animation:bc-up .45s 1.7s both}
@keyframes bc-up{from{opacity:0;transform:translateY(6px)}}
.bc-play .hm-d,.bc-play .hm-r{animation:bc-fade .9s .2s both}
@keyframes bc-fade{from{opacity:.25}}
.bc-done .kbar i,.bc-done .delta,.bc-done .hm-d,.bc-done .hm-r{animation:none}

@media(max-width:40rem){
  .bmap{transform:rotateX(10deg);--t:calc((100vw - 2*var(--gutter) - 8px)/11.3)}
  .bt-p{display:none}
  .bp-big{font-size:3.2rem}
}
@media(prefers-reduced-motion:reduce){
  .bc *,.bc *::after{animation:none!important;transition:none!important}
  .ticker{white-space:normal}
  .tk-run{padding:.75em var(--gutter)}
  .tk-run span:nth-child(n+1){display:inline}
}
/* A long change chip wraps on a phone instead of running off the screen (site self-check
   2026-10-09: "chance of more than half 44% → 43%" was cut off at 390 px). */
@media(max-width:40rem){.delta{white-space:normal;display:inline-block;max-width:100%}}


/* ---- race ledger (elab.api.ledger) ------------------------------------------------------- */
.ld{--ld-card:var(--surface);--ld-ink:var(--ink);--ld-dim:var(--dim);--ld-line:var(--rule);
  --ld-acc:var(--gold-ink);--ld-focus:var(--accent);
  container-type:inline-size;margin:var(--s3) 0 0;color:var(--ld-ink)}
.bc-stage .ld{--ld-card:#101a33;--ld-ink:#f7f9ff;--ld-dim:#bac8e0;--ld-line:#3c4e70;
  --ld-acc:#ffc83d;--ld-focus:#ffffff}
.ld-small{font-size:13px;line-height:1.45;color:var(--ld-dim);margin:0}
.ld-acct{display:flex;flex-wrap:wrap;gap:4px 20px;margin:0 0 12px;font-size:13px;line-height:1.45}
.ld-acct div{min-width:0}
.ld-acct dt{font:600 11px/1.4 var(--mono);letter-spacing:.08em;text-transform:uppercase;
  color:var(--ld-dim)}
.ld-acct dd{margin:0;color:var(--ld-ink)}
.ld-sw{display:inline-block;width:11px;height:11px;border-radius:2px;vertical-align:-1px;
  margin-right:5px}
.ld-sw-d{background:var(--c-sd)}.ld-sw-r{background:var(--c-sr)}
.ld-sw.t-d5,.ld-card.t-d5{--sh:var(--c-sd)}.ld-sw.t-d4,.ld-card.t-d4{--sh:var(--c-ld)}
.ld-sw.t-d3,.ld-card.t-d3{--sh:var(--c-nd)}.ld-sw.t-d2,.ld-card.t-d2{--sh:var(--c-d2)}
.ld-sw.t-toss,.ld-card.t-toss{--sh:var(--c-tu)}.ld-sw.t-r2,.ld-card.t-r2{--sh:var(--c-r2)}
.ld-sw.t-r3,.ld-card.t-r3{--sh:var(--c-nr)}.ld-sw.t-r4,.ld-card.t-r4{--sh:var(--c-lr)}
.ld-sw.t-r5,.ld-card.t-r5{--sh:var(--c-sr)}
.ld-legend .ld-sw{background:var(--sh)}
.ld-hatch{background:repeating-linear-gradient(135deg,#8a93a8 0 2px,transparent 2px 5px);
  border:1px solid #8a93a8}
.ld-call{border-left:3px solid var(--ld-acc);padding:2px 0 2px 10px;margin:0 0 12px;
  font-size:13px;line-height:1.45}
.ld-call p{margin:0 0 4px}
.ld-grid{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(4,1fr);
  gap:6px}
.ld-grid li{margin:0;min-width:0}
.ld-card{display:flex;flex-direction:column;justify-content:center;gap:2px;min-height:58px;
  box-sizing:border-box;padding:6px;border:1px solid var(--ld-line);border-top:5px solid var(--sh);
  border-radius:4px;background:var(--ld-card);color:var(--ld-ink);text-decoration:none}
a.ld-card:hover{border-color:var(--ld-dim);border-top-color:var(--sh)}
a.ld-card:focus-visible{outline:3px solid var(--ld-focus);outline-offset:2px}
.ld-st{font:700 14px/1.2 var(--sans);display:flex;align-items:center;gap:4px}
.ld-p{font:600 12px/1.2 var(--mono);font-variant-numeric:tabular-nums;color:var(--ld-ink);
  white-space:nowrap}
.ld-i{font:700 10px/1 var(--mono);padding:2px 3px;border-radius:2px;background:var(--ind);
  color:var(--surface)}
.ld-dia{color:var(--ld-acc);font-size:12px;margin-left:auto}
.ld-line{box-shadow:0 0 0 2px var(--ld-acc)}
.ld-path{border-style:dashed;border-top-style:solid}
.ld-held{display:flex;align-items:center;gap:6px;margin:8px 0 0;padding:8px;font-size:13px;
  border:1px dashed var(--ld-line);border-radius:4px;color:var(--ld-ink);text-decoration:none}
.ld-legend{display:flex;flex-wrap:wrap;gap:4px 10px;margin:12px 0 4px;font:500 11px/1.4 var(--mono);
  color:var(--ld-dim)}
.ld-lt{flex-basis:100%;font-weight:600;letter-spacing:.06em;text-transform:uppercase}
.ld-k{white-space:nowrap}
.ld-cap{margin-top:4px}
.ld-text{margin:8px 0 0;font-size:13px;color:var(--ld-dim)}
.ld-text summary{cursor:pointer;color:var(--ld-ink)}
.ld-text ol{margin:4px 0 0;padding-left:1.4em;line-height:1.5}
@container (min-width:470px){
  .ld-grid{grid-template-columns:repeat(5,1fr);gap:8px}
  .ld-card{padding:8px}
  .ld-st{font-size:15px}
  .ld-p{font-size:13px}
}
@container (min-width:900px){.ld-grid{grid-template-columns:repeat(7,1fr)}}  /* full-width pages */
@container (max-width:299px){.ld-grid{grid-template-columns:repeat(3,1fr)}}

/* the panel histogram (elab.api.histogram.render_panel) */
.hp-fig{margin:16px 0 0;max-width:340px}
.hp-fig figcaption{display:flex;flex-direction:column;gap:2px;font-size:13px;line-height:1.45}
.hp-fig figcaption span{color:var(--dim)}
.hp{width:100%;height:auto;display:block;margin-top:6px}
.hp-bars rect{fill:#8a96b3}
.hp-line{stroke:var(--gold-ink);stroke-width:2}
.hp-lab{fill:var(--gold-ink);font:600 12px var(--mono)}
.hp-tick{fill:var(--dim);font:500 12px var(--mono)}
.bc-stage .hp-bars rect{fill:#7d8bab}
.bc-stage .hp-line{stroke:#ffc83d}.bc-stage .hp-lab{fill:#ffc83d}
.bc-stage .hp-tick{fill:#bac8e0}.bc-stage .hp-fig figcaption span{color:#bac8e0}

/* ---- Find your race (front page and /races) ------------------------------------------ */
.finder{margin:var(--s4) 0 var(--s5);max-width:44rem}
.finder-label{display:block;font:800 var(--f-xl)/1 var(--display);text-transform:uppercase;
  letter-spacing:.03em;margin-bottom:var(--s2)}
.finder-row{display:flex;gap:var(--s2)}
.finder input{flex:1;min-width:0;font:inherit;font-size:1.05rem;padding:.7rem .9rem;
  border:2px solid var(--rule);border-radius:var(--r-md);background:var(--surface);
  color:var(--ink);min-height:48px}
.finder input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.finder button{font:800 1.15rem/1 var(--display);text-transform:uppercase;letter-spacing:.06em;
  padding:.6rem 1.3rem;border:0;border-radius:var(--r-md);background:var(--navy-2);color:#fff;
  cursor:pointer;min-height:48px}
.finder button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.finder-hint{margin:var(--s2) 0 0;font-size:var(--f-sm);color:var(--dim)}
.finder-hint a{font-weight:700}
.finder-dark .finder-label{color:var(--gold)}
.finder-dark input{background:#fff;color:#0e1525;border-color:var(--gold)}
.finder-dark button{background:var(--gold);color:#0b1330}
.finder-dark input:focus-visible,.finder-dark button:focus-visible{outline-color:#fff}
.finder-dark .finder-hint{color:#c3cde6}
.finder-dark .finder-hint a{color:#fff}
/* ---- /races ---------------------------------------------------------------------------- */
.ri-jump{display:flex;flex-wrap:wrap;gap:4px;margin:var(--s4) 0 var(--s5)}
.ri-jump a{font:600 var(--f-xs)/1 var(--mono);padding:.55em .5em;border:1px solid var(--rule);
  border-radius:3px;min-width:2.6em;text-align:center;text-decoration:none;background:var(--surface)}
.ri-state{border-top:1px solid var(--rule);padding:var(--s3) 0 var(--s4);scroll-margin-top:8px}
.ri-state h2{margin:0 0 var(--s2);font-size:var(--f-xl)}
.ri-k{margin:var(--s2) 0 var(--s1);font:600 var(--f-2xs)/1 var(--mono);letter-spacing:.08em;
  text-transform:uppercase;color:var(--dim)}
.ri-list{list-style:none;margin:0;padding:0;display:grid;gap:2px var(--s4);
  grid-template-columns:repeat(auto-fill,minmax(10.5rem,1fr))}
.ri-list li{margin:0;padding:.3em 0;font-size:var(--f-sm);display:flex;flex-wrap:wrap;
  gap:0 .5em;align-items:baseline}
/* 24 px tap targets (WCAG 2.2 2.5.8; design review 2026-10-07) */
.ri-list a{font-weight:700;display:inline-block;padding:.2em 0;min-width:2.75rem}
.ri-p{font:600 var(--f-xs)/1.2 var(--mono)}
.ri-d{color:var(--dem)}.ri-r{color:var(--rep)}.ri-i{color:var(--ind)}
.ri-flag{font:500 var(--f-2xs)/1.2 var(--mono);text-transform:uppercase;letter-spacing:.05em;
  color:var(--dim)}
.ri-held{color:var(--gold-ink)}

/* rating bands (power bar, dot map, chips, tables): one palette with the tile maps */
.r-sd{fill:var(--c-sd);background:var(--c-sd)} .r-ld{fill:var(--c-ld);background:var(--c-ld)}
.r-nd{fill:var(--c-nd);background:var(--c-nd)} .r-tu{fill:var(--c-tu);background:var(--c-tu)}
.r-nr{fill:var(--c-nr);background:var(--c-nr)} .r-lr{fill:var(--c-lr);background:var(--c-lr)}
.r-sr{fill:var(--c-sr);background:var(--c-sr)}
.r-wh{fill:var(--surface-2);background:var(--surface-2);stroke:var(--dim)}
.office .rating{font:600 var(--f-2xs)/1.6 var(--mono);letter-spacing:.06em;text-transform:uppercase;
  border-radius:3px;padding:1px 7px}
.office .r-sd{background:var(--c-sd);color:#fff}.office .r-ld{background:var(--c-ld);color:#fff}
.office .r-nd{background:var(--c-nd);color:#06122e}
.office .r-tu{background:var(--c-tu);color:#0b1330}
.office .r-nr{background:var(--c-nr);color:#2a0705}.office .r-lr{background:var(--c-lr);color:#fff}
.office .r-sr{background:var(--c-sr);color:#fff}
.pb-head{font:800 var(--f-lg)/1.1 var(--display);text-transform:uppercase;letter-spacing:.02em}
.pb-exp{font:500 var(--f-sm) var(--sans);text-transform:none;letter-spacing:0}
.pb-n{font-family:var(--display);font-weight:800;font-size:17px}
.pb-maj-t{font:600 12px var(--mono)}
.pb-legend{font:500 var(--f-2xs)/1.5 var(--mono)}
.dotmap svg{border-radius:var(--r-lg);box-shadow:var(--shadow)}
.dm-st{font-family:var(--display);font-size:9.5px}

/* race and district header: the chances as big numbers over a bar that fills on load */
.race-hero{border:1px solid var(--rule);border-top:4px solid var(--navy-2);
  border-radius:var(--r-lg);box-shadow:var(--shadow-lift);padding:var(--s5)}
.chip{font:600 var(--f-2xs)/1.5 var(--mono);letter-spacing:.08em;text-transform:uppercase;
  border-radius:3px;padding:.3em .7em}
.chip.r-nd,.chip.r-tu,.chip.r-nr{color:#0e1525}
.rh-what{font:600 var(--f-2xs)/1.4 var(--mono);letter-spacing:.1em;text-transform:uppercase;
  color:var(--dim)}
.h2h{margin:var(--s4) 0 var(--s2)}
.h2h-p{font:900 clamp(3.4rem,9vw,5.5rem)/.9 var(--display);letter-spacing:0;
  font-variant-numeric:tabular-nums}
.h2h-name{font:800 clamp(1.25rem,2.6vw,1.75rem)/1.05 var(--display);text-transform:uppercase;
  letter-spacing:.01em;margin-top:.2em}
.h2h-party{font:500 var(--f-2xs)/1.4 var(--mono);letter-spacing:.1em;text-transform:uppercase}
.h2h-side.i .h2h-p,.h2h-side.i .h2h-name{color:var(--ind)}
.h2h-side:not(.lead) .h2h-p{font-weight:500}  /* full colour: .62 opacity gave 2.9:1 (review) */
.probbar{height:18px;border-radius:3px;gap:2px;background:var(--surface-2);
  margin:var(--s2) 0 var(--s5)}
.probbar i{display:block;animation:fb-fill 1.1s .15s cubic-bezier(.2,.8,.2,1) both}
.probbar i:first-child{transform-origin:left center}
.probbar i:last-child{transform-origin:right center}
.probbar .pi{background:var(--ind)}
@keyframes fb-fill{from{transform:scaleX(0)}}
.mrange figcaption,.why figcaption{font:600 var(--f-2xs)/1.4 var(--mono);letter-spacing:.1em;
  text-transform:uppercase}
.mr-lab{font:800 17px var(--display)}
.mr-tl{font:400 11px var(--mono)}
.wy-v{font-family:var(--mono)}

/* front page sections below the stage */
.hero-cards-h{margin-top:var(--s6)}
.chamber{border-top:4px solid var(--rule)}
.chamber.lean-even{border-top-color:var(--gold)}
.chamber .c-big{font-size:clamp(3rem,5vw,3.75rem)}
.changes{border-radius:var(--r-lg);border-left:4px solid var(--gold);box-shadow:var(--shadow)}
.changes h2{font:800 var(--f-lg)/1.1 var(--display);text-transform:uppercase;letter-spacing:.02em}
.trend{border-radius:var(--r-lg);box-shadow:var(--shadow)}
.trend figcaption b{font:800 var(--f-lg)/1 var(--display);text-transform:uppercase;
  letter-spacing:.02em}
.tc-ax,.tc-mlab{font-family:var(--mono)}
.summary-lede{font:600 1.25rem/1.45 var(--sans)}

/* the question page, support, polls, glossary */
.ask-form input{border:2px solid var(--rule);border-radius:var(--r-md);background:var(--surface)}
.ask-form input:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.ask-form button,.btn,.signup button{font:800 1.1rem/1 var(--display);text-transform:uppercase;
  letter-spacing:.06em;background:var(--navy-2);color:#fff;border-radius:var(--r-md)}
.ask-form button{padding:0 1.4em}
.ask-answer{border-radius:var(--r-lg);border-top:4px solid var(--gold);
  box-shadow:var(--shadow-lift)}
.ask-kind{font:600 var(--f-2xs)/1.4 var(--mono);letter-spacing:.12em;color:var(--gold-ink)}
.ask-read{font-family:var(--sans)}
.support-card{border-radius:var(--r-lg);box-shadow:var(--shadow);border-top:4px solid var(--navy-2)}
.support-card h2{font-size:var(--f-xl)}
.signup{border:1px solid var(--rule);border-top:4px solid var(--gold);border-radius:var(--r-lg);
  box-shadow:var(--shadow)}
.signup input[type=email]{border:2px solid var(--rule);border-radius:var(--r-md)}
.flag{color:var(--gold-ink);border-color:currentColor;font:500 var(--f-2xs)/1.6 var(--mono)}
.tab{border-radius:3px;font:500 var(--f-xs)/1.6 var(--mono);text-transform:uppercase;
  letter-spacing:.06em}
.tab.on{background:var(--navy-2);color:#fff;border-color:var(--navy-2)}
.glossary dt{font:800 var(--f-xl)/1.1 var(--display);text-transform:uppercase;letter-spacing:.01em}
.glossary dt:target{background:color-mix(in srgb,var(--gold) 30%,transparent)}
.events{border-radius:var(--r-lg);border-left-color:var(--gold)}
.events h2{font:800 var(--f-lg)/1.1 var(--display);text-transform:uppercase}
.ev-k{font-family:var(--sans)}
@media(prefers-color-scheme:dark){
  .stale-notice{background:#2a1a0b;color:#fde7cf;border-color:#f0a94a}
  .chip.r-nd,.chip.r-tu,.chip.r-nr{color:#0e1525}
  .t-off{color:var(--dim)}
}
@media(prefers-reduced-motion:reduce){.probbar i{animation:none}}

/* Charts on phones: an SVG scales as a whole, so 10-11 px labels in a 560-960 px viewBox came out
   at 3.5-6 px on a 390 px screen (design review 2026-10-07). Larger text, fewer labels. Last in
   the brand sheet, so it wins over the label fonts set above. */
@media(max-width:40rem){
  .mrange svg .mr-tl{font-size:26px} .mrange svg .mr-lab{font-size:32px}
  .mrange svg .mr-minor{display:none}
  svg .t-tick,svg .t-spec-label{font-size:16px}
  svg.hist .h-tick,svg.hist .h-maj-label{font-size:18px}
}
