:root{--bg: #FFFFFF;--surface: #FFFFFF;--surface-2: #F4F4F4;--ink: #111111;--ink-muted: #5C5C5C;--ink-faint: #8C8C8C;--line: #E2E2E2;--line-strong: #C7C7C7;--accent: #FFC016;--accent-strong: #DDA300;--accent-ink: #111111;--accent-bg: #FFF6DE;--critical: #B23A2E;--critical-bg: #FBEAE7;--warn: #9A6B0A;--warn-bg: #FBF3DD;--ok: #1F7A4D;--ok-bg: #E5F3EA;--info: #2E6C8E;--info-bg: #E7F1F5;--font-ui: "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, "SF Mono", Consolas, monospace;--radius: 3px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .06);--shadow-md: 0 4px 16px rgba(0, 0, 0, .12)}*{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font-ui);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}h1,h2,h3,h4{font-family:var(--font-ui);font-weight:600;margin:0;letter-spacing:-.01em}code,.mono{font-family:var(--font-mono)}a{color:var(--accent-strong)}button{font-family:var(--font-ui)}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}@media (prefers-reduced-motion: reduce){*{animation-duration:.001ms!important;transition-duration:.001ms!important}}.app-shell{display:flex;min-height:100vh}.sidebar{width:232px;flex-shrink:0;background:var(--ink);color:#e7e9e8;display:flex;flex-direction:column;padding:20px 0}.sidebar-brand{padding:0 20px 20px;border-bottom:1px solid rgba(255,255,255,.1);margin-bottom:12px}.sidebar-brand .name{font-weight:700;font-size:15px;letter-spacing:-.01em}.sidebar-brand .tagline{font-family:var(--font-mono);font-size:10.5px;text-transform:uppercase;letter-spacing:.08em;color:#9aa3a0;margin-top:8px}.sidebar-section-label{font-family:var(--font-mono);font-size:10px;text-transform:uppercase;letter-spacing:.1em;color:#7c8683;padding:14px 20px 6px}.sidebar-link{display:block;padding:8px 20px;color:#c7cdcb;text-decoration:none;font-size:13.5px;border-left:3px solid transparent}.sidebar-link:hover{background:#ffffff0d;color:#fff}.sidebar-link.active{color:#fff;border-left-color:var(--accent);background:#ffffff0f;font-weight:500}.sidebar-footer{margin-top:auto;padding:12px 20px 0;border-top:1px solid rgba(255,255,255,.1)}.sidebar-user{font-size:12.5px;color:#c7cdcb;margin-bottom:8px}.sidebar-user .role-pill{display:inline-block;margin-top:3px}.main-area{flex:1;min-width:0;display:flex;flex-direction:column}.topbar{height:56px;flex-shrink:0;background:var(--surface);border-bottom:1px solid var(--line);display:flex;align-items:center;padding:0 24px;justify-content:space-between}.topbar h1{font-size:16px}.content{padding:28px 32px;flex:1}.page-header{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:20px;gap:16px;flex-wrap:wrap}.page-header p{color:var(--ink-muted);margin:4px 0 0;max-width:60ch}.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--radius);box-shadow:var(--shadow-sm)}.card+.card{margin-top:16px}.card-header{padding:14px 18px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:12px}.card-header h2{font-size:14px}.card-body{padding:18px}table{width:100%;border-collapse:collapse;font-size:13px}th{text-align:left;font-family:var(--font-mono);font-size:10.5px;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-faint);font-weight:600;padding:0 12px 8px;border-bottom:1px solid var(--line)}td{padding:10px 12px;border-bottom:1px solid var(--line);vertical-align:middle}tbody tr:hover{background:var(--surface-2)}tbody tr:last-child td{border-bottom:none}.table-empty{padding:32px 12px;text-align:center;color:var(--ink-muted)}.btn{font-size:13px;font-weight:500;padding:7px 14px;border-radius:var(--radius);border:1px solid var(--line-strong);background:var(--surface);color:var(--ink);cursor:pointer;display:inline-flex;align-items:center;gap:6px}.btn:hover{background:var(--surface-2)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn-primary{background:var(--ink);color:#fff;border-color:var(--ink)}.btn-primary:hover{background:#2a2a2a}.btn-accent{background:var(--accent);color:var(--accent-ink);border-color:var(--accent-strong);font-weight:600}.btn-accent:hover{background:var(--accent-strong);color:#fff}.btn-danger{color:var(--critical);border-color:var(--critical);background:var(--surface)}.btn-danger:hover{background:var(--critical-bg)}.btn-sm{padding:4px 10px;font-size:12px}.field{margin-bottom:14px}.field label{display:block;font-size:12.5px;font-weight:500;margin-bottom:5px;color:var(--ink)}.field .hint{font-size:11.5px;color:var(--ink-muted);margin-top:4px}input,select,textarea{width:100%;font-family:var(--font-ui);font-size:13.5px;padding:8px 10px;border:1px solid var(--line-strong);border-radius:var(--radius);background:var(--surface);color:var(--ink)}input:focus,select:focus,textarea:focus{border-color:var(--accent)}input[type=checkbox]{width:auto}textarea{font-family:var(--font-mono);resize:vertical;min-height:70px}.checkbox-row{display:flex;align-items:center;gap:8px}.checkbox-row label{margin:0}.badge{display:inline-flex;align-items:center;gap:5px;font-family:var(--font-mono);font-size:10.5px;text-transform:uppercase;letter-spacing:.04em;font-weight:600;padding:2px 8px;border-radius:3px}.badge-ok{color:var(--ok);background:var(--ok-bg)}.badge-warn{color:var(--warn);background:var(--warn-bg)}.badge-critical{color:var(--critical);background:var(--critical-bg)}.badge-info{color:var(--info);background:var(--info-bg)}.badge-neutral{color:var(--ink-muted);background:var(--surface-2)}.status-dot{display:inline-block;width:8px;height:8px;border-radius:50%;position:relative;flex-shrink:0}.status-dot.live{background:var(--ok)}.status-dot.live:after{content:"";position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:50%;border:1px solid var(--ok);animation:pulse-ring 2s ease-out infinite}.status-dot.stale{background:var(--warn)}.status-dot.offline{background:var(--critical)}.status-dot.unknown{background:var(--ink-faint)}@keyframes pulse-ring{0%{transform:scale(.8);opacity:.8}to{transform:scale(1.8);opacity:0}}.mono{font-family:var(--font-mono);font-size:12.5px}.text-muted{color:var(--ink-muted)}.text-faint{color:var(--ink-faint)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#11111180;display:flex;align-items:flex-start;justify-content:center;padding:8vh 20px;z-index:100;overflow-y:auto}.modal{background:var(--surface);border-radius:var(--radius);border:1px solid var(--line);box-shadow:var(--shadow-md);width:100%;max-width:520px}.modal-header{padding:16px 20px;border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between}.modal-header h3{font-size:15px}.modal-body{padding:20px}.modal-footer{padding:14px 20px;border-top:1px solid var(--line);display:flex;justify-content:flex-end;gap:8px}.modal-close{background:none;border:none;font-size:18px;cursor:pointer;color:var(--ink-muted);line-height:1}.alert-banner{padding:10px 14px;border-radius:var(--radius);font-size:13px;margin-bottom:16px;border:1px solid transparent}.alert-banner.error{background:var(--critical-bg);color:var(--critical);border-color:var(--critical)}.alert-banner.success{background:var(--ok-bg);color:var(--ok);border-color:var(--ok)}.empty-state{padding:48px 24px;text-align:center;color:var(--ink-muted)}.empty-state h3{color:var(--ink);margin-bottom:6px;font-size:14px}.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:18px}.tab{padding:8px 14px;font-size:13px;font-weight:500;color:var(--ink-muted);cursor:pointer;border-bottom:2px solid transparent;background:none;border-top:none;border-left:none;border-right:none}.tab.active{color:var(--ink);border-bottom-color:var(--accent)}.login-shell{min-height:100vh;display:flex;align-items:center;justify-content:center;background:var(--ink)}.login-card{width:380px;background:var(--surface);border-radius:var(--radius);box-shadow:var(--shadow-md);padding:32px}.login-brand{text-align:center;margin-bottom:24px}.login-brand .name{font-size:18px;font-weight:700}.login-brand .tagline{font-family:var(--font-mono);font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--ink-muted);margin-top:4px}
