@import url('/fonts/fonts.css');
:root{--bg:#10191d;--panel:#172227;--panel2:#1c292f;--line:#2c3b41;--text:#f1eee5;--muted:#a3b0b5;--orange:#f47751;--blue:#69a8dc;--red:#df7775;--other:#c6b878;--uncalled:#39494f;--green:#99cba7;font-family:'DM Sans',system-ui,sans-serif;color:var(--text);background:var(--bg);font-synthesis:none;color-scheme:dark}*{box-sizing:border-box}body{margin:0}button,input,select{font:inherit}button,a,input,select{touch-action:manipulation}button,a{ -webkit-tap-highlight-color:transparent}button{cursor:pointer}a{color:inherit;text-decoration:none}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,path:focus-visible{outline:2px solid var(--orange);outline-offset:4px}button:disabled{opacity:.45;cursor:wait}.masthead{height:94px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line);padding:0 40px;gap:20px}.brand{display:flex;align-items:center;gap:13px;font-size:17px;letter-spacing:1.7px;font-weight:700}.monogram{display:grid;place-items:center;width:42px;height:45px;background:var(--orange);color:#10191d;font:bold 37px Georgia,serif}.brand small{display:block;margin-top:4px;font-size:9px;letter-spacing:3.5px;font-weight:500;color:var(--muted)}.header-center,.header-right{display:flex;align-items:center;gap:20px}.edition{font-size:10px;letter-spacing:2px;color:var(--muted)}.badge{padding:6px 10px;border:1px solid var(--line);border-radius:3px;font-size:10px;font-weight:700;letter-spacing:1px;display:inline-block}.amber{color:#e8bd7b;background:#302a21;border-color:#6c5330}.green{color:var(--green);background:#23382b;border-color:#43604b}.blue-text{color:var(--blue)}.red-text{color:var(--red)}.orange-text{color:var(--orange)}#clock{font-variant-numeric:tabular-nums;font-size:18px}.timezone{font-size:10px;color:var(--muted);margin-left:-12px}.icon-button{background:none;border:0;color:var(--text);font-size:24px;padding:6px 9px}.notice{padding:10px 40px;background:#3c3020;color:#f5cb8d;font-size:12px;border-bottom:1px solid #695335}.notice.danger{background:#462626;color:#ffb3a8}main{max-width:1740px;margin:auto;padding:34px 40px 0}.page-heading{display:flex;justify-content:space-between;align-items:center;margin-bottom:30px;gap:20px}.eyebrow{font-size:10px;letter-spacing:2px;font-weight:600;color:var(--orange);margin:0 0 10px}h1{font-family:'Libre Caslon Display',Georgia,serif;font-weight:400;font-size:49px;line-height:1.04;letter-spacing:-1px;margin:0 0 10px}h2{font-family:'Libre Caslon Display',Georgia,serif;font-size:27px;font-weight:400;line-height:1.1;margin:0}h3{font-size:16px;font-weight:600;margin:0 0 12px}.subtitle{color:var(--muted);font-size:13px;margin:0}.heading-actions{display:flex;gap:10px}.button{display:inline-flex;align-items:center;justify-content:center;gap:16px;padding:12px 17px;border-radius:4px;border:1px solid var(--line);font-size:12px;font-weight:600;transition:background .15s}.button.primary{background:var(--orange);color:#162026;border-color:var(--orange)}.button.primary:hover{background:#ff916e}.button.secondary{background:transparent;color:var(--text)}.button.secondary:hover{background:#2b3a41}.button.small{padding:7px 11px;font-size:11px}.button.danger{color:#ffb5ac;border-color:#905850;background:#3b2526}.toolbar{display:flex;justify-content:space-between;border-bottom:1px solid var(--line);gap:15px;align-items:center}.office-tabs{display:flex;gap:26px}.office-tabs button{border:0;border-bottom:2px solid transparent;padding:13px 0 15px;background:none;color:var(--muted);font-size:14px;white-space:nowrap}.office-tabs button.active{border-color:var(--orange);color:var(--text)}.toolbar-status{display:flex;align-items:center;gap:9px;font-size:11px;color:var(--muted)}.status-dot{width:6px;height:6px;border-radius:50%;background:var(--green)}.status-dot.error{background:var(--red)}.scoreboard{display:flex;align-items:center;gap:44px;padding:26px 0 30px}.score{display:grid;grid-template-columns:auto auto;column-gap:16px;min-width:175px}.score .party-name{grid-column:1/-1;font-size:10px;letter-spacing:1.5px;font-weight:700}.score strong{font-weight:500;font-size:48px;line-height:1.25;font-variant-numeric:tabular-nums}.score>span:last-child{font-size:10px;align-self:center;max-width:50px;color:var(--muted);line-height:1.5}.blue{color:var(--blue)}.red{color:var(--red)}.score.red{text-align:right;direction:rtl}.score.red .party-name{direction:ltr}.score-middle{flex:1;text-align:center}.score-middle>div:first-child{display:flex;justify-content:space-between;font-size:11px;color:var(--muted);margin-bottom:12px}.seat-bar{height:7px;display:flex;gap:2px;overflow:hidden;border-radius:2px;background:var(--uncalled)}.seat-bar span{height:100%}#count-caption{color:var(--muted);font-size:10px;margin:10px 0 0}.workspace{display:grid;grid-template-columns:minmax(0,1fr) 336px;gap:18px;align-items:stretch}.panel{border:1px solid var(--line);border-radius:7px;background:var(--panel);overflow:hidden}.panel-heading{display:flex;justify-content:space-between;align-items:center;padding:23px 24px 12px;gap:16px}.panel-heading p:not(.eyebrow){font-size:11px;color:var(--muted);margin:7px 0 0}.tiny-label{font-size:9px;letter-spacing:1.4px;color:var(--muted);white-space:nowrap}.map{padding:4px 22px;min-height:360px;display:flex;align-items:center;justify-content:center}.map svg{display:block;width:100%;max-height:490px;height:auto}.state-shape{stroke:#172227;stroke-width:1.5;cursor:pointer;transition:fill .2s}.state-shape:hover,.state-shape.selected{stroke:#ffccad;stroke-width:2.8;filter:brightness(1.13)}.state-label{font-size:12px;fill:#dce4e7;pointer-events:none;text-anchor:middle;dominant-baseline:middle;font-weight:600;paint-order:stroke;stroke:#172227;stroke-width:2px}.map-footer{display:flex;justify-content:space-between;align-items:center;gap:16px;border-top:1px solid var(--line);padding:16px 22px}.legend{display:flex;gap:15px;flex-wrap:wrap;font-size:10px;color:var(--muted)}.legend span{display:flex;align-items:center;gap:6px}.swatch{display:inline-block;width:8px;height:8px;border-radius:1px}.swatch.blue{background:var(--blue)}.swatch.red{background:var(--red)}.swatch.other{background:var(--other)}.swatch.uncalled{background:var(--uncalled)}.swatch.no-race{background:#222e33;border:1px solid #44535a}.muted{color:var(--muted);font-size:11px;line-height:1.7}.detail{padding:25px;min-height:475px}.detail h2{font-size:32px;margin-top:11px}.detail .district-label{font-size:11px;color:var(--muted);margin:8px 0 18px}.detail-meta{display:flex;gap:8px;flex-wrap:wrap}.candidate{margin:23px 0}.candidate-top{display:flex;justify-content:space-between;gap:12px;font-size:13px;align-items:center}.candidate-top strong{font-size:20px;font-weight:500;white-space:nowrap}.candidate-name{font-weight:600;line-height:1.4}.candidate-sub{font-size:10px;color:var(--muted);margin:5px 0 8px;display:flex;justify-content:space-between;gap:8px}.candidate-bar{height:4px;background:var(--line);border-radius:2px;overflow:hidden}.candidate-bar span{display:block;height:100%}.reporting{display:flex;justify-content:space-between;padding:15px 0;border-top:1px solid var(--line);font-size:11px;color:var(--muted)}.call-note{font-size:12px;line-height:1.6;padding:12px;border-left:2px solid var(--orange);background:#233037;margin:10px 0 18px}.detail-actions{display:grid;gap:9px}.detail-actions .row{display:flex;gap:8px}.detail-actions .row>*{flex:1}.detail details{margin-top:17px;border-top:1px solid var(--line);padding-top:13px}.detail summary{font-size:11px;cursor:pointer;color:var(--muted)}.field{display:grid;gap:7px;font-size:11px;margin:14px 0;color:var(--muted)}input,select{width:100%;min-width:0;background:#101b20;border:1px solid #3c4b52;padding:10px 11px;border-radius:4px;color:var(--text);font-size:12px}input::placeholder{color:#829299}.field input{font-variant-numeric:tabular-nums}.race-heading{padding-bottom:20px}.races-panel{margin-top:22px}.list-controls{display:flex;gap:14px;align-items:center}.list-controls input{width:280px}.segmented{display:flex;border:1px solid var(--line);border-radius:4px;padding:3px}.segmented button{background:transparent;color:var(--muted);border:0;padding:7px 10px;font-size:11px;border-radius:3px;white-space:nowrap}.segmented button.active{background:#344149;color:var(--text)}.count-pill{display:inline-block;font:11px 'DM Sans',sans-serif;border:1px solid var(--line);padding:4px 7px;border-radius:12px;vertical-align:middle;margin-left:6px;color:var(--muted)}table{width:100%;border-collapse:collapse;text-align:left;font-size:12px}thead{position:sticky;top:0;background:#1c292f;z-index:1}th{padding:12px 24px;font-size:9px;letter-spacing:1.2px;color:var(--muted);font-weight:500}td{padding:14px 24px;border-top:1px solid var(--line)}tr.selected td{background:#26363d}tbody tr:hover td{background:#223139}td .state-code{font-size:10px;color:var(--muted);margin-right:10px}td .leader{display:flex;align-items:center;gap:8px}.race-scroll{max-height:355px;overflow:auto}.table-foot{font-size:10px;color:var(--muted);padding:13px 24px;border-top:1px solid var(--line)}.status-label{font-size:10px;color:var(--muted);display:inline-flex;align-items:center;gap:5px}.status-label.review{color:#e7bb7d}.status-label.approved{color:var(--green)}.audit-panel{margin-top:22px}.audit-list{padding:2px 24px 12px;max-height:220px;overflow:auto}.audit-row{display:flex;align-items:center;gap:15px;padding:12px 0;border-bottom:1px solid var(--line);font-size:11px}.audit-row:last-child{border:0}.audit-row time{color:var(--muted);min-width:65px}.audit-row .audit-content{flex:1}.audit-content small{display:block;margin-top:4px;color:var(--muted)}.empty{text-align:center;padding:50px 20px;font-size:13px;color:var(--muted);line-height:1.8;width:100%}.house-map{display:grid;grid-template-columns:repeat(7,1fr);gap:13px;width:100%;padding:15px 0 25px;align-items:start}.state-block h3{font-size:10px;letter-spacing:1px;color:var(--muted);margin:0 0 6px;display:flex;justify-content:space-between}.state-block h3 small{font-size:8px;font-weight:400}.district-tiles{display:grid;grid-template-columns:repeat(6,1fr);gap:3px}.district-tile{border:0;aspect-ratio:1;background:var(--uncalled);color:var(--bg);font-size:8px;min-width:0;padding:0;border-radius:1px;font-weight:700}.district-tile.selected{outline:2px solid var(--orange);outline-offset:1px}.district-tile:hover{filter:brightness(1.3)}footer{display:flex;justify-content:space-between;gap:15px;padding:28px 0;font-size:9px;color:var(--muted);letter-spacing:.5px}.footer-divider{margin:0 12px;color:#576a73}.toast{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);z-index:100;background:#f1eee5;color:#152026;padding:14px 24px;border-radius:6px;box-shadow:0 6px 30px #0006;max-width:80vw;font-size:13px}.toast.error{background:#ffd0c6}dialog{border:1px solid #42535b;border-radius:10px;background:var(--panel);color:var(--text);padding:30px;width:min(540px,calc(100vw - 30px));max-height:90vh;box-shadow:0 25px 120px #0008}dialog::backdrop{background:#060e13bf;backdrop-filter:blur(4px)}dialog h2{font-size:33px;margin:8px 0 20px}dialog p{font-size:12px;color:var(--muted);line-height:1.7}.dialog-actions{display:flex;justify-content:flex-end;gap:10px;margin-top:24px}.dialog-heading{display:flex;justify-content:space-between}.dialog-heading h2{margin-bottom:0}.settings-section{border-bottom:1px solid var(--line);padding:24px 0}.settings-actions{display:flex;gap:10px}.preview-box{padding:14px;background:#213039;border:1px solid var(--line);border-radius:5px;font-size:13px;line-height:1.8}.preview-box table{font-size:11px}.preview-box td{padding:7px}#sync-result{margin-top:12px;white-space:pre-line}.login{max-width:460px;margin:12vh auto}.login .monogram{margin-bottom:30px}.hidden{display:none!important}.broadcast main{padding-top:30px}.broadcast .page-heading{margin-bottom:20px}.broadcast h1{font-size:54px}.broadcast .workspace{grid-template-columns:minmax(0,1fr) 340px}.broadcast .map{min-height:430px}.broadcast .map svg{max-height:540px}.broadcast .scoreboard{padding:25px 0}.broadcast .score strong{font-size:62px}.broadcast .score{min-width:200px}.broadcast .map-panel{border:0;background:transparent}.broadcast .map-panel .panel-heading{padding-left:0}.broadcast .map-footer{padding-left:0}.broadcast .detail{background:#1c292f;border:0}.broadcast .candidate-top strong{font-size:27px}.broadcast .candidate-name{font-size:16px}.broadcast .office-tabs button{font-size:17px}.broadcast-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:20px}.broadcast-card{border-top:2px solid var(--line);padding:15px 0;font-size:13px}.broadcast-card strong{display:block;font-family:'Libre Caslon Display',Georgia,serif;font-size:24px;font-weight:400;margin:8px 0}.broadcast-card small{color:var(--muted)}.broadcast .house-map{grid-template-columns:repeat(10,1fr)}.broadcast .map{padding:0}.broadcast .house-map .district-tile{font-size:8px}.broadcast .notice{font-size:13px}.broadcast footer{padding-top:15px}@media(min-width:1700px){.map svg{max-height:540px}.map{min-height:450px}.house-map{grid-template-columns:repeat(10,1fr)}}@media(max-width:1100px){main{padding:25px 22px 0}.masthead{padding:0 22px}.workspace,.broadcast .workspace{grid-template-columns:minmax(0,1fr) 300px}.detail{padding:20px}.list-controls{flex-direction:column;align-items:stretch;gap:8px}.list-controls input{width:100%}.legend{gap:9px}.scoreboard{gap:25px}.house-map{grid-template-columns:repeat(5,1fr)}.header-center .edition{display:none}.broadcast .house-map{grid-template-columns:repeat(7,1fr)}.map{min-height:310px}}@media(max-width:760px){.masthead{height:76px;padding:0 18px}.brand{font-size:12px;letter-spacing:1px}.brand small{font-size:7px}.monogram{width:32px;height:37px;font-size:29px}.header-center{margin-left:auto}.header-right{gap:4px}#clock,.timezone{display:none}main{padding:25px 16px 0}.page-heading{align-items:start;flex-direction:column;gap:20px}h1{font-size:40px}.workspace,.broadcast .workspace{grid-template-columns:1fr}.toolbar{flex-wrap:wrap;gap:8px}.toolbar-status{padding:9px 0;width:100%}.scoreboard{gap:15px}.score{min-width:90px;display:block}.score strong{display:block;font-size:40px}.score>span:last-child{display:none}.score .party-name{font-size:9px}.score-middle{min-width:100px}.score-middle>div:first-child{display:block;font-size:10px}.score-middle>div:first-child span{display:block;margin:4px}.score.red{text-align:right}.panel-heading{padding:20px 18px 10px}.map{padding:5px 10px;min-height:260px}.map-footer{padding:15px}.map-total{display:none}.detail{min-height:0}.race-heading{display:block}.list-controls{margin:16px 0 5px}.segmented button{flex:1}td,th{padding:12px 13px}th:nth-child(3),td:nth-child(3){display:none}td .state-code{display:none}.race-scroll{max-height:400px}.audit-list{padding:2px 16px 12px}.audit-row{gap:8px}.audit-row time{min-width:53px;font-size:9px}.house-map{grid-template-columns:repeat(5,1fr)}footer{flex-wrap:wrap;font-size:8px}.broadcast .score{min-width:90px}.broadcast .score strong{font-size:42px}.broadcast .map{min-height:270px}.broadcast .house-map{grid-template-columns:repeat(5,1fr)}.broadcast-cards{grid-template-columns:1fr}.tiny-label{font-size:8px}.notice{padding:10px 16px}}
/* A broadcast is a single frame: size the map to the available screen height. */
@media(min-width:900px){
 .broadcast{height:100svh;display:flex;flex-direction:column;overflow:hidden}
 .broadcast .masthead{height:70px;flex:0 0 70px}
 .broadcast .notice{flex:none;padding-top:8px;padding-bottom:8px;font-size:11px}
 .broadcast main{display:flex;flex-direction:column;flex:1;min-height:0;width:100%;padding-top:20px}
 .broadcast .page-heading{flex:none;margin-bottom:12px}
 .broadcast .page-heading .eyebrow{margin-bottom:6px}
 .broadcast h1{font-size:42px;margin-bottom:6px}
 .broadcast .subtitle{font-size:12px}
 .broadcast .toolbar{flex:none}
 .broadcast .office-tabs button{font-size:15px;padding:10px 0 12px}
 .broadcast .scoreboard{flex:none;padding:16px 0 20px}
 .broadcast .score strong{font-size:48px}
 .broadcast .workspace{flex:1;min-height:0;grid-template-columns:minmax(0,1fr) 330px}
 .broadcast .map-panel{display:flex;flex-direction:column;min-height:0}
 .broadcast .map-panel .panel-heading{padding-top:10px;flex:none}
 .broadcast .map{flex:1;min-height:0;overflow:auto}
 .broadcast .map svg{height:100%;width:100%;max-height:none;flex:1}
 .broadcast .map-footer{flex:none;padding-top:10px;padding-bottom:10px}
 .broadcast .detail{min-height:0;overflow:auto;padding:22px}
 .broadcast .detail .candidate{margin:20px 0}
 .broadcast .detail .candidate-name{font-size:14px}
 .broadcast .detail .candidate-top strong{font-size:24px}
 .broadcast .broadcast-cards{flex:none;margin-top:12px}
 .broadcast .broadcast-card{padding:9px 0}
 .broadcast .broadcast-card .eyebrow{font-size:9px}
 .broadcast .broadcast-card strong{font-size:21px;margin:5px 0}
 .broadcast footer{flex:none;padding:10px 0 14px}
 .broadcast .house-map{grid-template-columns:repeat(10,1fr);padding:7px 0;gap:10px}
 .broadcast .house-map .district-tiles{grid-template-columns:repeat(6,minmax(0,1fr))}
 .broadcast .house-map .district-tile{max-height:15px;aspect-ratio:auto;height:12px;font-size:7px}
}
@media(min-width:900px) and (max-height:800px){
 .broadcast .page-heading{display:none}.broadcast .masthead{height:58px;flex-basis:58px}
 .broadcast .broadcast-cards{display:none}.broadcast .scoreboard{padding:10px 0}
 .broadcast .detail .candidate{margin:14px 0}.broadcast .detail h2{font-size:28px}
}

/* Draw selection above every state, so neighboring fills cannot cover its border. */
.state-shape { stroke-linejoin: round; stroke-linecap: round; }
.state-shape:hover, .state-shape.selected { stroke: #172227; stroke-width: 1.5; filter: none; }
.state-shape:hover { filter: brightness(1.08); }
.state-selection-outline { fill: none; stroke: #ffccad; stroke-width: 2.4; stroke-linejoin: round; stroke-linecap: round; pointer-events: none; }
.state-connector { fill: none; stroke: #78838c; stroke-width: 1; pointer-events: none; }
.state-connector.selected { stroke: #fff; stroke-width: 1.5; }
.state-callout { cursor: pointer; outline: none; }
.state-callout rect { stroke: #929ba5; stroke-width: 1; }
.state-callout text { fill: #fff; font-size: 25px; font-weight: 700; text-anchor: middle; dominant-baseline: middle; pointer-events: none; }
.state-callout:hover rect, .state-callout:focus-visible rect, .state-callout.selected rect { stroke: #fff; stroke-width: 2.4; }
.state-callout.unavailable { cursor: default; }
.state-callout.unavailable rect { stroke: #424850; stroke-width: 1; }
.state-callout.unavailable text { fill: #929ba5; }
.state-shape:focus, .state-shape:focus-visible { outline: none; }
.state-keyboard-outline { display: none; fill: none; stroke: #fff; stroke-width: 2; stroke-dasharray: 5 3; stroke-linejoin: round; pointer-events: none; }
svg:has(.state-shape:focus-visible) .state-keyboard-outline { display: block; }
.state-label-leader { fill: none; stroke: #bec2c9; stroke-width: 1; pointer-events: none; }

/* Full Senate balance: striped seats are not up in this election. */
.senate-balance .seat-bar { gap: 0; }
.senate-balance .seat-bar > span { flex-shrink: 0; }
.senate-balance .score.red > span:last-child { direction: ltr; }
.seats-not-up { background-image: repeating-linear-gradient(135deg, #1119 0px, #1119 4px, #1114 4px, #1114 8px); }
.senate-balance #count-caption { display: flex; justify-content: center; align-items: center; gap: 16px; }
.seat-key { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.seat-key i { display: inline-block; width: 14px; height: 10px; background-color: #a7b1c0; }

.brand-logo{display:block;width:auto;height:40px;max-height:40px;max-width:100%;object-fit:contain}.brand:has(.brand-logo){min-width:0}

.source-brand{display:inline-flex;align-items:center;gap:10px;vertical-align:middle;max-width:100%}
.call-source-logo{display:block;width:auto;height:28px;max-width:180px;object-fit:contain;object-position:left center;flex-shrink:0}
.source-brand-name{display:none}
.source-brand-icon .source-brand-name,.source-brand.logo-missing .source-brand-name{display:inline}
.source-brand.logo-missing .call-source-logo{display:none}

.badge.flip-badge{color:#f5d483;background:#342d1c;border-color:#6d5a2b;white-space:nowrap}
