@import "https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;700&display=swap";:root{--bg:#0a0c08;--surface:#141812;--surface-2:#1c2118;--surface-3:#242a1e;--border:#2a3024;--border-bright:#3d4530;--fg:#e8f0d8;--muted:#7a8470;--muted-2:#555c4a;--accent:#d4ff3a;--accent-dim:#9bbf2a;--safe:#4ade80;--warn:#ff9500;--danger:#ff3a3a;--info:#38bdf8}*{box-sizing:border-box}html,body,#root{background:var(--bg);color:var(--fg);width:100%;min-height:100vh;margin:0;padding:0;font-family:Space Grotesk,sans-serif;font-size:13px}body,#root{background-color:var(--bg);min-height:100vh}body{background:radial-gradient(ellipse at 15% 0%, #d4ff3a12 0%, transparent 45%), radial-gradient(ellipse at 85% 100%, #38bdf80d 0%, transparent 45%), var(--bg)}.top-bar{border-bottom:1px solid var(--border);-webkit-backdrop-filter:blur(12px);backdrop-filter:blur(12px);z-index:50;background:#141812d9;height:56px;position:sticky;top:0}.camera-card{background:var(--surface);border:1px solid var(--border);border-radius:4px;transition:border-color .2s;position:relative;overflow:hidden}.camera-card:hover{border-color:var(--border-bright)}.camera-feed img{object-fit:cover;filter:brightness(.45)contrast(1.25)saturate(.5)hue-rotate(70deg);width:100%;height:100%}.scanlines:before{content:"";pointer-events:none;z-index:5;background:repeating-linear-gradient(0deg,#0000 0 2px,#0000002e 3px 4px);position:absolute;inset:0}.grid-overlay:after{content:"";pointer-events:none;z-index:4;background-image:linear-gradient(#d4ff3a0f 1px,#0000 1px),linear-gradient(90deg,#d4ff3a0f 1px,#0000 1px);background-size:32px 32px;position:absolute;inset:0}.scan-beam{background:linear-gradient(90deg, transparent, var(--accent), transparent);height:2px;box-shadow:0 0 16px var(--accent), 0 0 32px #d4ff3a66;z-index:6;animation:4.5s linear infinite scan;position:absolute;left:0;right:0}@keyframes scan{0%{opacity:0;top:-2%}10%{opacity:1}90%{opacity:1}to{opacity:0;top:102%}}.detection.warning{border-color:var(--warn)}.detection.danger{border-color:var(--danger)}.detection.safe{border-color:var(--safe)}.detection-label{background:var(--accent);color:#000;white-space:nowrap;letter-spacing:.04em;border-radius:1px;padding:2px 5px;font-family:JetBrains Mono,monospace;font-size:9px;font-weight:700;position:absolute;top:-18px;left:-1.5px}.detection.warning .detection-label{background:var(--warn)}.detection.danger .detection-label{background:var(--danger);color:#fff}.detection.safe .detection-label{background:var(--safe);color:#000}.detection:before,.detection:after{content:"";width:6px;height:6px;position:absolute}.detection:before{border-top:2px solid;border-left:2px solid;border-color:inherit;top:-2px;left:-2px}.detection:after{border-bottom:2px solid;border-right:2px solid;border-color:inherit;bottom:-2px;right:-2px}@keyframes detect-pulse{0%,to{opacity:1}50%{opacity:.7}}.blur-region{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:1px dashed var(--muted-2);z-index:6;background:#141812d9;position:absolute}.status-dot{background:var(--safe);width:7px;height:7px;box-shadow:0 0 8px var(--safe);border-radius:50%;animation:2s infinite pulse;display:inline-block}.status-dot.danger{background:var(--danger);box-shadow:0 0 8px var(--danger)}@keyframes pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.6;transform:scale(1.3)}}.rec-dot{background:var(--danger);border-radius:50%;width:7px;height:7px;animation:1.5s infinite blink}@keyframes blink{0%,50%{opacity:1}51%,to{opacity:.15}}.violation-entry{background:var(--surface-2);border:1px solid var(--border);border-left:3px solid var(--danger);cursor:pointer;border-radius:3px;margin-bottom:6px;padding:10px 11px;transition:all .15s}.violation-entry:hover{background:var(--surface-3);transform:translate(-2px)}.agent-stream{font-family:JetBrains Mono,monospace;font-size:11px;line-height:1.75}.agent-line{word-break:break-word;white-space:pre-wrap}.btn{border:1px solid var(--border-bright);background:var(--surface-2);color:var(--fg);letter-spacing:.06em;text-transform:uppercase;cursor:pointer;border-radius:2px;padding:5px 10px;font-family:JetBrains Mono,monospace;font-size:10px;font-weight:500;transition:all .15s}.btn:hover{background:var(--surface-3);border-color:var(--accent-dim);color:var(--accent)}::-webkit-scrollbar{width:5px;height:5px}::-webkit-scrollbar-track{background:0 0}::-webkit-scrollbar-thumb{background:var(--border-bright);border-radius:3px}::-webkit-scrollbar-thumb:hover{background:var(--muted)}.gauge-bar{background:var(--surface-3);border-radius:2px;height:3px;position:relative;overflow:hidden}.gauge-fill{height:100%;transition:width .6s ease-out;position:relative}.pdf-chip{background:var(--surface-3);border:1px solid var(--border);color:var(--muted);border-radius:2px;align-items:center;gap:3px;padding:2px 6px;font-family:JetBrains Mono,monospace;font-size:9px;display:inline-flex}.pdf-chip.loaded{color:var(--accent);border-color:var(--accent-dim);background:#d4ff3a0a}.severity{letter-spacing:.1em;border-radius:2px;padding:2px 5px;font-family:JetBrains Mono,monospace;font-size:9px;font-weight:700}.severity.sev1{color:var(--danger);background:#ff3a3a26;border:1px solid #ff3a3a59}.severity.sev2{color:var(--warn);background:#ff950026;border:1px solid #ff950059}.severity.sev3{color:var(--info);background:#38bdf826;border:1px solid #38bdf859}.live-num{font-feature-settings:"tnum";font-family:JetBrains Mono,monospace;font-weight:700}.tab{cursor:pointer;color:var(--muted);letter-spacing:.06em;text-transform:uppercase;border-bottom:2px solid #0000;padding:7px 12px;font-family:JetBrains Mono,monospace;font-size:10px;font-weight:500;transition:all .15s}.tab:hover{color:var(--fg)}.lift:hover{transform:translateY(-1px)}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.ptg-step{background:var(--surface-2);border:1px solid var(--border);border-radius:3px;gap:10px;padding:8px 10px;transition:all .15s;display:flex;position:relative}.ptg-step:hover{border-color:var(--border-bright)}.ptg-step-num{background:var(--accent);color:#000;border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;width:22px;height:22px;font-family:JetBrains Mono,monospace;font-size:10px;font-weight:700;display:flex}.ptg-step.done .ptg-step-num{background:var(--safe)}.ptg-step.pending .ptg-step-num{background:var(--surface-3);color:var(--muted);border:1px solid var(--border-bright)}.spark-bar{background:var(--accent-dim);width:2px;transition:height .3s}.vignette:after{content:"";pointer-events:none;z-index:3;background:radial-gradient(#0000 50%,#00000080 100%);position:absolute;inset:0}@media (width<=1100px){.camera-grid{grid-template-columns:1fr!important}}:root{--bg:#06070b;--surface:#0c0d14;--surface-2:#10111a;--border:#ffffff0f;--border-hi:#ffffff1f;--fg:#e4e4ef;--muted:#5a5b72;--accent:#00e5a0;--accent-dim:#00e5a01f;--info:#38bdf8;--safe:#22c55e;--warn:#f59e0b;--danger:#ef4444;--smoke:#f97316;--weapon:#dc2626;--violence:#c026d3}*,:before,:after{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--fg);-webkit-font-smoothing:antialiased;min-height:100vh;font-family:JetBrains Mono,monospace;overflow-x:hidden}.mono{font-family:JetBrains Mono,monospace}.lift{transition:transform .2s,box-shadow .2s}.lift:hover{transform:translateY(-2px);box-shadow:0 8px 32px #0006}.top-bar{background:var(--surface);border-bottom:1px solid var(--border);z-index:100;height:52px;position:sticky;top:0}.btn{background:var(--surface-2);border:1px solid var(--border);color:var(--muted);letter-spacing:.06em;cursor:pointer;white-space:nowrap;border-radius:3px;padding:4px 10px;font-family:JetBrains Mono,monospace;font-size:9px;font-weight:600;transition:all .15s}.btn:hover{background:var(--border-hi);color:var(--fg)}.btn.active{background:var(--accent-dim);color:var(--accent);border-color:#00e5a040}.status-dot{background:var(--safe);width:6px;height:6px;box-shadow:0 0 6px var(--safe);border-radius:50%;animation:2s infinite pulse-dot}.status-dot.warn{background:var(--warn);box-shadow:0 0 6px var(--warn)}.status-dot.danger{background:var(--danger);box-shadow:0 0 6px var(--danger);animation:1s infinite pulse-dot}@keyframes pulse-dot{0%,to{opacity:1}50%{opacity:.4}}.live-num{font-variant-numeric:tabular-nums;font-weight:700;transition:color .3s}.camera-grid{grid-template-columns:repeat(auto-fill,minmax(420px,1fr));gap:12px;display:grid}.image-diff-panel{background:var(--surface);border:1px solid var(--border);border-radius:4px;gap:12px;padding:14px;display:grid}.image-diff-header{justify-content:space-between;align-items:center;gap:12px;display:flex}.image-diff-status{letter-spacing:.18em;border:1px solid var(--border);color:var(--accent);background:#00e5a014;border-radius:999px;padding:4px 8px;font-size:8px}.image-diff-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;display:grid}.image-diff-card{background:var(--surface-2);border:1px solid var(--border);border-radius:4px;overflow:hidden}.image-diff-card img{object-fit:cover;filter:saturate(.95)contrast(1.05);width:100%;height:220px;display:block}.image-diff-label{color:var(--muted);justify-content:space-between;align-items:center;gap:8px;padding:10px;font-size:9px;display:flex}.image-diff-tag{color:var(--accent);letter-spacing:.08em;background:#00e5a01f;border-radius:3px;padding:2px 6px;font-size:8px;font-weight:700}.image-diff-tag-danger{color:var(--danger);background:#ef44441f}.image-diff-card.selected{border-color:var(--accent);box-shadow:0 16px 40px #00e5a01f}.dataset-manager{background:var(--surface);border:1px solid var(--border);border-radius:4px;gap:12px;padding:14px;display:grid}.dataset-manager-header{justify-content:space-between;align-items:center;gap:12px;display:flex}.dataset-manager-tabs{flex-wrap:wrap;gap:8px;display:flex}.dataset-manager-tab{border:1px solid var(--border);background:var(--surface-2);color:var(--muted);cursor:pointer;border-radius:4px;padding:6px 10px;font-size:10px;transition:all .2s}.dataset-manager-tab:hover{background:#ffffff0d}.dataset-manager-tab.active{border-color:var(--accent);color:var(--accent);background:#00e5a014}.dataset-manager-grid{grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;display:grid}.dataset-card{background:var(--surface-2);border:1px solid var(--border);cursor:pointer;border-radius:4px;gap:10px;padding:12px;transition:all .2s;display:grid}.dataset-card:hover{border-color:#00e5a03d;transform:translateY(-1px)}.dataset-card.selected{border-color:var(--accent);box-shadow:0 12px 32px #00e5a01f}.dataset-card-header{flex-direction:column;gap:8px;display:flex}.dataset-card-header h3{font-size:12px;line-height:1.2}.dataset-card-badge{letter-spacing:.08em;text-transform:uppercase;border-radius:999px;justify-content:center;align-items:center;padding:2px 8px;font-size:8px;font-weight:700;display:inline-flex}.dataset-card-body{gap:8px;display:grid}.dataset-card-desc{color:var(--muted);font-size:10px;line-height:1.5}.dataset-card-meta{color:var(--muted);flex-wrap:wrap;justify-content:space-between;gap:10px;font-size:9px;display:flex}.dataset-detail{border:1px solid var(--border);background:#ffffff08;border-radius:4px;gap:12px;padding:14px;display:grid}.dataset-detail-grid{grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;display:grid}.progress-bar-wrap{background:#ffffff0d;border-radius:999px;width:100%;height:6px;margin-top:6px;overflow:hidden}.progress-bar-fill{border-radius:999px;height:100%;transition:width .4s}.analysis-panel{background:var(--surface-2);border:1px solid var(--border);border-radius:4px;gap:12px;padding:12px;display:grid}.analysis-panel-header{justify-content:space-between;align-items:center;gap:10px;display:flex}.analysis-card{border:1px solid var(--border);background:#ffffff08;border-radius:4px;padding:10px}.analysis-card-title{letter-spacing:.08em;color:var(--accent);margin-bottom:8px;font-size:9px;font-weight:700}.analysis-card ul{color:var(--muted);padding-left:10px;font-size:10px;line-height:1.6;list-style:inside}.analysis-tags{flex-wrap:wrap;gap:6px;display:flex}.analysis-pill{color:var(--info);letter-spacing:.08em;background:#38bdf81f;border-radius:999px;padding:4px 8px;font-size:8px;font-weight:700}.analysis-footer{border-top:1px solid var(--border);color:var(--muted);padding-top:10px;font-size:10px}.analysis-footer p{color:var(--fg);margin-top:6px;font-size:10px;line-height:1.6}.camera-card{background:var(--surface);border:1px solid var(--border);border-radius:4px;overflow:hidden}.camera-feed{aspect-ratio:16/10;background:#000;position:relative;overflow:hidden}.camera-feed img{object-fit:cover;opacity:.7;filter:saturate(.3)contrast(1.1);width:100%;height:100%}.scanlines:after{content:"";pointer-events:none;z-index:5;background:repeating-linear-gradient(0deg,#0000,#0000 2px,#00000014 2px 4px);position:absolute;inset:0}.grid-overlay:before{content:"";pointer-events:none;z-index:4;background-color:#0000;background-image:linear-gradient(90deg,#ffffff05 1px,#0000 1px),linear-gradient(0deg,#ffffff05 1px,#0000 1px);background-position:0 0,0 0;background-repeat:repeat,repeat;background-size:10% 10%;background-attachment:scroll,scroll;background-origin:padding-box,padding-box;background-clip:border-box,border-box;position:absolute;inset:0}.vignette:before{content:"";pointer-events:none;z-index:3;background:radial-gradient(#0000 50%,#00000080 100%);position:absolute;inset:0}.scan-beam{background:linear-gradient(90deg, transparent, var(--accent), transparent);opacity:.3;z-index:6;pointer-events:none;width:100%;height:2px;animation:4s linear infinite scan-move;position:absolute;left:0}@keyframes scan-move{0%{top:-2px}to{top:100%}}.detection{border:2px solid var(--safe);z-index:8;border-radius:2px;animation:2s infinite detect-pulse;position:absolute}.detection.danger{border-color:var(--danger);animation:1s infinite detect-pulse-danger;box-shadow:0 0 8px #ef44444d}.detection.warning{border-color:var(--warn);box-shadow:0 0 6px #f59e0b33}.detection.smoke{border-color:var(--smoke);animation:1.2s infinite detect-pulse-smoke;box-shadow:0 0 10px #f9731666}.detection.weapon{border-color:var(--weapon);animation:.8s infinite detect-pulse-weapon;box-shadow:0 0 12px #dc262680}.detection.violence{border-color:var(--violence);animation:.9s infinite detect-pulse-violence;box-shadow:0 0 10px #c026d366}@keyframes detect-pulse-danger{0%,to{opacity:1;box-shadow:0 0 8px #ef44444d}50%{opacity:.6;box-shadow:0 0 16px #ef444480}}@keyframes detect-pulse-smoke{0%,to{opacity:1}50%{opacity:.5}}@keyframes detect-pulse-weapon{0%,to{opacity:1;box-shadow:0 0 12px #dc262680}50%{opacity:.5;box-shadow:0 0 24px #dc2626b3}}@keyframes detect-pulse-violence{0%,to{opacity:1}50%{opacity:.5}}.detection-label{color:var(--fg);white-space:nowrap;letter-spacing:.04em;background:#000000d9;border-radius:2px;padding:1px 5px;font-family:JetBrains Mono,monospace;font-size:8px;font-weight:600;position:absolute;top:-18px;left:-2px}.detection.danger .detection-label{color:var(--danger)}.detection.smoke .detection-label{color:var(--smoke)}.detection.weapon .detection-label{color:var(--weapon)}.detection.violence .detection-label{color:var(--violence)}.blur-region{-webkit-backdrop-filter:blur(8px);z-index:7;background:#0009;border-radius:2px;position:absolute}.rec-dot{background:var(--danger);border-radius:50%;width:6px;height:6px;animation:1s infinite pulse-dot;display:inline-block}.gauge-bar{background:var(--border);border-radius:2px;height:3px;overflow:hidden}.gauge-fill{border-radius:2px;height:100%;transition:width .6s}.spark{align-items:flex-end;gap:2px;height:18px;display:flex}.spark-bar{background:var(--accent);opacity:.3;border-radius:1px;flex:1;min-height:2px;transition:height .5s}.violation-entry{background:var(--surface-2);border:1px solid var(--border);border-left:3px solid var(--border);cursor:pointer;border-radius:3px;padding:8px 10px;transition:all .15s}.violation-entry:hover{border-color:var(--border-hi);background:#ffffff08}.violation-entry.selected{border-color:var(--accent);border-left-color:var(--accent);background:var(--accent-dim)}.violation-entry.warn{border-left-color:var(--warn)}.violation-entry.info{border-left-color:var(--info)}.violation-entry.smoke{border-left-color:var(--smoke)}.violation-entry.weapon{border-left-color:var(--weapon)}.violation-entry.violence{border-left-color:var(--violence)}.violation-entry.selected.smoke{border-color:var(--smoke);border-left-color:var(--smoke);background:#f9731614}.violation-entry.selected.weapon{border-color:var(--weapon);border-left-color:var(--weapon);background:#dc262614}.violation-entry.selected.violence{border-color:var(--violence);border-left-color:var(--violence);background:#c026d314}.severity{letter-spacing:.08em;border-radius:2px;padding:1px 5px;font-size:8px;font-weight:700;display:inline-block}.severity.sev1{color:var(--danger);background:#ef444433}.severity.sev2{color:var(--warn);background:#f59e0b33}.severity.sev3{color:var(--info);background:#38bdf833}.severity.smoke-sev{color:var(--smoke);background:#f9731633}.severity.weapon-sev{color:var(--weapon);background:#dc262633}.severity.violence-sev{color:var(--violence);background:#c026d333}.pdf-chip{color:var(--muted);border:1px solid var(--border);background:#ffffff0a;border-radius:2px;align-items:center;gap:3px;padding:1px 5px;font-size:8px;display:inline-flex}.pdf-chip.loaded{color:var(--info);border-color:#38bdf833}.ptg-step{background:var(--surface-2);border:1px solid var(--border);border-radius:3px;align-items:flex-start;gap:10px;padding:8px 10px;transition:all .15s;display:flex}.ptg-step.done{background:#22c55e0a;border-color:#22c55e33}.ptg-step.pending{opacity:.5}.ptg-step-num{border:1px solid var(--border);width:22px;height:22px;color:var(--muted);border-radius:50%;flex-shrink:0;justify-content:center;align-items:center;font-size:10px;font-weight:700;display:flex}.ptg-step.done .ptg-step-num{background:var(--safe);border-color:var(--safe);color:#000}.tab{text-align:center;letter-spacing:.06em;color:var(--muted);cursor:pointer;border-bottom:2px solid #0000;flex:1;padding:7px 0;font-size:9px;font-weight:600;transition:all .15s}.tab:hover{color:var(--fg);background:#ffffff05}.tab.active{color:var(--accent);border-bottom-color:var(--accent)}.agent-stream{scrollbar-width:thin;scrollbar-color:var(--border) transparent}.agent-stream::-webkit-scrollbar{width:4px}.agent-stream::-webkit-scrollbar-track{background:0 0}.agent-stream::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}.agent-line{white-space:pre-wrap;word-break:break-all;font-size:10px;line-height:1.8}.spin{animation:1s linear infinite spin}.cat-badge{letter-spacing:.1em;border-radius:2px;padding:1px 5px;font-size:7px;font-weight:700;display:inline-block}.cat-badge.ppe{color:var(--accent);background:#00e5a026}.cat-badge.smoke{color:var(--smoke);background:#f9731626}.cat-badge.weapon{color:var(--weapon);background:#dc262626}.cat-badge.violence{color:var(--violence);background:#c026d326}.filter-tab{letter-spacing:.06em;cursor:pointer;border:1px solid var(--border);color:var(--muted);background:0 0;border-radius:3px;align-items:center;gap:3px;padding:4px 10px;font-family:JetBrains Mono,monospace;font-size:9px;font-weight:600;transition:all .15s;display:inline-flex}.filter-tab:hover{color:var(--fg);background:#ffffff0a}.filter-tab.active{background:var(--accent-dim);color:var(--accent);border-color:#00e5a040}.filter-tab.active.smoke{color:var(--smoke);background:#f973161f;border-color:#f973164d}.filter-tab.active.weapon{color:var(--weapon);background:#dc26261f;border-color:#dc26264d}.filter-tab.active.violence{color:var(--violence);background:#c026d31f;border-color:#c026d34d}.threat-banner{background:linear-gradient(90deg,#ef444414,#f9731614,#c026d314);border:1px solid #ef444433;border-radius:4px;align-items:center;gap:10px;padding:6px 14px;display:flex}.threat-level-text{letter-spacing:.12em;color:var(--danger);font-size:11px;font-weight:800;animation:2s infinite pulse-dot}.incident-feed{scrollbar-width:thin;scrollbar-color:var(--border) transparent}.incident-feed::-webkit-scrollbar{width:4px}.incident-feed::-webkit-scrollbar-track{background:0 0}.incident-feed::-webkit-scrollbar-thumb{background:var(--border);border-radius:2px}.footer-bar{border-top:1px solid var(--border);background:var(--surface);flex-wrap:wrap;align-items:center;gap:24px;padding:8px 16px;font-size:10px;display:flex}@media (width<=900px){.camera-grid{grid-template-columns:1fr}}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
