nyx-scanner 0.6.1

A multi-language static analysis tool for detecting security vulnerabilities
Documentation
1
2
:root{--bg:#fff;--bg-secondary:#f7f7f8;--bg-tertiary:#ebebef;--text:#1a1a1a;--text-secondary:#5a5a64;--text-tertiary:#6e6e7a;--border:#e5e5ea;--border-light:#f0f0f4;--accent:#5856d6;--accent-light:#ededfc;--sev-high:#e74c3c;--sev-high-bg:#fdf0ef;--sev-medium:#e67e22;--sev-medium-bg:#fef6ed;--sev-low:#3498db;--sev-low-bg:#edf5fc;--success:#2ecc71;--success-bg:#edfcf2;--shadow:0 1px 3px #0000000f;--shadow-lg:0 4px 12px #00000014;--radius:8px;--radius-sm:4px;--radius-lg:12px;--font:-apple-system, BlinkMacSystemFont, "Segoe UI", "Inter", system-ui, sans-serif;--font-mono:"SF Mono", "Fira Code", "Cascadia Code", monospace;--space-1:4px;--space-2:8px;--space-3:12px;--space-4:16px;--space-5:20px;--space-6:24px;--space-7:32px;--space-8:48px;--text-xs:.75rem;--text-sm:.8125rem;--text-base:.875rem;--text-lg:1rem;--text-xl:1.125rem;--text-2xl:1.375rem;--weight-normal:400;--weight-medium:500;--weight-semibold:600;--weight-bold:700;--conf-high:#2ecc71;--conf-high-bg:#edfcf2;--conf-medium:#e67e22;--conf-medium-bg:#fef6ed;--conf-low:#95a5a6;--conf-low-bg:#f5f5f5;--shadow-sm:0 1px 2px #0000000a;--shadow-md:0 2px 8px #0000000f;--shadow-xl:0 8px 24px #0000001a;--transition-fast:.1s ease;--transition-base:.15s ease;--sidebar-width:240px;--header-height:40px;--explorer-header-height:96px}*,:before,:after{box-sizing:border-box;margin:0;padding:0}html{font-size:14px}body{font-family:var(--font);background:var(--bg);color:var(--text);-webkit-font-smoothing:antialiased;line-height:1.5}a{color:var(--accent);text-decoration:none}a:hover{text-decoration:underline}#app{min-height:100vh;display:flex}.sidebar{width:var(--sidebar-width);background:var(--bg-secondary);border-right:1px solid var(--border);z-index:10;flex-direction:column;display:flex;position:fixed;top:0;bottom:0;left:0}.main-panel{margin-left:var(--sidebar-width);flex-direction:column;flex:1;min-height:100vh;display:flex}.sidebar-header{height:var(--header-height);align-items:baseline;gap:var(--space-2);border-bottom:1px solid var(--border);padding:0 16px;display:flex}.logo{color:var(--accent);letter-spacing:-.5px;font-size:1.4rem;font-weight:700}.version{font-size:var(--text-xs);color:var(--text-tertiary)}.nav-list{padding:var(--space-2);flex:1;list-style:none}.nav-link{align-items:center;gap:var(--space-3);border-radius:var(--radius-sm);color:var(--text-secondary);font-size:var(--text-base);font-weight:var(--weight-medium);transition:background var(--transition-base), color var(--transition-base);padding:8px 12px;display:flex}.nav-link:hover{background:var(--bg-tertiary);color:var(--text);text-decoration:none}.nav-link.active{background:var(--accent-light);color:var(--accent)}.nav-icon{flex-shrink:0;align-items:center;width:18px;height:18px;display:flex}.nav-icon svg{width:18px;height:18px}.nav-separator{background:var(--border);height:1px;margin:var(--space-2) var(--space-3)}.content{padding:var(--space-6) var(--space-7);flex:1;max-width:1200px}.sidebar-footer{border-top:1px solid var(--border);padding:var(--space-2)}.sidebar-meta{padding:var(--space-3) var(--space-4);border-top:1px solid var(--border)}.sidebar-meta-item{align-items:center;gap:var(--space-2);font-size:var(--text-xs);color:var(--text-tertiary);margin-bottom:var(--space-1);text-overflow:ellipsis;white-space:nowrap;display:flex;overflow:hidden}.sidebar-meta-item svg{flex-shrink:0;width:14px;height:14px}.scan-indicator{align-items:center;gap:var(--space-2);font-size:var(--text-xs);color:var(--sev-medium);margin-top:var(--space-1);display:none}.scan-indicator.visible{display:flex}.header-bar{height:var(--header-height);padding:0 var(--space-7);border-bottom:1px solid var(--border);background:var(--bg);z-index:5;justify-content:space-between;align-items:center;display:flex;position:sticky;top:0}.header-left{align-items:center;gap:var(--space-2);min-width:0;display:flex}.header-right{align-items:center;gap:var(--space-2);flex-shrink:0;display:flex}.header-right .btn{height:26px;padding:0 10px;font-size:.8rem;line-height:1}.breadcrumbs{align-items:center;gap:var(--space-1);font-size:var(--text-sm);min-width:0;display:flex}.breadcrumb-link{color:var(--text-tertiary);white-space:nowrap}.breadcrumb-link:hover{color:var(--accent);text-decoration:none}.breadcrumb-sep{color:var(--text-tertiary);font-size:var(--text-xs);-webkit-user-select:none;user-select:none;margin:0 var(--space-2)}.breadcrumb-current{color:var(--text);font-weight:var(--weight-medium);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.header-search-input{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg-secondary);width:200px;color:var(--text-tertiary);font-family:var(--font);font-size:var(--text-sm);padding:6px 10px}.header-search-input:disabled{cursor:not-allowed;opacity:.6}.split-pane{height:100%;display:flex}.pane{flex:1;overflow:auto}.pane-resizer{background:var(--border);cursor:col-resize;flex-shrink:0;width:4px}.pane-resizer:hover{background:var(--accent)}.tabs{border-bottom:1px solid var(--border);margin-bottom:var(--space-4);gap:0;display:flex}.tab{padding:var(--space-2) var(--space-4);font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--text-secondary);cursor:pointer;transition:color var(--transition-base), border-color var(--transition-base);font-family:var(--font);background:0 0;border:none;border-bottom:2px solid #0000}.tab:hover{color:var(--text)}.tab.active{color:var(--accent);border-bottom-color:var(--accent)}.card{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:20px}.card-header{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.5px;margin-bottom:8px;font-size:.85rem;font-weight:600}.card-value{font-size:2rem;font-weight:700}.card-grid{grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:16px;margin-bottom:24px;display:grid}.badge{text-transform:uppercase;letter-spacing:.3px;border-radius:20px;padding:2px 8px;font-size:.75rem;font-weight:600;display:inline-block}.badge-high{background:var(--sev-high-bg);color:var(--sev-high)}.badge-medium{background:var(--sev-medium-bg);color:var(--sev-medium)}.badge-low{background:var(--sev-low-bg);color:var(--sev-low)}.badge-success{background:var(--success-bg);color:var(--success)}.table-wrap{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);overflow:hidden}table{border-collapse:collapse;width:100%}th{text-align:left;color:var(--text-secondary);text-transform:uppercase;letter-spacing:.3px;background:var(--bg-secondary);border-bottom:1px solid var(--border);padding:10px 16px;font-size:.8rem;font-weight:600}td{border-bottom:1px solid var(--border-light);padding:10px 16px;font-size:.9rem}tr:last-child td{border-bottom:none}tr:hover td{background:var(--bg-secondary)}.clickable{cursor:pointer}.btn{border-radius:var(--radius-sm);border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;transition:background var(--transition-base), border-color var(--transition-base);align-items:center;gap:6px;padding:8px 16px;font-size:.85rem;font-weight:500;display:inline-flex}.btn:hover{background:var(--bg-secondary);border-color:var(--text-tertiary)}.btn:disabled{opacity:.5;cursor:not-allowed}.btn:disabled:hover{background:var(--bg);border-color:var(--border)}.btn-primary{background:var(--accent);color:#fff;border-color:var(--accent)}.btn-primary:hover{opacity:.9;background:var(--accent)}.btn-primary:disabled:hover{opacity:.5;background:var(--accent)}.btn-danger{color:var(--sev-high);border-color:var(--sev-high)}.btn-sm{padding:4px 10px;font-size:.8rem}.form-group{margin-bottom:16px}.form-group label{color:var(--text-secondary);margin-bottom:4px;font-size:.8rem;font-weight:600;display:block}input,select{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);width:100%;color:var(--text);font-family:var(--font);padding:8px 12px;font-size:.9rem}input:focus,select:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-light);outline:none}input.input-error,select.input-error{border-color:var(--sev-high);box-shadow:0 0 0 2px var(--sev-high-bg)}.search-input{max-width:320px}.filter-bar{flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:16px;display:flex}.filter-bar select,.filter-bar input{width:auto;min-width:140px}.code-block{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);font-family:var(--font-mono);font-size:.82rem;line-height:1.6;overflow-x:auto}.code-line{padding:0 16px;display:flex}.code-line.highlight{background:var(--sev-high-bg)}.line-number{color:var(--text-tertiary);text-align:right;-webkit-user-select:none;user-select:none;min-width:40px;padding-right:16px}.line-content{white-space:pre}.detail-header{margin-bottom:24px}.detail-header h2{margin-bottom:4px;font-size:1.1rem;font-weight:600}.detail-meta{color:var(--text-secondary);align-items:center;gap:12px;font-size:.85rem;display:flex}.detail-section{margin-bottom:24px}.detail-section h3{color:var(--text-secondary);text-transform:uppercase;letter-spacing:.3px;margin-bottom:8px;font-size:.85rem;font-weight:600}.label-list{flex-wrap:wrap;gap:8px;display:flex}.label-item{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:4px 10px;font-size:.82rem}.label-key{color:var(--text-secondary);font-weight:600}.label-value{color:var(--text)}.page-header{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.page-header h2{font-size:1.3rem;font-weight:600}.loading,.empty-state,.error-state{color:var(--text-tertiary);text-align:center;flex-direction:column;justify-content:center;align-items:center;padding:60px 20px;display:flex}.empty-state h3{color:var(--text-secondary);margin-bottom:8px;font-size:1.1rem}.status-dot{border-radius:50%;width:8px;height:8px;margin-right:6px;display:inline-block}.status-dot.running{background:var(--sev-medium);animation:1.5s infinite pulse}.status-dot.completed{background:var(--success)}.status-dot.failed{background:var(--sev-high)}@keyframes pulse{0%,to{opacity:1}50%{opacity:.4}}th.sortable{cursor:pointer;-webkit-user-select:none;user-select:none;transition:color var(--transition-base)}th.sortable:hover,th.sortable.active{color:var(--accent)}th.sortable .sort-arrow{font-size:var(--text-xs);margin-left:4px}tbody tr:nth-child(2n) td{background:var(--bg-secondary)}tbody tr:hover td{background:var(--bg-tertiary)}.col-checkbox{text-align:center;width:40px}.col-checkbox input[type=checkbox]{cursor:pointer;width:auto;min-width:auto}tr.selected td{background:var(--accent-light)}.badge-conf-high{background:var(--conf-high-bg);color:var(--conf-high)}.badge-conf-medium{background:var(--conf-medium-bg);color:var(--conf-medium)}.badge-conf-low{background:var(--conf-low-bg);color:var(--conf-low)}.badge-status-open{background:var(--sev-high-bg);color:var(--sev-high)}.badge-status-validated{background:var(--conf-high-bg);color:var(--conf-high)}.badge-status-suppressed{background:var(--conf-low-bg);color:var(--conf-low)}.badge-triage-open{background:var(--sev-high-bg);color:var(--sev-high)}.badge-triage-investigating{background:var(--sev-medium-bg);color:var(--sev-medium)}.badge-triage-false_positive{color:#666;background:#eee}.badge-triage-accepted_risk{background:var(--sev-medium-bg);color:var(--sev-medium)}.badge-triage-suppressed{background:var(--conf-low-bg);color:var(--conf-low)}.badge-triage-fixed{background:var(--success-bg);color:var(--success)}.triage-actions{margin:var(--space-4) 0;padding:var(--space-4);background:var(--bg-secondary);border-radius:var(--radius);border:1px solid var(--border)}.triage-current-note{margin-bottom:var(--space-3);font-size:var(--text-sm);color:var(--text-secondary)}.triage-buttons{gap:var(--space-2);flex-wrap:wrap;display:flex}.btn-triage{text-transform:capitalize;font-size:var(--text-xs)}.btn-triage-investigating{border-color:var(--sev-medium);color:var(--sev-medium)}.btn-triage-false_positive{color:#666;border-color:#999}.btn-triage-accepted_risk{border-color:var(--sev-medium);color:var(--sev-medium)}.btn-triage-suppressed{border-color:var(--conf-low);color:var(--conf-low)}.btn-triage-fixed{border-color:var(--success);color:var(--success)}.btn-triage-open{border-color:var(--sev-high);color:var(--sev-high)}.triage-note-input{margin-top:var(--space-3)}.triage-note-input textarea{width:100%;padding:var(--space-2);border:1px solid var(--border);border-radius:var(--radius-sm);font-family:inherit;font-size:var(--text-sm);resize:vertical;background:var(--bg);color:var(--text)}.triage-note-input textarea:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-light);outline:none}.triage-note-actions{gap:var(--space-2);margin-top:var(--space-2);display:flex}.triage-page{max-width:1400px}.triage-hero{margin-bottom:var(--space-5);padding-bottom:var(--space-4);border-bottom:1px solid var(--border)}.triage-hero-row{justify-content:space-between;align-items:baseline;gap:var(--space-4);margin-bottom:var(--space-3);flex-wrap:wrap;display:flex}.triage-hero-title{color:var(--text);letter-spacing:-.01em;margin:0;font-size:1.5rem;font-weight:600;line-height:1.2}.triage-hero-toggle{color:var(--text-secondary);font-size:var(--text-sm);cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:none;align-items:center;gap:4px;padding:4px 6px;display:inline-flex}.triage-hero-toggle:hover{color:var(--text);background:var(--bg-secondary)}.triage-caret{font-size:.7rem;line-height:1;transition:transform .12s ease-out;display:inline-block}.triage-caret.open{transform:rotate(-180deg)}.triage-hero-severity{align-items:center;gap:var(--space-5);font-size:var(--text-sm);color:var(--text-secondary);display:flex}.triage-sev-stat{align-items:baseline;gap:6px;display:inline-flex}.triage-sev-dot{border-radius:50%;align-self:center;width:8px;height:8px;display:inline-block}.triage-sev-high .triage-sev-dot{background:var(--sev-high)}.triage-sev-medium .triage-sev-dot{background:var(--sev-medium)}.triage-sev-low .triage-sev-dot{background:var(--sev-low)}.triage-sev-count{font-size:var(--text-base);color:var(--text);font-variant-numeric:tabular-nums;font-weight:600}.triage-sev-name{text-transform:uppercase;letter-spacing:.04em;font-size:var(--text-xs);font-weight:500}.triage-state-row{gap:var(--space-2);margin-top:var(--space-4);flex-wrap:wrap;display:flex}.triage-state-chip{border:1px solid var(--border);background:var(--bg);cursor:pointer;font-size:var(--text-xs);color:var(--text-secondary);transition:border-color var(--transition-base), background var(--transition-base);border-radius:999px;align-items:center;gap:6px;padding:4px 10px;display:inline-flex}.triage-state-chip:hover{border-color:var(--text-tertiary);color:var(--text)}.triage-state-chip.active{background:var(--accent-light);color:var(--accent);border-color:var(--accent)}.triage-state-chip.muted{opacity:.55}.triage-state-chip .triage-state-count{font-variant-numeric:tabular-nums;color:var(--text);font-weight:600}.triage-state-chip.active .triage-state-count{color:var(--accent)}.triage-state-chip .triage-state-label{text-transform:capitalize}.triage-tabs-row{border-bottom:1px solid var(--border);margin-bottom:var(--space-4);justify-content:space-between;align-items:flex-end;gap:var(--space-4);flex-wrap:wrap;display:flex}.triage-tabs{gap:var(--space-1);padding-bottom:0;display:flex}.triage-tab{padding:var(--space-2) var(--space-4);cursor:pointer;font-size:var(--text-sm);color:var(--text-secondary);background:0 0;border:none;border-bottom:2px solid #0000;align-items:center;gap:6px;margin-bottom:-1px;font-weight:500;transition:color .15s,border-color .15s;display:inline-flex}.triage-tab:hover{color:var(--text)}.triage-tab.active{color:var(--text);border-bottom-color:var(--accent)}.triage-tab.empty{color:var(--text-tertiary)}.triage-tab.empty:hover{color:var(--text-secondary)}.triage-tab-count{font-size:var(--text-xs);background:var(--bg-tertiary);color:var(--text-secondary);font-variant-numeric:tabular-nums;border-radius:999px;padding:1px 6px}.triage-tab.active .triage-tab-count{background:var(--accent-light);color:var(--accent)}.triage-controls{align-items:center;gap:var(--space-2);margin-bottom:var(--space-3);flex-wrap:wrap;display:flex}.triage-control-btn{align-items:center;gap:6px;display:inline-flex}.triage-control-btn strong{color:var(--text);font-weight:600}.triage-search{min-width:200px;max-width:360px;font-size:var(--text-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);color:var(--text);flex:1;padding:6px 10px}.triage-search:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-light);outline:none}.triage-result-count{font-size:var(--text-xs);color:var(--text-secondary);font-variant-numeric:tabular-nums;margin-left:auto}.triage-rule-filter{align-items:center;gap:var(--space-2);margin-bottom:var(--space-3);font-size:var(--text-sm);flex-wrap:wrap;display:flex}.triage-rule-filter-label{color:var(--text-secondary);font-weight:500}.rule-chip{border:1px solid var(--border);background:var(--bg);color:var(--text);cursor:pointer;font-size:var(--text-xs);font-family:var(--font-mono);transition:border-color var(--transition-base), background var(--transition-base);border-radius:999px;align-items:center;gap:6px;padding:3px 10px;display:inline-flex}.rule-chip:hover{border-color:var(--text-tertiary);background:var(--bg-secondary)}.rule-chip.active{background:var(--accent-light);border-color:var(--accent);color:var(--accent)}.rule-chip-count{background:var(--bg-tertiary);color:var(--text-secondary);font-family:var(--font);font-variant-numeric:tabular-nums;border-radius:999px;padding:0 6px;font-weight:600}.rule-chip.active .rule-chip-count{background:var(--bg);color:var(--accent)}.rule-chip-x{opacity:.8;font-size:.9rem;line-height:1}.triage-rule-more,.triage-rule-clear{color:var(--text-secondary);font-size:var(--text-xs);cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:none;padding:3px 8px}.triage-rule-more:hover,.triage-rule-clear:hover{color:var(--text);background:var(--bg-secondary)}.triage-bulk-bar{top:var(--header-height);z-index:4;position:sticky}.finding-list{gap:var(--space-3);flex-direction:column;display:flex}.finding-list-more{justify-content:center;align-items:center;gap:var(--space-3);padding:var(--space-4) 0;color:var(--text-secondary);font-size:var(--text-xs);display:flex}.finding-list-more-count{font-variant-numeric:tabular-nums}.finding-group{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);overflow:hidden}.finding-group-header{align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);background:var(--bg-secondary);border-bottom:1px solid var(--border);font-size:var(--text-sm);display:flex}.finding-group-header.collapsed{border-bottom:none}.finding-group-check{cursor:pointer;width:auto;min-width:auto}.finding-group-toggle{cursor:pointer;color:var(--text);font-size:var(--text-sm);background:0 0;border:none;align-items:center;gap:8px;padding:2px 4px;font-weight:500;display:inline-flex}.finding-group-toggle:hover{color:var(--accent)}.finding-group-label{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--text)}.finding-group-count{background:var(--bg-tertiary);color:var(--text-secondary);font-size:var(--text-xs);font-variant-numeric:tabular-nums;font-weight:600;font-family:var(--font);border-radius:999px;padding:1px 8px}.finding-group-sev{gap:var(--space-2);margin-left:auto;display:flex}.finding-group-sev-pill{font-size:var(--text-xs);background:var(--bg);border:1px solid var(--border);color:var(--text-secondary);border-radius:999px;padding:1px 8px;font-weight:500}.finding-group-sev-pill.sev-high{color:var(--sev-high);border-color:var(--sev-high-bg);background:var(--sev-high-bg)}.finding-group-sev-pill.sev-medium{color:var(--sev-medium);border-color:var(--sev-medium-bg);background:var(--sev-medium-bg)}.finding-group-sev-pill.sev-low{color:var(--sev-low);border-color:var(--sev-low-bg);background:var(--sev-low-bg)}.finding-group-body{flex-direction:column;display:flex}.finding-row{border-bottom:1px solid var(--border-light);background:var(--bg);transition:background var(--transition-base)}.finding-row:last-child{border-bottom:none}.finding-row.selected{background:var(--accent-light)}.finding-row:hover:not(.selected){background:var(--bg-secondary)}.finding-row-main{align-items:center;gap:var(--space-3);padding:var(--space-3) var(--space-4);cursor:pointer;display:flex}.finding-row-check{cursor:pointer;flex-shrink:0;width:auto;min-width:auto}.finding-row-sev{border-radius:var(--radius-sm);text-transform:uppercase;letter-spacing:.04em;flex-shrink:0;justify-content:center;align-items:center;min-width:60px;padding:3px 10px;font-size:.7rem;font-weight:700;display:inline-flex}.finding-row-sev.sev-high{background:var(--sev-high-bg);color:var(--sev-high)}.finding-row-sev.sev-medium{background:var(--sev-medium-bg);color:var(--sev-medium)}.finding-row-sev.sev-low{background:var(--sev-low-bg);color:var(--sev-low)}.finding-row-body{flex-direction:column;flex:1;gap:2px;min-width:0;display:flex}.finding-row-title{align-items:center;gap:var(--space-2);min-width:0;display:flex}.finding-row-rule{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--text);text-overflow:ellipsis;white-space:nowrap;font-weight:500;overflow:hidden}.finding-row-state{text-transform:uppercase;letter-spacing:.05em;border-radius:var(--radius-sm);flex-shrink:0;padding:1px 6px;font-size:.65rem}.finding-row-meta{align-items:center;gap:var(--space-3);font-size:var(--text-xs);color:var(--text-tertiary);min-width:0;display:flex}.finding-row-path{font-family:var(--font-mono);color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.finding-row-line{color:var(--text-tertiary)}.finding-row-conf{text-transform:uppercase;letter-spacing:.04em;color:var(--text-tertiary);font-size:.65rem}.finding-row-conf.conf-medium{color:var(--conf-medium)}.finding-row-conf.conf-low{color:var(--conf-low)}.finding-row-lang{text-transform:uppercase;letter-spacing:.04em;color:var(--text-tertiary);font-size:.65rem}.finding-row-actions{align-items:center;gap:var(--space-1);flex-shrink:0;display:flex}.finding-row-investigate{padding:4px 12px}.finding-row-kebab{color:var(--text-secondary);background:0 0;border-color:#0000;padding:2px 8px;font-size:1rem;line-height:1}.finding-row-kebab:hover{background:var(--bg-secondary);border-color:var(--border)}.finding-row-chevron{color:var(--text-tertiary);cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:none;padding:4px 6px}.finding-row-chevron:hover{background:var(--bg-secondary);color:var(--text)}.chev{font-size:.75rem;line-height:1;transition:transform .12s ease-out;display:inline-block}.chev.open{transform:rotate(-180deg)}.finding-row-details{padding:var(--space-3) var(--space-4) var(--space-4) 96px;background:var(--bg-secondary);border-top:1px solid var(--border-light)}.finding-row-details-grid{gap:var(--space-3) var(--space-4);grid-template-columns:90px 1fr;align-items:baseline;display:grid}.finding-row-details-item{display:contents}.finding-row-details-label{text-transform:uppercase;letter-spacing:.05em;color:var(--text-tertiary);padding-top:2px;font-size:.7rem;font-weight:600}.finding-row-details-path{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text);word-break:break-all}.finding-row-details-text{font-size:var(--text-sm);color:var(--text);line-height:1.5}.finding-row-details-labels{flex-wrap:wrap;gap:6px;display:flex}.finding-row-details-actions{gap:var(--space-2);display:flex}.triage-audit-table td{vertical-align:middle}.triage-arrow{color:var(--text-secondary);margin:0 2px}.triage-sync-controls{align-items:center;gap:var(--space-2);padding-bottom:var(--space-2);font-size:var(--text-xs);display:flex}.triage-sync-status{color:var(--text-secondary);align-items:center;gap:6px;display:flex}.triage-sync-text{font-variant-numeric:tabular-nums}.triage-sync-dot{border-radius:50%;width:8px;height:8px;display:inline-block}.triage-sync-dot.synced{background:var(--success)}.triage-sync-dot.unsynced{background:var(--text-tertiary)}.suppress-modal-overlay{z-index:2000;background:#0006;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.suppress-modal{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-lg);padding:var(--space-6);min-width:400px;max-width:600px;box-shadow:var(--shadow-lg)}.suppress-modal h3{margin:0 0 var(--space-4) 0}.suppress-options{gap:var(--space-2);flex-direction:column;display:flex}.suppress-opt{text-align:left;font-size:var(--text-sm)}.bulk-action-bar{align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-4);background:var(--accent-light);border:1px solid var(--accent);border-radius:var(--radius);margin-bottom:var(--space-3);font-size:var(--text-sm);color:var(--accent);font-weight:var(--weight-medium);opacity:0;pointer-events:none;border-width:0;max-height:0;margin-bottom:0;padding-top:0;padding-bottom:0;transition:opacity .12s ease-out,transform .12s ease-out,max-height .16s ease-out,padding .16s ease-out,margin-bottom .16s ease-out,border-width .16s ease-out;display:flex;overflow:hidden;transform:translateY(-4px)}.bulk-action-bar.visible{opacity:1;max-height:80px;padding-top:var(--space-2);padding-bottom:var(--space-2);margin-bottom:var(--space-3);pointer-events:auto;border-width:1px;overflow:visible;transform:translateY(0)}.bulk-action-bar .bulk-count{flex:1}.bulk-actions{align-items:center;gap:var(--space-2);display:flex}.bulk-menu-btn{align-items:center;gap:4px;display:inline-flex}.bulk-menu-btn--warning{color:var(--sev-high);border-color:var(--sev-high)}.bulk-menu-btn--warning:hover:not(:disabled){background:color-mix(in srgb, var(--sev-high) 8%, transparent);border-color:var(--sev-high)}.bulk-caret{font-size:.7rem;line-height:1;transition:transform .12s ease-out;display:inline-block}.bulk-caret--open{transform:rotate(-180deg)}.bulk-divider{width:1px;margin:0 var(--space-1);background:color-mix(in srgb, var(--accent) 30%, transparent);align-self:stretch}.bulk-copy-btn{color:var(--text-secondary);background:0 0;border-color:#0000}.bulk-copy-btn:hover:not(:disabled){color:var(--text);background:var(--bg-secondary);border-color:var(--border)}.dropdown{display:inline-block;position:relative}.dropdown-trigger{display:inline-block}.dropdown-menu{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);min-width:220px;box-shadow:var(--shadow-lg);z-index:1000;flex-direction:column;padding:4px;display:flex;position:absolute;top:calc(100% + 4px)}.dropdown-menu--left{left:0}.dropdown-menu--right{right:0}.dropdown-item{align-items:center;gap:var(--space-2);width:100%;color:var(--text);font-size:var(--text-sm);text-align:left;cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:none;padding:6px 10px;font-weight:400;display:flex}.dropdown-item:hover{background:var(--bg-secondary)}.dropdown-item--warning{color:var(--sev-high)}.dropdown-item--warning:hover{background:color-mix(in srgb, var(--sev-high) 8%, transparent)}.dropdown-item-check{width:14px;color:var(--accent);text-align:center;flex-shrink:0;font-size:.85rem}.dropdown-item-label{flex:1}.dropdown-item-hint{color:var(--text-tertiary);font-size:var(--text-xs);font-style:italic}.copy-btn--copied{background:var(--success);color:var(--bg);border-color:var(--success)}.copy-btn--failed{background:var(--sev-high);color:var(--bg);border-color:var(--sev-high)}.copy-btn--icon{justify-content:center;align-items:center;padding:4px 6px;line-height:1;display:inline-flex}.copy-btn--icon svg{display:block}.copy-btn--icon:hover:not(:disabled){border-color:var(--border);background:0 0}.detail-title-row{justify-content:space-between;align-items:center;gap:var(--space-3);margin-bottom:var(--space-2);display:flex}.detail-title-row h2{flex:1;min-width:0;margin:0}.pagination{color:var(--text-secondary);justify-content:space-between;align-items:center;gap:8px;margin-top:16px;font-size:.85rem;display:flex}.pagination-left,.pagination-right,.pagination-center{align-items:center;gap:var(--space-2);display:flex}.pagination select{width:auto;min-width:60px;font-size:var(--text-sm);padding:4px 8px}.cell-path{font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;max-width:300px;font-size:.82rem;overflow:hidden}.filter-bar .filter-count{font-size:var(--text-sm);color:var(--text-secondary);white-space:nowrap}.filter-bar .btn-clear{font-size:var(--text-sm);white-space:nowrap}@media (width<=768px){.sidebar{border-right:none;border-bottom:1px solid var(--border);width:100%;position:static}.sidebar-header{align-items:center;gap:8px;padding:12px 16px;display:flex}.nav-list{gap:4px;padding:4px 8px;display:flex;overflow-x:auto}.nav-link{font-size:var(--text-sm);white-space:nowrap;padding:6px 10px}.nav-link span:not(.nav-icon){display:none}.nav-icon{margin:0}.nav-separator,.sidebar-meta{display:none}.sidebar-footer{border-top:none;padding:0}.sidebar-footer .nav-list{padding:0 8px 4px}.main-panel{margin-left:0}.content{padding:16px}.header-bar{padding:0 16px}.header-search-input{display:none}#app{flex-direction:column}.card-grid{grid-template-columns:repeat(2,1fr)}}.inline-form{flex-wrap:wrap;align-items:flex-end;gap:8px;margin-bottom:16px;display:flex}.inline-form .form-group{margin-bottom:0}.inline-form input,.inline-form select{min-width:120px}.detail-panel{padding:var(--space-4) 0}.detail-panel h2{font-size:var(--text-xl);font-weight:var(--weight-semibold);margin-bottom:var(--space-2)}.detail-panel .badge-row{gap:var(--space-2);margin-bottom:var(--space-3);flex-wrap:wrap;align-items:center;display:flex}.detail-panel .file-location{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--accent);cursor:pointer;margin-bottom:var(--space-4);text-decoration:none;display:inline-block}.detail-panel .file-location:hover{text-decoration:underline}.evidence-card{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--space-3);margin-bottom:var(--space-2);font-size:var(--text-sm)}.evidence-card .evidence-kind{font-weight:var(--weight-semibold);text-transform:uppercase;font-size:var(--text-xs);letter-spacing:.3px;color:var(--text-secondary);margin-bottom:var(--space-1)}.evidence-card .evidence-snippet{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text);background:var(--bg);padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);margin-top:var(--space-1);white-space:pre;overflow-x:auto}.sanitizer-badge-none{background:var(--conf-low-bg);color:var(--conf-low)}.sanitizer-badge-bypassed{background:var(--sev-medium-bg);color:var(--sev-medium)}.sanitizer-badge-applied{background:var(--conf-high-bg);color:var(--conf-high)}.section-toggle{align-items:center;gap:var(--space-2);cursor:pointer;-webkit-user-select:none;user-select:none;font-size:.85rem;font-weight:var(--weight-semibold);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.3px;margin-bottom:var(--space-2);padding:var(--space-1) 0;display:flex}.section-toggle .toggle-arrow{font-size:var(--text-xs);transition:transform var(--transition-base)}.section-toggle .toggle-arrow.collapsed{transform:rotate(-90deg)}.section-body.collapsed{display:none}.detail-panel .related-row{align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);font-size:var(--text-sm);cursor:pointer;display:flex}.detail-panel .related-row:hover{background:var(--bg-tertiary)}.evidence-note{font-size:var(--text-sm);color:var(--text-secondary);padding:var(--space-1) 0}.flow-timeline{padding:var(--space-2) 0;flex-direction:column;gap:0;display:flex}.flow-step{gap:var(--space-3);border-radius:var(--radius-sm);padding:var(--space-1) var(--space-2);display:flex}.flow-step-connector{flex-direction:column;flex-shrink:0;align-items:center;width:16px;display:flex}.flow-step-dot{border-radius:50%;flex-shrink:0;width:10px;height:10px}.flow-step-line{background:var(--border);flex:1;width:2px;min-height:8px}.flow-step-card{min-width:0;padding-bottom:var(--space-2);flex:1}.flow-step-badge{font-weight:var(--weight-semibold);text-transform:uppercase;font-size:var(--text-xs);letter-spacing:.3px}.flow-step-snippet{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text);background:var(--bg);padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);white-space:pre;border:1px solid var(--border);margin-top:4px;overflow-x:auto}.flow-step-cross-file .flow-step-card{border-left:2px solid var(--sev-medium)}.confidence-limiters{margin:var(--space-1) 0 0 0;font-size:var(--text-sm);color:var(--text-secondary);padding-left:20px;list-style:outside}.confidence-limiters li{padding:2px 0}.state-transition-card{background:var(--bg-secondary);border:1px solid var(--border);border-left:3px solid var(--accent);border-radius:var(--radius-sm);padding:var(--space-4);margin-bottom:var(--space-3)}.state-machine-label{font-weight:var(--weight-semibold);text-transform:uppercase;font-size:var(--text-xs);letter-spacing:.3px;color:var(--text-secondary);margin-bottom:var(--space-2)}.state-subject{align-items:center;gap:var(--space-2);margin-bottom:var(--space-3);font-size:var(--text-sm);display:flex}.state-subject-label{color:var(--text-secondary)}.state-subject-name{font-family:var(--font-mono);font-size:var(--text-sm);background:var(--bg);padding:var(--space-1) var(--space-2);border-radius:var(--radius-sm);border:1px solid var(--border)}.state-transition-visual{align-items:center;gap:var(--space-3);padding:var(--space-3);background:var(--bg);border-radius:var(--radius-sm);border:1px solid var(--border);margin-bottom:var(--space-2);display:flex}.state-from,.state-to{font-family:var(--font-mono);font-weight:var(--weight-semibold);font-size:var(--text-base);padding:var(--space-1) var(--space-3);border-radius:var(--radius-sm)}.state-from{background:var(--sev-low-bg);color:var(--sev-low)}.state-to{background:var(--sev-high-bg);color:var(--sev-high)}.state-arrow{font-size:var(--text-xl);color:var(--text-tertiary)}.state-acquire-location{font-size:var(--text-xs);color:var(--text-secondary);margin-top:var(--space-2)}.state-remediation{background:var(--accent-light);border:1px solid var(--accent);border-radius:var(--radius-sm);padding:var(--space-3);margin-top:var(--space-3);font-size:var(--text-sm);color:var(--text);line-height:1.5}.state-remediation-label{font-weight:var(--weight-semibold);font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.3px;color:var(--accent);margin-bottom:var(--space-1)}.finding-heading{align-items:center;gap:var(--space-3);flex-wrap:wrap;margin:0;display:flex}.finding-rule-id{font-family:var(--font-mono);font-size:var(--text-lg);font-weight:var(--weight-semibold);color:var(--text);letter-spacing:-.01em}.severity-pill{border-radius:var(--radius-sm);font-size:var(--text-xs);font-weight:var(--weight-bold);text-transform:uppercase;letter-spacing:.6px;align-items:center;padding:2px 10px;line-height:1.6;display:inline-flex}.severity-pill-high{background:var(--sev-high-bg);color:var(--sev-high);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--sev-high) 25%, transparent)}.severity-pill-medium{background:var(--sev-medium-bg);color:var(--sev-medium);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--sev-medium) 25%, transparent)}.severity-pill-low{background:var(--sev-low-bg);color:var(--sev-low);box-shadow:inset 0 0 0 1px color-mix(in srgb, var(--sev-low) 25%, transparent)}.finding-meta{margin-bottom:var(--space-5);color:var(--text-secondary);font-size:var(--text-sm);line-height:1.7}.finding-meta-item{color:var(--text-secondary)}.finding-meta-sep{margin:0 var(--space-2);color:var(--text-tertiary)}.finding-detail .detail-section{padding-top:var(--space-4);margin-top:var(--space-4);border-top:1px solid var(--border-light)}.finding-detail .detail-section:first-of-type{border-top:none;margin-top:0;padding-top:0}.finding-detail .section-toggle{margin-bottom:var(--space-3)}.status-control{margin:var(--space-4) 0 var(--space-5) 0;padding:var(--space-3) var(--space-4);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius)}.status-control-row{align-items:center;gap:var(--space-3);flex-wrap:wrap;display:flex}.status-label{font-size:var(--text-xs);font-weight:var(--weight-semibold);text-transform:uppercase;letter-spacing:.3px;color:var(--text-secondary)}.status-trigger{align-items:center;gap:var(--space-2);border:1px solid var(--border);background:var(--bg);min-width:180px;color:var(--text);border-radius:var(--radius-sm);cursor:pointer;font-size:var(--text-sm);text-align:left;padding:6px 10px;display:inline-flex}.status-trigger:hover{border-color:var(--text-tertiary)}.status-trigger:disabled{opacity:.6;cursor:not-allowed}.status-value{text-transform:capitalize;flex:1}.status-caret{color:var(--text-tertiary);transition:transform var(--transition-base)}.status-caret.open{transform:rotate(180deg)}.status-dot{background:var(--text-tertiary);border-radius:50%;flex-shrink:0;width:8px;height:8px}.status-dot-open{background:var(--sev-high)}.status-dot-investigating{background:var(--sev-medium)}.status-dot-fixed{background:var(--success)}.status-dot-false_positive,.status-dot-accepted_risk,.status-dot-suppressed{background:var(--conf-low)}.status-group{flex-direction:column;padding:2px 0;display:flex}.status-group+.status-group{border-top:1px solid var(--border-light);margin-top:4px;padding-top:6px}.status-group-heading{font-size:var(--text-xs);font-weight:var(--weight-semibold);text-transform:uppercase;letter-spacing:.4px;color:var(--text-tertiary);padding:4px 10px 2px}.status-note-toggle{font-size:var(--text-sm);color:var(--accent);cursor:pointer;background:0 0;border:none;padding:0;text-decoration:none}.status-note-toggle:hover{text-decoration:underline}.status-current-note{margin-top:var(--space-3);padding:var(--space-2) var(--space-3);background:var(--bg);border-radius:var(--radius-sm);font-size:var(--text-sm);color:var(--text-secondary);border-left:2px solid var(--border)}.status-note-input{margin-top:var(--space-3)}.status-note-input textarea{width:100%;padding:var(--space-2);border:1px solid var(--border);border-radius:var(--radius-sm);font-family:inherit;font-size:var(--text-sm);resize:vertical;background:var(--bg);color:var(--text)}.status-note-input textarea:focus{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-light);outline:none}.status-note-actions{gap:var(--space-2);margin-top:var(--space-2);display:flex}.struct-expl{gap:var(--space-2) var(--space-4);font-size:var(--text-sm);grid-template-columns:max-content 1fr;margin:0;line-height:1.6;display:grid}.struct-expl-row{display:contents}.struct-expl dt{font-size:var(--text-xs);font-weight:var(--weight-semibold);text-transform:uppercase;letter-spacing:.3px;color:var(--text-secondary);padding-top:2px}.struct-expl dd{color:var(--text);margin:0}.struct-expl-code{font-family:var(--font-mono);font-size:var(--text-sm);background:var(--bg-secondary);border-radius:var(--radius-sm);border:1px solid var(--border);padding:1px 6px}.flow-step-num{font-size:var(--text-xs);color:var(--text-tertiary)}.flow-step-endpoint .flow-step-card{background:var(--bg-secondary);border-radius:var(--radius-sm);padding:var(--space-2) var(--space-3);margin-bottom:var(--space-1)}.flow-step-endpoint .flow-step-badge{font-size:var(--text-xs);border-radius:var(--radius-sm);padding:1px 6px}.flow-step-source .flow-step-card{border-left:3px solid var(--success)}.flow-step-source .flow-step-badge{background:var(--success-bg);color:var(--success)!important}.flow-step-sink .flow-step-card{border-left:3px solid var(--sev-high);background:var(--sev-high-bg)}.flow-step-sink .flow-step-badge{background:var(--bg);color:var(--sev-high)!important}.flow-step-sink .flow-step-dot{box-shadow:0 0 0 3px color-mix(in srgb, var(--sev-high) 20%, transparent)}.flow-expand-toggle{margin:var(--space-2) 0 0 28px;color:var(--accent);font-size:var(--text-sm);cursor:pointer;background:0 0;border:none;align-self:flex-start;padding:0}.flow-expand-toggle:hover{text-decoration:underline}.how-to-fix-list{font-size:var(--text-sm);margin:0;padding-left:20px;line-height:1.6;list-style:outside}.how-to-fix-list li{color:var(--text);padding:2px 0}.code-modal-overlay{z-index:100;background:#00000080;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.code-modal{background:var(--bg);border-radius:var(--radius-lg);box-shadow:var(--shadow-xl);flex-direction:column;width:90vw;max-width:1100px;height:85vh;display:flex;overflow:hidden}.code-modal-header{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border);background:var(--bg-secondary);flex-shrink:0;justify-content:space-between;align-items:center;display:flex}.code-modal-title{font-family:var(--font-mono);font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--text-secondary);text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.code-modal-body{flex:1;overflow-y:auto}.code-viewer-body{font-family:var(--font-mono);font-size:.82rem;line-height:1.6}.code-line.highlight-source{border-left:4px solid var(--success);background:var(--success-bg)}.code-line.highlight-sink{border-left:4px solid var(--sev-high);background:var(--sev-high-bg)}.code-line.highlight-finding{background:var(--sev-medium-bg)}.code-line.highlight-flow{background:var(--accent-light)}.tok-keyword{color:var(--accent);font-weight:var(--weight-medium)}.tok-string{color:#2ecc71}.tok-comment{color:var(--text-tertiary);font-style:italic}.tok-number{color:#3498db}.tok-function{color:#e67e22}.scan-modal-overlay{z-index:1000;background:#00000080;justify-content:center;align-items:center;display:flex;position:fixed;inset:0}.scan-modal{background:var(--bg);border-radius:var(--radius-lg);box-shadow:var(--shadow-lg);width:min(480px,90vw);max-height:85vh;padding:var(--space-6);overflow-y:auto}.scan-modal h3{margin:0 0 var(--space-4);font-size:var(--text-xl)}.scan-modal-form{gap:var(--space-4);flex-direction:column;display:flex}.scan-modal-form .form-group{gap:var(--space-1);flex-direction:column;display:flex}.scan-modal-form .form-group label{font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--text-secondary)}.scan-modal-form .form-group input,.scan-modal-form .form-group textarea,.scan-modal-form .form-group select{padding:var(--space-2) var(--space-3);border:1px solid var(--border);border-radius:var(--radius-sm);font-family:var(--font-mono);font-size:var(--text-sm);background:var(--bg);color:var(--text)}.scan-modal-form .form-group .form-hint{margin-top:var(--space-1);font-size:var(--text-xs);color:var(--text-secondary);font-family:var(--font-sans)}.scan-modal-actions{justify-content:flex-end;gap:var(--space-2);margin-top:var(--space-2);display:flex}.scan-progress{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-4);margin-bottom:var(--space-4)}.scan-progress-header{margin-bottom:var(--space-3);justify-content:space-between;align-items:center;display:flex}.scan-progress-header h3{font-size:var(--text-lg);margin:0}.stage-pipeline{margin-bottom:var(--space-3);gap:0;display:flex}.stage-step{padding:var(--space-2) var(--space-1);flex-direction:column;flex:1;align-items:center;display:flex;position:relative}.stage-step:after{content:"";background:var(--border);width:2px;height:60%;position:absolute;top:50%;right:-1px;transform:translateY(-50%)}.stage-step:last-child:after{display:none}.stage-dot{background:var(--border);width:10px;height:10px;margin-bottom:var(--space-1);border-radius:50%;transition:background .3s}.stage-step.active .stage-dot{background:var(--accent);box-shadow:0 0 0 3px var(--accent-light)}.stage-step.done .stage-dot{background:var(--success)}.stage-label{font-size:var(--text-xs);color:var(--text-tertiary);text-align:center}.stage-step.active .stage-label{color:var(--accent);font-weight:var(--weight-medium)}.stage-step.done .stage-label{color:var(--success)}.progress-bar{background:var(--bg-tertiary);height:6px;margin-bottom:var(--space-2);border-radius:3px;overflow:hidden}.progress-bar-fill{background:var(--accent);border-radius:3px;min-width:0;height:100%;transition:width .3s}.progress-stats{font-size:var(--text-xs);color:var(--text-secondary);justify-content:space-between;display:flex}.progress-current-file{font-size:var(--text-xs);color:var(--text-tertiary);font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;margin-top:var(--space-1);overflow:hidden}.scan-detail-tabs{border-bottom:1px solid var(--border);margin-bottom:var(--space-4);gap:0;display:flex}.scan-detail-tab{padding:var(--space-2) var(--space-4);font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--text-secondary);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;transition:color .2s,border-color .2s}.scan-detail-tab:hover{color:var(--text)}.scan-detail-tab.active{color:var(--accent);border-bottom-color:var(--accent)}.scan-detail-tab-content{display:none}.scan-detail-tab-content.active{display:block}.log-viewer{max-height:500px;font-family:var(--font-mono);font-size:var(--text-xs);border:1px solid var(--border);border-radius:var(--radius-sm);overflow-y:auto}.log-entry{padding:var(--space-1) var(--space-3);border-bottom:1px solid var(--border-light);gap:var(--space-2);align-items:flex-start;display:flex}.log-entry:last-child{border-bottom:none}.log-entry.log-warn{background:var(--sev-medium-bg)}.log-entry.log-error{background:var(--sev-high-bg)}.log-level{font-weight:var(--weight-semibold);text-transform:uppercase;text-align:center;border-radius:2px;flex-shrink:0;min-width:36px;padding:1px 4px;font-size:.65rem}.log-level.info{background:var(--accent-light);color:var(--accent)}.log-level.warn{background:var(--sev-medium-bg);color:var(--sev-medium)}.log-level.error{background:var(--sev-high-bg);color:var(--sev-high)}.log-time{color:var(--text-tertiary);flex-shrink:0;font-size:.65rem}.log-message{color:var(--text);word-break:break-all}.log-filters{gap:var(--space-2);margin-bottom:var(--space-3);display:flex}.log-filter-btn{padding:var(--space-1) var(--space-3);font-size:var(--text-xs);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);cursor:pointer;color:var(--text-secondary)}.log-filter-btn.active{background:var(--accent-light);border-color:var(--accent);color:var(--accent)}.metric-grid{gap:var(--space-3);grid-template-columns:repeat(auto-fill,minmax(180px,1fr));display:grid}.metric-card{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-4);text-align:center}.metric-card-label{font-size:var(--text-xs);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:var(--space-1)}.metric-card-value{font-size:var(--text-2xl);font-weight:var(--weight-semibold);color:var(--text);font-family:var(--font-mono)}.lang-badge{background:var(--bg-tertiary);color:var(--text-secondary);border-radius:3px;margin-right:2px;padding:1px 6px;font-size:.65rem;display:inline-block}.status-badge{align-items:center;gap:var(--space-1);border-radius:var(--radius-sm);font-size:var(--text-xs);font-weight:var(--weight-medium);padding:2px 8px;display:inline-flex}.status-badge.running{background:var(--accent-light);color:var(--accent)}.status-badge.completed{background:var(--success-bg);color:var(--success)}.status-badge.failed{background:var(--sev-high-bg);color:var(--sev-high)}.status-badge .status-dot{width:6px;height:6px}.status-badge.running .status-dot{animation:1.5s ease-in-out infinite pulse}.timing-bar{border-radius:var(--radius-sm);height:24px;margin:var(--space-2) 0;display:flex;overflow:hidden}.timing-bar-segment{font-size:.6rem;font-weight:var(--weight-medium);color:#fff;justify-content:center;align-items:center;min-width:2px;transition:width .3s;display:flex}.timing-bar-segment.walk{background:var(--sev-low)}.timing-bar-segment.pass1{background:var(--accent)}.timing-bar-segment.callgraph{background:var(--sev-medium)}.timing-bar-segment.pass2{background:var(--success)}.timing-bar-segment.postprocess{background:var(--text-tertiary)}.timing-legend{gap:var(--space-3);font-size:var(--text-xs);color:var(--text-secondary);margin-top:var(--space-1);flex-wrap:wrap;display:flex}.timing-legend-item{align-items:center;gap:var(--space-1);display:flex}.timing-legend-dot{border-radius:2px;width:8px;height:8px}.scan-stat-grid{gap:var(--space-3);margin-bottom:var(--space-4);grid-template-columns:repeat(auto-fill,minmax(150px,1fr));display:grid}.scan-stat-card{background:var(--bg-secondary);border-radius:var(--radius);padding:var(--space-3) var(--space-4)}.scan-stat-label{font-size:var(--text-xs);color:var(--text-secondary);margin-bottom:var(--space-1)}.scan-stat-value{font-size:var(--text-lg);font-weight:var(--weight-semibold)}.compare-header{align-items:center;gap:var(--space-3);margin-bottom:var(--space-4);flex-wrap:wrap;display:flex}.compare-scan-pill{align-items:center;gap:var(--space-2);background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-2) var(--space-3);font-size:var(--text-sm);display:inline-flex}.compare-scan-pill .pill-id{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-secondary)}.compare-scan-pill .pill-count{font-weight:var(--weight-semibold)}.compare-vs{font-size:var(--text-sm);color:var(--text-tertiary);font-weight:var(--weight-semibold)}.compare-summary-grid{gap:var(--space-3);margin-bottom:var(--space-4);grid-template-columns:repeat(4,1fr);display:grid}.compare-card{background:var(--bg-secondary);border-radius:var(--radius);padding:var(--space-3) var(--space-4);border-left:3px solid var(--border)}.compare-card--new{border-left-color:var(--success)}.compare-card--fixed{border-left-color:var(--sev-high)}.compare-card--changed{border-left-color:var(--sev-medium)}.compare-card--unchanged{border-left-color:var(--text-tertiary)}.compare-card .compare-card-label{font-size:var(--text-xs);color:var(--text-secondary);margin-bottom:var(--space-1)}.compare-card .compare-card-value{font-size:var(--text-lg);font-weight:var(--weight-semibold)}.compare-card--new .compare-card-value{color:var(--success)}.compare-card--fixed .compare-card-value{color:var(--sev-high)}.compare-card--changed .compare-card-value{color:var(--sev-medium)}.severity-delta{gap:var(--space-4);margin-bottom:var(--space-4);font-size:var(--text-sm);display:flex}.severity-delta-item{align-items:center;gap:var(--space-1);display:inline-flex}.severity-delta-item .delta-positive{color:var(--sev-high);font-weight:var(--weight-semibold)}.severity-delta-item .delta-negative{color:var(--success);font-weight:var(--weight-semibold)}.severity-delta-item .delta-zero{color:var(--text-tertiary)}.compare-badge--new{background:var(--success-bg);color:#1a9a52;font-size:var(--text-xs);font-weight:var(--weight-semibold);border-radius:var(--radius-sm);padding:1px 6px}.compare-badge--fixed{background:var(--sev-high-bg);color:var(--sev-high);font-size:var(--text-xs);font-weight:var(--weight-semibold);border-radius:var(--radius-sm);padding:1px 6px}.compare-badge--changed{background:var(--sev-medium-bg);color:var(--sev-medium);font-size:var(--text-xs);font-weight:var(--weight-semibold);border-radius:var(--radius-sm);padding:1px 6px}.compare-badge--unchanged{background:var(--bg-tertiary);color:var(--text-tertiary);font-size:var(--text-xs);font-weight:var(--weight-semibold);border-radius:var(--radius-sm);padding:1px 6px}.compare-section{margin-bottom:var(--space-4)}.compare-section-header{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:var(--bg-secondary);border-radius:var(--radius-sm);cursor:pointer;-webkit-user-select:none;user-select:none;font-size:var(--text-sm);font-weight:var(--weight-medium);display:flex}.compare-section-header:hover{background:var(--bg-tertiary)}.compare-section-header .section-toggle{font-size:var(--text-xs);color:var(--text-tertiary);transition:transform .15s}.compare-section-header .section-toggle.collapsed{transform:rotate(-90deg)}.compare-section-body{padding-top:var(--space-2)}.compare-finding-row{align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-radius:0 var(--radius-sm) var(--radius-sm) 0;font-size:var(--text-sm);cursor:pointer;border-left:3px solid #0000;display:flex}.compare-finding-row:hover{background:var(--bg-secondary)}.compare-finding-row--new{border-left-color:var(--success)}.compare-finding-row--fixed{border-left-color:var(--sev-high)}.compare-finding-row--changed{border-left-color:var(--sev-medium)}.compare-finding-row--unchanged{border-left-color:var(--bg-tertiary)}.compare-finding-row .finding-path{color:var(--text-secondary);font-family:var(--font-mono);font-size:var(--text-xs);text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.compare-delta-inline{font-size:var(--text-xs);color:var(--sev-medium);font-family:var(--font-mono);align-items:center;gap:3px;display:inline-flex}.compare-delta-inline .delta-arrow{color:var(--text-tertiary)}.compare-select-bar{align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);background:var(--accent-light);border:1px solid var(--accent);border-radius:var(--radius);margin-bottom:var(--space-3);font-size:var(--text-sm);display:flex}.compare-group-header{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:var(--bg-secondary);border-radius:var(--radius-sm);cursor:pointer;-webkit-user-select:none;user-select:none;font-size:var(--text-sm);font-weight:var(--weight-medium);margin-top:var(--space-2);display:flex}.compare-group-header:hover{background:var(--bg-tertiary)}.compare-group-summary{font-weight:var(--weight-normal);color:var(--text-secondary);font-size:var(--text-xs);margin-left:auto}.rules-layout{grid-template-columns:2fr 1fr;gap:0;height:calc(100vh - 160px);min-height:400px;display:grid}.rules-list-panel{border-right:1px solid var(--border);padding-right:var(--space-4);overflow-y:auto}.rules-detail-panel{padding-left:var(--space-4);overflow-y:auto}.rules-filters{gap:var(--space-2);margin-bottom:var(--space-3);flex-wrap:wrap;align-items:center;display:flex}.rules-table{border-collapse:collapse;table-layout:fixed;width:100%}.rules-table .col-toggle{width:60px}.rules-table .col-lang{width:100px}.rules-table .col-kind{width:110px}.rules-table .col-cap{width:100px}.rules-table .col-finds{width:64px}.rules-table th,.rules-table td{font-size:var(--text-sm);text-align:left;border-bottom:1px solid var(--border-light);white-space:nowrap;vertical-align:middle;padding:8px 12px;overflow:hidden}.rules-table .col-title-cell{overflow:hidden}.rule-title-text{text-overflow:ellipsis;white-space:nowrap;display:block;overflow:hidden}.rules-table th{z-index:2;background:var(--bg-secondary);font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.3px;border-bottom:1px solid var(--border);position:sticky;top:0}.rule-row{cursor:pointer;display:table-row}.rule-row:hover td{background:var(--bg-secondary)}.rule-row.selected td{background:var(--accent-light)}.rule-row.rule-disabled{opacity:.55}.rules-table tr:last-child td{border-bottom:none}.rules-table tbody tr:hover td{background:var(--bg-secondary)}.rule-toggle{border:1px solid var(--border);border-radius:var(--radius-sm);font-size:var(--text-xs);cursor:pointer;background:var(--bg-secondary);padding:1px 6px}.rule-toggle.toggle-on{background:var(--success-bg);color:var(--success);border-color:var(--success)}.rule-toggle.toggle-off{background:var(--bg-secondary);color:var(--text-tertiary)}.matcher-tag{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:var(--text-sm);margin:2px;padding:2px 8px;display:inline-block}.detail-meta{gap:var(--space-2);margin-top:var(--space-3);grid-template-columns:1fr 1fr;display:grid}.detail-meta>div{font-size:var(--text-sm)}.rule-detail-card h3{margin:0 0 var(--space-3) 0;font-size:var(--text-lg);word-break:break-word}.rule-detail-grid{gap:var(--space-1) var(--space-3);font-size:var(--text-sm);grid-template-columns:auto 1fr;display:grid}.rule-detail-label{color:var(--text-secondary);font-weight:var(--weight-medium);white-space:nowrap}.config-section{margin-bottom:var(--space-6)}.config-section-header{cursor:pointer;align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:var(--bg-secondary);border-radius:var(--radius);-webkit-user-select:none;user-select:none;font-size:var(--text-base);display:flex}.config-section-header:hover{background:var(--bg-tertiary)}.config-section-header-static{cursor:default}.config-section-header-static:hover{background:var(--bg-secondary)}.config-collapse-arrow{font-size:10px;transition:transform .15s;display:inline-block}.config-section-header.collapsed .config-collapse-arrow{transform:rotate(-90deg)}.config-section-header.collapsed+.config-section-body{display:none}.config-section-body{padding:var(--space-3) 0}.label-table{border-collapse:collapse;width:100%}.label-table td,.label-table th{text-align:left;padding:6px 10px}.label-builtin{opacity:.7}.add-label-form{margin-bottom:var(--space-2)}.config-form-row{gap:var(--space-3);margin-bottom:var(--space-2);grid-template-columns:minmax(140px,180px) 1fr minmax(140px,200px) auto;align-items:end;display:grid}.config-form-row .form-group{min-width:0;margin-bottom:0}.config-form-row.config-form-row-2col{grid-template-columns:minmax(200px,320px) auto;justify-content:start}.config-form-row input,.config-form-row select,.config-form-row .btn{box-sizing:border-box;height:38px;line-height:1.2}.config-form-row .btn{padding-left:var(--space-4);padding-right:var(--space-4);align-self:end}@media (width<=720px){.config-form-row{grid-template-columns:1fr 1fr}.config-form-row .btn{grid-column:1/-1}}.config-tabs{gap:var(--space-1);border-bottom:1px solid var(--border);margin-bottom:var(--space-4);display:flex}.config-tab{padding:var(--space-2) var(--space-3);font-size:var(--text-sm);font-weight:var(--weight-medium);color:var(--text-secondary);cursor:pointer;background:0 0;border:none;border-bottom:2px solid #0000;margin-bottom:-1px}.config-tab:hover{color:var(--text)}.config-tab.active{color:var(--accent);border-bottom-color:var(--accent)}.page-header-sub{color:var(--text-secondary);font-size:var(--text-sm);margin-left:var(--space-3)}.config-help{color:var(--text-secondary);font-size:var(--text-sm);margin:0 0 var(--space-3) 0}.config-help code{background:var(--bg-secondary);border-radius:3px;padding:1px 4px;font-size:.95em}.config-mono{font-family:var(--font-mono);font-size:var(--text-sm)}.config-profile-settings{font-size:var(--text-xs);font-family:var(--font-mono);text-overflow:ellipsis;white-space:nowrap;max-width:360px;color:var(--text-secondary);overflow:hidden}.config-kv-grid{gap:var(--space-2) var(--space-4);grid-template-columns:repeat(auto-fill,minmax(280px,1fr));display:grid}.config-kv-row{padding:var(--space-2) 0;border-bottom:1px solid var(--border);flex-direction:column;gap:2px;min-width:0;display:flex}.config-kv-key{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.04em;color:var(--text-secondary);font-weight:var(--weight-semibold)}.config-kv-val{font-size:var(--text-sm);word-break:break-word}.config-kv-val .muted{color:var(--text-secondary);font-style:italic}.config-list-inline{flex-wrap:wrap;gap:4px;display:inline-flex}.config-tag{background:var(--bg-secondary);color:var(--text);font-family:var(--font-mono);font-size:var(--text-xs);border-radius:var(--radius-sm);padding:1px 6px}.pill{font-size:var(--text-xs);font-weight:var(--weight-medium);border-radius:999px;padding:1px 8px;display:inline-block}.pill-on{background:var(--success-bg,var(--accent-light));color:var(--success,var(--accent))}.pill-off{background:var(--bg-secondary);color:var(--text-secondary)}.raw-editor{gap:var(--space-2);flex-direction:column;display:flex}.raw-editor-header{justify-content:space-between;align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);background:var(--bg-secondary);border-radius:var(--radius);flex-wrap:wrap;display:flex}.raw-editor-path{font-family:var(--font-mono);font-size:var(--text-xs);color:var(--text-secondary);margin-top:2px}.raw-editor-actions{align-items:center;gap:var(--space-2);display:flex}.raw-editor-dirty{color:var(--sev-medium,var(--accent));font-size:var(--text-xs);font-weight:var(--weight-medium)}.raw-editor-saved{color:var(--success,var(--accent));font-size:var(--text-xs);font-weight:var(--weight-medium)}.raw-editor-error{background:var(--sev-high-bg);color:var(--sev-high);padding:var(--space-2) var(--space-3);border-radius:var(--radius);font-size:var(--text-sm);white-space:pre-wrap;word-break:break-word}.raw-editor-textarea{width:100%;min-height:480px;font-family:var(--font-mono);padding:var(--space-3);border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);color:var(--text);resize:vertical;white-space:pre;tab-size:2;font-size:.85rem;line-height:1.5}.raw-editor-textarea:focus{border-color:var(--accent);outline:none}.badge-custom{background:var(--accent-light);color:var(--accent);border-radius:var(--radius-sm);font-size:var(--text-xs);font-weight:var(--weight-medium);padding:2px 6px}.badge-builtin{background:var(--bg-secondary);color:var(--text-secondary);border-radius:var(--radius-sm);font-size:var(--text-xs);padding:2px 6px}.badge-source{background:var(--sev-low-bg);color:var(--sev-low)}.badge-sanitizer{background:var(--success-bg);color:var(--success)}.badge-sink{background:var(--sev-high-bg);color:var(--sev-high)}.toggle-inline{align-items:center;gap:var(--space-2);font-size:var(--text-sm);display:flex}.toggle-inline input[type=checkbox]{width:16px;height:16px}.settings-row{align-items:center;gap:var(--space-3);font-size:var(--text-sm);margin-bottom:var(--space-3);display:flex}.settings-row-label{min-width:80px;font-weight:var(--weight-medium)}.settings-row-control{box-sizing:border-box;min-width:160px;height:32px}.settings-row-toggle{margin-top:var(--space-2)}@media (width<=768px){.code-modal{border-radius:0;width:100vw;height:100vh}.scan-modal{border-radius:0;width:100vw;max-height:100vh;margin:0}.metric-grid{grid-template-columns:repeat(2,1fr)}}.overview-stat-grid{gap:var(--space-3);margin-bottom:var(--space-6);grid-template-columns:repeat(6,1fr);display:grid}.overview-stat-grid-5{grid-template-columns:repeat(5,1fr)}.card-full{grid-column:1/-1}.backlog-empty{gap:var(--space-1);padding:var(--space-3) 0;flex-direction:column;display:flex}.overview-stat-card{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);padding:var(--space-4);text-align:center;box-shadow:var(--shadow-sm)}.stat-label{font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;margin-bottom:var(--space-1)}.stat-value{font-size:var(--text-2xl);font-weight:var(--weight-bold);font-family:var(--font-mono);color:var(--text)}.stat-delta{font-size:var(--text-xs);font-weight:var(--weight-semibold);vertical-align:middle;margin-left:4px}.delta-up{color:var(--sev-high)}.delta-down{color:var(--success)}.delta-neutral{color:var(--text-tertiary)}.stat-subtitle{font-size:var(--text-xs);color:var(--text-tertiary);margin-top:2px}.overview-chart-grid{gap:var(--space-4);margin-bottom:var(--space-6);grid-template-columns:repeat(2,1fr);display:grid}.overview-chart-grid .card{padding:var(--space-4)}.overview-chart-grid .card-header{margin-bottom:var(--space-3)}.overview-table-grid{gap:var(--space-4);margin-bottom:var(--space-6);grid-template-columns:repeat(2,1fr);display:grid}.overview-table-grid .card{overflow:hidden}.overview-table-grid table{font-size:var(--text-sm)}.overview-table-grid td:last-child,.overview-table-grid th:last-child{text-align:right}.overview-fresh-banner{background:var(--success-bg);border:1px solid var(--success);border-radius:var(--radius);padding:var(--space-3) var(--space-4);margin-bottom:var(--space-5);font-size:var(--text-sm);align-items:center;gap:var(--space-3);display:flex}.overview-fresh-banner strong{color:var(--success)}.overview-fresh-banner a{color:var(--accent);font-weight:var(--weight-medium);margin-left:auto;text-decoration:none}.overview-fresh-banner a:hover{text-decoration:underline}.overview-empty{text-align:center;flex-direction:column;justify-content:center;align-items:center;padding:80px 20px;display:flex}.overview-empty h2{margin:var(--space-5) 0 var(--space-2);font-size:var(--text-xl)}.overview-empty p{color:var(--text-secondary);margin-bottom:var(--space-5)}.overview-empty svg{width:64px;height:64px;color:var(--text-tertiary)}.overview-insights{margin-bottom:var(--space-6)}.insight-list{gap:var(--space-2);padding:var(--space-3);flex-direction:column;display:flex}.insight-card{padding:var(--space-3) var(--space-4);border-radius:var(--radius-sm);font-size:var(--text-sm);justify-content:space-between;align-items:center;gap:var(--space-3);display:flex}.insight-warning{background:var(--sev-medium-bg);border-left:3px solid var(--sev-medium)}.insight-info{background:var(--sev-low-bg);border-left:3px solid var(--sev-low)}.insight-success{background:var(--success-bg);border-left:3px solid var(--success)}.insight-card a{color:var(--accent);font-weight:var(--weight-medium);white-space:nowrap;text-decoration:none}.insight-card a:hover{text-decoration:underline}.chart-container{width:100%;min-height:120px}.chart-container svg{width:100%;height:auto;display:block}@media (width<=1200px){.overview-stat-grid{grid-template-columns:repeat(3,1fr)}.overview-posture-row{grid-template-columns:1fr}}@media (width<=768px){.overview-stat-grid{grid-template-columns:repeat(2,1fr)}.overview-chart-grid,.overview-table-grid{grid-template-columns:1fr}}.health-card{padding:var(--space-4) var(--space-5);margin-bottom:var(--space-5)}.health-eyebrow{font-size:var(--text-xs);font-weight:var(--weight-semibold);text-transform:uppercase;letter-spacing:.06em;color:var(--text-tertiary);margin-bottom:var(--space-2)}.health-headline{gap:var(--space-4);grid-template-columns:auto auto 1fr;align-items:stretch;display:grid}.health-grade-block{border-radius:var(--radius-sm);color:#fff;padding:0 var(--space-3);justify-content:center;align-self:stretch;align-items:center;min-width:56px;display:flex}.health-grade-letter{font-size:40px;line-height:1;font-weight:var(--weight-bold);font-family:var(--font-mono);letter-spacing:-.02em}.grade-a{background:#16a34a}.grade-b{background:#65a30d}.grade-c{background:#ca8a04}.grade-d{background:#ea580c}.grade-f{background:#dc2626}.health-headline-text{gap:var(--space-2);flex-direction:column;justify-content:center;display:flex}.health-summary{align-items:baseline;gap:var(--space-2);display:flex}.health-number{font-size:40px;line-height:1;font-weight:var(--weight-bold);font-family:var(--font-mono);color:var(--text);letter-spacing:-.02em}.health-of{font-size:var(--text-sm);color:var(--text-tertiary);font-family:var(--font-mono)}.health-posture{font-size:var(--text-sm);color:var(--text-secondary);line-height:1.4}.health-posture.posture-success{color:#16a34a}.health-posture.posture-warning{color:#ca8a04}.health-posture.posture-danger{color:#dc2626}.health-posture.posture-info{color:var(--text-secondary)}.health-components{gap:var(--space-1);border-left:1px solid var(--border);padding-left:var(--space-5);grid-template-columns:repeat(5,1fr);display:grid}.health-component{padding:0 var(--space-2);flex-direction:column;gap:2px;display:flex}.health-component-score{font-size:var(--text-xl);font-weight:var(--weight-semibold);font-family:var(--font-mono);color:var(--text);line-height:1.1}.health-component-label{font-size:var(--text-xs);color:var(--text-tertiary);line-height:1.3}.backlog-card{margin-bottom:var(--space-5);padding:var(--space-4) var(--space-5)}.backlog-body{align-items:center;gap:var(--space-6);grid-template-columns:repeat(3,auto) 1fr;display:grid}.backlog-stat{flex-direction:column;gap:2px;display:flex}.backlog-stat-value{font-size:var(--text-xl);font-weight:var(--weight-semibold);font-family:var(--font-mono)}.backlog-stat-label{font-size:var(--text-xs);color:var(--text-tertiary)}.backlog-bucket .bucket-bar{margin-top:0}.bucket-bar{background:var(--bg-secondary);border-radius:3px;height:6px;display:flex;overflow:hidden}.bucket-segment{height:100%}.confidence-dist{padding:var(--space-2)}.confidence-bar{background:var(--bg-secondary);height:18px;margin-bottom:var(--space-3);border-radius:4px;display:flex;overflow:hidden}.confidence-segment{height:100%}.confidence-legend{gap:var(--space-1) var(--space-3);font-size:var(--text-xs);grid-template-columns:repeat(2,1fr);display:grid}.confidence-legend-item{align-items:center;gap:6px;display:flex}.confidence-swatch{border-radius:2px;width:10px;height:10px}.confidence-count{font-family:var(--font-mono);color:var(--text-secondary);margin-left:auto}.kv-list{padding:var(--space-2) var(--space-4) var(--space-3);flex-direction:column;margin:0;display:flex}.kv-row{align-items:baseline;gap:var(--space-4);padding:var(--space-3) 0;border-bottom:1px solid var(--border-light);grid-template-columns:1fr auto;display:grid}.kv-row:last-child{border-bottom:none}.kv-row-emphasis{padding-bottom:var(--space-3);margin-bottom:var(--space-1);border-bottom:1px solid var(--border)}.kv-row-emphasis .kv-number{font-size:var(--text-2xl);font-weight:var(--weight-bold)}.kv-label{font-size:var(--text-sm);color:var(--text);font-weight:var(--weight-medium);flex-direction:column;gap:2px;margin:0;display:flex}.kv-hint{font-size:var(--text-xs);color:var(--text-tertiary);font-weight:var(--weight-regular,400)}.kv-value{text-align:right;flex-direction:column;gap:2px;margin:0;display:flex}.kv-number{font-family:var(--font-mono);font-size:var(--text-lg);font-weight:var(--weight-semibold);color:var(--text);line-height:1.1}.kv-detail{font-size:var(--text-xs);color:var(--text-tertiary);font-family:var(--font)}.owasp-list{padding:var(--space-2);gap:var(--space-2);flex-direction:column;margin:0;list-style:none;display:flex}.owasp-row{align-items:center;gap:var(--space-2);font-size:var(--text-sm);grid-template-columns:50px 1fr 100px 36px;display:grid}.owasp-code{font-family:var(--font-mono);font-weight:var(--weight-semibold);color:var(--accent)}.owasp-label{color:var(--text-secondary);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.owasp-bar{background:var(--bg-secondary);border-radius:3px;height:6px;overflow:hidden}.owasp-fill{background:var(--accent);height:100%}.owasp-count{text-align:right;font-family:var(--font-mono);font-weight:var(--weight-semibold)}.severity-stack{background:var(--bg-secondary);border-radius:3px;min-width:80px;height:18px;display:flex;overflow:hidden}.sev-segment{color:#fff;font-size:10px;font-weight:var(--weight-semibold);font-family:var(--font-mono);justify-content:center;align-items:center;display:flex}.sev-segment.sev-high{background:var(--sev-high)}.sev-segment.sev-medium{background:var(--sev-medium)}.sev-segment.sev-low{background:var(--sev-low)}.baseline-strip{align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-4);background:var(--bg);border:1px solid var(--border);border-radius:var(--radius);margin-bottom:var(--space-3);font-size:var(--text-sm);display:flex}.baseline-strip-empty{color:var(--text-secondary)}.baseline-label{font-weight:var(--weight-semibold);color:var(--text-secondary)}.baseline-link{color:var(--accent);font-family:var(--font-mono);cursor:pointer;background:0 0;border:none;padding:0}.baseline-link:hover{text-decoration:underline}.baseline-action{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:var(--text-xs);cursor:pointer;color:var(--text);margin-left:auto;padding:2px 10px}.baseline-action:hover{background:var(--bg-secondary)}.baseline-action:disabled{opacity:.5;cursor:not-allowed}.baseline-drift-good{color:var(--success)}.baseline-drift-bad{color:var(--sev-high)}.baseline-drift-flat{color:var(--text-tertiary)}.cli-hint{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);padding:var(--space-3);font-family:var(--font-mono);font-size:var(--text-sm);color:var(--text);display:inline-block}.content:has(.explorer-page){max-width:none;padding:0}.explorer-page{height:calc(100vh - 57px);overflow:hidden}.explorer-page-code{grid-template-columns:280px minmax(0,1fr) 300px;display:grid}.explorer-page-analysis{grid-template-columns:280px minmax(0,1fr);display:grid}.explorer-left{border-right:1px solid var(--border);background:var(--bg);flex-direction:column;display:flex;overflow:hidden}.explorer-left-header{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border);flex-shrink:0}.explorer-left-body{flex:1;overflow-y:auto}.explorer-mode-toggle{background:var(--border);border-radius:var(--radius-sm);gap:1px;display:flex;overflow:hidden}.mode-btn{padding:var(--space-1) var(--space-2);font-size:var(--text-xs);font-weight:var(--weight-medium);background:var(--bg-secondary);color:var(--text-secondary);cursor:pointer;border:none;flex:1;transition:background .15s,color .15s}.mode-btn:hover{background:var(--bg-tertiary)}.mode-btn.active{background:var(--accent);color:#fff}.file-tree{padding:var(--space-1) 0}.tree-node{align-items:center;gap:var(--space-1);cursor:pointer;font-size:var(--text-sm);color:var(--text);-webkit-user-select:none;user-select:none;border-left:3px solid #0000;padding:3px 8px;transition:background .1s;display:flex}.tree-node:hover{background:var(--bg-secondary)}.tree-node.selected{background:var(--accent-light)}.tree-node.sev-high{border-left-color:var(--sev-high)}.tree-node.sev-medium{border-left-color:var(--sev-medium)}.tree-node.sev-low{border-left-color:var(--sev-low)}.tree-chevron{width:14px;font-size:var(--text-xs);color:var(--text-tertiary);text-align:center;flex-shrink:0}.tree-chevron.invisible{visibility:hidden}.tree-node-icon{color:var(--text-secondary);flex-shrink:0;align-items:center;display:flex}.tree-node-name{text-overflow:ellipsis;white-space:nowrap;flex:1;overflow:hidden}.tree-node-badge{font-size:var(--text-xs);font-weight:var(--weight-semibold);background:var(--accent-light);color:var(--accent);border-radius:10px;flex-shrink:0;padding:0 6px;line-height:1.6}.file-icon{font-size:var(--text-xs);font-weight:var(--weight-bold);font-family:var(--font-mono);text-align:center;width:14px;display:inline-block}.explorer-main-shell{background:var(--bg);flex-direction:column;min-width:0;height:100%;display:flex;overflow:hidden}.explorer-file-header{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border);justify-content:center;gap:var(--space-3);background:var(--bg);min-height:var(--explorer-header-height);box-sizing:border-box;flex-direction:column;flex-shrink:0;display:flex}.explorer-file-header-top{justify-content:space-between;align-items:center;gap:var(--space-4);flex-wrap:wrap;display:flex}.explorer-file-header-copy{align-items:baseline;gap:var(--space-2);flex-wrap:nowrap;flex:0 auto;min-width:0;display:flex}.explorer-file-label{font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.06em;flex-shrink:0}.explorer-file-path{font-size:var(--text-sm);font-family:var(--font-mono);color:var(--text);white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.explorer-function-picker{flex:0 460px;width:min(460px,100%);min-width:0;max-width:100%}.explorer-function-picker .function-selector{flex-wrap:nowrap;width:100%;padding:0}.function-selector-flat{display:contents}.function-selector-flat>.function-selector-field{flex:0 auto;padding:0}.explorer-view-tabs{align-items:stretch;gap:var(--space-4);scrollbar-width:thin;display:flex;overflow-x:auto}.explorer-view-tab{padding:var(--space-2) 0;color:var(--text-secondary);cursor:pointer;white-space:nowrap;font-size:var(--text-sm);font-weight:var(--weight-medium);background:0 0;border:0;border-bottom:2px solid #0000;border-radius:0;transition:color .12s,border-color .12s}.explorer-view-tab:hover{color:var(--text)}.explorer-view-tab.active{color:var(--accent);border-bottom-color:var(--accent)}.explorer-inline-notice{padding:var(--space-2) var(--space-3);border-radius:var(--radius);color:var(--text-secondary);font-size:var(--text-sm);background:#5856d614}.explorer-inline-notice-warning{color:var(--sev-medium);background:#f39c121a}.explorer-main-body{flex:1;min-height:0;overflow:auto}.explorer-main-body .code-viewer-body{min-height:100%}.explorer-main-body .empty-state{padding:var(--space-8) var(--space-4);color:var(--text-tertiary)}.line-gutter{flex-shrink:0;justify-content:center;align-items:center;width:16px;display:inline-flex}.gutter-marker{border-radius:50%;width:8px;height:8px;display:inline-block}.gutter-marker-spacer{width:8px;height:8px;display:inline-block}.gutter-marker.sev-high{background:var(--sev-high)}.gutter-marker.sev-medium{background:var(--sev-medium)}.gutter-marker.sev-low{background:var(--sev-low)}.explorer-right{border-left:1px solid var(--border);background:var(--bg);overflow-y:auto}.explorer-right-section{padding:var(--space-3) var(--space-4);border-bottom:1px solid var(--border-light)}.explorer-right>.explorer-right-section:first-child{border-bottom-color:var(--border);min-height:var(--explorer-header-height);box-sizing:border-box;flex-direction:column;justify-content:center;display:flex}.explorer-right-section h3{font-size:var(--text-xs);font-weight:var(--weight-semibold);color:var(--text-tertiary);text-transform:uppercase;letter-spacing:.05em;margin:0 0 var(--space-2) 0}.explorer-file-meta{align-items:center;gap:var(--space-2);margin-bottom:var(--space-2);display:flex}.meta-text{font-size:var(--text-sm);color:var(--text-secondary)}.explorer-sev-breakdown{gap:var(--space-1);flex-wrap:wrap;display:flex}.badge-sev{font-size:var(--text-xs);font-weight:var(--weight-medium);border-radius:10px;padding:1px 8px}.badge-sev-high{background:var(--sev-high-bg);color:var(--sev-high)}.badge-sev-medium{background:var(--sev-medium-bg);color:var(--sev-medium)}.badge-sev-low{background:var(--sev-low-bg);color:var(--sev-low)}.explorer-symbol-list{padding:var(--space-2)}.explorer-symbol-item{align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-2);font-size:var(--text-sm);border-radius:var(--radius-sm);display:flex}.explorer-symbol-item:hover{background:var(--bg-secondary)}.explorer-symbol-item.compact{padding:2px var(--space-2);font-size:var(--text-xs)}.symbol-kind{font-family:var(--font-mono);font-weight:var(--weight-bold);font-size:var(--text-xs);text-align:center;flex-shrink:0;width:16px}.symbol-kind-function{color:var(--accent)}.symbol-kind-method{color:var(--sev-medium)}.symbol-name{text-overflow:ellipsis;white-space:nowrap;font-family:var(--font-mono);flex:1;overflow:hidden}.symbol-arity{color:var(--text-tertiary);font-size:var(--text-xs)}.explorer-symbol-toggle{align-items:center;gap:var(--space-2);padding:var(--space-2);font-size:var(--text-xs);color:var(--text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;display:flex}.explorer-symbol-toggle-link{margin-top:var(--space-2);color:var(--accent);font-size:var(--text-xs);cursor:pointer;background:0 0;border:none;padding:0;display:block}.explorer-symbol-toggle-link:hover{text-decoration:underline}.summary-toggle,.function-selector-toggle{align-items:center;gap:var(--space-2);margin-left:var(--space-3);font-size:var(--text-xs);color:var(--text-secondary);cursor:pointer;-webkit-user-select:none;user-select:none;text-transform:none;letter-spacing:normal;font-weight:var(--weight-normal,400);white-space:nowrap;flex-shrink:0;display:inline-flex}.function-selector-flat .function-selector-toggle{margin-left:0}.function-selector-toggle>span{white-space:nowrap}.explorer-findings-list{flex-direction:column;gap:1px;display:flex}.explorer-finding-item{align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-2);cursor:pointer;border-radius:var(--radius-sm);font-size:var(--text-xs);transition:background .1s;display:flex}.explorer-finding-item:hover{background:var(--bg-secondary)}.explorer-finding-item.active{background:var(--accent-light)}.finding-sev-dot{border-radius:50%;flex-shrink:0;width:8px;height:8px}.finding-sev-dot.sev-high{background:var(--sev-high)}.finding-sev-dot.sev-medium{background:var(--sev-medium)}.finding-sev-dot.sev-low{background:var(--sev-low)}.finding-line{font-family:var(--font-mono);color:var(--text-tertiary);flex-shrink:0;min-width:36px}.finding-rule{font-family:var(--font-mono);font-weight:var(--weight-medium);color:var(--text);flex-shrink:0}.finding-msg{text-overflow:ellipsis;white-space:nowrap;color:var(--text-secondary);flex:1;overflow:hidden}.explorer-hotspot-list{padding:var(--space-1) 0}.hotspot-item{padding:var(--space-1) var(--space-3);cursor:pointer;font-size:var(--text-sm);justify-content:space-between;align-items:center;transition:background .1s;display:flex}.hotspot-item:hover{background:var(--bg-secondary)}.hotspot-item.selected{background:var(--accent-light)}.hotspot-name{text-overflow:ellipsis;white-space:nowrap;color:var(--text);flex:1;overflow:hidden}.hotspot-count{margin-left:var(--space-2);flex-shrink:0}.explorer-hint{padding:var(--space-4);font-size:var(--text-sm);color:var(--text-tertiary);text-align:center}.explorer-flow .flow-step{padding:var(--space-1) var(--space-2)}.explorer-flow .flow-step-card{padding-bottom:var(--space-1)}.flow-step-header{align-items:center;gap:var(--space-2);margin-bottom:1px;display:flex}.flow-step-var{font-size:var(--text-sm);font-family:var(--font-mono)}.flow-step-callee{font-size:var(--text-xs);color:var(--text-secondary)}.flow-step-loc{font-size:var(--text-xs);color:var(--text-tertiary)}.analysis-workspace{gap:var(--space-3);height:100%;min-height:0;padding:var(--space-3) var(--space-4);grid-template-columns:minmax(0,1fr);display:grid}.analysis-workspace-with-inspector{grid-template-columns:320px minmax(0,1fr)}.analysis-workspace-inspector-right{grid-template-columns:minmax(0,1fr) 320px}.analysis-inspector{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);padding:var(--space-3);overflow-y:auto}.analysis-inspector h3{margin:0 0 var(--space-2);font-size:var(--text-base)}.analysis-canvas{min-width:0;min-height:0}.analysis-graph-frame{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);height:100%;min-height:560px;overflow:hidden}.analysis-node-detail{gap:var(--space-2);flex-direction:column;display:flex}.explorer-analysis-content{padding:var(--space-3) var(--space-4)}@media (width<=1200px){.explorer-page-code,.explorer-page-analysis{grid-template-columns:260px 1fr}.explorer-page-code .explorer-right{display:none}.analysis-workspace-with-inspector{grid-template-columns:minmax(0,1fr)}}@media (width<=768px){.explorer-page-code,.explorer-page-analysis{grid-template-columns:1fr}.explorer-left{display:none}.explorer-file-header-top{flex-direction:column}.explorer-file-header-copy{align-items:flex-start;width:100%}.explorer-function-picker{width:100%;min-width:0}.function-selector-flat>.function-selector-field{width:100%}}.content:has(.debug-layout){max-width:none;padding:0}.debug-layout{height:calc(100vh - var(--header-height));flex-direction:row;gap:0;display:flex}.debug-sidebar{border-right:1px solid var(--border);background:var(--bg);flex-direction:column;flex-shrink:0;width:260px;transition:width .15s;display:flex;overflow:hidden}.debug-sidebar.collapsed{border-right:none;width:0}.debug-sidebar-header{padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border);font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;flex-shrink:0;justify-content:space-between;align-items:center;display:flex}.debug-sidebar-toggle{cursor:pointer;color:var(--text-tertiary);font-size:var(--text-base);background:0 0;border:none;padding:2px 4px;line-height:1}.debug-sidebar-toggle:hover{color:var(--text)}.debug-sidebar-body{flex:1;overflow-y:auto}.debug-sidebar-expand{background:var(--surface);border:1px solid var(--border);border-radius:0 var(--radius-sm) var(--radius-sm) 0;cursor:pointer;color:var(--text-tertiary);padding:var(--space-2) 4px;font-size:var(--text-base);z-index:10;border-left:none;line-height:1;position:absolute;top:50%;left:0;transform:translateY(-50%)}.debug-sidebar-expand:hover{color:var(--text);background:var(--bg-hover)}.debug-main{gap:var(--space-3);min-width:0;padding:var(--space-3) var(--space-4);flex-direction:column;flex:1;display:flex}.debug-tabs{gap:var(--space-1);border-bottom:1px solid var(--border);padding-bottom:0;display:flex;overflow-x:auto}.debug-tab{padding:var(--space-2) var(--space-3);font-size:var(--text-sm);font-weight:var(--font-medium);color:var(--text-secondary);white-space:nowrap;transition:color var(--transition-fast), border-color var(--transition-fast);border-bottom:2px solid #0000;text-decoration:none}.debug-tab:hover{color:var(--text)}.debug-tab-active{color:var(--accent);border-bottom-color:var(--accent)}.function-selector{gap:var(--space-3);padding:var(--space-2) 0;align-items:center;min-width:0;display:flex}.function-selector-path{align-items:center;gap:var(--space-2);font-size:var(--text-sm);color:var(--text-secondary);min-width:0;display:flex}.function-selector-path-label{font-size:var(--text-xs);font-weight:var(--font-medium);text-transform:uppercase;letter-spacing:.05em;flex-shrink:0}.function-selector-path-value{font-family:var(--font-mono);font-size:var(--text-sm);color:var(--text);text-overflow:ellipsis;white-space:nowrap;max-width:400px;overflow:hidden}.function-selector-field{align-items:center;gap:var(--space-2);flex:auto;min-width:0;display:flex}.function-selector-field label{font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em;flex-shrink:0}.function-selector-select{width:100%;min-width:0;max-width:100%;padding:var(--space-1) var(--space-2);font-size:var(--text-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg)}@media (width<=1200px){.explorer-file-header-top{align-items:flex-start}.explorer-file-header-copy,.explorer-function-picker{flex-basis:100%;width:100%}}@media (width<=768px){.function-selector{flex-wrap:wrap;align-items:flex-start}.function-selector-field{align-items:flex-start;gap:var(--space-1);flex-direction:column;width:100%}.function-selector-select{width:100%;min-width:0}}.debug-content{flex:1;min-height:0;overflow:auto}.debug-split{gap:var(--space-3);height:100%;min-height:500px;display:grid}.debug-split-full{grid-template-columns:minmax(0,1fr)}.debug-split-with-sidebar{grid-template-columns:minmax(0,1fr) 300px}.debug-split-main{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);flex-direction:column;min-width:0;display:flex;overflow:hidden}.debug-split-sidebar{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);padding:var(--space-3);overflow-y:auto}.debug-split-sidebar h3{margin:0 0 var(--space-2);font-size:var(--text-base)}.debug-toolbar{align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-3);border-bottom:1px solid var(--border);font-size:var(--text-sm);display:flex}.debug-toolbar label{align-items:center;gap:var(--space-1);display:flex}.debug-toolbar-label{font-size:var(--text-xs);font-weight:var(--font-medium);text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary)}.debug-toolbar select{padding:2px var(--space-1);font-size:var(--text-sm);border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg)}.debug-node-detail{gap:var(--space-2);flex-direction:column;display:flex}.debug-detail-row{flex-direction:column;gap:2px;display:flex}.debug-detail-label{font-size:var(--text-xs);font-weight:var(--font-medium);color:var(--text-secondary);text-transform:uppercase;letter-spacing:.05em}.debug-detail-value{font-size:var(--text-sm);word-break:break-all}.graph-renderer-container{background:linear-gradient(180deg, var(--bg), var(--bg-secondary));flex-direction:column;width:100%;height:100%;min-height:400px;display:flex;overflow:hidden}.graph-renderer{background:var(--bg-secondary);background-image:radial-gradient(circle, var(--border-light) 1px, transparent 1px);background-size:20px 20px;flex:1;width:100%;min-height:0}.graph-surface{background:radial-gradient(circle at top left, #5856d614, transparent 28%), linear-gradient(180deg, var(--bg), var(--bg-secondary));flex:1;min-height:0;position:relative}.graph-surface>canvas{position:absolute;inset:0}.graph-loading-overlay{right:var(--space-3);bottom:var(--space-3);z-index:3;border:1px solid var(--border);color:var(--text-secondary);font-size:var(--text-xs);box-shadow:var(--shadow-sm);-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:#ffffffdb;border-radius:999px;padding:6px 10px;position:absolute}.graph-toolbar{align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-2);border-bottom:1px solid var(--border);background:linear-gradient(180deg, var(--bg), var(--bg-secondary));flex-wrap:wrap;flex-shrink:0;justify-content:space-between;min-height:40px;display:flex}.graph-toolbar-group,.graph-toolbar-extras{align-items:center;gap:var(--space-1);flex-wrap:wrap;display:flex}.graph-toolbar-btn{border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--bg);color:var(--text-secondary);cursor:pointer;font-size:11px;font-family:var(--font-mono);align-items:center;gap:2px;padding:3px 6px;line-height:1;transition:background .1s,color .1s,border-color .1s;display:inline-flex}.graph-toolbar-btn:disabled{opacity:.45;cursor:not-allowed}.graph-toolbar-btn:hover{background:var(--bg-secondary);color:var(--text);border-color:var(--text-tertiary)}.graph-toolbar-btn-active{background:var(--accent-light);color:var(--accent);border-color:var(--accent)}.graph-toolbar-zoom{font-family:var(--font-mono);color:var(--text-tertiary);text-align:center;-webkit-user-select:none;user-select:none;min-width:36px;font-size:10px}.graph-toolbar-sep{background:var(--border);width:1px;height:16px;margin:0 var(--space-1)}.graph-toolbar-field,.graph-toolbar-check{color:var(--text-secondary);font-size:11px;font-family:var(--font-mono);align-items:center;gap:6px;padding:0 4px;display:inline-flex}.graph-toolbar-field span,.graph-toolbar-check span{text-transform:uppercase;letter-spacing:.05em}.graph-toolbar-field-compact strong{min-width:10px;color:var(--text);font-size:11px}.graph-toolbar-input,.graph-toolbar-select{border:1px solid var(--border);border-radius:var(--radius-sm);min-height:26px;color:var(--text);font-size:12px;font-family:var(--font-mono);background:#ffffffe0;padding:4px 8px}.graph-toolbar-input{min-width:150px}.graph-toolbar-select{max-width:220px}.graph-toolbar-range{width:72px}.graph-toolbar-check input{accent-color:var(--accent)}.graph-toolbar-status{margin-left:auto}.graph-toolbar-pill{border:1px solid var(--border);color:var(--text-secondary);font-size:11px;font-family:var(--font-mono);background:#ffffffe0;border-radius:999px;align-items:center;padding:4px 8px;display:inline-flex}.ssa-viewer{gap:var(--space-3);flex-direction:column;display:flex}.ssa-header{padding:var(--space-1) 0}.ssa-block{border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);overflow:hidden}.ssa-block-entry{border-left:3px solid var(--success)}.ssa-block-header{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:var(--bg-secondary);border-bottom:1px solid var(--border);font-size:var(--text-sm);display:flex}.ssa-block-id{font-family:var(--font-mono);font-weight:var(--font-bold);font-size:var(--text-sm)}.ssa-block-preds,.ssa-block-succs{font-size:var(--text-xs);font-family:var(--font-mono)}.ssa-phi-section{padding:var(--space-1) var(--space-3);border-bottom:1px solid var(--border);background:#5856d60d}.ssa-body-section{padding:var(--space-1) var(--space-3)}.ssa-inst{font-family:var(--font-mono);font-size:var(--text-sm);white-space:nowrap;line-height:1.6}.ssa-inst-phi{color:var(--accent)}.ssa-value{color:var(--accent);font-weight:var(--font-semibold)}.ssa-eq{color:var(--text-secondary)}.ssa-op{color:var(--text);font-weight:var(--font-medium)}.ssa-operands{color:var(--text-secondary)}.ssa-var-name{color:var(--text-tertiary);font-style:italic}.ssa-line-ref{color:var(--text-tertiary);font-size:var(--text-xs);margin-left:var(--space-2)}.ssa-terminator{padding:var(--space-1) var(--space-3);font-family:var(--font-mono);font-size:var(--text-sm);color:var(--text-secondary);border-top:1px solid var(--border);background:var(--bg-secondary)}.badge-info{font-size:var(--text-xs);font-weight:var(--font-medium);border-radius:var(--radius-sm);background:var(--accent-light);color:var(--accent);padding:1px 6px;display:inline-block}.badge-success{font-size:var(--text-xs);font-weight:var(--font-medium);border-radius:var(--radius-sm);color:var(--success);background:#2ecc711a;padding:1px 6px;display:inline-block}.cap-badge{font-size:var(--text-xs);font-family:var(--font-mono);font-weight:var(--font-medium);border-radius:var(--radius-sm);background:var(--bg-tertiary);color:var(--text-secondary);margin:1px 2px;padding:1px 6px;display:inline-block}.cap-badge-source{color:var(--success);background:#2ecc711a}.cap-badge-sanitizer{color:var(--accent);background:#5856d61a}.cap-badge-sink{color:var(--sev-high);background:#e74c3c1a}.taint-viewer{gap:var(--space-4);flex-direction:column;display:flex}.taint-events-section h3,.taint-blocks-section h3{margin:0 0 var(--space-2);font-size:var(--text-base)}.taint-event{border:1px solid var(--sev-high);border-radius:var(--radius);padding:var(--space-2) var(--space-3);margin-bottom:var(--space-2);background:#e74c3c08}.taint-event-validated{border-color:var(--success);background:#2ecc7108}.taint-event-header{align-items:center;gap:var(--space-2);font-weight:var(--font-medium);font-size:var(--text-sm);margin-bottom:var(--space-1);display:flex}.taint-event-caps{align-items:center;gap:var(--space-1);font-size:var(--text-sm);margin-bottom:var(--space-1);display:flex}.taint-event-values{flex-direction:column;gap:2px;display:flex}.taint-block-state{border:1px solid var(--border);border-radius:var(--radius);margin-bottom:var(--space-2);overflow:hidden}.taint-block-state-header{align-items:center;gap:var(--space-2);padding:var(--space-1) var(--space-3);background:var(--bg-secondary);border-bottom:1px solid var(--border);font-size:var(--text-sm);display:flex}.taint-block-state-values{padding:var(--space-1) var(--space-3)}.taint-value{align-items:center;gap:var(--space-2);font-size:var(--text-sm);padding:2px 0;display:flex}.taint-value-id{font-family:var(--font-mono);font-weight:var(--font-semibold);color:var(--accent);min-width:40px}.taint-value-name{font-family:var(--font-mono);color:var(--text-secondary);min-width:80px}.taint-value-caps{gap:2px;display:flex}.abstract-interp-viewer{gap:var(--space-3);flex-direction:column;display:flex}.abstract-block{border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.abstract-block-header{align-items:center;gap:var(--space-2);padding:var(--space-2) var(--space-3);background:var(--bg-secondary);border-bottom:1px solid var(--border);font-size:var(--text-sm);display:flex}.abstract-block-header:last-child{border-bottom:0}.abstract-subtitle{padding:var(--space-2) var(--space-3);background:var(--bg);border-bottom:1px solid var(--border);font-size:var(--text-xs);color:var(--text-secondary);margin:0;line-height:1.4}.abstract-empty{padding:var(--space-2) var(--space-3);font-size:var(--text-sm);color:var(--text-secondary);margin:0}.abstract-table{width:100%;font-size:var(--text-sm);border-collapse:collapse}.abstract-table th{text-align:left;padding:var(--space-2);font-size:var(--text-xs);font-weight:var(--weight-medium,500);text-transform:uppercase;letter-spacing:.04em;color:var(--text-secondary);background:var(--bg-secondary);border-bottom:1px solid var(--border)}.abstract-table td{padding:var(--space-2);border-top:1px solid var(--border);vertical-align:middle}.abstract-table tbody tr:first-child td{border-top:0}.abstract-table tbody tr:hover{background:var(--bg-secondary)}.auth-detail-list{padding:var(--space-1) 0;background:var(--bg);flex-direction:column;display:flex}.auth-detail-row{gap:var(--space-3);padding:var(--space-1) var(--space-3);grid-template-columns:minmax(160px,max-content) 1fr;align-items:baseline;display:grid}.auth-detail-label{font-size:var(--text-xs);font-weight:var(--weight-medium,500);text-transform:uppercase;letter-spacing:.04em;color:var(--text-secondary)}.auth-detail-value{font-size:var(--text-sm);word-break:break-word;color:var(--text)}.auth-subsection{border-top:1px solid var(--border);background:var(--bg)}.abstract-block-header+.auth-subsection{border-top:0}.auth-subsection-title{padding:var(--space-2) var(--space-3);font-size:var(--text-xs);font-weight:var(--weight-semibold,600);text-transform:uppercase;letter-spacing:.05em;color:var(--text-secondary);background:var(--bg-secondary);border-bottom:1px solid var(--border)}.auth-subject-chips{flex-wrap:wrap;gap:4px;display:inline-flex}.symex-viewer{gap:var(--space-4);flex-direction:column;display:flex}.symex-section h3{margin:0 0 var(--space-2);font-size:var(--text-base)}.symex-roots{gap:var(--space-1);flex-wrap:wrap;display:flex}.symex-constraint{align-items:center;gap:var(--space-2);padding:var(--space-1) 0;font-size:var(--text-sm);display:flex}.symex-polarity{font-size:var(--text-xs);font-weight:var(--font-bold);border-radius:var(--radius-sm);padding:1px 6px}.symex-true{color:var(--success);background:#2ecc711a}.symex-false{color:var(--sev-high);background:#e74c3c1a}.symex-table{width:100%;font-size:var(--text-sm);border-collapse:collapse;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.symex-table th{text-align:left;padding:var(--space-2);font-size:var(--text-xs);font-weight:var(--weight-medium,500);text-transform:uppercase;letter-spacing:.04em;color:var(--text-secondary);background:var(--bg-secondary);border-bottom:1px solid var(--border)}.symex-table td{padding:var(--space-2);border-top:1px solid var(--border);vertical-align:middle}.symex-table tbody tr:first-child td{border-top:0}.symex-table tbody tr:hover{background:var(--bg-secondary)}.summary-explorer{gap:var(--space-2);flex-direction:column;display:flex}.summary-header{padding:var(--space-1) 0}.summary-table{width:100%;font-size:var(--text-sm);border-collapse:collapse}.summary-table th{text-align:left;padding:var(--space-1) var(--space-2);font-size:var(--text-xs);text-transform:uppercase;color:var(--text-secondary);background:var(--bg-secondary);border-bottom:1px solid var(--border)}.summary-table td{padding:var(--space-1) var(--space-2);border-bottom:1px solid var(--border);vertical-align:top}.summary-table tbody tr:hover{background:var(--bg-secondary)}.summary-detail{padding:var(--space-2) var(--space-3);background:var(--bg-tertiary);gap:var(--space-2);flex-direction:column;display:flex}.summary-ssa-detail{margin-top:var(--space-2);padding-top:var(--space-2);border-top:1px solid var(--border)}.summary-ssa-detail h4{margin:0 0 var(--space-1);font-size:var(--text-sm);color:var(--accent)}.debug-landing{text-align:center;padding:var(--space-6) 0}.debug-landing h2{margin:0 0 var(--space-2)}.debug-landing-grid{gap:var(--space-3);margin-top:var(--space-4);text-align:left;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));display:grid}.debug-landing-grid .card{padding:var(--space-3)}.debug-landing-grid .card h3{margin:0 0 var(--space-1);font-size:var(--text-sm);font-weight:var(--font-semibold)}.debug-landing-grid .card p{font-size:var(--text-sm);color:var(--text-secondary);margin:0}.mono{font-family:var(--font-mono)}[data-theme=dark]{--bg:#0e0f13;--bg-secondary:#16181d;--bg-tertiary:#1d1f26;--text:#ededf2;--text-secondary:#a4a6ae;--text-tertiary:#7c7f88;--border:#2a2c33;--border-light:#1f2128;--accent:#7d7afa;--accent-light:#2a2756;--sev-high:#f06860;--sev-high-bg:#2c1716;--sev-medium:#f0a05a;--sev-medium-bg:#2c2014;--sev-low:#5fb0e8;--sev-low-bg:#122231;--success:#4dd183;--success-bg:#112720;--conf-high:#4dd183;--conf-high-bg:#112720;--conf-medium:#f0a05a;--conf-medium-bg:#2c2014;--conf-low:#8d8f97;--conf-low-bg:#1d1f26;--shadow:0 1px 3px #0006;--shadow-sm:0 1px 2px #0000004d;--shadow-md:0 2px 8px #0006;--shadow-lg:0 4px 12px #00000080;--shadow-xl:0 8px 24px #0009;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=dark] body{background:var(--bg)}[data-theme=hc-light]{--bg:#fff;--bg-secondary:#f2f2f2;--bg-tertiary:#e2e2e2;--text:#000;--text-secondary:#1a1a1a;--text-tertiary:#2b2b2b;--border:#000;--border-light:#4a4a4a;--accent:#0000c8;--accent-light:#d8d8ff;--sev-high:#b30000;--sev-high-bg:#ffe0e0;--sev-medium:#8a3b00;--sev-medium-bg:#ffe7d2;--sev-low:#00408a;--sev-low-bg:#d6e8ff;--success:#006e2e;--success-bg:#d6f5dc;--conf-high:#006e2e;--conf-high-bg:#d6f5dc;--conf-medium:#8a3b00;--conf-medium-bg:#ffe7d2;--conf-low:#2b2b2b;--conf-low-bg:#e2e2e2;--shadow:0 0 0 1px #000;--shadow-sm:0 0 0 1px #000;--shadow-md:0 0 0 1px #000;--shadow-lg:0 0 0 2px #000;--shadow-xl:0 0 0 2px #000;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}[data-theme=hc-light] body{background:var(--bg)}[data-theme=hc-dark]{--bg:#000;--bg-secondary:#0d0d0d;--bg-tertiary:#1a1a1a;--text:#fff;--text-secondary:#ededed;--text-tertiary:#d4d4d4;--border:#fff;--border-light:#b8b8b8;--accent:#8ab4ff;--accent-light:#1a2540;--sev-high:#ff8a80;--sev-high-bg:#3a0000;--sev-medium:#ffc266;--sev-medium-bg:#3a2200;--sev-low:#82c8ff;--sev-low-bg:#00263d;--success:#7cf09a;--success-bg:#002e15;--conf-high:#7cf09a;--conf-high-bg:#002e15;--conf-medium:#ffc266;--conf-medium-bg:#3a2200;--conf-low:#d4d4d4;--conf-low-bg:#1a1a1a;--shadow:0 0 0 1px #fff;--shadow-sm:0 0 0 1px #fff;--shadow-md:0 0 0 1px #fff;--shadow-lg:0 0 0 2px #fff;--shadow-xl:0 0 0 2px #fff;--lightningcss-light: ;--lightningcss-dark:initial;color-scheme:dark}[data-theme=hc-dark] body{background:var(--bg)}[data-theme=hc-light] .btn,[data-theme=hc-dark] .btn,[data-theme=hc-light] input,[data-theme=hc-dark] input,[data-theme=hc-light] select,[data-theme=hc-dark] select,[data-theme=hc-light] textarea,[data-theme=hc-dark] textarea{border-width:2px}[data-theme=hc-light] :focus-visible,[data-theme=hc-dark] :focus-visible{outline:2px solid var(--accent);outline-offset:2px}.loading{gap:var(--space-3);flex-direction:row}.spinner{border:2px solid var(--border);border-top-color:var(--accent);border-radius:50%;flex-shrink:0;width:16px;height:16px;animation:.7s linear infinite spinner-rotate;display:inline-block}.loading-message{font-size:var(--text-sm);color:var(--text-tertiary)}@keyframes spinner-rotate{to{transform:rotate(360deg)}}.error-state{color:var(--text)}.error-state h3{font-size:var(--text-lg);color:var(--sev-high);margin-bottom:var(--space-2)}.error-state p{color:var(--text-secondary);margin-bottom:var(--space-2)}.error-state .error-hint{font-size:var(--text-sm);color:var(--text-tertiary)}.error-state .error-retry{margin-top:var(--space-3)}.btn-secondary{background:var(--bg);color:var(--text-secondary);border-color:var(--border)}.btn-secondary:hover{background:var(--bg-secondary);color:var(--text)}.btn-ghost{color:var(--text-secondary);background:0 0;border-color:#0000}.btn-ghost:hover{background:var(--bg-secondary);color:var(--text);border-color:#0000}.btn-icon{justify-content:center;width:30px;height:30px;padding:6px}.btn-icon.btn-sm{width:26px;height:26px;padding:4px}.toaster{bottom:var(--space-5);right:var(--space-5);z-index:1000;gap:var(--space-2);pointer-events:none;flex-direction:column;max-width:420px;display:flex;position:fixed}.toast{pointer-events:auto;align-items:flex-start;gap:var(--space-3);padding:var(--space-3) var(--space-4);background:var(--bg);border:1px solid var(--border);border-left:3px solid var(--text-tertiary);border-radius:var(--radius);box-shadow:var(--shadow-lg);font-size:var(--text-sm);animation:.16s ease-out toast-in;display:flex}.toast-info{border-left-color:var(--sev-low)}.toast-success{border-left-color:var(--success)}.toast-warning{border-left-color:var(--sev-medium)}.toast-error{border-left-color:var(--sev-high)}.toast-body{flex:1;min-width:0}.toast-title{font-weight:var(--weight-semibold);color:var(--text);margin-bottom:2px}.toast-message{color:var(--text-secondary);word-wrap:break-word}.toast-close{color:var(--text-tertiary);cursor:pointer;border-radius:var(--radius-sm);background:0 0;border:none;flex-shrink:0;align-items:center;padding:2px;display:inline-flex}.toast-close:hover{color:var(--text);background:var(--bg-secondary)}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.theme-toggle{color:var(--text-secondary)}.theme-toggle:hover{color:var(--text)}.palette-trigger{color:var(--text-tertiary);background:var(--bg-secondary);border-color:var(--border);gap:8px}.palette-trigger:hover{color:var(--text);background:var(--bg-tertiary)}.palette-trigger kbd{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-sm);font-size:var(--text-xs);font-family:var(--font);color:var(--text-tertiary);padding:1px 5px}.palette-overlay{z-index:999;justify-content:center;align-items:flex-start;padding-top:12vh;display:flex;position:fixed;inset:0}.palette-backdrop{-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px);background:#0a0a0e73;position:absolute;inset:0}.palette{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-lg);width:min(560px,92vw);max-height:70vh;box-shadow:var(--shadow-xl);flex-direction:column;display:flex;position:relative;overflow:hidden}.palette-input{width:100%;padding:var(--space-4) var(--space-5);font-size:var(--text-lg);background:var(--bg);color:var(--text);border:0;border-bottom:1px solid var(--border);font-family:var(--font);outline:0}.palette-input::placeholder{color:var(--text-tertiary)}.palette-list{padding:var(--space-2) 0;margin:0;list-style:none;overflow-y:auto}.palette-list ul{margin:0;padding:0;list-style:none}.palette-group-label{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.05em;color:var(--text-tertiary);padding:var(--space-2) var(--space-5) var(--space-1);font-weight:var(--weight-semibold)}.palette-item{align-items:center;gap:var(--space-3);padding:var(--space-2) var(--space-5);cursor:pointer;font-size:var(--text-base);color:var(--text);display:flex}.palette-item.active{background:var(--accent-light);color:var(--text)}.palette-icon{color:var(--text-tertiary);flex-shrink:0;display:inline-flex}.palette-label{white-space:nowrap;text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}.palette-hint{color:var(--text-tertiary);font-size:var(--text-sm)}.palette-shortcut{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);font-family:var(--font);font-size:var(--text-xs);color:var(--text-tertiary);padding:1px 6px}.palette-empty{padding:var(--space-4) var(--space-5);color:var(--text-tertiary);font-size:var(--text-sm);text-align:center}.shortcuts-modal{background:var(--bg);border:1px solid var(--border);border-radius:var(--radius-lg);width:min(560px,92vw);max-height:80vh;box-shadow:var(--shadow-xl);flex-direction:column;display:flex;position:relative;overflow:hidden}.shortcuts-header{padding:var(--space-4) var(--space-5);border-bottom:1px solid var(--border);justify-content:space-between;align-items:center;display:flex}.shortcuts-header h2{font-size:var(--text-xl);font-weight:var(--weight-semibold);color:var(--text);margin:0}.shortcuts-body{padding:var(--space-4) var(--space-5);overflow-y:auto}.shortcuts-body section{margin-bottom:var(--space-5)}.shortcuts-body section:last-child{margin-bottom:0}.shortcuts-body h3{font-size:var(--text-xs);text-transform:uppercase;letter-spacing:.05em;color:var(--text-tertiary);margin-bottom:var(--space-2);font-weight:var(--weight-semibold)}.shortcuts-body dl{gap:var(--space-2);flex-direction:column;display:flex}.shortcut-row{align-items:center;gap:var(--space-4);font-size:var(--text-sm);display:flex}.shortcut-row dt{align-items:center;gap:var(--space-1);flex:0 0 130px;display:inline-flex}.shortcut-row dd{color:var(--text-secondary);flex:1}.shortcut-row kbd,.shortcuts-body kbd{background:var(--bg-secondary);border:1px solid var(--border);border-radius:var(--radius-sm);font-family:var(--font);font-size:var(--text-xs);color:var(--text);border-bottom-width:2px;padding:2px 6px}.shortcut-sep{color:var(--text-tertiary);font-size:var(--text-xs);margin:0 var(--space-1)}tr.cursor{box-shadow:inset 3px 0 0 var(--accent)}tr.cursor td{background:var(--accent-light)}
/*$vite$:1*/