:root{
  --rail:#141A1F; --rail2:#1B242B; --rail3:#243039;
  --line:#2C3841; --txt:#DEE4E8; --mut:#8794A0; --dim:#5E6C78;
  --sea:#D6E0E3; --land:#EFEFEA; --landstroke:#C6CAC1;
  --align:#B026D9; --row:#15181C; --zoiP:#5FB84F; --zoiS:#AEDDA0;
  --ind:#5B5BD6; --paper:#FFFFFF;
  --s1:#8BC94F; --s2:#F2DE2B; --s3:#F5A623; --s4:#F58A8A; --s5:#E5231B;
  --ui:"Barlow Semi Condensed","Barlow",system-ui,sans-serif;
  --bd:"Barlow",system-ui,sans-serif;
}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
body{font-family:var(--bd);background:var(--rail);color:var(--txt);overflow:hidden;
  font-size:14px;-webkit-font-smoothing:antialiased;font-variant-numeric:tabular-nums}
button,input,select{font:inherit;color:inherit}
button{background:none;border:none;cursor:pointer}
:focus-visible{outline:2px solid var(--ind);outline-offset:2px}

/* ---------- shell ---------- */
#app{display:grid;height:100vh;
  grid-template-columns:288px 1fr 0px;
  grid-template-rows:52px 1fr 26px;
  grid-template-areas:"top top top" "rail map panel" "bar bar bar";
  transition:grid-template-columns .28s cubic-bezier(.4,0,.2,1)}
#app.panel-open{grid-template-columns:288px 1fr 348px}
#app.rail-collapsed{grid-template-columns:56px 1fr 0px}
#app.rail-collapsed.panel-open{grid-template-columns:56px 1fr 348px}
@media (prefers-reduced-motion:reduce){#app{transition:none}}

/* ---------- top ---------- */
#top{grid-area:top;display:flex;align-items:stretch;background:var(--rail);
  border-bottom:1px solid var(--line);z-index:5}
#rail-toggle{width:40px;flex:none;display:flex;flex-direction:column;align-items:center;
  justify-content:center;gap:4px;border-right:1px solid var(--line)}
#rail-toggle:hover{background:var(--rail2)}
#rail-toggle i{width:16px;height:2px;background:var(--txt);display:block;border-radius:1px}
.brand{display:flex;align-items:center;gap:11px;padding:0 16px 0 18px;border-right:1px solid var(--line)}
.mark{width:26px;height:26px;position:relative;flex:none}
.mark i{position:absolute;background:var(--align);display:block}
.mark i:nth-child(1){left:12px;top:0;width:2px;height:26px}
.mark i:nth-child(2){left:4px;top:6px;width:18px;height:2px;background:var(--txt)}
.mark i:nth-child(3){left:7px;top:14px;width:12px;height:2px;background:var(--txt)}
.brand h1{font-family:var(--ui);font-size:16px;font-weight:700;letter-spacing:.01em;line-height:1.05}
.brand p{font-family:var(--ui);font-size:11.5px;color:var(--mut);line-height:1.1;font-weight:500}

.tabs{display:flex;align-items:stretch;flex:1;min-width:0;overflow-x:auto;scrollbar-width:none}
.tabs::-webkit-scrollbar{display:none}
.tab{font-family:var(--ui);font-size:14px;font-weight:600;padding:0 15px;color:var(--mut);
  border-right:1px solid var(--line);white-space:nowrap;position:relative;display:flex;
  flex-direction:column;justify-content:center;gap:1px;transition:color .15s,background .15s}
.tab small{font-size:11px;font-weight:500;color:var(--dim);letter-spacing:.02em}
.tab:hover{color:var(--txt);background:var(--rail2)}
.tab[aria-selected=true]{color:#fff;background:var(--rail2)}
.tab[aria-selected=true]::after{content:"";position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--align)}
.tab[aria-selected=true] small{color:var(--align)}
.tab[data-disabled]{opacity:.42;cursor:not-allowed}
#tabs-mobile{display:none}

