/* All shared design tokens live at the top. */
:root{
 --profile-scrim:rgba(25,43,53,.12);
  --ink:#14161a; --ink-2:#4b5563; --ink-3:#6b7280; --ink-4:#8b929d; --ink-5:#a6acb6;
  --ground:#f7f8fa; --surface:#fff; --surface-2:#f2f4f7; --map:#eceff2;
  --line:#e5e8ec; --line-2:#eef0f3; --line-3:#dfe3e8;
  --accent:#3970ca; --accent-soft:#f6f9fe;
  --move:#16a34a; --idle:#d97706; --stop:#94a3b8; --alarm:#dc2626;
  --sans:"IBM Plex Sans","Segoe UI",system-ui,sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,monospace;
  --r-s:7px; --r-m:9px; --r-l:12px;
  --shadow-1:0 1px 3px rgba(20,22,26,.12),0 4px 14px rgba(20,22,26,.06);
  --shadow-2:0 2px 6px rgba(20,22,26,.1),0 12px 32px rgba(20,22,26,.12);
}
:root{
 --ink:#14202f;--ink-2:#435367;--ink-3:#617287;--ink-4:#748399;--ink-5:#91a0b2;
 --ground:#f3f6f9;--surface:#fff;--surface-2:#f1f5f8;--line:#e3eaf0;--line-2:#edf1f5;--line-3:#d8e1e9;
 --accent:#067c74;--accent-soft:#e9f7f3;--move:#13956f;--idle:#c78722;--stop:#8290a1;--alarm:#d64f54;
 --sans:'IBM Plex Sans',system-ui,sans-serif;--mono:'IBM Plex Mono',monospace;
 --r-s:8px;--r-m:11px;--r-l:16px;--shadow-1:0 3px 18px #132c3d0d;--shadow-2:0 16px 50px #152a3a1c;
 --portal-nav:184px;--portal-list:312px;--portal-detail:370px;--portal-header:72px;--portal-space:18px;
 --portal-navy:#111e2c;--portal-navy-2:#1d3041;--portal-nav-text:#a4b4c7;--portal-lime:#c5f277;
 --portal-body:14px;--portal-meta:12px;--portal-row:18px;
}
:root{
 --ink:#182126;--ink-2:#384950;--ink-3:#586d77;--ink-4:#6c818b;--ink-5:#82949c;
 --ground:#f4f8fa;--surface:#fff;--surface-2:#eef6f9;--line:#e1ebef;--line-2:#edf3f5;--line-3:#d4e3e9;
 --accent:#007ca3;--accent-soft:#e4f7ff;--move:#118063;--idle:#aa7214;--alarm:#ce4c56;
 --r-s:13px;--r-m:18px;--r-l:24px;--shadow-1:0 4px 20px #1e506012;--shadow-2:0 12px 42px #244c621f;
 --portal-navy:#e0f5ff;--portal-navy-2:#c9efff;--portal-nav-text:#335b6d;--portal-lime:#35c8ff;
 --portal-nav:204px;--portal-list:340px;--portal-detail:370px;--portal-space:20px;--portal-header:72px;
 --friendly-sky:#35c8ff;--friendly-sky-soft:#e0f5ff;--friendly-ink:#172b34;
 --sans:'Nunito Sans','IBM Plex Sans',system-ui,sans-serif;--mono:'IBM Plex Mono',monospace;
}
:root{
 --ink:#202529;--ink-2:#435159;--ink-3:#5d6b73;
 --ground:#f5f7f8;--surface:#fff;--surface-2:#f2f5f6;
 --line:#dfe5e8;--line-2:#edf1f3;--accent:#006d91;--accent-soft:#e2f7ff;
 --friendly-sky:#33ccff;--friendly-sky-soft:#e2f7ff;
 --shadow-1:0 4px 16px #20252910;--shadow-2:0 6px 24px #20252914;
}
/* Дизайн система на редизайна. Тези променливи са единственият източник на
   цветове, отстояния и радиуси - екраните не съдържат собствени стойности. */

*{box-sizing:border-box}
html,body{height:100%}
body.gs2{margin:0;background:var(--ground);color:var(--ink);font-family:var(--sans);
  -webkit-font-smoothing:antialiased;overflow:hidden}
/* :where() сваля специфичността на нулирането до нула. Като .gs2 button то
   беше (0,1,1) и смазваше отстъпите, фона и рамките на всеки компонент с
   един клас (.chip, .pill, .btn-ghost), който е (0,1,0). */
:where(.gs2) button{font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
:where(.gs2) :focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:4px}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}

#gs2app{display:flex;height:100%}
.rail{width:68px;background:var(--ink);display:flex;flex-direction:column;align-items:center;
  padding:18px 0;gap:26px;flex-shrink:0}
.rail-nav{display:flex;flex-direction:column;gap:8px;align-items:center}
.rail-btn{width:40px;height:40px;border-radius:10px;display:flex;align-items:center;
  justify-content:center;position:relative;transition:background .12s}
