:root{color-scheme:light;--page:#f9f9f7;--surface:#fcfcfb;--surface-2:#f2f1ec;--surface-hover:rgba(11,11,11,0.035);--text:#0b0b0b;--text-2:#52514e;--muted:#898781;--border:rgba(11,11,11,0.1);--border-strong:rgba(11,11,11,0.18);--grid:#e1e0d9;--baseline:#c3c2b7;--accent:#2a78d6;--accent-hover:#256abf;--accent-ink:#ffffff;--accent-wash:rgba(42,120,214,0.09);--series-1:#2a78d6;--series-2:#eb6834;--good:#0ca30c;--warning:#fab219;--serious:#ec835a;--critical:#d03b3b;--good-text:#006300;--critical-text:#a52a2a;--r-sm:6px;--r:10px;--r-lg:14px;--shadow:0 1px 2px rgba(11,11,11,0.04),0 4px 12px rgba(11,11,11,0.04);--sans:system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;--mono:ui-monospace,"SF Mono","Cascadia Code",Menlo,monospace}@media (prefers-color-scheme:dark){:root:where(:not([data-theme=light])){color-scheme:dark;--page:#0d0d0d;--surface:#1a1a19;--surface-2:#232322;--surface-hover:rgba(255,255,255,0.04);--text:#ffffff;--text-2:#c3c2b7;--muted:#898781;--border:rgba(255,255,255,0.1);--border-strong:rgba(255,255,255,0.18);--grid:#2c2c2a;--baseline:#383835;--accent:#3987e5;--accent-hover:#5598e7;--accent-ink:#0d0d0d;--accent-wash:rgba(57,135,229,0.14);--series-1:#3987e5;--series-2:#d95926;--good-text:#0ca30c;--critical-text:#e66767;--shadow:0 1px 2px rgba(0,0,0,0.4),0 4px 12px rgba(0,0,0,0.3)}}:root[data-theme=dark]{color-scheme:dark;--page:#0d0d0d;--surface:#1a1a19;--surface-2:#232322;--surface-hover:rgba(255,255,255,0.04);--text:#ffffff;--text-2:#c3c2b7;--muted:#898781;--border:rgba(255,255,255,0.1);--border-strong:rgba(255,255,255,0.18);--grid:#2c2c2a;--baseline:#383835;--accent:#3987e5;--accent-hover:#5598e7;--accent-ink:#0d0d0d;--accent-wash:rgba(57,135,229,0.14);--series-1:#3987e5;--series-2:#d95926;--good-text:#0ca30c;--critical-text:#e66767;--shadow:0 1px 2px rgba(0,0,0,0.4),0 4px 12px rgba(0,0,0,0.3)}*{box-sizing:border-box}body,html{margin:0;padding:0}body{background:var(--page);color:var(--text);font-family:var(--sans);font-size:14px;line-height:1.55;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}button,input,select{font:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--r-sm)}.app{min-height:100vh;flex-direction:column}.app,.brand{display:flex}.brand{align-items:center;gap:9px;font-size:15px;font-weight:600;letter-spacing:-.01em}.brand-mark{width:28px;height:28px;flex:none;border-radius:8px;background:var(--accent);color:var(--accent-ink);display:grid;place-items:center}.main{width:100%;max-width:1240px;margin:0 auto;flex:1 1;padding:30px 30px calc(116px + env(safe-area-inset-bottom, 0px))}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:20px}.page-title{font-size:21px;font-weight:600;letter-spacing:-.02em}.page-sub{color:var(--text-2);font-size:13px;margin-top:1px}.dock-wrap{position:fixed;left:0;right:0;bottom:calc(14px + env(safe-area-inset-bottom, 0px));z-index:30;display:flex;justify-content:center;padding:0 12px;pointer-events:none}.dock{display:flex;align-items:stretch;gap:2px;padding:6px;border-radius:16px;border:1px solid var(--border-strong);background:color-mix(in srgb,var(--surface) 86%,transparent);-webkit-backdrop-filter:blur(14px) saturate(1.4);backdrop-filter:blur(14px) saturate(1.4);box-shadow:var(--shadow),0 10px 32px rgba(0,0,0,.14);pointer-events:auto;max-width:100%;overflow-x:auto;scrollbar-width:none}.dock::-webkit-scrollbar{display:none}.dock-tab{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:3px;min-width:66px;padding:7px 10px 6px;border:0;background:none;border-radius:11px;color:var(--text-2);font-size:11px;font-weight:500;line-height:1.2;cursor:pointer;white-space:nowrap;transition:background .12s,color .12s}.dock-tab svg{opacity:.75}.dock-tab:hover{background:var(--surface-hover);color:var(--text)}.dock-tab[aria-current=page]{background:var(--accent-wash);color:var(--accent);font-weight:600}.dock-tab[aria-current=page] svg{opacity:1}.dock-tab.icon-only{min-width:42px;padding:7px 9px}.dock-sep{width:1px;flex:none;background:var(--border);margin:7px 5px}.dock-brand{display:flex;align-items:center;gap:8px;padding:0 11px 0 5px;font-size:14px;font-weight:600;letter-spacing:-.01em;white-space:nowrap;flex:none}.dock-brand .brand-mark{width:26px;height:26px;border-radius:7px}@media (max-width:880px){.main{padding:22px 16px calc(94px + env(safe-area-inset-bottom, 0px))}.page-title{font-size:19px}.dock-wrap{bottom:0;padding:0}.dock{width:100%;gap:1px;justify-content:flex-start;border-radius:14px 14px 0 0;border-left:0;border-right:0;border-bottom:0;padding:6px 8px calc(6px + env(safe-area-inset-bottom, 0px));scroll-snap-type:x proximity}.dock-tab{min-width:58px;font-size:10px;scroll-snap-align:center}.dock-brand{display:none}}@media (max-width:560px){.main{padding:18px 13px calc(84px + env(safe-area-inset-bottom, 0px))}.dock-tab{min-width:44px;font-size:0;padding:9px 8px;gap:0}.dock-tab svg{opacity:.85}.dock-sep{margin:7px 3px}}.grid{display:grid;grid-gap:12px;gap:12px}.grid-2{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-3{grid-template-columns:repeat(3,minmax(0,1fr))}.grid-4{grid-template-columns:repeat(4,minmax(0,1fr))}@media (max-width:1080px){.grid-4{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (max-width:720px){.grid-2,.grid-3,.grid-4{grid-template-columns:minmax(0,1fr)}}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);padding:15px 17px;box-shadow:var(--shadow)}.stat-label{color:var(--text-2);font-size:13px;font-weight:500}.stat-value{font-size:30px;font-weight:600;letter-spacing:-.025em;margin-top:3px}.stat-unit{font-size:13px;color:var(--muted);font-weight:500;margin-left:3px}.stat-foot{display:flex;gap:6px;margin-top:7px;min-height:18px}.delta,.stat-foot{align-items:center}.delta{font-size:12px;font-weight:600;display:inline-flex;gap:3px}.delta.up{color:var(--good-text)}.delta.down{color:var(--critical-text)}.delta.flat,.stat-note{color:var(--muted)}.stat-note{font-size:12px}.panel{background:var(--surface);border:1px solid var(--border);border-radius:var(--r);box-shadow:var(--shadow);overflow:hidden}.panel+.panel{margin-top:12px}.panel-head{padding:13px 17px;border-bottom:1px solid var(--border);font-weight:600;font-size:13.5px;display:flex;gap:12px;justify-content:space-between;align-items:center}.panel-body{padding:16px 17px}.table-scroll{overflow-x:auto}table{width:100%;border-collapse:collapse}td,th{text-align:left;padding:10px 17px;font-size:13px;white-space:nowrap}th{color:var(--muted);font-weight:600;font-size:11px;letter-spacing:.05em;text-transform:uppercase;background:var(--surface);position:-webkit-sticky;position:sticky;top:0}td,th{border-bottom:1px solid var(--border)}td{font-feature-settings:"tnum";font-variant-numeric:tabular-nums}tr:last-child td{border-bottom:none}tbody tr:hover td{background:var(--surface-hover)}.num{text-align:right}.mono{font-family:var(--mono);font-size:12px}.empty,.muted{color:var(--muted)}.empty{padding:44px 20px;text-align:center;font-size:13px}.badge{display:inline-flex;align-items:center;gap:6px;padding:3px 9px;border-radius:999px;font-size:12px;font-weight:500;border:1px solid var(--border-strong);color:var(--text-2);white-space:nowrap}.badge-dot{width:7px;height:7px;border-radius:50%;background:var(--muted);flex:none}.badge.good{border-color:color-mix(in srgb,var(--good) 40%,transparent)}.badge.good .badge-dot{background:var(--good)}.badge.warning{border-color:color-mix(in srgb,var(--warning) 45%,transparent)}.badge.warning .badge-dot{background:var(--warning)}.badge.serious{border-color:color-mix(in srgb,var(--serious) 45%,transparent)}.badge.serious .badge-dot{background:var(--serious)}.badge.critical{border-color:color-mix(in srgb,var(--critical) 45%,transparent)}.badge.critical .badge-dot{background:var(--critical)}.badge .live{animation:pulse 2s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}@media (prefers-reduced-motion:reduce){.badge .live{animation:none}}.btn{display:inline-flex;align-items:center;gap:6px;padding:7px 13px;border-radius:var(--r-sm);font-size:13px;font-weight:500;cursor:pointer;color:var(--text);background:var(--surface);border:1px solid var(--border-strong);transition:background .12s,border-color .12s}.btn:hover{background:var(--surface-2)}.btn-primary{background:var(--accent);border-color:var(--accent);color:var(--accent-ink)}.btn-primary:hover{background:var(--accent-hover);border-color:var(--accent-hover)}.btn-danger{color:var(--critical-text);border-color:color-mix(in srgb,var(--critical) 40%,transparent)}.btn-danger:hover{background:color-mix(in srgb,var(--critical) 12%,transparent)}.btn-ghost{border-color:transparent;background:none;color:var(--text-2)}.btn-ghost:hover{background:var(--surface-hover);color:var(--text)}.btn-sm{padding:4px 9px;font-size:12px}.btn:disabled{opacity:.5;cursor:not-allowed}.input,.select,.textarea{width:100%;padding:8px 11px;border-radius:var(--r-sm);background:var(--page);border:1px solid var(--border-strong);color:var(--text);font-size:13.5px}.input::placeholder,.textarea::placeholder{color:var(--muted)}.textarea{resize:vertical;min-height:74px;line-height:1.6}.input:focus,.select:focus,.textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-wash)}.field{margin-bottom:13px}.field label{display:block;font-size:13px;color:var(--text-2);font-weight:500;margin-bottom:5px}.field-hint{font-size:12px;color:var(--muted);margin-top:4px}.toolbar{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-bottom:14px}.chart-wrap{position:relative}.chart{display:block;width:100%;height:auto;touch-action:none}.chart-grid line{stroke:var(--grid);stroke-width:1;shape-rendering:crispEdges}.chart-axis{stroke:var(--baseline);stroke-width:1;shape-rendering:crispEdges}.chart-tick{fill:var(--muted);font-size:10px;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.chart-line{fill:none;stroke-width:2;stroke-linejoin:round;stroke-linecap:round}.chart-dot{stroke:var(--surface);stroke-width:2}.chart-crosshair{stroke:var(--baseline);stroke-width:1;shape-rendering:crispEdges}.chart-endlabel{font-size:11px;font-weight:600;fill:var(--text-2);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.legend{display:flex;gap:16px;align-items:center;flex-wrap:wrap}.legend-item{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--text-2)}.legend-key{width:14px;height:2px;border-radius:1px;flex:none}.tip{position:absolute;pointer-events:none;z-index:5;background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--r-sm);box-shadow:var(--shadow);padding:8px 10px;min-width:128px;transform:translate(-50%,calc(-100% - 12px))}.tip-x{font-size:11px;color:var(--muted);margin-bottom:5px}.tip-row{display:flex;align-items:baseline;gap:7px;font-size:12px}.tip-row+.tip-row{margin-top:2px}.tip-key{width:12px;height:2px;border-radius:1px;flex:none;transform:translateY(-3px)}.tip-val{font-weight:600;color:var(--text);font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.tip-name{color:var(--text-2)}.row-actions{display:flex;gap:6px;justify-content:flex-end}.notice{display:flex;gap:9px;padding:10px 13px;border-radius:var(--r-sm);font-size:13px;margin-bottom:14px;border:1px solid var(--border-strong);background:var(--surface)}.notice.err{border-color:color-mix(in srgb,var(--critical) 40%,transparent);color:var(--critical-text)}.notice.ok{border-color:color-mix(in srgb,var(--good) 40%,transparent);color:var(--good-text)}.code-block{background:var(--page);border:1px solid var(--border);border-radius:var(--r-sm);padding:10px 12px;font-family:var(--mono);font-size:12px;word-break:break-all;color:var(--text);overflow-x:auto}pre.code-block{white-space:pre;word-break:normal}.cap-row{display:flex;align-items:center;gap:8px;padding:7px 0;border-bottom:1px solid var(--border);flex-wrap:wrap}.cap-row:first-child{padding-top:0}.cap-pattern{flex:1 1 150px;min-width:0}.cap-actions{display:flex;gap:4px;flex:none}.cap-check{display:inline-flex;align-items:center;gap:5px;padding:5px 9px;border:1px solid var(--border-strong);border-radius:999px;font-size:12px;color:var(--text-2);cursor:pointer;-webkit-user-select:none;-moz-user-select:none;user-select:none;white-space:nowrap}.cap-check:hover{background:var(--surface-hover)}.cap-check:has(input:checked){background:var(--accent-wash);border-color:color-mix(in srgb,var(--accent) 45%,transparent);color:var(--accent);font-weight:600}.cap-check input{accent-color:var(--accent);margin:0;cursor:pointer}.cap-empty{padding:12px;border:1px dashed var(--border-strong);border-radius:var(--r-sm);color:var(--muted);font-size:12.5px;text-align:center;margin-bottom:10px}.cap-add{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin-top:11px}.cap-chip{padding:4px 10px;border-radius:999px;border:1px solid var(--border-strong);background:none;color:var(--text-2);font-size:12px;font-family:var(--mono);cursor:pointer}.cap-chip:hover:not(:disabled){background:var(--surface-hover);color:var(--text)}.cap-chip:disabled{opacity:.4;cursor:not-allowed}.cap-tag{display:inline-flex;align-items:center;gap:5px;padding:2px 8px;border-radius:999px;border:1px solid var(--border);margin:1px 3px 1px 0;white-space:nowrap}.cap-tag,.cap-tag .mono{font-size:11.5px}.cap-tag-actions{color:var(--muted);font-size:10.5px;letter-spacing:.03em}.lockout{display:flex;gap:11px;align-items:flex-start;padding:12px 14px;margin-bottom:14px;border-radius:var(--r-sm);border:1px solid color-mix(in srgb,var(--critical) 40%,transparent);background:color-mix(in srgb,var(--critical) 8%,transparent);color:var(--critical-text);font-size:13px}.lockout svg{flex:none;margin-top:1px}.lockout-sub{color:var(--text-2);margin-top:2px}.lockout-timer{font-family:var(--mono);font-feature-settings:"tnum";font-variant-numeric:tabular-nums;font-weight:600;color:var(--text)}.login-wrap{min-height:100vh;display:grid;place-items:center;padding:24px}.login-card{width:100%;max-width:372px;padding:26px 24px}.login-card .brand{justify-content:center;padding:0 0 4px;font-size:17px}.dialog-backdrop{position:fixed;inset:0;background:rgba(11,11,11,.5);display:grid;place-items:center;padding:24px;z-index:20;overflow-y:auto}.dialog{width:100%;max-width:520px}.confirm{max-width:440px}.confirm-title{font-size:16px;font-weight:600;margin:0 0 10px;letter-spacing:-.01em}.confirm-body{font-size:13px;color:var(--text-2)}.confirm-body p{margin:0 0 9px}.confirm-body p:last-child{margin-bottom:0}.confirm-body strong{color:var(--text);font-weight:600}.confirm-body ul{margin:0 0 9px;padding-left:18px}.confirm-body li{margin-bottom:4px}.copy-field{display:flex;align-items:center;gap:6px}.copy-value{flex:1 1;min-width:0;padding:8px 11px;border-radius:var(--r-sm);background:var(--page);border:1px solid var(--border-strong);overflow-x:auto;white-space:nowrap;font-size:12px;letter-spacing:.02em}:root{--syn-cmt:#8a8880;--syn-str:#0a7a3d;--syn-kw:#6f42c1;--syn-num:#b5510a;--syn-fn:#1c5cab}@media (prefers-color-scheme:dark){:root:where(:not([data-theme=light])){--syn-cmt:#8b949e;--syn-str:#7ee787;--syn-kw:#d2a8ff;--syn-num:#ffa657;--syn-fn:#79c0ff}}:root[data-theme=dark]{--syn-cmt:#8b949e;--syn-str:#7ee787;--syn-kw:#d2a8ff;--syn-num:#ffa657;--syn-fn:#79c0ff}.t-cmt{color:var(--syn-cmt);font-style:italic}.t-str{color:var(--syn-str)}.t-kw{color:var(--syn-kw);font-weight:600}.t-num{color:var(--syn-num)}.t-fn{color:var(--syn-fn)}.code-panel code{line-height:1.75}.code-panel pre{-moz-tab-size:2;tab-size:2}