:root{--bg:#edf1f7;--panel:#fff;--panel2:#e2e8f1;--line:#bcc8d9;--ink:#17263e;--muted:#53657d;--dim:#687b94;--dem:#2469dc;--rep:#d64a5b;--gold:#a16c00;--unknown:#b9c4d4;--notup:#dfe6ef;--on-ink:#fff;--accent:var(--rep);--head:Oswald,'Arial Narrow',sans-serif;--body:Inter,Arial,sans-serif}
html.dark{--bg:#101a2c;--panel:#17253b;--panel2:#21324c;--line:#354862;--ink:#f0f4fb;--muted:#a6b8cf;--dim:#849bb7;--dem:#548ff5;--rep:#f16c7a;--gold:#f1c569;--unknown:#51627a;--notup:#1c2a3e;--on-ink:#101a2c}
*{box-sizing:border-box}html,body{height:100%;margin:0;background:var(--bg);color:var(--ink);font-family:var(--body);overflow:hidden;touch-action:none;user-select:none;-webkit-user-select:none}button,select{font:inherit;color:var(--ink);border:1px solid var(--line);background:var(--panel2);border-radius:6px;padding:12px 20px;cursor:pointer}button:hover{filter:brightness(1.15)}button:disabled{opacity:.45;cursor:default}button:focus-visible,select:focus-visible,a:focus-visible,[tabindex]:focus-visible{outline:3px solid var(--gold);outline-offset:4px}a{color:var(--muted)}[hidden]{display:none!important}#stage{position:absolute;left:50%;top:50%;width:1920px;height:1080px;transform-origin:center center;background:var(--bg);overflow:hidden}header{position:absolute;left:130px;right:130px;top:32px;height:70px;display:flex;align-items:center;gap:32px;z-index:10}header h1{font:500 58px var(--head);margin:0}header h1 span{color:var(--muted);font-size:38px;margin-left:12px}#live-status{margin-left:auto;font-size:22px;color:var(--muted)}#live-status.current{color:#70d3bc}#race-jump{font-size:23px;background:var(--panel);max-width:320px}#scoreboard{position:absolute;left:130px;right:130px;top:132px;display:grid;grid-template-columns:1fr 370px 1fr;gap:40px;z-index:5}.side-score{display:flex;align-items:center;gap:25px;padding:10px 30px;border-radius:9px;background:var(--panel)}.side-score.blue{border-left:6px solid var(--dem)}.side-score.red{border-right:6px solid var(--rep);justify-content:flex-end;text-align:right}.party-label{font-size:26px;margin-bottom:5px}.confirmed-number{font:600 88px/1 var(--head)}.confirmed-label{font-size:22px;color:var(--muted);margin-left:10px}.projected-number{font:500 40px var(--head);white-space:nowrap}.projected-number small{font:400 23px var(--body);color:var(--muted);display:block;margin-top:5px}.blue .confirmed-number,.blue .projected-number{color:var(--dem)}.red .confirmed-number,.red .projected-number{color:var(--rep)}.open-score{text-align:center;align-self:center}.open-score b{font:500 58px/1 var(--head)}.open-score span{font-size:25px;color:var(--muted);margin-left:10px}.open-score p{font-size:22px;color:var(--muted);margin:11px 0 0}#seat-bar{position:absolute;top:315px;left:130px;right:130px;display:flex;gap:4px;height:13px}#seat-bar i{flex:1;background:var(--unknown);border-radius:2px}#seat-bar .D{background:var(--dem)}#seat-bar .R{background:var(--rep)}#seat-bar .O{background:var(--gold)}#seat-bar .projected{background-image:repeating-linear-gradient(135deg,transparent 0 4px,#ffffff50 4px 6px);opacity:.65}.slide{position:absolute;left:130px;right:130px;top:350px;bottom:85px;opacity:0;visibility:hidden}.slide.active{opacity:1;visibility:visible}.map{min-width:0;min-height:0}.map svg{display:block;width:100%;height:100%;overflow:visible}#national-map{height:580px}.geo-feature{stroke:var(--bg);stroke-width:1.6;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill .15s}.geo-feature.called{stroke:var(--ink);stroke-width:2.7}.geo-feature:hover{stroke:var(--gold);stroke-width:3;filter:brightness(1.15)}.geo-label{font:600 17px var(--body);fill:var(--ink);text-anchor:middle;pointer-events:none;paint-order:stroke;stroke:var(--bg);stroke-width:3px}.national-legend{display:flex;gap:28px;align-items:center;font-size:23px;color:var(--muted);margin-top:8px}.national-legend span{display:flex;align-items:center;gap:10px}.national-legend i{width:17px;height:17px;border-radius:4px}.national-legend .blue{background:var(--dem)}.national-legend .red{background:var(--rep)}.national-legend .undecided{background:var(--unknown)}.national-legend .not-up{background:var(--notup);border:1px solid var(--line)}.national-legend .tip{margin-left:auto;color:var(--ink)}.detail-heading{height:62px;display:flex;align-items:center;gap:28px;margin-bottom:20px}.detail-heading button{font-size:25px;background:none}.detail-heading h2{font:500 49px var(--head);margin:0}.detail-heading>span{font-size:24px;color:var(--gold);margin-left:auto}.detail-body{display:grid;grid-template-columns:600px 1fr;gap:40px;height:530px}.state-column{display:flex;flex-direction:column}#state-map{height:330px}#projection-controls{margin-top:13px;text-align:center}#projection-controls label{display:block;color:var(--muted);font-size:22px;margin-bottom:11px}.projection-buttons{display:flex;gap:9px;justify-content:center}.projection-buttons button{font-size:24px;padding:11px 22px}.projection-buttons .selected{background:var(--ink);color:var(--on-ink);border-color:var(--ink)}#state-info{font-size:21px;text-align:center;color:var(--muted);margin-top:16px;line-height:1.45}#state-info a{color:var(--muted)}.race-column{min-width:0}#candidate-cards{display:grid;grid-template-columns:1fr 1fr;gap:18px}.candidate{background:var(--panel);border-top:4px solid var(--dem);border-radius:6px;padding:18px 23px;min-width:0}.candidate.red{border-top-color:var(--rep)}.candidate .party{font-size:21px;color:var(--muted)}.candidate h3{font:500 37px/1.15 var(--head);margin:8px 0 12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.candidate .candidate-numbers{display:flex;justify-content:space-between;align-items:center;gap:12px}.candidate .odds{font:500 60px/1 var(--head);color:var(--dem)}.candidate.red .odds{color:var(--rep)}.candidate .odds small{font:400 18px var(--body);display:block;margin-top:8px;color:var(--muted)}.candidate .votes{font-size:26px;text-align:right;font-variant-numeric:tabular-nums}.candidate .votes small{display:block;font-size:18px;color:var(--muted);margin-top:8px}.candidate button{display:block;width:100%;margin-top:16px;font-size:25px;background:color-mix(in srgb,var(--dem) 18%,var(--panel));border-color:var(--dem)}.candidate.red button{background:color-mix(in srgb,var(--rep) 18%,var(--panel));border-color:var(--rep)}.candidate button.confirmed{background:var(--dem);color:var(--on-ink)}.candidate.red button.confirmed{background:var(--rep)}.call-footer{display:flex;align-items:center;justify-content:space-between;margin:12px 0;font-size:20px;color:var(--muted)}.call-footer button{font-size:19px;background:none;padding:8px 14px}.history-heading{display:flex;align-items:center;gap:18px}.history-heading h3{font-size:25px;font-weight:500;margin:4px 0}.history-heading>div{margin-left:auto;display:flex;gap:4px}.history-heading button{font-size:18px;padding:7px 12px;background:none;border:0}.history-heading button.active{background:var(--panel2)}.history-heading>a{font-size:19px}#odds-history{height:155px;margin-top:5px;font-size:23px;color:var(--muted);display:flex;align-items:center;justify-content:center}#odds-history svg{width:100%;height:100%;overflow:visible}.chart-grid line{stroke:var(--line);stroke-dasharray:3 5}.chart-axis text{fill:var(--muted);font-size:15px}.chart-axis path,.chart-axis line{stroke:var(--line)}#data-status{font-size:17px;line-height:1.55;color:var(--dim);margin-top:8px;display:flex;justify-content:space-between;gap:12px}footer{position:absolute;left:130px;right:130px;bottom:28px;display:flex;align-items:center;gap:24px;font-size:20px;color:var(--dim)}#saved-status{margin-left:auto}#fs{font-size:27px;border:0;background:none;padding:6px 10px}aside.notes{display:none}#notes{display:none;position:fixed;right:0;top:0;bottom:0;width:420px;background:var(--panel);padding:30px;z-index:250;overflow:auto;font-size:22px;touch-action:pan-y}#notes.open{display:block}#notes h2{font-size:26px}#toast{position:fixed;bottom:28px;left:50%;transform:translateX(-50%);background:var(--ink);color:var(--on-ink);padding:14px 22px;font-size:17px;border-radius:7px;z-index:2000;box-shadow:0 6px 25px #0003;max-width:90vw}.chart-hover{font:17px var(--body);fill:var(--ink)}@media(prefers-reduced-motion:reduce){*{transition:none!important}}.sync-presenter #toast{z-index:2500}
/* Leave a clear source line above the presentation footer. */
.candidate{padding:15px 20px}.candidate .party{font-size:20px}.candidate h3{font-size:34px;margin:7px 0 10px}.candidate .odds{font-size:54px}.candidate .odds small{font-size:17px;margin-top:6px}.candidate button{font-size:24px;padding:10px 16px;margin-top:13px}.call-footer{margin:8px 0}.history-heading h3{font-size:24px}#odds-history{height:145px}#data-status{font-size:16px;margin-top:6px}

#national-back{font-size:26px;font-weight:600;background:var(--ink);color:var(--on-ink);border-color:var(--ink);white-space:nowrap}header{gap:24px}#live-status{font-size:20px}#race-jump{font-size:22px}
/* Presenters can operate the current slide; shared ink still captures drawing. */
.sync-presenter #sync-presenter .frame.cur iframe{pointer-events:auto}
#race-status-controls{margin-top:13px;text-align:center}#race-status-controls label{display:block;color:var(--muted);font-size:23px;margin-bottom:12px}.status-buttons{display:flex;gap:10px;justify-content:center}.status-buttons button{font-size:27px;min-width:150px;padding:13px 22px}.status-buttons .blue{border-color:var(--dem)}.status-buttons .red{border-color:var(--rep)}.status-buttons .selected.blue{background:var(--dem);color:var(--on-ink)}.status-buttons .selected.red{background:var(--rep);color:var(--on-ink)}.status-buttons .selected.neutral{background:var(--ink);color:var(--on-ink)}.history-heading{margin-top:24px}
.status-hint{font-size:19px;color:var(--muted);margin:10px 0 0}.status-buttons .selected.blue{background:color-mix(in srgb,var(--dem) 25%,var(--panel));color:var(--ink)}.status-buttons .selected.red{background:color-mix(in srgb,var(--rep) 25%,var(--panel));color:var(--ink)}.status-buttons .selected.called.blue{background:var(--dem);color:var(--on-ink)}.status-buttons .selected.called.red{background:var(--rep);color:var(--on-ink)}
:root{--dem-tending:#8fb4ed;--rep-tending:#e9a7b0}html.dark{--dem-tending:#a7c6fc;--rep-tending:#f5b8c1}.side-score{gap:24px;padding:14px 26px}.total-score{flex:none;min-width:125px}.party-label{font-size:25px;white-space:nowrap}.confirmed-number{font-size:78px}.score-breakdown{flex:1;display:flex;flex-direction:column;gap:15px;font-size:22px;text-align:left;min-width:0}.score-breakdown>div{display:flex;align-items:center;justify-content:space-between;gap:12px}.score-breakdown span{display:flex;align-items:center;gap:10px;white-space:nowrap}.score-breakdown b{font:500 34px var(--head)}.swatch{width:13px;height:13px;border-radius:3px;display:inline-block;flex:none}.swatch.blue{background:var(--dem)}.swatch.red{background:var(--rep)}.swatch.blue.tending,.national-legend .blue.tending,#seat-bar .D.tending{background:var(--dem-tending)}.swatch.red.tending,.national-legend .red.tending,#seat-bar .R.tending{background:var(--rep-tending)}.national-legend{font-size:21px;gap:19px}.national-legend .tip{font-size:20px}
.side-score{position:relative;padding-bottom:42px}.control-odds{position:absolute;bottom:10px;left:26px;right:26px;font-size:20px;text-decoration:none;color:var(--muted);text-align:left}.side-score.red .control-odds{text-align:right}.control-odds:hover{text-decoration:underline}.control-odds b{color:var(--dem);font-weight:600}.side-score.red .control-odds b{color:var(--rep)}.control-updated{display:block;font-size:17px;color:var(--dim);margin-top:9px}
:root,html.dark{--dem-tending:var(--dem);--rep-tending:var(--rep)}.geo-feature.called{stroke:var(--bg);stroke-width:1.6}.swatch,.national-legend i{text-align:center;line-height:1;font-style:normal;font-size:12px;color:var(--on-ink)}#seat-bar i{text-align:center;font-style:normal;font-size:11px;line-height:13px;color:var(--on-ink)}.status-buttons .selected.blue,.status-buttons .selected.called.blue{background:var(--dem);color:var(--on-ink)}.status-buttons .selected.red,.status-buttons .selected.called.red{background:var(--rep);color:var(--on-ink)}#uncall-all{font-size:18px;padding:10px 14px;white-space:nowrap}
