@import "https://fonts.googleapis.com/css2?family=IBM+Plex+Sans:wght@400;500;600;700&family=IBM+Plex+Mono:wght@400;500&display=swap";:root,[data-theme=dark]{--bg-0:#0b1118;--bg-1:#111923;--bg-2:#162131;--bg-3:#1c2a3d;--border:#2a3b52;--border-strong:#3a516e;--text:#e8eef6;--text-muted:#8fa3bb;--text-faint:#6a7f98;--accent:#14b8a6;--accent-2:#22d3ee;--accent-soft:#14b8a624;--danger:#f87171;--warning:#fbbf24;--ok:#34d399;--critical:#ef4444;--high:#f97316;--medium:#eab308;--low:#22c55e;--shadow:0 8px 28px #00000059;--sidebar-w:248px;--header-h:52px;--radius:6px;--font:"IBM Plex Sans", "Segoe UI", sans-serif;--mono:"IBM Plex Mono", ui-monospace, monospace;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=light]{--bg-0:#f3f6fa;--bg-1:#fff;--bg-2:#eef3f8;--bg-3:#e4ebf3;--border:#c9d5e3;--border-strong:#a8bbd0;--text:#132033;--text-muted:#4d6178;--text-faint:#6d8198;--accent:#0f766e;--accent-2:#0891b2;--accent-soft:#0f766e1a;--danger:#dc2626;--warning:#d97706;--ok:#059669;--critical:#dc2626;--high:#ea580c;--medium:#ca8a04;--low:#16a34a;--shadow:0 8px 24px #13203314;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*,:before,:after{box-sizing:border-box}html,body,#root{height:100%;margin:0}body{font-family:var(--font);background:radial-gradient(1200px 500px at 10% -10%, #14b8a614, transparent 55%), radial-gradient(900px 420px at 100% 0%, #22d3ee0f, transparent 50%), var(--bg-0);color:var(--text);-webkit-font-smoothing:antialiased;font-size:13.5px;line-height:1.45}a{color:var(--accent-2);text-decoration:none}button,input,select,textarea{font:inherit;color:inherit}button{cursor:pointer}h1,h2,h3,h4{letter-spacing:-.01em;margin:0;font-weight:600}.mono{font-family:var(--mono)}.app-shell{grid-template-columns:var(--sidebar-w) 1fr;min-height:100%;display:grid}.sidebar{background:linear-gradient(180deg, var(--bg-1), var(--bg-2));border-right:1px solid var(--border);flex-direction:column;gap:8px;height:100vh;padding:14px 10px 24px;display:flex;position:sticky;top:0;overflow:auto}.brand{border-bottom:1px solid var(--border);align-items:center;gap:10px;margin-bottom:6px;padding:8px 10px 14px;display:flex}.brand-logo{object-fit:contain;flex-shrink:0;width:36px;height:36px}.brand-name{letter-spacing:.04em;color:var(--text);font-size:15px;font-weight:700}.brand-sub{color:var(--text-muted);margin-top:4px;font-size:11px;line-height:1.35}.nav-group{text-transform:uppercase;letter-spacing:.08em;color:var(--text-faint);margin-top:10px;padding:0 10px 4px;font-size:10px}.nav-link{border-radius:var(--radius);color:var(--text-muted);border:1px solid #0000;align-items:center;gap:8px;padding:7px 10px;display:flex}.nav-link:hover{background:var(--bg-3);color:var(--text)}.nav-link.active{background:var(--accent-soft);color:var(--accent-2);border-color:color-mix(in srgb, var(--accent) 35%, transparent)}.main{flex-direction:column;min-width:0;display:flex}.topbar{z-index:20;height:var(--header-h);background:color-mix(in srgb, var(--bg-1) 88%, transparent);-webkit-backdrop-filter:blur(10px);backdrop-filter:blur(10px);border-bottom:1px solid var(--border);align-items:center;gap:10px;padding:0 16px;display:flex;position:sticky;top:0}.content{flex-direction:column;gap:14px;padding:16px;display:flex}.page-title{flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:12px;display:flex}.page-title h1{font-size:20px}.page-title p{color:var(--text-muted);margin:4px 0 0;font-size:12.5px}.panel{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow)}.panel-hd{border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;gap:8px;padding:10px 12px;display:flex}.panel-bd{padding:12px}.kpi-grid{grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:10px;display:grid}.kpi{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius);min-height:78px;padding:12px}.kpi .label{color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;font-size:11px}.kpi .value{font-variant-numeric:tabular-nums;margin-top:8px;font-size:22px;font-weight:700}.kpi.critical .value{color:var(--critical)}.kpi.high .value{color:var(--high)}.kpi.warn .value{color:var(--warning)}.kpi.accent .value{color:var(--accent-2)}.grid-2{grid-template-columns:1.2fr 1fr;gap:12px;display:grid}.grid-3{grid-template-columns:repeat(3,1fr);gap:12px;display:grid}.toolbar{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.field{flex-direction:column;gap:4px;min-width:0;display:flex}.field label{color:var(--text-muted);font-size:11px}.input,.select,.textarea{background:var(--bg-2);border:1px solid var(--border);border-radius:var(--radius);outline:none;min-width:0;padding:7px 10px}.input:focus,.select:focus,.textarea:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}.btn{border-radius:var(--radius);border:1px solid var(--border-strong);background:var(--bg-2);color:var(--text);white-space:nowrap;justify-content:center;align-items:center;gap:6px;padding:7px 12px;display:inline-flex}.btn:hover{background:var(--bg-3)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn-primary{background:linear-gradient(180deg, color-mix(in srgb, var(--accent) 88%, #fff), var(--accent));border-color:color-mix(in srgb, var(--accent) 70%, #000);color:#042f2e;font-weight:600}[data-theme=light] .btn-primary{color:#fff}.btn-danger{border-color:color-mix(in srgb, var(--danger) 50%, var(--border));color:var(--danger)}.btn-ghost{background:0 0}.badge{border:1px solid var(--border);background:var(--bg-2);border-radius:4px;align-items:center;padding:2px 7px;font-size:11px;font-weight:600;display:inline-flex}.badge.critical{color:var(--critical);border-color:color-mix(in srgb, var(--critical) 40%, var(--border));background:color-mix(in srgb, var(--critical) 12%, transparent)}.badge.high{color:var(--high);border-color:color-mix(in srgb, var(--high) 40%, var(--border));background:color-mix(in srgb, var(--high) 12%, transparent)}.badge.medium{color:var(--medium);border-color:color-mix(in srgb, var(--medium) 40%, var(--border));background:color-mix(in srgb, var(--medium) 12%, transparent)}.badge.low{color:var(--low);border-color:color-mix(in srgb, var(--low) 40%, var(--border));background:color-mix(in srgb, var(--low) 12%, transparent)}.badge.ok{color:var(--ok)}.badge.warn{color:var(--warning)}.badge.danger{color:var(--danger)}.table-wrap{overflow:auto}table.data{border-collapse:collapse;width:100%;font-size:12.5px}table.data th,table.data td{border-bottom:1px solid var(--border);text-align:left;vertical-align:middle;padding:8px 10px}table.data th{text-transform:uppercase;letter-spacing:.04em;color:var(--text-muted);background:var(--bg-2);z-index:1;font-size:11px;position:sticky;top:0}table.data tbody tr{cursor:pointer}table.data tbody tr:hover{background:var(--accent-soft)}table.data tbody tr.selected{background:color-mix(in srgb, var(--accent) 18%, transparent)}.muted{color:var(--text-muted)}.error-banner{border:1px solid color-mix(in srgb, var(--danger) 45%, var(--border));background:color-mix(in srgb, var(--danger) 12%, transparent);color:var(--danger);border-radius:var(--radius);padding:10px 12px}.empty{text-align:center;color:var(--text-muted);padding:28px 12px}.bulk-bar{background:var(--accent-soft);border:1px solid color-mix(in srgb, var(--accent) 35%, var(--border));border-radius:var(--radius);flex-wrap:wrap;align-items:center;gap:8px;padding:8px 12px;display:flex}.login-page{background:radial-gradient(800px 400px at 20% 0%, #14b8a629, transparent 55%), radial-gradient(700px 360px at 90% 20%, #22d3ee1a, transparent 50%), var(--bg-0);place-items:center;min-height:100%;padding:24px;display:grid}.login-card{background:var(--bg-1);border:1px solid var(--border);width:min(420px,100%);box-shadow:var(--shadow);border-radius:10px;padding:28px 24px}.login-card h1{letter-spacing:.06em;font-size:22px}.login-brand{align-items:center;gap:14px;display:flex}.login-logo{object-fit:contain;width:56px;height:56px}.login-card .sub{color:var(--text-muted);margin:6px 0 0;font-size:12.5px}.report-json{white-space:pre-wrap;background:var(--bg-2);border-radius:6px;max-height:420px;margin:0;padding:12px;font-size:11px;overflow:auto}.stack{flex-direction:column;gap:12px;display:flex}.search-box{flex:1;max-width:420px;position:relative}.search-results{background:var(--bg-1);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);z-index:40;max-height:320px;position:absolute;top:calc(100% + 4px);left:0;right:0;overflow:auto}.search-item{text-align:left;border:0;border-bottom:1px solid var(--border);background:0 0;width:100%;padding:8px 10px;display:block}.search-item:hover{background:var(--accent-soft)}.palette-overlay{z-index:100;background:#00000073;place-items:start center;padding-top:12vh;display:grid;position:fixed;inset:0}.palette{background:var(--bg-1);border:1px solid var(--border-strong);width:min(560px,100% - 24px);box-shadow:var(--shadow);border-radius:10px;overflow:hidden}.palette input{border:0;border-bottom:1px solid var(--border);background:var(--bg-2);outline:none;width:100%;padding:14px 16px}.palette-list{max-height:360px;overflow:auto}.palette-item{text-align:left;border:0;border-bottom:1px solid var(--border);background:0 0;justify-content:space-between;gap:12px;width:100%;padding:10px 14px;display:flex}.palette-item.active,.palette-item:hover{background:var(--accent-soft)}.chips{flex-wrap:wrap;gap:6px;display:flex}.detail-grid{grid-template-columns:1.4fr 1fr;gap:12px;display:grid}.factor{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-2);padding:10px}.factor+.factor{margin-top:8px}.tabs{border-bottom:1px solid var(--border);flex-wrap:wrap;gap:4px;padding:0 8px;display:flex}.tab{color:var(--text-muted);background:0 0;border:0;border-bottom:2px solid #0000;padding:10px 12px}.tab.active{color:var(--accent-2);border-bottom-color:var(--accent)}.pager{border-top:1px solid var(--border);justify-content:space-between;align-items:center;gap:8px;padding:10px 12px;display:flex}@media (width<=1100px){.grid-2,.grid-3,.detail-grid{grid-template-columns:1fr}}@media (width<=900px){.app-shell{grid-template-columns:1fr}.sidebar{height:auto;max-height:none;position:relative}}
