:root{--dem:#1f6fd6;--dem-soft:#dbe8fb;--rep:#d64b4b;--rep-soft:#f8dcdc;--tossup:#8a63b8;--ink:#1a1a1a;--muted:#6b7280;--line:#e5e7eb;--bg:#fbfcfc;--panel:#fafafa;--maxw:1000px}*{box-sizing:border-box}body,html{margin:0;padding:0;color:var(--ink);background:var(--bg);font-family:-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica,Arial,sans-serif;line-height:1.5}a{color:var(--dem)}.container{max-width:var(--maxw);margin:0 auto;padding:24px 20px 64px}.site-header{border-bottom:2px solid var(--ink)}.site-header .container{padding-top:20px;padding-bottom:16px;display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap}.site-title{margin:0;line-height:0}.site-logo{display:block;height:42px;width:auto}@media (max-width:520px){.site-logo{height:34px}}.site-nav a{margin-left:16px;font-weight:600;text-decoration:none;color:var(--muted)}.headline{font-size:clamp(1.5rem,3vw,2.2rem);font-weight:800;letter-spacing:-.02em;margin:8px 0 4px}.subhead{color:var(--muted);margin:0 0 24px}.control-summary{font-size:1.15rem;font-weight:600;margin:4px 0 6px;color:var(--ink)}.hist-tip{position:fixed;z-index:60;pointer-events:none;background:#fff;border:1px solid var(--line);border-radius:8px;box-shadow:0 6px 18px rgba(0,0,0,.12);padding:8px 11px;font-size:.85rem;max-width:240px}.hist-tip-split{font-weight:800;font-size:1rem;letter-spacing:-.01em}.hist-tip-ctrl{font-weight:600;font-size:.8rem;margin-top:1px}.hist-tip-pct{margin-top:4px}.hist-tip-count{color:var(--muted);font-size:.78rem;margin-top:1px}.panel{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:20px;margin-bottom:24px}.grid-2{display:grid;grid-template-columns:1fr 1fr;grid-gap:20px;gap:20px}@media (max-width:720px){.grid-2{grid-template-columns:1fr}}.stat-big{font-size:2.6rem;font-weight:800;line-height:1}.stat-label{color:#374151;font-size:.9rem;font-weight:700;text-transform:uppercase;letter-spacing:.04em}.nat-env{display:grid;grid-template-columns:max-content auto;grid-gap:8px 18px;gap:8px 18px;align-items:baseline;margin-top:12px}.nat-env-label{color:var(--muted)}.control-bar,.nat-env-value{font-weight:700}.control-bar{display:flex;height:34px;border-radius:6px;overflow:hidden;margin:12px 0 6px;font-size:.85rem;color:#fff}.control-bar .d{background:var(--dem)}.control-bar .d,.control-bar .r{display:flex;align-items:center;padding:0 10px}.control-bar .r{background:var(--rep);justify-content:flex-end}table.races{width:100%;border-collapse:collapse;font-size:.94rem}table.races td,table.races th{text-align:left;padding:9px 10px;border-bottom:1px solid var(--line)}table.races th{font-size:.78rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}table.races td.num{text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.rating-pill{display:inline-block;padding:2px 8px;border-radius:999px;font-size:.78rem;font-weight:700;white-space:nowrap}.pill-D{background:var(--dem-soft);color:#12508f}.pill-R{background:var(--rep-soft);color:#9a2f2f}.pill-T{background:#ece3f6;color:#5b3d86}.bar-track{position:relative;height:8px;background:#eee;border-radius:999px;overflow:hidden}.bar-fill{position:absolute;top:0;bottom:0;left:0}table.races td.expander-cell,table.races th.expander-col{width:30px;padding-right:0}table.races tr.race-row{cursor:pointer}table.races tr.race-row:hover{background:#f3f5f8}.race-expander{display:inline-flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:0;background:transparent;color:#6b7280;cursor:pointer;border-radius:4px}.race-expander:hover{background:rgba(0,0,0,.06);color:#111}.chevron{display:inline-block;font-size:1.15rem;line-height:1;transition:transform .15s ease}.chevron.open{transform:rotate(90deg)}table.races tr.race-detail-row>td{padding:0;background:#fafbfc}.race-detail-panel{padding:18px 14px 20px}.candidate-row{display:flex;align-items:flex-start;justify-content:center;gap:28px}.candidate{display:flex;flex-direction:column;align-items:center;width:150px;text-align:center}.cand-photo{position:relative;width:78px;height:78px;border-radius:50%;border:3px solid #ccc;background:#fff;padding:2px;box-sizing:border-box}.cand-photo img{width:100%;height:100%;border-radius:50%;object-fit:cover;display:block}.cand-d{border-color:var(--dem)}.cand-r{border-color:var(--rep)}.cand-i{border-color:#7a7f8a}.cand-placeholder{width:100%;height:100%;border-radius:50%;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:1.6rem;color:#4b5563;background:#eef1f5}.cand-d .cand-placeholder{color:#12508f;background:var(--dem-soft)}.cand-r .cand-placeholder{color:#9a2f2f;background:var(--rep-soft)}.cand-incumbent{position:absolute;bottom:-2px;right:-2px;width:18px;height:18px;font-size:.72rem;color:#d4a017;background:#fff;border-radius:50%;display:flex;align-items:center;justify-content:center;box-shadow:0 0 0 1px var(--line)}.cand-name{margin-top:8px;font-weight:700;font-size:.9rem;line-height:1.2}.cand-prob{margin-top:2px;font-size:.82rem;color:var(--muted)}.candidate-favored .cand-prob{color:#111;font-weight:700}.candidate-vs{align-self:center;margin-top:28px;font-size:.78rem;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}.race-badges{display:flex;flex-wrap:wrap;gap:6px;justify-content:center;margin-top:14px}.race-badge{font-size:.72rem;font-weight:600;text-transform:uppercase;letter-spacing:.03em;color:#475569;background:#eef1f5;border:1px solid var(--line);border-radius:999px;padding:2px 9px}.race-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));grid-gap:10px 18px;gap:10px 18px;margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}.fact{display:flex;flex-direction:column;gap:2px}.fact-label{font-size:.72rem;text-transform:uppercase;letter-spacing:.03em;color:var(--muted)}.fact-value{font-size:.95rem;font-weight:600;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.detail-polls{margin-top:16px;padding-top:14px;border-top:1px solid var(--line)}.detail-polls-title{font-size:.72rem;text-transform:uppercase;letter-spacing:.03em;color:var(--muted);margin-bottom:6px}table.mini-polls{width:100%;border-collapse:collapse;font-size:.86rem}table.mini-polls td{padding:4px 8px 4px 0;border-bottom:1px solid var(--line);text-align:left}table.mini-polls td.mp-share{width:52px;text-align:right;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.mp-pollster{font-weight:600}.mp-date{white-space:nowrap}.detail-nopolls{margin-top:14px;padding-top:12px;border-top:1px solid var(--line)}.poll-tooltip{position:fixed;top:0;left:0;z-index:60;pointer-events:none;width:264px;background:#fff;border:1px solid #e4e4e4;border-radius:10px;box-shadow:0 10px 30px rgba(0,0,0,.18);padding:10px 12px;font-size:.82rem;color:#222}.poll-tooltip-title{font-weight:700;font-size:.92rem}.poll-tooltip-sub{font-size:.72rem;margin-bottom:8px}.poll-tooltip-empty,.poll-tooltip-sub{color:var(--muted)}.poll-tooltip-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:9px}.pt-line{display:flex;justify-content:space-between;gap:8px;align-items:baseline}.pt-pollster{font-weight:600}.pt-weight{font-weight:700;color:var(--tossup)}.pt-meta{color:var(--muted);font-size:.72rem;margin-top:1px}.pt-result{white-space:nowrap;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.pt-bar{height:4px;background:#eee;border-radius:999px;margin-top:4px;overflow:hidden}.pt-bar-fill{height:100%;background:var(--tossup);border-radius:999px}.footer,.muted{color:var(--muted)}.footer{border-top:1px solid var(--line);margin-top:40px;padding-top:16px;font-size:.85rem}.loading{padding:60px 0;text-align:center;color:var(--muted)}.prose p{margin:0 0 14px}.prose h2{margin-top:28px}.prose li{margin-bottom:6px}.map-legend-item{display:inline-flex;align-items:center;gap:5px;font-size:.8rem;color:var(--ink)}.map-swatch{width:12px;height:12px;border-radius:2px;display:inline-block}