.election-map{--map-text:#163152;--map-muted:#617a98;--map-border:#d8e3ec;--map-surface:#f4f8fb;color:var(--map-text)}
.election-map--dark{--map-text:#e7f4ff;--map-muted:#95b2ca;--map-border:rgba(153,201,236,.17);--map-surface:rgba(7,26,43,.44)}
.map-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:10px}
.map-region-list,.map-mode{display:flex;gap:5px;flex-wrap:wrap}
.map-region-list button,.map-mode button{border:1px solid var(--map-border);border-radius:8px;background:var(--map-surface);color:var(--map-muted);padding:7px 10px;font:700 11px/1.2 inherit;cursor:pointer;transition:background .2s,border-color .2s,transform .2s}
.map-region-list button:hover,.map-mode button:hover{transform:translateY(-2px);border-color:#55b9e5}
.map-region-list button[aria-pressed="true"],.map-mode button[aria-pressed="true"]{background:#0b5c9c;border-color:#2e9ddb;color:white;box-shadow:0 5px 16px rgba(12,111,184,.22)}
.map-layout{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(250px,.85fr);gap:13px;min-height:0}
.map-canvas{display:flex;flex-direction:column;align-items:center;justify-content:center;min-width:0;min-height:0;border:1px solid var(--map-border);border-radius:16px;background:radial-gradient(circle at 48% 42%,rgba(45,151,208,.12),transparent 60%),var(--map-surface);overflow:hidden}
.map-canvas svg{width:100%;height:min(52vh,510px);min-height:270px;filter:drop-shadow(0 9px 15px rgba(0,0,0,.11))}
.map-state,.map-city{fill:var(--state-color);stroke:#ecf4fa;stroke-width:1.7;vector-effect:non-scaling-stroke;cursor:pointer;transition:fill .2s,opacity .2s,filter .2s;opacity:.95}
.election-map--dark .map-state,.election-map--dark .map-city{stroke:#0c2338}
.map-state:hover,.map-state:focus-visible,.map-state.is-active,.map-city:hover,.map-city:focus-visible,.map-city.is-active{opacity:1;filter:brightness(1.35) drop-shadow(0 0 5px rgba(255,255,255,.65));stroke:#fff;stroke-width:2.5;outline:none}
.map-state.is-dim{opacity:.2}
.map-city.is-unavailable{opacity:.5}
.map-toolbar--municipal{align-items:end}
.map-municipal-summary{display:flex;flex-direction:column;gap:4px}.map-municipal-summary strong{font-size:11px;letter-spacing:.1em;color:var(--map-text)}.map-municipal-summary span{font-size:11px;color:var(--map-muted)}
.map-city-picker{display:flex;flex-direction:column;gap:5px;min-width:220px;color:var(--map-muted);font-size:10px;font-weight:800;text-transform:uppercase;letter-spacing:.08em}.map-city-picker select{width:100%;max-width:285px;padding:8px 10px;border:1px solid var(--map-border);border-radius:8px;background:var(--map-surface);color:var(--map-text);font:600 12px "Segoe UI",Arial,sans-serif;text-transform:none;letter-spacing:normal}
.election-map--dark .map-city-picker option{background:#102d45;color:#edf6fc}
.map-legend{display:flex;justify-content:center;flex-wrap:wrap;gap:7px 15px;padding:5px 12px 12px;font-size:10px;font-weight:700;color:var(--map-muted)}
.map-legend span{display:flex;align-items:center;gap:5px;white-space:nowrap}.map-legend i,.map-swatch{width:9px;height:9px;border-radius:50%;background:var(--candidate-color);flex:none}
.map-legend .map-tie-swatch{background:repeating-linear-gradient(45deg,#dce8f3 0 3px,#47617b 3px 6px)}
.map-legend .map-legend-duel{background:linear-gradient(90deg,#8399ad 0 50%,#c8d7e3 50% 100%)}
.map-detail{min-width:0;min-height:0;padding:18px;border:1px solid var(--map-border);border-radius:16px;background:var(--map-surface)}
.map-detail-kicker{font-size:10px;font-weight:800;color:#38a8ce;letter-spacing:.13em}
.map-detail h3{margin:5px 0 8px;font-size:clamp(20px,2.4vw,30px);letter-spacing:-.035em;line-height:1.08}
.map-detail>p{margin:0 0 14px;color:var(--map-muted);font-size:12px;line-height:1.45}
.map-result-list{display:grid;gap:2px}
.map-result-row{display:grid;grid-template-columns:20px 10px minmax(0,1fr) auto;grid-template-rows:auto auto;gap:2px 7px;align-items:center;padding:8px 0;border-top:1px solid var(--map-border);font-size:11px}
.map-result-row .map-rank{grid-row:1/3;color:var(--map-muted);font-weight:800}.map-result-row .map-swatch{grid-row:1/3}.map-result-row div{grid-row:1/3;min-width:0}.map-result-row strong,.map-result-row small{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.map-result-row strong{font-size:11px}.map-result-row small{font-size:10px;color:var(--map-muted)}.map-result-row b{text-align:right;font-size:13px}.map-result-row em{grid-column:4;text-align:right;color:var(--map-muted);font-size:10px;font-style:normal}
.map-region-overview>div{display:flex;justify-content:space-between;gap:10px;padding:9px 0;border-top:1px solid var(--map-border);font-size:11px}.map-region-overview span{color:var(--map-muted);text-align:right}
.election-map--governor .map-detail{max-height:560px;overflow:auto}.map-governor-overview>button{display:flex;justify-content:space-between;gap:10px;width:100%;padding:9px 0;border:0;border-top:1px solid var(--map-border);background:transparent;color:var(--map-text);font:700 11px/1.3 inherit;text-align:left;cursor:pointer}.map-governor-overview>button:hover{color:#1785bb}.map-governor-overview .map-governor-overview-main{min-width:0;text-align:left}.map-governor-overview .map-governor-overview-main strong,.map-governor-overview .map-governor-overview-main small{display:block}.map-governor-overview .map-governor-overview-main small{margin-top:3px;color:var(--map-muted);font-size:10px;font-weight:500}.map-governor-overview em{flex:none;color:var(--map-muted);font-size:10px;font-style:normal;font-weight:500;text-align:right}
.map-open-state{margin-top:12px;width:100%;border:1px solid #48aee1;border-radius:9px;background:rgba(21,137,206,.13);color:var(--map-text);padding:10px;font-weight:800;cursor:pointer}
.map-method{color:var(--map-muted);font-size:11px;line-height:1.4;margin:10px 2px 0}.map-await{color:var(--map-muted);font-size:13px;padding:22px}
@media(max-width:720px){.map-layout{grid-template-columns:1fr}.map-canvas svg{height:350px;min-height:0}.map-detail{padding:13px}.map-region-list{flex-wrap:nowrap;overflow-x:auto;width:100%;scrollbar-width:none}.map-region-list button{flex:none}}
@media(max-width:720px){.map-city-picker{width:100%}.map-city-picker select{max-width:none}}
@media(prefers-reduced-motion:reduce){.map-state,.map-city,.map-region-list button,.map-mode button{transition:none}}
.presidential-map-card{margin-top:14px;padding:21px 24px}.map-card-head{display:flex;justify-content:space-between;gap:14px;align-items:flex-start;margin-bottom:18px}.map-card-kicker{font-size:10px;font-weight:900;letter-spacing:.16em;color:#0a79b2}.map-card-head h2{font-size:23px;margin:4px 0}.map-card-head p{color:#657f99;font-size:12px;margin:0}.map-card-head>span{padding:8px 11px;border-radius:8px;background:#e5f3fa;color:#086298;font-size:10px;font-weight:900;letter-spacing:.1em;white-space:nowrap}
.map-head-actions{display:flex;align-items:center;gap:7px;flex:none}.map-head-actions>span{padding:8px 11px;border-radius:8px;background:#e5f3fa;color:#086298;font-size:10px;font-weight:900;letter-spacing:.1em;white-space:nowrap}.map-head-actions>button{padding:8px 11px;border:1px solid #9bcce4;border-radius:8px;background:#e5f3fa;color:#086298;font:800 11px/1.2 inherit;white-space:nowrap;cursor:pointer}.map-head-actions>button:hover{background:#cae8f7}
.map-dialog-actions{display:flex;align-items:center;gap:7px}
.election-outcome[hidden]{display:none}.election-outcome{display:flex;align-items:center;gap:11px;padding:12px 16px;margin-bottom:14px;border-radius:10px;background:linear-gradient(100deg,#0c3154,#075882);color:white;box-shadow:0 7px 20px rgba(10,76,123,.16)}.election-outcome strong{font-size:13px}.election-outcome span{font-size:11px;color:#c7eaf8}.election-outcome:before{content:'●';font-size:15px;color:#66d7ee}
.trend-heading-actions{display:flex;align-items:center;gap:6px}.map-launch-button,.map-feature-button,.seat-consolidated-button{border:1px solid rgba(101,202,236,.44);border-radius:9px;background:linear-gradient(120deg,rgba(23,109,166,.42),rgba(14,79,135,.7));color:#e8f8ff;font:800 11px/1.2 inherit;padding:7px 10px;cursor:pointer;box-shadow:inset 0 1px rgba(255,255,255,.13)}.map-launch-button:hover,.map-feature-button:hover,.seat-consolidated-button:hover{background:#176ca7}.map-feature-button{padding:5px 8px;font-size:10px}.seat-consolidated-button{width:100%;display:flex;align-items:center;justify-content:space-between;text-align:left;margin:8px 0 4px;padding:9px 11px}.seat-consolidated-button strong{font-size:12px}.seat-consolidated-button span{font-size:10px;color:#b6d5e7}
.seat-candidate-method{grid-column:3/5;display:flex;gap:5px;align-items:center;font-size:10px;color:#98b8cd}.seat-candidate-method b{padding:3px 6px;border-radius:5px;border:1px solid rgba(112,200,224,.22);color:#bce5f1;font-size:9px}.seat-candidate-identity small{display:flex;align-items:center;gap:5px}.seat-candidate-identity small img{width:16px;height:16px;object-fit:contain}.seat-candidate-identity small .party-fallback{width:16px;height:16px}
.map-modal[hidden]{display:none!important}.map-modal{position:fixed;inset:0;z-index:60;display:grid;place-items:center;padding:12px}.map-modal-backdrop{position:absolute;inset:0;background:rgba(1,9,20,.85);backdrop-filter:blur(14px)}.map-dialog{position:relative;display:flex;flex-direction:column;width:min(1160px,100%);max-height:calc(100dvh - 24px);min-height:0;overflow:hidden;padding:18px;border-radius:20px;background:linear-gradient(145deg,rgba(16,42,65,.99),rgba(4,19,34,.99));box-shadow:0 26px 90px rgba(0,0,0,.55);border:1px solid rgba(129,199,235,.25)}.map-dialog-head{flex:none;display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:12px}.map-dialog-head h2{margin:4px 0 0;color:#f2faff;font-size:23px}.map-dialog .election-map{min-height:0;overflow:auto;scrollbar-color:rgba(112,177,217,.55) transparent}.map-dialog .map-canvas svg{height:min(66dvh,500px)}.map-dialog .map-layout{grid-template-columns:minmax(0,1.3fr) minmax(245px,.7fr)}
@media(max-width:720px){.presidential-map-card{padding:15px}.map-dialog{padding:12px}.map-dialog-head h2{font-size:18px}.map-dialog .map-layout{grid-template-columns:1fr}.map-dialog .map-canvas svg{height:300px}.map-dialog .map-detail{min-height:180px}.election-outcome{display:block}.election-outcome span{display:block;margin-top:3px}}
