:root{
  --plane:#0d0d0d;--surface:#1a1a19;--surface-2:#222220;
  --ink:#fff;--ink-2:#c3c2b7;--muted:#898781;
  --grid:#2c2c2a;--axis:#383835;--ring:rgba(255,255,255,0.10);
  --s1:#3987e5;--s2:#d95926;--s3:#199e70;--s4:#c98500;--s5:#d55181;--s7:#9085e9;
  --good:#0ca30c;--warn:#fab219;--serious:#ec835a;--critical:#d03b3b;--radius:14px;
  --link:#6db3ff; /* odkazy v tmavém motivu – světlá modrá, čitelná i po navštívení */
}
:root[data-theme="light"]{
  --plane:#f9f9f7;--surface:#fcfcfb;--surface-2:#fff;--ink:#0b0b0b;--ink-2:#52514e;--muted:#898781;
  --grid:#e1e0d9;--axis:#c3c2b7;--ring:rgba(11,11,11,0.10);
  --s1:#2a78d6;--s2:#eb6834;--s3:#1baf7a;--s4:#eda100;--s5:#e87ba4;--s7:#4a3aa7;
  --link:#1e63c7; /* odkazy ve světlém motivu – tmavší modrá */
}
/* odkazy: jednotná barva pro všechny stavy (fix nečitelné navštívené tmavě modré) */
.lnk,a.lnk{color:var(--link);text-decoration:underline;cursor:pointer}
.lnk:visited,a.lnk:visited{color:var(--link)}
.lnk:hover,a.lnk:hover{filter:brightness(1.15)}
main a:not(.btn){color:var(--link)} main a:not(.btn):visited{color:var(--link)}
*{box-sizing:border-box}
body{margin:0;background:var(--plane);color:var(--ink);font-family:system-ui,-apple-system,"Segoe UI",sans-serif;font-size:14px;line-height:1.45}
.top{position:sticky;top:0;z-index:20;background:var(--plane);border-bottom:1px solid var(--ring);padding:12px 20px;display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.brand{font-weight:700;font-size:16px}.brand span{color:var(--muted);font-weight:400;font-size:12px}
nav.tabs{display:flex;gap:6px;flex-wrap:wrap}
nav.tabs button{background:var(--surface);color:var(--ink-2);border:1px solid var(--ring);padding:7px 12px;border-radius:999px;cursor:pointer;font-size:13px}
nav.tabs button.active{background:var(--s1);color:#fff;border-color:transparent}
.spacer{margin-left:auto}
.btn{background:var(--s1);color:#fff;border:0;border-radius:8px;padding:9px 14px;font-size:13px;cursor:pointer}
.btn.ghost{background:var(--surface-2);color:var(--ink-2);border:1px solid var(--ring)}
.btn.good{background:var(--good)}.btn.sm{padding:5px 10px;font-size:12px}

/* ===== Layout A: postranní panel + topbar ===== */
.applayout{display:grid;grid-template-columns:250px 1fr;min-height:100vh}
.side{background:var(--surface);border-right:1px solid var(--grid);padding:14px 12px;position:sticky;top:0;height:100vh;overflow-y:auto}
.side-brand{font-weight:700;font-size:15px;padding:4px 8px 12px}.side-brand span{color:var(--muted);font-weight:400;font-size:12px}
/* Plány / mapy budov */
.planedit{display:grid;grid-template-columns:220px minmax(0,1fr);gap:14px;align-items:start}
@media(max-width:820px){.planedit{grid-template-columns:1fr}}
.planpool{max-height:78vh;overflow:auto}
.poolitem{display:flex;align-items:center;gap:8px;padding:7px 8px;border:1px solid var(--ring);border-radius:8px;margin-bottom:6px;cursor:pointer;font-size:13px;background:var(--surface-2)}
.poolitem:hover{border-color:var(--s1)}
.poolitem .pl-dot{width:12px;height:12px;border-radius:50%;flex:0 0 auto}
/* Leaflet plán (CRS.Simple) — zoom/pan */
.planmap{width:100%;height:72vh;min-height:380px;border:1px solid var(--ring);border-radius:8px;background:#0d1117}
.planmap .leaflet-container{background:#0d1117;border-radius:8px;font:inherit}
.planmk{background:transparent!important;border:0!important}
.pl-tt{background:rgba(13,17,23,.8);border:0;color:#fff;font-size:11px;box-shadow:none;padding:1px 6px;white-space:nowrap}
.pl-tt.leaflet-tooltip-right:before{border-right-color:rgba(13,17,23,.8)}
/* GPS: barevná tečka čidla, shlukový pin budovy (počet + nejhorší stav), seznam ve shluku */
.gpsmk{background:transparent!important;border:0!important}
.gps-dot{display:block;width:16px;height:16px;border-radius:50%;border:2px solid #0d1117;box-shadow:0 1px 4px rgba(0,0,0,.6)}
.gps-cl{display:grid;place-items:center;width:34px;height:34px;border-radius:50%;border:2px solid #0d1117;color:#fff;font-weight:700;font-size:13px;box-shadow:0 2px 7px rgba(0,0,0,.6)}
.clrow{display:flex;align-items:center;gap:8px;padding:5px 0;border-bottom:1px solid var(--grid);font-size:13px}
.clrow:last-child{border-bottom:0}
/* bublina čidla v Leaflet popupu (u bodu) — tmavý motiv + aktuální hodnoty */
.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:var(--surface-2);color:var(--fg);box-shadow:0 8px 28px rgba(0,0,0,.55)}
.leaflet-popup-content{margin:11px 13px;font:inherit}
.leaflet-popup-close-button{color:var(--muted)!important}
.bubble .bub-h{display:flex;align-items:center;gap:8px;font-size:14px}
.bub-ic{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:50%;flex:0 0 auto;box-shadow:0 1px 3px rgba(0,0,0,.4)}
.bub-ic svg{width:15px;height:15px}
.bub-vals{margin-top:8px;display:flex;flex-direction:column;gap:2px}
.bub-v{display:flex;justify-content:space-between;gap:14px;font-size:13px;border-bottom:1px dashed var(--grid);padding:2px 0}
.bub-v span{color:var(--muted)}
.planstage{position:relative;width:100%;background:#0d1117;border:1px solid var(--ring);border-radius:8px;overflow:hidden;max-height:80vh;touch-action:none}
.planstage .planbg{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;user-select:none;pointer-events:none}
.planpin{position:absolute;transform:translate(-50%,-50%);display:flex;align-items:center;gap:5px;z-index:2;white-space:nowrap}
.planpin.editable{cursor:grab}
.planpin.dragging{cursor:grabbing;z-index:5;opacity:.9}
.planpin .pl-dot{width:16px;height:16px;border-radius:50%;border:2px solid #0d1117;box-shadow:0 1px 4px rgba(0,0,0,.55);flex:0 0 auto}
.pl-ic{width:30px;height:30px;border-radius:50%;border:2px solid #0d1117;box-shadow:0 1px 5px rgba(0,0,0,.55);display:grid;place-items:center;line-height:1;flex:0 0 auto}
.pl-ic svg{width:17px;height:17px}
.planpin .pl-lbl{font-size:11px;background:rgba(13,17,23,.78);color:#fff;padding:1px 6px;border-radius:6px;max-width:130px;overflow:hidden;text-overflow:ellipsis}
.billhead{display:flex;justify-content:space-between;align-items:flex-start;gap:16px;flex-wrap:wrap;padding:0 2px 14px;margin-bottom:12px;border-bottom:1px solid var(--ring)}
.billhead .bh-logo{max-height:64px;max-width:230px}
.billhead .bh-info{text-align:right;font-size:12.5px;line-height:1.55;color:var(--muted)}
.side-brand.has-logo{display:flex;align-items:center;flex-wrap:wrap;gap:6px}
.side-brand .brandlogo{max-height:32px;max-width:160px;display:block}
.side-brand .brandplat{font-size:10px;color:var(--muted);font-weight:500;letter-spacing:.02em}
.sgrp{margin:13px 0 4px;padding:0 8px;font-size:10px;letter-spacing:.13em;text-transform:uppercase;color:var(--muted)}
.sitem{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:9px;color:var(--ink-2);cursor:pointer;font-size:13.5px;margin:1px 0;border:0;background:none;width:100%;text-align:left;font-family:inherit}
.sitem:hover{background:var(--surface-2)}
.sitem.on{background:rgba(57,135,229,.16);color:var(--ink);font-weight:600}
.sitem .ic{width:18px;text-align:center;opacity:.9;flex:0 0 auto}
.sitem .cnt{margin-left:auto;font-size:11px;color:var(--muted);background:var(--surface-2);border-radius:10px;padding:0 7px}
.sitem.on .cnt{color:#cfe0f5}
/* ===== Stromová navigace (návrh 4) ===== */
.snode-wrap{margin:1px 0}
.snode{display:flex;align-items:center;gap:9px;width:100%;padding:9px 8px;border:0;background:none;color:var(--ink);font-family:inherit;font-size:13.5px;font-weight:600;cursor:pointer;border-radius:9px;text-align:left}
.snode:hover{background:var(--surface-2)}
.snode .schev{display:inline-flex;align-items:center;color:var(--muted);transition:transform .18s ease;flex:0 0 auto}
.snode-wrap.open>.snode .schev{transform:rotate(90deg);color:var(--ink-2)}
.snode .sic{width:20px;text-align:center;flex:0 0 auto;opacity:.95}
.snode .sl{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.snode .scnt{font-size:11px;color:var(--muted);flex:0 0 auto;font-weight:500}
.schildren{display:none;margin:2px 0 7px 17px;padding-left:8px;border-left:1px solid var(--grid)}
.snode-wrap.open>.schildren{display:block}
.schildren .sitem{gap:9px;padding:7px 10px;font-size:13px;border-radius:0 8px 8px 0}
.schildren .sitem .sdot{width:6px;height:6px;border-radius:50%;background:var(--muted);flex:0 0 auto;opacity:.55;transition:.15s}
.schildren .sitem.on .sdot{background:#3987e5;opacity:1;box-shadow:0 0 0 3px rgba(57,135,229,.2)}
/* ===== Demo režim ===== */
.demobar{display:flex;align-items:center;gap:14px;justify-content:space-between;background:linear-gradient(90deg,#3a2a00,#2a2410);border-bottom:1px solid var(--ring);color:#f2d98a;padding:9px 20px;font-size:13px}
.demobar b{color:#ffd970}
.demobar .btn{background:#c98500;border-color:transparent;color:#151006;font-weight:700;white-space:nowrap}
.demobar .btn:hover{background:#e0980a}
.appmain{min-width:0;display:flex;flex-direction:column}
.topbar{position:sticky;top:0;z-index:20;background:var(--plane);border-bottom:1px solid var(--ring);padding:10px 20px;display:flex;align-items:center;gap:12px}
.menubtn{display:none;background:var(--surface);border:1px solid var(--ring);color:var(--ink);border-radius:9px;padding:6px 11px;font-size:16px;cursor:pointer;line-height:1}
.topttl{font-weight:650;font-size:15px;display:none}
.scrim{display:none}
main{max-width:1180px;margin:0 auto;padding:22px 20px 70px;width:100%}
.view{display:none}.view.active{display:block}

/* MOBIL/tablet: sidebar → vysouvací zásuvka (drawer) přes ☰ */
@media(max-width:860px){
  .applayout{grid-template-columns:1fr}
  .side{position:fixed;left:0;top:0;bottom:0;width:272px;z-index:200;transform:translateX(-100%);transition:transform .22s ease}
  .applayout.drawer-open .side{transform:translateX(0);box-shadow:0 0 40px rgba(0,0,0,.5)}
  .scrim{display:block;position:fixed;inset:0;background:rgba(0,0,0,.5);z-index:150;opacity:0;pointer-events:none;transition:opacity .2s}
  .applayout.drawer-open .scrim{opacity:1;pointer-events:auto}
  .menubtn{display:inline-block}
  .topttl{display:inline-block}
}
.mhead{margin:2px 0 16px}.mhead h1{font-size:20px;margin:0 0 4px}.mhead p{margin:0;color:var(--muted)}
.grid{display:grid;gap:16px}.cols-3{grid-template-columns:repeat(3,1fr)}.cols-2{grid-template-columns:1fr 1fr}.cols-21{grid-template-columns:1.6fr 1fr}
@media(max-width:900px){.cols-3,.cols-2,.cols-21{grid-template-columns:1fr}}
.card{background:var(--surface);border:1px solid var(--ring);border-radius:var(--radius);padding:16px}
.card h3{margin:0 0 2px;font-size:14px}.card .sub{color:var(--muted);font-size:12px;margin-bottom:10px}
.kpi{display:flex;align-items:baseline;gap:8px}.kpi .val{font-size:30px;font-weight:650}.kpi .unit{color:var(--ink-2);font-size:15px}
.spread{display:flex;justify-content:space-between;align-items:center;gap:10px}
.row{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.muted{color:var(--muted)}
.chip{display:inline-flex;align-items:center;gap:6px;font-size:12px;padding:2px 9px;border-radius:999px;border:1px solid var(--ring)}
.dot{width:8px;height:8px;border-radius:50%}
table{width:100%;border-collapse:collapse;font-size:13px}
th,td{text-align:left;padding:9px 8px;border-bottom:1px solid var(--grid);vertical-align:middle}
th{color:var(--muted);font-weight:600;font-size:12px}
td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
label.f{display:block;font-size:12px;color:var(--muted);margin:10px 0 4px}
input,select,textarea{width:100%;background:var(--plane);color:var(--ink);border:1px solid var(--ring);border-radius:8px;padding:9px 10px;font-size:13px;font-family:inherit}
textarea{font-family:ui-monospace,Menlo,monospace;min-height:90px}
.badge{font-size:11px;padding:1px 7px;border-radius:6px;border:1px solid var(--ring);color:var(--ink-2)}
.pill{font-size:11px;padding:2px 8px;border-radius:999px;color:#fff}
.legend{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:var(--ink-2);margin-top:8px}
.legend .item{display:flex;align-items:center;gap:6px}.legend .swatch{width:14px;height:3px;border-radius:2px}
.seg{display:inline-flex;border:1px solid var(--ring);border-radius:999px;overflow:hidden}
.seg button{background:transparent;color:var(--ink-2);border:0;padding:6px 12px;cursor:pointer;font-size:12px}
.seg button.active{background:var(--surface-2);color:var(--ink)}
svg{display:block;width:100%;overflow:visible}
.tt{position:fixed;pointer-events:none;background:var(--surface-2);border:1px solid var(--ring);border-radius:8px;padding:6px 9px;font-size:12px;color:var(--ink);z-index:50;display:none;box-shadow:0 6px 20px rgba(0,0,0,.35)}
.hexrow{font-family:ui-monospace,Menlo,monospace;font-size:13px}
.callout{background:var(--surface-2);border:1px solid var(--ring);border-left:3px solid var(--s1);border-radius:10px;padding:12px 14px;font-size:13px}
.empty{color:var(--muted);text-align:center;padding:30px}
.combo{position:relative}
.combo-list{position:absolute;left:0;right:0;top:100%;margin-top:2px;background:var(--surface-2);border:1px solid var(--ring);border-radius:8px;max-height:260px;overflow:auto;z-index:40;display:none;box-shadow:0 8px 24px rgba(0,0,0,.35)}
.combo-item{padding:8px 10px;cursor:pointer;font-size:13px}
.combo-item:hover{background:var(--surface)}
.plaus{color:var(--good);font-size:12px}
.implaus{color:var(--serious);font-size:12px}
.stat{display:flex;justify-content:space-between;padding:6px 0;border-bottom:1px solid var(--grid)}
.stat .k{color:var(--muted)}.stat .v{font-variant-numeric:tabular-nums}
.dgroup{border:1px solid var(--grid);border-radius:8px;margin-bottom:8px;overflow:hidden}
.dghead{display:flex;justify-content:space-between;align-items:center;padding:8px 10px;cursor:pointer;background:var(--surface-2)}
.dgbody{padding:2px 10px 6px}
.drow{display:grid;grid-template-columns:38px 1fr auto auto;gap:8px;align-items:center;padding:5px 0;border-top:1px solid var(--grid)}
.dph img{width:30px;height:30px;object-fit:cover;border-radius:6px}
.drow .decedit{padding:2px 8px;line-height:1.4}
.decmeta{grid-column:1/-1;display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.decmeta input{flex:1 1 140px;min-width:120px}
.qpick{display:flex;flex-wrap:wrap;gap:8px;margin:8px 0}
.qpick label{display:flex;align-items:center;gap:5px;font-size:12px;color:var(--ink-2);background:var(--surface-2);border:1px solid var(--ring);border-radius:999px;padding:4px 10px;cursor:pointer}
.qpick input{width:auto}
.rep-good{color:var(--good)}.rep-warn{color:var(--warn)}.rep-serious{color:var(--serious)}
/* přehled: filtry, badge, stránkování, seskupení */
.ovbar{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:0 0 16px}
.ovbar input,.ovbar select{width:auto}
.ovbadges{display:flex;gap:8px;flex-wrap:wrap;margin:0 0 12px}
.ovbadge{font-size:12px;padding:4px 11px;border-radius:999px;border:1px solid var(--ring);background:var(--surface);color:var(--ink-2);cursor:pointer}
.ovbadge.active{background:var(--s1);color:#fff;border-color:transparent}
.ovbadge.warn{border-color:var(--warn);color:var(--warn)}
.ovbadge.warn.active{background:var(--warn);color:#0b0b0b}
.ovpage{display:flex;gap:12px;align-items:center;justify-content:center;margin:18px 0 0}
.ovsec{margin-bottom:20px}
.ovsec-h{font-size:14px;margin:0 0 10px;padding-bottom:6px;border-bottom:1px solid var(--grid)}
.ovcard{display:flex;flex-direction:column}
.ovcard .ovbody{cursor:pointer;display:flex;flex-direction:column;flex:1 1 auto}
.ovfoot{margin-top:auto;padding-top:8px}
.iconbtn{background:var(--surface-2);border:1px solid var(--ring);color:var(--ink-2);border-radius:8px;width:28px;height:28px;cursor:pointer;font-size:13px;line-height:1;flex:0 0 auto}
.ovtitle{min-width:0}.ovtitle h3{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* mapa */
#map{height:600px;width:100%;border-radius:var(--radius);border:1px solid var(--ring)}
.leaflet-popup-content a{color:var(--s1)}
.tbl-dense th,.tbl-dense td{padding:7px 10px}
.tbl-dense tbody tr:hover{background:var(--surface-2)}
.loctree{margin-top:6px}
.loc-row{display:flex;justify-content:space-between;align-items:center;gap:10px;padding:7px 6px;border-bottom:1px solid var(--grid)}
.loc-name{min-width:0;overflow:hidden;text-overflow:ellipsis}
/* login */
.loginwrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.loginbox{width:340px;background:var(--surface);border:1px solid var(--ring);border-radius:16px;padding:26px}
.loginbox h1{font-size:18px;margin:0 0 2px}.loginbox .sub{color:var(--muted);font-size:13px;margin-bottom:16px}
.err{background:rgba(208,59,59,.12);border:1px solid var(--critical);color:var(--ink);border-radius:8px;padding:9px 11px;font-size:13px;margin-bottom:12px}

/* --- Zdraví & predikce: metriky v kartě (varianta A – dlaždice) --- */
.hmrow{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin-top:8px}
@media(max-width:520px){.hmrow{grid-template-columns:1fr 1fr}}
.hmetric{background:var(--surface-2);border:1px solid var(--ring);border-radius:10px;padding:9px 10px}
.hmetric.crit{border-color:rgba(208,59,59,.5)}
.hmetric .mt{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.5px}
.hmetric .mv{font-size:17px;font-weight:700;margin-top:3px;line-height:1.15}
.hmetric .ms{font-size:10px;color:var(--muted);margin-top:2px}
.hbar{height:6px;border-radius:6px;background:var(--surface-2);overflow:hidden;margin-top:10px}
.hbar > i{display:block;height:100%}
.hnote{background:var(--surface-2);border:1px solid var(--ring);border-radius:10px;padding:9px 11px;font-size:12px;color:var(--ink-2);margin-top:10px}
.hnote.crit{border-color:rgba(208,59,59,.4)}
/* --- Zdraví flotily (stránka) --- */
.fstats{display:grid;grid-template-columns:repeat(auto-fill,minmax(118px,1fr));gap:8px;margin-bottom:14px}
@media(max-width:520px){.fstats{grid-template-columns:1fr 1fr}}
.fstat{background:var(--surface);border:1px solid var(--ring);border-radius:9px;padding:7px 10px;display:flex;align-items:baseline;gap:8px}
.fstat .n{font-size:18px;font-weight:700;line-height:1}.fstat .l{color:var(--muted);font-size:11px;margin-top:0}
.fstat.crit{border-color:rgba(208,59,59,.45)}.fstat.crit .n{color:var(--critical)}
.fstat.warn{border-color:rgba(250,178,25,.45)}.fstat.warn .n{color:var(--warn)}
.fstat.good .n{color:var(--good)}
/* řádky karty Doporučení: ikona | čidlo (název + místo/tenant) | akční doporučení vpravo */
.recrow{display:flex;align-items:center;gap:10px;padding:8px 0;border-bottom:1px solid var(--grid)}
.recrow:last-child{border-bottom:0}
.recrow .ic{flex:0 0 auto;font-size:15px;line-height:1}
.recrow .recmain{flex:1 1 auto;min-width:0}
.recrow .recname{font-weight:600}
.recrow .mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px;opacity:.9}
.recrow .recmeta{font-size:11px;margin-top:1px}
.recrow .recact{flex:0 0 auto;max-width:46%;text-align:right;font-size:12.5px;line-height:1.35}
@media(max-width:560px){.recrow{flex-wrap:wrap}.recrow .recact{max-width:100%;text-align:left;flex-basis:100%;padding-left:25px}}
.fchips{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:12px}
.fchip{font-size:12px;border:1px solid var(--ring);border-radius:999px;padding:5px 12px;cursor:pointer;color:var(--ink-2);background:var(--surface)}
.fchip.active{background:var(--s1);color:#fff;border-color:transparent}
.fchip b{font-weight:700}
.frow{display:grid;grid-template-columns:14px 1.5fr 1fr 1fr 1.1fr;gap:12px;align-items:center;padding:11px 8px;border-bottom:1px solid var(--ring);font-size:13px;cursor:pointer}
.frow:hover{background:var(--surface-2)}
.frow.head{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid var(--axis);cursor:default}
.frow.head:hover{background:transparent}
.frow .nm{font-weight:600}.frow .sub{color:var(--muted);font-size:11px;font-weight:400}
@media(max-width:640px){.frow{grid-template-columns:14px 1.4fr 1fr;}.frow .col-when,.frow .col-pred{display:none}}

/* --- nastavení uživatele (popover v hlavičce) --- */
.setwrap{position:relative}
.setpanel{position:absolute;right:0;top:calc(100% + 8px);background:var(--surface);border:1px solid var(--ring);border-radius:12px;padding:14px;width:250px;z-index:50;box-shadow:0 12px 34px rgba(0,0,0,.45)}
.setpanel .seth{font-weight:700;font-size:13px;margin-bottom:10px}
.setpanel .setrow{margin-bottom:12px}
.setpanel .setrow:last-child{margin-bottom:0}
.setpanel label.f{display:block;color:var(--muted);font-size:11px;margin-bottom:4px}
.setpanel select{width:100%;background:var(--surface-2);color:var(--ink);border:1px solid var(--ring);border-radius:8px;padding:7px 9px;font-size:13px}

/* výběr sloupců přehledu */
#ov_colspanel{width:330px}
.ovcolslist{display:grid;grid-template-columns:1fr 1fr;gap:5px 12px;max-height:280px;overflow:auto}
.ovcolslist label{display:flex;align-items:center;gap:6px;font-size:13px;color:var(--ink-2);white-space:nowrap;cursor:pointer}

/* dashboard: legenda agregovaného grafu + drag&drop */
.chlegend{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:6px;font-size:11px;color:var(--ink-2)}
.chlegend span{display:inline-flex;align-items:center;gap:5px}
.chlegend i{width:10px;height:10px;border-radius:2px;display:inline-block}
.wcard{cursor:default}
.wcard .grip{cursor:grab;color:var(--muted);margin-right:4px;user-select:none}
.wcard.dragging{opacity:.45;outline:2px dashed var(--s1)}

/* hover mini graf v přehledu */
.qhov{cursor:help;border-bottom:1px dotted var(--muted)}
#hovgraph{position:fixed;z-index:300;background:var(--surface);border:1px solid var(--ring);border-radius:10px;padding:8px 10px;box-shadow:0 12px 34px rgba(0,0,0,.5);pointer-events:none;display:none}

/* výběr sloupců: konec vodorovného scrollu a ořezaných popisků (zbytek grafiky beze změny) */
#ov_colspanel{width:440px;max-width:calc(100vw - 32px)}
.ovcolslist{grid-template-columns:1fr 1fr;overflow-x:hidden;gap:8px 16px;padding-right:2px}
.ovcolslist label{white-space:normal;line-height:1.3;align-items:center}
/* globální input{width:100%} roztahoval i tyto checkboxy – vrátit jim přirozenou velikost */
.ovcolslist label input[type=checkbox]{width:auto;flex:0 0 auto;padding:0;margin:0}

/* notifikační bubliny (jen superadmin) – vpravo dole, řetězí se pod sebe */
#toasts{position:fixed;right:16px;bottom:16px;z-index:400;display:flex;flex-direction:column;gap:10px;max-width:330px;pointer-events:none}
.toast{pointer-events:auto;background:var(--surface);border:1px solid var(--ring);border-left:3px solid var(--s2);border-radius:10px;padding:10px 30px 10px 12px;box-shadow:0 12px 34px rgba(0,0,0,.5);position:relative;animation:toastin .25s ease}
.toast.toast-new{border-left-color:var(--good)}
.toast.out{animation:toastout .22s ease forwards}
@keyframes toastin{from{transform:translateX(120%);opacity:0}to{transform:translateX(0);opacity:1}}
@keyframes toastout{to{transform:translateX(120%);opacity:0}}
.toast-x{position:absolute;top:6px;right:6px;background:none;border:0;color:var(--muted);cursor:pointer;font-size:12px;line-height:1;padding:3px}
.toast-x:hover{color:var(--ink)}
.toast-tag{font-size:11px;color:var(--good);font-weight:700;margin-bottom:2px}
.toast-title{font-weight:600;font-size:13px}
.toast-val{font-size:12px;color:var(--ink-2);margin-top:2px}
.toast-meta{font-size:11px;margin-top:4px}
.toast-src{color:var(--s7);font-weight:600}

/* analýza v detailu – KPI dlaždice (špička, odhad) */
.ankpi{background:var(--surface-2);border:1px solid var(--ring);border-radius:10px;padding:8px 12px;min-width:150px}
.ankpi .ank{font-size:11px;color:var(--muted)}
.ankpi .anv{font-size:18px;font-weight:650;margin:1px 0}
.ankpi .ans{font-size:11px;color:var(--muted)}

/* MOBIL: rozbalovací panely (Nastavení, zvonek, výběr sloupců) se vejdou na obrazovku
   – místo absolutního right:0 (přetékalo mimo levý okraj) je z nich spodní panel přes šířku */
@media(max-width:640px){
  .setpanel{position:fixed;left:10px;right:10px;top:auto;bottom:10px;max-width:none;max-height:75vh;overflow:auto;z-index:300}
  #ov_colspanel,#bellpanel,#settingspanel{width:auto}
  #toasts{left:8px;right:8px;max-width:none}
}

/* MOBIL: srovnání ovládacích lišt (filtry přehledu, výběr v detailu) do čistého sloupce */
@media(max-width:640px){
  .ovbar{gap:8px}
  .ovbar > input, .ovbar > select{flex:1 1 100%;width:100%!important;max-width:none!important}
  .ovbar > .seg{flex:1 1 100%;justify-content:center}
  .ovbar > .setwrap, .ovbar > .setwrap .btn{flex:1 1 100%;width:100%}
  #devsel{flex:1 1 100%;max-width:none!important}
}

/* ---- Dispečink §1: konzole alarmů + úkoly ---- */
.subtabs{display:flex;align-items:center;gap:8px;border-bottom:1px solid var(--grid);margin-bottom:12px}
.subtabs > button[data-t]{background:none;border:0;border-bottom:2px solid transparent;padding:8px 10px;color:var(--ink-2);cursor:pointer;font-size:13.5px;font-weight:600}
.subtabs > button[data-t].on{color:var(--ink);border-bottom-color:var(--good)}
.chips{display:flex;flex-wrap:wrap;gap:6px}
.chips .chip{cursor:pointer;color:var(--ink-2);background:var(--surface)}
.chips .chip.on{border-color:var(--good);color:var(--ink);background:rgba(12,163,12,.10)}
.dlist{display:flex;flex-direction:column;gap:8px}
.drow2{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:10px;align-items:center;background:var(--surface);border:1px solid var(--ring);border-radius:10px;padding:10px 12px}
.dr-main{min-width:0}
.dr-t{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-size:14px}
.dr-m{font-size:12.5px;margin-top:3px;color:var(--ink-2);word-break:break-word}
.dr-s{font-size:11.5px;margin-top:4px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.dr-a{display:flex;align-items:center;gap:6px;flex-wrap:wrap;justify-content:flex-end}
.dr-a select.sm{padding:4px 8px;font-size:12px;border-radius:8px;border:1px solid var(--ring);background:var(--surface);color:var(--ink)}
.dr-s select.sm{padding:3px 7px;font-size:11.5px;border-radius:7px;border:1px solid var(--ring);background:var(--surface);color:var(--ink)}
.wo-det{grid-column:1/-1;margin-top:8px;border-top:1px solid var(--grid);padding-top:8px}
.wo-notes{display:flex;flex-direction:column;gap:6px}
.wo-n{font-size:12.5px;border-left:2px solid var(--grid);padding-left:8px}
.flash{position:fixed;bottom:22px;left:50%;transform:translateX(-50%) translateY(20px);background:var(--surface-2);border:1px solid var(--good);border-radius:10px;padding:9px 16px;font-size:13px;color:var(--ink);box-shadow:0 6px 24px rgba(0,0,0,.25);opacity:0;pointer-events:none;transition:.22s;z-index:60}
.flash.show{opacity:1;transform:translateX(-50%) translateY(0)}
@media(max-width:680px){.drow2{grid-template-columns:1fr}.dr-a{justify-content:flex-start}}

/* ---- Dispečink §2: Nástěnka (wallboard) ---- */
.wallmode .mhead,.wallmode #disp_sum{display:none}
#v-dispecink:fullscreen{background:var(--plane);padding:22px 26px;overflow:auto}
#v-dispecink:fullscreen .subtabs{margin-top:0}
.wtop{display:flex;justify-content:space-between;align-items:center;margin-bottom:14px}
.wclock{font-size:22px;font-weight:700;font-variant-numeric:tabular-nums}
.wctrl{display:flex;align-items:center;gap:10px}
.wband{display:grid;grid-template-columns:repeat(6,1fr);gap:12px;margin-bottom:16px}
.wtile{background:var(--surface);border:1px solid var(--ring);border-radius:14px;padding:18px 14px;text-align:center}
.wtile .wn{font-size:46px;font-weight:800;line-height:1;font-variant-numeric:tabular-nums}
.wtile .wl{color:var(--muted);font-size:13px;margin-top:8px}
.wtile.pulse{border-color:var(--critical);animation:wpulse 1.4s ease-in-out infinite}
@keyframes wpulse{0%,100%{box-shadow:0 0 0 0 rgba(208,59,59,0)}50%{box-shadow:0 0 0 5px rgba(208,59,59,.28)}}
.wcols{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.wgrid{display:grid;grid-template-columns:2fr 1fr;gap:16px;align-items:start}
.wcol{background:var(--surface);border:1px solid var(--ring);border-radius:14px;padding:14px 16px}
.wcol h3{margin:0 0 10px}
/* rotující widget panel */
.wwid{background:var(--surface);border:1px solid var(--ring);border-radius:14px;padding:14px 16px;min-height:340px}
.wwid-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}
.wwid-title{font-size:18px;font-weight:700}
.wwid-dots{display:flex;gap:6px;flex-wrap:wrap}
.wwdot{background:var(--surface-2);border:1px solid var(--ring);color:var(--muted);border-radius:999px;padding:3px 10px;font-size:12px;cursor:pointer}
.wwdot.on{border-color:var(--good);color:var(--ink);background:rgba(12,163,12,.12)}
.wwgrid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}
.wwgrid.cidla{grid-template-columns:repeat(3,1fr)}
.wwcard{background:var(--surface-2);border:1px solid var(--ring);border-radius:11px;padding:10px 12px}
.wwc-h{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.wwc-t{font-weight:600;font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wwc-v{font-weight:700;font-variant-numeric:tabular-nums;white-space:nowrap}
.wwc-sub{font-size:11.5px;margin:2px 0 2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wwsvg{width:100%;height:88px;display:block}
.wwtile{background:var(--surface-2);border:1px solid var(--ring);border-radius:11px;padding:11px 12px}
.wwtile.flash{animation:wflash 1.6s ease-out}
@keyframes wflash{0%{background:rgba(12,163,12,.30);border-color:var(--good)}100%{background:var(--surface-2)}}
.wwt-h{display:flex;align-items:center;gap:7px;min-width:0}
.wwt-l{font-size:13px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wwt-v{font-size:26px;font-weight:800;font-variant-numeric:tabular-nums;margin-top:6px;line-height:1}
.wwt-v .wwu{font-size:14px;font-weight:600;color:var(--muted)}
.wwt-f{font-size:11.5px;margin-top:4px;display:flex;gap:6px;align-items:center}
.wwdelta{font-weight:700}
.wwdelta.up{color:var(--serious)}.wwdelta.down{color:var(--good)}
.wwcols2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.wwsub h4{margin:0 0 8px;font-size:14px}
.wbar{height:6px;background:var(--grid);border-radius:4px;margin-top:6px;overflow:hidden}
.wbar span{display:block;height:100%;background:var(--s3)}
.wlist.big .wt{font-size:15px}
.wlist{display:flex;flex-direction:column;gap:6px;max-height:56vh;overflow:auto}
.wrow{display:grid;grid-template-columns:auto 1fr auto;gap:10px;align-items:center;padding:8px 0;border-bottom:1px solid var(--grid)}
.wrow:last-child{border-bottom:0}
.wdot{width:11px;height:11px;border-radius:50%;flex:0 0 auto}
.wmain{min-width:0}
.wt{font-size:15px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wtag{font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.03em}
.wm{font-size:12.5px;color:var(--ink-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wage{font-size:12px;color:var(--muted);white-space:nowrap}
.wempty{color:var(--muted);padding:20px;text-align:center}
@media(max-width:1100px){.wband{grid-template-columns:repeat(3,1fr)}.wcols,.wgrid,.wwcols2{grid-template-columns:1fr}.wwgrid.cidla{grid-template-columns:repeat(2,1fr)}}
@media(max-width:640px){.wwgrid,.wwgrid.cidla{grid-template-columns:1fr}}

/* ---- Sdílení nástěnky (modal) ---- */
.wsm-back{position:fixed;inset:0;background:rgba(0,0,0,.55);display:flex;align-items:flex-start;justify-content:center;z-index:80;padding:6vh 16px;overflow:auto}
.wsm{background:var(--surface);border:1px solid var(--ring);border-radius:14px;padding:18px 20px;width:100%;max-width:640px;box-shadow:0 12px 40px rgba(0,0,0,.4)}
.wsm-h{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px}
.wsm-h h3{margin:0}
.wsm-row{display:flex;gap:12px;align-items:flex-start;justify-content:space-between;padding:10px 0;border-top:1px solid var(--grid)}
.wsm-row .wt{font-size:14px;font-weight:600}
.wsm-act{display:flex;flex-direction:column;gap:5px;flex:0 0 auto}
.ws_link{width:100%;margin-top:5px;font-family:ui-monospace,monospace;font-size:11.5px;padding:5px 7px;border:1px solid var(--ring);border-radius:7px;background:var(--surface-2);color:var(--ink-2)}
@media(max-width:600px){.wsm-row{flex-direction:column}.wsm-act{flex-direction:row;flex-wrap:wrap}}

/* ---- Přizpůsobení nástěnky (panel) ---- */
.wc-sec{font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin:14px 0 6px}
.wc-chks{display:grid;grid-template-columns:repeat(2,1fr);gap:6px}
.wc-chk{display:flex;align-items:center;gap:8px;font-size:13.5px;cursor:pointer;padding:4px 0}
.wc-chk input{width:auto}

/* ---- Administrace: tabová lišta (sbalený sidebar) ---- */
.atabs{display:flex;flex-wrap:wrap;gap:14px;padding:2px 0 12px;margin-bottom:6px;border-bottom:1px solid var(--grid)}
.atg{display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.atg-l{font-size:10px;letter-spacing:.1em;text-transform:uppercase;color:var(--muted);margin-right:2px}
.atab{background:var(--surface);border:1px solid var(--ring);color:var(--ink-2);border-radius:999px;padding:5px 11px;font-size:12.5px;cursor:pointer;white-space:nowrap;font-family:inherit}
.atab:hover{border-color:var(--s1);color:var(--ink)}
.atab.on{background:var(--s1);color:#fff;border-color:transparent;font-weight:600}
@media(max-width:700px){.atabs{gap:10px}.atg{width:100%}}
