*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body{height:100%}:root{--bg: #FFFFFF;--bg-soft: #F8F9FA;--bg-muted: #EAEDED;--surface: #FFFFFF;--surface2: #F8F9FA;--border: #D5DBDB;--border-soft: #E8EAED;--text: #16191F;--text-dim: #5F6B7A;--text-muted: #8A9BA8;--accent: #0073BB;--accent-dark: #005A8D;--accent-dim: #E8F4FB;--green: #1D8102;--green-bg: #F2F8F0;--red: #D13212;--red-bg: #FDF3F1;--orange: #E07B00;--orange-bg: #FEF3E0;--yellow: #856404;--yellow-bg: #FEFAE0;--navy: #232F3E;--shadow-sm: 0 1px 3px rgba(0,0,0,.08);--shadow-md: 0 2px 8px rgba(0,0,0,.1)}body{background:var(--bg);color:var(--text);font-family:Inter,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}.app-shell{display:flex;height:100vh;overflow:hidden}.sidebar{width:220px;flex-shrink:0;background:var(--navy);border-right:none;display:flex;flex-direction:column;overflow-y:auto}.sidebar-logo{padding:16px 16px 12px;border-bottom:1px solid rgba(255,255,255,.08)}.sidebar-logo .logo-text{font-size:16px;font-weight:700;color:#fff;letter-spacing:-.01em}.sidebar-logo .logo-sub{font-size:10px;color:#fff6;margin-top:1px}.sidebar-nav{padding:8px 0;flex:1}.nav-item{display:flex;align-items:center;gap:8px;padding:7px 14px;font-size:13px;font-weight:500;color:#ffffffa6;cursor:pointer;border-left:3px solid transparent;transition:all .15s;text-decoration:none}.nav-item:hover{background:#ffffff0f;color:#ffffffe6}.nav-item.active{background:#0073bb40;color:#fff;border-left-color:#0073bb}.sidebar-footer{padding:12px 14px;border-top:1px solid rgba(255,255,255,.08);font-size:12px;color:#fff6}.main-content{flex:1;overflow-y:auto;background:var(--bg-soft)}.page-header{background:var(--bg);border-bottom:1px solid var(--border);padding:16px 24px}.page-title{font-size:20px;font-weight:700;color:var(--text);letter-spacing:-.01em}.page-body{padding:20px 24px}.card{background:var(--bg);border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-sm);padding:16px;transition:background .2s,border-color .2s}.card>.table-wrap{margin:-16px;border-radius:0 0 8px 8px;border:none;box-shadow:none}.card>.card-title+.table-wrap{margin-top:12px}.card-title{font-size:13px;font-weight:600;color:var(--text);margin-bottom:12px;padding-bottom:10px;border-bottom:1px solid var(--border)}.stat-value{font-size:28px;font-weight:700;color:var(--text);letter-spacing:-.02em;line-height:1.1}.stat-sub{font-size:12px;color:var(--text-dim);margin-top:2px}.badge{display:inline-flex;align-items:center;font-size:11px;font-weight:600;padding:2px 8px;border-radius:12px}.badge-critical{background:#fdf3f1;color:#d13212;border:1px solid #F5BEB5}.badge-high{background:#fef3e0;color:#e07b00;border:1px solid #F8D09A}.badge-medium{background:#fefae0;color:#856404;border:1px solid #F5E49A}.badge-low{background:#f2f8f0;color:#1d8102;border:1px solid #A3D99A}.badge-info{background:var(--accent-dim);color:var(--accent);border:1px solid rgba(0,115,187,.2)}.btn{display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:600;padding:6px 16px;border-radius:4px;cursor:pointer;transition:all .15s;border:1px solid transparent;text-decoration:none}.btn-primary{background:var(--accent);color:#fff;border-color:var(--accent)}.btn-primary:hover{background:var(--accent-dark);border-color:var(--accent-dark)}.btn-secondary{background:#fff;color:var(--accent);border-color:var(--accent)}.btn-secondary:hover{background:var(--accent-dim)}.btn-ghost{background:transparent;color:var(--text-dim);border-color:var(--border)}.btn-ghost:hover{background:var(--bg-soft);color:var(--text)}.btn-sm{font-size:12px;padding:4px 12px}.btn-danger{background:var(--red);color:#fff;border-color:var(--red)}.data-table,.table-wrap table,table{width:100%;border-collapse:collapse;font-size:13px}.data-table th,.table-wrap table th,table th{text-align:left;font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.05em;color:var(--text-dim);padding:8px 12px;background:var(--bg-soft);border-bottom:2px solid var(--border);border-right:1px solid var(--border);white-space:nowrap}.data-table td,.table-wrap table td,table td{padding:10px 12px;border-bottom:1px solid var(--border-soft);border-right:1px solid var(--border-soft);color:var(--text)}.data-table th:last-child,.table-wrap table th:last-child,table th:last-child{border-right:none}.data-table td:last-child,.table-wrap table td:last-child,table td:last-child{border-right:none}.data-table tr:hover td,.table-wrap table tr:hover td{background:#f0f4f8}.data-table tr:last-child td,.table-wrap table tr:last-child td{border-bottom:none}.input{width:100%}.select{background:#fff;border:1px solid var(--border);border-radius:4px;padding:7px 10px;font-size:13px;color:var(--text);outline:none;transition:border-color .15s}.input:focus,.select:focus{border-color:var(--accent);box-shadow:0 0 0 2px #0073bb1f}.input::placeholder{color:var(--text-muted)}label{font-size:12px;font-weight:600;color:var(--text-dim);display:block;margin-bottom:4px}.budget-bar{height:6px;background:var(--bg-muted);border-radius:3px;overflow:hidden}.budget-fill{height:100%;border-radius:3px;transition:width .5s}.fill-ok{background:var(--green)}.fill-warn{background:var(--orange)}.fill-over{background:var(--red)}.alert-banner{padding:10px 16px;border-radius:4px;font-size:13px;display:flex;align-items:flex-start;gap:8px}.alert-warning{background:var(--orange-bg);border:1px solid #F5C97A;color:var(--orange)}.alert-info{background:var(--accent-dim);border:1px solid rgba(0,115,187,.2);color:var(--accent)}.alert-danger{background:var(--red-bg);border:1px solid #F5BEB5;color:var(--red)}.modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;background:#0006;display:flex;align-items:center;justify-content:center;z-index:1000;padding:20px}.modal{background:#fff;border-radius:8px;box-shadow:0 8px 32px #0000002e;max-width:560px;width:100%;max-height:85vh;overflow-y:auto}.modal-header{padding:16px 20px;border-bottom:1px solid var(--border);display:flex;align-items:center;justify-content:space-between}.modal-title{font-size:15px;font-weight:700;color:var(--text)}.modal-body{padding:20px}.modal-footer{padding:14px 20px;border-top:1px solid var(--border);display:flex;gap:8px;justify-content:flex-end;background:var(--bg-soft);border-radius:0 0 8px 8px}.empty{text-align:center;padding:48px 20px;color:var(--text-dim);font-size:14px}.empty-icon{font-size:32px;margin-bottom:12px;opacity:.4}.spin{animation:spin 1s linear infinite}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.text-glow{text-shadow:none}.scan-line{display:none}.glow-blue{box-shadow:none}@media(max-width:768px){.sidebar{width:56px}.sidebar .nav-item span,.sidebar .logo-text,.sidebar .logo-sub{display:none}.page-body{padding:12px 16px}}.login-page{min-height:100vh;background:var(--bg-soft);display:flex;align-items:center;justify-content:center;padding:20px}.login-card{background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-md);padding:32px;width:100%;max-width:380px}.login-brand{font-size:20px;font-weight:700;color:var(--text);letter-spacing:-.01em}.login-tagline{font-size:13px;color:var(--text-dim);margin-bottom:24px}.login-field{margin-bottom:14px}.login-label{font-size:12px;font-weight:600;color:var(--text-dim);display:block;margin-bottom:4px}.login-error{background:var(--red-bg);border:1px solid #F5BEB5;color:var(--red);border-radius:4px;padding:8px 12px;font-size:13px;margin-bottom:14px}.shell{display:flex;height:100vh;overflow:hidden;background:var(--bg-soft)}.sidebar{width:220px;flex-shrink:0;background:var(--navy);display:flex;flex-direction:column;overflow-y:auto}.sidebar-brand{display:flex;align-items:center;gap:8px;padding:16px;border-bottom:1px solid rgba(255,255,255,.08);color:#fff;font-size:15px;font-weight:700}.sidebar-sub{font-size:10px;color:#ffffff59;margin-left:2px}.sidebar-footer{padding:12px 14px;border-top:1px solid rgba(255,255,255,.08);font-size:12px;color:#ffffff59;margin-top:auto}.sidebar-footer .user-name{color:#ffffffb3;font-weight:500}.main,.main-content{flex:1;overflow-y:auto;display:flex;flex-direction:column;min-width:0}.page-header{background:#fff;border-bottom:1px solid var(--border);padding:14px 24px;flex-shrink:0;position:sticky;top:0;z-index:10}.page-title{font-size:18px;font-weight:700;color:var(--text);letter-spacing:-.01em}.page-sub{font-size:13px;color:var(--text-dim);margin-top:2px}.page-body{padding:20px 24px;flex:1}.kpi-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:12px;margin-bottom:20px}.kpi-card{background:#fff;border:1px solid var(--border);border-radius:8px;padding:16px;box-shadow:var(--shadow-sm)}.kpi-value{font-size:26px;font-weight:700;color:var(--text);letter-spacing:-.02em;line-height:1.1}.kpi-label{font-size:12px;color:var(--text-dim);margin-top:4px}.table-card{background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-sm);overflow:hidden}.onboarding-modal{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000059;display:flex;align-items:center;justify-content:center;z-index:1000;padding:20px}@media(max-width:768px){.sidebar{width:52px}.sidebar .sidebar-brand span,.sidebar .sidebar-sub,.sidebar .nav-item span,.sidebar .sidebar-footer{display:none}.page-body{padding:12px 16px}}.grid-2{display:grid;grid-template-columns:repeat(2,1fr);gap:16px}.grid-3{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}.grid-4{display:grid;grid-template-columns:repeat(4,1fr);gap:12px}@media(max-width:1100px){.grid-4{grid-template-columns:repeat(2,1fr)}}@media(max-width:700px){.grid-4,.grid-3,.grid-2{grid-template-columns:1fr}}.stat-card{background:#fff;border:1px solid var(--border);border-radius:8px;padding:16px;box-shadow:var(--shadow-sm)}.stat-card-clickable{cursor:pointer;transition:box-shadow .15s,transform .1s,border-color .15s}.stat-card-clickable:hover{box-shadow:var(--shadow-md);transform:translateY(-1px);border-color:var(--accent)}.stat-value{font-size:26px;font-weight:700;color:var(--text);letter-spacing:-.02em;line-height:1.1}.stat-label{font-size:12px;color:var(--text-dim);margin-top:4px}.chart-wrap{background:#fff;border:1px solid var(--border);border-radius:8px;padding:20px;box-shadow:var(--shadow-sm)}.table-wrap{background:#fff;border:1px solid var(--border);border-radius:8px;box-shadow:var(--shadow-sm);overflow:hidden}.table-link{color:var(--accent);text-decoration:none;font-weight:500}.table-link:hover{text-decoration:underline}.badge-approved{background:var(--green-bg);color:var(--green);border:1px solid #A3D99A}.badge-pending{background:var(--orange-bg);color:var(--orange);border:1px solid #F8D09A}.badge-source{background:var(--bg-soft);color:var(--text-dim);border:1px solid var(--border);font-size:10px;padding:1px 6px;border-radius:10px}.role-badge{background:var(--accent-dim);color:var(--accent);border:1px solid rgba(0,115,187,.2);font-size:10px;padding:1px 6px;border-radius:10px;font-weight:600;text-transform:uppercase}.user-chip{display:flex;align-items:center;gap:6px;font-size:12px;color:#fff9}.user-chip .user-name{color:#ffffffd9;font-weight:500}.admin{background:var(--accent-dim);color:var(--accent);border:1px solid rgba(0,115,187,.2);border-radius:10px;font-size:10px;font-weight:700;padding:1px 7px;text-transform:uppercase}.logout-btn{background:none;border:none;cursor:pointer;color:#ffffff73;display:flex;align-items:center;gap:6px;font-size:12px;padding:6px 0;width:100%;transition:color .15s}.logout-btn:hover{color:#ffffffd9}.mono{font-family:DM Mono,Fira Code,monospace;font-size:12px}.page{display:flex;flex-direction:column;min-height:100%;padding:0 24px 24px}.page>.page-header{margin-left:-24px;margin-right:-24px;margin-bottom:20px}.section-title{font-size:14px;font-weight:700;color:var(--text);margin-bottom:12px}.filters{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin-bottom:16px;padding-top:16px}.filters .select{width:auto;min-width:130px}.filters .input{width:200px}.recharts-cartesian-grid-horizontal line,.recharts-cartesian-grid-vertical line{stroke:var(--border)}.recharts-tooltip-wrapper{font-size:12px}.recharts-default-tooltip{background:#fff!important;border:1px solid var(--border)!important;border-radius:6px!important;box-shadow:var(--shadow-md)!important}:root{--surface: #FFFFFF;--surface2: #F8F9FA}.tabs{display:flex;gap:0;border-bottom:1px solid var(--border);margin-bottom:16px}.tabs button,.tabs .tab{padding:8px 16px;font-size:13px;font-weight:500;color:var(--text-dim);background:none;border:none;border-bottom:2px solid transparent;cursor:pointer;transition:all .15s;margin-bottom:-1px}.tabs button:hover,.tabs .tab:hover{color:var(--text)}.tabs button.active,.tabs .tab.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.candidate-card{background:#fff;border:1px solid var(--border);border-radius:8px;margin-bottom:12px;box-shadow:var(--shadow-sm);overflow:hidden}.candidate-header{display:flex;align-items:center;justify-content:space-between;padding:12px 16px;background:var(--bg-soft);border-bottom:1px solid var(--border)}.candidate-name{font-size:14px;font-weight:600;color:var(--text)}.candidate-meta{padding:10px 16px;font-size:13px;color:var(--text-dim);display:flex;flex-wrap:wrap;gap:12px}.candidate-actions{display:flex;align-items:center;gap:8px;padding:10px 16px;border-top:1px solid var(--border);background:var(--bg-soft)}.callout{padding:10px 16px;border-radius:6px;font-size:13px;border:1px solid var(--border);background:var(--bg-soft);margin-bottom:12px}.callout-critical{background:var(--red-bg);border-color:#f5beb5;color:var(--red)}.risk-pill{display:inline-flex;align-items:center;gap:4px;font-size:11px;font-weight:700;padding:2px 8px;border-radius:10px}.risk-signals{display:flex;flex-direction:column;gap:4px}.detail-header{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;padding:16px 0;margin-bottom:16px}.detail-badges{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}.loading-section{display:flex;align-items:center;justify-content:center;padding:48px;color:var(--text-dim);font-size:13px;gap:8px}tr.uninstrumented td,.heatmap-uninstrumented td,[data-uninstrumented=true] td{background:var(--bg-muted)!important;color:var(--text-dim)!important}.heatmap-table tr[style*="opacity: 0.4"] td,.heatmap-table tr[style*="opacity:0.4"] td{opacity:1!important;background:var(--bg-muted);color:var(--text-dim)}
