:root{--bg:#f5f7f6;--surface:#fff;--surface-2:#eef2f0;--fg:#14211d;--muted:#5c6b66;--border:#d9e0dd;--brand:#0e7c66;--brand-fg:#fff;--brand-weak:#e3f1ec;--danger:#c0392b;--danger-weak:#fbeae8;--warn:#b26a00;--warn-weak:#fbf0dd;--ok:#1b8a3a;--ok-weak:#e4f4e8;--radius:10px;--shadow:0 1px 2px rgba(0,0,0,.06),0 2px 8px rgba(0,0,0,.04);--font:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Helvetica,Arial,sans-serif;color-scheme:light}@media (prefers-color-scheme:dark){:root{--bg:#0e1513;--surface:#16201d;--surface-2:#1d2a26;--fg:#e4ebe8;--muted:#95a39e;--border:#2b3833;--brand:#3fae90;--brand-fg:#06130f;--brand-weak:#16302a;--danger:#f0776a;--danger-weak:#2c1a18;--warn:#e6b450;--warn-weak:#2c2416;--ok:#5fd08e;--ok-weak:#173026;--shadow:0 1px 2px rgba(0,0,0,.3),0 2px 10px rgba(0,0,0,.25);color-scheme:dark}}*{box-sizing:border-box}body,html{margin:0;padding:0}body{background:var(--bg);color:var(--fg);font-family:var(--font);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}a{color:var(--brand);text-decoration:none}a:hover{text-decoration:underline}h1{font-size:1.6rem;margin:0 0 .25rem}h2{font-size:1.15rem;margin:0 0 .5rem}h3{font-size:1rem;margin:0}small{color:var(--muted)}.app{display:flex;min-height:100vh}.sidebar{width:220px;flex-shrink:0;background:var(--surface);border-right:1px solid var(--border);padding:20px 14px;display:flex;flex-direction:column;gap:4px}.brand{font-weight:800;font-size:1.2rem;letter-spacing:-.02em;padding:4px 10px 16px;color:var(--fg)}.brand span{color:var(--brand)}.nav-link{display:flex;align-items:center;gap:10px;padding:9px 11px;border-radius:8px;color:var(--muted);font-weight:500}.nav-link:hover{background:var(--surface-2);text-decoration:none}.nav-link.active{background:var(--brand-weak);color:var(--brand)}.main,.nav-spacer{flex:1 1}.main{min-width:0;padding:28px clamp(16px,4vw,40px);max-width:900px}.page-head{margin-bottom:20px}.page-head p{margin:0;color:var(--muted)}.auth-wrap{min-height:100vh;display:grid;place-items:center;padding:24px 16px}.auth-card{width:100%;max-width:400px}.auth-brand{text-align:center;font-weight:800;font-size:1.5rem;margin-bottom:20px}.auth-brand span{color:var(--brand)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px}.card+.card{margin-top:16px}.grid{display:grid;grid-gap:16px;gap:16px}.grid-2{grid-template-columns:repeat(auto-fit,minmax(240px,1fr))}.tile{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);padding:18px 20px}.tile .label{color:var(--muted);font-size:.82rem;text-transform:uppercase;letter-spacing:.04em}.tile .value{font-size:1.8rem;font-weight:700;margin-top:4px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.tile .sub{color:var(--muted);font-size:.85rem;margin-top:2px}.field{margin-bottom:14px}.field label{display:block;font-weight:600;font-size:.88rem;margin-bottom:5px}.field input,.field select,.field textarea{width:100%;padding:9px 11px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--fg);font:inherit}.field input:focus,.field select:focus,.field textarea:focus{outline:2px solid var(--brand);outline-offset:-1px;border-color:var(--brand)}.field .err{color:var(--danger);font-size:.82rem;margin-top:4px}.field textarea{min-height:90px;resize:vertical}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:9px 16px;border-radius:8px;border:1px solid transparent;font:inherit;font-weight:600;cursor:pointer;background:var(--brand);color:var(--brand-fg)}.btn:hover{filter:brightness(1.05);text-decoration:none}.btn:disabled{opacity:.6;cursor:not-allowed}.btn.secondary{background:var(--surface);color:var(--fg);border-color:var(--border)}.btn.danger{background:var(--danger);color:#fff}.btn.sm{padding:6px 12px;font-size:.86rem}.btn-row{display:flex;gap:8px;flex-wrap:wrap}.table-wrap{overflow-x:auto;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface)}table{width:100%;border-collapse:collapse;font-size:.9rem}td,th{text-align:left;padding:11px 14px;border-bottom:1px solid var(--border);white-space:nowrap}th{font-size:.75rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted);font-weight:600}tbody tr:last-child td{border-bottom:none}td.num{font-feature-settings:"tnum";font-variant-numeric:tabular-nums;text-align:right}.badge{display:inline-block;padding:2px 9px;border-radius:999px;font-size:.78rem;font-weight:600;border:1px solid transparent}.badge.ok{background:var(--ok-weak);color:var(--ok)}.badge.pending{background:var(--warn-weak);color:var(--warn)}.badge.bad{background:var(--danger-weak);color:var(--danger)}.badge.neutral{background:var(--surface-2);color:var(--muted)}.alert{padding:11px 14px;border-radius:8px;font-size:.9rem;margin-bottom:14px}.alert.error{background:var(--danger-weak);color:var(--danger)}.alert.success{background:var(--ok-weak);color:var(--ok)}.alert.info{background:var(--brand-weak);color:var(--brand)}.alert.warn{background:var(--warn-weak);color:var(--warn)}.muted{color:var(--muted)}.center{text-align:center}.spinner{width:22px;height:22px;border:3px solid var(--border);border-top-color:var(--brand);border-radius:50%;animation:spin .7s linear infinite;margin:24px auto}@keyframes spin{to{transform:rotate(1turn)}}.topbar{display:none}@media (max-width:720px){.app{flex-direction:column}.sidebar{width:100%;flex-direction:row;flex-wrap:wrap;border-right:none;border-bottom:1px solid var(--border);padding:12px}.brand{padding:4px 8px;width:100%}.nav-spacer{display:none}.main{padding:20px 16px;max-width:100%}}:root{--series-wifi:#2a78d6;--series-cell:#eb6834;--series-single:var(--brand)}@media (prefers-color-scheme:dark){:root{--series-wifi:#3987e5;--series-cell:#d95926}}.chart{position:relative}.chart-plot{display:flex;align-items:flex-end;gap:1px;height:180px;border-bottom:1px solid var(--border);background-image:linear-gradient(var(--border) 1px,transparent 1px);background-size:100% 50%;background-position:0 -.5px}.chart-col{flex:1 1;min-width:1px;height:100%;display:flex;flex-direction:column-reverse;gap:1px;cursor:crosshair}.chart-col.active,.chart-col:hover{background:var(--surface-2)}.chart-seg{width:100%;border-radius:0}.chart-seg:last-child{border-radius:2px 2px 0 0}.chart-axis{display:flex;justify-content:space-between;margin-top:6px}.chart-axis,.chart-ymax{color:var(--muted);font-size:.75rem;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.chart-ymax{margin-bottom:4px}.chart-tip{min-height:1.4em;font-size:.85rem;color:var(--fg);margin-bottom:6px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.legend{display:flex;gap:16px;flex-wrap:wrap;font-size:.82rem;color:var(--muted);margin-bottom:8px}.legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:6px;vertical-align:-1px}.split-bar{display:flex;gap:2px;height:14px;border-radius:4px;overflow:hidden;background:var(--surface-2);margin:6px 0 4px}.split-bar span{display:block;height:100%}.search{padding:7px 11px;border:1px solid var(--border);border-radius:8px;background:var(--surface);color:var(--fg);font:inherit;min-width:220px}.dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-right:6px}