:root{color-scheme:dark;--page: #0d0d0d;--surface-1: #1a1a19;--surface-2: #222221;--border: rgba(255, 255, 255, .1);--grid: #2c2c2a;--baseline: #383835;--ink-1: #ffffff;--ink-2: #c3c2b7;--ink-3: #898781;--series-1: #3987e5;--series-2: #d95926;--series-3: #199e70;--series-4: #c98500;--series-5: #d55181;--status-good: #0ca30c;--status-warning: #fab219;--status-serious: #ec835a;--status-critical: #d03b3b;--meter-track: #16324f;--font-display: "Chakra Petch", "Segoe UI", sans-serif;--font-body: "IBM Plex Sans", system-ui, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, monospace;--radius: 6px}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--page);background-image:radial-gradient(ellipse 80% 50% at 50% -10%,rgba(57,135,229,.06),transparent 60%);background-attachment:fixed;color:var(--ink-2);font-family:var(--font-body);font-size:14px;line-height:1.5}a{color:inherit;text-decoration:none}.shell{max-width:1240px;margin:0 auto;padding:0 24px 64px}.topbar{display:flex;align-items:center;gap:28px;padding:18px 0 14px;border-bottom:1px solid var(--border);margin-bottom:28px}.brand{font-family:var(--font-display);font-weight:700;font-size:17px;letter-spacing:.04em;color:var(--ink-1);text-transform:uppercase;display:flex;align-items:center;gap:10px}.brand .tick{color:var(--series-1)}.brand .version{font-family:var(--font-mono);font-size:10px;font-weight:400;letter-spacing:.04em;text-transform:none;color:var(--ink-3);border:1px solid var(--border);border-radius:999px;padding:1px 8px;margin-left:2px;align-self:center}.nav{display:flex;gap:4px;margin-left:auto}.nav a{font-family:var(--font-display);font-weight:600;font-size:13px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);padding:6px 12px;border-radius:var(--radius);transition:color .15s,background .15s}.nav a:hover,.nav a.active{color:var(--ink-1);background:var(--surface-2)}.conn{display:flex;align-items:center;gap:14px;font-family:var(--font-mono);font-size:11px;color:var(--ink-3)}.conn-item{display:flex;align-items:center;gap:6px}.led{width:8px;height:8px;border-radius:50%;flex:none}.led.good{background:var(--status-good);box-shadow:0 0 6px #0ca30cb3;animation:pulse 2.4s ease-in-out infinite}.led.bad{background:var(--status-critical);box-shadow:0 0 6px #d03b3bb3}.led.idle{background:var(--ink-3)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.45}}.section-label{font-family:var(--font-display);font-size:12px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--ink-3);margin:30px 0 12px;display:flex;align-items:center;gap:10px}.section-label:after{content:"";height:1px;flex:1;background:var(--border)}.card{background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius);padding:16px 18px}.grid{display:grid;gap:14px}.grid.tiles{grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}.grid.charts{grid-template-columns:repeat(auto-fit,minmax(340px,1fr))}.tile-label{font-size:12px;color:var(--ink-3);letter-spacing:.02em}.tile-value{font-family:var(--font-mono);font-weight:600;font-size:30px;color:var(--ink-1);line-height:1.15;margin:4px 0 2px}.tile-value .unit{font-size:15px;font-weight:500;color:var(--ink-3);margin-left:3px}.tile-sub{font-size:12px;color:var(--ink-3);font-family:var(--font-mono)}.meter{height:6px;border-radius:3px;background:var(--meter-track);margin-top:10px;overflow:hidden}.meter>i{display:block;height:100%;border-radius:3px;background:var(--series-1);transition:width .6s ease}.meter.warn>i{background:var(--status-warning)}.meter.crit>i{background:var(--status-critical)}.pill{display:inline-flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:11px;letter-spacing:.04em;padding:2px 9px;border-radius:999px;border:1px solid var(--border);color:var(--ink-2)}table.data{width:100%;border-collapse:collapse}table.data th{text-align:left;font-family:var(--font-display);font-size:11px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-3);padding:8px 10px;border-bottom:1px solid var(--border)}table.data td{padding:9px 10px;border-bottom:1px solid rgba(255,255,255,.05)}.sort-btn{all:unset;cursor:pointer;font:inherit;color:inherit;letter-spacing:inherit;text-transform:inherit;display:inline-flex;align-items:center;gap:4px;transition:color .15s}.sort-btn:hover,.sort-btn.active{color:var(--ink-1)}.sort-arrow{font-size:8px;width:10px;display:inline-block}th.num .sort-btn{justify-content:flex-end;width:100%}table.data tr:last-child td{border-bottom:none}table.data tr.rowlink{cursor:pointer;transition:background .12s}table.data tr.rowlink:hover{background:var(--surface-2)}td.num{font-family:var(--font-mono);font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}th.num{text-align:right}.svc-name{color:var(--ink-1);font-weight:500}.svc-meta{font-size:12px;color:var(--ink-3)}.filter-row{display:flex;gap:6px;align-items:center;margin:0 0 14px}.range-btn{font-family:var(--font-mono);font-size:12px;background:transparent;color:var(--ink-3);border:1px solid var(--border);border-radius:var(--radius);padding:5px 12px;cursor:pointer;transition:color .15s,background .15s}.range-btn:hover{color:var(--ink-1);background:var(--surface-2)}.range-btn.active{color:var(--ink-1);background:var(--surface-2);border-color:#ffffff40}.chart-card h3{margin:0 0 4px;font-family:var(--font-display);font-size:13px;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2)}.chart-card .chart-sub{font-size:12px;color:var(--ink-3);margin-bottom:8px}.chart-empty{height:180px;display:flex;align-items:center;justify-content:center;color:var(--ink-3);font-family:var(--font-mono);font-size:12px}.recharts-cartesian-axis-tick text{fill:var(--ink-3);font-family:var(--font-mono);font-size:11px}.recharts-tooltip-wrapper{outline:none}.viz-tooltip{background:var(--surface-2);border:1px solid var(--border);border-radius:var(--radius);padding:8px 12px;font-family:var(--font-mono);font-size:12px;box-shadow:0 8px 24px #00000080}.viz-tooltip .t-time{color:var(--ink-3);font-size:11px;margin-bottom:4px}.viz-tooltip .t-row{display:flex;align-items:center;gap:8px}.viz-tooltip .t-key{width:12px;height:2px;border-radius:1px;flex:none}.viz-tooltip .t-val{color:var(--ink-1);font-weight:600}.viz-tooltip .t-name{color:var(--ink-2)}.alert-row{display:flex;gap:14px;align-items:flex-start;padding:13px 4px;border-bottom:1px solid rgba(255,255,255,.05)}.alert-row:last-child{border-bottom:none}.alert-title{color:var(--ink-1);font-weight:500}.alert-msg{font-size:13px;color:var(--ink-2)}.alert-time{margin-left:auto;font-family:var(--font-mono);font-size:11px;color:var(--ink-3);white-space:nowrap}.sev-icon{font-size:14px;line-height:1.4;flex:none}.banner{border:1px solid rgba(250,178,25,.35);background:#fab21912;border-radius:var(--radius);padding:12px 16px;margin-bottom:18px;font-size:13px;color:var(--ink-2)}.banner code{font-family:var(--font-mono);color:var(--ink-1);font-size:12px}.empty-state{padding:40px;text-align:center;color:var(--ink-3);font-family:var(--font-mono);font-size:13px}.login-wrap{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.login-card{width:100%;max-width:380px;background:var(--surface-1);border:1px solid var(--border);border-radius:var(--radius);padding:34px 32px 30px;display:flex;flex-direction:column;box-shadow:0 24px 60px #0000008c}.login-sub{margin:0 0 22px;text-align:center;font-family:var(--font-mono);font-size:12px;color:var(--ink-3)}.login-label{font-family:var(--font-display);font-size:11px;font-weight:600;letter-spacing:.12em;text-transform:uppercase;color:var(--ink-3);margin:0 0 6px}.login-input{font-family:var(--font-mono);font-size:14px;color:var(--ink-1);background:var(--page);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;margin-bottom:16px;outline:none;transition:border-color .15s}.login-input:focus{border-color:var(--series-1)}.login-error{font-size:13px;color:var(--status-critical);border:1px solid rgba(208,59,59,.35);background:#d03b3b14;border-radius:var(--radius);padding:8px 12px;margin-bottom:14px}.login-btn{font-family:var(--font-display);font-weight:600;font-size:13px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-1);background:var(--series-1);border:none;border-radius:var(--radius);padding:11px 12px;cursor:pointer;margin-top:4px;transition:filter .15s}.login-btn:hover{filter:brightness(1.12)}.login-btn:disabled{opacity:.6;cursor:default}.pw-wrap{position:relative;display:flex;flex-direction:column}.pw-wrap .login-input{padding-right:62px}.pw-toggle{position:absolute;right:10px;top:11px;background:none;border:none;cursor:pointer;padding:2px 4px;font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;color:var(--ink-3);transition:color .15s}.pw-toggle:hover{color:var(--ink-1)}.toast{position:fixed;right:24px;bottom:24px;z-index:100;display:flex;align-items:center;gap:14px;background:var(--surface-2);border:1px solid rgba(57,135,229,.45);border-radius:var(--radius);padding:14px 16px;max-width:420px;box-shadow:0 16px 48px #0009;animation:rise .4s ease both}.toast-title{font-family:var(--font-display);font-weight:600;font-size:13px;color:var(--ink-1);letter-spacing:.04em}.toast-msg{font-size:12px;color:var(--ink-2);font-family:var(--font-mono)}.toast-refresh{padding:8px 14px;margin:0;flex:none}.toast-close{background:none;border:none;cursor:pointer;padding:0 2px;color:var(--ink-3);font-size:18px;line-height:1;flex:none}.toast-close:hover{color:var(--ink-1)}.login-version{margin-top:18px;text-align:center;font-family:var(--font-mono);font-size:11px;color:var(--ink-3)}.userbox{display:flex;align-items:center;gap:10px}.user-email{font-family:var(--font-mono);font-size:11px;color:var(--ink-3);max-width:200px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:900px){.user-email{display:none}}.reveal{animation:rise .5s ease both}.reveal:nth-child(2){animation-delay:.06s}.reveal:nth-child(3){animation-delay:.12s}.reveal:nth-child(4){animation-delay:.18s}@keyframes rise{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}@media(max-width:720px){.shell{padding:0 16px 48px}.topbar{flex-wrap:wrap;gap:12px}.nav{margin-left:0}.conn{display:none}}
