.chart-threshold[data-v-40c566bd]{stroke:var(--danger);stroke-width:1;stroke-dasharray:4 3}.chart-foot[data-v-40c566bd]{display:flex;gap:12px;align-items:center;margin-top:6px;color:var(--ink-3);font-size:11px}:root{--bg: #f4f6f8;--card: #ffffff;--ink: #1f2933;--ink-2: #52606d;--ink-3: #7b8794;--line: #e2e8f0;--brand: #1f6feb;--ok: #1f9d55;--warn: #d97706;--danger: #d64545;--l1: #3b82f6;--l2: #f59e0b;--l3: #dc2626;--radius: 10px;--shadow: 0 1px 2px rgba(15, 23, 42, .06), 0 4px 12px rgba(15, 23, 42, .06)}*{box-sizing:border-box}html,body,#app{height:100%;margin:0}body{background:var(--bg);color:var(--ink);font:14px/1.6 -apple-system,BlinkMacSystemFont,Segoe UI,PingFang SC,Microsoft YaHei,sans-serif;-webkit-font-smoothing:antialiased}a{color:var(--brand);text-decoration:none}a:hover{text-decoration:underline}code,.mono{font-family:ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;font-size:12px}.app-shell{display:flex;flex-direction:column;min-height:100%}.topbar{display:flex;align-items:center;gap:24px;padding:0 20px;height:56px;background:#101828;color:#e5e7eb;position:sticky;top:0;z-index:20}.brand{display:flex;align-items:center;gap:10px}.brand-mark{width:28px;height:28px;border-radius:8px;display:grid;place-items:center;background:var(--brand);color:#fff;font-weight:700}.brand-text{display:flex;flex-direction:column;line-height:1.15}.brand-text strong{font-size:14px}.brand-text em{font-style:normal;font-size:11px;color:#9aa4b2}.nav{display:flex;gap:4px;flex:1}.nav-link{position:relative;padding:6px 12px;border-radius:8px;color:#cbd5e1;font-size:13px}.nav-link:hover{background:#ffffff14;text-decoration:none}.nav-link.router-link-active{background:#ffffff24;color:#fff}.nav-badge{display:inline-block;margin-left:6px;min-width:18px;padding:0 5px;border-radius:9px;background:var(--danger);color:#fff;font-size:11px;line-height:18px;text-align:center}.topbar-right{display:flex;align-items:center;gap:12px}.user-name{font-size:13px;color:#cbd5e1}.ws-pill{display:inline-flex;align-items:center;gap:6px;padding:3px 9px;border-radius:999px;font-size:12px;background:#ffffff14;color:#cbd5e1}.ws-dot{width:7px;height:7px;border-radius:50%;background:#94a3b8}.ws-authed .ws-dot{background:#34d399}.ws-connecting .ws-dot,.ws-open .ws-dot{background:#fbbf24}.ws-closed .ws-dot{background:#f87171}.page{flex:1;width:100%;max-width:1180px;margin:0 auto;padding:20px}.footer{padding:12px 20px 20px;color:var(--ink-3);font-size:12px;text-align:center}.footer .footer-sub{display:block;margin-top:4px;font-size:11px;color:var(--ink-3)}.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:16px}.page-head h1{margin:0;font-size:20px;font-weight:650}.page-head p{margin:4px 0 0;color:var(--ink-3);font-size:12px}.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow)}.card+.card{margin-top:16px}.card-head{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 16px;border-bottom:1px solid var(--line)}.card-head h2{margin:0;font-size:14px;font-weight:600}.card-body{padding:16px}.card-body.tight{padding:0}.grid{display:grid;gap:16px}.grid-2{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}.grid-3{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}.grid-4{grid-template-columns:repeat(auto-fit,minmax(160px,1fr))}.kv{display:grid;grid-template-columns:96px 1fr;gap:6px 12px;align-items:baseline}.kv dt{color:var(--ink-3);font-size:12px}.kv dd{margin:0;font-size:13px}.stat{padding:14px 16px}.stat-label{color:var(--ink-3);font-size:12px}.stat-value{margin-top:4px;font-size:22px;font-weight:650;line-height:1.2}.stat-hint{margin-top:4px;color:var(--ink-3);font-size:11px}.badge{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:999px;font-size:12px;line-height:18px;border:1px solid transparent;white-space:nowrap}.badge-ok{background:#e7f6ee;color:#14713d;border-color:#bfe8d2}.badge-bad{background:#fdeaea;color:#a92a2a;border-color:#f5c6c6}.badge-warn{background:#fdf1dd;color:#94570a;border-color:#f5ddb3}.badge-mute{background:#f1f3f5;color:#5b6672;border-color:#e2e8f0}.badge-info,.sev-L1{background:#e8f1fe;color:#1a56b8;border-color:#c7dbfb}.sev-L2{background:#fdf1dd;color:#94570a;border-color:#f5ddb3}.sev-L3{background:#fdeaea;color:#a92a2a;border-color:#f5c6c6}.sev-none{background:#f1f3f5;color:#5b6672;border-color:#e2e8f0}.btn{display:inline-flex;align-items:center;gap:6px;padding:7px 14px;border-radius:8px;border:1px solid var(--line);background:#fff;color:var(--ink);font:inherit;font-size:13px;cursor:pointer}.btn:hover:not(:disabled){border-color:#cbd5e1;background:#f8fafc}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:var(--brand);border-color:var(--brand);color:#fff}.btn-primary:hover:not(:disabled){background:#1a5fd0;border-color:#1a5fd0}.btn-danger{background:var(--danger);border-color:var(--danger);color:#fff}.btn-danger:hover:not(:disabled){background:#bf3a3a;border-color:#bf3a3a}.btn-ghost{background:transparent;border-color:transparent;color:inherit}.btn-ghost:hover:not(:disabled){background:#ffffff1a;border-color:transparent}.btn-sm{padding:4px 10px;font-size:12px}.field{display:flex;flex-direction:column;gap:6px}.field label{font-size:12px;color:var(--ink-2)}.input,select.input{width:100%;padding:8px 11px;border-radius:8px;border:1px solid #cfd8e3;background:#fff;color:var(--ink);font:inherit;font-size:13px}.input:focus{outline:2px solid rgba(31,111,235,.25);border-color:var(--brand)}.field-row{display:flex;flex-wrap:wrap;gap:12px;align-items:flex-end}.field-row .field{min-width:150px}.table-wrap{overflow-x:auto}table.tbl{width:100%;border-collapse:collapse;font-size:13px}.tbl th,.tbl td{padding:10px 14px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}.tbl th{color:var(--ink-3);font-weight:500;font-size:12px;background:#fafbfc;white-space:nowrap}.tbl tbody tr:hover{background:#f8fafc}.tbl tbody tr:last-child td{border-bottom:none}.tbl .num{font-variant-numeric:tabular-nums}.alert{padding:10px 14px;border-radius:8px;font-size:13px;border:1px solid}.alert-error{background:#fdeaea;border-color:#f5c6c6;color:#a92a2a}.alert-info{background:#e8f1fe;border-color:#c7dbfb;color:#1a56b8}.alert-warn{background:#fdf1dd;border-color:#f5ddb3;color:#94570a}.empty{padding:32px 16px;text-align:center;color:var(--ink-3);font-size:13px}.loading{padding:24px;text-align:center;color:var(--ink-3);font-size:13px}.row-actions{display:flex;gap:8px;flex-wrap:wrap}.muted{color:var(--ink-3)}.nowrap{white-space:nowrap}.spacer{flex:1}.alarm{display:flex;gap:14px;padding:14px 16px;border-bottom:1px solid var(--line)}.alarm:last-child{border-bottom:none}.alarm-bar{width:4px;border-radius:2px;background:var(--ink-3);flex:none}.alarm-bar.L3{background:var(--l3)}.alarm-bar.L2{background:var(--l2)}.alarm-bar.L1{background:var(--l1)}.alarm-main{flex:1;min-width:0}.alarm-title{display:flex;align-items:center;gap:8px;flex-wrap:wrap;font-weight:600}.alarm-meta{margin-top:4px;color:var(--ink-3);font-size:12px;display:flex;gap:12px;flex-wrap:wrap}.alarm-side{display:flex;flex-direction:column;gap:8px;align-items:flex-end;flex:none}.login-wrap{min-height:100%;display:grid;place-items:center;padding:24px;position:relative}.login-bg{position:fixed;inset:0;z-index:-1;background:linear-gradient(145deg,#a98c4cf2,#6c95d6f2,#7c2b75f2);filter:url(#login-texture)}.login-bg-filter{position:absolute;width:0;height:0}.login-card{width:100%;max-width:360px;padding:24px;border:0;border-radius:8px;box-shadow:0 10px 15px -3px #0f172a1a,0 4px 6px -2px #0f172a0d}.login-card h1{margin:0 0 4px;font-size:20px;font-weight:600;text-align:center}.login-card .sub{margin:0 0 20px;color:var(--ink-3);font-size:12px;text-align:center}.login-card form{display:flex;flex-direction:column}.login-card .field{gap:0}.login-card .input{margin:8px 0;padding:14px 16px;font-size:14px;border-radius:8px;border:1px solid #e5e7eb;box-shadow:0 1px 2px #0f172a0d}.login-card .input:focus{outline:none;border-color:#4f46e5;box-shadow:0 0 0 3px #4f46e52e}.login-card .btn{justify-content:center;width:100%}.login-card .btn-primary{margin-top:10px;padding:12px 20px;background:#4f46e5;border-color:#4f46e5;border-radius:8px;font-weight:500;letter-spacing:2px}.login-card .btn-primary:hover:not(:disabled){background:#4338ca;border-color:#4338ca}.login-hint{margin-top:16px;padding:10px 12px;border-radius:8px;background:#f8fafc;border:1px dashed var(--line);color:var(--ink-3);font-size:12px}.guest-hint{margin-top:14px;padding:10px 12px;border-radius:8px;background:#eef2ff;border:1px solid #c7d2fe;font-size:12px}.guest-hint .guest-title{margin:0 0 6px;font-weight:600;color:#4338ca}.guest-hint .guest-cred{margin:0;display:flex;align-items:center;gap:6px;flex-wrap:wrap;color:var(--ink-3)}.guest-hint code{background:#fff;border:1px solid var(--line);border-radius:4px;padding:1px 6px;color:var(--ink)}.pwd-row{position:relative}.pwd-row .input{padding-right:38px}.pwd-eye{position:absolute;top:50%;right:5px;transform:translateY(-50%);width:28px;height:28px;display:grid;place-items:center;padding:0;border:0;border-radius:6px;background:transparent;color:var(--ink-3);cursor:pointer}.pwd-eye:hover{color:#4f46e5}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}.chart{width:100%;height:180px;display:block}.chart-axis{stroke:var(--line);stroke-width:1}.chart-grid{stroke:#eef2f6;stroke-width:1}.chart-line{fill:none;stroke:var(--brand);stroke-width:2;stroke-linejoin:round;stroke-linecap:round}.chart-label{fill:var(--ink-3);font-size:10px}.chart-empty{display:grid;place-items:center;height:180px;color:var(--ink-3);font-size:13px}@media(max-width:720px){.topbar{gap:12px;padding:0 12px}.nav{gap:0}.nav-link{padding:6px 8px;font-size:12px}.user-name{display:none}.page{padding:14px}.kv{grid-template-columns:84px 1fr}}.app-shell.shell--app{display:flex;flex-direction:row;min-height:100vh;background:var(--bg)}.sidebar{position:sticky;top:0;z-index:30;flex:0 0 224px;width:224px;height:100vh;display:flex;flex-direction:column;gap:4px;padding:14px 10px 12px;background:#101828;color:#cbd5e1;transition:width .18s ease,flex-basis .18s ease,transform .22s ease}.sidebar.is-collapsed{flex-basis:64px;width:64px}.sidebar-head{display:flex;align-items:center;gap:10px;padding:2px 6px 14px;min-height:42px}.sidebar-head .brand-text{min-width:0}.sidebar-head .brand-text strong{font-size:13.5px;color:#e5e7eb;white-space:nowrap}.sidebar-head .brand-text em{font-size:11px;color:#94a3b8;white-space:nowrap}.sidebar.is-collapsed .sidebar-head{justify-content:center;padding-left:0;padding-right:0}.sidebar.is-collapsed .brand-text{display:none}.side-nav{display:flex;flex-direction:column;gap:2px}.side-link{position:relative;display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:8px;color:#cbd5e1;font-size:13.5px;white-space:nowrap;overflow:hidden}.side-link:hover{background:#ffffff14;color:#fff;text-decoration:none}.side-link:focus-visible{outline:2px solid #93b4f5;outline-offset:2px}.side-link.is-active{background:#ffffff24;color:#fff;font-weight:600}.side-link.is-active:before{content:"";position:absolute;left:0;top:22%;bottom:22%;width:3px;border-radius:0 3px 3px 0;background:var(--brand)}.side-ico{display:inline-flex;flex:none}.side-label{overflow:hidden;text-overflow:ellipsis}.sidebar.is-collapsed .side-link{justify-content:center;padding-left:0;padding-right:0}.sidebar.is-collapsed .side-label{display:none}.sidebar.is-collapsed .side-link .nav-badge{position:absolute;top:2px;right:4px;margin:0;min-width:15px;padding:0 4px;font-size:10px;line-height:15px}.sidebar-foot{margin-top:auto;padding-top:10px}.collapse-btn{display:flex;align-items:center;gap:10px;width:100%;padding:8px 10px;border:0;border-radius:8px;background:transparent;color:#94a3b8;font:inherit;font-size:12.5px;cursor:pointer}.collapse-btn:hover{background:#ffffff14;color:#e5e7eb}.collapse-btn:focus-visible{outline:2px solid #93b4f5;outline-offset:2px}.collapse-btn .chev{transition:transform .18s ease}.sidebar.is-collapsed .collapse-btn{justify-content:center;padding-left:0;padding-right:0}.sidebar.is-collapsed .collapse-btn .chev{transform:rotate(180deg)}.sidebar-close{display:none;margin-left:auto;align-items:center;justify-content:center;width:32px;height:32px;padding:0;border:1px solid rgba(255,255,255,.16);border-radius:8px;background:transparent;color:#e5e7eb;cursor:pointer}.sidebar-close:hover{background:#ffffff1a}.sidebar-close:focus-visible{outline:2px solid #93b4f5;outline-offset:2px}.main-col{flex:1;min-width:0;display:flex;flex-direction:column;min-height:100vh}.topbar-title{display:flex;flex-direction:column;line-height:1.2;margin-right:auto;min-width:0}.topbar-title strong{font-size:14px;font-weight:600;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar-title em{font-style:normal;font-size:11px;color:#94a3b8;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.menu-btn{display:none;align-items:center;justify-content:center;width:38px;height:38px;padding:0;border:1px solid rgba(255,255,255,.16);border-radius:8px;background:transparent;color:#e5e7eb;cursor:pointer}.menu-btn:hover{background:#ffffff1a}.menu-btn:focus-visible{outline:2px solid #93b4f5;outline-offset:2px}.sidebar-scrim{position:fixed;inset:0;z-index:25;background:#0f172a85;-webkit-backdrop-filter:blur(1.5px);backdrop-filter:blur(1.5px);animation:scrim-in .18s ease both}@keyframes scrim-in{0%{opacity:0}to{opacity:1}}body.drawer-locked{overflow:hidden}@media(max-width:899px){.app-shell.shell--app{display:block}.sidebar{position:fixed;top:0;left:0;width:min(82vw,300px);flex-basis:auto;height:100vh;transform:translate(-100%);box-shadow:none;overflow-y:auto}.sidebar.is-open{transform:none;box-shadow:0 18px 48px #0f172a6b}.sidebar.is-collapsed{width:min(82vw,300px)}.sidebar.is-collapsed .brand-text{display:flex}.sidebar.is-collapsed .side-link,.sidebar.is-collapsed .collapse-btn{justify-content:flex-start;padding-left:10px;padding-right:10px}.sidebar.is-collapsed .side-label{display:inline}.sidebar.is-collapsed .side-link .nav-badge{position:static;margin-left:6px;min-width:18px;padding:0 5px;font-size:11px;line-height:18px}.sidebar-foot{display:none}.sidebar-close,.menu-btn{display:inline-flex}.main-col{min-height:100vh}.topbar{gap:12px;padding:0 14px;height:54px}.topbar-title em{display:none}.topbar-title strong{font-size:13.5px}.topbar-right{gap:8px}.topbar-right .ws-pill{padding:2px 7px}.topbar-right .user-name{display:none}.page{padding:14px}}
