:root{--font-sans: "Figtree", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SFMono-Regular", monospace;--gray-50: #f8fafc;--gray-100: #f1f4f8;--gray-150: #eaeef3;--gray-200: #e4e8ee;--gray-300: #d3d9e1;--gray-400: #9aa4b2;--gray-500: #6b7480;--gray-600: #4b5563;--gray-700: #363c45;--gray-800: #23282f;--gray-900: #14171c;--canvas: #f6f7f9;--surface: #ffffff;--border: #e4e8ee;--border-strong: #d3d9e1;--text: #1b1f24;--text-muted: #6b7480;--text-subtle: #9aa4b2;--accent: #ea580c;--accent-hover: #c2410c;--accent-active: #9a3412;--accent-soft: #fff4ec;--accent-soft-border: #fbd2b6;--accent-text: #c2410c;--accent-ring: rgba(234, 88, 12, .22);--ok: #16a34a;--ok-soft: #e7f6ec;--ok-text: #15803d;--fail: #dc2626;--fail-soft: #fdeaea;--fail-text: #b91c1c;--run: #2563eb;--run-soft: #e9effe;--run-text: #1d4ed8;--warn: #d97706;--warn-soft: #fdf1df;--warn-text: #b45309;--idle: #6b7480;--idle-soft: #f1f4f8;--idle-text: #4b5563;--radius-sm: 6px;--radius: 8px;--radius-lg: 12px;--shadow-sm: 0 1px 2px rgba(16, 24, 40, .05);--shadow: 0 1px 3px rgba(16, 24, 40, .08), 0 1px 2px rgba(16, 24, 40, .04);--shadow-md: 0 6px 18px rgba(16, 24, 40, .1);--sidebar-w: 250px;--topbar-h: 56px}*{box-sizing:border-box}html,body{margin:0;padding:0}body{font-family:var(--font-sans);color:var(--text);background:var(--canvas);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.5}a{color:var(--accent-text);text-decoration:none}a:hover{text-decoration:underline}h1{font-size:22px;font-weight:700;letter-spacing:-.02em}h2{font-size:15px;font-weight:700;letter-spacing:-.01em;margin:0 0 12px}.app{display:grid;grid-template-columns:var(--sidebar-w) 1fr;min-height:100vh}.sidebar{background:var(--surface);border-right:1px solid var(--border);display:flex;flex-direction:column;position:sticky;top:0;height:100vh}.brand{display:flex;align-items:center;gap:10px;height:var(--topbar-h);padding:0 18px;border-bottom:1px solid var(--border)}.brand-mark{width:28px;height:28px;border-radius:8px;background:var(--accent);color:#fff;display:grid;place-items:center;font-weight:700;font-size:14px;box-shadow:var(--shadow-sm)}.brand-name{font-weight:700;letter-spacing:-.02em;font-size:15px}.brand-name span{color:var(--accent-text)}.nav{padding:12px 10px;overflow-y:auto;flex:1}.nav-section{margin:6px 0 16px}.nav-label{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-subtle);padding:0 10px;margin-bottom:6px}.nav-item{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--radius-sm);color:var(--gray-600);font-weight:500;cursor:pointer;text-decoration:none}.nav-item:hover{background:var(--gray-100);color:var(--text);text-decoration:none}.nav-item.active{background:var(--accent-soft);color:var(--accent-text);font-weight:600;box-shadow:inset 0 0 0 1px var(--accent-soft-border)}.nav-item .ic{width:18px;height:18px;flex:none;opacity:.9}.nav-item .count{margin-left:auto;font-size:11px;font-weight:600;color:var(--text-muted);background:var(--gray-100);border-radius:20px;padding:1px 8px}.sidebar-foot{border-top:1px solid var(--border);padding:10px}.user-chip{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:var(--radius-sm)}.avatar{width:30px;height:30px;border-radius:50%;background:var(--gray-200);color:var(--gray-700);display:grid;place-items:center;font-weight:700;font-size:12px;flex:none}.main{display:flex;flex-direction:column;min-width:0}.topbar{height:var(--topbar-h);background:var(--surface);border-bottom:1px solid var(--border);display:flex;align-items:center;gap:14px;padding:0 24px;position:sticky;top:0;z-index:5}.crumbs{display:flex;align-items:center;gap:8px;color:var(--text-muted);font-size:13px}.crumbs .sep{color:var(--gray-300)}.crumbs .here{color:var(--text);font-weight:600}.topbar-spacer{flex:1}.content{padding:24px;max-width:1180px;width:100%}.page-head{display:flex;align-items:flex-start;gap:16px;margin-bottom:20px}.page-title{font-size:22px;font-weight:700;letter-spacing:-.02em;margin:0}.page-sub{color:var(--text-muted);margin:4px 0 0;font-size:13.5px}.page-head .grow{flex:1}.btn{display:inline-flex;align-items:center;gap:8px;justify-content:center;font:inherit;font-weight:600;font-size:13.5px;padding:8px 14px;border-radius:var(--radius);cursor:pointer;border:1px solid transparent;transition:background .12s,border-color .12s,box-shadow .12s}.btn:focus-visible{outline:none;box-shadow:0 0 0 3px var(--accent-ring)}.btn-primary{background:var(--accent);color:#fff}.btn-primary:hover{background:var(--accent-hover)}.btn-primary:active{background:var(--accent-active)}.btn-secondary{background:var(--surface);color:var(--gray-700);border-color:var(--border-strong)}.btn-secondary:hover{background:var(--gray-50);border-color:var(--gray-300)}.btn-ghost{background:transparent;color:var(--gray-600)}.btn-ghost:hover{background:var(--gray-100);color:var(--text)}.btn-danger{background:var(--surface);color:var(--fail-text);border-color:#f3c9c9}.btn-danger:hover{background:var(--fail-soft)}.btn-sm{padding:5px 10px;font-size:12.5px}.btn .ic{width:16px;height:16px}.btn:disabled{opacity:.5;cursor:default}button{display:inline-flex;align-items:center;gap:6px;justify-content:center;font:inherit;font-weight:600;font-size:13.5px;padding:8px 14px;border-radius:var(--radius);cursor:pointer;border:1px solid transparent;background:var(--accent);color:#fff;transition:background .12s,border-color .12s}button:hover{background:var(--accent-hover)}button:disabled{opacity:.5;cursor:default}button.ghost{background:var(--surface);color:var(--gray-700);border-color:var(--border-strong)}button.ghost:hover{background:var(--gray-50)}button.danger{background:var(--surface);color:var(--fail-text);border-color:#f3c9c9}button.danger:hover{background:var(--fail-soft)}.badge{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:600;padding:2px 9px;border-radius:20px;border:1px solid transparent;white-space:nowrap}.badge .dot{width:6px;height:6px;border-radius:50%;background:currentColor}.badge.ok{background:var(--ok-soft);color:var(--ok-text)}.badge.fail,.badge.err{background:var(--fail-soft);color:var(--fail-text)}.badge.run{background:var(--run-soft);color:var(--run-text)}.badge.warn{background:var(--warn-soft);color:var(--warn-text)}.badge.idle{background:var(--idle-soft);color:var(--idle-text)}.badge.neutral{background:var(--gray-100);color:var(--gray-600)}.badge.accent,.badge.on{background:var(--accent-soft);color:var(--accent-text);border-color:var(--accent-soft-border)}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);box-shadow:var(--shadow-sm);padding:18px 20px;margin-bottom:16px}.card.flush{padding:0}.card-pad{padding:18px 20px}.card-head{display:flex;align-items:center;gap:12px;padding:14px 20px;border-bottom:1px solid var(--border)}.card-head h3{margin:0;font-size:14.5px;font-weight:700;letter-spacing:-.01em}.card-head .grow{flex:1}.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;margin-bottom:20px}.stat{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);padding:16px 18px}.stat .k{font-size:12.5px;color:var(--text-muted);font-weight:600}.stat .v{font-size:26px;font-weight:700;letter-spacing:-.02em;margin-top:6px}.stat .v small{font-size:14px;color:var(--text-subtle);font-weight:600}.table-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius-lg);overflow:hidden;box-shadow:var(--shadow-sm)}table,table.tbl{width:100%;border-collapse:collapse;font-size:13.5px}table thead th,table.tbl thead th{text-align:left;font-size:11.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--text-subtle);padding:11px 16px;border-bottom:1px solid var(--border);background:var(--gray-50)}table tbody td,table.tbl tbody td{padding:12px 16px;border-bottom:1px solid var(--gray-100);vertical-align:middle}table tbody tr:last-child td{border-bottom:none}table tbody tr:hover{background:var(--gray-50)}.mono{font-family:var(--font-mono);font-size:12.5px;color:var(--gray-600)}.muted{color:var(--text-muted)}.results{font-variant-numeric:tabular-nums;font-weight:600}.results .p{color:var(--ok-text)}.results .f{color:var(--fail-text)}.results .s{color:var(--text-subtle)}.label{display:block;font-size:12.5px;font-weight:600;color:var(--gray-700);margin-bottom:6px}input,select,textarea,.input,.select,.textarea{font:inherit;color:var(--text);background:var(--surface);border:1px solid var(--border-strong);border-radius:var(--radius);padding:9px 11px;outline:none;transition:border-color .12s,box-shadow .12s}input:focus,select:focus,textarea:focus,.input:focus,.select:focus,.textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-ring)}textarea,.textarea{min-height:76px;resize:vertical;line-height:1.55}input[type=checkbox]{padding:0}.tag{font-size:11.5px;font-weight:600;color:var(--gray-600);background:var(--gray-100);border-radius:6px;padding:2px 8px}.row{display:flex;align-items:center;gap:10px}.col{display:flex;flex-direction:column;gap:4px}.divider{height:1px;background:var(--border);margin:16px 0}.field{margin-bottom:16px}.grid-2{display:grid;grid-template-columns:1fr 1fr;gap:16px}.prio{font-size:11.5px;font-weight:700;letter-spacing:.03em;text-transform:uppercase}.prio.high{color:var(--fail-text)}.prio.medium{color:var(--warn-text)}.prio.low{color:var(--text-subtle)}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--border);margin-bottom:18px}.tab{padding:9px 14px;font-weight:600;font-size:13.5px;color:var(--text-muted);cursor:pointer;border-bottom:2px solid transparent}.tab.active{color:var(--accent-text);border-bottom-color:var(--accent)}.tab:hover{color:var(--text)}.steps{display:flex;flex-direction:column;gap:8px}.step{display:grid;grid-template-columns:28px 90px 1fr auto;align-items:center;gap:12px;border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;background:var(--surface)}.step .n{width:24px;height:24px;border-radius:6px;background:var(--gray-100);color:var(--gray-600);font-weight:700;font-size:12px;display:grid;place-items:center}.step .act{font-family:var(--font-mono);font-size:12px;font-weight:600;color:var(--accent-text)}.step .desc{color:var(--gray-700)}.step.failed{border-color:#f3c9c9;background:var(--fail-soft)}.step.login .act,.step.logout .act{color:var(--run-text)}.spec{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;margin-bottom:12px}.spec .spec-h{display:flex;align-items:center;gap:8px;padding:8px 12px;background:var(--gray-50);border-bottom:1px solid var(--border);font-size:12px;font-weight:700;color:var(--gray-700)}.spec .spec-b{padding:11px 13px;color:var(--gray-700)}.error{color:var(--fail-text);font-size:.9rem}.notice{background:var(--accent-soft);border:1px solid var(--accent-soft-border);border-radius:var(--radius);padding:.6rem .8rem;font-size:.85rem;margin-bottom:.8rem}code.key{background:var(--gray-100);padding:.2rem .4rem;border-radius:4px;font-family:var(--font-mono);font-size:.85rem;word-break:break-all}.pulse-dot{display:inline-block;width:6px;height:6px;border-radius:50%;background:currentColor;margin-right:4px;vertical-align:middle;animation:pulse 1.2s ease-in-out infinite}@keyframes pulse{0%,to{opacity:.3}50%{opacity:1}}.login-wrap{display:grid;place-items:center;min-height:100vh;background:var(--canvas)}.login-box{width:360px}.login-box input{width:100%;margin-bottom:.6rem}.login-box button{width:100%}.markdown-view{font-size:13px;line-height:1.6}.markdown-view h1{font-size:17px;margin:14px 0 8px}.markdown-view h2{font-size:15px;margin:14px 0 6px}.markdown-view h3{font-size:13.5px;margin:12px 0 4px}.markdown-view p{margin:6px 0}.markdown-view table{width:auto;min-width:320px;max-width:100%;margin:6px 0 12px;border:1px solid var(--border);font-size:12.5px}.markdown-view table thead th{padding:7px 12px}.markdown-view table tbody td{padding:6px 12px;font-family:IBM Plex Mono,ui-monospace,monospace;font-size:12px}.markdown-view code{font-family:IBM Plex Mono,ui-monospace,monospace;font-size:12px;background:var(--gray-50);border:1px solid var(--gray-100);border-radius:4px;padding:1px 5px}.markdown-view pre{background:var(--gray-50);border:1px solid var(--border);border-radius:6px;padding:10px;overflow-x:auto}.markdown-view pre code{background:none;border:none;padding:0}.markdown-view ul,.markdown-view ol{padding-left:20px;margin:6px 0}
