@keyframes rot{to{transform:rotate(360deg)}}.spin{animation:rot 1s linear infinite}.switch{width:34px;height:18px;border-radius:999px;background:var(--border);border:none;position:relative;cursor:pointer;flex:none;transition:background .12s ease-out;padding:0}.switch.on{background:var(--brand)}.switch i{position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#fff;transition:left .12s ease-out;display:block}.switch.on i{left:18px}.cam.off{opacity:.45}:root{--bg:#080d12;--bg-elevated:#0d141b;--surface:#111a23;--surface-2:#16212c;--border:#22313f;--border-strong:#33485a;--text:#eef5f8;--text-muted:#93a4b3;--text-subtle:#617384;--brand:#18c7c9;--brand-strong:#42e6e8;--brand-soft:#0d3f45;--success:#31c77f;--warning:#f2a93b;--danger:#ef4e4e;--info:#4d9fff;--violet:#8b7cf6;--radius-sm:4px;--radius-md:6px;--radius-lg:8px;--radius-xl:12px;--panel:var(--surface);--panel2:var(--surface-2);--line:var(--border);--ink:var(--text);--muted:var(--text-muted);--muted2:var(--text-subtle);--teal:var(--brand);--cyan:var(--brand);--blue:var(--info);--red:var(--danger);--amber:var(--warning);--green:var(--success)}*{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-size:14px;line-height:1.45;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif}a{color:inherit;text-decoration:none}.app{min-height:100vh;display:flex;flex-direction:column}.mono,td.mono,span.mono,b.mono{font-family:ui-monospace,Consolas,monospace;font-variant-numeric:tabular-nums}:focus-visible{outline:2px solid var(--brand-strong);outline-offset:1px;border-radius:var(--radius-sm)}.nav{display:flex;align-items:center;gap:26px;padding:0 22px;height:56px;background:var(--bg-elevated);border-bottom:1px solid var(--border)}.brand{display:flex;align-items:center;gap:10px;font-weight:700;letter-spacing:.4px}.brand .logo{width:26px;height:26px;border-radius:var(--radius-md);background:var(--brand);display:grid;place-items:center;color:#06171a;font-weight:800}.brand .logo-img{width:28px;height:28px;border-radius:var(--radius-md);object-fit:contain;background:#fff}.brand small{color:var(--text-muted);font-weight:600;letter-spacing:2px;font-size:10px}.tabs{display:flex;gap:2px;margin-left:8px}.tab{padding:8px 13px;border-radius:var(--radius-md);color:var(--text-muted);font-weight:500;font-size:13px;cursor:pointer}.tab:hover{color:var(--text);background:var(--surface-2)}.tab.on{color:var(--brand-strong);background:var(--brand-soft)}.nav .right{margin-left:auto;display:flex;align-items:center;gap:16px;color:var(--text-muted);font-size:12px}.dot{width:8px;height:8px;border-radius:50%;background:var(--success);display:inline-block;margin-right:6px}.badge{background:var(--danger);color:#fff;border-radius:999px;padding:1px 7px;font-size:11px;font-weight:600;font-variant-numeric:tabular-nums}.wrap{flex:1;display:grid;grid-template-columns:300px 1fr 320px;gap:12px;padding:12px}.wrap.two{grid-template-columns:1fr}.col{display:flex;flex-direction:column;gap:12px;min-width:0}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px}.panel h3{font-size:11px;text-transform:uppercase;letter-spacing:.7px;color:var(--text-muted);margin-bottom:10px;font-weight:600}.ptitle{display:flex;justify-content:space-between;align-items:center}.section-title{font-size:20px;font-weight:600;margin:2px 0 4px}.subtle{color:var(--text-muted);font-size:12px}.flex{display:flex;gap:12px}.between{justify-content:space-between}.center{align-items:center}.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;padding:8px 14px;border-radius:var(--radius-md);border:1px solid var(--border);background:var(--surface-2);color:var(--text);font-weight:500;font-size:13px;cursor:pointer;transition:background .12s ease-out}.btn:hover{background:var(--border)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn.primary{background:var(--brand);border-color:var(--brand);color:#06171a;font-weight:600}.btn.primary:hover{background:var(--brand-strong)}.btn.ghost{background:transparent}.btn.danger{background:transparent;border-color:var(--danger);color:var(--danger)}.btn.block{width:100%}.input{width:100%;padding:8px 10px;background:var(--bg-elevated);color:var(--text);border:1px solid var(--border);border-radius:var(--radius-md);font-size:13px;font-family:inherit}.input:focus{border-color:var(--brand);outline:none}select.input{-webkit-appearance:auto;-moz-appearance:auto;appearance:auto}.video{position:relative;background:#000;border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;aspect-ratio:16/9}.video img{width:100%;height:100%;object-fit:contain;display:block}.video .tagbar{position:absolute;top:10px;left:10px;display:flex;gap:8px}.vtag{background:#080d12d9;border:1px solid var(--border);padding:4px 9px;border-radius:var(--radius-sm);font-size:11px;color:var(--brand-strong)}.vrec{position:absolute;top:10px;right:10px;background:#ef4e4e24;border:1px solid var(--danger);color:var(--danger);padding:4px 9px;border-radius:var(--radius-sm);font-size:11px;font-weight:600}.grid4{display:grid;grid-template-columns:1fr 1fr;gap:10px}.thumb{background:var(--bg-elevated);border:1px solid var(--border);border-radius:var(--radius-lg);aspect-ratio:16/10;display:grid;place-items:center;color:var(--text-muted);font-size:12px;cursor:pointer;position:relative;overflow:hidden}.thumb.on{border-color:var(--brand)}.thumb span{position:absolute;top:6px;left:8px;font-size:10px;color:var(--brand-strong)}.cam{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:var(--radius-md);cursor:pointer;border:1px solid transparent}.cam:hover{background:var(--surface-2)}.cam.on{background:var(--brand-soft);border-color:var(--brand)}.cam .ic{width:30px;height:30px;border-radius:var(--radius-md);background:var(--surface-2);display:grid;place-items:center;color:var(--brand)}.cam .nm{font-weight:500}.cam .sub{color:var(--text-muted);font-size:11px}.cam .live{margin-left:auto;color:var(--success);font-size:11px;font-weight:600}.meter{height:6px;background:var(--bg-elevated);border-radius:6px;overflow:hidden;margin-top:5px}.meter>i{display:block;height:100%;background:var(--brand)}.kv{display:flex;justify-content:space-between;font-size:12px;color:var(--text-muted);margin-top:8px}.kv b{color:var(--text);font-variant-numeric:tabular-nums}.ai .row{display:flex;justify-content:space-between;align-items:center;padding:8px 0;border-bottom:1px solid var(--border);font-size:13px}.sev{font-weight:600;padding:2px 8px;border-radius:var(--radius-sm);font-size:11px}.sev.high{background:#ef4e4e1f;color:var(--danger)}.sev.low{background:#31c77f1f;color:var(--success)}.big{font-size:30px;font-weight:650;font-variant-numeric:tabular-nums}.bar{height:8px;border-radius:6px;background:var(--bg-elevated);overflow:hidden;margin-top:6px}.bar>i{display:block;height:100%}table{width:100%;border-collapse:collapse;font-size:12.5px}th,td{text-align:left;padding:8px 10px;border-bottom:1px solid var(--border)}th{color:var(--text-muted);font-size:10.5px;text-transform:uppercase;letter-spacing:.5px;font-weight:600}td{font-variant-numeric:tabular-nums}.pill{font-size:10.5px;font-weight:600;padding:3px 8px;border-radius:var(--radius-sm)}.pill.green{background:#31c77f1f;color:var(--success)}.pill.amber{background:#f2a93b21;color:var(--warning)}.pill.red{background:#ef4e4e1f;color:var(--danger)}.metrics{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}.mc{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px}.mc .l{font-size:10.5px;text-transform:uppercase;letter-spacing:.6px;color:var(--text-muted);font-weight:600}.mc .v{font-size:24px;font-weight:650;margin-top:6px;font-variant-numeric:tabular-nums}.topology{display:flex;gap:10px;align-items:stretch;flex-wrap:wrap}.tnode{flex:1;min-width:150px;background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius-lg);padding:14px}.tnode .t{font-weight:600}.tnode .s{color:var(--text-muted);font-size:11px;margin-top:3px}.tnode .ok{color:var(--success);font-size:11px;font-weight:600;margin-top:8px}.empty{display:grid;place-items:center;padding:32px;color:var(--text-muted);text-align:center;font-size:13px}.skeleton{background:linear-gradient(90deg,var(--surface-2) 25%,var(--border) 50%,var(--surface-2) 75%);background-size:200% 100%;animation:shimmer 1.4s infinite;border-radius:var(--radius-md)}@keyframes shimmer{to{background-position:-200% 0}}@media (prefers-reduced-motion: reduce){.skeleton{animation:none}}@media (max-width:1024px){.wrap{grid-template-columns:1fr}.metrics{grid-template-columns:repeat(2,1fr)}}
