:root{font-family:Tahoma,Arial,sans-serif;color:#eaf0ff;background:#08101f;--panel:#101d33;--panel2:#142642;--muted:#8fa5c6;--accent:#4e8cff;--success:#4ed49a;--warn:#f7c65f;--danger:#ff647c;--line:#253856;--shadow:0 18px 45px #0005}*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 70% -15%,#22477d 0,#08101f 45%);min-height:100vh}.app-shell{display:none;min-height:100vh}.app-shell.active{display:flex}.public-site{min-height:100vh;background:radial-gradient(circle at 80% 0,#173f73 0,#08101f 43%)}.public-site[hidden]{display:none}.public-nav{max-width:1240px;margin:auto;padding:24px 4%;display:flex;align-items:center;justify-content:space-between;gap:20px}.public-brand{margin:0}.public-nav-actions{display:flex;align-items:center;gap:18px}.public-nav-actions a{color:#c6d5ed;text-decoration:none;font-size:13px}.hero,.public-section{max-width:1240px;margin:auto;padding:70px 4%}.hero{display:grid;grid-template-columns:1.1fr .9fr;align-items:center;gap:50px;min-height:580px}.hero h1{font-size:clamp(32px,5vw,66px);line-height:1.25;margin:16px 0}.hero p,.public-section p{color:#a9bad5;line-height:2;font-size:15px}.eyebrow{color:#6da5ff;font-size:12px;letter-spacing:.5px}.hero-actions{display:flex;gap:12px;align-items:center;margin-top:28px}.hero-actions a{text-decoration:none}.hero-visual{min-height:390px;display:grid;place-items:center;position:relative}.radar{width:310px;height:310px;border-radius:50%;border:1px solid #477bcf;box-shadow:0 0 0 36px #1d4a8a33,0 0 0 72px #1d4a8a1c,0 0 60px #4e8cff88;background:radial-gradient(circle,#4e8cff66 0 2%,transparent 3% 29%,#4e8cff1c 30% 31%,transparent 32% 62%,#4e8cff1c 63% 64%,transparent 65%)}.hero-card{position:absolute;bottom:40px;right:5%;padding:18px 22px;border:1px solid #477bcf;background:#102642eF;border-radius:16px;box-shadow:var(--shadow);display:grid;gap:8px}.hero-card span{color:#7daeff;font-size:12px}.hero-card b{font-size:18px}.hero-card small{color:#9db4d8}.public-section{padding-top:35px;padding-bottom:75px}.section-heading{text-align:center;margin-bottom:30px}.section-heading h2,.contact-section h2{font-size:32px;margin:12px 0}.feature-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}.feature-grid article{background:#10213b;border:1px solid var(--line);border-radius:15px;padding:22px;min-height:190px}.feature-grid article>span{font-size:28px}.feature-grid h3{margin:18px 0 8px}.feature-grid p{font-size:12px;line-height:1.9}.contact-section{display:grid;grid-template-columns:1fr 1fr;gap:60px;align-items:start;border-top:1px solid #223656}.public-form{display:grid;gap:10px;background:#10213b;border:1px solid var(--line);border-radius:15px;padding:22px}.public-form input,.public-form select,.public-form textarea{width:100%;border:1px solid var(--line);background:#0a1629;color:#fff;padding:12px;border-radius:8px;font:inherit}.public-form textarea{min-height:100px;resize:vertical}.honeypot{position:absolute;left:-10000px;opacity:0}.public-footer{max-width:1240px;margin:auto;padding:25px 4%;border-top:1px solid #223656;color:#647da4;font-size:11px}.sidebar{width:265px;padding:24px 16px;border-left:1px solid var(--line);background:#0b172c;display:flex;flex-direction:column;flex-shrink:0}.brand{display:flex;align-items:center;gap:10px;margin:0 8px 26px}.brand-mark{font-size:32px;color:#75a9ff;text-shadow:0 0 20px #5792ff}.brand strong{display:block;letter-spacing:1px}.brand small{display:block;color:var(--muted);font-size:10px;margin-top:4px}.profile{border:1px solid var(--line);background:#10213b;border-radius:12px;padding:12px;margin-bottom:20px;color:#c6d5ed}.profile small{display:block;color:var(--muted);margin-top:4px}.sidebar nav{display:grid;gap:6px}.sidebar button{font:inherit;color:#a8b8d4;background:transparent;border:0;text-align:right;padding:12px 13px;border-radius:9px;cursor:pointer}.sidebar nav button:hover,.sidebar nav button.active{background:#1b3760;color:#fff}.logout{margin-top:auto!important;color:#ff9bab!important}.sidebar footer{color:#566b8d;font-size:11px;padding:15px 10px 0}.content{max-width:1550px;width:100%;margin:auto;padding:30px 4%}.topbar{display:flex;align-items:start;justify-content:space-between;margin-bottom:26px}.topbar h1{font-size:30px;margin:7px 0 0}.topbar small{color:var(--muted)}.connection{border:1px solid var(--line);padding:9px 12px;border-radius:20px;color:var(--muted);font-size:12px}.connection.ok{color:var(--success);border-color:#276b55}.connection.bad{color:var(--danger);border-color:#713546}.grid{display:grid;grid-template-columns:repeat(4,1fr);gap:15px}.card{background:linear-gradient(145deg,var(--panel2),var(--panel));border:1px solid var(--line);border-radius:15px;padding:19px;box-shadow:var(--shadow)}.wide{grid-column:span 2}.metric{font-size:32px;font-weight:bold;margin-top:10px}.muted,.sub{color:var(--muted)}.row{display:flex;align-items:center;justify-content:space-between;gap:15px;border-bottom:1px solid var(--line);padding:13px 0}.row:last-child{border-bottom:0}.row small{display:block;color:var(--muted);margin-top:4px}.badge{padding:5px 9px;border-radius:20px;background:#1b3862;color:#acd0ff;font-size:11px;white-space:nowrap}.badge.success{background:#164f43;color:#8af0c4}.badge.warn{background:#55431f;color:#ffe09a}.badge.danger{background:#552333;color:#ff9eae}.primary,.secondary,.danger-btn{font:inherit;border:0;border-radius:9px;padding:10px 14px;cursor:pointer}.primary{background:var(--accent);color:#fff}.secondary{background:#203856;color:#dce9ff}.danger-btn{background:#572336;color:#ffb0bf}.toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}.toolbar .actions{display:flex;gap:8px;flex-wrap:wrap}.table-wrap{overflow:auto}.table{width:100%;border-collapse:collapse}.table th,.table td{text-align:right;padding:12px 9px;border-bottom:1px solid var(--line);white-space:nowrap}.table th{color:#9db4d8;font-size:12px}.form-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:12px}.form-grid label{display:grid;gap:6px;color:#b9c9e4;font-size:13px}.form-grid .full{grid-column:1/-1}.input,.select,.textarea{width:100%;border:1px solid var(--line);background:#0a1629;color:#fff;padding:11px;border-radius:8px;font:inherit}.textarea{min-height:90px;resize:vertical}.empty,.loading{text-align:center;color:var(--muted);padding:42px}.map{height:520px;border:1px solid var(--line);border-radius:12px;overflow:hidden;background:#152846}.map .leaflet-control{direction:ltr}.login-wrap{max-width:460px;margin:10vh auto}.login-wrap h2{margin-top:0}.login-wrap .logo{font-size:40px;color:#7daeff}.login-wrap form{display:grid;gap:10px}.hint{color:var(--muted);font-size:12px;line-height:1.8}.event{display:flex;gap:12px;align-items:start}.event-dot{width:10px;height:10px;border-radius:50%;margin-top:7px;background:var(--success);flex:none}.event-dot.warn{background:var(--warn)}.event-dot.danger{background:var(--danger)}.event-main{flex:1}.modal-backdrop{position:fixed;inset:0;background:#0009;display:grid;place-items:center;padding:20px;z-index:1000}.modal{max-width:650px;width:100%;max-height:90vh;overflow:auto;background:#10213a;border:1px solid var(--line);border-radius:15px;padding:20px}.modal header{margin-bottom:15px}.modal header h2{margin:0}.close{background:transparent;border:0;color:#fff;font-size:22px;cursor:pointer}.toast{position:fixed;top:20px;left:20px;background:#1c3155;color:#fff;border:1px solid var(--line);padding:12px 16px;border-radius:10px;z-index:2000;display:none;box-shadow:var(--shadow)}.toast.show{display:block}.toast.error{background:#5b2536}.kpi-label{font-size:12px;color:var(--muted)}.quick{display:grid;grid-template-columns:repeat(3,1fr);gap:10px}.quick button{min-height:74px;text-align:right}.list{display:grid;gap:8px}.list-item{padding:12px;border:1px solid var(--line);border-radius:10px;background:#0d1a2e}.right{margin-right:auto}.ltr{direction:ltr;text-align:left}@media(max-width:1000px){.grid{grid-template-columns:repeat(2,1fr)}.sidebar{width:220px}.hero{grid-template-columns:1fr;padding-top:35px}.hero-visual{min-height:280px}.feature-grid{grid-template-columns:repeat(2,1fr)}}@media(max-width:700px){.public-nav{align-items:start}.public-nav-actions{gap:8px}.public-nav-actions a{display:none}.hero{min-height:0}.hero h1{font-size:35px}.radar{width:220px;height:220px}.hero-card{bottom:5px;right:0}.contact-section{grid-template-columns:1fr;gap:20px}.feature-grid{grid-template-columns:1fr}.app-shell{display:none}.app-shell.active{display:block}.sidebar{width:100%;padding:13px}.brand{margin-bottom:12px}.profile,.sidebar footer,.logout{display:none}.sidebar nav{display:flex;overflow:auto}.sidebar nav button{white-space:nowrap;font-size:12px;padding:9px}.content{padding:20px 14px}.topbar{gap:10px}.topbar h1{font-size:23px}.grid{grid-template-columns:1fr}.wide{grid-column:span 1}.form-grid{grid-template-columns:1fr}.form-grid .full{grid-column:auto}.map{height:420px}.quick{grid-template-columns:1fr}.toolbar{align-items:start;flex-direction:column}}

/* ---- STAR GPS admin panel: polish pass for the generic inner-app
   components (cards, tables, forms, modals, toasts) used by every
   dashboard sub-page so they match the branded look everywhere. ---- */
.dashboard-content .card,.card{transition:box-shadow .15s ease}
.primary,.secondary,.danger-btn{transition:transform .15s ease,box-shadow .15s ease,filter .15s ease;cursor:pointer}
.secondary{border:1px solid #2b4664}
.secondary:hover{background:#284a6e}
.danger-btn:hover{filter:brightness(1.12)}
.input,.select,.textarea{transition:border-color .15s ease,box-shadow .15s ease}
.input:focus,.select:focus,.textarea:focus{outline:0;border-color:var(--star-yellow,#ffc52e);box-shadow:0 0 0 3px #ffc52e22}
.table th{position:sticky;top:0;background:#0d1a2e;z-index:1}
.table tbody tr:hover{background:#0f2038}
.table td,.table th{border-bottom:1px solid var(--line)}
.modal{box-shadow:0 30px 70px #0009;animation:starModalIn .18s ease}
.modal header{display:flex;align-items:center;justify-content:space-between}
.close{width:32px;height:32px;border-radius:9px;display:grid;place-items:center}
.close:hover{background:#1c3155}
@keyframes starModalIn{from{transform:translateY(10px);opacity:0}to{transform:translateY(0);opacity:1}}
.toast{border-right:3px solid var(--success);box-shadow:0 18px 40px #0007}
.toast.error{border-right-color:var(--danger)}
.row:hover{background:#0d1c31}
.list-item:hover{border-color:#3a5878}

/* Admin device directory + enhanced per-user device table */
.table-icon{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:8px;background:#17395b;color:#8fb4dd;margin-left:8px;vertical-align:middle}
.table td small{display:block;margin-top:3px;color:#88a0bc}
