.sgrid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin-bottom:24px}
.sc{background:var(--card);border:1px solid var(--border);padding:20px;position:relative;overflow:hidden}
.sc::before{content:"";position:absolute;top:0;left:0;right:0;height:2px}
.sc.blue::before{background:var(--accent)}.sc.orange::before{background:var(--accent2)}.sc.green::before{background:var(--ok)}.sc.red::before{background:var(--danger)}
.sl{font-size:9px;color:var(--muted);letter-spacing:2px;text-transform:uppercase;margin-bottom:10px}
.sv{font-family:var(--font-head);font-size:36px;font-weight:800;line-height:1}
.sv.blue{color:var(--accent)}.sv.orange{color:var(--accent2)}.sv.green{color:var(--ok)}.sv.red{color:var(--danger)}
.ss{font-size:10px;color:var(--muted);margin-top:6px}
.si{position:absolute;right:16px;top:50%;transform:translateY(-50%);font-size:32px;opacity:.07}
.card{background:var(--card);border:1px solid var(--border);margin-bottom:16px}
.ch{display:flex;align-items:center;justify-content:space-between;padding:14px 20px;border-bottom:1px solid var(--border);font-size:11px;text-transform:uppercase;letter-spacing:1.5px}
.cht{color:var(--muted);display:flex;align-items:center;gap:8px}
.dot{width:6px;height:6px;border-radius:50%;background:var(--accent)}
.tbl{width:100%;border-collapse:collapse;font-size:12px}
.tbl th{text-align:left;padding:10px 16px;font-size:9px;letter-spacing:2px;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--border);font-weight:400}
.tbl td{padding:12px 16px;border-bottom:1px solid rgba(30,45,61,.5);vertical-align:middle}
.tbl tr:last-child td{border-bottom:none}
.tbl tr:hover td{background:rgba(0,212,255,.02)}
.tbl tr{cursor:pointer}
.badge{display:inline-flex;align-items:center;gap:5px;padding:3px 8px;border-radius:2px;font-size:10px;letter-spacing:1px;text-transform:uppercase}
.b-on{background:rgba(57,255,20,.1);color:var(--ok);border:1px solid rgba(57,255,20,.2)}
.b-off{background:rgba(74,96,128,.1);color:var(--muted);border:1px solid rgba(74,96,128,.2)}
.b-crit{background:rgba(255,59,92,.1);color:var(--danger);border:1px solid rgba(255,59,92,.2)}
.b-warn{background:rgba(255,181,71,.1);color:var(--warn);border:1px solid rgba(255,181,71,.2)}
.b-info{background:rgba(0,212,255,.1);color:var(--accent);border:1px solid rgba(0,212,255,.2)}
.blink{width:5px;height:5px;border-radius:50%;animation:pulse 1.5s infinite}
.b-on .blink{background:var(--ok)}.b-crit .blink{background:var(--danger)}.b-warn .blink{background:var(--warn)}
.g2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.dr{display:flex;justify-content:space-between;align-items:center;padding:10px 20px;border-bottom:1px solid rgba(30,45,61,.5);font-size:12px}
.dr:last-child{border-bottom:none}
.dk{color:var(--muted);text-transform:uppercase;font-size:10px;letter-spacing:1px}
.ai{display:flex;align-items:flex-start;gap:14px;padding:14px 20px;border-bottom:1px solid rgba(30,45,61,.5)}
.ai:last-child{border-bottom:none}
.ab{flex:1}.at{font-size:12px;font-weight:700;margin-bottom:2px}
.am{font-size:10px;color:var(--muted)}
.batt{display:flex;align-items:center;gap:8px}
.bbar{width:48px;height:8px;background:var(--border);border-radius:1px;overflow:hidden}
.bfill{height:100%;transition:width .3s}
.bhi{background:var(--ok)}.bmid{background:var(--warn)}.blo{background:var(--danger)}
.sig{display:flex;align-items:flex-end;gap:2px;height:14px}
.sbar{width:4px;background:var(--border);border-radius:1px}
.sbar.on{background:var(--accent)}
.afs{display:flex;flex-wrap:wrap;gap:6px}
.af{padding:2px 8px;font-size:9px;letter-spacing:1px;text-transform:uppercase;border-radius:2px}
.af.a{background:rgba(255,59,92,.15);color:var(--danger);border:1px solid rgba(255,59,92,.3)}
.af.i{background:rgba(74,96,128,.08);color:var(--muted);border:1px solid rgba(30,45,61,.5)}
.tabs{display:flex;border-bottom:1px solid var(--border)}
.tab{padding:12px 20px;font-size:11px;letter-spacing:1px;text-transform:uppercase;cursor:pointer;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px;transition:all .15s}
.tab.active{color:var(--accent);border-bottom-color:var(--accent)}
.tab:hover:not(.active){color:var(--text)}
.tc{display:none}.tc.active{display:block}
.tr{font-size:11px;padding:8px 16px;display:grid;grid-template-columns:160px 70px 80px 130px 80px 1fr;gap:8px;border-bottom:1px solid rgba(30,45,61,.3);align-items:center}
.trh{font-size:9px;letter-spacing:2px;text-transform:uppercase;color:var(--muted)}
.mapbox{background:var(--card);border:1px solid var(--border);position:relative;overflow:hidden;margin-bottom:16px}
.mgrid{position:absolute;inset:0;background-image:linear-gradient(rgba(0,212,255,.04) 1px,transparent 1px),linear-gradient(90deg,rgba(0,212,255,.04) 1px,transparent 1px);background-size:40px 40px}
.mov{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:8px}
.mlabel{font-size:11px;color:var(--muted);letter-spacing:2px}
.fg{margin-bottom:20px}
.fl{display:block;font-size:10px;letter-spacing:1.5px;text-transform:uppercase;color:var(--muted);margin-bottom:8px}
.fi{width:100%;background:var(--surface);border:1px solid var(--border);color:var(--text);font-family:var(--font-mono);font-size:12px;padding:10px 14px;outline:none;transition:border-color .15s}
.fi:focus{border-color:var(--accent)}
.fr2{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.fsec{padding:20px;border-bottom:1px solid var(--border)}
.fsec:last-child{border-bottom:none}
::-webkit-scrollbar{width:4px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}
.loading{text-align:center;padding:40px;color:var(--muted);font-size:11px;letter-spacing:2px}
.empty{text-align:center;padding:48px;color:var(--muted)}
.empty-i{font-size:40px;margin-bottom:12px;opacity:.3}
.empty-t{font-size:11px;letter-spacing:2px;text-transform:uppercase}
.coords{font-size:11px;color:var(--accent)}
◈
Total Devices
—
Registered
| Device ID | Status | Battery | Signal | Location | Speed | Sealed | Last Seen | Alerts |
| Loading |
Device —
Timestamp
Speed
Dir
Coords
Battery
Flags
Telemetry Feed
Timestamp
Speed
Dir
Coords
Battery
Status
⊕
Live Device Positions
Configure Google Maps API key in Settings for interactive map
Track History
⌀
GPS Track History
Select a device above
Timestamp
Lat
Lon
Speed
GPS
Coords
⌀
Select a device to view track
// Command output appears here
Resolve All Open Alerts
Ping All Devices