:root{--bg: #0f1320;--panel: #1a1f2e;--panel2: #232a3d;--line: #2d3548;--text: #e6e9f0;--muted: #8b93a7;--accent: #4f8cff;--danger: #e5484d;--ok: #30a46c}*{box-sizing:border-box}html,body{margin:0;height:100%}body{font-family:system-ui,-apple-system,Segoe UI,Roboto,sans-serif;background:var(--bg);color:var(--text);font-size:14px}.shell{display:flex;min-height:100vh}.sidebar{width:220px;flex-shrink:0;background:var(--panel);border-right:1px solid var(--line);padding:16px 0}.brand{font-weight:700;font-size:16px;padding:0 18px 16px}.sidebar nav{display:flex;flex-direction:column}.sidebar nav a{color:var(--muted);text-decoration:none;padding:9px 18px;font-weight:500;border-left:3px solid transparent}.sidebar nav a:hover{color:var(--text);background:var(--panel2)}.sidebar nav a.active{color:var(--text);border-left-color:var(--accent);background:var(--panel2)}.navgroup{color:var(--muted);font-size:11px;text-transform:uppercase;letter-spacing:.08em;padding:16px 18px 6px}.content{flex:1;padding:24px 28px;overflow:auto}.page-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:18px}.page-head h2{margin:0;font-size:20px}.card{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:16px;margin-bottom:18px}.card h3{margin:0 0 12px;font-size:15px}table{width:100%;border-collapse:collapse}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--line);white-space:nowrap}th{color:var(--muted);font-weight:600;font-size:12px;text-transform:uppercase;letter-spacing:.04em}tbody tr:hover{background:var(--panel2)}.row-actions{display:flex;gap:6px}.muted{color:var(--muted)}.mono{font-family:ui-monospace,Menlo,monospace}.btn{background:var(--panel2);color:var(--text);border:1px solid var(--line);border-radius:7px;padding:7px 12px;cursor:pointer;font-size:13px}.btn:hover{border-color:var(--accent)}.btn.primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn.danger{color:var(--danger)}.btn.sm{padding:4px 9px;font-size:12px}.form .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px}label{display:flex;flex-direction:column;gap:4px}label>span{color:var(--muted);font-size:12px}input,select{background:var(--bg);color:var(--text);border:1px solid var(--line);border-radius:6px;padding:7px 9px;font-size:13px}input:focus,select:focus{outline:none;border-color:var(--accent)}input.full{width:100%}input[type=checkbox]{width:16px;height:16px}.actions{display:flex;gap:8px;margin-top:14px}.error{color:var(--danger)}.ok{color:var(--ok);margin-left:8px}.stat-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:14px;margin-bottom:14px}.stat{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:16px;display:flex;flex-direction:column;gap:4px}.stat .num{font-size:28px;font-weight:700}.stat span:last-child{color:var(--muted);font-size:12px}.status{padding:4px 12px;border-radius:999px;font-weight:600;font-size:12px}.status.online{background:#30a36c33;color:var(--ok)}.status.offline{background:#e5484d33;color:var(--danger)}.checklist{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:8px}.chk{flex-direction:row;align-items:center;gap:8px}.sidebar{display:flex;flex-direction:column}.sidebar nav{flex:1}.sidebar-foot{padding:12px 18px;border-top:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:8px}.content.full{display:flex;align-items:center;justify-content:center}.login-wrap{width:100%;display:flex;justify-content:center}.login-card{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:28px;width:320px;display:flex;flex-direction:column;gap:14px}.login-card .brand{padding:0;font-size:18px}.login-card h3{margin:0}.login-card .btn{margin-top:6px}.page-head .back{color:var(--muted);text-decoration:none;margin-right:6px}.page-head .back:hover{color:var(--text)}.mount-link{color:var(--accent);text-decoration:none}.mount-link:hover{text-decoration:underline}.snr-chart{display:flex;align-items:flex-end;gap:6px;overflow-x:auto;padding:8px 2px 2px}.snr-col{display:flex;flex-direction:column;align-items:center;gap:4px;width:28px;flex-shrink:0}.snr-val{font-size:10px;color:var(--muted)}.snr-barbox{height:190px;width:16px;background:var(--bg);border-radius:4px;display:flex;align-items:flex-end;overflow:hidden}.snr-bar{width:100%;border-radius:4px 4px 0 0;transition:height .4s}.snr-bar.good{background:var(--ok)}.snr-bar.weak{background:#e5a832}.snr-bar.poor{background:var(--danger)}.snr-lab{font-size:10px}.snr-legend{font-size:12px}.snr-legend .dot{display:inline-block;width:10px;height:10px;border-radius:3px;vertical-align:-1px}.snr-legend .dot.good{background:var(--ok)}.snr-legend .dot.weak{background:#e5a832}.snr-legend .dot.poor{background:var(--danger)}.pos-grid{display:flex;gap:28px;flex-wrap:wrap;align-items:center}.pos-grid b{font-size:16px}.map-frame{width:100%;height:380px;border:0;border-radius:8px;display:block}.acc-note{margin-bottom:0;font-size:12px}.card{overflow-x:auto}.topbar,.backdrop{display:none}@media(max-width:820px){.shell{flex-direction:column}.topbar{display:flex;align-items:center;gap:12px;padding:8px 12px;background:var(--panel);border-bottom:1px solid var(--line);position:sticky;top:0;z-index:30}.topbar .brand{padding:0}.menu-btn{font-size:18px;padding:6px 12px;line-height:1}.sidebar{position:fixed;top:0;bottom:0;left:0;z-index:40;width:min(280px,85vw);padding:16px 0;transform:translate(-105%);transition:transform .22s ease;overflow-y:auto}.sidebar.open{transform:translate(0);box-shadow:0 0 48px #0009}.backdrop{display:block;position:fixed;inset:0;background:#00000073;z-index:35}.content{padding:14px}.page-head{flex-wrap:wrap;gap:8px}.stat-cards{grid-template-columns:repeat(auto-fit,minmax(104px,1fr));gap:10px}.stat{padding:12px}.stat .num{font-size:22px}.pos-grid{gap:14px 20px}.map-frame{height:260px}.login-card{width:min(320px,100%)}.sidebar nav a{padding:13px 18px}.btn{padding:10px 14px}.btn.sm{padding:8px 12px}input,select{font-size:16px;padding:9px 10px}th,td{padding:10px 8px}}td.row-actions,th.actions-col{position:sticky;right:0;background:var(--panel);box-shadow:-10px 0 10px -10px #000000b3}tbody tr:hover td.row-actions{background:var(--panel2)}
