/* ---- themes: light is the default; [data-theme="dark"] overrides ---- */
:root{
  --bg:#eef0f3; --panel:#ffffff; --panel2:#f1f3f6; --line:#d8dce3;
  --ink:#1b202a; --mut:#5f6675; --hint:#838b99; --acc:#2566d8;
  --dem:#2566d8; --rep:#d83a3a;
  --pty-dem:#1d54c4; --pty-rep:#c62f2f;
  --row-act:rgba(0,0,0,.05); --row-hover:rgba(0,0,0,.045);
  --map-bg:#e9ebee; --svg-bg:#ffffff; --svg-border:#d8dce3; --chart-bg:#eef0f3;
  --grid:#e4e8ee; --axis:#aab2bf; --tick:#5f6675; --axislbl:#2a313d;
  --tooltip-bg:#fffffff2; --shadow:0 6px 24px rgba(20,28,45,.16);
}
[data-theme="dark"]{
  --bg:#0f1115; --panel:#171a21; --panel2:#1e222b; --line:#2a2f3a;
  --ink:#e8eaed; --mut:#9aa3b2; --hint:#6b7484; --acc:#5b9dff;
  --dem:#2566d8; --rep:#d83a3a;
  --pty-dem:#7fb0ff; --pty-rep:#ff8a8a;
  --row-act:rgba(255,255,255,.05); --row-hover:rgba(255,255,255,.07);
  --map-bg:#0a0c10; --svg-bg:#0d1016; --svg-border:#1c2029; --chart-bg:#0a0c10;
  --grid:#20262f; --axis:#454d5e; --tick:#aab3c0; --axislbl:#eef1f5;
  --tooltip-bg:#0b0d12ee; --shadow:0 6px 24px #000a;
}
*{box-sizing:border-box}
html,body{margin:0;height:100%;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;background:var(--bg);color:var(--ink)}
#app{display:flex;height:100vh;overflow:hidden;position:relative}
#sidebar{width:384px;min-width:384px;background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;overflow-y:auto}
#map{flex:1;background:var(--map-bg)}
header{padding:16px 16px 10px;display:flex;justify-content:space-between;align-items:flex-start;gap:8px}
header h1{font-size:17px;margin:0;letter-spacing:.2px}
header .sub{font-size:12px;color:var(--mut);margin:4px 0 0}
.hbtns{display:flex;gap:6px;flex:0 0 auto;align-items:flex-start}
#themeToggle{background:var(--panel2);border:1px solid var(--line);color:var(--ink);width:30px;height:30px;border-radius:8px;font-size:15px;cursor:pointer;line-height:1}
#themeToggle:hover{border-color:var(--acc)}
#panelClose{display:none;background:var(--acc);border:0;color:#fff;height:30px;padding:0 10px;border-radius:8px;font-size:13px;font-weight:600;cursor:pointer;white-space:nowrap}
.ctl{padding:10px 16px;border-top:1px solid var(--line)}
.ctl > label{display:block;font-size:12px;text-transform:uppercase;letter-spacing:.6px;color:var(--mut);margin-bottom:6px}
.hint{text-transform:none;letter-spacing:0;color:var(--hint);font-size:11px;margin-left:6px}
select{width:100%;background:var(--panel2);color:var(--ink);border:1px solid var(--line);border-radius:7px;padding:8px 9px;font-size:14px;outline:none}
select:focus{border-color:var(--acc)}
select optgroup{color:var(--mut);font-style:normal}
.hidden{display:none!important}
.seg{display:flex;gap:4px;background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:3px}
.seg button{flex:1;background:transparent;border:0;color:var(--mut);padding:6px 4px;font-size:13px;border-radius:6px;cursor:pointer}
.seg button.on{background:var(--acc);color:#fff;font-weight:600}
#candidate{margin-top:8px}
#metricWrap{margin-top:10px}
.sublabel{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.5px;color:var(--hint);margin-bottom:5px}
#legend{padding:10px 16px;border-top:1px solid var(--line);font-size:12px;color:var(--mut)}
#legend .bar{height:10px;border-radius:3px;margin:6px 0 4px}
#legend .ends{display:flex;justify-content:space-between}
.seltools .seg{margin-bottom:10px}
#groups{display:flex;flex-direction:column;gap:6px}
.group{display:flex;align-items:center;gap:8px;background:var(--panel2);border:1px solid var(--line);border-radius:8px;padding:7px 9px;cursor:pointer}
.group.active{border-color:var(--acc);box-shadow:0 0 0 1px var(--acc) inset}
.group .sw{width:14px;height:14px;border-radius:4px;flex:0 0 auto}
.group .nm{flex:1;font-size:14px;background:transparent;border:0;color:var(--ink);outline:none;min-width:0}
.group .ct{font-size:12px;color:var(--mut)}
.group .x{color:var(--hint);cursor:pointer;font-size:15px;padding:0 2px}
.group .x:hover{color:var(--rep)}
.ghost{margin-top:8px;width:100%;background:transparent;border:1px dashed var(--line);color:var(--mut);padding:8px;border-radius:8px;font-size:13px;cursor:pointer}
.ghost:hover{border-color:var(--acc);color:var(--ink)}
#compare{padding:0 16px;overflow-x:auto}
#compare table{width:100%;border-collapse:collapse;font-size:12px;margin:8px 0 14px;table-layout:fixed}
#compare h3{font-size:12px;text-transform:uppercase;letter-spacing:.6px;color:var(--mut);margin:14px 0 0}
#compare th,#compare td{text-align:right;padding:3px 4px;border-bottom:1px solid var(--line);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#compare th:first-child,#compare td:first-child{text-align:left;white-space:normal;word-break:break-word;width:34%}
#compare .gtag{display:inline-block;width:9px;height:9px;border-radius:2px;margin-right:5px;vertical-align:middle}
#compare .pty-Dem{color:var(--pty-dem)}#compare .pty-Rep{color:var(--pty-rep)}
#distbox label{display:block;font-size:12px;text-transform:uppercase;letter-spacing:.6px;color:var(--mut);margin-bottom:6px}
#distYear{margin-bottom:10px}
#distYear button{font-size:12px}
.dtab{width:100%;border-collapse:collapse;font-size:13px}
.dtab th,.dtab td{text-align:right;padding:4px 6px;border-bottom:1px solid var(--line)}
.dtab th:first-child,.dtab td:first-child{text-align:left;color:var(--ink)}
.dtab th{color:var(--mut);font-weight:500;font-size:11px;text-transform:uppercase;letter-spacing:.4px}
.dtab td.act{font-weight:700;background:var(--row-act)}
.dtab tr:hover td{background:var(--row-hover)}
footer{margin-top:auto;padding:10px 16px;border-top:1px solid var(--line);font-size:11px;color:var(--hint)}
#tooltip{position:fixed;pointer-events:none;background:var(--tooltip-bg);border:1px solid var(--line);border-radius:8px;padding:8px 10px;font-size:13px;z-index:9999;max-width:240px;box-shadow:var(--shadow);color:var(--ink)}
#tooltip h4{margin:0 0 4px;font-size:13px}
#tooltip .row{display:flex;justify-content:space-between;gap:14px;color:var(--mut)}
#tooltip .row b{color:var(--ink);font-weight:600}
#chart{flex:1;background:var(--chart-bg);position:relative;display:flex;align-items:center;justify-content:center}
#chart svg{display:block;background:var(--svg-bg);border:1px solid var(--svg-border);border-radius:8px}
.axiscfg{display:flex;align-items:center;gap:4px;margin-bottom:6px}
.axiscfg select{padding:5px 5px;font-size:12px}
.axiscfg .axl{flex:0 0 16px;text-align:center;font-weight:700;font-size:13px;border-radius:4px;padding:2px 0;color:#fff}
.axiscfg .axl.x{background:var(--dem)}
.axiscfg .axl.y{background:var(--rep)}
#mode{flex-wrap:wrap}
#mode button{min-width:54px}
.sc-axis{stroke:var(--axis);stroke-width:1.5}
.sc-grid{stroke:var(--grid);stroke-width:1}
.sc-tick{fill:var(--tick);font-size:14px}
.sc-axislbl{fill:var(--axislbl);font-size:16px;font-weight:600}
.sc-dot{stroke:none}
.leaflet-container{background:var(--map-bg)}
.lasso-on{cursor:crosshair!important}

/* ---- mobile: panel overlays the map; floating button collapses it ---- */
#panelToggle{position:absolute;top:12px;left:12px;z-index:2000;display:none;
  width:44px;height:44px;border-radius:10px;font-size:20px;line-height:1;cursor:pointer;
  background:var(--acc);color:#fff;border:0;box-shadow:0 2px 10px rgba(0,0,0,.35)}
#app.collapsed #sidebar{display:none}            /* bulletproof: collapse fully removes the panel */
@media (max-width:760px){
  /* panel overlays the map by default; "Hide Panel" closes it, floating ☰ reopens it */
  #sidebar{position:absolute;top:0;left:0;height:100%;width:min(92vw,380px);z-index:1050;box-shadow:var(--shadow)}
  #panelClose{display:inline-block}
  #app.collapsed #panelClose{display:none}
  #app.collapsed #panelToggle{display:block}     /* floating opener only once collapsed */
  #map,#chart{width:100%}
}
