/* ══════════════════════════════════════════════════════════
   TAPIR · sim.css — KOMENK Design Language  (clean rewrite)
   ══════════════════════════════════════════════════════════ */

/* ── Tokens ── */
:root,[data-theme="dark"]{
  --bg:#080b10;--surface:#0f1520;--surface2:#161e2c;--border:#1e2a3a;--border-hi:#2a3a50;
  --accent:#00e5ff;--accent2:#ff6b35;--accent3:#a78bfa;
  --accent-glow:rgba(0,229,255,.18);--accent2-glow:rgba(255,107,53,.14);--accent3-glow:rgba(167,139,250,.14);
  --text:#f1f5f9;--muted:#4a6080;--muted-hi:#6b8099;
  --green:#22c55e;--yellow:#eab308;--red:#ef4444;--orange:#f97316;
  --green-glow:rgba(34,197,94,.14);--red-glow:rgba(239,68,68,.14);
  --shadow-float:0 8px 32px rgba(0,0,0,.7),0 2px 8px rgba(0,0,0,.5),0 0 0 1px rgba(255,255,255,.04);
  --shadow-panel:0 -8px 40px rgba(0,0,0,.6),0 0 0 1px rgba(255,255,255,.04);
  --glass:rgba(8,11,16,.88);--glass-hi:rgba(15,21,32,.94);
  --gradient-surface:linear-gradient(160deg,#0f1520,#0c1219);
  --radius:8px;--radius-sm:5px;--radius-lg:14px;
  --mono:'Space Mono',monospace;--sans:'DM Sans',sans-serif;
  --tr-fast:.12s cubic-bezier(.4,0,.2,1);--tr-med:.22s cubic-bezier(.4,0,.2,1);--tr-slow:.35s cubic-bezier(.4,0,.2,1);
}

*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%;overflow:hidden;-webkit-tap-highlight-color:transparent}
body{font-family:var(--sans);font-size:13px;background:var(--bg);color:var(--text)}
.app{position:relative;width:100%;height:100vh;height:100dvh;overflow:hidden}
#map{position:absolute;top:0;left:0;right:0;bottom:0;width:100%;height:100%;min-height:100vh;min-height:100dvh;z-index:1}

