:root{--bg-color:#0f172a;--panel-bg:#1e293bb3;--panel-border:#ffffff1a;--text-main:#f8fafc;--text-muted:#94a3b8;--accent-color:#2563eb;--accent-hover:#1d4ed8;--danger-color:#ef4444;--warning-color:#f59e0b;--success-color:#10b981;--font-family:"Inter", sans-serif;--glass-blur:blur(12px)}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-family);background-color:var(--bg-color);color:var(--text-main);background-image:radial-gradient(circle at 15%,#3b82f626,#0000 25%),radial-gradient(circle at 85% 30%,#8b5cf626,#0000 25%);background-attachment:fixed;flex-direction:column;min-height:100vh;display:flex}.hidden{display:none!important}.glass-panel{background:var(--panel-bg);-webkit-backdrop-filter:var(--glass-blur);border:1px solid var(--panel-border);border-radius:16px;box-shadow:0 4px 30px #0000001a}input,select{font-family:var(--font-family);border:1px solid var(--panel-border);color:var(--text-main);background:#0f172a99;border-radius:8px;outline:none;width:100%;padding:12px 16px;transition:border-color .3s,box-shadow .3s}input:focus,select:focus{border-color:var(--accent-color);box-shadow:0 0 0 2px #3b82f640}button{font-family:var(--font-family);cursor:pointer;border:none;border-radius:8px;outline:none;padding:12px 20px;font-weight:600;transition:all .3s}button:focus-visible{box-shadow:0 0 0 2px var(--accent-color)}.primary-btn{background-color:var(--accent-color);color:#fff}.primary-btn:hover{background-color:var(--accent-hover);transform:translateY(-1px)}.secondary-btn{border:1px solid var(--panel-border);color:var(--text-main);background-color:#0000}.secondary-btn:hover{background-color:#ffffff0d}.icon-btn{color:var(--text-muted);background:0 0;justify-content:center;align-items:center;padding:8px;display:flex}.icon-btn:hover{color:var(--text-main);background:#ffffff1a}.overlay{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:100;opacity:0;pointer-events:none;background:#0f172acc;justify-content:center;align-items:center;width:100vw;height:100vh;transition:opacity .4s;display:flex;position:fixed;top:0;left:0}.overlay.active{opacity:1;pointer-events:auto}.login-card{text-align:center;width:100%;max-width:400px;padding:40px;transition:transform .4s;transform:translateY(20px)}.overlay.active .login-card{transform:translateY(0)}.login-header{margin-bottom:24px}.login-header h2{margin-bottom:8px;font-size:1.5rem;font-weight:600}.login-header p{color:var(--text-muted);font-size:.9rem}#login-form{flex-direction:column;gap:16px;display:flex}.error-text{color:var(--danger-color);margin-top:12px;font-size:.875rem}.dashboard-container{width:100%;max-width:1200px;margin:0 auto;padding:24px;animation:.5s fadeIn}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.main-header{justify-content:space-between;align-items:center;margin-bottom:24px;padding:20px 32px;display:flex}.header-content h1{background:linear-gradient(90deg,#fff,#94a3b8);-webkit-text-fill-color:transparent;-webkit-background-clip:text;margin-bottom:8px;font-size:1.75rem}.stats-badges{gap:12px;display:flex}.badge{background:#ffffff1a;border-radius:12px;padding:4px 10px;font-size:.8rem;font-weight:500}.badge-high{color:#fca5a5;background:#ef444433}.table-container{flex-direction:column;min-height:500px;padding:24px;display:flex}.table-header{justify-content:space-between;align-items:center;margin-bottom:20px;display:flex}.table-header h2{font-size:1.25rem;font-weight:500}.controls{align-items:center;gap:12px;display:flex}.search-input{width:250px;padding:8px 12px}.table-responsive{flex-grow:1;overflow-x:auto}table{border-collapse:collapse;text-align:left;width:100%}th,td{border-bottom:1px solid var(--panel-border);padding:16px}th{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;font-size:.875rem;font-weight:500}tbody tr{cursor:pointer;outline:none;transition:background-color .2s,box-shadow .2s}tbody tr:hover{background-color:#ffffff0d}tbody tr:focus-visible{box-shadow:inset 0 0 0 2px var(--accent-color);background-color:#ffffff0d}.severity-critical{color:#ff7b72}.severity-high{color:#fca5a5}.severity-medium{color:#fcd34d}.severity-low{color:#6ee7b7}.loading-state,.empty-state{color:var(--text-muted);flex-direction:column;justify-content:center;align-items:center;padding:60px 0;display:flex}.spinner{border:3px solid #ffffff1a;border-top-color:var(--accent-color);border-radius:50%;width:40px;height:40px;margin-bottom:16px;animation:1s ease-in-out infinite spin}@keyframes spin{to{transform:rotate(360deg)}}.modal{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:200;opacity:1;background:#0009;justify-content:center;align-items:center;width:100vw;height:100vh;transition:opacity .3s;display:flex;position:fixed;top:0;left:0}.modal.hidden{opacity:0;pointer-events:none}.modal-content{flex-direction:column;width:90%;max-width:800px;max-height:90vh;display:flex;overflow:hidden}.modal-header{border-bottom:1px solid var(--panel-border);justify-content:space-between;align-items:center;padding:20px 24px;display:flex}.modal-header h2{font-size:1.25rem}.close-btn{color:var(--text-muted);background:0 0;padding:0 8px;font-size:1.5rem}.close-btn:hover{color:var(--text-main)}.status-select{background:#0f172ae6;border-color:#fff3;width:auto;padding:6px 12px;font-size:.85rem}.modal-body{flex-direction:column;gap:20px;padding:24px;display:flex;overflow-y:auto}.detail-group h3{color:var(--text-muted);text-transform:uppercase;letter-spacing:.05em;margin-bottom:8px;font-size:.9rem}.code-block{white-space:pre-wrap;word-break:break-all;border:1px solid var(--panel-border);border-radius:8px;max-height:300px;font-family:monospace;font-size:.875rem;overflow-y:auto;background:#282c34!important;padding:16px!important}pre{margin:0}.frames-list{border:1px solid var(--panel-border);background:#0000004d;border-radius:8px;padding:16px;list-style-type:none}.frames-list li{border-bottom:1px dashed #ffffff1a;padding:4px 0;font-family:monospace;font-size:.875rem}.frames-list li:last-child{border-bottom:none}.status-open{color:var(--danger-color)}.status-investigating{color:var(--warning-color)}.status-fixed{color:var(--success-color)}.status-invalid{color:var(--text-muted)}.status-new{color:var(--text-main)}
