/* Election-night newsroom on a real basemap. Header strip (title, search, switches); map fills the stage;
   results panel docks on the right (RTL start) on desktop and becomes a draggable bottom sheet on phones. */
:root{
  --ground:#f4f5f7; --paper:#ffffff; --ink:#12161f; --ink-2:#4a5160; --ink-3:#7c8494; --rule:#e2e4e9;
  --bloc:#2259b2; --rest:#c8372d; --hl:#ffb000;
  --f-display:"Frank Ruhl Libre","Times New Roman",serif;
  --f-ui:"IBM Plex Sans Hebrew","Segoe UI","Arial Hebrew",Arial,sans-serif;
  --gut-l:max(16px,env(safe-area-inset-left,0px)); --gut-r:max(16px,env(safe-area-inset-right,0px));
  --peek:178px;
  color-scheme:light;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{height:100%;margin:0}
body{background:var(--ground);color:var(--ink);font:400 15px/1.45 var(--f-ui);overflow:hidden;-webkit-font-smoothing:antialiased}
button,input{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--bloc);outline-offset:2px}
.app{height:100%;display:flex;flex-direction:column;padding-top:env(safe-area-inset-top,0px)}

/* header */
.top{position:relative;z-index:5;display:flex;flex-wrap:wrap;align-items:center;gap:10px 18px;padding:10px var(--gut-r) 10px var(--gut-l);background:var(--paper);border-bottom:1px solid var(--rule)}
.mast{min-width:0}
.kicker{margin:0 0 1px;font-size:.76rem;color:var(--ink-3);display:flex;align-items:center;gap:10px;flex-wrap:wrap;font-variant-numeric:tabular-nums}
.kicker b{color:var(--ink);font-weight:600}
.viewers{display:inline-flex;align-items:center;gap:5px;color:var(--ink-2);white-space:nowrap}
.viewers i{width:7px;height:7px;border-radius:50%;background:#1f8a4c;display:none;animation:pulse 2s infinite}
.viewers.on i{display:inline-block}
.viewers .nw{display:inline-flex;align-items:center;gap:5px}
.seats{margin-top:18px}
.seat-nums{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:.85rem;margin-top:4px}
.seat-nums b{font:900 1.7rem/1 var(--f-display);margin-inline-end:4px}
.seat-nums .maj{font-size:.72rem;color:var(--ink-3);text-align:center}
.seatbar{position:relative;display:flex;gap:1px;height:22px;margin-top:8px;border-radius:4px;overflow:visible;background:var(--rule)}
.seatbar span{display:block;height:100%;min-width:2px}
.seatbar span:first-child{border-radius:0 4px 4px 0}.seatbar span:last-of-type{border-radius:4px 0 0 4px}
.seatbar .m61{position:absolute;top:-5px;bottom:-5px;right:calc(61 / 120 * 100%);width:2px;margin-right:-1px;background:var(--ink)}
.coal{margin-top:20px;padding:14px;border:1px solid var(--rule);border-radius:14px;background:var(--ground)}
.coal h3{margin-top:0}
.coal-sum{display:flex;justify-content:space-between;align-items:baseline;gap:8px;font-size:.85rem}
.coal-sum b{font:900 1.7rem/1 var(--f-display);margin-inline-end:4px}
.coal-sum .c-ok{color:#1f8a4c}
.coal-ok{color:#1f8a4c;font-weight:700}.coal-no{color:var(--ink-3)}
.coal-meter{position:relative;display:flex;gap:1px;height:16px;margin:8px 0 10px;border-radius:4px;background:var(--paper)}
.coal-meter span{display:block;height:100%}.coal-meter .rest{background:var(--rule)}
.coal-meter .m61{position:absolute;top:-4px;bottom:-4px;right:calc(61 / 120 * 100%);width:2px;margin-right:-1px;background:var(--ink)}
.coal-chips{display:flex;flex-wrap:wrap;gap:6px}
.coal-chips button{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--rule);background:var(--paper);border-radius:999px;padding:5px 10px;font-size:.8rem;cursor:pointer;color:var(--ink-2)}
.coal-chips button b{font-variant-numeric:tabular-nums;color:var(--ink)}
.coal-chips button[aria-pressed="true"]{background:var(--ink);color:#fff;border-color:var(--ink)}
.coal-chips button[aria-pressed="true"] b{color:#fff}
.coal-acts{display:flex;flex-wrap:wrap;gap:6px;margin-top:10px}
.coal-acts button{border:0;background:none;color:var(--bloc);font-size:.78rem;font-weight:600;cursor:pointer;padding:4px 6px;border-radius:6px}
.coal-acts button:hover{background:var(--paper)}.coal-acts button:disabled{opacity:.4;cursor:default}
.coal-acts .coal-share{margin-inline-start:auto;background:var(--paper);border:1px solid var(--rule)}
.coal-opp{font-size:.74rem;color:var(--ink-3);margin:8px 0 0}
.seat-note{font-size:.7rem;color:var(--ink-3);margin:6px 0 0;line-height:1.45}
.bars .st{font-style:normal;font-size:.7rem;font-weight:700;color:var(--ink);background:var(--ground);border:1px solid var(--rule);border-radius:999px;padding:0 6px;margin-inline-start:2px;font-variant-numeric:tabular-nums}
.bars .st.no{color:var(--ink-3);font-weight:400}
.kicker .chk{color:var(--ink-3)}
.kicker .sm{display:none}
.toast{position:fixed;left:50%;top:14px;z-index:50;transform:translate(-50%,-140%);background:var(--ink);color:#fff;padding:9px 16px;border-radius:999px;font-size:.85rem;font-weight:500;box-shadow:0 10px 30px rgba(18,22,31,.25);transition:transform .35s cubic-bezier(.2,.7,.2,1);pointer-events:none;white-space:nowrap}
.toast.on{transform:translate(-50%,0)}
.live{display:inline-flex;align-items:center;gap:6px;color:var(--rest);font-weight:600}
.live i{width:8px;height:8px;border-radius:50%;background:var(--rest);animation:pulse 2s infinite}
@keyframes pulse{0%{box-shadow:0 0 0 0 rgba(200,55,45,.55)}70%{box-shadow:0 0 0 7px rgba(200,55,45,0)}100%{box-shadow:0 0 0 0 rgba(200,55,45,0)}}
h1{margin:0;font:900 1.8rem/1 var(--f-display);letter-spacing:-.01em}
.controls{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-inline-start:auto}
.seg{display:inline-flex;background:var(--ground);border:1px solid var(--rule);border-radius:10px;padding:3px;gap:2px}
.seg button{border:0;background:none;color:var(--ink-2);padding:6px 12px;border-radius:7px;cursor:pointer;font-size:.86rem;font-weight:500;font-variant-numeric:tabular-nums;white-space:nowrap;transition:background .15s,color .15s}
.seg button:hover{color:var(--ink)}
.seg button[aria-pressed="true"]{background:var(--paper);color:var(--ink);box-shadow:0 1px 2px rgba(18,22,31,.12),0 0 0 1px var(--rule)}
.seg button:disabled{opacity:.35;cursor:not-allowed}

/* search */
.finder{position:relative;flex:1 1 260px;max-width:420px;min-width:0}
.finder svg{position:absolute;inset-inline-start:12px;top:50%;width:17px;height:17px;margin-top:-8.5px;fill:none;stroke:var(--ink-3);stroke-width:1.8;stroke-linecap:round;pointer-events:none}
.finder input{width:100%;border:1px solid var(--rule);background:var(--ground);border-radius:12px;padding:10px 40px 10px 36px;font-size:.95rem;transition:border-color .15s,background .15s,box-shadow .15s}
.finder input:focus{outline:none;background:var(--paper);border-color:var(--bloc);box-shadow:0 0 0 3px rgba(34,89,178,.14)}
.finder input::-webkit-search-cancel-button{display:none}
.clear{position:absolute;inset-inline-end:8px;top:50%;margin-top:-14px;width:28px;height:28px;border:0;border-radius:50%;background:var(--rule);cursor:pointer;font-size:1.1rem;line-height:1}
.results{position:absolute;top:calc(100% + 6px);inset-inline:0;margin:0;padding:6px;list-style:none;background:var(--paper);border:1px solid var(--rule);border-radius:14px;box-shadow:0 14px 40px rgba(18,22,31,.16);max-height:min(60vh,420px);overflow:auto;z-index:20}
.results li{display:grid;grid-template-columns:1fr auto;align-items:center;gap:4px 12px;padding:9px 10px;border-radius:9px;cursor:pointer}
.results li[aria-selected="true"],.results li:hover{background:var(--ground)}
.results .rn{font-weight:600;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.results .rn mark{background:none;color:var(--bloc)}
.results .rs{grid-column:1;font-size:.76rem;color:var(--ink-3)}
.results .rb{grid-column:2;grid-row:1/3;font-weight:700;font-size:.85rem;font-variant-numeric:tabular-nums;padding:4px 8px;border-radius:7px;color:#fff;min-width:3.6rem;text-align:center}
.results .empty{color:var(--ink-3);cursor:default}

/* stage + map */
.stage{flex:1;min-height:0;display:grid;grid-template-columns:400px 1fr}
.panel{grid-column:1;grid-row:1;background:var(--paper);border-inline-end:1px solid var(--rule);overflow:auto;min-width:0;position:relative;z-index:3}
.mapwrap{grid-column:2;grid-row:1;position:relative;min-width:0;overflow:hidden}
#map{position:absolute;inset:0;background:#eef0f3}
.loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;gap:10px;color:var(--ink-2);font-size:.9rem;background:rgba(244,245,247,.7);pointer-events:none}
.loading span{width:18px;height:18px;border-radius:50%;border:2px solid var(--rule);border-top-color:var(--bloc);animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.legend{position:absolute;top:12px;right:12px;z-index:2;background:rgba(255,255,255,.95);backdrop-filter:blur(6px);border:1px solid var(--rule);border-radius:14px;padding:10px 12px;font-size:.75rem;width:236px;max-width:calc(100% - 70px);box-shadow:0 6px 20px rgba(18,22,31,.08)}
.legend b{display:block;font-size:.8rem;font-weight:600;margin-bottom:7px}
.ramp{display:flex;gap:2px;direction:ltr}
.ramp button{flex:1;height:14px;border:0;padding:0;border-radius:3px;cursor:pointer;transition:transform .12s,opacity .12s,box-shadow .12s}
.ramp button:hover{transform:scaleY(1.35)}
.ramp.filtering button{opacity:.3}
.ramp.filtering button[aria-pressed="true"]{opacity:1;box-shadow:0 0 0 2px var(--ink)}
.ramp-lbl{display:flex;justify-content:space-between;margin-top:5px;direction:ltr;color:var(--ink-3);font-variant-numeric:tabular-nums}
.legend .hint{margin-top:6px;color:var(--ink-3);font-size:.7rem}
.legend .chip{display:inline-flex;align-items:center;gap:6px;margin-top:6px;border:1px solid var(--rule);background:var(--ground);border-radius:999px;padding:3px 10px;font-size:.72rem;cursor:pointer}
.wl{display:flex;flex-direction:column;gap:3px;max-height:11.5em;overflow:auto}
.wl button{display:flex;align-items:center;gap:6px;border:0;background:none;padding:2px 0;cursor:pointer;text-align:start;font-size:.75rem}
.wl button:hover span{text-decoration:underline}
.wl em{font-style:normal;color:var(--ink-3);margin-inline-start:auto;font-variant-numeric:tabular-nums}
.sw{width:10px;height:10px;border-radius:3px;flex:none;box-shadow:inset 0 0 0 1px rgba(18,22,31,.15)}
.tip{position:absolute;z-index:4;pointer-events:none;background:var(--ink);color:#fff;font-size:.8rem;padding:7px 10px;border-radius:9px;white-space:nowrap;transform:translate(50%,calc(-100% - 14px));opacity:0;transition:opacity .1s;font-variant-numeric:tabular-nums;box-shadow:0 6px 18px rgba(18,22,31,.25)}
.tip b{font-weight:600}
.tip .tb{display:block;font-size:.74rem;opacity:.8}
.maplibregl-ctrl-group{border-radius:10px!important;box-shadow:0 2px 10px rgba(18,22,31,.12)!important}
.maplibregl-ctrl-group button{width:36px;height:36px}
.maplibregl-ctrl-attrib{font-size:10px}

/* panel content */
.grab{display:none}
.panel-body{padding:20px var(--gut-r) 28px 24px}
.eyebrow{margin:0;font-size:.74rem;font-weight:600;letter-spacing:.05em;color:var(--ink-3)}
.p-title{display:flex;align-items:flex-start;justify-content:space-between;gap:12px}
h2{margin:2px 0 0;font:900 1.7rem/1.1 var(--f-display);text-wrap:balance}
.back{flex:none;border:1px solid var(--rule);background:var(--ground);border-radius:999px;padding:5px 12px;font-size:.8rem;cursor:pointer;margin-top:4px}
.p-acts{display:flex;gap:6px;flex:none}
.share{flex:none;display:inline-flex;align-items:center;gap:5px;border:1px solid var(--rule);background:var(--paper);color:var(--bloc);border-radius:999px;padding:5px 12px;font-size:.8rem;font-weight:600;cursor:pointer;margin-top:4px}
.share:hover{background:var(--ground)}
.share svg{width:14px;height:14px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.credit{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin-top:18px;padding-top:12px;border-top:1px solid var(--rule);font-size:.8rem;color:var(--ink-2)}
.credit b{color:var(--ink)}
.credit a{color:var(--bloc);text-decoration:none;font-weight:600;font-variant-numeric:tabular-nums}
.credit a:hover{text-decoration:underline}
.credit .wa{color:#128c4b}
.duel{margin-top:16px}
.duel-nums{display:flex;justify-content:space-between;align-items:flex-end;gap:12px}
.duel-nums .side{display:flex;flex-direction:column;gap:2px}
.duel-nums .side:last-child{text-align:left;align-items:flex-end}
.duel-nums .lab{font-size:.8rem;color:var(--ink-2);font-weight:500}
.duel-nums .num{font:700 2.3rem/1 var(--f-ui);letter-spacing:-.03em;font-variant-numeric:tabular-nums}
.duel-nums .sub{font-size:.76rem;color:var(--ink-3);font-variant-numeric:tabular-nums}
.c-bloc{color:var(--bloc)}.c-rest{color:var(--rest)}
.tug{position:relative;display:flex;height:14px;margin-top:12px;border-radius:3px;background:var(--rule)}
.tug .a{background:var(--bloc);border-radius:0 3px 3px 0;transition:width .5s cubic-bezier(.2,.7,.2,1)}
.tug .r{background:var(--rest);border-radius:3px 0 0 3px;transition:width .5s cubic-bezier(.2,.7,.2,1)}
.tug .mid{position:absolute;left:50%;top:-6px;bottom:-6px;width:2px;margin-left:-1px;background:var(--ink)}
.tug-cap{text-align:center;font-size:.7rem;color:var(--ink-3);margin-top:7px}
.facts{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:var(--rule);border:1px solid var(--rule);border-radius:10px;overflow:hidden;margin:18px 0 0}
.facts div{background:var(--paper);padding:9px 11px;min-width:0}
.facts dt{font-size:.72rem;color:var(--ink-3)}
.facts dd{margin:1px 0 0;font-weight:600;font-variant-numeric:tabular-nums;font-size:.98rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
h3{font-size:.8rem;font-weight:600;color:var(--ink-2);margin:22px 0 8px;display:flex;justify-content:space-between;align-items:baseline;gap:8px}
h3 small{font-weight:400;color:var(--ink-3)}
.bars{display:flex;flex-direction:column;gap:2px;margin:0;padding:0;list-style:none}
.bars li button{width:100%;display:grid;grid-template-columns:minmax(0,9.5rem) 1fr 4.6rem;align-items:center;gap:10px;font-size:.84rem;border:0;background:none;padding:5px 6px;border-radius:8px;cursor:pointer;text-align:start}
.bars li button:hover,.bars li button[aria-pressed="true"]{background:var(--ground)}
.bars li button[aria-pressed="true"]{box-shadow:inset 0 0 0 1px var(--rule)}
.bars .nm{display:flex;align-items:center;gap:7px;min-width:0}
.bars .nm span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.bars .track{height:10px;background:var(--ground);border-radius:2px;overflow:hidden}
.bars .fill{display:block;height:100%;border-radius:2px;transition:width .5s cubic-bezier(.2,.7,.2,1)}
.bars .v{text-align:left;font-variant-numeric:tabular-nums;color:var(--ink-2);line-height:1.15}
.bars .v small{display:block;font-size:.7rem;color:var(--ink-3)}
.hist .vc{display:block;font-size:.68rem;color:var(--ink-3);font-variant-numeric:tabular-nums;margin-top:-2px}
.bars li.inbloc .nm span{font-weight:600}
.tag{font-style:normal;font-size:.64rem;font-weight:600;color:var(--bloc);border:1px solid currentColor;border-radius:4px;padding:0 4px;line-height:1.5;flex:none}
.hist{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;align-items:end;height:128px}
.hist button{display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%;gap:5px;border:0;background:none;cursor:pointer;padding:0}
.hist .colbar{display:block;width:100%;max-width:56px;border-radius:3px 3px 0 0;background:#a9c5e8;transition:height .4s}
.hist .cur .colbar{background:var(--bloc)}
.hist .pc{font-weight:600;font-size:.88rem;font-variant-numeric:tabular-nums}
.hist .k{font-size:.72rem;color:var(--ink-3)}
.note{font-size:.74rem;color:var(--ink-3);margin-top:22px;line-height:1.55}
.note a{color:var(--ink-2)}
.empty{color:var(--ink-3);margin-top:14px}

/* phones: draggable bottom sheet */
@media (max-width:959px){
  .top{gap:8px 10px;padding-block:8px}
  .mast{flex:1 1 100%;display:flex;align-items:baseline;gap:10px;min-width:0}
  .mast h1{order:-1;flex:none}
  .kicker{flex:1;min-width:0;flex-wrap:nowrap;white-space:nowrap;overflow:hidden;justify-content:flex-end;font-size:.7rem}
  #stamp{overflow:hidden;text-overflow:ellipsis;min-width:0}
  .kicker .lg{display:none}.kicker .sm{display:inline}
  .kicker .chk{display:none}
  .viewers.on .td{display:none}
  .viewers{flex:none}
  h1{font-size:1.4rem}
  .finder{order:2;flex:1 1 100%;max-width:none}
  .controls{order:3;flex:1 1 100%;margin-inline-start:0;flex-wrap:wrap;gap:6px}
  .controls .seg{display:flex;flex:1 1 100%}
  .controls .seg button{flex:1 1 0;padding:5px 4px}
  .seg button{padding:5px 9px;font-size:.8rem}
  .kn-pre{display:none}
  .stage{display:block;position:relative}
  .mapwrap{position:absolute;inset:0}
  .legend{top:10px;right:10px;width:178px;padding:7px 9px;font-size:.68rem}
  .legend b{font-size:.72rem;margin-bottom:5px}
  .legend .hint{display:none}
  .panel{position:absolute;left:0;right:0;bottom:0;height:82%;border:0;border-radius:18px 18px 0 0;box-shadow:0 -10px 30px rgba(18,22,31,.16);overflow:hidden;display:flex;flex-direction:column;
    transform:translateY(calc(100% - var(--peek) - env(safe-area-inset-bottom,0px)));transition:transform .3s cubic-bezier(.2,.7,.2,1);touch-action:none}
  .panel[data-state="open"]{transform:translateY(0)}
  .panel.dragging{transition:none}
  .grab{display:flex;align-items:center;justify-content:center;flex:none;position:relative;height:30px;cursor:grab}
  .grab .bar{width:42px;height:5px;border-radius:3px;background:#cfd3da}
  .toggle{position:absolute;inset-inline-start:var(--gut-r);top:6px;border:0;background:none;color:var(--bloc);font-size:.78rem;font-weight:600;padding:2px 0;cursor:pointer}
  .panel-body{flex:1;min-height:0;padding:0 var(--gut-r) calc(24px + env(safe-area-inset-bottom,0px)) var(--gut-l);overflow:hidden}
  .panel[data-state="open"] .panel-body{overflow:auto;touch-action:pan-y}
  h2{font-size:1.35rem}
  .duel{margin-top:8px}.duel-nums .num{font-size:1.85rem}
  .tip{display:none}
}
@media (prefers-reduced-motion:reduce){.live i,.loading span{animation:none}.panel,.tug .a,.tug .r,.bars .fill{transition:none}}
