:root{--bg: #07090d;--panel: #0e131b;--panel-2: #141b26;--line: #243044;--text: #e8eef8;--muted: #7d8ca3;--accent: #00e5c0;--accent-2: #3d8bfd;--warn: #ffb020;--crit: #ff4d6d;--shadow: 0 18px 50px rgba(0, 0, 0, .45);--mono: ui-monospace, "SFMono-Regular", Menlo, Consolas, monospace;--sans: system-ui, -apple-system, "Segoe UI", sans-serif}*{box-sizing:border-box}html,body{margin:0;height:100%;background:var(--bg);color:var(--text);font-family:var(--sans)}#app{display:grid;grid-template-columns:72px 1fr;grid-template-rows:64px 1fr;height:100%}.rail{grid-row:1 / span 2;background:#080c12;border-right:1px solid var(--line);display:flex;flex-direction:column;align-items:center;padding:16px 0;gap:28px}.brand{display:flex;flex-direction:column;align-items:center;gap:8px;text-align:center}.brand-mark{width:40px;height:40px;border:1px solid var(--accent);color:var(--accent);display:grid;place-items:center;font-family:var(--mono);font-weight:600;letter-spacing:.08em}.brand-name{font-size:10px;letter-spacing:.28em;font-weight:700}.brand-sub{display:none}.rail-nav{display:flex;flex-direction:column;gap:8px;width:100%;padding:0 12px}.rail-btn{position:relative;height:44px;background:transparent;border:1px solid transparent;color:var(--muted);cursor:pointer;display:grid;place-items:center}.rail-btn svg{width:22px;height:22px}.rail-btn.active,.rail-btn:hover{color:var(--accent);border-color:var(--line);background:var(--panel-2)}.badge{position:absolute;top:4px;right:6px;min-width:16px;height:16px;padding:0 4px;border-radius:8px;background:var(--crit);color:#fff;font-size:9px;line-height:16px;font-family:var(--mono)}.badge:empty,.badge[data-empty="1"]{display:none}.rail-foot{font-family:var(--mono);font-size:10px;letter-spacing:.16em;color:var(--accent);display:flex;align-items:center;gap:6px}.live-dot{width:7px;height:7px;background:var(--accent);border-radius:50%;box-shadow:0 0 10px var(--accent);animation:pulse 1.6s infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.topbar{grid-column:2;display:flex;align-items:center;gap:18px;padding:0 20px;border-bottom:1px solid var(--line);background:#080c12eb}.search-wrap{flex:1;max-width:360px}.search-wrap input{width:100%;height:36px;background:var(--panel);border:1px solid var(--line);color:var(--text);padding:0 12px;font-family:var(--sans)}.search-wrap input:focus{outline:1px solid var(--accent)}.kpis{display:flex;gap:18px;margin-left:auto}.kpi{display:flex;flex-direction:column;min-width:78px}.kpi-label{font-size:10px;letter-spacing:.14em;color:var(--muted);font-family:var(--mono)}.kpi-val{font-size:18px;font-weight:600;font-family:var(--mono)}.kpi-val.accent{color:var(--accent)}.kpi-val.warn{color:var(--crit)}.clock{font-family:var(--mono);font-size:12px;color:var(--muted);min-width:118px;text-align:right}.workspace{grid-column:2;display:grid;grid-template-columns:1fr 360px;min-height:0}.map-pane{position:relative;min-height:0}#map{height:100%;background:#0b1118}.map-tools{position:absolute;top:14px;left:14px;z-index:500;display:flex;gap:8px;flex-wrap:wrap}.tool-btn{height:32px;padding:0 12px;background:#0e131b;color:var(--text);border:1px solid var(--accent);font-family:var(--mono);font-size:11px;letter-spacing:.08em;cursor:pointer}.tool-btn:hover,.tool-btn.active{background:var(--accent);color:#04110d}.tool-btn.ghost{border-color:var(--line);color:var(--muted)}.tool-btn.ghost:hover{color:var(--text);background:var(--panel-2)}.draw-hint{position:absolute;bottom:18px;left:50%;transform:translate(-50%);z-index:500;background:#080c12eb;border:1px solid var(--accent);padding:8px 14px;font-family:var(--mono);font-size:12px}.hidden{display:none!important}.side{border-left:1px solid var(--line);background:var(--panel);overflow:auto}.panel{padding:16px}.panel-head{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:12px}.panel-head h2{margin:0;font-size:15px;letter-spacing:.12em;text-transform:uppercase}.muted{color:var(--muted);font-size:12px;font-family:var(--mono)}.hint{color:var(--muted);font-size:12px;line-height:1.45;margin:0 0 14px}.fleet-list,.fence-list,.alert-list{display:flex;flex-direction:column;gap:8px}.unit-card,.fence-card,.alert-card{background:var(--panel-2);border:1px solid var(--line);padding:10px 12px;cursor:pointer}.unit-card:hover,.fence-card:hover{border-color:var(--accent)}.unit-card.selected{border-color:var(--accent);box-shadow:inset 0 0 0 1px var(--accent)}.unit-top{display:flex;justify-content:space-between;gap:8px}.unit-name{font-weight:600}.unit-meta{display:flex;justify-content:space-between;margin-top:6px;color:var(--muted);font-size:12px;font-family:var(--mono)}.status{font-family:var(--mono);font-size:10px;letter-spacing:.1em;text-transform:uppercase}.status.on,.status.moving,.status.idle{color:var(--accent)}.status.off,.status.offline,.status.immobilized{color:var(--crit)}.status.command{color:var(--warn)}.fence-card .row{display:flex;justify-content:space-between;align-items:center;gap:8px}.swatch{width:10px;height:10px;display:inline-block;margin-right:8px}.fence-actions{display:flex;gap:6px;margin-top:8px}.mini{height:26px;padding:0 8px;background:transparent;border:1px solid var(--line);color:var(--muted);font-family:var(--mono);font-size:10px;cursor:pointer}.mini:hover{color:var(--text);border-color:var(--text)}.mini.danger:hover{color:var(--crit);border-color:var(--crit)}.alert-card{cursor:default;font-size:13px}.alert-card .ts{display:block;color:var(--muted);font-family:var(--mono);font-size:10px;margin-bottom:4px}.alert-card.warn{border-left:3px solid var(--warn)}.alert-card.critical{border-left:3px solid var(--crit)}.alert-card.info{border-left:3px solid var(--accent-2)}.detail{position:fixed;right:376px;bottom:18px;width:340px;background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow);z-index:800;padding:16px}.detail-close{position:absolute;top:10px;right:10px;background:transparent;border:0;color:var(--muted);font-family:var(--mono);font-size:11px;cursor:pointer}.detail h3{margin:0 0 4px}.detail .plate{font-family:var(--mono);color:var(--muted);margin-bottom:12px}.stats{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:14px}.stat{background:var(--panel-2);padding:8px}.stat span{display:block;font-size:10px;color:var(--muted);letter-spacing:.1em;font-family:var(--mono)}.cmd-row{display:grid;grid-template-columns:1fr 1fr;gap:8px}.cmd{height:38px;border:1px solid var(--line);background:#10161f;color:var(--text);font-family:var(--mono);font-size:11px;letter-spacing:.08em;cursor:pointer}.cmd.start{border-color:var(--accent)}.cmd.kill{border-color:var(--crit);color:var(--crit)}.cmd:disabled{opacity:.4;cursor:not-allowed}.modal{position:fixed;top:0;right:0;bottom:0;left:0;background:#0000008c;display:grid;place-items:center;z-index:900}.modal-card{width:min(420px,92vw);background:var(--panel);border:1px solid var(--line);padding:20px}.modal-card h3{margin:0 0 14px}.modal-card label{display:block;font-size:12px;color:var(--muted);margin-bottom:10px}.modal-card input[type=text],.modal-card input:not([type=checkbox]),.modal-card select,.login-card input{width:100%;margin-top:6px;height:34px;background:var(--panel-2);border:1px solid var(--line);color:var(--text);padding:0 10px;font-family:var(--sans)}.modal-card select{-webkit-appearance:none;-moz-appearance:none;appearance:none}.check{display:flex!important;align-items:center;gap:8px;color:var(--text)!important}.modal-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:12px}.toast-stack{position:fixed;left:92px;bottom:18px;display:flex;flex-direction:column;gap:8px;z-index:950}.toast{min-width:260px;max-width:360px;background:var(--panel);border:1px solid var(--line);padding:10px 12px;font-size:13px;box-shadow:var(--shadow)}.toast.critical{border-color:var(--crit)}.toast.warn{border-color:var(--warn)}.leaflet-container{background:#0b1118;font-family:var(--sans)}.leaflet-control-attribution{background:#080c12bf!important;color:var(--muted)!important}.veh-icon{background:transparent;border:0}.veh-pin{width:28px;height:28px;transform-origin:50% 50%}.veh-pin .body{width:22px;height:22px;margin:3px auto 0;border:2px solid var(--accent);background:#04110d;color:var(--accent);font-family:var(--mono);font-size:10px;display:grid;place-items:center;box-shadow:0 0 10px #00e5c059}.veh-pin.off .body{border-color:var(--crit);color:var(--crit);box-shadow:0 0 10px #ff4d6d59}.veh-pin.selected .body{background:var(--accent);color:#04110d}.veh-pin.armed .body{border-color:var(--warn);color:var(--warn);box-shadow:0 0 10px #ffb02066}.veh-pin.alarm .body{border-color:var(--crit);color:var(--crit);animation:pulse .7s infinite}.status.armed{color:var(--warn)}.status.disarmed{color:var(--muted)}.status.triggered{color:var(--crit)}.login-screen{position:fixed;top:0;right:0;bottom:0;left:0;z-index:2000;display:grid;place-items:center;background:radial-gradient(ellipse at 20% 0%,rgba(0,229,192,.08),transparent 50%),radial-gradient(ellipse at 80% 100%,rgba(61,139,253,.1),transparent 45%),var(--bg)}.login-card{width:min(400px,92vw);background:var(--panel);border:1px solid var(--line);padding:28px 24px 22px;box-shadow:var(--shadow)}.login-brand{display:flex;align-items:center;gap:12px;margin-bottom:22px}.login-kicker{font-family:var(--mono);font-size:10px;letter-spacing:.18em;color:var(--muted);margin-top:4px}.login-card label{display:block;font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted);font-family:var(--mono);margin-bottom:12px}.login-submit{width:100%;height:40px;margin-top:4px}.login-error{color:var(--crit);font-size:12px;margin:0 0 10px;font-family:var(--mono)}.login-hint{margin-top:16px;color:var(--muted);font-family:var(--mono);font-size:11px;line-height:1.6}.install-btn{margin-top:14px;width:100%;height:36px;background:transparent;border:1px dashed var(--accent);color:var(--accent);font-family:var(--mono);font-size:11px;letter-spacing:.08em;cursor:pointer}.rail-user{font-family:var(--mono);font-size:9px;letter-spacing:.08em;color:var(--muted);writing-mode:vertical-rl;transform:rotate(180deg);margin-top:auto;max-height:90px;overflow:hidden}#btn-logout{margin-top:8px}.add-unit{width:100%;margin-bottom:12px}.kill-btn{border-color:var(--crit)!important;color:var(--crit)}.cmd.danger{border-color:var(--crit);color:var(--crit);grid-column:1 / -1}@media(max-width:980px){#app{grid-template-columns:56px 1fr;grid-template-rows:auto 1fr auto}.workspace{grid-template-columns:1fr;grid-template-rows:52vh auto}.side{border-left:0;border-top:1px solid var(--line)}.detail{right:12px;left:68px;width:auto}.kpis{display:none}}
