:root{--bg: #0b0c0f;--bg-elev: #13151a;--bg-elev2: #191c22;--bg-hover: #1e2129;--border: #23262e;--border-strong: #2f333d;--text: #e6e7ea;--text-dim: #b4b7bf;--muted: #858a96;--accent: #34d399;--accent-dim: rgba(52, 211, 153, .16);--danger: #f87171;--warn: #fbbf24;--info: #60a5fa;--c-rec: #3d4557;--c-motion: #3b82f6;--radius: 6px;--nav-w: 68px;--nav-h: 56px;--top-h: 0px;--font: system-ui, -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;--mono: ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;color-scheme:dark}*{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--text);font:13px/1.4 var(--font);-webkit-font-smoothing:antialiased;-webkit-text-size-adjust:100%;overscroll-behavior-y:none}#app{min-height:100vh}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit;color:inherit}img,video,canvas{display:block}h1,h2,h3{margin:0;font-weight:600}h1{font-size:15px}h2{font-size:14px}ul.plain{list-style:none;margin:6px 0 0;padding:0}:focus-visible{outline:2px solid var(--accent);outline-offset:1px}.app{display:grid;grid-template-columns:var(--nav-w) minmax(0,1fr);min-height:100vh}.app.login,.app.boot{grid-template-columns:1fr}.main{min-width:0;min-height:100vh}.page{padding:10px 12px 16px;max-width:1800px}.page-head{display:flex;align-items:center;gap:10px;min-height:34px;margin-bottom:8px;flex-wrap:wrap}.page-head h1{white-space:nowrap}.spacer{flex:1}.muted{color:var(--muted)}.small{font-size:11.5px}.mono{font-family:var(--mono);font-size:12px}.ok{color:var(--accent)}.err{color:var(--danger)}.warn{color:var(--warn)}.ellipsis{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}.empty{color:var(--muted);padding:30px 10px;text-align:center}.empty.small{padding:14px 8px}.sentinel{height:32px;display:flex;align-items:center;justify-content:center}.error-box{background:#f871711a;border:1px solid rgba(248,113,113,.4);color:#fca5a5;border-radius:var(--radius);padding:8px 10px;margin:6px 0}.error-box.small{padding:6px 8px}.result-box{border-radius:var(--radius);padding:8px 10px;margin:6px 0;border:1px solid}.result-box.ok{border-color:#34d39966;background:var(--accent-dim);color:#a7f3d0}.result-box.err{border-color:#f8717166;background:#f871711a;color:#fca5a5}.result-box ul{margin:4px 0 0;padding-left:18px}.dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:var(--muted);vertical-align:middle;flex-shrink:0}.dot.ok{background:var(--accent);box-shadow:0 0 6px #34d39999}.dot.bad{background:var(--danger)}.dot.dim{background:#4b5060}.dot.live{background:var(--danger);animation:pulse 1.4s ease-in-out infinite}@keyframes pulse{0%,to{opacity:1}50%{opacity:.35}}.label-chip{--c: var(--accent);display:inline-flex;align-items:center;gap:4px;padding:1px 6px;border-radius:4px;font-size:11px;font-weight:600;line-height:16px;color:var(--c);background:color-mix(in srgb,var(--c) 16%,transparent);border:1px solid color-mix(in srgb,var(--c) 35%,transparent);white-space:nowrap}.label-chip b{font-weight:700}.label-chip.big{font-size:12px;padding:2px 8px}.motion-pill{font-size:10px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--info);background:#60a5fa26;border-radius:3px;padding:1px 5px;margin-left:6px}.status-pill{display:inline-flex;align-items:center;gap:5px}.status-pill.off{color:var(--muted)}.btn{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:var(--radius);border:1px solid var(--border-strong);background:var(--bg-elev2);color:var(--text);cursor:pointer;white-space:nowrap;line-height:1.2}.btn:hover:not(:disabled){background:var(--bg-hover);border-color:#3b404c}.btn:disabled,.btn.disabled{opacity:.45;cursor:not-allowed;pointer-events:none}.btn.small{padding:4px 8px;font-size:12px}.btn.primary{background:var(--accent);border-color:var(--accent);color:#05281b;font-weight:600}.btn.primary:hover:not(:disabled){background:#4ade9f}.btn.danger{background:var(--danger);border-color:var(--danger);color:#2b0707;font-weight:600}.icon-btn{display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;border-radius:var(--radius);border:1px solid transparent;background:transparent;color:var(--text-dim);cursor:pointer;padding:0}.icon-btn:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.icon-btn.active{color:var(--accent);background:var(--accent-dim)}.icon-btn:disabled{opacity:.35;cursor:default}.seg{display:inline-flex;border:1px solid var(--border-strong);border-radius:var(--radius);overflow:hidden}.seg button{background:var(--bg-elev2);border:0;border-right:1px solid var(--border-strong);color:var(--text-dim);padding:5px 9px;cursor:pointer;font-size:12px;min-width:32px}.seg button:last-child{border-right:0}.seg button:hover:not(:disabled){background:var(--bg-hover);color:var(--text)}.seg button.active{background:var(--accent-dim);color:var(--accent);font-weight:600}.seg button:disabled{opacity:.4;cursor:default}.confirm{display:inline-flex;align-items:center;gap:8px;color:var(--warn)}input[type=text],input[type=search],input[type=password],input[type=date],input[type=number],.input,select,textarea{background:var(--bg);border:1px solid var(--border-strong);border-radius:var(--radius);padding:5px 8px;color:var(--text);min-height:30px}input:focus,select:focus,textarea:focus{border-color:var(--accent);outline:none}select{padding-right:22px;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M1 1l4 4 4-4' fill='none' stroke='%23858a96' stroke-width='1.5'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center}label.check{display:inline-flex;align-items:center;gap:6px;cursor:pointer;white-space:nowrap}input[type=checkbox]{accent-color:var(--accent);width:15px;height:15px;margin:0}.row{display:flex;gap:10px;align-items:flex-end;flex-wrap:wrap}.row.end{justify-content:flex-end;margin-top:12px}.row label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}.kv{display:grid;grid-template-columns:max-content 1fr;gap:5px 14px;margin:0}.kv dt{color:var(--muted);font-size:12px;padding-top:1px}.kv dd{margin:0;min-width:0;overflow-wrap:anywhere}.kv.compact{gap:3px 10px;font-size:12px}.nav{position:sticky;top:0;height:100vh;height:100dvh;display:flex;flex-direction:column;align-items:stretch;background:var(--bg-elev);border-right:1px solid var(--border);padding:8px 0;z-index:20}.nav-brand{display:flex;flex-direction:column;align-items:center;gap:2px;color:var(--accent);padding:8px 0 12px;position:relative}.nav-brand-text{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--text-dim)}.nav-ws{position:absolute;top:8px;right:14px;width:6px;height:6px;border-radius:50%;background:var(--danger)}.nav-ws.open{background:var(--accent)}.nav-ws.connecting{background:var(--warn)}.nav-items{display:flex;flex-direction:column}.nav-item{display:flex;flex-direction:column;align-items:center;gap:3px;padding:10px 4px;color:var(--muted);font-size:10.5px;border:0;background:none;cursor:pointer;border-left:2px solid transparent;border-right:2px solid transparent;width:100%}.nav-item:hover{color:var(--text);background:var(--bg-hover)}.nav-item.active{color:var(--accent);border-left-color:var(--accent)}.nav-icon{position:relative;display:inline-flex}.nav-badge{position:absolute;top:-6px;right:-10px;background:var(--danger);color:#fff;font-size:9.5px;font-weight:700;line-height:14px;min-width:15px;padding:0 3px;border-radius:8px;text-align:center}.nav-foot{margin-top:auto;display:flex;flex-direction:column;align-items:center;gap:4px}.nav-active-events{font-size:10.5px;color:var(--text-dim);padding:4px 6px;border-radius:4px;background:#f871711f;white-space:nowrap}.nav-active-events .dot{width:6px;height:6px}.live-grid{display:grid;gap:6px;grid-template-columns:repeat(3,minmax(0,1fr))}.live-grid.n1{grid-template-columns:minmax(0,1fr)}.live-grid.n2,.live-grid.n3,.live-grid.n4{grid-template-columns:repeat(2,minmax(0,1fr))}.live-grid.n1 .tile{max-width:1400px}.tile{position:relative;border-radius:var(--radius);overflow:hidden;background:#000;border:1px solid var(--border);transition:border-color .15s}.tile:hover{border-color:var(--border-strong)}.tile.motion{border-color:#60a5fa8c}.tile.offline .player-poster{filter:grayscale(1) brightness(.5)}.tile-top,.tile-bottom{position:absolute;left:0;right:0;display:flex;align-items:center;gap:6px;padding:6px 8px;z-index:3;pointer-events:none}.tile-top{top:0;background:linear-gradient(#000000a6,#0000)}.tile-bottom{bottom:0;background:linear-gradient(#0000,#000000a6);padding-right:92px}.tile-top>*,.tile-bottom>*{pointer-events:auto}.tile-name{font-weight:600;font-size:12.5px;text-shadow:0 1px 2px #000;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.tile-fps,.tile-events{font-size:11px;color:var(--text-dim);text-shadow:0 1px 2px #000;display:inline-flex;align-items:center;gap:4px}.obj-badges{display:inline-flex;gap:4px;flex-wrap:wrap;justify-content:flex-end}.flag-group{display:inline-flex;gap:2px}.flag-btn{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;border-radius:4px;border:0;background:#00000059;color:#6b7080;cursor:pointer;padding:0}.flag-btn:hover{background:#ffffff1f;color:var(--text)}.flag-btn.on{color:var(--accent)}.flag-btn.on.record{color:var(--danger)}.flag-btn.on.notify{color:var(--warn)}.player{position:relative;width:100%;aspect-ratio:16 / 9;background:#000;overflow:hidden}.player.fill{position:absolute;inset:0;aspect-ratio:auto;width:auto;height:auto}.player-zoom{position:absolute;inset:0;transform-origin:0 0}.player-poster,.player-video{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;background:#000}.fit-cover .player-poster,.fit-cover .player-video{object-fit:cover}.player-video{opacity:0;z-index:2}.player.has-video .player-video{opacity:1}.player.has-video .player-poster{visibility:hidden}.player.stale .player-video{opacity:0}.player.no-recent .player-poster{filter:saturate(.6) brightness(.75)}.player-poster-event{z-index:1;cursor:pointer}.player-pills{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:5;display:flex;flex-direction:column;align-items:center;gap:4px;pointer-events:none}.player-pill{font-size:11px;font-weight:600;padding:3px 10px;border-radius:12px;background:#0000009e;color:var(--text-dim);white-space:nowrap;border:1px solid rgba(255,255,255,.08)}.player-pill.reconnecting{animation:pulse 1.4s ease-in-out infinite}.player-pill.stale-hint{color:var(--warn)}.tile.small .player-pill{font-size:9.5px;padding:1px 6px}.overlay-canvas{position:absolute;z-index:4;pointer-events:none}.player-badge{position:absolute;right:6px;bottom:6px;z-index:5;font-size:10px;font-weight:600;letter-spacing:.03em;padding:1px 5px;border-radius:3px;background:#0009;color:var(--muted);pointer-events:none;font-family:var(--mono)}.player-badge.ok{color:var(--accent)}.player-badge.warn{color:var(--warn)}.player-badge.pulse{animation:pulse 1.2s ease-in-out infinite}.tile .player-badge{bottom:8px}.page-single{display:flex;flex-direction:column;height:100vh;height:100dvh;padding-bottom:10px}.page-single .page-head{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none}.head-stats{white-space:nowrap}.single-layout{flex:1;min-height:0;display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:10px}.single-stage{position:relative;background:#000;border-radius:var(--radius);overflow:hidden;border:1px solid var(--border);min-height:200px}.single-stage .player{position:absolute;inset:0;aspect-ratio:auto;width:auto;height:auto}.single-stage{touch-action:none;user-select:none;-webkit-user-select:none}.single-stage.zoomed .player-zoom{will-change:transform}.single-stage.zoomed,.single-stage.zoomed .ptz-click-layer.center{cursor:grab}.single-stage.panning,.single-stage.panning .ptz-click-layer.center{cursor:grabbing}.zoom-pill{position:absolute;right:8px;top:8px;z-index:6;font-family:var(--mono);font-size:11px;font-weight:600;padding:2px 7px;border-radius:4px;background:#0009;color:var(--accent);border:1px solid rgba(52,211,153,.35);pointer-events:none}.zoom-badge{display:inline-flex;align-items:center;gap:2px;flex-shrink:0;padding:2px 3px 2px 8px;border-radius:var(--radius);font-family:var(--mono);font-size:12px;font-weight:600;color:var(--accent);background:var(--accent-dim);border:1px solid rgba(52,211,153,.35)}.zoom-reset{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border:0;border-radius:4px;background:transparent;color:inherit;cursor:pointer;padding:0}.zoom-reset:hover{background:#ffffff24}.ptz-wheel{display:flex;align-items:center;gap:6px}.ptz-wheel .seg{background:#14161b8c;border-color:#ffffff1f}.ptz-wheel .seg button{background:transparent}.ptz-wheel .seg button.active{background:var(--accent-dim)}.page-single .page-head .obj-badges{flex-wrap:nowrap}.single-side,.rec-side{display:flex;flex-direction:column;min-height:0;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-elev)}.side-head{display:flex;align-items:center;gap:8px;padding:8px 10px;border-bottom:1px solid var(--border)}.side-list{flex:1;overflow-y:auto;min-height:0;padding:4px}.side-event{display:flex;align-items:stretch;gap:2px}.side-event .event-card{flex:1;min-width:0}.side-event-rec{display:flex;align-items:center;padding:0 6px;color:var(--muted);border-radius:4px}.side-event-rec:hover{color:var(--accent);background:var(--bg-hover)}.single-layout.phone{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr)}.single-layout.phone .single-stage{aspect-ratio:16 / 9;min-height:0}.filters{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-bottom:8px;padding:8px;background:var(--bg-elev);border:1px solid var(--border);border-radius:var(--radius)}.chips{display:flex;flex-wrap:wrap;gap:4px}.chip{border:1px solid var(--border-strong);background:var(--bg-elev2);color:var(--text-dim);border-radius:14px;padding:4px 10px;cursor:pointer;font-size:12px}.chip.on{background:var(--accent-dim);border-color:var(--accent);color:var(--accent)}.search{display:flex;align-items:center;gap:6px;flex:1;min-width:180px;color:var(--muted)}.search input{flex:1;min-width:0}.event-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:6px}.event-card{display:flex;gap:10px;padding:6px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-elev);min-width:0;align-items:flex-start}.event-card:hover{background:var(--bg-hover);border-color:var(--border-strong)}.event-card.in-progress{border-color:#f8717173}.event-card.selected{border-color:var(--accent)}.event-thumb{position:relative;width:84px;height:84px;flex-shrink:0;border-radius:4px;overflow:hidden;background:#000}.event-thumb img{width:100%;height:100%;object-fit:cover}.event-card.compact .event-thumb{width:56px;height:56px}.event-live{position:absolute;left:3px;top:3px;background:var(--danger);color:#fff;font-size:9px;font-weight:800;padding:0 4px;border-radius:3px;line-height:14px}.event-meta{flex:1;min-width:0;display:flex;flex-direction:column;gap:3px}.event-line1,.event-line2{display:flex;align-items:center;gap:8px;flex-wrap:wrap;min-width:0}.event-line2{font-size:12px;color:var(--text-dim)}.event-score{font-family:var(--mono);font-size:12px;color:var(--text-dim)}.event-ago{margin-left:auto;color:var(--muted);font-size:11.5px;white-space:nowrap}.event-cam{font-weight:600}.event-zones{color:var(--info)}.event-sublabel{font-size:11px;padding:0 6px;border-radius:8px;background:#a78bfa33;color:#c4b5fd;margin-left:4px}.event-desc{font-size:12px;color:var(--text-dim);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.event-detail{display:grid;grid-template-columns:minmax(0,2fr) minmax(300px,1fr);gap:12px}.event-media{background:#000;border-radius:var(--radius);border:1px solid var(--border);overflow:hidden;aspect-ratio:16 / 9}.event-media .clip{width:100%;height:100%;object-fit:contain}.event-info{display:flex;flex-direction:column;gap:12px}.event-actions{display:flex;flex-wrap:wrap;gap:6px}.event-thumb-row{display:flex;align-items:center;gap:10px}.event-detail-thumb{width:96px;height:96px;object-fit:cover;border-radius:4px;border:1px solid var(--border);background:#000}.date-nav{display:inline-flex;align-items:center;gap:2px}.rec-layout{display:grid;grid-template-columns:minmax(0,1fr) 300px;gap:10px;height:calc(100vh - 210px);min-height:320px}.rec-stage{display:flex;flex-direction:column;min-height:0;background:#000;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.rec-video,.rec-placeholder{flex:1;min-height:0;width:100%;background:#000}.rec-video{object-fit:contain}.rec-video-wrap{position:relative;flex:1;min-height:0;display:flex}.rec-video-wrap .rec-video{flex:1;height:100%}.rec-clip-error{position:absolute;left:50%;top:12px;transform:translate(-50%);background:#14161be6;border:1px solid rgba(248,113,113,.5);color:#fca5a5;border-radius:var(--radius);padding:6px 10px;font-size:12px;max-width:90%;text-align:center;pointer-events:none}.rec-placeholder{position:relative}.rec-placeholder img{width:100%;height:100%;object-fit:contain;opacity:.45}.rec-hint{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--text-dim);font-size:14px;text-shadow:0 1px 3px #000}.rec-controls{display:flex;align-items:center;gap:4px;padding:4px 8px;background:var(--bg-elev);border-top:1px solid var(--border)}.rec-time{margin-left:6px;color:var(--text-dim)}.rec-events{padding:4px}.rec-event{display:grid;grid-template-columns:40px auto 1fr;grid-template-rows:auto auto;align-items:center;column-gap:8px;row-gap:1px;width:100%;text-align:left;padding:4px;border:1px solid transparent;border-radius:4px;background:none;cursor:pointer}.rec-event img{grid-row:span 2;width:40px;height:40px;object-fit:cover;border-radius:3px;background:#000}.rec-event .ellipsis{grid-column:2 / span 2}.rec-event:hover{background:var(--bg-hover)}.rec-event.selected{border-color:var(--accent);background:var(--accent-dim)}.rec-layout.phone{grid-template-columns:minmax(0,1fr);grid-template-rows:auto 220px;height:auto}.rec-layout.phone .rec-stage{min-height:0}.rec-layout.phone .rec-video-wrap,.rec-layout.phone .rec-placeholder{aspect-ratio:16 / 9;flex:none}.timeline{position:relative;margin-top:10px;padding:8px 10px 4px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg-elev)}.tl-head{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}.tl-legend{display:inline-flex;align-items:center;gap:4px;font-size:11px;color:var(--muted)}.tl-legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-left:6px}.tl-legend i.rec{background:var(--c-rec)}.tl-legend i.motion{background:var(--c-motion)}.tl-legend i.objects{background:var(--accent)}.tl-legend i.event{background:var(--warn);width:4px}.tl-wrap{position:relative;padding-bottom:16px}.tl-bar{position:relative;height:54px;background:#0d0f13;border-radius:4px;cursor:crosshair;user-select:none;border:1px solid var(--border)}.tl-bar.day{display:grid;grid-template-columns:repeat(24,1fr);gap:1px;padding:1px}.tl-hour{position:relative;background:#14161c;border-radius:2px;overflow:hidden;transition:background .1s}.tl-hour:hover{background:#1d2028}.tl-hour-fill{position:absolute;left:0;right:0;bottom:0;height:calc(var(--cov, 0) * 100%);min-height:0;background:var(--c-rec);opacity:.85}.tl-hour.rec .tl-hour-fill{background:var(--c-rec)}.tl-hour.motion .tl-hour-fill{background:var(--c-motion)}.tl-hour.objects .tl-hour-fill{background:var(--accent)}.tl-event{position:absolute;bottom:0;width:3px;height:100%;margin-left:-1px;background:var(--c, var(--warn));opacity:.85;cursor:pointer;z-index:2}.tl-bar.day .tl-event{height:30%;width:2px}.tl-event:hover{opacity:1;width:4px;z-index:4}.tl-event:before{content:"";position:absolute;left:50%;top:-3px;width:7px;height:7px;transform:translate(-50%);background:var(--c, var(--warn));border-radius:50%;display:none}.tl-bar.hour .tl-event:before{display:block}.tl-playhead{position:absolute;top:-4px;bottom:-4px;width:2px;margin-left:-1px;background:#fff;box-shadow:0 0 4px #ffffffb3;z-index:5;pointer-events:none}.tl-row{position:absolute;left:0;right:0}.tl-row.segs{top:6px;height:28px}.tl-row.motion{bottom:4px;height:10px}.tl-seg{position:absolute;top:0;height:100%;background:var(--c-rec);border-radius:1px}.tl-seg.motion{background:#2f5ea8}.tl-seg.objects{background:#1f9a6e}.tl-motion{position:absolute;top:0;height:100%;background:var(--c-motion);opacity:.8;border-radius:1px}.tl-ticks{position:relative;height:14px;margin-top:2px;font-size:10px;color:var(--muted);font-family:var(--mono)}.tl-ticks span{position:absolute;transform:translate(-50%)}.tl-ticks span:first-child{transform:none}.tl-ticks span:last-child{transform:translate(-100%)}.tl-tip{position:absolute;bottom:calc(100% - 46px);transform:translate(-50%);background:var(--bg-elev2);border:1px solid var(--border-strong);border-radius:4px;padding:3px;z-index:30;pointer-events:none;box-shadow:0 6px 20px #00000080;margin-left:10px}.tl-tip-img{width:96px;height:96px;object-fit:cover;border-radius:3px;background:#000}.tl-tip-img.wide{width:192px;height:108px}.tl-tip-text{font-size:11px;text-align:center;padding:2px 0 0;white-space:nowrap}section{margin-bottom:18px}.section-title{margin-bottom:8px}.section-head{display:flex;align-items:center;gap:8px;margin-bottom:8px;flex-wrap:wrap}.section-head .section-title{margin:0}.cam-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:8px}.cam-card{background:var(--bg-elev);border:1px solid var(--border);border-radius:var(--radius);padding:8px 10px}.cam-card-head{display:flex;align-items:center;gap:8px;margin-bottom:6px}.editor{display:flex;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--bg);height:60vh;min-height:300px;overflow:hidden}.editor-gutter{width:44px;flex-shrink:0;overflow:hidden;text-align:right;padding:8px 6px 8px 0;color:var(--muted);font-family:var(--mono);font-size:12px;line-height:18px;background:var(--bg-elev);border-right:1px solid var(--border);user-select:none}.editor-text{flex:1;border:0;border-radius:0;resize:none;padding:8px 10px;font-family:var(--mono);font-size:12px;line-height:18px;white-space:pre;tab-size:2;min-height:0;background:transparent}.editor-text:focus{outline:none}.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:8px}.card{background:var(--bg-elev);border:1px solid var(--border);border-radius:var(--radius);padding:10px 12px;min-width:0}.card.wide{grid-column:1 / -1}.card-title{font-size:11px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);margin-bottom:8px}.stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(110px,1fr));gap:8px 10px;margin-bottom:8px}.stat-label{font-size:11px;color:var(--muted)}.stat-value{font-size:18px;font-weight:600;font-variant-numeric:tabular-nums;line-height:1.2}.stat-value.warn{color:var(--warn)}.stat-sub{font-size:11px;color:var(--muted)}.bar{height:6px;border-radius:3px;background:#22252d;overflow:hidden}.bar i{display:block;height:100%;background:var(--accent)}.table-wrap{overflow-x:auto}.table{width:100%;border-collapse:collapse;font-size:12px;white-space:nowrap}.table th,.table td{text-align:left;padding:5px 8px;border-bottom:1px solid var(--border)}.table th{color:var(--muted);font-weight:600;font-size:11px}.table tbody tr:last-child td{border-bottom:0}.table a{color:var(--accent)}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}.login-card{width:100%;max-width:340px;display:flex;flex-direction:column;gap:12px;background:var(--bg-elev);border:1px solid var(--border);border-radius:10px;padding:24px}.login-brand{display:flex;align-items:center;gap:10px;color:var(--accent);font-size:20px;font-weight:700;margin-bottom:6px}.login-brand span{color:var(--text)}.login-card label{display:flex;flex-direction:column;gap:4px;font-size:12px;color:var(--muted)}.login-card input{min-height:36px}.login-card .btn{justify-content:center;min-height:36px;margin-top:4px}.toasts{position:fixed;right:12px;bottom:12px;display:flex;flex-direction:column;gap:8px;z-index:100;max-width:min(360px,calc(100vw - 24px))}.toast{display:flex;align-items:center;gap:10px;padding:8px 10px;background:var(--bg-elev2);border:1px solid var(--border-strong);border-radius:8px;box-shadow:0 8px 30px #0009;cursor:pointer;animation:toast-in .18s ease-out}@keyframes toast-in{0%{transform:translateY(8px);opacity:0}to{transform:none;opacity:1}}.toast-img{width:44px;height:44px;border-radius:4px;object-fit:cover;background:#000}.toast-body{min-width:0;flex:1}.toast-title{font-weight:600}.toast-sub{font-size:11.5px;color:var(--muted)}.toast-close{width:24px;height:24px}.modal-bg{position:fixed;inset:0;background:#0009;display:flex;align-items:center;justify-content:center;z-index:90;padding:16px}.modal{background:var(--bg-elev);border:1px solid var(--border-strong);border-radius:10px;padding:16px 18px;width:100%;max-width:380px;box-shadow:0 20px 60px #000000b3}.modal h2{margin-bottom:4px}.modal input{width:120px}@media(max-width:800px){.app{grid-template-columns:minmax(0,1fr)}.main{padding-bottom:calc(var(--nav-h) + env(safe-area-inset-bottom));min-height:0}.nav{position:fixed;inset:auto 0 0;height:calc(var(--nav-h) + env(safe-area-inset-bottom));padding:0 0 env(safe-area-inset-bottom);flex-direction:row;border-right:0;border-top:1px solid var(--border)}.nav-brand,.nav-foot{display:none}.nav-items{flex-direction:row;width:100%}.nav-item{flex:1;padding:7px 2px;border-left:0;border-right:0;border-top:2px solid transparent}.nav-item.active{border-top-color:var(--accent)}.page{padding:8px 8px 12px}.live-grid,.live-grid.n2,.live-grid.n3,.live-grid.n4{grid-template-columns:minmax(0,1fr)}.page-single{height:calc(100vh - var(--nav-h) - env(safe-area-inset-bottom));height:calc(100dvh - var(--nav-h) - env(safe-area-inset-bottom))}.event-detail,.event-list{grid-template-columns:minmax(0,1fr)}.filters select,.filters input[type=date]{flex:1;min-width:120px}.editor{height:50vh}.tl-bar{height:44px}.tl-tip-img.wide{width:128px;height:72px}.tl-ticks.hour span:not(:nth-child(3n+1)){display:none}.toasts{bottom:calc(var(--nav-h) + env(safe-area-inset-bottom) + 10px)}.page-single .page-head{flex-wrap:nowrap}.page-single .head-stats,.page-single .page-head .obj-badges,.page-single .page-head .flag-group,.page-single .page-head .zones-btn{display:none}.page-rec{display:flex;flex-direction:column}.rec-layout.phone{display:contents}.rec-layout.phone .rec-stage{order:1}.page-rec .timeline{order:2}.rec-layout.phone .rec-side{order:3;height:300px;margin-top:10px}}@media(min-width:801px)and (max-width:1100px){.live-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.single-layout{grid-template-columns:minmax(0,1fr) 260px}.rec-layout{grid-template-columns:minmax(0,1fr) 240px}}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}.settings-layout{display:grid;grid-template-columns:190px minmax(0,1fr);gap:14px;align-items:start}.settings-nav{position:sticky;top:10px;display:flex;flex-direction:column;gap:1px;padding:4px 0}.settings-nav-item{padding:7px 10px;border-radius:var(--radius);color:var(--text-dim);border-left:2px solid transparent;font-size:12.5px}.settings-nav-item:hover{background:var(--bg-hover);color:var(--text)}.settings-nav-item.active{color:var(--accent);background:var(--accent-dim);border-left-color:var(--accent)}.settings-body{min-width:0}.settings-body .page-head{margin-bottom:10px}.crumb{color:var(--muted);font-weight:500}.crumb:hover{color:var(--text)}.link{color:var(--accent)}.banner{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:8px 10px;border-radius:var(--radius);border:1px solid;margin-bottom:10px;font-size:12.5px}.banner.warn{border-color:#fbbf2473;background:#fbbf241a;color:#fde68a}.banner code{font-family:var(--mono);font-size:11.5px}.form-card{margin-bottom:12px}.form-card-head{display:flex;align-items:center;gap:8px;margin-bottom:8px}.form-card-head .card-title{margin-bottom:0}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 18px}.field{min-width:0;display:flex;flex-direction:column;gap:4px}.field.wide{grid-column:1 / -1}.field-label{font-size:11.5px;font-weight:600;color:var(--text-dim)}.field-ctl{min-width:0}.field-ctl>.input{width:100%}.field-help{font-size:11.5px;color:var(--muted);line-height:1.35}.input:disabled{opacity:.6}textarea.input{width:100%;resize:vertical;line-height:1.4}.num-wrap{display:inline-flex;align-items:center;gap:6px}.input.num{width:110px;font-variant-numeric:tabular-nums}.num-unit{color:var(--muted);font-size:12px}.row-inline{display:flex;align-items:center;gap:8px;min-width:0}.row-inline>.input{flex:1;min-width:0}.row-inline.wrap{flex-wrap:wrap}input[type=range]{flex:1;accent-color:var(--accent);min-width:120px}.range-val{width:40px;text-align:right}.toggle{display:inline-flex;align-items:center;gap:8px;cursor:pointer;user-select:none}.toggle input{position:absolute;opacity:0;width:0;height:0}.toggle-track{position:relative;width:32px;height:18px;border-radius:9px;background:#2b2f3a;border:1px solid var(--border-strong);transition:background .15s;flex-shrink:0}.toggle-knob{position:absolute;top:2px;left:2px;width:12px;height:12px;border-radius:50%;background:#9aa0ad;transition:transform .15s,background .15s}.toggle.on .toggle-track{background:var(--accent-dim);border-color:var(--accent)}.toggle.on .toggle-knob{transform:translate(14px);background:var(--accent)}.toggle input:focus-visible+.toggle-track{outline:2px solid var(--accent);outline-offset:1px}.toggle.disabled{opacity:.5;cursor:default}.toggle-label{font-size:12.5px}.chip{--c: var(--accent)}.chip.on{background:color-mix(in srgb,var(--c) 16%,transparent);border-color:var(--c);color:var(--c)}.chip.small{padding:2px 8px;font-size:11.5px}.chip-add{appearance:none;background-image:none;padding-right:10px;min-height:0;color:var(--muted)}.chips-hint,.chips .chip{align-self:center}.str-list,.kv-rows{display:flex;flex-direction:column;gap:4px}.str-row,.kv-row{display:flex;align-items:center;gap:6px}.str-row>.input,.kv-row>.input{flex:1;min-width:0}.kv-row>select.input{flex:1}.kv-key{flex:1;padding:0 4px}.kv-row .num-wrap{flex:1}.save-bar{display:flex;align-items:center;gap:8px;margin-top:14px;padding-top:10px;border-top:1px solid var(--border);flex-wrap:wrap}.save-err{max-width:60%}.spinner-wrap{display:inline-flex;align-items:center;gap:8px}.spinner{width:14px;height:14px;border-radius:50%;border:2px solid currentColor;border-right-color:transparent;animation:spin .8s linear infinite;display:inline-block}@keyframes spin{to{transform:rotate(360deg)}}.seg.small button{padding:3px 8px;font-size:11.5px;min-width:0}.link-btn{border:0;background:none;color:var(--muted);padding:4px 0;margin:4px 0}.link-btn:hover:not(:disabled){background:none;color:var(--text)}.modal-body{margin:6px 0 10px;font-size:12.5px}.modal-body p{margin:0 0 6px}.modal .row.end{margin-top:10px}.modal input{width:auto}.icon-btn.danger-hover:hover{color:var(--danger)}.cam-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(370px,1fr));gap:10px}.cam-tile{display:grid;grid-template-columns:150px minmax(0,1fr);background:var(--bg-elev);border:1px solid var(--border);border-radius:var(--radius);overflow:hidden}.cam-tile.disabled{opacity:.75}.cam-thumb{position:relative;background:#000;min-height:100px}.cam-thumb img{width:100%;height:100%;object-fit:cover;position:absolute;inset:0}.cam-tile.disabled .cam-thumb img{filter:grayscale(1) brightness(.45)}.cam-thumb-tag{position:absolute;left:6px;bottom:6px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.04em;padding:1px 6px;border-radius:3px;background:#000000b3;color:var(--text-dim)}.cam-tile-body{padding:8px 10px;display:flex;flex-direction:column;gap:4px;min-width:0}.cam-tile-head{display:flex;align-items:center;gap:8px;min-width:0}.cam-tile-name{font-weight:600;font-size:13px}.cam-tile-name:hover{color:var(--accent)}.cam-tile-meta{display:flex;gap:5px;flex-wrap:wrap;min-width:0}.cam-tile-meta .mono{max-width:100%;font-size:11px}.cam-tile-actions{display:flex;align-items:center;gap:6px;margin-top:auto;padding-top:4px}.steps{display:flex;gap:4px;list-style:none;margin:0 0 12px;padding:0}.steps li{flex:1;display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:var(--radius);background:var(--bg-elev);border:1px solid var(--border);color:var(--muted);font-weight:600;font-size:12.5px}.steps li.active{color:var(--accent);border-color:var(--accent)}.steps li.done{color:var(--text-dim);cursor:pointer}.step-n{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:var(--bg-elev2);border:1px solid var(--border-strong);font-size:11px}.steps li.active .step-n{background:var(--accent);border-color:var(--accent);color:#05281b}.discover{display:flex;align-items:center;gap:10px;margin:10px 0;flex-wrap:wrap}.discover-list{display:flex;flex-direction:column;gap:4px;margin-bottom:10px}.discover-item{display:grid;grid-template-columns:140px 1fr auto;gap:10px;align-items:center;text-align:left;padding:6px 10px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg);cursor:pointer}.discover-item:hover{border-color:var(--border-strong);background:var(--bg-hover)}.discover-item.active{border-color:var(--accent)}.wizard-actions{margin-top:14px;padding-top:10px;border-top:1px solid var(--border)}.table.streams td,.table.streams th{vertical-align:top}.table.streams input[type=radio]{accent-color:var(--accent);margin:2px 0 0}.table tr.dim td{opacity:.6}.stream-url{max-width:420px}.manual-urls{margin-top:12px;display:flex;flex-direction:column;gap:10px}.manual-urls p{margin:0}.device-info{display:flex;flex-wrap:wrap;gap:6px 16px;padding:6px 10px;margin-bottom:10px;border-radius:var(--radius);background:var(--bg);border:1px solid var(--border);font-size:12px}.test-result{margin-top:6px;width:auto}.test-result td{border:0;padding:2px 8px 2px 0}.tabs{display:flex;gap:2px;border-bottom:1px solid var(--border);margin-bottom:12px;overflow-x:auto;scrollbar-width:none}.tab{padding:7px 11px;color:var(--muted);border-bottom:2px solid transparent;white-space:nowrap;font-size:12.5px;margin-bottom:-1px}.tab:hover{color:var(--text)}.tab.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.tab-body>.form-card>p:first-child{margin-top:0}.mute-list{display:flex;flex-wrap:wrap;gap:8px 20px}.profile-rows{display:flex;flex-direction:column;gap:8px}.profile-row{display:grid;grid-template-columns:120px minmax(0,1fr);gap:12px;padding:10px;border:1px solid var(--border);border-radius:var(--radius);background:var(--bg)}.profile-name{display:flex;flex-direction:column;gap:2px;font-size:13px}.profile-row .form-grid{gap:8px 14px}.daynight{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.entity-list{columns:2;gap:20px;margin:0 0 4px}.entity-list li{padding:1px 0;color:var(--text-dim)}.matrix td,.matrix th{white-space:normal;min-width:120px}.matrix-cell{color:var(--text-dim)}.matrix td a:hover{color:var(--accent)}.ze{display:grid;grid-template-columns:300px minmax(0,1fr);gap:12px;align-items:start}.ze-side{display:flex;flex-direction:column;gap:10px;min-width:0}.ze-group{background:var(--bg-elev);border:1px solid var(--border);border-radius:var(--radius);padding:8px;display:flex;flex-direction:column;gap:4px}.ze-group-head{display:flex;align-items:center;gap:8px;margin-bottom:4px}.ze-empty{padding:4px 2px 6px;line-height:1.4}.ze-item{display:flex;align-items:center;gap:8px;padding:5px 6px;border-radius:var(--radius);border:1px solid transparent;cursor:pointer;font-size:12.5px}.ze-item.zone{flex-direction:column;align-items:stretch;gap:6px}.ze-item-row{display:flex;align-items:center;gap:8px}.ze-item:hover{background:var(--bg-hover)}.ze-item.selected{border-color:var(--border-strong);background:var(--bg-elev2)}.ze-swatch{width:12px;height:12px;border-radius:3px;flex-shrink:0}.ze-swatch.mask{background:repeating-linear-gradient(135deg,rgba(248,113,113,.7) 0 2px,transparent 2px 5px);border:1px solid var(--danger)}.ze-name{flex:1;min-width:0;min-height:26px;padding:3px 6px}.ze-item-detail{display:flex;flex-direction:column;gap:6px;padding:4px 0 2px 20px;cursor:default}.ze-main{min-width:0}.ze-toolbar{display:flex;align-items:center;gap:8px;margin-bottom:8px;height:30px}.ze-hint{flex:1 1 120px;min-width:0;font-size:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.ze-toolbar .toggle-label{white-space:nowrap}.ze-stage{position:relative;width:100%;background:#000;border:1px solid var(--border);border-radius:var(--radius);overflow:hidden;user-select:none}.ze-stage img{position:absolute;inset:0;width:100%;height:100%;object-fit:fill}.ze-stage canvas{position:absolute;inset:0;width:100%;height:100%;cursor:crosshair;touch-action:none}.ze-stage:not(.drawing) canvas{cursor:default}.ze-noimg{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;text-align:center;padding:20px;background:#101216}.profile-switch{display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 4px;width:100%}.profile-switch-label{font-size:10px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}.profile-switch select{width:100%;min-height:26px;padding:2px 16px 2px 6px;font-size:11.5px;background-position:right 4px center;text-align:center}.profile-switch.on select{border-color:var(--accent);color:var(--accent)}.topbar{display:none}.tile.disabled{aspect-ratio:16 / 9;background:#0e1014;border-style:dashed}.tile-disabled{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;color:var(--muted)}.tile-disabled .tile-name{color:var(--text-dim)}.single-stage .tile-disabled{background:#0e1014}.tile-menu{position:relative}.menu{position:absolute;right:0;top:28px;min-width:170px;background:var(--bg-elev2);border:1px solid var(--border-strong);border-radius:var(--radius);box-shadow:0 10px 30px #0009;padding:4px;z-index:30;display:flex;flex-direction:column}.menu>*{display:flex;align-items:center;gap:8px;padding:7px 10px;border:0;background:none;color:var(--text);text-align:left;border-radius:4px;cursor:pointer;font-size:12.5px;white-space:nowrap;text-shadow:none}.menu>*:hover{background:var(--bg-hover)}.side-controls{display:flex;flex-direction:column;gap:8px;padding:8px 10px;border-bottom:1px solid var(--border)}.side-control{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.mute-chips{display:flex;align-items:center;gap:4px;flex-wrap:wrap}.side-disable{align-self:flex-start}.toast.error{border-color:#f8717180}.toast.error .toast-title{color:#fca5a5}.toast.ok .toast-title{color:var(--accent)}@media(max-width:1000px){.ze{grid-template-columns:minmax(0,1fr)}.ze-side{order:2}.settings-layout{grid-template-columns:150px minmax(0,1fr)}}@media(max-width:800px){:root{--top-h: 42px}.main{padding-top:var(--top-h)}.topbar{position:fixed;top:0;left:0;right:0;height:var(--top-h);display:flex;align-items:center;gap:8px;padding:0 10px;background:var(--bg-elev);border-bottom:1px solid var(--border);z-index:20}.topbar-brand{display:inline-flex;align-items:center;gap:6px;color:var(--accent);font-weight:700;letter-spacing:.04em}.topbar .profile-switch{flex-direction:row;width:auto;padding:0;gap:6px}.topbar .profile-switch select{width:auto;min-width:90px;text-align:left}.nav .profile-switch{display:none}.page-single{height:calc(100vh - var(--nav-h) - var(--top-h) - env(safe-area-inset-bottom));height:calc(100dvh - var(--nav-h) - var(--top-h) - env(safe-area-inset-bottom))}.settings-layout{grid-template-columns:minmax(0,1fr);gap:8px}.settings-nav{position:static;flex-direction:row;overflow-x:auto;scrollbar-width:none;gap:4px;margin:0 -8px;padding:0 0 4px 8px}.settings-nav-item{white-space:nowrap;border-left:0;border-bottom:2px solid transparent;border-radius:0;padding:6px 8px}.settings-nav-item.active{background:none;border-bottom-color:var(--accent)}.form-grid,.cam-grid{grid-template-columns:minmax(0,1fr)}.cam-tile{grid-template-columns:110px minmax(0,1fr)}.steps li{padding:6px 8px;font-size:12px}.profile-row{grid-template-columns:minmax(0,1fr)}.entity-list{columns:1}.discover-item{grid-template-columns:1fr;gap:2px}}.settings-body{max-width:1100px}.field-ctl>select.input{width:auto;min-width:180px;max-width:100%}.kv-row>.input,.kv-row>select.input,.kv-row .num-wrap{max-width:260px}.kv-row .kv-key{max-width:260px}.narrow{max-width:480px}.matrix-cell.muted{color:var(--muted)}.net-pill{display:inline-flex;align-items:center;font-size:10px;font-weight:700;letter-spacing:.05em;padding:1px 6px;border-radius:3px;line-height:16px;color:var(--accent);background:var(--accent-dim);border:1px solid color-mix(in srgb,var(--accent) 35%,transparent);white-space:nowrap;cursor:default}.net-pill.wan{color:var(--warn);background:#fbbf2424;border-color:#fbbf2459}.stream-pick select{min-height:28px;padding:2px 20px 2px 8px;font-size:12px;background-position:right 6px center;max-width:160px}.table.profiles td,.table.active-transcoders td{vertical-align:middle}.table.profiles .input.num{width:100%;min-height:28px;padding:3px 6px}.table.profiles select.input{min-height:28px;padding:3px 20px 3px 6px}.table.profiles td:first-child .input{width:130px;min-height:28px;padding:3px 6px}.profile-out{white-space:normal;min-width:180px}.profile-msg{margin-top:8px}.field-static{min-height:30px;display:flex;align-items:center;gap:4px;flex-wrap:wrap}.encoder-list{margin:4px 0 0;display:flex;flex-direction:column;gap:2px}.encoder-list li{display:flex;align-items:center;gap:5px;flex-wrap:wrap}@media(max-width:800px){.stream-pick select{max-width:110px}}.ptz-btn{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;border-radius:8px;border:1px solid rgba(255,255,255,.12);background:#14161b8c;color:var(--text);cursor:pointer;padding:0;font-size:20px;font-weight:600;line-height:1;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;touch-action:none;backdrop-filter:blur(4px)}.ptz-btn:hover:not(:disabled){background:#ffffff29}.ptz-btn:active:not(:disabled){background:var(--accent-dim);color:var(--accent);border-color:var(--accent)}.ptz-btn:disabled{opacity:.4;cursor:default}.ptz-btn.diag{opacity:.75}.ptz-pad{display:flex;align-items:center;gap:8px}.ptz-dpad{display:grid;grid-template-columns:repeat(3,40px);grid-auto-rows:40px;gap:4px}.ptz-center{display:flex;align-items:center;justify-content:center;border-radius:50%;color:var(--accent)}.ptz-center:before{content:"";width:6px;height:6px;border-radius:50%;background:#ffffff4d}.ptz-center.moving:before{display:none}.ptz-zoom{display:flex;flex-direction:column;gap:4px}.ptz-pad.small .ptz-dpad{grid-template-columns:repeat(3,36px);grid-auto-rows:36px}.ptz-pad.small .ptz-btn{width:36px;height:36px;background:var(--bg-elev2);border-color:var(--border-strong);backdrop-filter:none}.ptz-overlay{position:absolute;left:10px;bottom:10px;z-index:6;display:flex;flex-direction:column;gap:6px;padding:8px;border-radius:10px;background:#0b0c0f73;border:1px solid rgba(255,255,255,.08);backdrop-filter:blur(6px);transition:opacity .15s;user-select:none}.ptz-overlay.docked{position:relative;left:auto;bottom:auto;flex-direction:row;align-items:center;flex-wrap:wrap;gap:10px;padding:4px 0;background:none;border:0;backdrop-filter:none}.ptz-overlay.docked .ptz-btn{background:var(--bg-elev2);border-color:var(--border-strong);backdrop-filter:none}.ptz-overlay.docked .ptz-presets{background-color:var(--bg);border-color:var(--border-strong)}.ptz-overlay.docked .ptz-moving{position:static;background:none;padding:0}.ptz-extra{display:flex;align-items:center;gap:4px}.ptz-extra .ptz-btn{width:36px;height:36px;font-size:15px}.ptz-presets{flex:1;min-width:0;max-width:150px;min-height:36px;padding:4px 22px 4px 8px;font-size:12px;background-color:#14161b8c;border-color:#ffffff1f;border-radius:8px}.ptz-moving{position:absolute;left:0;top:-24px;font-size:11px;color:var(--accent);padding:2px 8px;border-radius:4px;background:#0009;white-space:nowrap;animation:pulse 1.2s ease-in-out infinite}.ptz-moving.floating{left:10px;top:auto;bottom:10px;z-index:6}.ptz-click-layer{position:absolute;inset:0;z-index:3;touch-action:pan-y}.ptz-click-layer.center{cursor:crosshair}.ptz-click-layer.back{cursor:pointer}.single-stage.zoomed .ptz-click-layer.back{cursor:grab}.single-stage.panning .ptz-click-layer.back{cursor:grabbing}.ptz-ripple{position:absolute;width:34px;height:34px;margin:-17px 0 0 -17px;border-radius:50%;border:2px solid var(--accent);box-shadow:0 0 0 1px #00000080;pointer-events:none;animation:ptz-ripple .65s ease-out forwards}.ptz-ripple:before,.ptz-ripple:after{content:"";position:absolute;background:var(--accent);left:50%;top:50%}.ptz-ripple:before{width:2px;height:14px;margin:-7px 0 0 -1px}.ptz-ripple:after{width:14px;height:2px;margin:-1px 0 0 -7px}@keyframes ptz-ripple{0%{transform:scale(.6);opacity:1}to{transform:scale(1.6);opacity:0}}.ptz-test{display:flex;align-items:center;gap:16px;flex-wrap:wrap}.preset-mgr{display:flex;flex-direction:column;gap:10px}.table.presets{width:auto;min-width:320px}.table.presets td{vertical-align:middle}.preset-name .input{min-height:28px;padding:3px 6px}.preset-actions{display:flex;gap:6px;align-items:center}.preset-add .input{max-width:260px}.page-single .page-head .ptz-btn-toggle{flex-shrink:0}.vol-ctl{display:inline-flex;align-items:center;gap:2px}.vol-slider{width:70px;min-width:0;flex:none;height:4px}.tile-grip{display:inline-flex;align-items:center;justify-content:center;width:32px;height:32px;margin:-4px 0;border-radius:6px;border:1px solid rgba(255,255,255,.15);background:#0000008c;color:var(--text);cursor:grab;padding:0;touch-action:none;user-select:none}.tile-grip:active{cursor:grabbing}.tile.arrange{cursor:default}.tile.arrange .player-poster,.tile.arrange .player-video{opacity:.8}.tile.arrange.dragging{opacity:.45}.tile.arrange.drop-target{outline:2px solid var(--accent);outline-offset:-2px;border-color:var(--accent)}.tile.arrange.drop-target:after{content:"";position:absolute;inset:0;background:var(--accent-dim);z-index:4;pointer-events:none}.drag-ghost{position:fixed;z-index:200;width:180px;aspect-ratio:16 / 9;transform:translate(-50%,-50%) rotate(-2deg);border-radius:var(--radius);border:1px solid var(--accent);background:#000 center / cover no-repeat;box-shadow:0 12px 40px #000000b3;opacity:.9;pointer-events:none;display:flex;align-items:flex-end;padding:6px 8px}.arrange-hint{white-space:nowrap}.order-btns{display:inline-flex}.order-btns .icon-btn{width:26px;height:26px}.layout-seg button{display:inline-flex;align-items:center;padding:5px 8px}.popover-anchor{position:relative;display:inline-flex}.popover{position:absolute;right:0;top:34px;z-index:30;min-width:240px;background:var(--bg-elev2);border:1px solid var(--border-strong);border-radius:var(--radius);box-shadow:0 10px 30px #0009;padding:10px 12px;display:flex;flex-direction:column;gap:10px}.popover .field-label{display:block}.focus-layout{display:grid;grid-template-columns:minmax(0,3fr) minmax(160px,1fr);gap:6px;align-items:start}.focus-layout.alone{grid-template-columns:minmax(0,1fr)}.focus-spot{border-color:#f8717199;box-shadow:0 0 0 1px #f8717140,0 0 24px #f8717126}.focus-spot.holding{border-color:var(--border-strong);box-shadow:none}.focus-spot .player{aspect-ratio:16 / 9}.focus-strip{display:flex;flex-direction:column;gap:6px;max-height:calc(100vh - 80px);overflow-y:auto;scrollbar-width:thin}.tile.small .tile-top,.tile.small .tile-bottom{padding:4px 6px}.tile.small .tile-name{font-size:11.5px}.tile.small .tile-bottom{padding-right:70px}.tile.small .player-badge{font-size:9px}.alert-badge{--c: var(--danger);display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;color:#fff;background:#f87171d9;border-radius:3px;padding:2px 7px;margin-left:6px;white-space:nowrap;text-shadow:none}.alert-badge .dot.live{background:#fff}.alert-badge.clearing{background:#0000008c;color:var(--text-dim);font-weight:600;text-transform:none;letter-spacing:0;border:1px solid var(--border-strong)}@media(max-width:800px){.focus-layout{grid-template-columns:minmax(0,1fr)}.focus-strip{flex-direction:row;overflow-x:auto;overflow-y:hidden;max-height:none;padding-bottom:4px}.focus-strip .tile{flex:0 0 46%}.page-live .page-head .cols-seg,.page-live .page-head .arrange-hint{display:none}.ptz-overlay{left:6px;bottom:6px;padding:6px}.ptz-dpad{grid-template-columns:repeat(3,38px);grid-auto-rows:38px}.ptz-btn{width:38px;height:38px}.vol-slider{display:none}}.label-chip.sound,.chip.sound-chip{display:inline-flex;align-items:center;gap:4px}.chip.sound-chip svg,.label-chip.sound svg{flex-shrink:0}.chip.sound-chip:not(.on){border-style:dashed}.chip.sound-chip.raw{padding-right:4px}.chip-x{display:inline-flex;align-items:center;justify-content:center;width:18px;height:18px;border:0;border-radius:50%;background:transparent;color:inherit;cursor:pointer;padding:0;margin-left:2px;opacity:.7}.chip-x:hover{opacity:1;background:#ffffff1f}.chip-groups{display:flex;flex-direction:column;gap:8px}.chip-group{display:grid;grid-template-columns:58px minmax(0,1fr);gap:6px;align-items:start}.chip-group-label{padding-top:5px;font-weight:600;letter-spacing:.03em;text-transform:uppercase;font-size:10.5px}.sound-picker{display:flex;flex-direction:column;gap:8px}.sound-groups{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:4px 16px}.sound-opt{display:grid;grid-template-columns:118px minmax(0,1fr);gap:6px;align-items:center;min-width:0;padding:2px 0}.sound-opt .chip{justify-content:flex-start;width:100%}.sound-members{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;line-height:1.3}.sound-opt.on .sound-members{color:var(--text-dim)}.sound-add{max-width:420px}.sound-raw{padding:4px 0 0}.model-status{display:flex;align-items:center;gap:10px;flex-wrap:wrap;min-height:30px}.model-status .ellipsis{max-width:100%}.field-help code{font-family:var(--mono);font-size:11px;background:var(--bg);border:1px solid var(--border);border-radius:3px;padding:0 4px}.audio-live{gap:6px}.audio-live .hearing{display:inline-flex;gap:4px;flex-wrap:wrap;vertical-align:middle}.sound-badge{display:inline-flex;align-items:center;gap:4px;margin-left:6px;padding:1px 6px 1px 5px;border-radius:3px;background:#0000008c;color:var(--warn);font-size:10.5px;font-weight:700;letter-spacing:.02em;white-space:nowrap;animation:pulse 1.6s ease-in-out infinite}.sound-badge-label{color:var(--c, var(--warn))}.sound-badge.small{font-size:9.5px;padding:0 4px}.page-head .sound-badge{background:#fbbf2424;border:1px solid rgba(251,191,36,.35);animation:none}.event-kind-audio{position:absolute;right:3px;bottom:3px;display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:#000000b3;color:var(--warn)}.event-card.audio .event-thumb{border:1px solid rgba(251,191,36,.35)}.event-sublabel.audio{background:#fbbf2429;color:#fde68a}.event-sublabel.big{font-size:12px;padding:1px 8px}.event-detail-thumb.wide{width:160px;height:90px;object-fit:cover}.kind-seg{flex-shrink:0}.table.detectors td{vertical-align:middle}.detector-model{max-width:220px}.detector-actions{text-align:right;white-space:nowrap}.detector-actions .btn{margin-right:4px}.table.detectors tr.pending td{background:#fbbf240d}.detector-edit{margin-top:10px;padding:10px;border:1px solid var(--border-strong);border-radius:var(--radius);background:var(--bg)}.detector-edit .card-title{margin-bottom:8px}.add-detector{margin-top:10px}.pair-layout{display:grid;grid-template-columns:284px minmax(0,1fr);gap:18px;align-items:start}.pair-qr{width:284px;height:284px;padding:12px;border-radius:10px;background:#fff;box-shadow:0 0 0 1px var(--border-strong)}.pair-qr svg{width:100%;height:100%;display:block}.pair-qr.placeholder{display:flex;align-items:center;justify-content:center;background:var(--bg-elev2)}.pair-info{display:flex;flex-direction:column;gap:10px;min-width:0}.pair-steps{margin:0;padding-left:18px;line-height:1.6}.pair-manual{color:var(--text-dim)}.pair-code-row{display:flex;align-items:center;gap:14px;flex-wrap:wrap}.pair-code{font-size:30px;font-weight:700;letter-spacing:.14em;padding:6px 14px;border-radius:var(--radius);background:var(--bg);border:1px solid var(--border-strong);font-variant-numeric:tabular-nums;user-select:all}.pair-code-meta{display:flex;flex-direction:column;gap:4px;align-items:flex-start}.pair-urls{margin-top:2px}.pair-info p{margin:0}.dot.warn{background:var(--warn)}.apns-card .form-card-head,.push-devices-card .form-card-head{flex-wrap:wrap}.apns-help{margin:0 0 12px;line-height:1.45}.apns-key{display:flex;flex-direction:column;gap:6px}.apns-key-status{gap:12px}.apns-key-status .ok{display:inline-flex;align-items:center;gap:4px}.apns-key-text{font-size:11.5px;white-space:pre}.apns-advanced{align-self:flex-start}.table.push-devices td.mono{white-space:nowrap}@media(max-width:800px){.pair-layout{grid-template-columns:minmax(0,1fr);justify-items:center}.pair-qr{width:260px;height:260px}.pair-info{width:100%}.pair-code{font-size:24px}.sound-groups,.chip-group{grid-template-columns:minmax(0,1fr)}.chip-group-label{padding-top:0}}.event-line-sub{display:flex;min-width:0}.event-line-sub .event-sublabel{margin-left:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}.sound-badge.floating{position:absolute;left:8px;top:8px;z-index:6;margin:0;pointer-events:none}@media(max-width:800px){.page-single .page-head .sound-badge{display:none}}.state-pill{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;padding:1px 7px 1px 5px;border-radius:3px;line-height:16px;white-space:nowrap;color:var(--accent);background:var(--accent-dim);border:1px solid color-mix(in srgb,var(--accent) 35%,transparent);cursor:default}.state-pill.warn{color:var(--warn);background:#fbbf2424;border-color:#fbbf2459}.state-pill.full,.state-pill.error{color:var(--danger);background:#f8717124;border-color:#f8717159}.state-pill .dot{width:7px;height:7px}.state-pill-err{font-weight:500;text-transform:none;letter-spacing:0;white-space:normal}.card-title-row{display:inline-flex;align-items:center;gap:8px}.stor-usage{display:flex;flex-direction:column;gap:14px}.stor-usage.compact{gap:10px}.stor-vol{display:flex;flex-direction:column;gap:4px;min-width:0}.stor-head{display:flex;align-items:center;gap:8px;flex-wrap:wrap}.stor-role b{font-weight:600}.stor-path{overflow-wrap:anywhere}.stor-hint{font-family:var(--font);font-size:11.5px}.stor-bar{--stor-osprey: var(--accent);--stor-other: #6b7280;position:relative;display:flex;gap:2px;height:10px;margin:3px 0 2px;border-radius:3px;background:#22252d;overflow:visible}.stor-vol.compact .stor-bar{height:8px}.stor-bar .seg{display:block;height:100%;flex:0 0 auto;min-width:0;background:var(--stor-osprey);border-radius:3px 0 0 3px}.stor-bar .seg.other{background:var(--stor-other);border-radius:0}.stor-bar .seg:last-of-type{border-radius:0 2px 2px 0}.stor-bar .seg:first-child:last-of-type{border-radius:3px}.stor-bar.warn{--stor-osprey: var(--warn)}.stor-bar.full,.stor-bar.error{--stor-osprey: var(--danger)}.stor-bar.error{background:repeating-linear-gradient(135deg,#22252d 0 4px,#f8717140 4px 6px)}.stor-budget{position:absolute;top:-3px;bottom:-3px;width:2px;margin-left:-1px;background:var(--text);border-radius:1px;box-shadow:0 0 0 1px var(--bg-elev)}.stor-nums{font-variant-numeric:tabular-nums;color:var(--text-dim);overflow-wrap:anywhere}.stor-legend{display:flex;flex-wrap:wrap;gap:2px 12px}.stor-legend span{display:inline-flex;align-items:center;gap:5px}.stor-legend .sw{display:inline-block;width:10px;height:8px;border-radius:2px;background:var(--accent)}.stor-legend .sw.other{background:#6b7280}.stor-legend .sw.free{background:#22252d;border:1px solid var(--border-strong)}.stor-legend .sw.budget{width:2px;height:12px;background:var(--text)}.stor-chips{display:flex;flex-wrap:wrap;gap:4px;margin-top:2px}.stor-chip{--c: #9aa0ad;font-weight:500}.stor-chip b{font-variant-numeric:tabular-nums}.stor-est{font-size:12px;color:var(--text-dim);font-variant-numeric:tabular-nums}.stor-note{padding:5px 8px;border-radius:var(--radius);background:#fbbf241a;border:1px solid rgba(251,191,36,.35)}.stor-cams{margin-top:2px}.table.storage-cameras td{vertical-align:middle}.stor-status{line-height:1.5}.stor-last-action{color:var(--text-dim)}.stor-limits{margin-top:14px;padding-top:10px;border-top:1px solid var(--border)}.stor-limits+.form-grid{margin-top:14px;padding-top:10px;border-top:1px solid var(--border)}.stor-limits-title{font-size:11.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--text-dim);margin-bottom:8px;display:flex;align-items:baseline;gap:8px;flex-wrap:wrap}.stor-limits-path{text-transform:none;letter-spacing:0;font-weight:400}.stor-limits .form-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.stor-size{gap:6px}.stor-size .num-wrap{flex:0 0 auto}.stor-size>select.input{flex:0 0 auto;width:auto;min-width:72px}.stor-resolved{display:block;margin-top:2px;color:var(--text-dim)}.stor-inuse{display:block;margin-top:2px}.banner.err{border-color:#f8717173;background:#f871711a;color:#fecaca}.banner.slim{padding:5px 10px;margin-bottom:6px;font-size:12px;flex-wrap:nowrap}.banner.slim .btn{flex-shrink:0}@media(min-width:760px){.cards .storage-card{grid-column:span 2}}@media(min-width:801px)and (max-width:1100px){.stor-limits .form-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media(max-width:800px){.stor-limits .form-grid{grid-template-columns:minmax(0,1fr)}.banner.slim{flex-wrap:wrap}}.eyebrow{display:block;font-size:10px;font-weight:700;letter-spacing:.16em;color:var(--accent, #58cbd4);margin-bottom:8px}.setup-page{max-width:1060px;margin:0 auto}.setup-page .page-head h1,.face-page .page-head h1{margin:0}.setup-steps{display:grid;grid-template-columns:repeat(5,1fr);gap:10px;padding:0;margin:28px 0;list-style:none}.setup-steps li{display:flex;align-items:center;gap:8px;font-size:12px;opacity:.5}.setup-steps li.active,.setup-steps li.complete{opacity:1}.setup-steps li span{display:grid;place-items:center;width:26px;height:26px;border:1px solid var(--line, #35404d);border-radius:50%;flex-shrink:0}.setup-steps li.active span{background:var(--accent, #58cbd4);color:#10151b;border-color:transparent}.setup-options{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:24px}.setup-choice{text-align:left;display:grid;gap:8px;padding:20px;background:transparent;color:inherit;border:1px solid var(--line, #35404d);border-radius:8px;cursor:pointer}.setup-choice span{font-size:12px;opacity:.65;line-height:1.6}.setup-choice.selected{border-color:var(--accent, #58cbd4);background:#58cbd40a}.setup-footer{display:flex;gap:10px;margin-top:30px;padding-top:18px;border-top:1px solid var(--line, #35404d)}.setup-review{display:grid;grid-template-columns:160px 1fr;gap:14px}.setup-review dt{opacity:.65}.setup-review dd{margin:0;overflow-wrap:anywhere}.setup-next{display:flex;gap:10px;flex-wrap:wrap;margin-top:24px}.role-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:20px}.role-cards p{opacity:.7;font-size:12px;line-height:1.6}.user-pair{display:flex;align-items:center;gap:24px;padding-top:24px}.user-pair svg{width:180px;height:180px;border-radius:8px}.face-workspace{display:grid;grid-template-columns:minmax(0,1fr) 280px;gap:22px;margin-top:20px}.face-drop{display:flex;align-items:center;gap:16px;flex-wrap:wrap;border:1px dashed #465967;border-radius:8px;padding:20px;background:#58cbd406}.face-drop span{opacity:.6;font-size:12px}.face-drop .btn{margin-left:auto}.face-drop.dragging{border-color:#58cbd4;background:#58cbd41a}.face-tabs,.face-toolbar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:18px 0}.face-tabs .btn span{margin-left:8px;opacity:.6}.face-toolbar{padding-bottom:15px;border-bottom:1px solid var(--line, #35404d)}.face-toolbar label,.face-collect{display:flex;align-items:center;gap:8px;font-size:12px}.face-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:14px;margin-bottom:20px}.face-card{border:1px solid var(--line, #35404d);border-radius:8px;overflow:hidden}.face-card.selected{border-color:#58cbd4}.face-card>label{position:relative;display:block;aspect-ratio:4 / 3;background:#121922;cursor:pointer}.face-card img{position:absolute;width:100%;height:100%;object-fit:contain;z-index:1;background:#121922}.face-image-fallback{position:absolute;inset:0;display:grid;place-items:center;font-size:11px;opacity:.6;padding:20px;text-align:center}.face-card input{position:absolute;z-index:2;top:10px;left:10px;width:18px;height:18px}.face-card>div{padding:12px}.face-card p{margin:6px 0}.face-card a{display:block;margin-top:8px}.people-list{margin-top:18px;display:grid;gap:10px}.people-list>div{display:flex;align-items:center;gap:8px}.people-list .icon-btn{margin-left:auto}.push-diagnostic{margin:15px 0;padding:15px;border:1px solid var(--line, #35404d);border-radius:8px}.push-diagnostic-controls{display:flex;align-items:center;gap:10px;flex-wrap:wrap}.push-diagnostic-preview{width:180px;max-height:110px;object-fit:contain;border-radius:5px;margin:10px 0}@media(max-width:1000px){.face-workspace{grid-template-columns:minmax(0,1fr)}.face-workspace aside{display:grid;grid-template-columns:1fr 1fr;gap:18px}}@media(max-width:650px){.setup-steps{gap:5px}.setup-steps li{flex-direction:column;font-size:10px;text-align:center}.setup-options,.role-cards,.face-workspace aside{grid-template-columns:1fr}.setup-review{grid-template-columns:1fr;gap:8px}.setup-review dd{margin-bottom:10px}.user-pair{flex-direction:column}}.rec-filters{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:-4px 0 18px}.tl-event:focus-visible{outline:2px solid white;outline-offset:3px;z-index:9}.tl-row{overflow:hidden}.setup-storage-group{border-top:1px solid var(--border);padding-top:18px;margin-top:20px}.face-model-options{flex-wrap:wrap;gap:18px;margin:18px 0}.face-model-options label{display:flex;align-items:center;gap:8px}.face-model-upload{margin-top:20px}.face-model-upload summary{cursor:pointer;font-weight:600;padding:8px 0}.face-drop progress{width:min(100%,420px);height:14px;accent-color:var(--accent)}.face-page>.card{margin-bottom:24px}.setup-options{grid-template-columns:repeat(auto-fit,minmax(180px,1fr))}.event-browser-layout{display:grid;grid-template-columns:minmax(0,1fr) 340px;gap:20px;align-items:start}.event-browser-detail{min-width:0}.event-browser-pane{position:sticky;top:16px;border:1px solid var(--border);border-radius:12px;overflow:hidden;background:var(--bg-elev)}.event-browser-list{max-height:calc(100dvh - 210px);overflow:auto;padding:8px;display:flex;flex-direction:column;gap:6px}.event-browser-pane .side-head{display:flex;align-items:center;gap:10px;padding:12px}.event-browser-pane .event-card{min-width:0}.event-browser-pane .event-thumb{width:80px;flex:0 0 80px}.event-browser-pane .event-card.selected{outline:2px solid var(--accent);outline-offset:-2px}.event-browser-detail .event-detail{display:block}.event-browser-detail .event-info{margin-top:16px}.maintenance-files{overflow:auto;max-height:360px;margin:12px 0}.restart-control{display:inline-flex;flex-wrap:wrap;align-items:center;gap:8px}.recording-delete{border-top:1px solid var(--border);margin:16px 0;padding-top:8px}.row.wrap{flex-wrap:wrap}@media(max-width:1050px){.event-browser-layout{grid-template-columns:minmax(0,1fr) 280px}}@media(max-width:800px){.event-browser-layout{grid-template-columns:1fr}.event-browser-pane{position:static}.event-browser-list{max-height:360px}}.gpu-devices{display:grid;gap:8px;margin:12px 0}.gpu-choice{display:flex;align-items:flex-start;gap:10px;padding:12px;border:1px solid var(--border);border-radius:8px}.gpu-choice input{margin-top:4px}.gpu-choice span span{display:block;overflow-wrap:anywhere}.gpu-architectures{display:flex;flex-wrap:wrap;gap:14px;margin:12px 0}.gpu-architectures label{display:flex;align-items:center;gap:6px;text-transform:capitalize}.gpu-plan{margin:16px 0}