.sesi{display:flex;align-items:center;gap:12px;padding:0 14px;border-left:1px solid var(--line)}
.sesi-txt{text-align:right;line-height:1.15}
.sesi-txt b{font-family:var(--ui);font-size:13.5px;font-weight:600;display:block}
.sesi-txt span{font-size:11.5px;color:var(--mut)}
.live{display:flex;align-items:center;gap:6px;background:#1F3326;border:1px solid #2F5438;
  color:#8BD46F;font-family:var(--ui);font-size:11.5px;font-weight:600;padding:4px 9px;border-radius:2px}
.live b{width:6px;height:6px;border-radius:50%;background:#8BD46F;animation:pulse 2.4s infinite}
@keyframes pulse{0%,100%{opacity:1}50%{opacity:.25}}
@media (prefers-reduced-motion:reduce){.live b{animation:none}}

/* ---------- rail ---------- */
#rail{grid-area:rail;background:var(--rail);border-right:1px solid var(--line);
  overflow-y:auto;overscroll-behavior:contain}
#rail::-webkit-scrollbar{width:8px}#rail::-webkit-scrollbar-thumb{background:var(--rail3);border-radius:4px}
.grp{border-bottom:1px solid var(--line)}
.grp>summary{font-family:var(--ui);font-size:12.5px;font-weight:600;letter-spacing:.06em;
  color:var(--mut);padding:11px 14px 9px;cursor:pointer;list-style:none;display:flex;
  align-items:center;justify-content:space-between;gap:8px}
.grp>summary::-webkit-details-marker{display:none}
.grp>summary:hover{color:var(--txt)}
.grp-title{display:flex;align-items:center;gap:9px;min-width:0}
.grp-ico{width:15px;height:15px;flex:none;display:flex}
.grp-ico svg{width:100%;height:100%;display:block}
.grp-label{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.chev{width:9px;height:9px;border-right:1.5px solid currentColor;border-bottom:1.5px solid currentColor;
  transform:rotate(45deg);transition:transform .2s;margin-bottom:3px;flex:none}
.grp[open] .chev{transform:rotate(-135deg);margin-bottom:-2px}
.grp-body{padding:0 0 9px}
/* collapsed desktop rail: icon-only strip, click a group to re-expand + open it */
#app.rail-collapsed .grp>summary{justify-content:center;padding:12px 0}
#app.rail-collapsed .grp-label,#app.rail-collapsed .chev,#app.rail-collapsed .grp-body{display:none}
#app.rail-collapsed .grp-ico{width:20px;height:20px}

.ly{display:flex;align-items:center;gap:9px;padding:6px 14px;cursor:pointer;user-select:none}
.ly:hover{background:var(--rail2)}
.ly input{position:absolute;opacity:0;pointer-events:none}
.box{width:13px;height:13px;border:1.5px solid #4A5964;border-radius:2px;flex:none;position:relative;transition:.12s}
.ly input:checked+.box{background:var(--ind);border-color:var(--ind)}
.ly input:checked+.box::after{content:"";position:absolute;left:3.5px;top:.5px;width:4px;height:8px;
  border:solid #fff;border-width:0 2px 2px 0;transform:rotate(42deg)}
.ly input:focus-visible+.box{outline:2px solid var(--ind);outline-offset:2px}
.sw{width:16px;height:11px;flex:none;border-radius:1px}
.ly-n{flex:1;font-size:13.5px;line-height:1.25}
.ly-c{font-family:var(--ui);font-size:11.5px;color:var(--dim);font-weight:600}
.ly[data-off] .ly-n,.ly[data-off] .ly-c{opacity:.42}

.seg{display:flex;margin:2px 14px 10px;border:1px solid var(--line);border-radius:2px;overflow:hidden}
.seg button{flex:1;font-family:var(--ui);font-size:12.5px;font-weight:600;padding:6px 4px;
  color:var(--mut);background:var(--rail2);transition:.15s;line-height:1.2}
.seg button+button{border-left:1px solid var(--line)}
.seg button[aria-pressed=true]{background:var(--zoiP);color:#0C1A0A}
.seg.alt button[aria-pressed=true]{background:var(--rail3);color:#fff}

.delta{margin:0 14px 11px;border:1px solid var(--line);border-left:2px solid var(--zoiP);
  background:var(--rail2);padding:9px 11px}
.delta h4{font-family:var(--ui);font-size:12px;font-weight:600;color:var(--mut);
  letter-spacing:.05em;margin-bottom:7px}
.delta table{width:100%;border-collapse:collapse}
.delta td{padding:2.5px 0;font-size:12.5px;color:var(--mut)}
.delta td:last-child{text-align:right;font-family:var(--ui);font-size:15px;font-weight:600;color:var(--txt)}
.delta .dv{font-size:11.5px;color:var(--zoiP);font-weight:600;margin-left:5px}
.slid{display:flex;align-items:center;gap:9px;padding:2px 14px 8px}
.slid input{flex:1;accent-color:var(--ind);height:3px}
.slid span{font-family:var(--ui);font-size:11.5px;color:var(--dim);width:30px;text-align:right}
.lgd{padding:2px 14px 4px;display:flex;flex-wrap:wrap;gap:4px 10px}
.lgd i{display:flex;align-items:center;gap:5px;font-size:11.5px;color:var(--mut);font-style:normal}
.lgd i b{width:9px;height:9px;border-radius:1px;display:block}

/* ---------- map ---------- */
#map{grid-area:map;position:relative;background:var(--sea)}
.maplibregl-ctrl-attrib{display:none}
.mk{cursor:pointer}
.mk-pmu{display:flex;align-items:center;gap:6px;transform:translateX(-6px)}
.mk-pmu b{width:13px;height:13px;background:#fff;border:3px solid var(--align);
  border-radius:50%;flex:none;box-shadow:0 0 0 2px rgba(255,255,255,.7)}
.mk-pmu span{font-family:var(--ui);font-size:12.5px;font-weight:700;color:#2A1030;
  background:rgba(255,255,255,.86);padding:1px 5px;white-space:nowrap;letter-spacing:.01em}
.mk-st{font-family:var(--ui);font-size:15px;font-weight:600;letter-spacing:.16em;
  color:#6E7A7E;pointer-events:none;white-space:nowrap}
.mk-dr{font-family:var(--ui);font-size:11.5px;font-weight:500;letter-spacing:.09em;
  color:#8A9498;pointer-events:none;white-space:nowrap;font-style:italic}
.mk-kg{font-family:var(--ui);font-size:11.5px;font-weight:500;color:#2E3438;white-space:nowrap;
  background:rgba(255,255,255,.72);padding:0 3px;transform:translate(9px,-1px);pointer-events:none}
body.night .mk-st{color:#5A6E77}body.night .mk-dr{color:#4E6069}
body.night .mk-kg{color:#C6D2D8;background:rgba(12,20,24,.7)}
body.night .mk-pmu span{color:#F4E6FA;background:rgba(14,22,26,.82)}

.mtool{position:absolute;top:12px;left:12px;display:flex;background:var(--paper);
  border:1px solid rgba(0,0,0,.14);box-shadow:0 1px 3px rgba(0,0,0,.13);z-index:2}
.mtool button{font-family:var(--ui);font-size:12.5px;font-weight:600;color:#4A555C;padding:6px 11px}
.mtool button+button{border-left:1px solid rgba(0,0,0,.1)}
.mtool button[aria-pressed=true]{background:var(--rail);color:#fff}
body.night .mtool{background:var(--rail2);border-color:var(--line)}
body.night .mtool button{color:var(--mut)}
body.night .mtool button[aria-pressed=true]{background:var(--ind);color:#fff}

.maplibregl-ctrl-group button svg{display:block;margin:auto;color:#333}
.maplibregl-ctrl-group button[aria-pressed=true]{background:var(--ind)}
.maplibregl-ctrl-group button[aria-pressed=true] svg{color:#fff}

#measure-result{position:absolute;top:50px;left:12px;background:var(--rail);color:#fff;
  font-family:var(--ui);font-size:12.5px;font-weight:600;padding:6px 11px;z-index:2;
  border-radius:2px;opacity:0;pointer-events:none;transition:opacity .15s}
#measure-result.on{opacity:1}

#legend{position:absolute;right:12px;top:12px;background:rgba(255,255,255,.93);
  border:1px solid rgba(0,0,0,.14);padding:9px 11px 10px;z-index:2;min-width:150px;
  box-shadow:0 1px 3px rgba(0,0,0,.13)}
#legend h5{font-family:var(--ui);font-size:11.5px;font-weight:700;letter-spacing:.07em;
  color:#5B666D;margin-bottom:6px;cursor:pointer;user-select:none;
  display:flex;align-items:center;justify-content:space-between;gap:10px}
#legend h5 .chev{color:#5B666D}
#legend:not(.collapsed) h5 .chev{transform:rotate(-135deg);margin-bottom:-2px}
#legend.collapsed h5{margin-bottom:0}
#legend .lgd-body{max-height:calc(100vh - 170px);overflow-y:auto}
#legend.collapsed .lgd-body{display:none}
#legend .lgd-body>div{display:flex;align-items:center;gap:7px;font-size:12px;color:#333B40;padding:1.5px 0}
#legend .lgd-body i{width:15px;height:10px;flex:none;border-radius:1px;border:1px solid rgba(0,0,0,.15)}
#legend .lgd-head{font-weight:600;margin-top:3px}
#legend .lgd-sub{padding-left:15px;font-size:11px;color:#4A555C}
#legend .lgd-sub i{width:11px;height:8px}
body.night #legend{background:rgba(20,28,33,.93);border-color:var(--line)}
body.night #legend .lgd-body>div{color:var(--txt)}body.night #legend h5{color:var(--mut)}
body.night #legend h5 .chev{color:var(--mut)}
body.night #legend .lgd-sub{color:var(--mut)}

#insp{position:absolute;left:12px;bottom:12px;width:298px;background:var(--paper);
  border:1px solid rgba(0,0,0,.16);box-shadow:0 3px 14px rgba(0,0,0,.2);z-index:3;
  color:#22282C;display:none}
#insp.on{display:block}
.i-h{background:var(--rail);color:#fff;padding:9px 12px;display:flex;align-items:flex-start;gap:8px}
.i-h h3{font-family:var(--ui);font-size:15.5px;font-weight:600;flex:1;line-height:1.2}
.i-h p{font-size:11.5px;color:var(--mut);margin-top:1px}
.i-h button{color:var(--mut);font-size:19px;line-height:.8;padding:0 2px}
.i-h button:hover{color:#fff}
.i-b{padding:10px 12px;max-height:260px;overflow-y:auto}
.i-r{display:flex;justify-content:space-between;gap:10px;padding:3.5px 0;font-size:12.5px;
  border-bottom:1px dotted rgba(0,0,0,.11)}
.i-r span{color:#69737A}.i-r b{font-family:var(--ui);font-weight:600;font-size:13.5px;text-align:right}
.pill{display:inline-block;font-family:var(--ui);font-size:11.5px;font-weight:600;
  padding:1px 7px;border-radius:2px;letter-spacing:.02em}
.i-f{padding:0 12px 11px;display:flex;gap:7px}
.i-f button{flex:1;font-family:var(--ui);font-size:12.5px;font-weight:600;padding:7px;
  border:1px solid var(--rail);color:var(--rail)}
.i-f button.pri{background:var(--rail);color:#fff}
.i-f button:hover{opacity:.85}

/* ---------- panel ---------- */
#panel{grid-area:panel;background:var(--rail);border-left:1px solid var(--line);
  overflow:hidden;display:flex;flex-direction:column}
.p-h{padding:11px 14px 0;border-bottom:1px solid var(--line)}
.p-h h2{font-family:var(--ui);font-size:15px;font-weight:600;margin-bottom:2px}
.p-h p{font-size:11.5px;color:var(--mut);margin-bottom:9px}
.p-tabs{display:flex;gap:16px}
.p-tabs button{font-family:var(--ui);font-size:13px;font-weight:600;color:var(--mut);
  padding-bottom:8px;border-bottom:2px solid transparent}
.p-tabs button[aria-selected=true]{color:#fff;border-color:var(--align)}
.p-body{flex:1;overflow-y:auto;padding:12px 14px 18px}
.p-body::-webkit-scrollbar{width:8px}.p-body::-webkit-scrollbar-thumb{background:var(--rail3)}

.imp{border:1px solid var(--line);background:var(--rail2);margin-bottom:8px;border-left-width:3px}
.imp-t{display:flex;gap:8px;padding:8px 10px 6px;align-items:flex-start}
.imp-t p{flex:1;font-size:13px;line-height:1.35}
.sc{font-family:var(--ui);font-size:16px;font-weight:700;padding:1px 7px;border-radius:2px;
  color:#12160F;flex:none;line-height:1.35}
.imp-m{display:flex;gap:5px;flex-wrap:wrap;padding:0 10px 8px}
.tag{font-family:var(--ui);font-size:11px;font-weight:600;color:var(--mut);
  border:1px solid var(--line);padding:1px 6px;border-radius:2px}
.imp-a{border-top:1px solid var(--line);padding:6px 10px;font-size:11.5px;color:var(--mut);
  display:flex;justify-content:space-between;gap:8px}
.imp-a em{font-style:normal;color:var(--dim)}

.add{width:100%;font-family:var(--ui);font-size:13.5px;font-weight:600;padding:10px;
  border:1px dashed var(--rail3);color:var(--mut);margin-bottom:12px}
.add:hover{border-color:var(--ind);color:var(--txt);background:var(--rail2)}
.form{border:1px solid var(--ind);background:var(--rail2);padding:11px;margin-bottom:12px;display:none}
.form.on{display:block}
.fl{font-family:var(--ui);font-size:11.5px;font-weight:600;color:var(--mut);
  letter-spacing:.05em;display:block;margin:9px 0 4px}
.fl:first-child{margin-top:0}
.form select,.form input[type=text]{width:100%;background:var(--rail);border:1px solid var(--line);
  padding:6px 8px;font-size:13px;border-radius:2px}
.rate{display:flex;gap:4px}
.rate button{flex:1;font-family:var(--ui);font-size:13.5px;font-weight:600;padding:6px 0;
  background:var(--rail);border:1px solid var(--line);color:var(--mut);border-radius:2px}
.rate button[aria-pressed=true]{background:var(--txt);color:var(--rail);border-color:var(--txt)}
.calc{display:flex;align-items:center;gap:9px;margin:11px 0 3px;padding:8px 10px;background:var(--rail)}
.calc b{font-family:var(--ui);font-size:20px;font-weight:700;padding:1px 9px;color:#12160F;border-radius:2px}
.calc div{font-size:11.5px;color:var(--mut);line-height:1.3}
.calc div strong{font-family:var(--ui);font-size:13px;color:var(--txt);display:block;font-weight:600}
.f-act{display:flex;gap:7px;margin-top:11px}
.f-act button{flex:1;font-family:var(--ui);font-size:13px;font-weight:600;padding:8px;border-radius:2px}
.f-act .ok{background:var(--ind);color:#fff}
.f-act .no{border:1px solid var(--line);color:var(--mut)}

#matrix{border-collapse:collapse;width:100%;margin:4px 0 12px}
#matrix td,#matrix th{border:1px solid var(--rail);text-align:center;height:38px;
  font-family:var(--ui);font-size:12px;position:relative}
#matrix th{border:none;color:var(--dim);font-weight:600;height:22px;font-size:11px}
#matrix td b{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;
  font-size:13px;font-weight:700;color:rgba(0,0,0,.5)}
#matrix td.hit b{color:#0B0F08}
.dot{position:absolute;right:2px;top:2px;width:7px;height:7px;border-radius:50%;
  background:var(--rail);border:1.5px solid #fff}
.ax{font-family:var(--ui);font-size:11px;color:var(--dim);letter-spacing:.05em;margin-bottom:3px}
.stat{display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid var(--line);font-size:13px}
.stat b{font-family:var(--ui);font-size:15px;font-weight:600}
.bar{height:5px;background:var(--rail3);margin-top:5px;display:flex}
.bar i{display:block;height:100%}
.note{font-size:12px;color:var(--dim);line-height:1.5;margin-top:12px;
  border-left:2px solid var(--line);padding-left:9px}
.exp{width:100%;font-family:var(--ui);font-size:13px;font-weight:600;padding:9px;
  background:var(--rail3);margin-top:14px;border-radius:2px}
.exp:hover{background:#2F3E49}

/* ---------- statusbar ---------- */
#bar{grid-area:bar;background:var(--rail2);border-top:1px solid var(--line);display:flex;
  align-items:center;gap:0;font-family:var(--ui);font-size:11.5px;color:var(--mut);overflow:hidden}
.bi{padding:0 12px;border-right:1px solid var(--line);white-space:nowrap;line-height:25px}
.bi b{color:var(--txt);font-weight:600}
.bi.pushr{margin-left:auto;border-right:none;border-left:1px solid var(--line)}
.scalebar{display:flex;align-items:center;gap:7px}
.scalebar i{height:6px;border:1px solid var(--mut);border-top:none;display:block}
#toast{position:fixed;left:50%;bottom:52px;transform:translateX(-50%) translateY(14px);
  background:var(--rail3);border:1px solid var(--line);border-left:3px solid var(--zoiP);
  padding:9px 15px;font-size:13px;opacity:0;pointer-events:none;transition:.22s;z-index:20}
#toast.on{opacity:1;transform:translateX(-50%) translateY(0)}
#fallback{position:absolute;inset:0;display:none;place-items:center;text-align:center;padding:40px;color:#4A555C}

/* ---------- rail/panel as off-canvas drawers on phone/tablet ---------- */
#rail-backdrop{display:none;position:fixed;top:52px;left:0;right:0;bottom:26px;background:rgba(0,0,0,.4);z-index:21}
body.rail-open-mobile #rail-backdrop,body.panel-open-mobile #rail-backdrop{display:block}
@media (max-width:880px){
  #app,#app.rail-collapsed,#app.panel-open,#app.rail-collapsed.panel-open{
    grid-template-columns:1fr!important;grid-template-rows:52px 1fr 26px;grid-template-areas:"top" "map" "bar"}
  #rail{position:fixed;top:52px;bottom:26px;left:0;width:min(82vw,320px);z-index:22;
    transform:translateX(-100%);transition:transform .25s cubic-bezier(.4,0,.2,1);
    box-shadow:2px 0 18px rgba(0,0,0,.35)}
  body.rail-open-mobile #rail{transform:translateX(0)}
  #app.rail-collapsed #rail .grp-label,
  #app.rail-collapsed #rail .chev,#app.rail-collapsed #rail .grp-body{display:revert}
  #panel{position:fixed;top:52px;bottom:26px;right:0;width:min(88vw,348px);z-index:22;
    transform:translateX(100%);transition:transform .25s cubic-bezier(.4,0,.2,1)}
  body.panel-open-mobile #panel{transform:translateX(0)}
  .sesi,.brand p{display:none}
  /* horizontal tab strip relies on a scroll gesture with no visible affordance — swap it for a
     native select on mobile so every negeri stays one tap away regardless of how many there are */
  .tabs{display:none}
  #tabs-mobile{display:block;flex:1;min-width:0;align-self:center;margin:0 8px;
    background:var(--rail2);color:var(--txt);border:1px solid var(--line);border-radius:3px;
    padding:7px 8px;font-family:var(--ui);font-size:13px;font-weight:600}
  #legend{max-width:calc(100vw - 24px)}
  #insp{width:calc(100vw - 24px);max-width:298px}
  .mtool button{padding:6px 8px;font-size:11.5px}
}
