:root{--bg-primary: #07090e;--bg-secondary: #0c101a;--bg-tertiary: #131926;--bg-card: rgba(15, 22, 36, .75);--bg-card-hover: rgba(22, 32, 51, .9);--bg-glass: rgba(15, 23, 42, .65);--border-color: rgba(56, 189, 248, .15);--border-glow: rgba(0, 240, 255, .4);--border-active: #00f0ff;--accent-cyan: #00f0ff;--accent-cyan-dim: rgba(0, 240, 255, .15);--accent-blue: #3b82f6;--accent-green: #10b981;--accent-green-dim: rgba(16, 185, 129, .15);--accent-red: #ff3366;--accent-red-dim: rgba(255, 51, 102, .15);--accent-amber: #f59e0b;--accent-purple: #8b5cf6;--text-primary: #f8fafc;--text-secondary: #94a3b8;--text-muted: #64748b;--text-cyan: #38bdf8;--font-display: "Outfit", sans-serif;--font-body: "Plus Jakarta Sans", sans-serif;--font-mono: "JetBrains Mono", monospace;--radius-sm: 6px;--radius-md: 10px;--radius-lg: 14px;--radius-xl: 20px;--shadow-glow-cyan: 0 0 20px rgba(0, 240, 255, .25);--shadow-glow-red: 0 0 20px rgba(255, 51, 102, .35);--shadow-card: 0 10px 30px -10px rgba(0, 0, 0, .6)}*{box-sizing:border-box;margin:0;padding:0}body{font-family:var(--font-body);background-color:var(--bg-primary);color:var(--text-primary);min-height:100vh;overflow-x:hidden;line-height:1.5;background-image:radial-gradient(circle at 15% 15%,rgba(0,240,255,.03) 0%,transparent 40%),radial-gradient(circle at 85% 85%,rgba(59,130,246,.03) 0%,transparent 40%),linear-gradient(to bottom,#07090e,#0a0e17);background-attachment:fixed}::-webkit-scrollbar{width:6px;height:6px}::-webkit-scrollbar-track{background:var(--bg-secondary)}::-webkit-scrollbar-thumb{background:#ffffff26;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:var(--accent-cyan)}.scanline-overlay{pointer-events:none;position:absolute;top:0;right:0;bottom:0;left:0;background:linear-gradient(#12101000 50%,#00000040 50%);background-size:100% 4px;z-index:5;opacity:.35}@keyframes camera-flash{0%{opacity:0}20%{opacity:.9}to{opacity:0}}.flash-active{animation:camera-flash .35s ease-out forwards}@keyframes live-pulse{0%,to{opacity:1;transform:scale(1)}50%{opacity:.4;transform:scale(1.15)}}.animate-pulse-live{animation:live-pulse 1.5s cubic-bezier(.4,0,.6,1) infinite}@keyframes rec-blink{0%,to{opacity:1}50%{opacity:.1}}.animate-rec-blink{animation:rec-blink 1s ease-in-out infinite}.app-container{display:flex;flex-direction:column;height:100vh;overflow:hidden}.top-navbar{display:flex;align-items:center;justify-content:space-between;padding:.65rem 1.25rem;background:var(--bg-card);-webkit-backdrop-filter:blur(16px);backdrop-filter:blur(16px);border-bottom:1px solid var(--border-color);z-index:40;flex-shrink:0}.brand-section{display:flex;align-items:center;gap:.85rem}.brand-icon{width:38px;height:38px;background:linear-gradient(135deg,#00f0ff33,#3b82f61a);border:1px solid var(--accent-cyan);border-radius:var(--radius-md);display:flex;align-items:center;justify-content:center;color:var(--accent-cyan);box-shadow:var(--shadow-glow-cyan)}.brand-info h1{font-family:var(--font-display);font-size:1.05rem;font-weight:700;letter-spacing:.04em;color:#fff;display:flex;align-items:center;gap:.5rem}.brand-info p{font-family:var(--font-mono);font-size:.72rem;color:var(--text-secondary)}.navbar-center{display:flex;align-items:center;gap:1rem}.nvr-badge{display:flex;align-items:center;gap:.5rem;padding:.35rem .75rem;background:#10b9811a;border:1px solid rgba(16,185,129,.3);border-radius:9999px;font-size:.75rem;font-family:var(--font-mono);color:var(--accent-green)}.time-badge{display:flex;align-items:center;gap:.4rem;padding:.35rem .75rem;background:var(--bg-tertiary);border:1px solid var(--border-color);border-radius:var(--radius-sm);font-size:.78rem;font-family:var(--font-mono);color:var(--text-cyan)}.navbar-actions{display:flex;align-items:center;gap:.6rem}.main-layout{display:flex;flex:1;overflow:hidden;position:relative}.sidebar{width:290px;background:var(--bg-secondary);border-right:1px solid var(--border-color);display:flex;flex-direction:column;flex-shrink:0;transition:width .3s cubic-bezier(.4,0,.2,1);z-index:20}.sidebar.collapsed{width:0;overflow:hidden;border-right:none}.sidebar-header{padding:.85rem 1rem;border-bottom:1px solid var(--border-color);display:flex;align-items:center;justify-content:space-between}.sidebar-header h2{font-size:.85rem;text-transform:uppercase;letter-spacing:.08em;font-weight:700;color:var(--text-secondary)}.sidebar-search{padding:.65rem .85rem;border-bottom:1px solid var(--border-color)}.search-input-wrapper{position:relative;display:flex;align-items:center}.search-input-wrapper input{width:100%;background:var(--bg-tertiary);border:1px solid var(--border-color);border-radius:var(--radius-sm);padding:.45rem .65rem .45rem 2rem;font-size:.8rem;color:var(--text-primary);outline:none;transition:all .2s}.search-input-wrapper input:focus{border-color:var(--accent-cyan);box-shadow:0 0 8px #00f0ff33}.search-input-wrapper svg{position:absolute;left:.6rem;color:var(--text-muted)}.camera-list-scroll{flex:1;overflow-y:auto;padding:.5rem;display:flex;flex-direction:column;gap:.35rem}.camera-item{display:flex;align-items:center;justify-content:space-between;padding:.6rem .75rem;border-radius:var(--radius-sm);background:var(--bg-tertiary);border:1px solid transparent;cursor:pointer;transition:all .2s}.camera-item:hover{background:var(--bg-card-hover);border-color:#38bdf840;transform:translate(2px)}.camera-item.active{background:#00f0ff1a;border-color:var(--accent-cyan);box-shadow:inset 0 0 10px #00f0ff26}.camera-item-left{display:flex;align-items:center;gap:.6rem;min-width:0}.camera-ch-number{font-family:var(--font-mono);font-size:.7rem;font-weight:700;background:#ffffff14;padding:.15rem .4rem;border-radius:4px;color:var(--text-secondary)}.camera-item.active .camera-ch-number{background:var(--accent-cyan);color:#000}.camera-item-name{font-size:.82rem;font-weight:500;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.camera-item-sub{font-size:.68rem;color:var(--text-muted);font-family:var(--font-mono)}.viewport-container{flex:1;display:flex;flex-direction:column;overflow:hidden;background:var(--bg-primary)}.viewport-toolbar{display:flex;align-items:center;justify-content:space-between;padding:.5rem 1rem;background:#0c101acc;border-bottom:1px solid var(--border-color);flex-shrink:0}.toolbar-group{display:flex;align-items:center;gap:.4rem}.grid-selector{display:flex;background:var(--bg-tertiary);border:1px solid var(--border-color);border-radius:var(--radius-sm);padding:2px;gap:2px}.btn-grid{display:flex;align-items:center;justify-content:center;padding:.35rem .6rem;font-size:.75rem;font-family:var(--font-mono);color:var(--text-secondary);background:transparent;border:none;border-radius:4px;cursor:pointer;transition:all .15s}.btn-grid:hover{color:#fff;background:#ffffff0d}.btn-grid.active{background:var(--accent-cyan);color:#000;font-weight:700;box-shadow:0 0 10px #00f0ff4d}.btn-cyber{display:inline-flex;align-items:center;gap:.4rem;padding:.45rem .85rem;font-size:.78rem;font-weight:600;letter-spacing:.02em;background:var(--bg-tertiary);border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-primary);cursor:pointer;transition:all .2s;-webkit-user-select:none;user-select:none}.btn-cyber:hover{background:var(--bg-card-hover);border-color:var(--accent-cyan);color:#fff}.btn-cyber-primary{background:linear-gradient(135deg,#00d2ff,#0070f3);color:#000;font-weight:700;border:none}.btn-cyber-primary:hover{box-shadow:var(--shadow-glow-cyan);transform:translateY(-1px)}.btn-cyber-danger{background:#ff336626;border-color:#f366;color:#f36}.btn-cyber-danger:hover{background:#f36;color:#fff;box-shadow:var(--shadow-glow-red)}.btn-icon{width:32px;height:32px;padding:0;display:inline-flex;align-items:center;justify-content:center;background:var(--bg-tertiary);border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-secondary);cursor:pointer;transition:all .2s}.btn-icon:hover{border-color:var(--accent-cyan);color:#fff;background:var(--bg-card-hover)}.btn-icon.active{background:var(--accent-cyan);color:#000;border-color:var(--accent-cyan)}.grid-viewport{flex:1;padding:.75rem;overflow-y:auto;display:grid;gap:.75rem}.grid-1x1{grid-template-columns:1fr;grid-template-rows:1fr}.grid-2x2{grid-template-columns:repeat(2,1fr);grid-template-rows:repeat(2,1fr)}.grid-3x3{grid-template-columns:repeat(3,1fr);grid-template-rows:repeat(3,1fr)}.grid-4x4{grid-template-columns:repeat(4,1fr);grid-template-rows:repeat(4,1fr)}.camera-card{background:#000;border:1px solid var(--border-color);border-radius:var(--radius-md);overflow:hidden;display:flex;flex-direction:column;position:relative;box-shadow:var(--shadow-card);transition:border-color .2s,box-shadow .2s}.camera-card.focused{border-color:var(--accent-cyan);box-shadow:0 0 16px #00f0ff40}.camera-card-header{display:flex;align-items:center;justify-content:space-between;padding:.4rem .65rem;background:#0c101ae6;border-bottom:1px solid var(--border-color);z-index:10;flex-shrink:0}.camera-title-badge{display:flex;align-items:center;gap:.45rem;font-size:.8rem;font-weight:600;color:#fff;min-width:0}.camera-title-badge span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.stream-quality-pill{font-size:.65rem;font-family:var(--font-mono);padding:.1rem .35rem;border-radius:4px;background:#38bdf826;color:var(--accent-cyan);border:1px solid rgba(56,189,248,.3);cursor:pointer}.video-player-wrapper{flex:1;position:relative;background:#04060a;display:flex;align-items:center;justify-content:center;overflow:hidden;min-height:180px}.video-canvas{width:100%;height:100%;object-fit:contain;display:block}.osd-overlay{position:absolute;top:0;right:0;bottom:0;left:0;pointer-events:none;display:flex;flex-direction:column;justify-content:space-between;padding:.5rem;z-index:8}.osd-top{display:flex;align-items:center;justify-content:space-between}.osd-timestamp{font-family:var(--font-mono);font-size:.72rem;background:#000000a6;padding:.15rem .45rem;border-radius:4px;color:#fff;border:1px solid rgba(255,255,255,.15)}.osd-rec-badge{display:flex;align-items:center;gap:.35rem;font-family:var(--font-mono);font-size:.68rem;font-weight:700;background:#ff336640;border:1px solid #ff3366;color:#f36;padding:.15rem .45rem;border-radius:4px}.osd-bottom{display:flex;align-items:center;justify-content:space-between}.osd-cam-name{font-family:var(--font-mono);font-size:.72rem;color:#fffc;background:#000000a6;padding:.15rem .45rem;border-radius:4px}.osd-stats{font-family:var(--font-mono);font-size:.65rem;color:var(--accent-cyan);background:#000000a6;padding:.15rem .45rem;border-radius:4px}.camera-card-footer{display:flex;align-items:center;justify-content:space-between;padding:.35rem .5rem;background:#0c101af2;border-top:1px solid var(--border-color);z-index:10}.ptz-dock{width:270px;background:var(--bg-secondary);border-left:1px solid var(--border-color);display:flex;flex-direction:column;flex-shrink:0;z-index:20}.ptz-pad-container{display:grid;grid-template-columns:repeat(3,1fr);gap:.4rem;width:170px;margin:1rem auto}.ptz-btn{aspect-ratio:1;display:flex;align-items:center;justify-content:center;background:var(--bg-tertiary);border:1px solid var(--border-color);border-radius:var(--radius-sm);color:var(--text-primary);cursor:pointer;transition:all .12s;-webkit-user-select:none;user-select:none}.ptz-btn:hover{background:var(--accent-cyan);color:#000;border-color:var(--accent-cyan);box-shadow:0 0 10px #00f0ff66}.ptz-btn:active{transform:scale(.92)}.ptz-btn-center{background:#ff336626;border-color:#ff33664d;color:var(--accent-red)}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;background:#000000bf;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;z-index:100;padding:1rem}.modal-content{background:var(--bg-secondary);border:1px solid var(--border-color);border-radius:var(--radius-lg);box-shadow:0 20px 40px #000c,0 0 20px #00f0ff1a;width:100%;max-width:780px;max-height:85vh;display:flex;flex-direction:column;overflow:hidden}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:1rem 1.25rem;border-bottom:1px solid var(--border-color)}.modal-header h3{font-family:var(--font-display);font-size:1.1rem;font-weight:700;color:#fff;display:flex;align-items:center;gap:.5rem}.modal-body{flex:1;overflow-y:auto;padding:1.25rem}