.rail-btn svg{stroke:#7d8593;transition:stroke .12s}
.rail-btn:hover{background:#1c2029}
.rail-btn[aria-current]{background:#22262e}
.rail-btn[aria-current] svg{stroke:#fff}
.avatar{width:34px;height:34px;border-radius:50%;background:var(--accent);color:#fff;
  display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:600;flex-shrink:0}
button.avatar:hover{box-shadow:0 0 0 3px rgba(57,112,202,.35)}
.nav-badge{position:absolute;top:3px;right:2px;min-width:17px;height:17px;padding:0 4px;border-radius:9px;
  background:var(--alarm);color:#fff;font-size:10px;font-weight:600;font-family:var(--mono);
  display:flex;align-items:center;justify-content:center;box-shadow:0 0 0 2px var(--ink)}
.nav-badge[hidden]{display:none}

/* долна лента - само под 768 px; бутоните са поне 44 px според бележката в дизайна */
.tabbar{display:none}
.tabbar-btn{flex:1 1 0;min-height:56px;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:3px;font-size:11px;color:var(--ink-4);text-decoration:none;position:relative}
.tabbar-btn svg{stroke:currentColor}
.tabbar-btn[aria-current]{color:var(--ink);font-weight:600}
.tabbar-btn .nav-badge{top:5px;right:calc(50% - 22px);box-shadow:0 0 0 2px var(--surface)}

.profile{position:fixed;inset:0;z-index:2000;background:rgba(20,22,26,.28);display:flex;align-items:flex-end;padding:0 0 18px 80px}
.profile[hidden]{display:none}
.profile-card{width:300px;background:var(--surface);border-radius:var(--r-l);box-shadow:var(--shadow-2);
  padding:16px;display:flex;flex-direction:column;gap:12px}
.profile-id{display:flex;align-items:center;gap:12px;padding:2px 4px 8px;border-bottom:1px solid var(--line-2)}
.profile-id .avatar{width:40px;height:40px;font-size:14px}
.profile-name{font-size:14px;font-weight:600}
.profile-sub{font-size:12px;color:var(--ink-4);word-break:break-all}
.profile-list{display:flex;flex-direction:column}
.profile-list .menu-item svg{stroke:var(--ink-3)}
.menu-item.danger{color:var(--alarm)}
.profile-list .menu-item.danger svg{stroke:var(--alarm)}
.profile .profile-close{display:none}

@media (max-width:767px){
  .rail{display:none}
  .tabbar{display:flex;position:fixed;left:0;right:0;bottom:0;z-index:1500;background:var(--surface);
    border-top:1px solid var(--line);padding-bottom:env(safe-area-inset-bottom)}
  #gs2app{padding-bottom:calc(57px + env(safe-area-inset-bottom))}
  .profile{padding:0;align-items:flex-end}
  .profile-card{width:100%;border-radius:18px 18px 0 0;padding:18px 18px calc(18px + env(safe-area-inset-bottom))}
  .profile-list .menu-item{min-height:48px;font-size:14px}
  .profile .profile-close{display:flex;height:46px;flex-grow:0}
}

.side{width:344px;background:var(--surface);border-right:1px solid var(--line);
  display:flex;flex-direction:column;flex-shrink:0}
.side-head{padding:20px 20px 14px;display:flex;flex-direction:column;gap:14px}
.side-title{display:flex;align-items:baseline;justify-content:space-between}
.side-title h1{margin:0;font-size:17px;font-weight:600;letter-spacing:-.01em}
.count{font-family:var(--mono);font-size:12px;color:var(--ink-3)}
.search{display:flex;align-items:center;gap:9px;height:38px;padding:0 12px;
  background:var(--surface-2);border-radius:var(--r-m)}
.search input{border:0;background:none;font:inherit;font-size:13px;width:100%;outline:none;color:var(--ink)}
.search input::placeholder{color:#9aa1ac}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{display:flex;align-items:center;gap:6px;height:28px;padding:0 11px;border-radius:var(--r-s);
  background:var(--surface-2);color:var(--ink-2);font-size:12px;font-weight:500;transition:background .12s}
.chip:hover{background:#e8ebef}
.chip[aria-pressed="true"]{background:var(--ink);color:#fff}
.chip .n{font-family:var(--mono);opacity:.65}
.dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}
.list{flex-grow:1;overflow-y:auto}
.row{width:100%;text-align:left;padding:13px 20px;border-top:1px solid var(--line-2);
  border-left:3px solid transparent;display:flex;flex-direction:column;gap:7px;transition:background .1s}
.row:hover{background:#fafbfc}
.row[aria-selected="true"]{border-left-color:var(--accent);background:var(--accent-soft)}
.row-top{display:flex;align-items:center;gap:9px}
.row-name{font-size:13.5px;font-weight:500;flex-grow:1}
.row[aria-selected="true"] .row-name{font-weight:600}
.row-speed{font-family:var(--mono);font-size:13px;font-weight:600}
.row-speed small{font-size:10px;color:#9aa1ac;font-weight:400}
.row-meta{display:flex;align-items:center;gap:10px;padding-left:17px}
.plate{font-family:var(--mono);font-size:11px;color:var(--ink-3);border:1px solid var(--line-3);
  border-radius:4px;padding:1px 5px}
.row-addr{font-size:11.5px;color:var(--ink-4);padding-left:17px}
.empty{padding:28px 20px;text-align:center;color:var(--ink-4);font-size:13px}

.canvas{flex-grow:1;position:relative;background:var(--map)}
#gs2map{position:absolute;inset:0}
.topbar{position:absolute;top:16px;left:16px;right:16px;z-index:500;display:flex;
  align-items:center;justify-content:space-between;gap:12px;pointer-events:none}
.topbar>*{pointer-events:auto}
.seg{display:flex;gap:8px}
.pill{display:flex;align-items:center;gap:7px;height:36px;padding:0 13px;background:var(--surface);
  border-radius:var(--r-m);box-shadow:var(--shadow-1);font-size:12.5px;color:var(--ink-3);font-weight:500}
.pill[aria-pressed="true"]{color:var(--ink);font-weight:600}
.live{display:flex;align-items:center;gap:9px;height:36px;padding:0 14px;background:var(--ink);
  color:#fff;border-radius:var(--r-m);font-size:12.5px;font-weight:500;box-shadow:0 4px 14px rgba(20,22,26,.18)}
.live .dot{background:var(--move);animation:gs2pulse 2.4s ease-in-out infinite}
.live .ago{font-family:var(--mono);font-size:11px;color:#9aa1ac}
@keyframes gs2pulse{0%,100%{opacity:1}50%{opacity:.35}}
@media (prefers-reduced-motion:reduce){.live .dot{animation:none}}

/* маркери върху Leaflet */
.gs2-marker{background:none;border:0}
.gs2-pin{display:flex;align-items:center;transform:translate(-15px,-15px)}
.gs2-dot{width:30px;height:30px;border-radius:50%;border:3px solid #fff;
  box-shadow:0 2px 8px rgba(20,22,26,.28);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.gs2-pin[data-sel="1"] .gs2-dot{width:36px;height:36px;border-width:4px}
.gs2-label{margin-left:-4px;height:26px;display:flex;align-items:center;gap:7px;padding:0 10px 0 12px;
  background:#fff;border-radius:0 var(--r-s) var(--r-s) 0;box-shadow:0 1px 3px rgba(20,22,26,.14);
  font-size:11.5px;font-weight:600;white-space:nowrap}
.gs2-pin[data-alarm="1"] .gs2-dot{box-shadow:0 0 0 6px rgba(220,38,38,.16),0 2px 8px rgba(20,22,26,.3)}

.detail{width:0;background:var(--surface);border-left:1px solid var(--line);flex-shrink:0;
  display:flex;overflow:hidden;transition:width .22s ease}
.detail[data-open]{width:440px}
@media (prefers-reduced-motion:reduce){.detail{transition:none}}
.detail-inner{width:440px;display:flex;flex-direction:column;height:100%;overflow:hidden}
.detail-head{padding:22px 24px 18px;border-bottom:1px solid var(--line-2);display:flex;flex-direction:column;gap:14px}
.detail-id{display:flex;align-items:flex-start;gap:12px}
.veh-ico{width:44px;height:44px;border-radius:11px;background:var(--surface-2);display:flex;
  align-items:center;justify-content:center;flex-shrink:0;overflow:hidden}
.veh-ico img{width:26px;height:26px;object-fit:contain}
.detail-id h2{margin:0;font-size:19px;font-weight:600;letter-spacing:-.02em}
.status-line{display:flex;align-items:center;gap:9px;margin-top:5px;flex-wrap:wrap}
.status-text{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:500}
.close{width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center;color:var(--ink-4)}
.close:hover{background:var(--surface-2)}
.tiles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.tile{background:var(--ground);border-radius:var(--r-l);padding:13px 14px;display:flex;flex-direction:column;gap:4px}
.tile .k{font-size:11px;color:var(--ink-4)}
.tile .v{font-family:var(--mono);font-size:20px;font-weight:600}
.tile .v small{font-size:12px;color:#9aa1ac;font-weight:400}
.pane{flex-grow:1;overflow-y:auto}
.sect{padding:18px 24px;border-bottom:1px solid var(--line-2);display:flex;flex-direction:column;gap:12px}
.sect:last-child{border-bottom:0}
.lbl{font-size:11.5px;font-weight:600;color:var(--ink-4);letter-spacing:.03em}
.bar{height:6px;border-radius:3px;background:var(--line-2);overflow:hidden}
.bar>i{display:block;height:100%;border-radius:3px}
.kv{display:flex;justify-content:space-between;align-items:baseline;font-size:12.5px}
.kv .k{color:var(--ink-2)}
.kv .v{font-family:var(--mono);font-weight:600}
.detail-foot{padding:16px 24px;border-top:1px solid var(--line-2);display:flex;gap:10px;position:relative}
.btn{height:42px;border-radius:10px;display:flex;align-items:center;justify-content:center;gap:8px;
  font-size:13px;font-weight:600;padding:0 16px}
.btn-primary{background:var(--ink);color:#fff;flex-grow:1}
.btn-primary:hover{background:#22262e}
.btn-ghost{border:1px solid var(--line-3);width:42px;padding:0}
.btn-ghost:hover{background:var(--surface-2)}
.legacy-link{position:absolute;left:16px;bottom:16px;z-index:500;height:32px;padding:0 12px;
  background:var(--surface);border-radius:var(--r-m);box-shadow:var(--shadow-1);display:flex;
  align-items:center;font-size:12px;color:var(--ink-3);text-decoration:none}
.legacy-link:hover{color:var(--ink)}

/* Под тази ширина панелът изтласква картата до неизползваема лента,
   затова се наслагва върху нея вместо да я свива. */
#gs2app{position:relative}
@media (max-width:1279px){
  .detail{position:absolute;right:0;top:0;bottom:0;z-index:900;
    box-shadow:-6px 0 28px rgba(20,22,26,.16);border-left:1px solid var(--line)}
  .detail[data-open]{width:min(440px,92vw)}
  .detail-inner{width:min(440px,92vw)}
  .topbar{right:16px}
}
@media (max-width:1023px){
  .side{width:300px}
}

/* ---------- детайл на обект (фокусиран режим) ---------- */
#gs2app[data-focus] .side,
#gs2app[data-focus] .topbar .seg,
#gs2app[data-focus] .topbar .live,
#gs2app[data-focus] .legacy-link{display:none}
.back{display:none;align-items:center;gap:9px;height:38px;padding:0 14px;background:var(--surface);
  border-radius:var(--r-m);box-shadow:var(--shadow-1);font-size:13px;font-weight:500;color:var(--ink)}
.back:hover{background:#fafbfc}
#gs2app[data-focus] .back{display:flex}
.tabs{display:flex;gap:22px;padding:0 24px;border-bottom:1px solid var(--line-2);flex-shrink:0}
.tab{padding:13px 0;font-size:13px;color:var(--ink-3);border-bottom:2px solid transparent;margin-bottom:-1px}
.tab:hover{color:var(--ink)}
.tab[aria-selected="true"]{color:var(--ink);font-weight:600;border-bottom-color:var(--ink)}
.addr{font-size:13.5px;line-height:1.5}
.addr.muted{color:var(--ink-4)}
.facts{display:flex;gap:18px;flex-wrap:wrap}
.fact{display:flex;flex-direction:column;gap:2px}
.fact .k{font-size:10.5px;color:#9aa1ac}
.fact .v{font-family:var(--mono);font-size:12px}
.drv{display:flex;align-items:center;gap:12px}
.drv-av{width:38px;height:38px;border-radius:50%;background:var(--accent);color:#fff;display:flex;
  align-items:center;justify-content:center;font-size:13px;font-weight:600;flex-shrink:0}
.drv-av.none{background:var(--surface-2);color:var(--ink-4)}
.drv-txt{flex-grow:1;display:flex;flex-direction:column;gap:2px;min-width:0}
.drv-name{font-size:13.5px;font-weight:500}
.drv-sub{font-size:11.5px;color:var(--ink-4)}
.drv-btn{height:30px;padding:0 12px;border:1px solid var(--line-3);border-radius:8px;display:flex;
  align-items:center;font-size:12px;color:var(--ink-2);text-decoration:none;white-space:nowrap}
.drv-btn:hover{background:var(--surface-2)}
.sens{display:flex;flex-direction:column;gap:11px}
.sens-bar{display:flex;flex-direction:column;gap:6px}
.sens-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;padding-top:3px}
.sens-cell{display:flex;align-items:center;gap:9px;padding:11px 13px;background:var(--ground);
  border-radius:var(--r-m);font-size:12.5px;min-width:0}
.sens-cell .k{color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sens-cell .v{margin-left:auto;font-weight:600;white-space:nowrap}
.sens-cell .v.num{font-family:var(--mono)}
.sens-cell .dot{width:7px;height:7px}
.menu{position:absolute;right:24px;bottom:66px;min-width:210px;background:var(--surface);
  border-radius:var(--r-l);box-shadow:var(--shadow-2);padding:6px;display:flex;flex-direction:column;z-index:10}
.menu[hidden]{display:none}
.menu-item{display:flex;align-items:center;gap:10px;height:38px;padding:0 12px;border-radius:var(--r-s);
  font-size:13px;color:var(--ink);text-decoration:none;text-align:left}
.menu-item:hover{background:var(--surface-2)}

/* раздел Команди - полетата и превключвателите са .field/.inp/.sbtn/.note от формата за събития */
.cmd-form{display:flex;flex-direction:column;gap:14px}
.sbtns{display:flex;gap:4px}
.sbtn[disabled]{opacity:.45;cursor:not-allowed}
.cmd-hint{font-size:11.5px;color:var(--ink-4);line-height:1.45}
.inp input.mono{font-family:var(--mono);font-size:13px}
.confirm{border:1px solid #f5d6a8;background:#fffaf1;border-radius:var(--r-l);padding:13px 14px;
  display:flex;flex-direction:column;gap:11px;font-size:13px;line-height:1.45}
.confirm code{font-family:var(--mono);font-size:12px;background:#fff;border:1px solid #f1e2c8;border-radius:5px;padding:1px 5px;word-break:break-all}
.confirm-acts{display:flex;gap:8px;justify-content:flex-end}
.btn-sm{height:36px;font-size:12.5px;border-radius:9px;flex-grow:0;padding:0 16px}
.btn-line{border:1px solid var(--line-3);background:var(--surface)}
.btn-line:hover{background:var(--surface-2)}
.cmd-list{display:flex;flex-direction:column}
.cmd-row{display:flex;gap:10px;align-items:flex-start;padding:12px 0;border-top:1px solid var(--line-2)}
.cmd-row:first-child{border-top:0;padding-top:2px}
.cmd-main{flex-grow:1;min-width:0;display:flex;flex-direction:column;gap:4px}
.cmd-top{display:flex;align-items:center;gap:8px}
.cmd-name{font-size:13px;font-weight:500;flex-grow:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cmd-meta{font-size:11.5px;color:var(--ink-4)}
.cmd-code{font-family:var(--mono);font-size:11.5px;color:var(--ink-2);word-break:break-all}
.cmd-reply{font-family:var(--mono);font-size:11.5px;background:var(--ground);border-radius:6px;padding:6px 8px;
  color:var(--ink-2);word-break:break-all}
.pill-st{height:22px;padding:0 8px;border-radius:11px;font-size:11px;font-weight:600;display:inline-flex;
  align-items:center;gap:5px;white-space:nowrap;flex-shrink:0}
.pill-st.wait{background:#fef3e2;color:#92400e}
.pill-st.sent{background:#eaf6ee;color:#14532d}
.cmd-del{width:26px;height:26px;border-radius:6px;color:var(--ink-4);display:flex;align-items:center;justify-content:center;flex-shrink:0}
.cmd-del:hover{background:var(--surface-2);color:var(--alarm)}

/* раздел Сервиз */
.tab-n{display:inline-flex;align-items:center;justify-content:center;min-width:17px;height:17px;padding:0 5px;
  margin-left:6px;border-radius:9px;font-size:10.5px;font-weight:600;font-family:var(--mono);color:#fff;vertical-align:1px}
.svc-list{display:flex;flex-direction:column;gap:12px}
.svc{border:1px solid var(--line);border-radius:var(--r-l);padding:14px 15px;display:flex;flex-direction:column;gap:12px}
.svc[data-st="over"]{border-color:#f3c9c9}
.svc[data-st="soon"]{border-color:#f5d6a8}
.svc-top{display:flex;align-items:flex-start;gap:10px}
.svc-name{font-size:13.5px;font-weight:600;flex-grow:1;min-width:0}
.pill-st.over{background:#fef2f2;color:#991b1b}
.pill-st.ok{background:#eaf6ee;color:#14532d}
.pill-st.none{background:var(--surface-2);color:var(--ink-3)}
.svc-crit{display:flex;flex-direction:column;gap:6px}
.svc-crit .kv .v{font-family:var(--sans);font-weight:600}
.svc-crit .kv .v.over{color:var(--alarm)}
.svc-crit .kv .v.soon{color:#b45309}
.svc-sub{font-size:11.5px;color:var(--ink-4)}
.svc-acts{display:flex;justify-content:flex-end}

/* ---------- жива карта на телефон ----------
   Артбордове "Карта с панел" и "Детайл на обект": картата е на цял екран,
   списъкът е долен панел с дръжка, детайлът е под картата, свита до горната
   третина. --sheet-h се задава от JS според позицията на панела. */
.sheet-grip,.m-top,.m-fabs{display:none}
@media (max-width:767px){
  .gs2-tracking #gs2app{display:block;padding-bottom:0;--sheet-h:46vh}
  .gs2-tracking .canvas{position:fixed;left:0;right:0;top:0;bottom:calc(57px + env(safe-area-inset-bottom))}
  .gs2-tracking .topbar{top:12px;left:12px;right:12px}
  .gs2-tracking .topbar .seg,.gs2-tracking .topbar .live,.gs2-tracking .legacy-link,
  .gs2-tracking .leaflet-control-zoom{display:none}

  .m-top{display:flex;position:absolute;top:12px;left:12px;right:12px;z-index:600;height:50px;
    background:var(--surface);border-radius:14px;box-shadow:var(--shadow-1);align-items:center;padding:0 7px 0 15px;gap:10px}
  .m-top input{flex:1;min-width:0;border:0;outline:none;background:none;font:inherit;font-size:16px;color:var(--ink)}
  .m-top input::placeholder{color:#9aa1ac}
  .m-top .avatar{width:36px;height:36px}
  .m-fabs{display:flex;flex-direction:column;gap:10px;position:absolute;right:12px;z-index:600;
    bottom:calc(var(--sheet-h) + 12px);transition:bottom .2s ease}
  .m-fab{width:44px;height:44px;border-radius:12px;background:var(--surface);box-shadow:var(--shadow-1);
    display:flex;align-items:center;justify-content:center}
  .m-fab[aria-pressed="true"]{background:var(--ink)}
  .m-fab[aria-pressed="true"] svg{stroke:#fff}

  .gs2-tracking .side{position:fixed;left:0;right:0;bottom:calc(57px + env(safe-area-inset-bottom));width:auto;
    height:var(--sheet-h);z-index:1000;border-right:0;border-radius:18px 18px 0 0;
    box-shadow:0 -6px 24px rgba(20,22,26,.14);transition:height .2s ease}
  .gs2-tracking #gs2app[data-dragging] .side,.gs2-tracking #gs2app[data-dragging] .m-fabs{transition:none}
  .sheet-grip{display:flex;justify-content:center;align-items:center;height:24px;width:100%;flex-shrink:0;touch-action:none;cursor:grab}
  .sheet-grip span{width:40px;height:5px;border-radius:3px;background:var(--line-3)}
  .gs2-tracking .side-head{padding:0 16px 10px;gap:10px;touch-action:none}
  .gs2-tracking .side-head .search{display:none}
  .gs2-tracking .chips{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;touch-action:pan-x}
  .gs2-tracking .chips::-webkit-scrollbar{display:none}
  .gs2-tracking .chip{height:34px;padding:0 13px;flex-shrink:0;font-size:13px}
  .gs2-tracking .row{padding:12px 16px;min-height:62px}
  .gs2-tracking .row>.row-addr{display:none}
  @media (prefers-reduced-motion:reduce){.gs2-tracking .side,.m-fabs{transition:none}}

  /* детайл */
  .gs2-tracking #gs2app[data-focus] .m-top,.gs2-tracking #gs2app[data-focus] .m-fabs,
  .gs2-tracking #gs2app[data-focus] .tabbar{display:none}
  .gs2-tracking #gs2app[data-focus] .canvas{bottom:auto;height:36vh}
  .gs2-tracking .detail{position:fixed;top:calc(36vh - 16px);left:0;right:0;bottom:0;border-left:0;
    border-radius:18px 18px 0 0;box-shadow:0 -6px 24px rgba(20,22,26,.12);z-index:900;transition:none}
  .gs2-tracking .detail:not([data-open]){display:none}
  .gs2-tracking .detail[data-open],.gs2-tracking .detail-inner{width:100%}
  .gs2-tracking .detail-head{padding:18px 16px 14px}
  .gs2-tracking .tabs{padding:0 16px;overflow-x:auto;scrollbar-width:none}
  .gs2-tracking .tab{min-height:44px;white-space:nowrap}
  .gs2-tracking .sect{padding:16px}
  .gs2-tracking .tiles .tile{padding:11px 12px}
  .gs2-tracking .tiles .v{font-size:18px}
  .gs2-tracking .detail-foot{padding:12px 16px calc(12px + env(safe-area-inset-bottom))}
  .gs2-tracking .back{height:40px}
  .gs2-tracking .drv-btn{height:40px}
  .gs2-tracking .menu{right:16px}
}

/* ---------- история на маршрут ---------- */
.hist{flex-grow:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
.hist-top{height:62px;background:var(--surface);border-bottom:1px solid var(--line);
  display:flex;align-items:center;padding:0 20px;gap:12px;flex-shrink:0;flex-wrap:nowrap}
.hist-top h1{margin:0;font-size:15.5px;font-weight:600;white-space:nowrap}
.vsep{width:1px;height:22px;background:var(--line);flex-shrink:0}
.ctl{height:34px;border:1px solid var(--line-3);border-radius:var(--r-s);display:flex;
  align-items:center;padding:0 10px;gap:8px;background:var(--surface)}
.ctl select,.ctl input{border:0;background:none;font:inherit;font-size:12.5px;outline:none;color:var(--ink);max-width:220px}
.ctl input[type="date"]{font-family:var(--mono)}
.hist-body{flex-grow:1;display:flex;overflow:hidden;min-height:0}
.hist-side{width:330px;background:var(--surface);border-right:1px solid var(--line);
  display:flex;flex-direction:column;flex-shrink:0}
.stats{padding:18px 20px;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px;
  border-bottom:1px solid var(--line-2)}
.stat .k{font-size:11px;color:var(--ink-4)}
.stat .v{font-family:var(--mono);font-size:19px;font-weight:600}
.stat .v small{font-size:12px;color:#9aa1ac;font-weight:400}
.legs{flex-grow:1;overflow-y:auto}
.leg{width:100%;text-align:left;padding:12px 20px;border-left:3px solid transparent;
  border-top:1px solid var(--line-2);display:flex;gap:12px;transition:background .1s}
.leg:hover{background:#fafbfc}
.leg[aria-current="true"]{background:var(--accent-soft)}
.leg .t{font-family:var(--mono);font-size:11.5px;color:var(--ink-3);width:42px;flex-shrink:0}
.leg .b{display:flex;flex-direction:column;gap:3px;flex-grow:1;min-width:0}
.leg .n{font-size:12.5px;font-weight:500}
.leg .s{font-size:11.5px;color:var(--ink-4)}
.hist-main{flex-grow:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
.hist-map{flex-grow:1;position:relative;background:var(--map)}
#gs2histmap{position:absolute;inset:0}
.player{height:184px;background:var(--surface);border-top:1px solid var(--line);
  padding:14px 22px 20px;display:flex;flex-direction:column;gap:12px;flex-shrink:0}
.player-top{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.tbtn{width:34px;height:34px;border-radius:50%;border:1px solid var(--line-3);display:flex;
  align-items:center;justify-content:center}
.tbtn:hover{background:var(--surface-2)}
.tbtn.play{width:40px;height:40px;background:var(--ink);border:0}
.tbtn[disabled]{opacity:.4;cursor:default}
.clock{font-family:var(--mono);font-size:15px;font-weight:600;min-width:78px}
.speeds{display:flex;gap:5px}
.sbtn{height:26px;padding:0 10px;border-radius:var(--r-s);background:var(--surface-2);
  font-size:11.5px;color:var(--ink-3)}
.sbtn[aria-pressed="true"]{background:var(--ink);color:#fff;font-weight:600}
.legend{display:flex;gap:14px;font-size:11.5px;color:var(--ink-3);flex-wrap:wrap}
.legend i{width:9px;height:3px;border-radius:2px;display:inline-block;margin-right:6px}
.track{position:relative;height:78px;cursor:pointer;touch-action:none}
.track svg{position:absolute;inset:0;width:100%;height:100%}
.cursor{position:absolute;top:0;bottom:14px;width:2px;background:var(--ink);pointer-events:none}
.cursor::after{content:"";position:absolute;left:-6px;top:-3px;width:14px;height:14px;border-radius:50%;
  background:var(--ink);border:3px solid #fff;box-shadow:0 1px 4px rgba(20,22,26,.3)}
.ticks{position:absolute;left:0;right:0;bottom:-2px;display:flex;justify-content:space-between;
  font-family:var(--mono);font-size:10px;color:var(--ink-5);pointer-events:none}
/* Наслагва се върху картата; като flex съсед избутваше картата настрани. */
.hist-empty{position:absolute;inset:0;z-index:600;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:10px;color:var(--ink-4);font-size:13.5px;
  text-align:center;padding:40px;background:rgba(247,248,250,.94)}
.hist-empty[hidden]{display:none}
.hist-empty strong{color:var(--ink-2);font-size:15px;font-weight:600}
.gs2-tip{background:var(--ink);color:#fff;border-radius:var(--r-m);padding:8px 12px;
  display:flex;flex-direction:column;gap:3px;box-shadow:0 4px 16px rgba(20,22,26,.24);white-space:nowrap}
.gs2-tip .sp{font-family:var(--mono);font-size:14px;font-weight:600}
.gs2-tip .mt{font-size:10.5px;color:#9aa1ac}
@media (max-width:1100px){ .hist-side{width:280px} }

/* ---------- справки ---------- */
.rep{flex-grow:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
.rep-body{flex-grow:1;display:flex;overflow:hidden;min-height:0}
.rep-nav{width:250px;background:var(--surface);border-right:1px solid var(--line);
  padding:16px 12px;display:flex;flex-direction:column;gap:4px;flex-shrink:0;overflow-y:auto}
.rep-nav button{text-align:left;padding:11px 14px;border-radius:var(--r-m);font-size:13px;color:var(--ink-2)}
.rep-nav button:hover{background:var(--surface-2)}
.rep-nav button[aria-current="true"]{background:var(--ink);color:#fff;font-weight:500}
.rep-main{flex-grow:1;overflow-y:auto;padding:24px 28px;min-width:0}
.rep-out{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-l);
  padding:24px 26px;max-width:1100px}
.rep-out h3{margin:0 0 18px;font-size:17px;font-weight:600;letter-spacing:-.01em}
.rep-out table{border-collapse:collapse;font-size:13px;margin-bottom:18px}
.rep-out table:not(.report){width:auto}
.rep-out table:not(.report) td{padding:6px 22px 6px 0;vertical-align:top}
.rep-out table:not(.report) td:first-child{color:var(--ink-3);white-space:nowrap}
.rep-out table:not(.report) td strong{font-weight:500}
.rep-out table:not(.report) td:last-child{font-family:var(--mono);font-weight:500}
.rep-out .report{width:100%;display:table;overflow-x:auto}
.rep-out .report th{background:#fafbfc;border-bottom:1px solid var(--line-2);padding:10px 12px;
  font-size:11.5px;font-weight:600;color:var(--ink-3);text-align:center;white-space:nowrap}
.rep-out .report td{padding:11px 12px;border-bottom:1px solid #f4f6f8;font-family:var(--mono);
  font-size:12.5px;text-align:center;white-space:nowrap}
.rep-out .report tr:last-child td{border-bottom:0}
.rep-scroll{overflow-x:auto}
.rep-out br{display:none}
.rep-out hr{display:none}
.rep-out img{display:none}
.rep-empty{color:var(--ink-4);font-size:13.5px;text-align:center;padding:60px 20px}
.rep-empty strong{display:block;color:var(--ink-2);font-size:15px;font-weight:600;margin-bottom:8px}

/* ---------- история и справки на телефон ----------
   Мобилен дизайн за тях няма; подредбата следва останалите екрани:
   контролите горе на два реда, картата и плейърът над списъците. */
@media (max-width:767px){
  .hist .hist-top,.rep .hist-top{height:auto;flex-wrap:wrap;padding:10px 12px;gap:8px}
  .hist .hist-top h1,.rep .hist-top h1{flex:1 1 100%;font-size:18px}
  .hist .hist-top .vsep,.rep .hist-top .vsep,.hist .hist-top a.ctl,
  .hist .hist-top>div[style*="flex-grow"],.rep .hist-top>div[style*="flex-grow"]{display:none}
  .hist .hist-top .ctl,.rep .hist-top .ctl{height:42px}
  .hist .hist-top label.ctl:first-of-type,.rep .hist-top label.ctl:first-of-type{flex:1 1 100%}
  .hist .hist-top label.ctl,.rep .hist-top label.ctl{min-width:0}
  .ctl select,.ctl input{font-size:16px;max-width:none;width:100%;min-width:0}
  .hist .hist-top #gs2load,.rep .hist-top #gs2run{height:42px!important}

  .hist-body{flex-direction:column;overflow-y:auto}
  .hist-main{flex-shrink:0;overflow:visible;order:1}
  .hist-map{flex:none;height:42vh}
  .player{height:auto;padding:12px 14px 16px}
  .player .legend{display:none}
  .track{height:64px}
  .hist-side{width:100%;border-right:0;border-top:1px solid var(--line);flex-shrink:0;order:2}
  .legs{overflow:visible}
  .leg{padding:12px 14px;min-height:52px}

  .rep .hist-top label.ctl:nth-of-type(2){flex:1 1 auto}
  .rep-body{flex-direction:column;overflow-y:auto}
  .rep-nav{width:auto;flex-direction:row;overflow-x:auto;overflow-y:visible;padding:10px 12px;
    border-right:0;border-bottom:1px solid var(--line);flex-shrink:0;scrollbar-width:none}
  .rep-nav::-webkit-scrollbar{display:none}
  .rep-nav button{white-space:nowrap;padding:10px 14px;flex-shrink:0}
  .rep-main{padding:12px;overflow:visible;flex-shrink:0}
  .rep-out{padding:16px}
  .rep-out table:not(.report) td{padding:6px 12px 6px 0}
  .rep-out table:not(.report) td:first-child{white-space:normal}
}

/* ---------- събития ---------- */
.ev{flex-grow:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
.ev-body{flex-grow:1;display:flex;overflow:hidden;min-height:0}
.ev-list{width:420px;background:var(--surface);border-right:1px solid var(--line);
  display:flex;flex-direction:column;flex-shrink:0}
.ev-tabs{display:flex;gap:22px;padding:0 20px;border-bottom:1px solid var(--line-2);flex-shrink:0}
.ev-tabs button{padding:14px 0;font-size:13px;color:var(--ink-3);border-bottom:2px solid transparent}
.ev-tabs button[aria-selected="true"]{color:var(--ink);font-weight:600;border-bottom-color:var(--ink)}
.ev-tabs .n{font-family:var(--mono);font-size:11px;color:var(--ink-4);margin-left:5px}
.ev-scroll{flex-grow:1;overflow-y:auto}
.ev-row{width:100%;text-align:left;padding:13px 20px;border-top:1px solid var(--line-2);
  border-left:3px solid transparent;display:flex;gap:12px;align-items:flex-start;transition:background .1s}
.ev-row:hover{background:#fafbfc}
.ev-row[aria-selected="true"]{background:var(--accent-soft);border-left-color:var(--accent)}
.ev-ico{width:32px;height:32px;border-radius:9px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.ev-row .b{flex-grow:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.ev-row .n{font-size:13.5px;font-weight:500}
.ev-row .s{font-size:12px;color:var(--ink-3)}
.ev-row .t{font-family:var(--mono);font-size:11px;color:var(--ink-4);flex-shrink:0}
.ev-off{opacity:.55}
.ev-main{flex-grow:1;overflow-y:auto;padding:24px 28px;min-width:0}
.ev-form{max-width:760px;display:flex;flex-direction:column;gap:18px}
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-l);
  padding:18px 20px;display:flex;flex-direction:column;gap:14px}
.card h3{margin:0;font-size:13.5px;font-weight:600}
.card .hint{font-size:12px;color:var(--ink-3);line-height:1.5;margin:0}
.field{display:flex;flex-direction:column;gap:7px;flex-grow:1;min-width:0}
.field label{font-size:12px;font-weight:500;color:var(--ink-2)}
.inp{height:42px;border:1px solid var(--line-3);border-radius:var(--r-m);display:flex;
  align-items:center;padding:0 13px;gap:8px;background:var(--surface)}
.inp:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px rgba(57,112,202,.12)}
.inp input,.inp select{border:0;background:none;font:inherit;font-size:14px;width:100%;outline:none;color:var(--ink)}
.inp .u{font-size:12px;color:#9aa1ac;flex-shrink:0}
.row2{display:flex;gap:14px;flex-wrap:wrap}
.days{display:flex;gap:5px;flex-wrap:wrap}
.day{width:38px;height:34px;border-radius:8px;background:var(--surface-2);color:#9aa1ac;
  display:flex;align-items:center;justify-content:center;font-size:12px}
.day[aria-pressed="true"]{background:var(--ink);color:#fff;font-weight:600}
.chan{display:flex;align-items:center;gap:13px;padding:13px 15px;border:1px solid var(--line);
  border-radius:10px;width:100%;text-align:left;transition:border-color .12s,background .12s}
.chan[aria-pressed="true"]{border:1.5px solid var(--accent);background:var(--accent-soft)}
.chan[disabled]{opacity:.5;cursor:not-allowed}
.chan-ico{width:34px;height:34px;border-radius:9px;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.chan .t{font-size:13px;font-weight:500}
.chan[aria-pressed="true"] .t{font-weight:600}
.chan .s{font-size:11.5px;color:var(--ink-3)}
.sw{width:38px;height:22px;border-radius:11px;background:var(--line-3);display:flex;
  align-items:center;padding:0 2px;flex-shrink:0;transition:background .15s}
.sw>i{width:18px;height:18px;border-radius:50%;background:#fff;transition:transform .15s}
[aria-pressed="true"]>.sw,[aria-checked="true"]>.sw{background:var(--accent)}
[aria-pressed="true"]>.sw>i,[aria-checked="true"]>.sw>i{transform:translateX(16px)}
@media (prefers-reduced-motion:reduce){.sw,.sw>i{transition:none}}
.objs{display:flex;flex-direction:column;gap:2px;max-height:240px;overflow-y:auto;
  border:1px solid var(--line-2);border-radius:var(--r-m);padding:6px}
.obj{display:flex;align-items:center;gap:10px;padding:8px 8px;border-radius:7px;width:100%;text-align:left;font-size:13px}
.obj:hover{background:var(--surface-2)}
.box{width:17px;height:17px;border-radius:5px;border:1.5px solid var(--line-3);flex-shrink:0;
  display:flex;align-items:center;justify-content:center}
.obj[aria-checked="true"] .box{background:var(--accent);border-color:var(--accent)}
.box svg{display:none}
.obj[aria-checked="true"] .box svg{display:block}
.form-foot{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.btn-danger{color:var(--alarm);border:1px solid #f3c9c9;width:auto;padding:0 16px}
.btn-danger:hover{background:#fef2f2}
.note{font-size:12.5px;padding:11px 13px;border-radius:var(--r-m);line-height:1.5}
.note-ok{background:#f0f9f3;color:#14532d}
.note-err{background:#fef2f2;color:#991b1b}
.note-info{background:var(--accent-soft);color:#1e3a8a}
.tg-link{font-family:var(--mono);font-size:12px;word-break:break-all;color:var(--accent)}

/* дневник: групи по дни, вид, непрочетени; мобилен изглед по артборда "Събития" */
.ev-detail{flex-grow:1;display:flex;flex-direction:column;min-width:0;overflow:hidden}
.ev-back{display:none}
.ev-chips{padding:12px 20px;border-bottom:1px solid var(--line-2);flex-shrink:0}
.ev-chips[hidden]{display:none}
.ev-day{padding:14px 20px 6px;font-size:11px;font-weight:600;color:var(--ink-4);letter-spacing:.05em;
  background:var(--ground);border-top:1px solid var(--line-2)}
.ev-row[data-kind="alarm"]{border-left-color:var(--alarm)}
.ev-row[data-kind="warn"]{border-left-color:var(--idle)}
.ev-row[data-kind="info"]{border-left-color:var(--accent)}
.ev-row[aria-selected="true"][data-kind]{border-left-color:var(--accent)}
.ev-row .n{font-weight:500}
.ev-row[data-new] .n{font-weight:600}
.ev-row:not([data-new]) .ev-ico{opacity:.75}
.ev-row .udot{width:8px;height:8px;border-radius:50%;background:var(--accent);flex-shrink:0;align-self:center}
.linkbtn{font-size:13px;font-weight:500;color:var(--accent);padding:6px 4px}
.linkbtn:hover{color:#2b57a0}
.linkbtn[hidden]{display:none}
.ev-main a.btn-ghost{color:var(--ink)}

@media (max-width:767px){
  .ev .hist-top{padding:0 16px;height:60px}
  .ev .hist-top h1{font-size:20px}
  #gs2new,.ev-tabs{display:none}
  .ev-body{display:block;overflow:hidden;height:calc(100% - 60px)}
  .ev-list{width:100%;border-right:0;height:100%}
  .ev-chips{padding:10px 16px}
  .ev-chips .chip{height:34px;padding:0 14px;font-size:13px}
  .ev-day{padding:14px 16px 6px}
  .ev-row{padding:14px 16px;min-height:64px}
  .ev-detail{display:none}
  #gs2app[data-ev-detail] .ev-list{display:none}
  #gs2app[data-ev-detail] .ev-detail{display:flex;height:100%}
  #gs2app[data-ev-detail] .hist-top{display:none}
  #gs2app[data-ev-detail] .ev-body{height:100%}
  .ev-back{display:flex;align-items:center;gap:9px;height:52px;padding:0 16px;font-size:14px;font-weight:500;
    border-bottom:1px solid var(--line);background:var(--surface);flex-shrink:0}
  .ev-main{padding:16px}
  .ev-main .form-foot .btn{flex-grow:1}
}

/* ---------- вход и възстановяване ---------- */
body.gs2-auth{overflow:auto}
.auth{min-height:100vh;display:flex;background:var(--surface)}
.auth-form{width:560px;max-width:100%;padding:56px 64px;display:flex;flex-direction:column;flex-shrink:0}
.auth-brand{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--ink)}
.auth-brand span{font-size:19px;font-weight:700;letter-spacing:-.02em}
.auth-body{flex-grow:1;display:flex;flex-direction:column;justify-content:center;gap:28px;padding:40px 0;max-width:420px}
.auth-body h1{margin:0;font-size:30px;font-weight:600;letter-spacing:-.025em;text-wrap:balance}
.auth-body .lead{margin:9px 0 0;font-size:14.5px;color:var(--ink-3);line-height:1.55}
.auth-fields{display:flex;flex-direction:column;gap:16px}
.auth-field{display:flex;flex-direction:column;gap:7px}
.auth-field .top{display:flex;justify-content:space-between;align-items:baseline}
.auth-field label{font-size:12.5px;font-weight:500;color:var(--ink-2)}
.auth-inp{height:46px;border:1px solid var(--line-3);border-radius:10px;display:flex;align-items:center;
  padding:0 14px;gap:8px;background:var(--surface);transition:border-color .12s,box-shadow .12s}
.auth-inp:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px rgba(57,112,202,.12)}
.auth-inp input{border:0;background:none;font:inherit;font-size:14.5px;width:100%;outline:none;color:var(--ink)}
.auth-inp .eye{color:#9aa1ac;display:flex;padding:4px}
.auth-inp .eye:hover{color:var(--ink-2)}
.auth-check{display:flex;align-items:center;gap:9px;font-size:13px;color:var(--ink-2);cursor:pointer;user-select:none}
.auth-check input{width:17px;height:17px;accent-color:var(--accent);margin:0}
.auth-submit{height:48px;border-radius:10px;background:var(--ink);color:#fff;font-size:14.5px;font-weight:600;
  display:flex;align-items:center;justify-content:center;gap:8px;transition:background .12s}
.auth-submit:hover{background:#22262e}
.auth-submit[disabled]{opacity:.6;cursor:progress}
.auth-link{font-size:12.5px;color:var(--accent);font-weight:500}
.auth-link:hover{color:#2b57a0}
.auth-foot{display:flex;gap:18px;font-size:12px;color:#9aa1ac;flex-wrap:wrap}
.auth-foot a{color:inherit;text-decoration:none}
.auth-foot a:hover{color:var(--ink-2)}
.auth-msg{font-size:13px;padding:12px 14px;border-radius:10px;line-height:1.5}
.auth-msg[hidden]{display:none}
.auth-msg.err{background:#fef2f2;color:#991b1b}
.auth-msg.ok{background:#f0f9f3;color:#14532d}
.auth-strength{height:4px;border-radius:2px;background:var(--line-2);overflow:hidden}
.auth-strength i{display:block;height:100%;width:0;transition:width .2s,background .2s}
.auth-hint{font-size:12px;color:var(--ink-4)}
.auth-art{flex-grow:1;background:var(--ink);position:relative;overflow:hidden;min-height:100vh}
.auth-art svg{position:absolute;inset:0;width:100%;height:100%}
.auth-tag{position:absolute;left:64px;bottom:72px;right:64px;max-width:440px;font-size:26px;font-weight:600;
  color:#fff;line-height:1.35;letter-spacing:-.02em;text-wrap:balance}
@media (max-width:980px){
  .auth-art{display:none}
  .auth-form{width:100%;padding:36px 28px}
  .auth-body{max-width:none}
}

/* ---------- администрация (cpanel2.php) ---------- */
.cp{flex-grow:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
.cp-secs{display:flex;gap:4px;height:100%;align-items:stretch}
.cp-secs button{padding:0 12px;font-size:13px;color:var(--ink-3);border-bottom:2px solid transparent;margin-bottom:-1px;
  display:flex;align-items:center;gap:6px;white-space:nowrap}
.cp-secs button:hover{color:var(--ink)}
.cp-secs button[aria-selected="true"]{color:var(--ink);font-weight:600;border-bottom-color:var(--ink)}
.cp-secs .n{font-family:var(--mono);font-size:11px;color:var(--ink-4);font-weight:400}
.cp-viewas-k{color:var(--ink-4);font-size:12px;white-space:nowrap}
.cp-legacy{font-size:12px;color:var(--ink-3);text-decoration:none;white-space:nowrap}
.cp-legacy:hover{color:var(--ink);background:var(--surface-2)}

.cp-body{flex-grow:1;display:flex;flex-direction:column;gap:14px;padding:18px 24px 20px;min-height:0}
.cp-bar{display:flex;align-items:center;gap:14px;flex-shrink:0}
.cp-search{width:340px;max-width:100%;background:var(--surface);border:1px solid var(--line-3)}
.cp-search:focus-within{border-color:var(--accent);box-shadow:0 0 0 3px rgba(57,112,202,.12)}
.cp-bar .btn-primary{flex-grow:0}
.cp-card{flex-grow:1;min-height:0;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-l);
  display:flex;flex-direction:column;overflow:hidden}
.cp-scroll{flex-grow:1;overflow:auto}
.cp-table{width:100%;border-collapse:collapse;font-size:13px}
.cp-table th{position:sticky;top:0;z-index:1;background:#fafbfc;border-bottom:1px solid var(--line-2);
  padding:0 14px;height:40px;text-align:left;font-size:11.5px;font-weight:600;color:var(--ink-3);white-space:nowrap}
.cp-table th button{display:inline-flex;align-items:center;gap:5px;height:40px;font-weight:600;color:inherit}
.cp-table th button:hover{color:var(--ink)}
.cp-table th[aria-sort="ascending"],.cp-table th[aria-sort="descending"]{color:var(--ink)}
.sort-i{display:inline-flex;width:10px}
.cp-table td{padding:11px 14px;border-bottom:1px solid #f1f3f5;vertical-align:middle}
.cp-table tr:last-child td{border-bottom:0}
.cp-table th.num,.cp-table td.num{text-align:right}
.cp-table th.num button{flex-direction:row-reverse}
.cp-table td.acts{text-align:right;width:1%;white-space:nowrap}
.cp-table tr.clickable{cursor:pointer;transition:background .1s}
.cp-table tr.clickable:hover{background:#fafbfc}
.cp-table tr.clickable:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.cp-table tbody[aria-busy] {opacity:.55;transition:opacity .15s}
.cp-table .empty{text-align:center}
.cp-who{display:flex;align-items:center;gap:11px;min-width:0}
.cp-who-t{min-width:0}
.cp-av{width:32px;height:32px;font-size:11.5px;background:var(--surface-2);color:var(--ink-2)}
.cp-av.lg{width:44px;height:44px;font-size:15px}
.cp-av[data-role="super_admin"],.cp-av[data-role="admin"]{background:var(--ink);color:#fff}
.cp-av[data-role="manager"]{background:var(--accent);color:#fff}
.cp-name{font-size:13.5px;font-weight:500;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:320px}
.cp-sub{font-size:11.5px;color:var(--ink-4);margin-top:2px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:320px}
.cp-t{font-size:12.5px;color:var(--ink-2);white-space:nowrap}
.cp-dim{color:var(--ink-5);font-size:12px}
.role{display:inline-flex;align-items:center;height:22px;padding:0 8px;border-radius:6px;font-size:11.5px;font-weight:500;
  background:var(--surface-2);color:var(--ink-2);white-space:nowrap}
.role[data-role="super_admin"],.role[data-role="admin"]{background:var(--ink);color:#fff}
.role[data-role="manager"]{background:#e8effa;color:#1e3a8a}
.role[data-role="viewer"]{background:#f4f1fb;color:#5b21b6}
.st{display:inline-flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink-2);white-space:nowrap}
.cp-conn{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink-2);white-space:nowrap}
.cp-ulinks{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.cp-ulink{font-size:12.5px;color:var(--accent);font-weight:500;max-width:160px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cp-ulink:hover{color:#2b57a0;text-decoration:underline}
.cp-rowacts{display:flex;gap:6px;justify-content:flex-end;align-items:center}
.cp-table th.sel,.cp-table td.sel{width:1%;padding-right:0;cursor:default}
.cp-table .sel input{width:16px;height:16px;accent-color:var(--accent);cursor:pointer;vertical-align:middle}
.cp-bulk{display:flex;align-items:center;gap:8px;padding:4px 6px 4px 12px;background:var(--accent-soft);border:1px solid #d6e2f5;border-radius:var(--r-m)}
.cp-bulk .btn{flex-grow:0}
.cp-bulk-n{font-size:13px;color:var(--ink-2);margin-right:4px}
.cp-bar #gs2cpMailAll{flex-grow:0}
.modal-card.cp-mail-card{width:560px}
.cp-quick{display:flex;gap:6px;margin-top:-6px}
.cp-iconbtn{width:32px;height:32px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;color:var(--ink-3);flex-shrink:0}
.cp-iconbtn:hover{background:var(--surface-2);color:var(--ink)}
.cp-iconbtn.danger:hover{background:#fef2f2;color:var(--alarm)}
.cp-iconbtn[disabled]{opacity:.35;cursor:default;background:none}
.cp-pager{display:flex;align-items:center;justify-content:flex-end;gap:10px;padding:8px 12px;border-top:1px solid var(--line-2);
  font-size:12px;color:var(--ink-3);flex-shrink:0}
.cp-pager[hidden]{display:none}

/* страничен панел и диалози */
.cp-scrim{position:fixed;inset:0;z-index:1700;background:rgba(20,22,26,.22)}
.cp-scrim[hidden]{display:none}
.drawer{position:fixed;top:0;right:0;bottom:0;z-index:1710;width:min(520px,100vw);background:var(--surface);
  box-shadow:-8px 0 32px rgba(20,22,26,.16);display:flex;flex-direction:column;animation:gs2drawer .18s ease-out}
.drawer[hidden]{display:none}
@keyframes gs2drawer{from{transform:translateX(24px);opacity:.4}to{transform:none;opacity:1}}
@media (prefers-reduced-motion:reduce){.drawer{animation:none}}
.drawer-head{padding:20px 24px 16px;border-bottom:1px solid var(--line-2);display:flex;flex-wrap:wrap;gap:14px;align-items:flex-start;flex-shrink:0}
.drawer-head .close{margin-left:auto;order:2}
.drawer-id{display:flex;align-items:center;gap:13px;min-width:0;flex:1 1 0;order:1}
.drawer-id-t{min-width:0}
.drawer-id h2{margin:0;font-size:18px;font-weight:600;letter-spacing:-.015em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.drawer-acts{display:flex;gap:8px;flex-basis:100%;order:3}
.drawer-acts .btn{flex-grow:0}
.drawer .tabs{padding:0 24px}
.drawer .tab-c{font-family:var(--mono);font-size:11px;color:var(--ink-4);margin-left:6px;font-weight:400}
.drawer-body{flex-grow:1;overflow-y:auto}
.drawer-body .sect{padding:18px 24px}
.drawer-body .empty{padding:36px 20px}
.drawer-foot{padding:12px 24px;border-top:1px solid var(--line-2);display:flex;gap:8px;align-items:center;flex-shrink:0}
.drawer-note{flex-grow:1;min-width:0}
.drawer-note .note{padding:7px 11px;font-size:12px}
.drawer .inp input[disabled],.drawer .inp select[disabled]{color:var(--ink-4)}
.drawer .inp:has(input[disabled]),.drawer .inp:has(select[disabled]){background:var(--ground)}
.inp select{appearance:auto}
.cp-ta{width:100%;border:1px solid var(--line-3);border-radius:var(--r-m);padding:10px 13px;font:inherit;font-size:14px;
  color:var(--ink);resize:vertical;min-height:70px;outline:none}
.cp-ta:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(57,112,202,.12)}
.cp-switches{display:flex;flex-direction:column}
.cp-switch{display:flex;align-items:center;gap:14px;width:100%;text-align:left;padding:10px 0;border-top:1px solid var(--line-2)}
.cp-switches .cp-switch:first-child{border-top:0;padding-top:2px}
.sect>.cp-switch{border-top:0;padding:4px 0}
.cp-switch-t{flex-grow:1;display:flex;flex-direction:column;gap:2px;min-width:0}
.cp-switch .t{font-size:13px;font-weight:500}
.cp-switch .s{font-size:11.5px;color:var(--ink-4)}
.cp-switch[disabled]{cursor:not-allowed}
.cp-switch[disabled] .t,.cp-switch[disabled] .sw{opacity:.5}
.cp-key{display:flex;gap:8px;align-items:center}
.cp-key code{flex-grow:1;height:36px;display:flex;align-items:center;padding:0 12px;background:var(--ground);border-radius:var(--r-s);font-size:13px;letter-spacing:.04em}

.cp-pickwrap{position:relative}
.cp-pick{background:var(--surface);border:1px dashed var(--line-3)}
.cp-pick:focus-within{border-style:solid;border-color:var(--accent);box-shadow:0 0 0 3px rgba(57,112,202,.12)}
.cp-dd{position:absolute;left:0;right:0;top:calc(100% + 4px);z-index:5;background:var(--surface);border-radius:var(--r-m);
  box-shadow:var(--shadow-2);padding:5px;display:flex;flex-direction:column;max-height:280px;overflow-y:auto}
.cp-dd[hidden]{display:none}
.cp-dd button{display:flex;align-items:center;gap:10px;justify-content:space-between;padding:9px 10px;border-radius:7px;text-align:left;font-size:13px}
.cp-dd button[aria-selected="true"],.cp-dd button:hover{background:var(--surface-2)}
.cp-dd-t{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cp-dd-s{font-size:11px;color:var(--ink-4);flex-shrink:0}
.cp-dd-empty{padding:12px 10px;font-size:12.5px;color:var(--ink-4)}
.cp-olist{display:flex;flex-direction:column}
.cp-orow{padding:12px 0;border-top:1px solid var(--line-2);display:flex;flex-direction:column;gap:9px}
.cp-olist .cp-orow:first-child{border-top:0}
.cp-orow-top{display:flex;align-items:center;gap:11px}
.cp-orow-t{flex-grow:1;min-width:0}
.cp-orow-edit{display:flex;align-items:center;gap:10px;padding-left:19px;flex-wrap:wrap}
.cp-orow-edit .btn{flex-grow:0;height:32px}
.cp-mini-sw{display:inline-flex;align-items:center;gap:8px;font-size:12px;color:var(--ink-2);min-width:96px}
.cp-date{height:32px}
.cp-date input{font-family:var(--mono);font-size:12px}
.cp-chips{display:flex;flex-wrap:wrap;gap:6px}
.cp-uchip{display:inline-flex;align-items:center;gap:2px;height:30px;padding:0 4px 0 10px;border-radius:15px;background:var(--surface-2)}
.cp-uchip .cp-ulink{color:var(--ink)}
.cp-uchip-x{width:22px;height:22px;border-radius:50%;display:flex;align-items:center;justify-content:center;color:var(--ink-4)}
.cp-uchip-x svg{width:13px;height:13px}
.cp-uchip-x:hover{background:#e3e6ea;color:var(--alarm)}
.btn-danger svg,.btn-line svg{flex-shrink:0}
.btn-solid-danger{background:var(--alarm);color:#fff}
.btn-solid-danger:hover{background:#b91c1c}
.btn[disabled]{opacity:.6;cursor:progress}

.modal{position:fixed;inset:0;z-index:1800;background:rgba(20,22,26,.34);display:flex;align-items:center;justify-content:center;padding:20px}
.modal[hidden]{display:none}
.modal-card{width:420px;max-width:100%;background:var(--surface);border-radius:var(--r-l);box-shadow:var(--shadow-2);padding:22px}
.modal-card form{display:flex;flex-direction:column;gap:14px}
.modal-card h2{margin:0 0 8px;font-size:16px;font-weight:600;letter-spacing:-.01em}
.modal-card form h2{margin:0}
.modal-text{margin:0 0 18px;font-size:13px;line-height:1.55;color:var(--ink-2)}
.modal-card form .modal-text{margin:0}
.modal-card .note[hidden]{display:none}

.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%);z-index:1900;background:var(--ink);color:#fff;
  padding:10px 16px;border-radius:var(--r-m);font-size:13px;box-shadow:0 6px 20px rgba(20,22,26,.25);max-width:min(520px,calc(100vw - 32px))}
.toast.err{background:#991b1b}
.toast[hidden]{display:none}

@media (max-width:1100px){
  .cp-top .cp-viewas-k{display:none}
  .cp-table .n-hide{display:none}
}
@media (max-width:767px){
  .cp-top{height:auto;flex-wrap:wrap;padding:12px 16px 0;gap:8px 10px}
  .cp-top h1{font-size:20px;flex:1 1 auto}
  .cp-top .vsep,.cp-top>div[style*="flex-grow"]{display:none}
  .cp-top .cp-legacy{order:1;height:32px}
  .cp-top .cp-viewas{order:2;flex:1 1 100%;height:42px}
  .cp-top .cp-viewas-k{display:inline}
  .cp-secs{order:3;flex:1 1 100%;height:46px;overflow-x:auto;scrollbar-width:none;margin:0 -16px;padding:0 16px}
  .cp-secs::-webkit-scrollbar{display:none}
  .cp-secs button{padding:0 10px;min-height:44px}
  .cp-body{padding:12px 12px 16px;gap:10px}
  .cp-bar{flex-wrap:wrap;gap:8px}
  .cp-search{width:auto;flex:1 1 100%;height:44px}
  .cp-search input{font-size:16px}
  .cp-bar .btn-primary{height:40px}
  .cp-card{border-radius:var(--r-l)}
  .cp-table,.cp-table tbody{display:block}
  .cp-table thead{display:none}
  .cp-table tr{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:12px 14px;border-bottom:1px solid var(--line-2)}
  .cp-table tr:last-child{border-bottom:0}
  .cp-table td{display:none;padding:0;border:0}
  .cp-table td.m-main{display:block;flex:1 1 100%;min-width:0}
  .cp-table td.m-meta{display:block}
  .cp-table td.acts.m-main{text-align:left}
  .cp-table td.empty{display:block;flex:1 1 100%;padding:28px 10px}
  .cp-table td.num{text-align:left}
  .cp-table tr.clickable{min-height:64px}
  .cp-name,.cp-sub{max-width:none}
  .cp-rowacts{justify-content:flex-start}
  .cp-rowacts .btn{flex-grow:1;height:40px}
  .cp-rowacts .cp-iconbtn{width:40px;height:40px}

  .drawer{width:100vw;animation:none}
  .drawer-head{padding:14px 16px 12px}
  .drawer .tabs{padding:0 16px;overflow-x:auto;scrollbar-width:none}
  .drawer .tab{min-height:44px;white-space:nowrap}
  .drawer-body .sect{padding:16px}
  .drawer-foot{padding:10px 16px calc(10px + env(safe-area-inset-bottom));flex-wrap:wrap}
  .drawer-note{flex:1 1 100%}
  .drawer-note:empty{display:none}
  .drawer-foot .btn{flex-grow:1;height:44px}
  .drawer-acts .btn{flex-grow:1;height:40px}
  .drawer .inp input,.drawer .inp select,.cp-ta,.cp-pick input{font-size:16px}
  .cp-iconbtn{width:40px;height:40px}
  .modal{align-items:flex-end;padding:0}
  .modal-card{width:100%;border-radius:18px 18px 0 0;padding:20px 18px calc(20px + env(safe-area-inset-bottom))}
  .modal-card .inp input{font-size:16px}
  .modal-card .confirm-acts .btn{flex-grow:1;height:44px}
  .toast{bottom:calc(70px + env(safe-area-inset-bottom))}
}

.cp [hidden],.drawer [hidden]{display:none!important}
.cp-dd.up{top:auto;bottom:calc(100% + 4px)}
.m-only{display:none}
.drawer-id-t .cp-sub{white-space:normal}
@media (max-width:767px){ .m-only{display:inline} }

/* ---------- аларми (js/gs2.nav.js) ---------- */
.alerts{position:fixed;top:16px;right:16px;z-index:1950;width:340px;max-width:calc(100vw - 24px);
  display:flex;flex-direction:column;gap:8px;pointer-events:none}
.alerts>*{pointer-events:auto}
.alert-card{display:flex;gap:11px;align-items:flex-start;background:var(--surface);border-radius:var(--r-l);
  box-shadow:var(--shadow-2);padding:12px 10px 12px 12px;border-left:4px solid var(--k,var(--accent));
  animation:gs2alert .2s ease-out}
.alert-card[hidden]{display:none}
@keyframes gs2alert{from{transform:translateY(-8px);opacity:0}to{transform:none;opacity:1}}
@media (prefers-reduced-motion:reduce){.alert-card{animation:none}}
.alert-ico{width:30px;height:30px;border-radius:8px;display:flex;align-items:center;justify-content:center;flex-shrink:0;
  color:var(--k,var(--accent));background:color-mix(in srgb,var(--k,var(--accent)) 12%,transparent)}
.alert-body{flex-grow:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.alert-t{font-size:13.5px;font-weight:600;color:var(--ink)}
.alert-s{font-size:12px;color:var(--ink-3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.alert-acts{display:flex;gap:14px;margin-top:4px}
.alert-link{font-size:12.5px;font-weight:600;color:var(--accent);text-decoration:none}
.alert-link:hover{color:#2b57a0}
.alert-link[hidden]{display:none}
.alert-x{width:26px;height:26px;border-radius:7px;display:flex;align-items:center;justify-content:center;color:var(--ink-4);flex-shrink:0}
.alert-x:hover{background:var(--surface-2);color:var(--ink)}
.alert-more{align-self:flex-end;font-size:12px;font-weight:600;color:#fff;background:var(--ink);border-radius:14px;
  padding:5px 12px;text-decoration:none;box-shadow:var(--shadow-1)}
.menu-switch{width:100%}
.menu-switch .sw{margin-left:auto}
@media (max-width:767px){
  .alerts{top:calc(8px + env(safe-area-inset-top));right:8px;left:8px;width:auto;max-width:none}
  .alert-x{width:36px;height:36px}
  .alert-link{padding:6px 0}
}

/* ---------- места на живата карта ---------- */
.places-menu{position:absolute;min-width:230px;background:var(--surface);border-radius:var(--r-l);
  box-shadow:var(--shadow-2);padding:6px;display:flex;flex-direction:column;z-index:700}
.places-menu[hidden]{display:none}
.gs2-layer-menu{min-width:190px}
.gs2-layer-menu .menu-item{gap:10px}
.gs2-layer-radio{width:14px;height:14px;border-radius:50%;border:1.5px solid var(--line-3);flex-shrink:0}
.gs2-layer-menu [aria-checked="true"] .gs2-layer-radio{border:4px solid var(--accent)}
.gs2-layer-menu [aria-checked="true"]{font-weight:600}
.gs2-layer-sep{height:1px;background:var(--line-2);margin:4px 6px}
.gs2-layer-ctl a{display:flex!important;align-items:center;justify-content:center;width:34px!important;height:34px!important;background:#fff}
.leaflet-google-layer{z-index:0}
.places-menu .menu-switch{gap:8px}
.places-menu .n{font-family:var(--mono);font-size:11px;color:var(--ink-4)}
.places-edit{font-size:12px;color:var(--ink-3);border-top:1px solid var(--line-2);border-radius:0 0 var(--r-s) var(--r-s);margin-top:4px}
.place-label-wrap{background:none;border:0}
.place-label{display:inline-block;transform:translate(-50%,-50%);white-space:nowrap;font-size:11.5px;font-weight:600;color:var(--ink);
  background:rgba(255,255,255,.88);border-radius:5px;padding:2px 6px;box-shadow:0 1px 2px rgba(20,22,26,.15);pointer-events:none}
.place-label.route{transform:translate(8px,-50%)}
.place-pop{display:flex;flex-direction:column;gap:2px;font-family:var(--sans);font-size:12.5px}
.place-pop span{color:var(--ink-3);font-size:12px}
@media (max-width:767px){
  .places-menu .menu-item{min-height:46px;font-size:14px}
}

/* ---------- места (places2.php) ---------- */
.pl{flex-grow:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
.pl-top .btn-primary{flex-grow:0}
.pl-body{flex-grow:1;display:flex;overflow:hidden;min-height:0}
.pl-side{width:360px;background:var(--surface);border-right:1px solid var(--line);display:flex;flex-direction:column;flex-shrink:0;min-height:0}
.pl-search{padding:14px 16px 10px;flex-shrink:0}
.pl-search[hidden],.pl-list[hidden],.pl-editor[hidden]{display:none}
.pl-list{flex-grow:1;overflow-y:auto}
.pl-row{width:100%;text-align:left;display:flex;align-items:center;gap:12px;padding:12px 16px;border-top:1px solid var(--line-2);transition:background .1s}
.pl-row:hover{background:#fafbfc}
.pl-sw{width:18px;height:18px;border-radius:5px;flex-shrink:0}
.pl-ico{width:22px;height:25px;object-fit:contain;flex-shrink:0}
.pl-row-t{flex-grow:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.pl-name{font-size:13.5px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl-meta{font-size:11.5px;color:var(--ink-4);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl-editor{flex-grow:1;display:flex;flex-direction:column;min-height:0}
.pl-ed-head{padding:12px 18px 14px;border-bottom:1px solid var(--line-2);display:flex;flex-direction:column;gap:6px;flex-shrink:0}
.pl-back{display:flex;align-items:center;gap:7px;font-size:12.5px;color:var(--ink-3);align-self:flex-start;padding:4px 0}
.pl-back:hover{color:var(--ink)}
.pl-ed-title{margin:0;font-size:17px;font-weight:600;letter-spacing:-.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.pl-geom{font-size:11.5px;color:var(--ink-4)}
.pl-ed-body{flex-grow:1;overflow-y:auto;padding:16px 18px;display:flex;flex-direction:column;gap:16px}
.pl-ed-body .field{flex-grow:0}
.pl-ed-foot{padding:12px 18px;border-top:1px solid var(--line-2);display:flex;gap:8px;align-items:center;flex-shrink:0}
.pl-ed-foot .btn{flex-grow:0}
.pl-colors{display:flex;gap:7px;flex-wrap:wrap;align-items:center}
.pl-color{width:26px;height:26px;border-radius:50%;box-shadow:inset 0 0 0 1px rgba(0,0,0,.08);position:relative}
.pl-color[aria-checked="true"]{box-shadow:0 0 0 2px var(--surface),0 0 0 4px var(--ink)}
.pl-color-custom{background:conic-gradient(#dc2626,#d97706,#16a34a,#0d9488,#3970ca,#7c3aed,#db2777,#dc2626);cursor:pointer;overflow:hidden}
.pl-color-custom input{position:absolute;inset:0;opacity:0;cursor:pointer;width:100%;height:100%}
.pl-icons{display:grid;grid-template-columns:repeat(auto-fill,minmax(40px,1fr));gap:4px;max-height:210px;overflow-y:auto;
  border:1px solid var(--line-2);border-radius:var(--r-m);padding:6px}
.pl-icon{height:40px;border-radius:7px;display:flex;align-items:center;justify-content:center}
.pl-icon:hover{background:var(--surface-2)}
.pl-icon[aria-pressed="true"]{background:var(--accent-soft);box-shadow:inset 0 0 0 2px var(--accent)}
.pl-icon img{width:22px;height:25px;object-fit:contain}
.pl-map{flex-grow:1;position:relative;background:var(--map);min-width:0}
#gs2plmap{position:absolute;inset:0}
.pl-hint{position:absolute;top:14px;left:50%;transform:translateX(-50%);z-index:600;max-width:calc(100% - 28px);
  background:var(--ink);color:#fff;border-radius:var(--r-m);padding:9px 14px;font-size:12.5px;box-shadow:var(--shadow-1);text-align:center}
.pl-hint[hidden]{display:none}
/* leaflet.editable дава 8 px - твърде малко за хващане, особено с пръст */
.leaflet-div-icon.leaflet-vertex-icon,.leaflet-div-icon.leaflet-drawing-icon{width:14px!important;height:14px!important;margin:-7px 0 0 -7px!important;
  background:#fff;border:2.5px solid var(--ink);border-radius:50%;box-shadow:0 1px 3px rgba(20,22,26,.3)}
.leaflet-div-icon.leaflet-middle-icon{width:10px!important;height:10px!important;margin:-5px 0 0 -5px!important;
  background:#fff;border:1.5px solid var(--ink-3);border-radius:50%}
@media (pointer:coarse){
  .leaflet-div-icon.leaflet-vertex-icon,.leaflet-div-icon.leaflet-drawing-icon{width:22px!important;height:22px!important;margin:-11px 0 0 -11px!important}
  .leaflet-div-icon.leaflet-middle-icon{width:16px!important;height:16px!important;margin:-8px 0 0 -8px!important}
}
.leaflet-editable-drawing{cursor:crosshair}
@media (max-width:767px){
  .pl .pl-top{height:auto;flex-wrap:wrap;padding:12px 16px 0;gap:8px}
  .pl .pl-top h1{font-size:20px;flex:1 1 auto}
  .pl .pl-top .vsep,.pl .pl-top>div[style*="flex-grow"]{display:none}
  .pl .pl-top .cp-secs{order:3;flex:1 1 100%;height:46px;overflow-x:auto;margin:0 -16px;padding:0 16px}
  .pl .pl-top .btn-primary{height:38px}
  .pl-body{flex-direction:column}
  .pl-map{flex:none;height:42vh;order:1}
  .pl-side{width:100%;border-right:0;border-top:1px solid var(--line);flex:1 1 auto;order:2}
  .pl-search input{font-size:16px}
  .pl-row{min-height:56px}
  .pl-ed-body input,.pl-ed-body select,.pl-ed-body textarea{font-size:16px}
  .pl-ed-foot{padding:10px 16px}
  .pl-ed-foot .btn{flex-grow:1;height:44px}
  .pl-color{width:34px;height:34px}
  #gs2app[data-editing] .tabbar{display:none}
  #gs2app[data-editing]{padding-bottom:0}
}

/* ---------- настройки (settings2.php) ---------- */
.stg{flex-grow:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
.st-body{flex-grow:1;display:flex;overflow:hidden;min-height:0}
.st-nav{width:210px}
.st-nav button[aria-current="true"]{background:var(--ink);color:#fff;font-weight:500}
.st-main{flex-grow:1;min-width:0;overflow:hidden;display:flex;flex-direction:column}
.st-main>.empty{padding:40px}
.st-split{flex-grow:1;display:flex;min-height:0}
.st-list{width:340px;border-right:1px solid var(--line);background:var(--surface);display:flex;flex-direction:column;flex-shrink:0;min-height:0}
.st-list-head{padding:14px 16px 10px;display:flex;flex-direction:column;gap:10px;flex-shrink:0}
.st-list-head .btn{flex-grow:0}
.st-rows{flex-grow:1;overflow-y:auto}
.st-row{width:100%;text-align:left;display:flex;gap:12px;align-items:center;padding:12px 16px;border-top:1px solid var(--line-2);border-left:3px solid transparent}
.st-row:hover{background:#fafbfc}
.st-row[aria-current="true"]{background:var(--accent-soft);border-left-color:var(--accent)}
.st-row-ico{width:28px;height:28px;object-fit:contain;flex-shrink:0}
.st-row-t{flex-grow:1;min-width:0;display:flex;flex-direction:column;gap:3px}
.st-name{font-size:13.5px;font-weight:500;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.st-meta{font-size:11.5px;color:var(--ink-4);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.st-edit{flex-grow:1;min-width:0;display:flex;flex-direction:column;min-height:0;background:var(--ground)}
.st-placeholder{margin:auto;color:var(--ink-4);font-size:13.5px;padding:40px;text-align:center}
.st-ed-head{padding:16px 24px 12px;background:var(--surface);display:flex;flex-direction:column;gap:10px;flex-shrink:0}
.st-ed-id{display:flex;align-items:center;gap:12px}
.st-ed-id img{width:36px;height:36px;object-fit:contain}
.st-ed-id h2{margin:0;font-size:18px;font-weight:600;letter-spacing:-.01em}
.st-tabs{background:var(--surface);overflow-x:auto;scrollbar-width:none;flex-shrink:0}
.st-tabs .tab{white-space:nowrap}
.st-tabs .tab-c{font-family:var(--mono);font-size:11px;color:var(--ink-4);margin-left:6px}
.st-ed-body{flex-grow:1;overflow-y:auto;overflow-x:hidden;padding:20px 24px;display:flex;flex-direction:column;gap:14px}
.st-ed-body>*{max-width:840px;width:100%}
.st-ed-body .card{gap:12px}
.st-ed-body .field{flex-grow:1;flex-basis:0}
.st-ed-foot{padding:12px 24px;border-top:1px solid var(--line);background:var(--surface);display:flex;gap:10px;align-items:center;flex-shrink:0}
.st-ed-foot .btn{flex-grow:0}
.st-card-head{display:flex;align-items:center;justify-content:space-between;gap:10px}
.st-card-head .btn{flex-grow:0}
.st-sub-list{display:flex;flex-direction:column;border:1px solid var(--line-2);border-radius:var(--r-m);overflow:hidden}
.st-sub-row{display:flex;align-items:center;gap:10px;padding:11px 14px;text-align:left;border-top:1px solid var(--line-2)}
.st-sub-row:first-child{border-top:0}
.st-sub-row:hover{background:#fafbfc}
.st-sub-t{flex-grow:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.st-back{margin-bottom:-4px}
.st-params{display:flex;flex-wrap:wrap;gap:6px}
.st-param{display:inline-flex;gap:6px;align-items:center;background:var(--ground);border-radius:6px;padding:4px 8px;font-size:12px}
.st-param .v{color:var(--ink-3)}
.st-cal{display:flex;flex-direction:column;gap:4px;max-height:220px;overflow-y:auto}
.st-cal-row{display:flex;align-items:center;gap:12px;font-size:13px;padding:4px 8px;background:var(--ground);border-radius:6px}
.st-cal-row .cp-iconbtn{margin-left:auto;width:26px;height:26px}
.st-cal-add{align-items:center}
.st-cal-add .field{flex-basis:0}
.st-svc-block{border:1px solid var(--line-2);border-radius:var(--r-m);padding:6px 12px 10px;display:flex;flex-direction:column;gap:8px}
.st-svc-block .cp-switch{border-top:0}
.st-icons{max-height:260px}
.st-icons .pl-icon img{width:26px;height:26px}
.st-legacy{margin:24px;max-width:560px}
/* ---------- администрация → сървър (gs2.server.js) ---------- */
.cp-server{border-top:1px solid var(--line)}
.cp-server .st-ed-body{background:var(--ground)}
.sv-stats{display:flex;flex-wrap:wrap;gap:10px}
.sv-stat{display:flex;flex-direction:column;gap:2px;min-width:110px;padding:10px 14px;background:var(--ground);border-radius:var(--r-m)}
.sv-stat-v{font-size:20px;font-weight:600;color:var(--ink)}
.sv-stat-k{font-size:12px;color:var(--ink-3)}
.sv-logo{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.sv-logo img{max-width:300px;max-height:90px;padding:10px;background:var(--ground);border:1px solid var(--line-2);border-radius:var(--r-m)}
.sv-logo-t{display:flex;flex-direction:column;gap:6px;align-items:flex-start}
.sv-form{display:flex;flex-direction:column;gap:12px;margin:6px 0 16px}
.sv-h4{margin:6px 0 -4px;font-size:12px;font-weight:600;color:var(--ink-3);text-transform:uppercase;letter-spacing:.04em}
.sv-log{padding:0 8px 0 0}
.sv-log .st-sub-t{padding:11px 14px;text-align:left}
.sv-log .cp-iconbtn{flex-shrink:0}
.modal-card.sv-log-card{width:min(900px,calc(100vw - 32px));max-width:none}
.sv-log-q{margin:10px 0 8px}
.sv-log-pre{margin:0;max-height:min(60vh,560px);overflow:auto;background:var(--ground);border:1px solid var(--line-2);border-radius:var(--r-m);padding:10px 12px;font-size:12px;line-height:1.55;white-space:pre-wrap;word-break:break-word}
.io-list{display:flex;flex-direction:column;border:1px solid var(--line-2);border-radius:var(--r-m);overflow:hidden}
.io-row{display:flex;align-items:center;gap:12px;padding:10px 14px;border-top:1px solid var(--line-2)}
.io-row:first-child{border-top:0}
.io-t{flex-grow:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.io-acts{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
.io-acts .btn{flex-grow:0;text-decoration:none;color:var(--ink)}
.io-pick{display:flex;flex-direction:column;gap:8px;margin:4px 0 8px}
.io-pick label{display:flex;align-items:center;gap:8px;font-size:14px}
.io-pick input{width:16px;height:16px;accent-color:var(--accent,#1f6feb)}
.io-pick .mono{color:var(--ink-3);margin-left:auto}
.form-foot .drawer-note{flex:1 1 100%}
@media (max-width:1100px){ .st-nav{width:170px} .st-list{width:280px} }
@media (max-width:767px){
  .stg .st-top{height:56px;padding:0 16px}
  .stg .st-top h1{font-size:20px}
  .st-body{flex-direction:column}
  .st-nav{width:auto;flex-direction:row;overflow-x:auto;padding:8px 12px;border-right:0;border-bottom:1px solid var(--line);flex-shrink:0;scrollbar-width:none}
  .st-nav::-webkit-scrollbar{display:none}
  .st-nav button{white-space:nowrap;flex-shrink:0;padding:10px 14px}
  .st-split{flex-direction:column}
  .st-list{width:100%;border-right:0;flex:1 1 auto}
  .st-edit{display:none}
  .st-split[data-open] .st-list{display:none}
  .st-split[data-open] .st-edit{display:flex;flex:1 1 auto}
  .st-ed-head{padding:10px 16px}
  .st-ed-body{padding:12px;max-width:none}
  .st-ed-body .row2{flex-direction:column;gap:12px}
  .st-ed-body input,.st-ed-body select,.st-ed-body textarea,.st-list-head input{font-size:16px}
  .st-ed-foot{padding:10px 16px}
  .st-ed-foot .btn{flex-grow:1;height:44px}
}
.st-row-av{width:28px;height:28px;font-size:11px}
.st-avatar{border-radius:50%;object-fit:cover}
.st-photo{display:flex;align-items:center;gap:12px}
.st-photo img,.st-photo .avatar{width:64px;height:64px;border-radius:50%;object-fit:cover;font-size:20px}
.st-photo .btn{flex-grow:0;cursor:pointer}
.st-vars{display:flex;flex-wrap:wrap;gap:6px}
.st-var{display:inline-flex;gap:6px;align-items:center;font-size:11.5px;color:var(--ink-3);background:var(--ground);border:1px solid var(--line-2);border-radius:6px;padding:4px 8px}
.st-var:hover{border-color:var(--accent);color:var(--ink)}
.st-var .mono{color:var(--accent);font-size:11.5px}
.st-pick{max-height:220px}
.st-pick-acts{display:flex;gap:10px;margin-top:-6px}
.st-edit-full{flex-grow:1}
.card h3 .tab-c{font-family:var(--mono);font-size:11px;color:var(--ink-4);margin-left:6px;font-weight:400}

/* ---------- правила за събития: допълнителни полета ---------- */
.ev-sub{margin-left:47px;display:flex;flex-direction:column;gap:8px}
.ev-sub .cp-switch{border-top:0;padding:4px 0}
.ev-sub .row2{align-items:center}
.ev-hours{display:flex;flex-direction:column;gap:6px}
.ev-hour-row{display:flex;align-items:center;gap:10px}
.ev-hour-row .day{min-width:112px;justify-content:flex-start}
.ev-hour-row input{height:34px;border:1px solid var(--line-3);border-radius:var(--r-s);padding:0 8px;font-size:13px;background:var(--surface);color:var(--ink)}
.ev-hour-row input:disabled{opacity:.45}
.ev-form optgroup{font-weight:600;color:var(--ink-3)}
@media (max-width:767px){ .ev-sub{margin-left:0} }

/* ---------- справки: формуляр, запазени ---------- */
.rep-nav[hidden]{display:none}
.rep-group{font-size:10.5px;font-weight:600;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-4);padding:14px 14px 4px}
.rep-group:first-child{padding-top:2px}
.rep-form{display:flex;flex-direction:column;gap:16px;max-width:1100px}
.rep-card h3{font-size:15px}
.rep-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:18px}
.rep-side{display:flex;flex-direction:column;gap:12px}
.rep-side .cp-switch{border-top:0;padding:4px 0}
.rep-pick{max-height:230px}
.rep-pick .obj[hidden]{display:none}
.rep-pick-head{display:flex;align-items:center;gap:10px}
.rep-pick-head .search{flex-grow:1;height:34px}
.rep-presets{display:flex;flex-wrap:wrap;gap:6px}
.rep-presets .sbtn{height:30px}
.rep-dt{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.rep-dt .inp{height:38px;padding:0 8px;gap:4px}
.rep-dt input{font-family:var(--mono);font-size:12.5px}
.rep-dt input[type=time]{width:92px}
.rep-cols summary{cursor:pointer;font-size:12.5px;font-weight:500;color:var(--ink-2);padding:4px 0}
.rep-col-list{display:flex;flex-wrap:wrap;gap:6px;padding-top:8px}
.rep-col-list .st-var[aria-pressed="true"]{background:var(--accent-soft);border-color:var(--accent);color:var(--ink)}
.rep-actions .btn{flex-grow:0}
.rep-actions .btn-primary{padding:0 22px}
.rep-frame{padding:0;overflow:hidden}
.rep-frame iframe{width:100%;height:640px;border:0;display:block}
.rep-saved .btn{flex-grow:0}
@media (max-width:1100px){ .rep-grid{grid-template-columns:1fr} }
@media (max-width:767px){
  .rep .rep-top{height:auto;flex-wrap:wrap;padding:12px 16px 0;gap:8px}
  .rep .rep-top h1{flex:1 1 100%}
  .rep .rep-top .vsep{display:none}
  .rep .rep-top .cp-secs{height:44px}
  .rep-dt .inp{flex:1 1 100%}
  .rep-dt input[type=date]{flex-grow:1}
  .rep-actions .btn{flex-grow:1;height:44px}
  .rep-frame iframe{height:420px}
}
.auth-logo{height:38px;width:auto;display:block}
.auth-brand span[hidden]{display:none}

/* ---------- жива карта: групи, клъстери, следване, адрес ---------- */
.follow{display:none}
#gs2app[data-focus] .follow{display:flex}
.follow[aria-pressed="true"]{background:var(--accent);color:#fff}
.follow[aria-pressed="true"] svg{stroke:#fff}
.grp-head{width:100%;display:flex;align-items:center;background:var(--ground);border-top:1px solid var(--line-2);
  font-size:11.5px;font-weight:600;color:var(--ink-3);letter-spacing:.02em;text-align:left;position:sticky;top:0;z-index:1}
.hist-delpt{margin-top:8px}
.hist-delpt .btn{width:100%}
.grp-tog{flex-grow:1;min-width:0;display:flex;align-items:center;gap:8px;padding:9px 8px 9px 20px;font:inherit;color:inherit;text-align:left;letter-spacing:inherit}
.grp-tog svg{transition:transform .15s}
.grp-tog[aria-expanded="false"] svg{transform:rotate(-90deg)}
.grp-eye{width:36px;height:34px;margin-right:10px;display:flex;align-items:center;justify-content:center;color:var(--ink-4);border-radius:var(--r-m)}
.grp-eye:hover{color:var(--ink);background:var(--surface-2)}
.grp-eye[aria-pressed="true"]{color:var(--alarm)}
.row[data-maphidden] .row-name{opacity:.55}
.row[data-maphidden] .row-name::after{content:" · скрит";font-weight:400;font-size:11px;color:var(--ink-4)}
.grp-head .grp-name{flex-grow:1}
.grp-head .n{font-family:var(--mono);font-weight:400;color:var(--ink-4)}
.gs2-cluster-wrap{background:none;border:0}
.gs2-cluster{position:relative;display:flex;align-items:center;justify-content:center;width:38px;height:38px;transform:translate(-19px,-19px);border-radius:50%;
  background:var(--ink);color:#fff;font-family:var(--mono);font-size:13px;font-weight:600;border:3px solid #fff;box-shadow:0 2px 10px rgba(20,22,26,.3)}
.gs2-cluster.md{width:46px;height:46px;transform:translate(-23px,-23px)}
.gs2-cluster.lg{width:54px;height:54px;transform:translate(-27px,-27px);font-size:14px}
.gs2-cluster i{position:absolute;top:-6px;right:-8px;min-width:18px;height:18px;padding:0 4px;border-radius:9px;background:var(--move);color:#fff;
  font-style:normal;font-size:10px;display:flex;align-items:center;justify-content:center;border:2px solid #fff}
.places-addr{border-top:1px solid var(--line-2);margin-top:4px;padding:8px 4px 4px;display:flex;flex-direction:column;gap:6px}
.places-addr .inp{height:36px}
.places-addr .inp input{font-size:13px}
.places-addr-res{display:flex;flex-direction:column;max-height:220px;overflow-y:auto}
.places-addr-res .menu-item{height:auto;min-height:36px;padding:8px 10px;font-size:12.5px;line-height:1.35}
.places-menu [hidden]{display:none}
@media (max-width:767px){
  .gs2-tracking #gs2app[data-focus] .topbar{display:flex}
  .places-addr .inp input{font-size:16px}
}

/* ---------- история: период, слоеве, точки ---------- */
.hist-menus{position:relative;display:flex;gap:8px}
.hist-menu{top:40px;right:0;left:auto}
.hist-menu .menu-item{cursor:pointer}
.hist-tabs{padding:0 20px}
.hist-tabs button{padding:12px 0}
.legs[hidden]{display:none}
.hist-pt .t{width:62px}
.hist-arrow-wrap{background:none;border:0}
.hist-arrow{position:absolute;display:flex;filter:drop-shadow(0 1px 1px rgba(0,0,0,.25))}
.hist-series{height:30px;font-size:12px}
.hist-series select{max-width:170px}
.hist-top .ctl input[type="date"]{width:132px}
@media (max-width:1280px){ .hist .hist-top{height:auto;flex-wrap:wrap;padding:10px 20px;gap:8px} }
@media (max-width:767px){
  .hist-menus{order:5}
  .hist .hist-top .hist-menus .ctl{display:flex}
  .hist-series{display:none}
}
.places-measure{border-top:1px solid var(--line-2);margin-top:4px;padding-top:4px;display:flex;flex-direction:column}
.measure-bar{position:absolute;left:50%;bottom:24px;transform:translateX(-50%);z-index:700;display:flex;align-items:center;gap:10px;
  background:var(--surface);border-radius:var(--r-l);box-shadow:var(--shadow-2);padding:8px 8px 8px 16px;font-size:13.5px;font-weight:600;font-family:var(--mono)}
.measure-bar[hidden]{display:none}
.measure-bar .btn{flex-grow:0;font-family:var(--sans)}
.measuring,.measuring .leaflet-clickable{cursor:crosshair!important}
@media (max-width:767px){ .measure-bar{bottom:calc(var(--sheet-h, 46vh) + 70px);left:12px;right:12px;transform:none} }

/* ---------- дневник: RFID, снимки, чат ---------- */
.lb{flex-grow:1;display:flex;flex-direction:column;overflow:hidden;min-width:0}
.lb-body{flex-grow:1;overflow:auto;padding:18px 24px;display:flex;flex-direction:column;gap:14px;min-height:0}
.lb-bar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;flex-shrink:0}
.lb-bar .btn{flex-grow:0;text-decoration:none;color:var(--ink)}
.lb-card{flex-grow:1;min-height:300px}
.lb-pos{color:var(--accent);text-decoration:none;font-size:12px}
.lb-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px}
.lb-grid .rep-empty{grid-column:1/-1}
.lb-img{position:relative;border-radius:var(--r-l);overflow:hidden;background:var(--surface-2);aspect-ratio:4/3;box-shadow:var(--shadow-1)}
.lb-img img{width:100%;height:100%;object-fit:cover;display:block}
.lb-img-cap{position:absolute;left:0;right:0;bottom:0;display:flex;flex-direction:column;padding:8px 10px;color:#fff;font-size:12px;text-align:left;
  background:linear-gradient(transparent,rgba(20,22,26,.75))}
.lb-view{width:min(900px,96vw);padding:12px}
.lb-view img{width:100%;max-height:70vh;object-fit:contain;border-radius:var(--r-m);background:#000}
.lb-view-info{display:flex;justify-content:space-between;align-items:flex-end;gap:12px;padding:10px 4px 2px;flex-wrap:wrap}
.lb-view-info .btn{text-decoration:none;color:var(--ink)}
.lb-view-info .btn-primary{color:#fff}
.lb-chat{flex-grow:1;display:flex;border:1px solid var(--line);border-radius:var(--r-l);background:var(--surface);overflow:hidden;min-height:420px}
.lb-chat-list{width:300px;border-right:1px solid var(--line);display:flex;flex-direction:column;min-height:0}
.lb-chat-list .search{margin:12px}
.lb-chat-list #chList{flex-grow:1;overflow-y:auto}
.lb-badge{position:static;box-shadow:none;margin-left:auto}
.lb-chat-main{flex-grow:1;display:flex;flex-direction:column;min-width:0}
.lb-chat-head{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;border-bottom:1px solid var(--line-2)}
.lb-msgs{flex-grow:1;overflow-y:auto;padding:16px;display:flex;flex-direction:column;gap:10px;background:var(--ground)}
.lb-msg{display:flex;flex-direction:column;align-items:flex-start;max-width:75%}
.lb-msg.mine{align-self:flex-end;align-items:flex-end}
.lb-bubble{background:var(--surface);border:1px solid var(--line-2);border-radius:14px 14px 14px 4px;padding:8px 12px;font-size:13.5px;line-height:1.4;white-space:pre-wrap;word-break:break-word}
.lb-msg.mine .lb-bubble{background:var(--accent);border-color:var(--accent);color:#fff;border-radius:14px 14px 4px 14px}
.lb-meta{font-size:10.5px;color:var(--ink-4);margin-top:3px}
.lb-send{display:flex;gap:8px;padding:10px;border-top:1px solid var(--line-2)}
.lb-send .inp{flex-grow:1}
.lb-send .btn{flex-grow:0}
@media (max-width:767px){
  .lb .lb-top{height:auto;flex-wrap:wrap;padding:12px 16px 0;gap:8px}
  .lb .lb-top h1{flex:1 1 100%}
  .lb .lb-top .vsep{display:none}
  .lb-body{padding:12px}
  .lb-chat{flex-direction:column}
  .lb-chat-list{width:auto;max-height:40vh;border-right:0;border-bottom:1px solid var(--line)}
  .lb-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .lb-send .inp input{font-size:16px}
}

/* CONCEPT 02 · MY GPX Fleet Portal. Design tokens and geometry. */

body.gs2{background:var(--ground);font-size:var(--portal-body)}
#gs2app{padding-top:var(--portal-header);padding-left:var(--portal-nav);display:block}
.portal-header{position:absolute;left:var(--portal-nav);right:0;top:0;height:var(--portal-header);display:flex;justify-content:space-between;align-items:center;padding:0 26px;gap:16px;background:var(--surface);border-bottom:1px solid var(--line);z-index:1000}
.portal-heading{display:flex;align-items:baseline;gap:16px}.portal-heading h1{font-size:23px;letter-spacing:-.7px;font-weight:600;margin:0}.portal-breadcrumb{font-size:var(--portal-meta);color:var(--ink-3)}
.portal-header-right{display:flex;align-items:center;gap:18px}.portal-demo{display:flex;gap:7px;align-items:center;color:var(--ink-3);font-size:var(--portal-meta)}.portal-demo i{width:7px;height:7px;border-radius:50%;background:var(--move)}
.portal-account{display:flex;align-items:center;gap:10px;padding-left:18px;border-left:1px solid var(--line)}.portal-account .avatar{background:var(--portal-navy);width:34px;height:34px}.portal-account span:last-child{font-size:12px;color:var(--ink-2)}
.rail{position:absolute;inset:0 auto 0 0;width:var(--portal-nav);background:var(--portal-navy);z-index:1100;align-items:stretch;padding:25px 12px 18px;gap:24px}
.rail>svg{display:none}.portal-brand{color:#fff;padding:0 12px;font-size:26px;letter-spacing:-1.2px;font-weight:600}.portal-brand b{color:var(--portal-lime);font-weight:600}.portal-brand small{display:block;font-size:9px;letter-spacing:2.6px;color:var(--portal-nav-text);margin-top:4px;font-weight:400}
.rail-nav{align-items:stretch;gap:5px}.rail-nav:before{content:'РАБОТНО ПРОСТРАНСТВО';font-size:9px;letter-spacing:1px;color:#7f93a9;padding:8px 11px 10px}
.rail-btn{width:auto;height:44px;border-radius:9px;justify-content:flex-start;padding:0 12px;gap:11px;text-decoration:none;color:var(--portal-nav-text)}.rail-btn:after{content:attr(title);font-size:13px;white-space:nowrap}.rail-btn svg{width:18px;height:18px;stroke:currentColor}.rail-btn:hover{color:#fff;background:var(--portal-navy-2)}.rail-btn[aria-current]{background:var(--portal-lime);color:var(--portal-navy);font-weight:600}.rail-btn[aria-current] svg{stroke:currentColor}.rail>.avatar{margin-left:11px;background:var(--portal-navy-2);border:1px solid #35475b}
.portal-workspace{padding:12px 11px;color:#d8e4f1;font-size:12px;background:var(--portal-navy-2);border:1px solid #304355;border-radius:10px}.portal-workspace small{display:block;color:var(--portal-nav-text);font-size:10px;margin-top:3px}
.side{position:absolute;top:calc(var(--portal-header) + var(--portal-space));bottom:var(--portal-space);left:calc(var(--portal-nav) + var(--portal-space));width:var(--portal-list);z-index:800;border:1px solid var(--line);border-radius:var(--r-l);box-shadow:var(--shadow-1);overflow:hidden}
.side-head{padding:21px 18px 15px;gap:15px}.side-title h1{font-size:20px;letter-spacing:-.6px}.count{font-family:var(--sans);font-size:11px;background:var(--surface-2);padding:4px 8px;border-radius:5px}
.portal-summary{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.portal-stat{padding:10px 8px;background:var(--ground);border-radius:9px;color:var(--ink-3);font-size:10px}.portal-stat strong{display:block;font-size:23px;font-weight:500;line-height:1.25;color:var(--ink);margin-bottom:3px}.portal-stat:first-child strong{color:var(--move)}.portal-stat:last-child strong{color:var(--alarm)}
.search{height:42px;background:var(--surface);border:1px solid var(--line-3);border-radius:8px}.search input{font-size:12px}.chips{gap:5px}.chip{height:29px;padding:0 9px;font-size:11px;background:var(--ground);border:1px solid transparent}.chip[aria-pressed=true]{color:var(--accent);background:var(--accent-soft);border-color:#bde4d7}
.list{padding:0 8px 8px}.row{padding:var(--portal-row) 10px;border-left:0;border-top:1px solid var(--line-2);border-radius:10px;gap:9px;margin-bottom:3px}.row[aria-selected=true]{background:var(--accent-soft);box-shadow:inset 0 0 0 1px #b9ded1}.row-name{font-size:13px;font-weight:600;letter-spacing:-.2px}.row-speed{font-size:13px}.row-speed small{font-size:10px;color:var(--ink-3)}.row-meta{padding-left:17px;gap:8px}.plate{font-size:10px;border-color:var(--line);background:var(--surface);padding:2px 5px;color:var(--ink-2)}.row-addr{font-size:11px;color:var(--ink-3)}.row .dot{width:7px;height:7px}
.canvas{position:absolute;top:var(--portal-header);bottom:0;left:var(--portal-nav);right:0;background:#e7eeeb}.topbar{left:calc(var(--portal-list) + 2 * var(--portal-space));right:20px;top:18px;gap:8px;justify-content:flex-end;pointer-events:none}.topbar>*{pointer-events:auto}.topbar .live{display:none}.pill,.back{box-shadow:var(--shadow-1);border:1px solid var(--line);height:38px;border-radius:9px;font-size:12px}.legacy-link{display:none}.leaflet-control-zoom{border:0!important;box-shadow:var(--shadow-1)!important;border-radius:10px!important;overflow:hidden}.leaflet-control-zoom a{width:34px!important;height:34px!important;line-height:34px!important;color:var(--ink-2)!important}.leaflet-right .leaflet-control{margin-right:20px}.leaflet-bottom .leaflet-control-zoom{margin-bottom:42px}.leaflet-control-attribution{font-size:9px!important}
.gs2-dot{width:34px;height:34px;border:4px solid #fff;box-shadow:0 3px 12px #182d3b33}.gs2-label{height:30px;font-size:11px;padding:0 11px 0 13px;border:1px solid var(--line);border-left:0;box-shadow:var(--shadow-1);border-radius:0 7px 7px 0}.gs2-pin[data-sel='1'] .gs2-dot{width:40px;height:40px;box-shadow:0 0 0 8px #067c7420,0 5px 15px #172f4433}
.detail{position:absolute;left:auto;right:var(--portal-space);top:calc(var(--portal-header) + 74px);bottom:var(--portal-space);z-index:850;max-height:620px;border:0;border-radius:var(--r-l);box-shadow:var(--shadow-2);background:var(--surface)}.detail[data-open]{width:var(--portal-detail);border:1px solid var(--line)}.detail-inner{width:var(--portal-detail)}.detail-head{padding:22px 20px 18px;gap:18px}.detail-id{gap:11px}.detail-id h2{font-size:19px;letter-spacing:-.5px;line-height:1.3}.veh-ico{width:44px;height:44px;background:var(--accent-soft);border:1px solid #d7eee5;border-radius:12px}.status-line{gap:7px}.status-text{font-size:11px}.tiles{gap:0;background:var(--ground);border:1px solid var(--line-2);border-radius:12px;padding:12px 0}.tile{background:transparent;border-radius:0;padding:0 12px;border-right:1px solid var(--line)}.tile:last-child{border:0}.tile .v{font-size:23px;letter-spacing:-1px;font-weight:500}.tile .k{font-size:10px;color:var(--ink-3)}.tile .v small{font-size:10px;color:var(--ink-3)}.tabs{padding:0 20px;gap:18px}.tab{font-size:12px;padding:12px 0}.tab[aria-selected=true]{color:var(--accent);border-color:var(--accent)}.sect{padding:18px 20px;gap:12px}.lbl{font-size:10px;letter-spacing:1px;color:var(--ink-3)}.addr{font-size:13px}.fact .k{font-size:10px;color:var(--ink-3)}.fact .v{font-size:11px}.detail-foot{padding:15px 20px}.btn-primary{background:var(--accent);font-weight:500}.btn-primary:hover{background:#096a63}.btn{border-radius:9px;font-size:12px}.close{background:var(--ground)}
#gs2app[data-focus] .side{display:flex}#gs2app[data-focus] .topbar{display:flex}#gs2app[data-focus] .topbar .seg{display:none}.back{margin-right:auto}.follow{order:2}
.portal-map-caption{position:absolute;left:calc(var(--portal-list) + 2 * var(--portal-space));bottom:22px;z-index:500;background:var(--surface);border:1px solid var(--line);box-shadow:var(--shadow-1);padding:10px 14px;border-radius:9px;font-size:11px;color:var(--ink-3)}.portal-map-caption strong{font-weight:500;color:var(--ink);margin-right:10px}
@media(max-width:1350px){:root{--portal-nav:96px;--portal-list:290px;--portal-detail:326px}.portal-brand{font-size:22px;padding:0 3px}.portal-brand small,.portal-workspace,.rail-btn:after,.rail-nav:before{display:none}.rail-btn{justify-content:center;padding:0}.rail{padding:25px 12px}.portal-heading{gap:12px}}
@media(min-width:768px) and (max-width:1100px){#gs2app[data-focus] .side{display:none}.portal-breadcrumb{display:none}#gs2app[data-focus] .topbar{left:18px}.detail{top:calc(var(--portal-header) + 70px)}.portal-map-caption{display:none}}
@media(max-width:767px){:root{--portal-nav:0px;--portal-header:58px;--portal-space:12px;--portal-detail:100%}#gs2app{padding:var(--portal-header) 0 57px}.rail{display:none}.portal-header{padding:0 16px}.portal-heading h1{font-size:19px}.portal-breadcrumb,.portal-account,.portal-map-caption,.portal-summary{display:none}.portal-demo{font-size:10px}.side{left:0;right:0;bottom:57px;top:auto;width:100%;border-radius:18px 18px 0 0;box-shadow:var(--shadow-2)}.side-head{padding:12px 16px}.canvas{top:var(--portal-header);bottom:57px;left:0}.m-top{display:none}.m-fabs{top:16px}.detail,.detail[data-open]{left:0;right:0;top:auto;bottom:57px;max-height:57%;width:100%;border-radius:18px 18px 0 0}.detail-inner{width:100%}.detail-head{padding:16px}.detail-id h2{font-size:17px}.detail-foot{padding:12px 16px}#gs2app[data-focus] .side{display:none}#gs2app[data-focus] .topbar{left:12px;right:12px;top:12px}.topbar{left:12px}.tabbar{z-index:1500}.portal-header-right{gap:8px}.tiles{padding:10px 0}.tile .v{font-size:20px}}

/* CONCEPT 03 · Friendly navigation, inspired by Waze. MY GPX identity. */

.rail{background:var(--friendly-sky-soft);border-right:1px solid #cce7f2;padding-top:22px}.portal-brand{color:var(--friendly-ink);font-size:29px;font-weight:800;letter-spacing:-1.6px}.portal-brand b{color:#008fbc}.portal-brand small{color:#4e7b8f;letter-spacing:2px;font-size:9px}.portal-workspace{background:#f3fcff;border:1px solid #c6e7f3;color:#224b5d;border-radius:17px}.portal-workspace small{color:#5c7e8d}.rail-nav:before{color:#557f91;font-size:9px;letter-spacing:.8px}.rail-btn{border-radius:16px;color:#365c6c;height:46px}.rail-btn:after{font-size:13px;font-weight:600}.rail-btn:hover{background:#c8eeff;color:#122f3e}.rail-btn[aria-current]{background:var(--friendly-sky);color:#102c39;box-shadow:0 4px 12px #13a6df20}.rail>.avatar{background:#fff;color:#25516a;border-color:#bce2f3}
.portal-header{border-bottom:1px solid #dceaf0}.portal-heading h1{font-size:25px;font-weight:800;letter-spacing:-1px}.portal-breadcrumb{font-size:12px}.portal-account{border:0}.portal-account .avatar{background:var(--friendly-sky);color:var(--friendly-ink);font-weight:700}.portal-demo{background:#f0f8fb;padding:8px 12px;border-radius:20px}.portal-demo i{background:#199174}
.side{border:1px solid #dce9ef;border-radius:24px;box-shadow:0 5px 25px #24495a15}.side-head{padding:22px 18px 17px;gap:14px}.side-title h1{font-weight:800;font-size:22px;letter-spacing:-.7px}.count{background:var(--friendly-sky-soft);color:#31667b;border-radius:20px;font-weight:600}.portal-summary{gap:6px}.portal-stat{border-radius:15px;background:#f3f9fb;font-size:10px;padding:10px}.portal-stat strong{font-family:var(--sans);font-weight:800;font-size:24px;letter-spacing:-1px}.search{border:0;background:#f0f5f7;border-radius:24px;height:44px;padding:0 14px}.search input{font-family:var(--sans);font-size:12px}.chip{border-radius:18px;padding:0 10px;background:#f0f5f7}.chip[aria-pressed=true]{background:var(--friendly-sky);border-color:var(--friendly-sky);color:#123748}.chip .n{opacity:.8;font-family:var(--sans);font-weight:700}
.list{padding:0 9px 9px}.row{padding:17px 12px;border-radius:18px;gap:8px;border-color:#edf4f7}.row:hover{background:#f4fbfe}.row[aria-selected=true]{background:#e7f8ff;box-shadow:inset 0 0 0 2px #51ccf5}.row-name{font-family:var(--sans);font-size:14px;font-weight:800;letter-spacing:-.3px}.row-speed{font-family:var(--sans);font-weight:800}.plate{font-family:var(--sans);font-size:11px;letter-spacing:.3px;font-weight:700;border-radius:5px}.row-meta{gap:7px}.row-addr{font-size:11px}.row .dot{width:8px;height:8px}
.canvas{background:#edf3ef}.pill,.back{border-radius:24px;border:0;box-shadow:0 3px 15px #1940581a;padding:0 15px;height:42px;font-family:var(--sans);font-weight:700}.follow[aria-pressed=true]{background:var(--friendly-sky);color:var(--friendly-ink)}.follow[aria-pressed=true] svg{stroke:var(--friendly-ink)}.leaflet-control-zoom{border-radius:18px!important}.leaflet-control-zoom a{width:40px!important;height:40px!important;line-height:40px!important}.portal-map-caption{border:0;border-radius:22px;padding:11px 17px;color:#557582}.portal-map-caption strong{font-weight:700}
.gs2-dot{border-radius:14px;border:3px solid #fff;width:37px;height:37px;box-shadow:0 3px 0 #183d4a22,0 5px 15px #183d4a2a}.gs2-pin[data-sel='1'] .gs2-dot{border-radius:16px;width:44px;height:44px;box-shadow:0 0 0 8px #35c8ff44,0 5px 15px #172f4433}.gs2-label{font-family:var(--sans);height:31px;border-radius:0 16px 16px 0;font-weight:800;font-size:11px}
.detail{border-radius:24px;box-shadow:0 10px 40px #22465b22}.detail[data-open]{border-color:#dce9ef}.detail-head{padding:22px 20px 18px;background:linear-gradient(135deg,#f0fbff,#fff 75%)}.detail-id h2{font-family:var(--sans);font-weight:800;font-size:22px;letter-spacing:-.8px}.veh-ico{background:#d9f4ff;border:0;border-radius:16px;width:48px;height:48px}.tiles{border:0;border-radius:20px;background:#eaf7fc;padding:15px 0}.tile{border-color:#cfe8f3}.tile .v{font-family:var(--sans);font-size:27px;font-weight:800;letter-spacing:-.8px}.tile .v small{font-family:var(--sans);font-size:11px;font-weight:600}.tile .k{font-weight:600;font-size:10px}.status-text{font-weight:700}.close{border-radius:50%;background:#edf5f8;width:32px;height:32px}.tab{font-family:var(--sans);font-weight:600}.tab[aria-selected=true]{color:#006f94;border-color:var(--friendly-sky);border-bottom-width:3px;font-weight:800}.lbl{font-family:var(--sans);font-weight:800;font-size:10px;letter-spacing:.7px}.btn{border-radius:24px;font-family:var(--sans);font-size:13px;font-weight:800;height:44px}.btn-primary{background:var(--friendly-sky);color:var(--friendly-ink);box-shadow:0 3px 0 #149ec633}.btn-primary:hover{background:#62d6ff}.btn-ghost{border-color:#d8e7ef}.detail-foot{padding:17px 20px}.tabbar-btn[aria-current]{color:#007da6}.profile-card{border-radius:24px}.avatar{font-family:var(--sans)}
@media(max-width:1350px){:root{--portal-nav:96px;--portal-list:290px;--portal-detail:326px}.portal-brand{font-size:23px;letter-spacing:-1.5px;padding:0 1px}.rail{padding-left:12px;padding-right:12px}}
@media(max-width:767px){:root{--portal-nav:0px;--portal-header:58px;--portal-space:12px;--portal-detail:100%}.portal-heading h1{font-size:21px}.portal-demo{padding:6px 8px;font-size:9px}.side{border-radius:24px 24px 0 0}.detail,.detail[data-open]{border-radius:24px 24px 0 0}.detail-id h2{font-size:19px}.detail-head{padding:16px}.tile .v{font-size:24px}.pill,.back{height:40px}.side-head{padding:14px 16px}}