/* ── Float logo ── */
.float-logo{
  position:absolute;top:14px;left:14px;z-index:600;
  display:flex;align-items:center;gap:8px;
  background:var(--glass-hi);backdrop-filter:blur(20px) saturate(180%);
  border:1px solid var(--border-hi);border-radius:var(--radius);
  padding:7px 12px;box-shadow:var(--shadow-float);
  transition:border-color var(--tr-fast);
}
.float-actions-sim{
  position:absolute;top:14px;right:14px;z-index:600;
  display:flex;align-items:center;gap:7px;
}
.btn-goto-sim{
  display:flex;align-items:center;gap:6px;
  background:var(--glass-hi);backdrop-filter:blur(20px) saturate(180%);
  border:1px solid rgba(167,139,250,.3);border-radius:var(--radius);
  padding:7px 12px;box-shadow:var(--shadow-float);
  color:var(--accent3);font-size:11px;font-weight:600;text-decoration:none;
  transition:border-color var(--tr-fast),box-shadow var(--tr-fast),background var(--tr-fast);
}
.btn-goto-sim:hover{
  border-color:var(--accent3);background:rgba(167,139,250,.08);
  box-shadow:var(--shadow-float),0 0 14px var(--accent3-glow);
}
.logo-sep{width:1px;height:16px;background:var(--border-hi);flex-shrink:0}
.logo-mark{font-family:var(--mono);font-size:13px;font-weight:700;letter-spacing:3px;background:linear-gradient(135deg,var(--accent),#7dd3fc);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.logo-sub{font-size:8px;color:var(--muted-hi);letter-spacing:1.5px;text-transform:uppercase;white-space:nowrap}

/* ── Status pill ── */
.status-pill{
  display:flex;align-items:center;gap:7px;
  background:var(--glass-hi);backdrop-filter:blur(20px) saturate(180%);
  border:1px solid var(--border-hi);border-radius:var(--radius);
  padding:6px 11px;box-shadow:var(--shadow-float);font-size:11px;
}
.status-dot{width:7px;height:7px;border-radius:50%;flex-shrink:0}
.wanted-dot{background:var(--green);box-shadow:0 0 8px var(--green-glow)}
.ifr-dot{background:var(--orange)}
.status-label{font-family:var(--mono);font-size:10px;color:var(--text)}
.status-sep{width:1px;height:14px;background:var(--border);flex-shrink:0}
.violation-pill{display:none;align-items:center;gap:4px;background:rgba(239,68,68,.15);border:1px solid rgba(239,68,68,.3);color:var(--red);border-radius:10px;padding:1px 7px;font-size:10px;font-weight:700;font-family:var(--mono)}
.violation-pill.show{display:flex}
.violation-pill.hidden{display:none!important}
.conflict-badge{display:none;align-items:center;gap:4px;background:rgba(239,68,68,.1);border:1px solid rgba(239,68,68,.25);color:var(--red);border-radius:10px;padding:1px 7px;font-size:10px;font-family:var(--mono)}
.conflict-badge.show{display:flex}

/* ── FAB cluster ── */
.fab-cluster{
  position:absolute;right:14px;bottom:60px;z-index:600;
  display:flex;flex-direction:column;align-items:center;gap:8px;
}
.fab-btn{
  width:44px;height:44px;border-radius:var(--radius);
  background:var(--glass-hi);backdrop-filter:blur(16px) saturate(160%);
  border:1px solid var(--border-hi);box-shadow:var(--shadow-float);
  display:flex;align-items:center;justify-content:center;
  cursor:pointer;color:var(--text);
  transition:background var(--tr-fast),border-color var(--tr-fast),transform var(--tr-fast);
  touch-action:manipulation;
}
.fab-btn:active{transform:scale(.9)}
.fab-run{background:var(--accent);color:#000;border-color:var(--accent);box-shadow:var(--shadow-float),0 0 20px var(--accent-glow);font-weight:700}
.fab-run:hover{background:#19f0ff}
.fab-setup{color:var(--accent)}
.fab-setup:hover,.fab-drawer-btn:hover{border-color:var(--accent);box-shadow:var(--shadow-float),0 0 12px var(--accent-glow)}
.fab-reset:hover{border-color:var(--red);color:var(--red)}
.fab-drawer-btn{color:var(--muted-hi)}
.fab-mode-pill{
  display:flex;flex-direction:row;height:44px;
  background:var(--glass-hi);backdrop-filter:blur(16px) saturate(160%);
  border:1px solid var(--border-hi);border-radius:var(--radius);
  box-shadow:var(--shadow-float);overflow:hidden;
}
.fab-mode-btn{padding:0 13px;border:none;background:none;font-family:var(--mono);font-size:9px;letter-spacing:.08em;color:var(--muted-hi);cursor:pointer;transition:background var(--tr-fast),color var(--tr-fast);touch-action:manipulation;height:100%}
.fab-mode-btn+.fab-mode-btn{border-left:1px solid var(--border)}
.fab-mode-btn.active{background:rgba(0,229,255,.12);color:var(--accent);font-weight:700}

/* ── Map hint ── */
.map-hint{position:absolute;bottom:80px;left:50%;transform:translateX(-50%);background:var(--glass-hi);backdrop-filter:blur(16px);border:1px solid var(--accent);border-radius:var(--radius);padding:8px 14px;display:flex;align-items:center;gap:8px;color:var(--accent);font-size:12px;z-index:1000;box-shadow:0 4px 20px rgba(0,229,255,.15);white-space:nowrap}
.map-hint.hidden{display:none}
#btn-cancel-pick{background:none;border:1px solid rgba(0,229,255,.35);color:var(--accent);border-radius:var(--radius-sm);padding:2px 8px;cursor:pointer;font-size:11px;margin-left:4px;transition:background var(--tr-fast)}
#btn-cancel-pick:hover{background:rgba(0,229,255,.1)}

/* ══════════════════════════════════════════════════════════
   SCRIM (shared — used by sheets AND drawer)
   ══════════════════════════════════════════════════════════ */
.sheet-scrim{
  position:absolute;inset:0;z-index:700;
  background:rgba(0,0,0,.55);backdrop-filter:blur(2px);
  opacity:0;pointer-events:none;transition:opacity var(--tr-med);
}
.sheet-scrim.open{opacity:1;pointer-events:auto}

/* ══════════════════════════════════════════════════════════
   BOTTOM SHEETS
   ══════════════════════════════════════════════════════════ */
.bottom-sheet{
  position:absolute;left:0;right:0;bottom:0;z-index:800;
  background:var(--gradient-surface);
  border-radius:var(--radius-lg) var(--radius-lg) 0 0;
  border-top:1px solid var(--border-hi);
  transform:translateY(100%);transition:transform var(--tr-slow);
  display:flex;flex-direction:column;
  max-height:92dvh;
  box-shadow:var(--shadow-panel);
  padding-bottom:env(safe-area-inset-bottom,0);
}
.bottom-sheet.open{transform:translateY(0)}
.result-sheet{max-height:88dvh}

.sheet-handle-bar{flex-shrink:0;padding:10px 14px 6px;border-bottom:1px solid var(--border);cursor:grab}
.sheet-pill{width:36px;height:3px;border-radius:2px;background:var(--border-hi);margin:0 auto 8px}
.sheet-head-row{display:flex;align-items:center;justify-content:space-between;gap:8px}
.sheet-title{font-family:var(--mono);font-size:11px;letter-spacing:1.5px;text-transform:uppercase;color:var(--muted-hi)}
.sheet-head-actions{display:flex;align-items:center;gap:8px}
.sheet-close-btn{background:none;border:none;color:var(--muted-hi);cursor:pointer;padding:4px;border-radius:var(--radius-sm);display:flex;align-items:center;transition:color var(--tr-fast),background var(--tr-fast)}
.sheet-close-btn:hover{color:var(--text);background:var(--border)}
.sheet-body{flex:1;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}
.sheet-body::-webkit-scrollbar{display:none}

/* Sheet run row */
.sheet-run-row{padding:10px 14px calc(10px + env(safe-area-inset-bottom,0));border-top:1px solid var(--border);background:rgba(0,0,0,.15)}
.btn-run-sheet{width:100%;display:flex;align-items:center;justify-content:center;gap:8px;background:var(--accent);color:#000;border:none;border-radius:var(--radius);padding:13px;font-size:14px;font-weight:700;cursor:pointer;font-family:var(--sans);box-shadow:0 0 20px var(--accent-glow);transition:background var(--tr-fast)}
.btn-run-sheet:hover{background:#19f0ff}
.btn-run-sheet:active{background:#00c8e0}

/* ══════════════════════════════════════════════════════════
   SIM DRAWER (left slide-in)
   ══════════════════════════════════════════════════════════ */
.sim-drawer{
  position:absolute;top:0;left:0;bottom:0;z-index:800;width:270px;
  background:var(--gradient-surface);border-right:1px solid var(--border-hi);
  transform:translateX(-100%);transition:transform var(--tr-slow);
  display:flex;flex-direction:column;
  box-shadow:8px 0 32px rgba(0,0,0,.5);
  padding-top:env(safe-area-inset-top,0);
}
.sim-drawer.open{transform:translateX(0)}
.drawer-head{padding:16px;border-bottom:1px solid var(--border);flex-shrink:0;display:flex;align-items:flex-start;justify-content:space-between;background:rgba(0,0,0,.12)}
.drawer-logo{font-family:var(--mono);font-size:15px;font-weight:700;letter-spacing:3px;background:linear-gradient(135deg,var(--accent),#7dd3fc);-webkit-background-clip:text;-webkit-text-fill-color:transparent;background-clip:text}
.drawer-sub{font-size:8px;color:var(--muted-hi);letter-spacing:1.5px;text-transform:uppercase;margin-top:3px}
.drawer-close{background:none;border:none;color:var(--muted-hi);cursor:pointer;padding:4px;border-radius:var(--radius-sm);display:flex;align-items:center;transition:color var(--tr-fast),background var(--tr-fast);flex-shrink:0}
.drawer-close:hover{color:var(--text);background:var(--border)}
.drawer-body{flex:1;overflow-y:auto;overscroll-behavior:contain}
.drawer-body::-webkit-scrollbar{width:3px}
.drawer-body::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
.drawer-section{padding:12px 16px;border-bottom:1px solid var(--border)}
.drawer-section:last-child{border-bottom:none}
.drawer-label{font-size:8px;font-family:var(--mono);letter-spacing:2px;text-transform:uppercase;color:var(--muted-hi);margin-bottom:8px}
.drawer-row{display:flex;align-items:center;justify-content:space-between;padding:8px 0;border-bottom:1px solid var(--border);font-size:12px;color:var(--text)}
.drawer-row:last-child{border-bottom:none}
.drawer-goto-sim{display:flex;align-items:center;gap:8px;padding:12px 0;color:var(--accent3);font-size:12px;font-weight:600;text-decoration:none;transition:color var(--tr-fast)}
.drawer-goto-sim:hover{color:var(--accent)}

/* Toggle switch */
.tog{position:relative;width:34px;height:20px;flex-shrink:0}
.tog input{opacity:0;width:0;height:0}
.tog-s{position:absolute;inset:0;background:var(--border);border-radius:10px;cursor:pointer;border:1px solid transparent;transition:background var(--tr-med),border var(--tr-med)}
.tog-s::before{content:'';position:absolute;width:14px;height:14px;left:3px;top:2px;background:var(--muted-hi);border-radius:50%;transition:transform var(--tr-med),background var(--tr-fast)}
.tog input:checked+.tog-s{background:rgba(0,229,255,.2);border-color:var(--accent);box-shadow:0 0 10px var(--accent-glow)}
.tog input:checked+.tog-s::before{transform:translateX(14px);background:var(--accent)}

/* ══════════════════════════════════════════════════════════
   DESKTOP SIDEBARS
   ══════════════════════════════════════════════════════════ */
#desktop-left,#desktop-right{
  display:none;  /* default hidden; shown via @media below */
  position:absolute;top:12px;bottom:12px;z-index:500;width:260px;
  background:var(--glass);backdrop-filter:blur(24px) saturate(180%);
  border:1px solid var(--border-hi);border-radius:var(--radius-lg);
  flex-direction:column;overflow:hidden;
}
#desktop-left{left:10px}
#desktop-right{right:10px}
.dl-inner{flex:1;overflow-y:auto;display:flex;flex-direction:column}
.dl-inner::-webkit-scrollbar{width:3px}
.dl-inner::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
.run-row{padding:8px 10px calc(8px + env(safe-area-inset-bottom,0));border-top:1px solid var(--border);display:flex;gap:6px;margin-top:auto;position:sticky;bottom:0;background:var(--glass);backdrop-filter:blur(8px)}
.btn-run{flex:1;display:flex;align-items:center;justify-content:center;gap:8px;background:var(--accent);color:#000;border:none;border-radius:var(--radius);padding:10px;font-size:13px;font-weight:700;cursor:pointer;box-shadow:0 0 16px var(--accent-glow);transition:background var(--tr-fast)}
.btn-run:hover{background:#19f0ff}
.btn-reset-d{width:40px;height:40px;background:none;border:1px solid var(--border-hi);color:var(--muted-hi);border-radius:var(--radius);cursor:pointer;display:flex;align-items:center;justify-content:center;transition:border-color var(--tr-fast),color var(--tr-fast);flex-shrink:0}
.btn-reset-d:hover{border-color:var(--red);color:var(--red)}

/* ══════════════════════════════════════════════════════════
   SHARED WORKSPACE COMPONENTS
   ══════════════════════════════════════════════════════════ */
.ws-section{border-bottom:1px solid var(--border);padding:9px 10px}
.ws-section:last-child{border-bottom:none}
.ws-section-hd{display:flex;align-items:center;gap:7px;margin-bottom:7px}
.ws-icon{width:22px;height:22px;border-radius:50%;flex-shrink:0;display:flex;align-items:center;justify-content:center;font-size:10px;font-weight:700;font-family:var(--mono)}
.wanted-icon{background:rgba(34,197,94,.12);color:var(--green);border:1px solid rgba(34,197,94,.25)}
.ifr-icon{background:rgba(249,115,22,.12);color:var(--orange);border:1px solid rgba(249,115,22,.25)}
.mc-icon{background:rgba(167,139,250,.12);color:var(--accent3);border:1px solid rgba(167,139,250,.25)}
.ws-title{font-size:11px;font-weight:600;color:var(--text);line-height:1.2}
.ws-sub{font-size:10px;color:var(--muted);margin-top:1px}

/* Buttons */
.btn-pin{margin-left:auto;flex-shrink:0;display:flex;align-items:center;gap:4px;background:none;border:1px solid var(--border-hi);color:var(--muted-hi);border-radius:var(--radius-sm);padding:4px 8px;font-size:10px;cursor:pointer;transition:border-color var(--tr-fast),color var(--tr-fast),background var(--tr-fast);touch-action:manipulation;font-family:var(--sans)}
.btn-pin:hover,.btn-pin.active{border-color:var(--accent);color:var(--accent);background:rgba(0,229,255,.07)}
.btn-add-ifr{margin-left:auto;flex-shrink:0;display:flex;align-items:center;gap:5px;background:rgba(249,115,22,.1);border:1px solid rgba(249,115,22,.25);color:var(--orange);border-radius:var(--radius-sm);padding:4px 9px;font-size:10px;cursor:pointer;transition:background var(--tr-fast);font-family:var(--sans)}
.btn-add-ifr:hover{background:rgba(249,115,22,.2)}
.btn-add-ifr:disabled{opacity:.4;cursor:not-allowed}

/* Search */
.search-row{position:relative;margin-bottom:2px}
.search-wrap{display:flex;align-items:center;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:0 8px;gap:6px;transition:border-color var(--tr-fast),box-shadow var(--tr-fast)}
.search-wrap:focus-within{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-glow)}
.search-icon{color:var(--muted);flex-shrink:0}
.search-input{flex:1;background:none;border:none;color:var(--text);font-size:12px;padding:7px 0;outline:none;font-family:var(--sans)}
.search-input::placeholder{color:var(--muted);font-size:11px}
.search-clear{background:none;border:none;color:var(--muted);cursor:pointer;font-size:15px;line-height:1;padding:0 2px;display:none}
.search-clear.visible{display:block}

/* Autocomplete */
.autocomplete-dropdown{position:absolute;top:calc(100% + 3px);left:0;right:0;background:var(--surface2);border:1px solid var(--border-hi);border-radius:var(--radius);box-shadow:0 12px 36px rgba(0,0,0,.6);z-index:900;max-height:200px;overflow-y:auto;display:none}
.autocomplete-dropdown.open{display:block}
.ac-item{padding:8px 10px;cursor:pointer;border-bottom:1px solid var(--border);transition:background var(--tr-fast)}
.ac-item:last-child{border-bottom:none}
.ac-item:hover,.ac-item.focused{background:rgba(0,229,255,.06)}
.ac-item-name{font-size:12px;font-weight:600;display:flex;align-items:center;gap:5px}
.ac-item-detail{font-size:10px;color:var(--muted);margin-top:2px}
.ac-item-freq{color:var(--accent);font-family:var(--mono)}
.ac-svc-badge{font-family:var(--font-mono);font-size:9px;font-weight:700;border:1px solid currentColor;border-radius:3px;padding:1px 4px;opacity:.85;flex-shrink:0}
.ac-empty{padding:10px;font-size:11px;color:var(--muted);text-align:center}

/* Divider */
.divider-or{display:flex;align-items:center;gap:8px;margin:8px 0 6px;color:var(--muted);font-size:9px;letter-spacing:.06em;text-transform:uppercase}
.divider-or::before,.divider-or::after{content:'';flex:1;height:1px;background:var(--border)}

/* Param grid */
.param-grid{display:grid;grid-template-columns:1fr 1fr;gap:5px}
.param-group{display:flex;flex-direction:column;gap:2px}
.param-group.span2{grid-column:span 2}
.param-group label{font-size:8px;color:var(--muted-hi);letter-spacing:.06em;text-transform:uppercase}
.unit{color:var(--accent);font-size:8px;text-transform:none;letter-spacing:0}
.param-group input{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);color:var(--text);font-size:11px;padding:5px 7px;outline:none;width:100%;font-family:var(--mono);transition:border-color var(--tr-fast),box-shadow var(--tr-fast)}
.param-group input:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-glow)}
.param-group input::placeholder{color:var(--muted);font-size:11px;font-family:var(--sans)}

/* IFR card */
.ifr-card{border:1px solid var(--border);border-radius:var(--radius);margin-bottom:7px;overflow:hidden;transition:border-color var(--tr-fast)}
.ifr-card:hover{border-color:rgba(249,115,22,.25)}
.ifr-card-header{display:flex;align-items:center;gap:6px;padding:7px 10px;background:rgba(249,115,22,.04);border-bottom:1px solid var(--border)}
.ifr-badge{width:20px;height:20px;border-radius:50%;background:rgba(249,115,22,.12);border:1px solid rgba(249,115,22,.25);color:var(--orange);font-size:9px;font-weight:700;font-family:var(--mono);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.ifr-card-title{font-size:11px;font-weight:600;flex:1;color:var(--text)}
.btn-remove-ifr{background:none;border:none;color:var(--muted);cursor:pointer;font-size:17px;line-height:1;padding:0 3px;transition:color var(--tr-fast)}
.btn-remove-ifr:hover{color:var(--red)}
.ifr-card-body{padding:9px}

/* Mode toggle */
.mode-toggle{display:flex;background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);padding:3px;gap:2px;margin-bottom:8px}
.mode-btn{flex:1;padding:6px;border:none;border-radius:3px;background:none;color:var(--muted);font-size:11px;cursor:pointer;font-family:var(--sans);transition:all var(--tr-fast)}
.mode-btn.active{background:var(--surface2);color:var(--text);font-weight:600;box-shadow:0 1px 4px rgba(0,0,0,.4)}
.mc-hint{font-size:10px;color:var(--muted);line-height:1.5;margin-top:6px;padding:6px 8px;background:rgba(167,139,250,.06);border-radius:var(--radius-sm);border-left:2px solid rgba(167,139,250,.3)}
.verdict-badge{display:inline-flex;align-items:center;gap:3px;padding:2px 7px;border-radius:10px;font-size:10px;font-weight:700;letter-spacing:.03em;white-space:nowrap;flex-shrink:0}
.link-label{background:rgba(15,23,35,.82);color:#a0b4cc;font-size:9px;padding:1px 5px;border-radius:8px;border:1px solid rgba(255,255,255,.1);white-space:nowrap;pointer-events:none;backdrop-filter:blur(2px)}
.verdict-ok{background:rgba(34,197,94,.15);color:#22c55e;border:1px solid rgba(34,197,94,.3)}
.verdict-warn{background:rgba(234,179,8,.13);color:#eab308;border:1px solid rgba(234,179,8,.3)}
.verdict-fail{background:rgba(239,68,68,.13);color:#ef4444;border:1px solid rgba(239,68,68,.3)}
.verdict-sub{font-weight:400;opacity:.8}
.res-interpret{font-size:10px;color:var(--muted);line-height:1.5;padding:5px 10px 2px;border-left:2px solid var(--border);margin:3px 0 2px}
.res-card-header{display:flex;align-items:center;gap:6px;flex-wrap:wrap}

/* System Definition Panel section labels */
.sys-section-label {
  font-size:9px; text-transform:uppercase; letter-spacing:.08em;
  color:var(--accent3); font-family:var(--mono); font-weight:600;
  padding:6px 0 2px; border-bottom:1px solid rgba(167,139,250,.15);
  margin-bottom:2px;
}
.param-hint {
  cursor:help; color:var(--muted); font-size:9px;
  border:1px solid var(--border); border-radius:50%;
  padding:0 3px; line-height:1.2; display:inline-block;
  margin-left:2px; transition:color var(--tr-fast);
}
.param-hint:hover { color:var(--accent3); border-color:var(--accent3); }
.dist-editor{margin-top:10px;display:flex;flex-direction:column;gap:5px}
.dist-editor-title{font-size:9px;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);font-family:var(--mono);margin-bottom:2px}
.dist-row{display:flex;align-items:center;gap:6px;padding:5px 8px;background:var(--surface2);border-radius:var(--radius-sm);border:1px solid var(--border)}
.dist-label{font-size:10px;color:var(--text);min-width:110px;flex-shrink:0}
.dist-label .unit{color:var(--muted);font-size:9px}
.dist-type{flex:0 0 auto;font-size:10px;padding:2px 4px;border-radius:3px;background:var(--surface3);border:1px solid var(--border);color:var(--text);max-width:160px}
.dist-inputs{display:flex;align-items:center;gap:4px;flex:1;min-width:0}
.dist-inputs input{width:54px;font-size:10px;padding:2px 5px;border-radius:3px;background:var(--surface3);border:1px solid var(--border);color:var(--text)}
.dist-inputs input:focus{border-color:var(--accent3);outline:none}
.dist-fixed-label{font-size:9px;color:var(--muted);font-style:italic}
.dist-inputs label{font-size:9px;color:var(--muted);white-space:nowrap}

/* ══════════════════════════════════════════════════════════
   RESULT COMPONENTS
   ══════════════════════════════════════════════════════════ */
.hidden{display:none!important}
.result-empty{display:flex;flex-direction:column;align-items:center;justify-content:center;padding:36px 20px;text-align:center;color:var(--muted);gap:10px;min-height:180px}
.result-empty-icon{opacity:.4}
.result-empty-title{font-size:12px;font-weight:600;color:var(--muted-hi)}
.result-empty-sub{font-size:10px;color:var(--muted)}
.result-loading{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;color:var(--muted);font-size:11px;padding:30px}
.result-loading.hidden{display:none!important}
.spinner{width:26px;height:26px;border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;animation:spin .7s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
.result-error{margin:12px;padding:11px;border-radius:var(--radius);background:rgba(239,68,68,.08);border:1px solid rgba(239,68,68,.25);color:var(--red);font-size:11px;line-height:1.5}
.result-error.hidden{display:none!important}

/* Summary */
#result-summary,#result-summary-d{padding:10px 12px;border-bottom:1px solid var(--border)}
.summary-title{font-family:var(--mono);font-size:9px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-bottom:8px}
.summary-chips{display:flex;gap:5px;flex-wrap:wrap}
.s-chip{display:flex;flex-direction:column;align-items:center;background:var(--surface2);border:1px solid var(--border);border-radius:var(--radius-sm);padding:5px 9px;min-width:48px}
.s-chip-val{font-family:var(--mono);font-size:16px;font-weight:700;line-height:1}
.s-chip-lbl{font-size:8px;color:var(--muted);margin-top:2px;letter-spacing:.05em;text-transform:uppercase}
.chip-parah{border-color:rgba(239,68,68,.35)}.chip-parah .s-chip-val{color:var(--red)}
.chip-sedang{border-color:rgba(234,179,8,.35)}.chip-sedang .s-chip-val{color:var(--yellow)}
.chip-ringan{border-color:rgba(249,115,22,.3)}.chip-ringan .s-chip-val{color:var(--orange)}
.chip-aman{border-color:rgba(34,197,94,.25)}.chip-aman .s-chip-val{color:var(--green)}

/* Wanted info */
#result-wanted-info,#result-wanted-info-d{padding:9px 12px;border-bottom:1px solid var(--border);background:rgba(34,197,94,.03)}
.wanted-info-title{font-size:9px;text-transform:uppercase;letter-spacing:.07em;color:var(--green);opacity:.7;margin-bottom:5px}
.wanted-info-name{font-size:12px;font-weight:600;margin-bottom:5px}
.info-row{display:flex;flex-wrap:wrap;gap:4px}
.info-tag{font-size:9px;font-family:var(--mono);background:var(--surface2);border:1px solid var(--border);border-radius:3px;padding:2px 5px;color:var(--muted)}
.info-tag b{color:var(--text)}

/* Result cards */
#result-list,#result-list-d{padding:8px;display:flex;flex-direction:column;gap:7px}
.res-card{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;transition:border-color var(--tr-fast)}
.res-card:hover{border-color:var(--border-hi)}
.res-card-header{display:flex;align-items:center;gap:7px;padding:8px 10px}
.res-sev-badge{font-size:9px;font-weight:700;font-family:var(--mono);padding:2px 7px;border-radius:10px;text-transform:uppercase;letter-spacing:.05em;flex-shrink:0}
.sev-parah{background:rgba(239,68,68,.12);color:var(--red);border:1px solid rgba(239,68,68,.28)}
.sev-sedang{background:rgba(234,179,8,.1);color:var(--yellow);border:1px solid rgba(234,179,8,.28)}
.sev-ringan{background:rgba(249,115,22,.1);color:var(--orange);border:1px solid rgba(249,115,22,.25)}
.sev-aman{background:rgba(34,197,94,.08);color:var(--green);border:1px solid rgba(34,197,94,.2)}
.sev-none{background:rgba(0,229,255,.07);color:var(--accent);border:1px solid rgba(0,229,255,.18)}
.res-card-name{font-size:11px;font-weight:600;flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.res-card-freq{font-family:var(--mono);font-size:10px;color:var(--accent);flex-shrink:0}
.res-card-body{padding:7px 10px 10px;border-top:1px solid var(--border);display:flex;flex-direction:column;gap:5px}
.res-du-label{display:flex;justify-content:space-between;font-size:10px;color:var(--muted);margin-bottom:3px}
.res-du-val{font-size:12px;font-weight:700;font-family:var(--mono)}
.res-du-bar{height:3px;background:var(--border);border-radius:2px;overflow:hidden}
.res-du-fill{height:100%;border-radius:2px;transition:width .4s}
.res-meta{display:flex;flex-wrap:wrap;gap:4px}
.res-meta-tag{font-size:9px;font-family:var(--mono);background:var(--surface2);border:1px solid var(--border);border-radius:3px;padding:2px 5px;color:var(--muted)}
.res-meta-tag b{color:var(--text)}
.res-relation{font-size:9px;color:var(--muted);font-style:italic}
.res-no-candidate{padding:7px 10px 10px;border-top:1px solid var(--border);font-size:10px;color:var(--muted);font-style:italic}
.result-disclaimer{margin:6px 8px 12px;padding:7px 9px;background:rgba(107,128,153,.05);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:9px;color:var(--muted);line-height:1.5;display:flex;gap:5px;align-items:flex-start}

/* MC Progress */
.mc-progress-wrap{margin:10px 12px 0;padding:10px 11px;background:rgba(167,139,250,.06);border:1px solid rgba(167,139,250,.18);border-radius:var(--radius);display:flex;flex-direction:column;gap:5px}
.mc-progress-wrap.hidden{display:none!important}
.mc-progress-header{display:flex;justify-content:space-between;align-items:center}
.mc-progress-title{font-family:var(--mono);font-size:9px;letter-spacing:.06em;text-transform:uppercase;color:var(--accent3)}
#mc-progress-label,#mc-progress-label-d{font-size:10px;color:var(--muted);font-family:var(--mono)}
.mc-progress-bar{height:2px;background:var(--border);border-radius:2px;overflow:hidden}
.mc-progress-fill{height:100%;background:var(--accent3);border-radius:2px;width:0%;transition:width .1s}

/* MC extras */
.pi-display{display:flex;align-items:baseline;gap:6px;margin-bottom:4px}
.pi-value{font-family:var(--mono);font-size:20px;font-weight:700;line-height:1}
.pi-label{font-size:10px;color:var(--muted)}
.pi-req{font-size:9px;color:var(--muted);margin-top:2px}
.stats-row{display:flex;gap:3px;flex-wrap:wrap;margin-bottom:5px}
.stat-chip{background:var(--surface2);border:1px solid var(--border);border-radius:3px;padding:2px 6px;font-size:9px;font-family:var(--mono);color:var(--muted)}
.stat-chip b{color:var(--text)}
.chart-wrap{position:relative;height:90px;margin-top:4px}
.chart-tabs{display:flex;gap:3px;margin-bottom:4px}
.chart-tab{font-size:9px;font-family:var(--mono);padding:2px 7px;border:1px solid var(--border);border-radius:3px;background:none;color:var(--muted);cursor:pointer;transition:border-color var(--tr-fast),color var(--tr-fast),background var(--tr-fast)}
.chart-tab.active{border-color:var(--accent3);color:var(--accent3);background:rgba(167,139,250,.08)}

/* ══════════════════════════════════════════════════════════
   LEAFLET OVERRIDES
   ══════════════════════════════════════════════════════════ */
.leaflet-container{background:var(--bg)}
.leaflet-control-zoom{border:1px solid var(--border-hi)!important;border-radius:var(--radius)!important;overflow:hidden}
.leaflet-control-zoom a{background:var(--glass-hi)!important;color:var(--text)!important;border-bottom:1px solid var(--border)!important;backdrop-filter:blur(8px);width:38px!important;height:38px!important;line-height:38px!important;font-size:16px!important}
.leaflet-control-zoom a:hover{background:var(--surface2)!important;color:var(--accent)!important}
.leaflet-control-attribution{background:rgba(8,11,16,.6)!important;color:var(--muted)!important;font-size:9px!important;backdrop-filter:blur(4px)}
.leaflet-control-attribution a{color:var(--muted-hi)!important}

/* ── 3-Panel Tab Bar (SEAMCAT-like navigation) ─────────────── */
.three-panel-tabs {
  position:fixed; bottom:0; left:0; right:0;
  display:flex; height:52px; z-index:900;
  background:var(--surface1); border-top:1px solid var(--border);
  padding-bottom:env(safe-area-inset-bottom,0);
}
.tpt-btn {
  flex:1; display:flex; flex-direction:column; align-items:center;
  justify-content:center; gap:3px; border:none; background:none;
  color:var(--muted); font-size:9px; font-family:var(--sans);
  cursor:pointer; transition:color var(--tr-fast); padding:0;
  letter-spacing:.04em; text-transform:uppercase;
}
.tpt-btn svg { opacity:.65; transition:opacity var(--tr-fast) }
.tpt-btn:hover,.tpt-btn.active { color:var(--accent3) }
.tpt-btn:hover svg,.tpt-btn.active svg { opacity:1 }
.tpt-btn.active { font-weight:700 }

/* ══════════════════════════════════════════════════════════
   RESPONSIVE — satu layout untuk semua ukuran layar
   Desktop sidebar dihapus; semua kontrol via drawer/sheet
   ══════════════════════════════════════════════════════════ */

/* Sidebar desktop — tidak dipakai sama sekali */
#desktop-left,#desktop-right,
.btn-panel-toggle,.btn-panel-toggle-right { display:none!important }

/* FAB cluster selalu tampil */
.fab-cluster { display:flex; right:10px; bottom:calc(52px + env(safe-area-inset-bottom,0)) }
.status-pill  { display:flex; padding:5px 9px }
.float-logo   { top:10px; left:10px; padding:6px 10px; gap:6px }
.logo-mark    { font-size:12px; letter-spacing:2px }
.fab-btn      { width:44px; height:44px }
.fab-mode-pill{ height:44px }

/* Result sheet — tinggi lebih besar di layar lebar */
#result-sheet { max-height:88dvh }
#setup-sheet  { max-height:94dvh }

/* Desktop ≥ 1100px: result sheet bisa lebih tinggi, autocomplete lebih panjang */
@media(min-width:1100px){
  #result-sheet { max-height:80dvh; width:480px; right:16px; left:auto; border-radius:16px 16px 0 0 }
  #setup-sheet  { max-height:80dvh; width:340px; left:16px; right:auto; border-radius:16px 16px 0 0 }
  .autocomplete-dropdown { max-height:240px }
  .map-hint     { bottom:20px }
}

/* Landscape mobile */
@media(max-width:919px) and (orientation:landscape){
  .fab-cluster { flex-direction:row; bottom:12px; right:10px }
  .logo-sub    { display:none }
  #setup-sheet,#result-sheet { max-height:92dvh }
}

/* Tiny ≤ 380px */
@media(max-width:380px){
  .logo-sub  { display:none }
  .logo-mark { font-size:11px; letter-spacing:1.5px }
  .map-hint  { bottom:calc(140px + env(safe-area-inset-bottom,0)) }
  .autocomplete-dropdown { max-height:150px }
  .chart-wrap { height:80px }
}
  .fab-btn{width:40px;height:40px}
  .fab-mode-pill{height:40px}
  .float-logo{padding:5px 8px;gap:4px}
}

/* ── Export / Skenario buttons ── */
.result-actions {
  display: flex;
  gap: 6px;
  padding: 8px 0 4px;
  flex-wrap: wrap;
}
.btn-action-export {
  display: inline-flex;
  align-items: center;
  gap: 5px;
  padding: 5px 11px;
  background: transparent;
  border: 1px solid var(--border);
  border-radius: 5px;
  color: var(--accent);
  font-size: 10px;
  font-family: var(--font-mono);
  letter-spacing: .5px;
  cursor: pointer;
  transition: background .15s, border-color .15s;
}
.btn-action-export:hover {
  background: rgba(0,229,255,.07);
  border-color: var(--accent);
}
.btn-action-pdf {
  color: #ff6b6b;
}
.btn-action-pdf:hover {
  background: rgba(255,107,107,.07);
  border-color: #ff6b6b;
}
.btn-action-sej {
  color: #a78bfa;
}
.btn-action-sej:hover {
  background: rgba(167,139,250,.07);
  border-color: #a78bfa;
}
.drawer-row-btns {
  display: flex;
  gap: 6px;
  flex-wrap: wrap;
}
.drawer-action-btn {
  flex: 1;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 5px;
  padding: 6px 10px;
  background: transparent;
  border: 1px solid var(--border);
  border-radius: 5px;
  color: var(--muted);
  font-size: 10px;
  font-family: var(--font-mono);
  letter-spacing: .5px;
  cursor: pointer;
  transition: background .15s, color .15s, border-color .15s;
}
.drawer-action-btn:hover {
  background: rgba(0,229,255,.07);
  color: var(--accent);
  border-color: var(--accent);
}

/* ── Param select (time-pct, etc.) ── */
.param-select {
  width: 100%;
  padding: 6px 8px;
  background: var(--surface2, #1e293b);
  border: 1px solid var(--border);
  border-radius: 5px;
  color: var(--text);
  font-size: 11px;
  font-family: var(--font-mono, monospace);
  cursor: pointer;
  appearance: none;
  -webkit-appearance: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' fill='none'%3E%3Cpath d='M1 1l4 4 4-4' stroke='%2364748b' stroke-width='1.4' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 8px center;
  padding-right: 24px;
}
.param-select:focus {
  outline: none;
  border-color: var(--accent);
}
.param-select option {
  background: #1e293b;
  color: var(--text);
}

/* ── Terrain badges ── */
.terrain-ok {
  color: #22c55e !important;
  border-color: rgba(34,197,94,.3) !important;
}
.terrain-obs {
  color: #f97316 !important;
  border-color: rgba(249,115,22,.3) !important;
}

/* ── Antenna directional badge ── */
.antenna-dir {
  color: #a78bfa !important;
  border-color: rgba(167,139,250,.3) !important;
}

/* ── Victim Receivers ── */
.victim-icon {
  background: linear-gradient(135deg, #7c3aed, #a78bfa);
}
.victim-section-hint {
  font-size: 9.5px;
  color: var(--muted);
  line-height: 1.5;
  padding: 4px 0 6px;
  font-family: var(--font-mono);
}

/* Victim breakdown inside result card */
.victim-breakdown {
  margin-top: 8px;
  border-top: 1px solid var(--border);
  padding-top: 6px;
  font-size: 10px;
  font-family: var(--font-mono);
}
.victim-breakdown-hd {
  color: var(--accent);
  font-size: 9px;
  letter-spacing: .5px;
  margin-bottom: 5px;
  text-transform: uppercase;
}
.victim-row {
  display: grid;
  grid-template-columns: 1fr auto auto;
  gap: 4px 10px;
  align-items: center;
  padding: 2px 0;
  border-bottom: 1px solid rgba(255,255,255,.04);
}
.victim-row:last-child { border-bottom: none; }
.victim-row-hd {
  color: var(--muted);
  font-size: 9px;
  text-transform: uppercase;
  letter-spacing: .4px;
  margin-bottom: 2px;
}
.victim-name-lbl {
  color: var(--text);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}
.victim-du { font-weight: 600; text-align: right; }
.victim-margin { text-align: right; font-size: 9px; }
.victim-margin.ok  { color: #22c55e; }
.victim-margin.vio { color: #ef4444; }
.victim-worst-note {
  margin-top: 5px;
  font-size: 9px;
  color: var(--muted);
}
.victim-worst-note b { color: #f97316; }

/* ── History Panel ─────────────────────────────────────────── */
.history-panel {
  position: fixed; inset: 0; z-index: 1200;
  background: #0d1b2a;
  display: flex; flex-direction: column;
  overflow: hidden;
}
@media (min-width: 920px) {
  .history-panel {
    inset: auto; right: 0; top: 0; bottom: 0;
    width: 480px;
    border-left: 1px solid #1e2a3a;
    box-shadow: -4px 0 24px rgba(0,0,0,.5);
  }
}
.history-head {
  display: flex; align-items: center; gap: 8px;
  padding: 14px 16px 10px;
  border-bottom: 1px solid #1e2a3a;
  flex-shrink: 0;
}
.history-title { font-size: 14px; font-weight: 700; color: #c8daf0; flex: 1; }
.history-filters { display: flex; gap: 4px; }
.hist-filter {
  background: #1a2840; border: 1px solid #2a3f5a; color: #7a9bc0;
  font-size: 11px; padding: 3px 10px; border-radius: 12px; cursor: pointer;
}
.hist-filter.active { background: #1d4ed8; border-color: #3b82f6; color: #fff; }
.history-close {
  background: none; border: none; color: #7a9bc0; font-size: 16px;
  cursor: pointer; padding: 4px 8px; border-radius: 4px;
}
.history-close:hover { background: #1e2a3a; color: #c8daf0; }
.history-body { flex: 1; overflow-y: auto; padding: 10px 12px; display: flex; flex-direction: column; gap: 8px; }
.hist-loading, .hist-empty { color: #5a7a9a; font-size: 13px; text-align: center; padding: 32px 0; }
.hist-card {
  background: #111e2e; border: 1px solid #1e2a3a; border-radius: 8px;
  padding: 10px 12px; cursor: pointer; transition: border-color .15s;
}
.hist-card:hover { border-color: #3b82f6; }
.hist-card-top { display: flex; align-items: center; gap: 6px; margin-bottom: 4px; }
.hist-badge-mode {
  font-size: 9px; font-weight: 700; padding: 2px 6px; border-radius: 10px;
  background: #1a2840; color: #60a5fa; border: 1px solid #2a3f5a;
  text-transform: uppercase;
}
.hist-badge-mode.mc { background: #1a1f40; color: #a78bfa; border-color: #4c3a8a; }
.hist-wanted-name { font-size: 13px; font-weight: 600; color: #c8daf0; flex: 1; }
.hist-time { font-size: 10px; color: #5a7a9a; }
.hist-card-meta { display: flex; gap: 6px; flex-wrap: wrap; margin-top: 4px; }
.hist-meta-tag {
  font-size: 10px; color: #7a9bc0; background: #0d1b2a;
  border: 1px solid #1e2a3a; border-radius: 4px; padding: 1px 6px;
}
.hist-sev-row { display: flex; gap: 4px; margin-top: 6px; }
.hist-sev-chip {
  font-size: 10px; padding: 1px 6px; border-radius: 8px; font-weight: 600;
}
.hist-sev-chip.parah  { background: rgba(239,68,68,.15); color: #ef4444; }
.hist-sev-chip.sedang { background: rgba(234,179,8,.15);  color: #eab308; }
.hist-sev-chip.ringan { background: rgba(249,115,22,.15); color: #f97316; }
.hist-sev-chip.aman   { background: rgba(34,197,94,.15);  color: #22c55e; }
.hist-card-actions { display: flex; gap: 6px; margin-top: 8px; }
.hist-action-btn {
  flex: 1; font-size: 11px; padding: 5px 0; border-radius: 6px; cursor: pointer;
  border: 1px solid #2a3f5a; background: #1a2840; color: #7a9bc0;
  transition: background .15s;
}
.hist-action-btn:hover { background: #233554; color: #c8daf0; }
.hist-action-btn.del { border-color: #5a1a1a; color: #ef4444; }
.hist-action-btn.del:hover { background: #3a1010; }
.hist-load-more {
  width: 100%; font-size: 12px; padding: 8px; border-radius: 6px; cursor: pointer;
  border: 1px dashed #2a3f5a; background: none; color: #5a7a9a; margin-top: 4px;
}
.hist-load-more:hover { color: #c8daf0; border-color: #4a6a8a; }

/* ── PoI Aggregate Banner ──────────────────────────────────── */
.pi-aggregate-banner {
  display: flex; align-items: center; gap: 12px;
  background: #161b22; border: 1.5px solid #30363d; border-radius: 8px;
  padding: 10px 14px; margin-bottom: 10px;
}
.pia-value { font-size: 28px; font-weight: 700; line-height: 1; min-width: 56px; }
.pia-label { font-size: 12px; font-weight: 600; color: #c9d1d9; }
.pia-desc  { font-size: 11px; color: #8b949e; margin-top: 2px; }

/* ── Model tag badge ───────────────────────────────────────── */
.model-tag { background: #1a2a3a; color: #79c0ff; border-color: #1f6feb; }

/* ── MCL badge ─────────────────────────────────────────────── */
.mcl-tag  { font-weight: 600; }
.mcl-ok   { background: #0d2b0d; color: #56d364; border-color: #238636; }
.mcl-vio  { background: #2d1b1b; color: #ffa657; border-color: #f85149; }
.mcl-inf  { background: #1a1a2e; color: #8b949e; border-color: #30363d; }

/* ── Blocking badge & chip ─────────────────────────────────── */
.blocking-tag  { background: #2d0f0f; color: #ff6b6b; border-color: #f85149; font-weight: 700; }
.chip-blocking { background: #2d0f0f; border: 1px solid #f85149; }
.chip-blocking .s-chip-val { color: #f85149; }
.chip-blocking .s-chip-lbl { color: #ff6b6b; }

/* ── IMD Section ───────────────────────────────────────────── */
.imd-section  { background: #1a1a0a; border: 1.5px solid #9e6a03; border-radius: 8px; padding: 10px 14px; margin-bottom: 10px; }
.imd-title    { font-size: 13px; font-weight: 700; color: #e3b341; margin-bottom: 4px; }
.imd-desc     { font-size: 11px; color: #8b949e; margin-bottom: 8px; }
.imd-row      { display: flex; flex-wrap: wrap; gap: 6px; align-items: baseline; padding: 4px 0; border-bottom: 1px solid #2d2d1a; font-size: 12px; }
.imd-row:last-child { border-bottom: none; }
.imd-order    { font-weight: 700; color: #ffa657; min-width: 32px; }
.imd-pair     { color: #c9d1d9; flex: 1; min-width: 0; }
.imd-prod     { color: #e3b341; white-space: nowrap; }
.imd-delta    { color: #8b949e; font-size: 11px; }

/* ── Emission mask badge ───────────────────────────────────── */
.emission-tag { background: #1a0a2a; color: #d2a8ff; border-color: #8957e5; font-weight: 600; }

/* ══════════════════════════════════════════
   BATCH COMPARE
   ══════════════════════════════════════════ */
.drawer-action-btn--batch { color: var(--accent3); }
.drawer-action-btn--batch:hover { border-color: var(--accent3); background: rgba(187,134,252,.08); }

.batch-scrim {
  display: none;
  position: fixed; inset: 0;
  background: rgba(0,0,0,.6);
  z-index: 1100;
  backdrop-filter: blur(2px);
}
.batch-scrim.open { display: block; }

.batch-modal {
  display: none;
  position: fixed;
  top: 50%; left: 50%;
  transform: translate(-50%, -50%);
  width: min(96vw, 820px);
  max-height: 90vh;
  background: var(--surface);
  border: 1px solid var(--border);
  border-radius: 10px;
  z-index: 1101;
  flex-direction: column;
  overflow: hidden;
  box-shadow: 0 20px 60px rgba(0,0,0,.5);
}
.batch-modal.open { display: flex; }

.batch-head {
  display: flex; align-items: flex-start; justify-content: space-between;
  padding: 16px 18px 12px;
  border-bottom: 1px solid var(--border);
  flex-shrink: 0;
}
.batch-title { font-size: 13px; font-weight: 600; color: var(--fg); letter-spacing: .3px; }
.batch-sub   { font-size: 10px; color: var(--muted); margin-top: 2px; }
.batch-close {
  background: none; border: none; color: var(--muted); cursor: pointer;
  padding: 2px; border-radius: 4px;
  transition: color .15s;
}
.batch-close:hover { color: var(--fg); }

.batch-body { padding: 16px 18px; overflow-y: auto; display: flex; flex-direction: column; gap: 14px; }

.batch-drop-zone {
  border: 1.5px dashed var(--border);
  border-radius: 8px;
  padding: 24px 16px;
  display: flex; flex-direction: column; align-items: center; gap: 8px;
  transition: border-color .15s, background .15s;
  cursor: pointer;
}
.batch-drop-zone.drag-over {
  border-color: var(--accent);
  background: rgba(0,229,255,.05);
}
.batch-drop-text { font-size: 12px; color: var(--muted-hi); }
.batch-drop-sub  { font-size: 10px; color: var(--muted); }
.batch-pick-btn {
  padding: 5px 14px; background: transparent;
  border: 1px solid var(--border); border-radius: 5px;
  color: var(--accent); font-size: 11px; cursor: pointer;
  font-family: var(--font-mono);
  transition: background .15s, border-color .15s;
}
.batch-pick-btn:hover { background: rgba(0,229,255,.08); border-color: var(--accent); }

.batch-file-list { display: flex; flex-direction: column; gap: 4px; }
.batch-file-item {
  display: flex; align-items: center; justify-content: space-between;
  padding: 7px 10px;
  background: var(--surface2);
  border: 1px solid var(--border);
  border-radius: 5px;
  font-size: 11px;
}
.batch-file-item .bfi-name { color: var(--muted-hi); font-family: var(--font-mono); }
.batch-file-item .bfi-meta { color: var(--muted); font-size: 10px; }
.batch-file-item .bfi-err  { color: #ef4444; font-size: 10px; }
.batch-file-item .bfi-rm {
  background: none; border: none; color: var(--muted); cursor: pointer; font-size: 14px; line-height: 1; padding: 0 2px;
}
.batch-file-item .bfi-rm:hover { color: #ef4444; }

.batch-actions { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; }
.batch-run-btn {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 7px 16px;
  background: var(--accent); color: #000;
  border: none; border-radius: 6px;
  font-size: 11px; font-weight: 600; font-family: var(--font-mono);
  cursor: pointer; transition: opacity .15s;
}
.batch-run-btn:disabled { opacity: .35; cursor: not-allowed; }
.batch-run-btn:not(:disabled):hover { opacity: .85; }
.batch-clear-btn {
  background: none; border: 1px solid var(--border);
  border-radius: 6px; padding: 7px 12px;
  color: var(--muted); font-size: 11px; cursor: pointer;
  font-family: var(--font-mono);
  transition: color .15s, border-color .15s;
}
.batch-clear-btn:hover { color: #ef4444; border-color: #ef4444; }

.batch-progress { display: flex; flex-direction: column; gap: 6px; }
.batch-progress.hidden { display: none; }
.batch-progress-bar { height: 4px; background: var(--surface2); border-radius: 2px; overflow: hidden; }
.batch-progress-fill { height: 100%; background: var(--accent); border-radius: 2px; transition: width .25s; width: 0; }
.batch-progress-label { font-size: 10px; color: var(--muted); font-family: var(--font-mono); }

.batch-result-wrap.hidden { display: none; }
.batch-result-wrap { display: flex; flex-direction: column; gap: 8px; }
.batch-result-toolbar {
  display: flex; align-items: center; justify-content: space-between;
  gap: 8px;
}
.batch-result-title { font-size: 11px; color: var(--muted-hi); font-family: var(--font-mono); }
.batch-export-csv-btn {
  background: none; border: 1px solid var(--border);
  border-radius: 5px; padding: 4px 10px;
  color: var(--accent); font-size: 10px;
  font-family: var(--font-mono); cursor: pointer;
  transition: background .15s, border-color .15s;
}
.batch-export-csv-btn:hover { background: rgba(0,229,255,.07); border-color: var(--accent); }

.batch-export-pdf-btn {
  background: none; border: 1px solid rgba(99,102,241,.4);
  border-radius: 5px; padding: 4px 10px;
  color: #818cf8; font-size: 10px;
  font-family: var(--font-mono); cursor: pointer;
  transition: background .15s, border-color .15s;
}
.batch-export-pdf-btn:hover { background: rgba(99,102,241,.08); border-color: #818cf8; }

.batch-table-wrap { overflow-x: auto; border-radius: 6px; border: 1px solid var(--border); }
.batch-table {
  width: 100%; border-collapse: collapse;
  font-size: 10.5px; font-family: var(--font-mono);
}
.batch-table th {
  background: var(--surface2);
  color: var(--muted); font-weight: 600;
  padding: 7px 10px;
  text-align: left;
  border-bottom: 1px solid var(--border);
  white-space: nowrap;
  position: sticky; top: 0;
}
.batch-table td {
  padding: 6px 10px;
  border-bottom: 1px solid rgba(255,255,255,.05);
  color: var(--muted-hi);
  white-space: nowrap;
}
.batch-table tr:last-child td { border-bottom: none; }
.batch-table tr:hover td { background: rgba(255,255,255,.03); }
.batch-table .sev-parah  { color: #ef4444; font-weight: 600; }
.batch-table .sev-sedang { color: #eab308; font-weight: 600; }
.batch-table .sev-ringan { color: #f97316; font-weight: 600; }
.batch-table .sev-aman   { color: #22c55e; font-weight: 600; }
.batch-table .td-scenario { color: var(--accent3); max-width: 150px; overflow: hidden; text-overflow: ellipsis; }
.batch-table .td-num { text-align: right; }

/* ── Region Climate Info ────────────────────────────────────── */
.region-info-box {
  background: var(--surface2);
  border: 1px solid var(--border);
  border-radius: 5px;
  padding: 7px 10px;
  font-size: 10px;
  font-family: var(--font-mono);
  color: var(--muted-hi);
  line-height: 1.7;
}
.region-info-box .rib-row { display: flex; justify-content: space-between; gap: 8px; }
.region-info-box .rib-key { color: var(--muted); }
.region-info-box .rib-val { color: var(--accent); font-weight: 600; }
