:root{color:#17212b;background:#eef3f8;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;letter-spacing:0;text-rendering:optimizeLegibility}*{box-sizing:border-box}body{min-width:320px;margin:0}button,input,select{font:inherit}button{cursor:pointer}button:disabled{cursor:not-allowed;opacity:.68}.app-shell{--app-bg: #eef3f8;--app-bg-2: #dfeaf2;--app-bg-3: #f7fbfd;--app-bg-rgb: 238, 243, 248;--gradient-start-rgb: 16, 62, 92;--text: #17212b;--text-strong: #103e5c;--muted: #5b6e7d;--muted-strong: #344c5e;--nav-bg: #0f2438;--nav-hover: #1d4969;--nav-active: #2f6f9f;--nav-accent: #2f9c95;--nav-focus: #8dd4cf;--panel-bg: rgba(248, 251, 253, .96);--panel-solid: #fbfdff;--panel-soft: #eef5fa;--row-alt: #edf4f8;--control-bg: #e4edf4;--control-border: #b9c7d3;--border: #cfdae4;--border-soft: #d5e0e8;--border-strong: #aebfcc;--primary: #2f6f9f;--primary-hover: #255b84;--primary-rgb: 47, 111, 159;--accent: #2f9c95;--accent-rgb: 47, 156, 149;--success: #236b32;--success-bg: #e9f7ea;--success-action: #2d7d55;--danger: #9e2631;--danger-hover: #7f2d38;--danger-bg: #fff0f1;--danger-soft: #fff7f7;--warning: #7c4b00;--warning-bg: #fff0d9;--info-bg: #e8f5f3;--info-text: #11665d;--tag-bg: #f5ead3;--tag-text: #76551b;--media-bg: #e6eef5;--map-bg: #dce7ef;--switch-bg: #b6c3ce;--overlay-bg: rgba(248, 251, 253, .84);--shadow-rgb: 15, 36, 56;--shell-bg: linear-gradient(180deg, rgba(var(--gradient-start-rgb), .2), rgba(var(--accent-rgb), .08) 240px, rgba(var(--app-bg-rgb), 0) 560px), linear-gradient(135deg, var(--app-bg) 0%, var(--app-bg-2) 54%, var(--app-bg-3) 100%);min-height:100vh;color:var(--text);background:var(--shell-bg)}.app-shell[data-theme=field]{--app-bg: #e7ead9;--app-bg-2: #d7dfc6;--app-bg-3: #fff3d5;--app-bg-rgb: 231, 234, 217;--gradient-start-rgb: 31, 52, 44;--text: #1d281f;--text-strong: #234232;--muted: #637063;--muted-strong: #3f4f42;--nav-bg: #1f342c;--nav-hover: #2e5744;--nav-active: #3f7a57;--nav-accent: #c99536;--nav-focus: #f0d28c;--panel-bg: rgba(255, 249, 232, .96);--panel-solid: #fff8e8;--panel-soft: #edf3df;--row-alt: #eef4e2;--control-bg: #e4ecd8;--control-border: #b9c5b5;--border: #d1d8c9;--border-soft: #dbe2d4;--border-strong: #aebba9;--primary: #386f50;--primary-hover: #2f5d43;--primary-rgb: 56, 111, 80;--accent: #c99536;--accent-rgb: 201, 149, 54;--info-bg: #e7f1df;--info-text: #325f2f;--tag-bg: #fff3d8;--tag-text: #73511b;--media-bg: #dbe8cf;--map-bg: #d2dfc8;--overlay-bg: rgba(255, 249, 232, .84);--shadow-rgb: 36, 47, 34}.app-shell[data-theme=graphite]{--app-bg: #e8ecea;--app-bg-2: #d7dfdd;--app-bg-3: #f6ecd8;--app-bg-rgb: 232, 236, 234;--gradient-start-rgb: 58, 65, 68;--text: #202326;--text-strong: #27343b;--muted: #656f72;--muted-strong: #3f4a4e;--nav-bg: #24272b;--nav-hover: #3a4449;--nav-active: #0f7c86;--nav-accent: #d49f45;--nav-focus: #94d7dc;--panel-bg: rgba(246, 248, 246, .96);--panel-solid: #f8faf8;--panel-soft: #e6ecea;--row-alt: #e9eeec;--control-bg: #e1e7e6;--control-border: #bcc6c5;--border: #d2d9d8;--border-soft: #dce2e1;--border-strong: #aeb8b8;--primary: #0f7c86;--primary-hover: #0b6870;--primary-rgb: 15, 124, 134;--accent: #d49f45;--accent-rgb: 212, 159, 69;--info-bg: #e1f3f2;--info-text: #0c5f66;--tag-bg: #f9edd8;--tag-text: #735018;--media-bg: #dce5e3;--map-bg: #cfd8d7;--overlay-bg: rgba(246, 248, 246, .84);--shadow-rgb: 32, 35, 38}.app-shell[data-theme=cobalt]{--app-bg: #e8f0fb;--app-bg-2: #d9e7f7;--app-bg-3: #fde7e2;--app-bg-rgb: 232, 240, 251;--gradient-start-rgb: 16, 42, 86;--text: #172038;--text-strong: #102a56;--muted: #606f85;--muted-strong: #364b69;--nav-bg: #102a56;--nav-hover: #1d4d7e;--nav-active: #2f67b1;--nav-accent: #e1634f;--nav-focus: #f5b7ad;--panel-bg: rgba(255, 251, 248, .96);--panel-solid: #fffaf6;--panel-soft: #eaf2fb;--row-alt: #edf5fd;--control-bg: #e6eff9;--control-border: #b7c5d8;--border: #d0dbe8;--border-soft: #d9e3ee;--border-strong: #aebed0;--primary: #2f67b1;--primary-hover: #25548f;--primary-rgb: 47, 103, 177;--accent: #e1634f;--accent-rgb: 225, 99, 79;--info-bg: #e9f2fc;--info-text: #25548f;--tag-bg: #ffebe7;--tag-text: #8a372b;--media-bg: #dce9f7;--map-bg: #d2dfef;--overlay-bg: rgba(255, 251, 248, .84);--shadow-rgb: 20, 39, 70}.app-shell[data-theme=night]{--app-bg: #101816;--app-bg-2: #182720;--app-bg-3: #2f3220;--app-bg-rgb: 16, 24, 22;--gradient-start-rgb: 183, 219, 87;--text: #e7f1e8;--text-strong: #f3f8e8;--muted: #a7b6ab;--muted-strong: #c9d6ca;--nav-bg: #0b1110;--nav-hover: #1f372e;--nav-active: #28695d;--nav-accent: #b7db57;--nav-focus: #d7f477;--panel-bg: rgba(23, 36, 31, .96);--panel-solid: #17241f;--panel-soft: #20362d;--row-alt: #1d3028;--control-bg: #101c18;--control-border: #466258;--border: #385349;--border-soft: #30483f;--border-strong: #59776c;--primary: #2d806f;--primary-hover: #27695d;--primary-rgb: 45, 128, 111;--accent: #b7db57;--accent-rgb: 183, 219, 87;--success: #b9e6ad;--success-bg: #1c3a28;--success-action: #2e7d55;--danger: #ff9a9f;--danger-hover: #7d2937;--danger-bg: #3c1c24;--danger-soft: #2a171c;--warning: #f3d170;--warning-bg: #3a301b;--info-bg: #183d37;--info-text: #9de1d4;--tag-bg: #2c3a21;--tag-text: #e3f3b7;--media-bg: #22362e;--map-bg: #172a24;--switch-bg: #50625b;--overlay-bg: rgba(16, 24, 22, .86);--shadow-rgb: 0, 0, 0;--shell-bg: linear-gradient(180deg, rgba(183, 219, 87, .16), rgba(45, 128, 111, .09) 260px, rgba(16, 24, 22, 0) 620px), linear-gradient(145deg, #101816 0%, #16251f 52%, #2c3020 100%)}.app-shell[data-theme=signal]{--app-bg: #f7f8f2;--app-bg-2: #edf3e8;--app-bg-3: #fff4c7;--app-bg-rgb: 247, 248, 242;--gradient-start-rgb: 17, 17, 17;--text: #111111;--text-strong: #111111;--muted: #4a4a4a;--muted-strong: #202020;--nav-bg: #111111;--nav-hover: #2a2a2a;--nav-active: #006a78;--nav-accent: #ffcc22;--nav-focus: #ffcc22;--panel-bg: rgba(255, 255, 255, .98);--panel-solid: #ffffff;--panel-soft: #f3f6ee;--row-alt: #eef4e8;--control-bg: #ffffff;--control-border: #111111;--border: #111111;--border-soft: #646464;--border-strong: #111111;--primary: #111111;--primary-hover: #333333;--primary-rgb: 17, 17, 17;--accent: #ffcc22;--accent-rgb: 255, 204, 34;--success: #075b2b;--success-bg: #dff4df;--success-action: #075b2b;--danger: #a1001f;--danger-hover: #7b0017;--danger-bg: #ffe1e7;--danger-soft: #fff1f4;--warning: #553c00;--warning-bg: #fff2b8;--info-bg: #dff7fb;--info-text: #005f6d;--tag-bg: #fff2b8;--tag-text: #332300;--media-bg: #eef1e9;--map-bg: #e2eadc;--switch-bg: #777777;--overlay-bg: rgba(255, 255, 255, .9);--shadow-rgb: 17, 17, 17;--shell-bg: linear-gradient(180deg, rgba(255, 204, 34, .32), rgba(255, 204, 34, 0) 300px), linear-gradient(90deg, rgba(17, 17, 17, .06) 0 1px, transparent 1px 100%), linear-gradient(180deg, #f7f8f2 0%, #edf3e8 100%)}.app-shell[data-theme=canopy]{--app-bg: #d8eadf;--app-bg-2: #c7e0d1;--app-bg-3: #e6f3d2;--app-bg-rgb: 216, 234, 223;--gradient-start-rgb: 20, 57, 47;--text: #172b24;--text-strong: #14392f;--muted: #587165;--muted-strong: #2f5144;--nav-bg: #14392f;--nav-hover: #1e594b;--nav-active: #287b6b;--nav-accent: #33a6a6;--nav-focus: #a7efdc;--panel-bg: rgba(251, 255, 247, .96);--panel-solid: #fbfff7;--panel-soft: #e7f3e5;--row-alt: #e4f0e5;--control-bg: #dfeee3;--control-border: #a9c2b3;--border: #c3d8ca;--border-soft: #d1e2d5;--border-strong: #8eb09c;--primary: #287b6b;--primary-hover: #1e6457;--primary-rgb: 40, 123, 107;--accent: #33a6a6;--accent-rgb: 51, 166, 166;--info-bg: #dff5ef;--info-text: #17675f;--tag-bg: #eff5d7;--tag-text: #496119;--media-bg: #dbeade;--map-bg: #cddfd2;--overlay-bg: rgba(251, 255, 247, .86);--shadow-rgb: 23, 43, 36;--shell-bg: linear-gradient(180deg, rgba(20, 57, 47, .16), rgba(51, 166, 166, .11) 260px, rgba(216, 234, 223, 0) 620px), linear-gradient(135deg, #d8eadf 0%, #c7e0d1 52%, #e6f3d2 100%)}.app-shell[data-theme=ember]{--app-bg: #f1e5dd;--app-bg-2: #ead9d8;--app-bg-3: #e1ecdf;--app-bg-rgb: 241, 229, 221;--gradient-start-rgb: 44, 36, 48;--text: #2a252c;--text-strong: #2c2430;--muted: #6d6369;--muted-strong: #4a4148;--nav-bg: #2c2430;--nav-hover: #4a3445;--nav-active: #8b3f58;--nav-accent: #e7664c;--nav-focus: #f4b9a9;--panel-bg: rgba(255, 249, 244, .96);--panel-solid: #fff9f4;--panel-soft: #f1e4df;--row-alt: #f6ece6;--control-bg: #eadeda;--control-border: #c9b7b3;--border: #ddcec8;--border-soft: #e6d8d2;--border-strong: #b79f9a;--primary: #8b3f58;--primary-hover: #703247;--primary-rgb: 139, 63, 88;--accent: #e7664c;--accent-rgb: 231, 102, 76;--info-bg: #e1f2eb;--info-text: #236a5b;--tag-bg: #ffe5db;--tag-text: #834230;--media-bg: #eadbd5;--map-bg: #ddd8d0;--overlay-bg: rgba(255, 249, 244, .86);--shadow-rgb: 44, 36, 48;--shell-bg: linear-gradient(180deg, rgba(231, 102, 76, .18), rgba(35, 106, 91, .08) 290px, rgba(241, 229, 221, 0) 620px), linear-gradient(135deg, #f1e5dd 0%, #ead9d8 50%, #e1ecdf 100%)}.dev-banner{min-height:34px;display:grid;place-items:center;padding:8px 16px;background:var(--nav-bg);color:#fff;font-size:.78rem;font-weight:700;text-align:center}.app-shell[data-theme=night] .dev-banner{background:#07100e}.app-shell[data-theme=night] .side-panel,.app-shell[data-theme=night] .main-panel,.app-shell[data-theme=night] .state-panel,.app-shell[data-theme=night] .login-panel,.app-shell[data-theme=night] .observation-panel,.app-shell[data-theme=night] .mobile-install-shell{box-shadow:0 18px 46px #00000057}.app-shell[data-theme=night] .topbar{border-bottom-width:2px;box-shadow:0 14px 30px #00000038}.app-shell[data-theme=night] .theme-switcher,.app-shell[data-theme=night] .nav-button{background:#ffffff14}.app-shell[data-theme=signal] .side-panel,.app-shell[data-theme=signal] .main-panel,.app-shell[data-theme=signal] .state-panel,.app-shell[data-theme=signal] .login-panel,.app-shell[data-theme=signal] .data-table-wrap,.app-shell[data-theme=signal] .video-list,.app-shell[data-theme=signal] .video-preview-panel,.app-shell[data-theme=signal] .map-frame,.app-shell[data-theme=signal] .mobile-install-shell{border-width:2px;box-shadow:6px 6px #11111129}.app-shell[data-theme=signal] .topbar{border-bottom-width:6px}.app-shell[data-theme=signal] .theme-switcher,.app-shell[data-theme=signal] .nav-button{border-color:#ffffff94;background:#ffffff1a}.app-shell[data-theme=signal] .primary-action,.app-shell[data-theme=signal] .login-submit,.app-shell[data-theme=signal] .table-action,.app-shell[data-theme=signal] .video-refresh{box-shadow:3px 3px 0 var(--accent)}.app-shell[data-theme=canopy] .topbar{background:linear-gradient(90deg,#33a6a62e,#33a6a600),var(--nav-bg)}.app-shell[data-theme=canopy] .side-panel,.app-shell[data-theme=canopy] .main-panel,.app-shell[data-theme=canopy] .login-panel{background:linear-gradient(180deg,#ffffff57,#fff0),linear-gradient(180deg,var(--panel-bg),var(--panel-solid))}.app-shell[data-theme=ember] .topbar{background:linear-gradient(90deg,#e7664c33,#236a5b14),var(--nav-bg)}.app-shell[data-theme=ember] .panel-header h2,.app-shell[data-theme=ember] .qr-panel h3,.app-shell[data-theme=ember] .mobile-brand h2{color:#3b2532}.login-view{width:min(960px,calc(100% - 32px));min-height:calc(100vh - 34px);display:grid;grid-template-columns:minmax(0,1.05fr) minmax(320px,420px);align-items:center;gap:34px;margin:0 auto;padding:48px 0}.login-brand{display:grid;gap:22px;color:var(--text)}.login-brand img{width:min(240px,62vw);height:auto}.login-brand h1{margin-bottom:0;font-size:3rem;line-height:1.05}.login-brand .eyebrow{color:var(--primary)}.login-panel{display:grid;gap:18px;padding:28px;border:1px solid var(--border);border-radius:8px;background:linear-gradient(180deg,var(--panel-solid),var(--panel-soft));box-shadow:0 20px 42px rgba(var(--shadow-rgb),.18)}.login-submit{min-height:48px;display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:8px;background:var(--primary);color:#fff;font-weight:800}.login-submit:hover,.login-submit:focus-visible{background:var(--primary-hover);outline:3px solid rgba(var(--primary-rgb),.25)}.topbar{min-height:94px;display:flex;align-items:center;justify-content:space-between;gap:24px;padding:12px 28px;background:var(--nav-bg);border-bottom:4px solid var(--nav-accent)}.brand-button{min-width:0;display:inline-flex;align-items:center;padding:0;border:0;background:transparent;color:#fff;font-weight:800}.brand-button img{width:94px;height:70px;object-fit:contain}.nav-actions{display:flex;align-items:stretch;justify-content:flex-end;gap:8px;flex-wrap:wrap}.theme-switcher{min-height:62px;display:inline-flex;align-items:center;flex-wrap:wrap;gap:8px;padding:7px 9px;border:1px solid rgba(255,255,255,.14);border-radius:8px;background:#ffffff0f;color:#fff}.panel-theme-switcher{min-height:44px;justify-self:stretch;justify-content:flex-end;background:var(--control-bg);border-color:var(--border);color:var(--text-strong)}.panel-theme-switcher .theme-swatch{border-color:var(--border-strong)}.panel-theme-switcher .theme-swatch.active{border-color:var(--text-strong);box-shadow:0 0 0 3px rgba(var(--primary-rgb),.18)}.theme-swatch{position:relative;width:34px;height:34px;overflow:hidden;border:2px solid rgba(255,255,255,.42);border-radius:50%;background:linear-gradient(135deg,var(--swatch-nav) 0 49%,var(--swatch-accent) 50% 72%,var(--swatch-bg) 73% 100%)}.theme-swatch:hover,.theme-swatch:focus-visible{outline:2px solid var(--nav-focus);outline-offset:2px}.theme-swatch.active{border-color:#fff;box-shadow:0 0 0 3px #ffffff38}.sr-only{position:absolute;width:1px;height:1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}.nav-button{width:82px;min-height:62px;display:inline-flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;border:1px solid rgba(255,255,255,.14);border-radius:8px;background:#ffffff0f;color:#fff;font-size:.78rem;font-weight:700}.nav-button:hover,.nav-button:focus-visible{background:var(--nav-hover);outline:2px solid var(--nav-focus);outline-offset:2px}.nav-button.active{background:var(--nav-active);border-color:#ffffff57}.nav-button.exit:hover,.nav-button.exit:focus-visible{background:var(--danger-hover);outline-color:#f2b8bf}.workspace{width:min(1180px,calc(100% - 32px));margin:32px auto;display:grid;grid-template-columns:minmax(250px,320px) minmax(0,1fr);gap:20px}.side-panel,.main-panel,.state-panel{border:1px solid var(--border);border-radius:8px;background:linear-gradient(180deg,var(--panel-bg),var(--panel-solid));box-shadow:0 16px 36px rgba(var(--shadow-rgb),.1)}.side-panel{min-height:540px;padding:24px;display:flex;flex-direction:column;gap:24px}.eyebrow{margin:0 0 6px;color:var(--muted);font-size:.76rem;font-weight:800;text-transform:uppercase}h1,h2,h3,p{margin-top:0}.side-panel h1{margin-bottom:12px;font-size:1.25rem;line-height:1.3;overflow-wrap:anywhere}.role-pill{width:fit-content;margin-bottom:0;padding:6px 10px;border-radius:999px;background:var(--info-bg);color:var(--info-text);font-size:.8rem;font-weight:800}.summary-list{display:grid;gap:14px;margin:0}.summary-list div,.qr-panel dl div{display:grid;gap:3px}dt{color:var(--muted);font-size:.72rem;font-weight:800;text-transform:uppercase}dd{margin:0;color:var(--text);font-weight:700;overflow-wrap:anywhere}.base-strip{display:flex;flex-wrap:wrap;gap:8px;margin-top:auto}.base-strip span{padding:6px 9px;border-radius:8px;background:var(--tag-bg);color:var(--tag-text);font-size:.78rem;font-weight:800}.main-panel{padding:24px}.panel-header{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:22px}.panel-header h2{margin-bottom:0;color:var(--text-strong);font-size:1.75rem;line-height:1.15}.segmented{display:inline-grid;grid-template-columns:repeat(2,1fr);border:1px solid var(--control-border);border-radius:8px;overflow:hidden;background:var(--control-bg)}.segmented button{min-width:92px;min-height:42px;display:inline-flex;align-items:center;justify-content:center;gap:7px;border:0;background:transparent;color:var(--muted-strong);font-weight:800}.segmented button.active{background:var(--text-strong);color:#fff}.user-form{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}label{display:grid;gap:7px}label span{color:var(--muted-strong);font-size:.78rem;font-weight:800;text-transform:uppercase}input,select{width:100%;min-height:44px;border:1px solid var(--control-border);border-radius:8px;padding:10px 12px;background:var(--panel-solid);color:var(--text)}input:focus,select:focus{border-color:var(--accent);outline:3px solid rgba(var(--accent-rgb),.18)}input.invalid{border-color:var(--danger);background:var(--danger-soft)}small{color:var(--danger);font-weight:700}.password-rules,.result-line,.form-actions{grid-column:1 / -1}.password-rules{display:flex;flex-wrap:wrap;gap:8px}.password-rules span{display:inline-flex;align-items:center;gap:6px;padding:7px 9px;border-radius:8px;background:var(--control-bg);color:var(--muted);font-size:.82rem;font-weight:800}.password-rules span.passed{background:var(--success-bg);color:var(--success)}.result-line{min-height:42px;display:flex;align-items:center;gap:9px;padding:10px 12px;border-radius:8px;font-weight:800}.result-line.success{background:var(--success-bg);color:var(--success)}.result-line.error{background:var(--danger-bg);color:var(--danger)}.form-actions{display:flex;justify-content:flex-end}.primary-action,.secondary-action,.icon-command{min-height:44px;display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:8px;background:var(--primary);color:#fff;font-weight:800}.primary-action{min-width:150px;padding:0 18px}.secondary-action{min-width:132px;padding:0 14px;border:1px solid var(--border-strong);background:var(--panel-solid);color:var(--primary)}.icon-command{width:44px}.primary-action:hover,.secondary-action:hover,.icon-command:hover,.primary-action:focus-visible,.secondary-action:focus-visible,.icon-command:focus-visible{background:var(--primary-hover);color:#fff;outline:3px solid rgba(var(--primary-rgb),.25)}.qr-panel{min-height:360px;display:grid;grid-template-columns:260px minmax(0,1fr);align-items:center;gap:28px;padding:32px;border:1px dashed var(--border-strong);border-radius:8px;background:var(--panel-soft)}.qr-panel canvas{width:236px;height:236px;border:10px solid var(--panel-solid);border-radius:8px;box-shadow:0 10px 24px rgba(var(--shadow-rgb),.16)}.qr-panel h3{margin-bottom:8px;color:var(--text-strong);font-size:1.4rem}.qr-panel p{color:var(--muted)}.qr-panel dl{display:grid;gap:12px;margin:18px 0 0}.state-panel{width:min(560px,calc(100% - 32px));min-height:120px;display:flex;align-items:center;justify-content:center;gap:12px;margin:48px auto;padding:24px;color:var(--text-strong);font-weight:800}.state-panel.error{color:var(--danger)}.map-workspace{width:min(1920px,calc(100% - 32px));grid-template-columns:minmax(220px,270px) minmax(0,1fr)}.map-panel{min-height:clamp(740px,calc(100vh - 120px),940px)}.map-shell{--map-canvas-height: clamp(560px, calc(100vh - 330px) , 760px);display:grid;gap:12px}.map-toolbar,.map-footer,.map-alert,.map-status,.map-buttons,.time-controls,.map-legend{display:flex;align-items:center}.map-toolbar{justify-content:space-between;gap:12px;flex-wrap:wrap}.map-status{gap:8px;color:var(--muted-strong);font-weight:800}.map-buttons{gap:8px;flex-wrap:wrap}.map-buttons button,.map-alert button,.time-controls button,.details-action{min-height:38px;display:inline-flex;align-items:center;justify-content:center;gap:7px;border:0;border-radius:8px;padding:0 12px;background:var(--success-action);color:#fff;font-size:.82rem;font-weight:800}.map-buttons button.off{background:var(--danger)}.map-frame{position:relative;min-height:var(--map-canvas-height);overflow:hidden;border:1px solid var(--border-strong);border-radius:8px;background:var(--map-bg)}.scene-view{width:100%;height:var(--map-canvas-height)}.map-scale{position:absolute;left:14px;bottom:14px;z-index:4;min-height:32px;display:inline-flex;align-items:center;padding:6px 10px;border:1px solid rgba(var(--shadow-rgb),.16);border-radius:4px;background:var(--panel-bg);color:var(--text-strong);font-size:.78rem;font-weight:800;box-shadow:0 8px 18px rgba(var(--shadow-rgb),.14);pointer-events:none}.map-loading,.map-error{position:absolute;top:0;right:0;bottom:0;left:0;display:grid;place-items:center;gap:10px;background:rgba(var(--app-bg-rgb),.86);color:var(--text-strong);font-weight:800;text-align:center;z-index:4}.map-error{color:var(--danger)}.map-alert{position:absolute;top:14px;left:14px;right:auto;z-index:6;justify-content:space-between;gap:10px;width:min(680px,calc(100% - 28px));padding:10px 12px;border-radius:8px;background:var(--warning-bg);color:var(--warning);font-weight:800;box-shadow:0 14px 30px rgba(var(--shadow-rgb),.18)}.map-alert button{background:var(--danger)}.observation-panel{position:absolute;right:14px;bottom:14px;width:min(340px,calc(100% - 28px));display:grid;gap:12px;padding:14px;border:1px solid var(--border);border-radius:8px;background:var(--panel-bg);box-shadow:0 16px 36px rgba(var(--shadow-rgb),.18);z-index:5}.panel-close{position:absolute;top:8px;right:8px;width:32px;height:32px;display:grid;place-items:center;border:0;border-radius:8px;background:var(--control-bg);color:var(--muted-strong)}.image-button-flat{width:100%;height:160px;display:grid;place-items:center;overflow:hidden;border:0;border-radius:8px;background:var(--media-bg);color:var(--muted)}.image-button-flat img{width:100%;height:100%;object-fit:cover}.observation-panel dl{display:grid;gap:9px;margin:0}.details-action{background:var(--primary)}.map-footer{justify-content:space-between;gap:14px;flex-wrap:wrap;padding:12px;border:1px solid var(--border-soft);border-radius:8px;background:var(--panel-soft)}.map-metric{display:grid;gap:2px;color:var(--muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.map-metric span{color:var(--text-strong);font-size:1.35rem}.expiration-input{min-width:160px}.expiration-input input{min-height:38px}.time-controls{flex:1 1 320px;gap:8px}.time-controls input[type=range]{flex:1;min-height:32px;padding:0}.time-controls span{min-width:86px;color:var(--text-strong);font-weight:900}.map-legend{gap:10px;flex-wrap:wrap;color:var(--muted-strong);font-size:.8rem;font-weight:800}.legend-dot,.legend-triangle{display:inline-block;margin-right:4px}.legend-dot{width:11px;height:11px;border-radius:50%}.legend-dot.purple{background:#742881}.legend-dot.green{background:#3a5a40}.legend-dot.grey{background:#6c757d}.legend-triangle{width:0;height:0;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:12px solid rgb(232,93,4)}.legend-triangle.red{border-bottom-color:#9d0208}.video-panel{min-height:720px}.video-shell{display:grid;gap:14px}.video-toolbar,.video-actions,.video-metrics,.video-error,.video-result,.video-section-title,.video-preview-header,.video-preview-modal-header,.preview-status,.process-control,.camera-status-item{display:flex;align-items:center}.video-toolbar{justify-content:space-between;gap:14px;flex-wrap:wrap}.video-metrics{gap:10px;flex-wrap:wrap}.video-metric{min-width:110px;display:grid;gap:3px;padding:10px 12px;border:1px solid var(--border-soft);border-radius:8px;background:var(--panel-soft);color:var(--muted);font-size:.76rem;font-weight:800;text-transform:uppercase}.video-metric span{color:var(--text-strong);font-size:1.35rem}.video-actions{gap:8px;flex-wrap:wrap}.video-updated{color:var(--muted-strong);font-size:.82rem;font-weight:800}.video-refresh,.camera-submit,.camera-edit,.camera-delete,.feed-add-button{min-height:40px;display:inline-flex;align-items:center;justify-content:center;gap:8px;border:0;border-radius:8px;padding:0 13px;background:var(--primary);color:#fff;font-weight:800}.video-error,.video-result{gap:9px;min-height:42px;padding:10px 12px;border-radius:8px;font-weight:800}.video-error{background:var(--warning-bg);color:var(--warning)}.video-error.compact{margin-top:2px}.video-result{background:var(--success-bg);color:var(--success)}.video-layout{display:grid;grid-template-columns:minmax(280px,360px) minmax(0,1fr);gap:14px;align-items:start}.video-side,.video-list,.video-preview-panel,.camera-form,.camera-list{display:grid;gap:12px}.video-list,.video-preview-panel{border:1px solid var(--border);border-radius:8px;background:var(--panel-solid);padding:14px}.video-section-title{justify-content:space-between;gap:9px;color:var(--text-strong)}.video-section-label{min-width:0;display:inline-flex;align-items:center;gap:9px}.video-section-title h3,.video-preview-header h3{margin:0;color:var(--text-strong);font-size:1.06rem}.camera-form label{display:grid;gap:6px}.camera-form label span{color:var(--muted-strong);font-size:.78rem;font-weight:800;text-transform:uppercase}.camera-form input{min-height:40px;width:100%;border:1px solid var(--border-soft);border-radius:8px;padding:8px 10px;background:var(--panel-bg);color:var(--text);font-weight:700}.camera-form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.camera-submit{width:100%;margin-top:2px;background:var(--success-action)}.feed-add-button{width:36px;min-width:36px;min-height:36px;padding:0;background:var(--success-action)}.video-loading{min-height:120px;display:grid;place-items:center;gap:10px;background:var(--overlay-bg);color:var(--text-strong);font-weight:800}.empty-video-row{min-height:96px;display:grid;place-items:center;border:1px dashed var(--border-soft);border-radius:8px;color:var(--muted);font-weight:800;text-align:center}.camera-card{display:grid;grid-template-columns:minmax(0,1fr) 32px;gap:6px;align-items:center;padding:6px;border:1px solid var(--border-soft);border-radius:8px;background:var(--panel-solid)}.camera-card.active{border-color:var(--primary);background:rgba(var(--primary-rgb),.08);box-shadow:0 0 0 3px rgba(var(--primary-rgb),.14)}.camera-card.connected{border-color:var(--success-action)}.camera-select{min-width:0;width:100%;min-height:58px;display:grid;grid-template-columns:26px minmax(0,1fr);gap:10px;align-items:center;border:0;border-radius:6px;padding:8px;background:transparent;color:var(--text);text-align:left}.camera-select:focus-visible,.camera-edit:focus-visible,.camera-delete:focus-visible,.video-refresh:focus-visible,.camera-submit:focus-visible,.feed-add-button:focus-visible{outline:3px solid rgba(var(--primary-rgb),.22);outline-offset:2px}.camera-signal{width:26px;height:26px;display:grid;place-items:center;border:1px solid var(--border-soft);border-radius:999px;background:var(--panel-bg);color:var(--danger)}.camera-signal.connected{border-color:var(--success-action);background:var(--success-bg);color:var(--success)}.camera-card-copy{min-width:0;display:grid;gap:4px}.camera-card-copy strong,.camera-card-copy small,.camera-processing-state{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.camera-card-copy strong{color:var(--text-strong);font-weight:900}.camera-card-copy small{color:var(--muted-strong);font-weight:750}.camera-card-meta{min-width:0;display:flex;align-items:center;gap:7px;flex-wrap:wrap}.camera-processing-state{color:var(--warning);font-size:.78rem;font-weight:850}.camera-processing-state.enabled{color:var(--success)}.camera-card-status,.preview-status{min-height:30px;display:inline-flex;align-items:center;justify-content:center;gap:6px;border-radius:8px;padding:5px 8px;background:var(--danger-bg);color:var(--danger);font-size:.76rem;font-weight:900;text-transform:uppercase}.camera-card-status{min-height:22px;border-radius:999px;padding:3px 7px;font-size:.68rem}.camera-card-status.connected,.preview-status.connected{background:var(--success-bg);color:var(--success)}.camera-card-status.checking,.preview-status.checking{background:var(--warning-bg);color:var(--warning)}.camera-card-actions{display:grid;gap:6px;align-self:center}.camera-edit,.camera-delete{width:32px;min-height:32px;align-self:center;justify-self:end;border-radius:7px;padding:0}.camera-edit{border:1px solid var(--border-soft);background:var(--control-bg);color:var(--primary)}.camera-delete{background:var(--danger)}.video-preview-panel{min-height:440px;align-content:start}.video-preview-panel.empty{min-height:320px}.video-preview-header{justify-content:space-between;gap:12px;flex-wrap:wrap}.video-preview-header .eyebrow{margin-bottom:2px}.process-control{min-height:34px;gap:8px;border:1px solid var(--border-soft);border-radius:8px;padding:5px 7px 5px 9px;background:var(--panel-soft);color:var(--text-strong);font-size:.8rem;font-weight:900}.process-control .switch-button{flex:0 0 auto}.camera-preview-frame{position:relative;width:min(540px,100%);min-height:180px;aspect-ratio:16 / 9;display:grid;place-items:center;overflow:hidden;border:1px solid var(--border-soft);border-radius:8px;padding:0;background:var(--media-bg);color:inherit;cursor:pointer}.video-preview-panel.empty .camera-preview-frame{width:100%;max-width:460px;min-height:150px;border-style:dashed}.camera-preview-frame:disabled{cursor:default}.camera-preview-frame:focus-visible,.modal-close:focus-visible{outline:3px solid rgba(var(--primary-rgb),.24);outline-offset:2px}.camera-preview-frame img{width:100%;height:100%;object-fit:contain;background:#050505}.camera-preview-frame.empty img{opacity:.18}.preview-expand-badge{position:absolute;right:10px;top:10px;z-index:2;width:34px;height:34px;display:grid;place-items:center;border-radius:8px;background:#00000094;color:#fff}.preview-empty{position:absolute;top:0;right:0;bottom:0;left:0;z-index:3;display:grid;place-items:center;align-content:center;gap:10px;background:var(--overlay-bg);color:var(--muted-strong);font-weight:900}.video-preview-modal,.video-form-modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1000;display:grid;place-items:center;padding:28px;background:#00000094;-webkit-backdrop-filter:blur(2px);backdrop-filter:blur(2px)}.video-preview-modal-shell,.video-form-modal-shell{width:min(1120px,100%);max-height:calc(100vh - 56px);display:grid;gap:12px;border:1px solid var(--border-soft);border-radius:8px;padding:14px;background:var(--panel-solid);color:var(--text);box-shadow:0 22px 60px #00000052}.video-form-modal-shell{width:min(560px,100%);overflow-y:auto}.video-form-modal-shell .camera-submit{width:auto;min-width:150px;justify-self:end}.video-preview-modal-header{justify-content:space-between;gap:12px}.video-preview-modal-header h3{margin:0;color:var(--text-strong);font-size:1.15rem}.modal-close{width:42px;height:42px;display:grid;place-items:center;border:0;border-radius:8px;background:var(--danger);color:#fff}.video-preview-modal-frame{position:relative;width:100%;max-height:calc(100vh - 160px);aspect-ratio:16 / 9;display:grid;place-items:center;overflow:hidden;border-radius:8px;background:#050505}.video-preview-modal-frame img{width:100%;height:100%;object-fit:contain}.video-preview-modal-frame.empty img{opacity:.18}.video-preview-meta{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.video-preview-meta div{min-height:66px;display:grid;gap:5px;align-content:center;border:1px solid var(--border-soft);border-radius:8px;padding:10px;background:var(--panel-soft)}.video-preview-meta span{color:var(--muted-strong);font-size:.72rem;font-weight:800;text-transform:uppercase}.video-preview-meta strong{min-width:0;overflow:hidden;color:var(--text-strong);font-size:.92rem;font-weight:900;text-overflow:ellipsis;white-space:nowrap}.camera-status-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.camera-status-item{min-height:54px;justify-content:center;gap:7px;border:1px solid var(--border-soft);border-radius:8px;background:var(--panel-soft);color:var(--text);font-weight:850}.status-icon.ok{color:var(--success-action)}.status-icon.bad{color:var(--danger)}@media (max-width: 1080px){.video-layout,.video-side{grid-template-columns:1fr}}@media (max-width: 760px){.video-side,.camera-form-grid,.video-preview-meta,.camera-status-grid{grid-template-columns:1fr}.camera-select{grid-template-columns:26px minmax(0,1fr)}.camera-preview-frame{width:100%}.video-preview-modal,.video-form-modal{padding:12px}.video-preview-modal-shell,.video-form-modal-shell{max-height:calc(100vh - 24px)}.video-preview-modal-header{align-items:stretch;flex-direction:column}}.data-workspace{width:min(2200px,calc(100% - 32px));grid-template-columns:minmax(220px,270px) minmax(0,1fr)}.data-panel{min-height:680px}.data-shell,.btb-shell,.mobile-install-shell{position:relative;display:grid;gap:14px}.data-toolbar,.data-metrics,.user-command-bar,.bulk-actions,.notify-form,.pager,.report-detail-header,.install-actions{display:flex;align-items:center}.data-toolbar,.user-command-bar,.pager,.report-detail-header{justify-content:space-between;gap:12px;flex-wrap:wrap}.data-metrics,.bulk-actions,.install-actions{gap:10px;flex-wrap:wrap}.data-metric{min-height:42px;display:inline-flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--border-soft);border-radius:8px;background:var(--panel-soft);color:var(--muted);font-size:.78rem;font-weight:800;text-transform:uppercase}.data-metric strong{color:var(--text-strong);font-size:1.2rem}.data-alert{min-height:42px;display:flex;align-items:center;gap:9px;padding:10px 12px;border-radius:8px;background:var(--warning-bg);color:var(--warning);font-weight:800}.data-table-wrap{position:relative;overflow-x:auto;border:1px solid var(--border);border-radius:8px;background:var(--panel-solid)}.data-loading{min-height:180px;display:grid;place-items:center;gap:10px;background:var(--overlay-bg);color:var(--text-strong);font-weight:800;z-index:3}.data-table-wrap .data-loading{position:absolute;top:0;right:0;bottom:0;left:0}.data-table{width:100%;min-width:980px;border-collapse:collapse}.users-table{min-width:1420px}.data-table.users-table th,.data-table.users-table td{padding:10px 9px;font-size:.86rem}.data-table.users-table th{font-size:.72rem}.data-table.users-table .table-date{min-width:136px}.data-table th,.data-table td{padding:12px;border-bottom:1px solid var(--border-soft);text-align:left;vertical-align:middle}.data-table th{position:sticky;top:0;z-index:1;background:var(--text-strong);color:#fff;font-size:.76rem;text-transform:uppercase;white-space:nowrap}.data-table th.sortable{cursor:pointer}.data-table th.active{background:var(--primary)}.data-table tbody tr:nth-child(2n){background:var(--row-alt)}.data-table tbody tr:last-child td{border-bottom:0}.thumb-button,.report-image-button{display:grid;place-items:center;overflow:hidden;border:0;border-radius:8px;background:var(--media-bg);color:var(--muted)}.thumb-button{width:58px;height:58px}.thumb-button img,.report-image-button img{width:100%;height:100%;object-fit:cover}.table-action,.danger-action{min-height:36px;display:inline-flex;align-items:center;justify-content:center;gap:6px;border:0;border-radius:8px;padding:0 10px;background:var(--primary);color:#fff;font-size:.8rem;font-weight:800}.danger-action{width:38px;padding:0;background:var(--danger)}.empty-row{height:110px;color:var(--muted);font-weight:800;text-align:center!important}.pager{padding:10px 0 0;color:var(--muted-strong);font-weight:800}.report-detail{display:grid;gap:18px}.report-hero{display:grid;grid-template-columns:minmax(180px,260px) minmax(0,1fr);gap:18px;align-items:center;padding:16px;border:1px solid var(--border-soft);border-radius:8px;background:var(--panel-soft)}.report-image-button{width:100%;aspect-ratio:4 / 3}.report-image-button span{display:grid;place-items:center;gap:8px;font-weight:800}.report-hero h3{margin-bottom:8px;color:var(--text-strong);font-size:1.5rem}.report-hero p:last-child{margin-bottom:0;color:var(--muted-strong)}.detail-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px;margin:0}.detail-grid div{min-height:72px;display:grid;gap:4px;align-content:start;padding:12px;border:1px solid var(--border-soft);border-radius:8px;background:var(--panel-solid)}.detail-grid .wide{grid-column:span 3}.notify-form{flex:1 1 360px;justify-content:flex-end;gap:8px}.notify-form input{max-width:420px}.table-date{min-width:150px;min-height:38px}.switch-button{position:relative;width:48px;height:26px;border:0;border-radius:999px;background:var(--switch-bg);color:#fff}.switch-button span{position:absolute;top:4px;left:4px;width:18px;height:18px;border-radius:50%;background:#fff;box-shadow:0 2px 4px rgba(var(--shadow-rgb),.2);transition:transform .16s ease}.switch-button.enabled{background:var(--success-action)}.switch-button.enabled span{transform:translate(22px)}.btb-panel{min-height:460px}.upload-panel{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;align-items:stretch}.file-drop{position:relative;min-height:150px;display:grid;place-items:center;gap:10px;border:2px dashed var(--border-strong);border-radius:8px;background:var(--panel-soft);color:var(--primary);font-weight:900;text-align:center}.file-drop input{position:absolute;top:0;right:0;bottom:0;left:0;opacity:0;cursor:pointer}.schema-strip{display:flex;flex-wrap:wrap;gap:8px}.schema-strip span{padding:7px 9px;border-radius:8px;background:var(--info-bg);color:var(--info-text);font-size:.78rem;font-weight:800}.public-mobile-view{min-height:calc(100vh - 34px);display:grid;place-items:center;padding:32px 16px}.mobile-panel{min-height:520px}.mobile-install-shell{align-content:center;min-height:420px;padding:30px;border:1px solid var(--border);border-radius:8px;background:var(--panel-solid)}.mobile-install-shell.standalone{width:min(760px,100%);box-shadow:0 20px 44px rgba(var(--shadow-rgb),.14)}.mobile-brand{display:flex;align-items:center;gap:18px}.mobile-brand img{width:132px;height:96px;object-fit:contain}.mobile-brand h2{margin-bottom:0;color:var(--text-strong);font-size:1.8rem}.install-actions{margin-top:12px}.install-action{min-height:76px;flex:1 1 240px;display:inline-flex;align-items:center;justify-content:space-between;gap:12px;padding:16px;border:1px solid var(--border-strong);border-radius:8px;background:var(--panel-soft);color:var(--text-strong);font-weight:900;text-decoration:none}.install-action:hover,.install-action:focus-visible{border-color:var(--primary);background:var(--info-bg);outline:3px solid rgba(var(--primary-rgb),.2)}.spin{animation:spin .9s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}@media (max-width: 920px){.login-view{grid-template-columns:1fr;align-items:start}.login-brand h1{font-size:2.4rem}.topbar{align-items:flex-start;flex-direction:column}.nav-actions{width:100%;justify-content:flex-start}.workspace,.map-workspace,.data-workspace{grid-template-columns:1fr}.side-panel{min-height:0}}@media (max-width: 680px){.login-view{width:min(100% - 20px,960px);min-height:calc(100vh - 34px);padding:28px 0}.login-panel{padding:20px}.login-brand h1{font-size:2rem}.topbar{padding:12px 16px}.brand-button{min-width:0}.panel-theme-switcher{justify-content:flex-start}.nav-button{width:calc(33.333% - 6px)}.workspace{width:min(100% - 20px,1180px);margin-top:18px}.panel-header{flex-direction:column}.segmented{width:100%}.user-form{grid-template-columns:1fr}.qr-panel{grid-template-columns:1fr;padding:20px}.scene-view,.map-frame{min-height:460px}.scene-view{height:460px}.map-toolbar,.map-footer{align-items:stretch;flex-direction:column}.map-buttons,.video-actions,.video-metrics,.time-controls,.map-legend{width:100%}.video-toolbar,.video-preview-header,.data-toolbar,.user-command-bar,.pager,.report-detail-header,.mobile-brand{align-items:stretch;flex-direction:column}.notify-form,.bulk-actions,.data-metrics,.install-actions{width:100%}.notify-form{align-items:stretch;flex-direction:column}.notify-form input{max-width:none}.report-hero,.detail-grid,.upload-panel{grid-template-columns:1fr}.detail-grid .wide{grid-column:span 1}.file-drop{min-height:130px}}
