:root{--D:#1f5fbf;--R:#c8302c;--I:#7a52b3;--U:#d5dae2;--bg:#f3f5f8;--card:#fff;--ink:#141a24;--mute:#5b6576;--line:#e3e7ee}
*{box-sizing:border-box}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;background:var(--bg);color:var(--ink);font-family:system-ui,-apple-system,"Segoe UI",Roboto,Arial,sans-serif;line-height:1.45;font-size:16px}
a{color:var(--D)}
.testbar{background:#ffd23f;color:#3a2c00;text-align:center;font-weight:700;font-size:.85rem;padding:5px}
.top{background:#0f1b2d;color:#fff;padding:16px 14px 12px}
.kicker{margin:0;opacity:.75;font-size:.82rem}
.top h1{margin:2px 0 6px;font-size:1.5rem;line-height:1.2}
.upd-time{margin:0;font-size:.95rem;display:flex;align-items:center;gap:8px;color:#cfe0ff}
.dot{width:10px;height:10px;border-radius:50%;background:#ff4d4d;box-shadow:0 0 0 4px rgba(255,77,77,.25);flex:none}
.headline{margin:10px 0 0;background:rgba(255,255,255,.1);border-radius:10px;padding:10px 12px;font-weight:700;font-size:1rem}
.jump{display:flex;gap:6px;overflow-x:auto;margin-top:10px;padding-bottom:2px;-webkit-overflow-scrolling:touch}
.jump a{color:#fff;background:rgba(255,255,255,.12);text-decoration:none;font-size:.85rem;padding:5px 10px;border-radius:999px;white-space:nowrap}
main{max-width:980px;margin:0 auto;padding:4px 10px 10px}
.sec{margin:18px 0}
h2{font-size:1.25rem;margin:0 0 10px;padding-left:9px;border-left:5px solid #0f1b2d}
.card h2{border:0;padding:0}
h3{margin:0;font-size:1.05rem}
.lede{margin:-4px 0 10px;color:var(--mute);font-size:.9rem}
.card{background:var(--card);border-radius:14px;padding:13px;box-shadow:0 1px 3px rgba(16,24,40,.08);margin-bottom:12px;border:1px solid var(--line)}
.small{font-size:.85rem;color:var(--mute);margin:8px 0 0}
.mnote{margin:10px 0 0;font-size:.95rem}
.grid{display:grid;gap:10px;grid-template-columns:1fr;margin-bottom:10px}
.grid>.card{margin:0}
@media(min-width:700px){.grid{grid-template-columns:1fr 1fr}.race.big{grid-column:1/-1}}
.seats{display:flex;gap:6px;text-align:center}
.seats>div{flex:1;border-radius:10px;padding:8px 2px;background:var(--bg)}
.seats b{display:block;font-size:2rem;line-height:1.05}
.seats small{display:block;font-size:.74rem;color:var(--mute)}
.sd b{color:var(--D)}.sr b{color:var(--R)}.si b{color:var(--I)}.su b{color:#6b7380}
.cbar{position:relative;display:flex;height:22px;border-radius:6px;overflow:visible;margin:12px 0 4px;background:var(--U)}
.cbar i{display:block;height:100%}
.cbar i:first-child{border-radius:6px 0 0 6px}.cbar i:last-child{border-radius:0 6px 6px 0}
.bD{background:var(--D)}.bR{background:var(--R)}.bI{background:var(--I)}.bU{background:var(--U)}.bO{background:#8a8f98}
.mline{position:absolute;top:-5px;bottom:-5px;width:0;border-left:2px dashed #0f1b2d}
.tag{display:inline-block;font-size:.74rem;font-weight:700;padding:2px 8px;border-radius:999px;white-space:nowrap;vertical-align:1px}
.tag-mute{background:#e9edf3;color:#3d4757}
.rt-t{background:#fff1c9;color:#7a5500}.rt-ld,.rt-sd{background:#dfe9fb;color:#173f86}.rt-lr,.rt-sr{background:#fbe1e0;color:#8c1f1b}.rt-n{background:#e9edf3;color:#3d4757}
.tag-win{color:#fff}.tag-win.pD{background:var(--D)}.tag-win.pR{background:var(--R)}.tag-win.pI,.tag-win.pO{background:var(--I)}
.tag-proj{background:#fff;border:1.5px solid currentColor}.tag-proj.pD{color:var(--D)}.tag-proj.pR{color:var(--R)}.tag-proj.pI{color:var(--I)}
.race header{display:flex;justify-content:space-between;align-items:center;gap:8px;margin-bottom:6px}
.cand{display:grid;grid-template-columns:1fr auto;gap:2px 8px;align-items:center;padding:4px 0;border-top:1px solid var(--line);font-size:.95rem}
.cand:first-of-type{border-top:0}
.cand.won .cn{font-weight:700}
.cand small{color:var(--mute)}
.cp{font-weight:700;font-variant-numeric:tabular-nums}
.bar{grid-column:1/-1;height:6px;background:#eef1f5;border-radius:4px;overflow:hidden}
.bar i{display:block;height:100%}
.pd{display:inline-block;min-width:1.3em;text-align:center;color:#fff;font-size:.72rem;border-radius:4px;padding:0 3px;margin-right:2px}
.pd.pD{background:var(--D)}.pd.pR{background:var(--R)}.pd.pI,.pd.pO{background:var(--I)}
.st{margin:6px 0 0;font-size:.85rem;color:var(--mute)}
.by{color:var(--mute);font-size:.82rem}
.rep{color:#334}
.flip{margin:6px 0 0;font-weight:700;color:#7a5500;font-size:.88rem}
.read{border-left:5px solid #e0a21b}
.read p{margin:8px 0}
.feed{list-style:none;margin:0;padding:0}
.feed li{display:flex;gap:10px;padding:8px 0;border-top:1px solid var(--line);font-size:.95rem}
.feed li:first-child{border-top:0}
.feed time{flex:none;font-weight:700;color:#0f1b2d;min-width:4.6em;font-variant-numeric:tabular-nums}
.polls{list-style:none;margin:0;padding:0}
.polls li{display:flex;gap:10px;padding:7px 0;border-top:1px solid var(--line);font-size:.93rem;align-items:baseline}
.polls li:first-child{border-top:0}
.polls b{flex:none;min-width:5.2em}
.polls span{flex:1}
.polls em{font-style:normal;font-size:.75rem;background:#e9edf3;border-radius:999px;padding:1px 7px;color:#3d4757}
.polls li.done{color:var(--mute)}
details.card summary{cursor:pointer;font-size:.98rem}
details.card[open] summary{margin-bottom:8px}
.rows{list-style:none;margin:0;padding:0}
.rows li{display:grid;grid-template-columns:4.4em 1fr;gap:2px 8px;padding:7px 0;border-top:1px solid var(--line);font-size:.9rem}
.rows li:first-child{border-top:0}
.rl{font-weight:700}
.rs{grid-column:2;font-size:.82rem}
.foot{text-align:center;color:var(--mute);font-size:.8rem;padding:10px 12px 26px}
@media(min-width:700px){.top{padding:22px 24px 14px}.top h1{font-size:1.9rem}}
.pd.pL,.pd.pG,.pd.pO{background:#8a8f98}.bL,.bG{background:#8a8f98}
.tw{overflow-x:auto;-webkit-overflow-scrolling:touch;margin-top:8px}
table.rt{border-collapse:collapse;width:100%;font-size:.82rem;min-width:520px}
.rt th,.rt td{padding:5px 4px;text-align:center;border-bottom:1px solid var(--line)}
.rt tr th:first-child{text-align:left;font-weight:700;white-space:nowrap}
.rt th small{display:block;font-weight:400;color:var(--mute);font-size:.72rem}
.rt tr:first-child th{font-size:.72rem;color:var(--mute);font-weight:700}
.c-solid-rep{background:#f6c9c7}.c-likely-rep{background:#fadcda}.c-lean-rep{background:#fdeeed}.c-tossup{background:#fff1c9;font-weight:700}.c-lean-dem{background:#edf2fc}.c-likely-dem{background:#dbe6fa}.c-solid-dem{background:#c6d7f6}
.rk li{grid-template-columns:7.5em 1fr}.rl2{font-weight:700;font-size:.85rem}
.feed a{color:var(--ink);text-decoration:none}.feed a:hover{text-decoration:underline}
details>summary.small{margin:8px 0;cursor:pointer}
.raters{margin:-2px 0 6px;font-size:.76rem;color:var(--mute)}
.feed span{min-width:0;overflow-wrap:anywhere}.feed time{max-width:5.5em}.rows li>span{min-width:0;overflow-wrap:anywhere}.grid>*{min-width:0}

#exit-polls .rn,#exit-polls .rs{grid-column:2}#exit-polls .rn small,#exit-polls .rs small{color:var(--mute)}#exit-polls .rows li{gap:4px 8px}

/* layer chips + forecasts + control math (Nov 3) */
.lay{display:inline-block;font-size:.68rem;font-weight:700;padding:1px 7px;border-radius:999px;white-space:nowrap;vertical-align:1px;border:1px solid transparent;letter-spacing:.01em}
.lay-off{background:#e3f4e8;color:#1d6b3a;border-color:#b9e2c6}
.lay-call{background:#e8eefc;color:#1f4c9e;border-color:#c5d4f5}
.lay-news{background:#eef0f4;color:#3d4757;border-color:#dde1e8}
.lay-ana{background:#fdf3dc;color:#8a5a00;border-color:#f3dca5}
.lay-unv{background:#fff;color:#a4450f;border:1px dashed #e0a27a}
.lay-fc{background:#f3eefb;color:#5b3d91;border-color:#dcd0f0}
h2 .lay,h3 .lay{vertical-align:3px;margin-left:4px}
.feed .lay{margin-right:4px}
.chk{font-size:.78rem;color:var(--mute);white-space:nowrap}
.cmath{font-size:.9rem;margin:8px 0 0;line-height:1.45}
.fc{border-top:1px solid var(--line);padding-top:9px;margin-top:9px}
.fch{margin:0;font-weight:600}.fch .lay{margin:4px 4px 0 0}
.fcl{margin:6px 0 0;padding-left:18px;font-size:.92rem}.fcl li{margin:2px 0}
