:root{--bg:#071019;--panel:#0d1b27;--panel2:#112534;--line:#1e3a4c;--text:#e9f6ff;--muted:#8ba4b5;--cyan:#24d7d1;--green:#24dc88;--amber:#ffbd46;--red:#ff4d62;--shadow:0 18px 50px rgba(0,0,0,.3)}
*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 30% -10%,#15364a 0,transparent 35%),var(--bg);color:var(--text);font:14px/1.45 Inter,Segoe UI,Arial,sans-serif}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit}.shell{min-height:100vh;display:grid;grid-template-columns:250px 1fr}.sidebar{padding:24px 18px;border-right:1px solid var(--line);background:rgba(7,16,25,.92);position:sticky;top:0;height:100vh}.brand{display:flex;gap:12px;align-items:center;font-weight:800;font-size:17px}.brand-mark{width:38px;height:38px;border:1px solid var(--cyan);border-radius:12px;display:grid;place-items:center;color:var(--cyan);box-shadow:0 0 24px rgba(36,215,209,.2)}.nav{margin-top:36px}.nav a{display:flex;padding:11px 12px;margin:6px 0;border-radius:10px;color:var(--muted)}.nav a.active,.nav a:hover{background:#102838;color:var(--text)}.side-foot{position:absolute;bottom:20px;left:18px;right:18px;color:var(--muted)}.main{padding:28px;min-width:0}.topbar{display:flex;justify-content:space-between;align-items:center;margin-bottom:24px}.topbar h1{font-size:24px;margin:0 0 4px}.muted{color:var(--muted)}.live{display:inline-flex;gap:7px;align-items:center;color:var(--green);font-weight:700}.live:before{content:"";width:8px;height:8px;border-radius:50%;background:var(--green);box-shadow:0 0 14px var(--green)}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:18px}.card{background:linear-gradient(145deg,rgba(17,37,52,.95),rgba(10,25,36,.96));border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow)}.stat{padding:17px}.stat span{color:var(--muted);font-size:12px;text-transform:uppercase;letter-spacing:.7px}.stat strong{display:block;font-size:28px;margin-top:5px}.dashboard-grid{display:grid;grid-template-columns:minmax(0,1.8fr) minmax(300px,.8fr);gap:18px}.map-card{overflow:hidden}.card-title{display:flex;justify-content:space-between;align-items:center;padding:16px 18px;border-bottom:1px solid var(--line)}.card-title h2{font-size:15px;margin:0}.map{height:460px;background:#09151f}.right-col{display:grid;gap:18px;align-content:start}.panel-body{padding:16px}.device{display:flex;align-items:center;gap:10px;padding:11px 0;border-bottom:1px solid rgba(30,58,76,.65)}.device:last-child{border:0}.device-dot{width:10px;height:10px;border-radius:50%;background:var(--muted)}.device-dot.online{background:var(--green);box-shadow:0 0 10px rgba(36,220,136,.5)}.device-main{flex:1}.device-main strong,.device-main small{display:block}.device-main small{color:var(--muted)}.battery{color:var(--muted);font-size:12px}.notification{padding:12px 0;border-bottom:1px solid rgba(30,58,76,.65)}.notification:last-child{border:0}.notification-head{display:flex;justify-content:space-between;gap:8px}.notification h4{margin:0;font-size:13px}.notification p{color:var(--muted);margin:5px 0 0;font-size:12px}.tag{font-size:10px;font-weight:800;padding:3px 7px;border-radius:20px;background:#17384a;color:var(--cyan)}.tag.SOS{background:rgba(255,77,98,.15);color:var(--red)}.actions{display:flex;gap:10px;flex-wrap:wrap}.btn{border:0;border-radius:10px;padding:10px 14px;font-weight:750;cursor:pointer;background:var(--cyan);color:#052022}.btn.secondary{background:#173447;color:var(--text)}.field{margin-bottom:13px}.field label{display:block;color:var(--muted);font-size:12px;margin-bottom:6px}.field input,.field select,.field textarea{width:100%;border:1px solid var(--line);border-radius:10px;padding:11px 12px;color:var(--text);background:#081722;outline:none}.field input:focus,.field textarea:focus,.field select:focus{border-color:var(--cyan)}.field textarea{min-height:76px;resize:vertical}.flash{padding:11px 14px;margin-bottom:16px;border:1px solid rgba(36,220,136,.45);background:rgba(36,220,136,.09);border-radius:10px;color:#aef3d1}.flash.error{border-color:rgba(255,77,98,.45);background:rgba(255,77,98,.09);color:#ffc4ca}.code-box{text-align:center;padding:14px;margin-bottom:14px;border:1px dashed var(--cyan);border-radius:12px;background:rgba(36,215,209,.06)}.code-box strong{font-size:25px;letter-spacing:3px;color:var(--cyan);display:block}.modal{border:0;padding:0;border-radius:16px;background:var(--panel);color:var(--text);width:min(440px,calc(100% - 24px));box-shadow:0 25px 80px #000}.modal::backdrop{background:rgba(0,0,0,.68);backdrop-filter:blur(4px)}.modal-head{display:flex;justify-content:space-between;padding:16px 18px;border-bottom:1px solid var(--line)}.modal-head h3{margin:0}.modal-close{border:0;background:transparent;color:var(--muted);cursor:pointer;font-size:22px}.auth-page{min-height:100vh;display:grid;place-items:center;padding:20px}.auth-card{width:min(430px,100%);padding:28px}.auth-card .brand{margin-bottom:25px}.auth-card h1{font-size:23px;margin:0 0 5px}.auth-card>p{margin:0 0 23px;color:var(--muted)}.auth-card .btn{width:100%;margin-top:4px}.leaflet-container{font-family:inherit}.leaflet-popup-content-wrapper,.leaflet-popup-tip{background:#112534;color:#e9f6ff}.empty{color:var(--muted);text-align:center;padding:20px 4px}
@media(max-width:980px){.shell{grid-template-columns:1fr}.sidebar{position:static;height:auto;border-right:0;border-bottom:1px solid var(--line);padding:16px}.nav{display:none}.side-foot{display:none}.dashboard-grid{grid-template-columns:1fr}.stats{grid-template-columns:repeat(2,1fr)}.main{padding:18px}.map{height:380px}}
@media(max-width:520px){.stats{grid-template-columns:1fr 1fr}.stat strong{font-size:23px}.topbar{align-items:flex-start}.topbar .actions{justify-content:flex-end}.btn{padding:9px 10px}.map{height:330px}}
.install-page{min-height:100vh;padding:28px;background:radial-gradient(circle at 20% 0,#153d52 0,transparent 35%),var(--bg)}.install-card{width:min(1040px,100%);margin:0 auto;padding:28px}.install-header{display:flex;justify-content:space-between;gap:30px;align-items:flex-start;margin-bottom:25px}.install-header .brand{min-width:220px;margin:0}.install-header h1{font-size:28px;margin:0 0 5px}.install-header p{margin:0;color:var(--muted)}.requirements{padding:18px;margin-bottom:22px;border:1px solid var(--line);border-radius:14px;background:rgba(4,15,23,.45)}.requirements h2,.install-section h2{font-size:15px;margin:0 0 10px}.requirement-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.requirement{display:flex;align-items:center;gap:8px;color:var(--muted);font-size:12px}.requirement span{width:20px;height:20px;display:grid;place-items:center;border-radius:50%;font-weight:800}.requirement.ok span{color:var(--green);background:rgba(36,220,136,.12)}.requirement.bad{color:#ffc4ca}.requirement.bad span{color:var(--red);background:rgba(255,77,98,.12)}.install-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px}.install-section{padding:20px;border:1px solid var(--line);border-radius:14px;background:rgba(8,23,34,.56)}.install-section>p{margin:-4px 0 18px;font-size:12px}.field-row{display:flex;gap:10px}.field-row .field{flex:1}.field-row .field-port{flex:0 0 110px}.install-note{padding:12px;border-radius:10px;background:rgba(36,215,209,.07);color:var(--muted);font-size:12px}.install-note code{color:var(--cyan)}.install-submit{display:block;width:100%;margin-top:22px;padding:13px}.install-submit:disabled{opacity:.45;cursor:not-allowed}
@media(max-width:760px){.install-page{padding:12px}.install-card{padding:18px}.install-header{display:block}.install-header .brand{margin-bottom:24px}.install-grid{grid-template-columns:1fr}.requirement-grid{grid-template-columns:1fr 1fr}}
