:root{--bg: #e9edf1;--surface: #ffffff;--surface-2: #f4f7f9;--panel: #ffffff;--border: #d9dfe6;--border-strong: #c2cad3;--text: #141b23;--text-2: #48555f;--text-3: #6c7a86;--accent: #2c6fb5;--accent-weak: #e7f0f8;--accent-line: #2c6fb5;--ok: #1c8a55;--ok-bg: #e2f2e9;--ok-line: #1c8a55;--stop: #596673;--stop-bg: #e7eaee;--warn: #a86807;--warn-bg: #f8eed6;--fail: #bd332b;--fail-bg: #f9e4e2;--offline: #3a444d;--offline-bg: #e5e8eb;--grid: #e3e8ed;--shadow: 0 1px 2px rgba(20, 27, 35, .06), 0 2px 8px rgba(20, 27, 35, .05);--focus: #2c6fb5}:root[data-theme=dark]{--bg: #0c1015;--surface: #151b22;--surface-2: #1a212a;--panel: #151b22;--border: #28313b;--border-strong: #3a4653;--text: #e9eef2;--text-2: #a7b3bf;--text-3: #7d8a97;--accent: #4e9ae0;--accent-weak: #15273a;--accent-line: #4e9ae0;--ok: #2fb574;--ok-bg: #12301f;--ok-line: #2fb574;--stop: #8a96a2;--stop-bg: #222a33;--warn: #e0a23c;--warn-bg: #31270f;--fail: #f0645b;--fail-bg: #391917;--offline: #9aa5b0;--offline-bg: #1f262e;--grid: #232c35;--shadow: 0 1px 2px rgba(0, 0, 0, .4), 0 4px 14px rgba(0, 0, 0, .3);--focus: #4e9ae0}*{box-sizing:border-box}html,body{margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:IBM Plex Sans,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}.tnum{font-variant-numeric:tabular-nums}.mono{font-family:IBM Plex Mono,ui-monospace,SFMono-Regular,Menlo,monospace}:focus{outline:none}:focus-visible{outline:3px solid var(--focus);outline-offset:2px;border-radius:4px}button{font-family:inherit;cursor:pointer}::-webkit-scrollbar{width:12px;height:12px}::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:8px;border:3px solid var(--bg)}@keyframes sc-pulse{0%,to{opacity:1}50%{opacity:.35}}@keyframes sc-blink{0%,to{opacity:1}50%{opacity:.4}}@keyframes sc-fade{0%{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}@keyframes sc-slidein{0%{transform:translate(100%)}to{transform:none}}@media (prefers-reduced-motion: reduce){*{animation:none!important;transition:none!important}}
