:root{--font:"Segoe UI Variable Text", "Segoe UI", system-ui, -apple-system, Roboto, sans-serif;--mono:"Cascadia Mono", Consolas, ui-monospace, monospace;--bg:#f6f7f9;--surface:#fff;--border:#e5e7eb;--border-strong:#d1d5db;--text:#111827;--muted:#6b7280;--subtle:#9ca3af;--accent:#2563eb;--in:#2563eb;--out:#94a3b8;--success:#16a34a;--warning:#b45309;--warning-bg:#fffbeb;--warning-border:#fde68a;--danger:#dc2626;--danger-bg:#fef2f2;--danger-border:#fecaca;--info-bg:#f3f4f6;--radius:8px;--shadow:0 1px 2px #1018280d;--lightningcss-light:initial;--lightningcss-dark: ;color-scheme:light}*,:before,:after{box-sizing:border-box}html{font-family:var(--font);color:var(--text);background:var(--bg);-webkit-font-smoothing:antialiased;font-size:14px;line-height:1.45}body,h1,h2,p{margin:0}button{font:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.topbar{background:var(--surface);border-bottom:1px solid var(--border)}.topbar-inner{justify-content:space-between;align-items:center;gap:16px;max-width:1440px;height:56px;margin:0 auto;padding:0 24px;display:flex}.brand{align-items:center;gap:10px;font-size:15px;font-weight:600;display:inline-flex}.brand svg{width:24px;height:24px}.brand rect{fill:var(--accent)}.brand path{fill:none;stroke:#fff;stroke-width:2.5px;stroke-linecap:round;stroke-linejoin:round}.topbar-tools{align-items:center;gap:16px;display:flex}.clock{color:var(--muted);font-variant-numeric:tabular-nums}.status{border:1px solid var(--border);border-radius:999px;align-items:center;gap:6px;padding:2px 10px;font-size:13px;font-weight:500;display:inline-flex}.status i{background:var(--subtle);border-radius:50%;width:8px;height:8px}.status[data-status=recording] i{background:var(--success)}.status[data-status=offline]{color:var(--danger);border-color:var(--danger-border)}.status[data-status=offline] i{background:var(--danger)}.segmented{background:var(--info-bg);border-radius:6px;padding:2px;display:inline-flex}.segmented button{color:var(--muted);cursor:pointer;background:0 0;border:0;border-radius:4px;padding:3px 10px;font-size:13px}.segmented button[aria-pressed=true]{background:var(--surface);color:var(--text);box-shadow:var(--shadow), 0 0 0 1px var(--border);font-weight:500}.page{gap:16px;max-width:1280px;margin:0 auto;padding:24px;display:grid}.page-loading{color:var(--muted)}.page-head h1{font-size:20px;font-weight:600}.page-sub{color:var(--muted);flex-wrap:wrap;margin-top:4px;display:flex}.page-sub span+span:before{content:"·";color:var(--subtle);margin:0 8px}.alerts{gap:8px;display:grid}.alerts:empty{display:none}.alert{border-radius:var(--radius);border:1px solid var(--border);background:var(--info-bg);justify-content:space-between;align-items:center;gap:12px;padding:10px 14px;display:flex}.alert.warning{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning)}.alert.danger{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger)}.alert-detail{font-family:var(--mono);font-size:12px}.license-banner{margin-bottom:16px}.license-screen{gap:12px;display:grid}.license-screen .kv dd{min-width:0}.license-id{flex-wrap:wrap;align-items:center;gap:8px;display:inline-flex}.license-id code{font-family:var(--mono);-webkit-user-select:all;user-select:all;overflow-wrap:anywhere;font-size:13px}.license-actions{gap:12px;display:grid}.btn{border:1px solid var(--border-strong);background:var(--surface);color:var(--text);cursor:pointer;white-space:nowrap;border-radius:6px;flex:none;justify-content:center;align-items:center;gap:6px;padding:6px 14px;text-decoration:none;display:inline-flex}.btn:hover{background:var(--bg)}.btn:disabled,.btn[aria-disabled=true]{opacity:.55;cursor:default}.btn-primary{background:var(--accent);border-color:var(--accent);color:#fff}.btn-primary:hover{background:#1d4ed8}.btn-danger{color:var(--danger);border-color:var(--danger-border)}.btn-danger:hover{background:var(--danger-bg)}.btn-ghost{background:0 0;border-color:#0000}.btn-sm{padding:3px 10px;font-size:13px}.card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);min-width:0}.card-head{border-bottom:1px solid var(--border);align-items:center;gap:16px;padding:14px 16px;display:flex}.card-head h2{margin-right:auto;font-size:14px;font-weight:600}.card-empty{color:var(--muted);padding:24px 16px}.stats{grid-template-columns:repeat(var(--stat-cols,4), minmax(0, 1fr));gap:16px;display:grid}.stat{padding:16px}.stat-label{color:var(--muted);font-size:13px}.stat-value{font-variant-numeric:tabular-nums;margin-top:6px;font-size:28px;font-weight:600;line-height:1.15}.stat-foot{color:var(--muted);margin-top:6px;font-size:12px}.stat-foot.warn{color:var(--warning)}.grid-main{grid-template-columns:minmax(0,2fr) minmax(0,1fr);align-items:start;gap:16px;display:grid}.grid-two{grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;gap:16px;display:grid}.legend{color:var(--muted);gap:14px;margin:0;padding:0;font-size:12px;list-style:none;display:flex}.legend li{align-items:center;gap:6px;display:inline-flex}.legend li:before{content:"";border-radius:2px;width:10px;height:10px}.legend [data-series=in]:before{background:var(--in)}.legend [data-series=out]:before{background:var(--out)}.legend [data-series=occ]:before{background:var(--text);height:2px}.chart{height:300px;padding:12px 12px 8px;position:relative}.chart-msg{color:var(--muted);pointer-events:none;place-items:center;display:grid;position:absolute;inset:0}.table{border-collapse:collapse;width:100%}.table th,.table td{text-align:left;border-bottom:1px solid var(--border);white-space:nowrap;padding:9px 16px}.table thead th{color:var(--muted);background:#fafafa;font-size:12px;font-weight:500}.table tbody th{font-weight:500}.table tbody tr:last-child>*{border-bottom:0}.table .num{text-align:right;font-variant-numeric:tabular-nums}.table tr.muted>*{color:var(--subtle)}.mono{font-variant-numeric:tabular-nums}.badge{border-radius:999px;padding:1px 8px;font-size:12px;font-weight:500;display:inline-block}.badge[data-dir=in]{color:#1d4ed8;background:#eff6ff}.badge[data-dir=out]{color:#475569;background:#f1f5f9}.tag{color:#1d4ed8;background:#eff6ff;border-radius:4px;padding:1px 8px;font-size:12px;font-weight:500;display:inline-block}.table th .tag{margin-left:8px}.tag-ok{color:#15803d;background:#f0fdf4}.tag-warn{background:var(--warning-bg);color:var(--warning)}.tag-muted{background:var(--info-bg);color:var(--muted)}.tag-error{background:var(--danger-bg);color:var(--danger)}.cam{align-items:center;gap:6px;display:inline-flex}.cam i{background:var(--subtle);border-radius:50%;width:8px;height:8px}.cam[data-kind=online] i{background:var(--success)}.cam[data-kind=connecting] i,.cam[data-kind=reconnecting] i{background:#f59e0b}.cam[data-kind=offline] i,.cam[data-kind=ended] i{background:var(--danger)}.cam-detail{color:var(--muted);margin-left:8px;font-size:12px}.message{max-width:560px;margin:48px auto;padding:24px}.message h2{font-size:16px;font-weight:600}.message p{color:var(--muted);margin-top:8px}.table a{color:var(--text);text-decoration:none}.table a:hover{color:var(--accent);text-decoration:underline}.dash{gap:16px;display:grid}.dash.stale .stat-value,.dash.stale .table td,.dash.stale .chart{opacity:.55}.page-head{flex-wrap:wrap;align-items:flex-start;gap:8px 16px;display:flex}.page-head>div:first-child{min-width:0;margin-right:auto}.page-actions{flex-wrap:wrap;gap:8px;margin-left:auto;display:flex}.toolbar{flex-wrap:wrap;align-items:center;gap:8px 12px;display:flex}.empty{text-align:center;color:var(--muted);justify-items:center;gap:12px;padding:32px 16px;display:grid}.notice{border:1px solid var(--border);border-radius:var(--radius);background:var(--info-bg);padding:10px 14px}.notice-error{background:var(--danger-bg);border-color:var(--danger-border);color:var(--danger)}.notice-ok{color:#15803d;background:#f0fdf4;border-color:#bbf7d0}.card-body{gap:16px;padding:16px;display:grid}.field{align-content:start;gap:4px;min-width:0;display:grid}.field>label{font-weight:500}.field input,.field select,.field textarea{width:100%;font:inherit;color:var(--text);border:1px solid var(--border-strong);background:var(--surface);border-radius:6px;padding:7px 10px}.field input:disabled,.field select:disabled,.field textarea:disabled{background:var(--bg);color:var(--muted)}.field input[type=checkbox]{width:auto}.hint{color:var(--muted);font-size:12px}.error{color:var(--danger);font-size:12px}.form-grid{grid-template-columns:minmax(0,1fr);gap:16px;display:grid}@media (min-width:720px){.form-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}.form-actions{flex-wrap:wrap;gap:8px;display:flex}.shell{align-items:flex-start;max-width:1440px;margin:0 auto;display:flex}.sidenav{flex:none;gap:2px;width:200px;padding:24px 0 24px 24px;display:grid}.sidenav a{color:var(--muted);border-radius:6px;padding:7px 12px;text-decoration:none}.sidenav a:hover{background:var(--surface);color:var(--text)}.sidenav a[aria-current=page]{background:var(--surface);color:var(--text);box-shadow:var(--shadow);font-weight:600}.shell>.page{flex:1;min-width:0;max-width:1280px;margin:0}.user-menu{align-items:center;gap:8px;display:inline-flex}.user-name{font-weight:500}.user-role{color:var(--muted)}.auth-page{gap:16px;max-width:380px;margin:64px auto;padding:0 16px;display:grid}.auth-page .brand{justify-content:center}.auth-page .segmented{justify-self:center}.auth-page h1{font-size:18px;font-weight:600}.table-scroll{overflow-x:auto}.row-actions{justify-content:flex-end;gap:6px;display:flex}.table .actions{text-align:right}.kv{grid-template-columns:max-content minmax(0,1fr);gap:6px 24px;margin:0;display:grid}.kv dt{color:var(--muted)}.kv dd{overflow-wrap:anywhere;margin:0}.logs{max-height:480px;font:12px/1.5 var(--mono);white-space:pre-wrap;overflow-wrap:anywhere;margin:0;padding:12px 16px;overflow:auto}.log-warning{color:var(--warning)}.log-error,.log-critical{color:var(--danger)}.links{flex-wrap:wrap;align-items:flex-end;gap:8px 12px;display:flex}.links .field{width:120px}@media (max-width:900px){.shell{display:block}.sidenav{gap:4px;width:auto;padding:12px 24px 0;display:flex;overflow-x:auto}.sidenav a{white-space:nowrap}.shell>.page{max-width:none}}@media (max-width:1440px){.grid-main{grid-template-columns:minmax(0,1fr)}}@media (max-width:1024px){.stats{grid-template-columns:repeat(2,minmax(0,1fr))}.grid-two{grid-template-columns:minmax(0,1fr)}}@media (max-width:640px){.topbar-inner,.page{padding-left:16px;padding-right:16px}.clock{display:none}.sidenav{padding-left:16px;padding-right:16px}.user-name,.user-role{display:none}.card-head{flex-wrap:wrap}.legend{order:3;width:100%}.table th,.table td{padding:8px 12px}}.cams-row{cursor:pointer}.cams-row:hover>*{background:var(--bg)}.cams-source{font-family:var(--mono);color:var(--muted);font-size:12px}.cams-tabs{border-bottom:1px solid var(--border);gap:4px;display:flex;overflow-x:auto}.cams-tab{color:var(--muted);white-space:nowrap;cursor:pointer;background:0 0;border:0;border-bottom:2px solid #0000;margin-bottom:-1px;padding:8px 14px;font-weight:500}.cams-tab:hover{color:var(--text)}.cams-tab[aria-selected=true]{color:var(--accent);border-bottom-color:var(--accent)}.field input.cams-mono{font-family:var(--mono);font-size:13px}.cams-check{align-items:center;gap:8px;min-height:36px;font-weight:500;display:flex}.cams-probe{gap:8px;display:grid}.cams-probe img,.cams-preview{border:1px solid var(--border);background:#111827;border-radius:6px;max-width:100%;height:auto;display:block}.cams-delete{margin-left:auto}.line-layout{grid-template-columns:minmax(0,1fr) 280px;align-items:start;gap:16px;display:grid}.line-canvas{gap:8px;min-width:0;display:grid}.line-stage{-webkit-user-select:none;user-select:none;background:#111827;border-radius:6px;line-height:0;position:relative;overflow:hidden}.line-stage[hidden]{display:none}.line-stage img{pointer-events:none;width:100%;height:auto;display:block}.line-svg{width:100%;height:100%;position:absolute;inset:0}.line-shape{cursor:pointer}.line-band{fill:#ffffff2e;stroke:#fff;stroke-opacity:.7}.line-shape.selected .line-band{fill:#2563eb4d;stroke:#60a5fa}.line-halo{stroke:#00000080;stroke-linecap:round}.line-seg{stroke:#fff;stroke-linecap:round}.line-shape.selected .line-seg{stroke:#60a5fa}.line-arrow{stroke:#3b82f6;filter:drop-shadow(0 0 1px #fff)}.line-arrow-head{fill:#3b82f6;stroke:#fff;stroke-width:1.5px;vector-effect:non-scaling-stroke}.line-label{text-anchor:middle;dominant-baseline:central;paint-order:stroke;stroke:#fff;stroke-linejoin:round;pointer-events:none;font-weight:700}.line-label-in{fill:#1d4ed8}.line-label-out{fill:#475569}.line-handle{cursor:grab;touch-action:none}.line-handle:active{cursor:grabbing}.line-hit{fill:#0000}.line-dot{fill:#fff;stroke:var(--accent)}.line-panel{gap:12px;min-width:0;display:grid}.line-chips{flex-wrap:wrap;gap:6px;display:flex}.line-chip{border:1px solid var(--border-strong);background:var(--surface);cursor:pointer;border-radius:999px;padding:3px 10px}.line-chip[aria-pressed=true]{background:var(--accent);border-color:var(--accent);color:#fff}.line-props{border-top:1px solid var(--border);gap:12px;padding-top:12px;display:grid}.line-props h3{margin:0;font-size:14px;font-weight:600}.field input[type=range]{accent-color:var(--accent);border:0;padding:0}@media (max-width:900px){.line-layout{grid-template-columns:minmax(0,1fr)}}.model-list{border:0;gap:8px;min-width:0;margin:0;padding:0;display:grid}.model-list legend{margin-bottom:8px;padding:0;font-weight:500}.model-row{border:1px solid var(--border);border-radius:var(--radius);cursor:pointer;align-items:center;gap:12px;padding:10px 12px;display:flex}.model-row:hover{background:var(--bg)}.model-row:has(input:checked){border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}.model-row:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:2px}.model-list:disabled .model-row{cursor:default}.model-main{gap:2px;min-width:0;margin-right:auto;display:grid}.model-tags{flex-wrap:wrap;justify-content:flex-end;gap:6px;display:flex}@media (min-width:1025px){.stats-3{grid-template-columns:repeat(3,minmax(0,1fr))}}.cam[data-kind=disabled] i{background:var(--border-strong)}.key-row{flex-wrap:wrap;gap:8px;display:flex}.key-input{min-width:0;font-family:var(--mono);border:1px solid var(--border-strong);background:var(--bg);color:var(--text);border-radius:6px;flex:320px;padding:7px 10px;font-size:13px}.rename-row{flex-wrap:wrap;align-items:flex-end;gap:8px;display:flex}.rename-row .field{flex:240px}.table tbody.day-group>tr.door-row>*{color:var(--muted);font-size:13px}.table tbody.day-group>tr.door-row>th{padding-left:28px;font-weight:400}.table tbody.day-group>tr.day-row>*{border-top:1px solid var(--border)}.crumb{color:var(--muted);margin-bottom:4px;text-decoration:none;display:inline-block}.crumb:hover{color:var(--text);text-decoration:underline}.day-picker{align-items:center;gap:8px;display:inline-flex}.day-picker select{font:inherit;border:1px solid var(--border-strong);background:var(--surface);border-radius:6px;padding:4px 8px}.gender-body{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px;padding:16px 16px 8px;display:grid}.gender-bar{background:var(--info-bg);border-radius:999px;height:12px;margin-bottom:10px;display:flex;overflow:hidden}.gender-bar i{height:100%;display:block}.gender-bar i[data-g=male],.gender-legend i[data-g=male]{background:#2563eb}.gender-bar i[data-g=female],.gender-legend i[data-g=female]{background:#db2777}.gender-bar i[data-g=unknown],.gender-legend i[data-g=unknown]{background:var(--subtle)}.gender-legend{grid-template-columns:repeat(3,minmax(0,1fr));gap:8px;display:grid}.gender-legend dt{color:var(--muted);align-items:center;gap:6px;font-size:13px;display:flex}.gender-legend dt i{border-radius:50%;width:8px;height:8px}.gender-legend dd{font-variant-numeric:tabular-nums;margin:0;font-size:20px;font-weight:600}.gender-legend dd .hint{margin-left:4px;font-weight:400}.gender-note{padding:0 16px 14px}@media (max-width:720px){.gender-body{grid-template-columns:minmax(0,1fr)}}
