:root{color:#172019;font-synthesis:none;text-rendering:optimizelegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;background:#f6f7f3;font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;line-height:1.5}*{box-sizing:border-box}body{min-width:320px;margin:0}button,input{font:inherit}.app-shell{color:#172019;background:#f6f7f3;min-height:100svh}.top-nav{z-index:10;background:#fff;border-bottom:1px solid #d8ddd4;justify-content:space-between;align-items:center;min-height:64px;padding:0 24px;display:flex;position:sticky;top:0}.brand-lockup{align-items:center;gap:10px;display:flex}.brand-mark{color:#fff;background:#214f3a;border-radius:6px;justify-content:center;align-items:center;width:56px;height:32px;font-size:13px;font-weight:800;display:inline-flex}.nav-actions{gap:8px;display:flex}.nav-actions button,.primary-button,.danger-button{cursor:pointer;font:inherit;border:0;border-radius:6px;min-height:42px;padding:0 16px;font-weight:700}.nav-actions button{color:#243226;background:#edf1e8}.nav-actions button.active,.primary-button{color:#fff;background:#1f6b49}.danger-button{color:#fff;background:#a23b32}.capture-grid,.console-page{max-width:1200px;margin:0 auto;padding:24px}.capture-grid{grid-template-columns:minmax(0,1fr) 360px;gap:20px;display:grid}.capture-shell{color:#f8faf6;background:#0c1210}.capture-shell .top-nav{z-index:30;background:0 0;border:0;min-height:0;padding:0;position:fixed;inset:10px 10px auto auto}.capture-shell .brand-lockup,.capture-shell .nav-actions button.active{display:none}.capture-shell .nav-actions{background:#0c12109e;border:1px solid #ffffff2e;border-radius:8px;gap:4px;width:auto;padding:4px}.capture-shell .nav-actions button{color:#172019;background:#ffffffeb;width:auto;min-height:34px;padding:0 12px;font-size:13px}.capture-shell .capture-grid{max-width:none;min-height:100svh;margin:0;padding:0;display:block}.capture-shell .camera-stage{background:#070b09;border:0;border-radius:0;min-height:100svh;position:relative}.capture-shell .stage-toolbar{pointer-events:none;z-index:26;padding:0;position:fixed;inset:12px 12px auto}.capture-shell .stage-toolbar>div{color:#fff;background:#0c1210a8;border:1px solid #ffffff2e;border-radius:8px;gap:6px;max-width:calc(100vw - 152px);padding:10px 12px}.capture-shell .stage-toolbar h1{color:#fff;font-size:16px;line-height:1.15}.capture-shell .countdown-pill{color:#733613;background:#fff8ecf5;font-size:14px;box-shadow:0 8px 24px #00000038}.capture-shell .stage-toolbar button{bottom:calc(96px + env(safe-area-inset-bottom));pointer-events:auto;z-index:28;min-height:50px;position:fixed;left:12px;right:12px}.capture-shell .capture-ready .stage-toolbar button{bottom:calc(min(46svh, 360px) + 20px + env(safe-area-inset-bottom))}.capture-shell .capture-running .stage-toolbar button{bottom:calc(94px + env(safe-area-inset-bottom))}.capture-shell .camera-preview{aspect-ratio:auto;object-fit:cover;width:100%;height:100svh}.capture-shell .control-panel{bottom:calc(8px + env(safe-area-inset-bottom));color:#172019;z-index:24;background:#f8faf6f5;border-color:#ffffff3d;border-radius:8px;max-height:min(46svh,360px);padding:10px;position:fixed;left:8px;right:8px;overflow:auto;box-shadow:0 18px 42px #0000004d}.capture-shell .control-fields{grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;display:grid}.capture-shell .capture-running .control-fields,.capture-shell .capture-running .control-panel>.notice:first-child{display:none}.capture-shell .status-list{border:0;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:0;padding:0}.capture-shell .status-list div{background:#edf1e8;border-radius:6px;gap:4px;min-width:0;padding:8px;display:grid}.capture-shell .status-list dd{text-align:left;text-overflow:ellipsis;white-space:nowrap;font-size:12px;font-weight:800;overflow:hidden}.camera-stage,.control-panel,.console-header,.location-panel,.snapshot-gallery-panel,.snapshot-history-panel,.camera-card{background:#fff;border:1px solid #d8ddd4;border-radius:8px}.camera-stage{overflow:hidden}.stage-toolbar,.console-header{justify-content:space-between;align-items:center;padding:18px;display:flex}h1,h2,p{margin:0}h1{font-size:28px;line-height:1.2}h2{font-size:18px;line-height:1.25}.stage-toolbar>div{gap:8px;display:grid}.status-pill{border-radius:999px;justify-content:center;width:fit-content;padding:4px 10px;font-size:13px;font-weight:800;display:inline-flex}.countdown-pill{color:#8c4b1f;background:#fff8ec;border:1px solid #d7a25d;border-radius:999px;justify-content:center;width:fit-content;padding:4px 10px;font-size:13px;font-weight:900;display:inline-flex}.status-idle{color:#556154;background:#edf1e8}.status-starting,.status-running,.connection-ok{color:#1f6b49}.status-starting,.status-running{background:#dceee4}.status-failed,.connection-bad{color:#a23b32}.status-failed{background:#f6dfdd}.camera-preview{aspect-ratio:16/9;object-fit:cover;background:#111814;width:100%;display:block}.control-panel{align-content:start;gap:14px;padding:18px;display:grid}.control-panel label{color:#4f5c51;gap:6px;font-size:14px;font-weight:700;display:grid}.control-panel input,.control-panel select{color:#172019;font:inherit;background:#fbfcfa;border:1px solid #cfd6ca;border-radius:6px;min-height:42px;padding:0 12px}.notice,.error-message,.empty-state{border-radius:6px;padding:12px}.notice{color:#28563f;background:#eef6f1}.error-message{color:#8b3029;background:#f8e3df}.empty-state{color:#5f6a5e;background:#f0f2ec}.status-list{border-top:1px solid #d8ddd4;gap:10px;margin:8px 0 0;padding-top:14px;display:grid}.status-list div,.camera-card dl div{justify-content:space-between;gap:12px;display:flex}dt{color:#627064;font-size:13px;font-weight:800}dd{color:#172019;text-align:right;margin:0}.console-header{margin-bottom:18px}.console-header>div:first-child{gap:8px;display:grid}.data-dir{color:#4d5a4f;text-overflow:ellipsis;white-space:nowrap;background:#edf1e8;border-radius:6px;max-width:420px;padding:10px 12px;overflow:hidden}.operations-summary{grid-template-columns:repeat(5,minmax(0,1fr));gap:12px;margin-bottom:18px;display:grid}.summary-metric{background:#fff;border:1px solid #d8ddd4;border-radius:8px;gap:8px;min-height:86px;padding:14px;display:grid}.summary-metric span{color:#627064;font-size:13px;font-weight:800}.summary-metric strong{color:#172019;font-size:28px;line-height:1}.summary-metric.attention{background:#fff8ec;border-color:#d7a25d}.summary-metric.attention strong{color:#9a4a25}.camera-list{grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px;display:grid}.location-panel{gap:16px;margin-bottom:18px;padding:18px;display:grid}.location-panel-header{justify-content:space-between;align-items:end;gap:16px;display:flex}.location-panel-header>div{gap:6px;display:grid}.location-panel-header p{color:#687266}.location-panel-actions{align-items:end;gap:10px;display:flex}.location-panel-header label,.camera-registration-form label{color:#4f5c51;gap:6px;min-width:220px;font-size:13px;font-weight:800;display:grid}.location-panel-header input,.camera-registration-form input,.camera-registration-form select{color:#172019;font:inherit;background:#fbfcfa;border:1px solid #cfd6ca;border-radius:6px;min-height:40px;padding:0 12px}.camera-registration-form{background:#fbfcfa;border:1px solid #d8ddd4;border-radius:8px;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));align-items:end;gap:12px;padding:14px;display:grid}.camera-registration-form button{align-self:end}.camera-registration-form .camera-enabled-control{align-self:end;align-items:center;gap:8px;min-height:40px;display:flex}.camera-registration-form .camera-enabled-control input{width:auto;min-height:auto}.camera-form-helper{color:#4f5c51;background:#eef3ea;border:1px solid #d8ddd4;border-radius:6px;align-self:end;margin:0;padding:9px 12px;font-size:12px;font-weight:700;line-height:1.5}.camera-connection-panel{background:#f8faf6;border:1px solid #d8ddd4;border-radius:8px;gap:14px;padding:14px;display:grid}.camera-connection-panel h3{margin:0;font-size:18px}.camera-connection-panel p,.camera-connection-panel small{color:#687266;margin:4px 0 0}.camera-connection-panel .token-link-warning{color:#92400e;font-weight:700}.camera-connection-body{grid-template-columns:auto minmax(0,1fr);align-items:center;gap:14px;display:grid}.camera-connection-qr{color:#687266;background:#fff;border:1px solid #cfd6ca;border-radius:8px;justify-content:center;align-items:center;width:180px;height:180px;font-size:13px;font-weight:800;display:flex}.camera-connection-qr img{width:168px;height:168px;display:block}.camera-connection-controls{gap:10px;min-width:0;display:grid}.camera-connection-controls label{color:#4f5c51;gap:6px;font-size:13px;font-weight:800;display:grid}.camera-connection-controls input{color:#172019;font:inherit;background:#fff;border:1px solid #cfd6ca;border-radius:6px;min-width:0;min-height:40px;padding:0 12px}.camera-connection-actions{flex-wrap:wrap;gap:8px;display:flex}.snapshot-gallery-panel{gap:14px;margin-bottom:18px;padding:18px;display:grid}.snapshot-gallery-header{justify-content:space-between;align-items:center;gap:16px;display:flex}.snapshot-gallery-header>div{gap:6px;display:grid}.snapshot-gallery-actions{align-items:center;gap:10px;display:flex}.snapshot-gallery-actions span,.snapshot-gallery-filters span{color:#687266}.snapshot-gallery-filters{grid-template-columns:minmax(160px,220px) minmax(140px,180px) minmax(220px,1fr) auto;align-items:end;gap:12px;display:grid}.snapshot-gallery-filters label{color:#4f5c51;gap:6px;font-size:13px;font-weight:800;display:grid}.snapshot-gallery-filters input,.snapshot-gallery-filters select{color:#172019;font:inherit;background:#fbfcfa;border:1px solid #cfd6ca;border-radius:6px;min-height:40px;padding:0 12px}.snapshot-gallery-grid{grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;display:grid}.snapshot-gallery-item{color:inherit;cursor:pointer;font:inherit;text-align:left;background:#fbfcfa;border:1px solid #d8ddd4;border-radius:8px;padding:0;overflow:hidden}.snapshot-gallery-item:hover,.snapshot-gallery-item:focus-visible{border-color:#1f6b49;box-shadow:0 0 0 2px #1f6b491f}.snapshot-gallery-item img{aspect-ratio:4/3;object-fit:cover;background:#172019;width:100%;display:block}.snapshot-gallery-item span{gap:4px;padding:10px;display:grid}.snapshot-gallery-item strong,.snapshot-gallery-item small,.snapshot-gallery-item em,.snapshot-gallery-item time{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.snapshot-gallery-item strong{color:#172019;font-size:13px}.snapshot-gallery-item small,.snapshot-gallery-item em,.snapshot-gallery-item time{color:#687266;font-size:12px;font-style:normal}.snapshot-preview-backdrop{z-index:40;background:#0d120fc2;justify-content:center;align-items:center;padding:clamp(16px,4vw,48px);display:flex;position:fixed;inset:0}.snapshot-preview-dialog{background:#f8faf6;border:1px solid #d7ded2;border-radius:8px;grid-template-columns:minmax(0,2fr) minmax(280px,360px);width:100%;max-width:1120px;max-height:min(760px,100vh - 32px);display:grid;overflow:hidden;box-shadow:0 24px 70px #00000057}.snapshot-preview-media{background:#121814;justify-content:center;align-items:center;min-height:340px;display:flex}.snapshot-preview-media img{object-fit:contain;width:100%;height:100%;max-height:calc(100vh - 64px);display:block}.snapshot-preview-details{align-content:start;gap:18px;padding:20px;display:grid;overflow:auto}.snapshot-preview-header{justify-content:space-between;align-items:flex-start;gap:12px;display:flex}.snapshot-preview-header h2{color:#172019;letter-spacing:0;margin:0;font-size:22px}.snapshot-preview-header p{color:#687266;margin:4px 0 0;font-size:13px}.snapshot-preview-details dl{gap:0;margin:0;display:grid}.snapshot-preview-details dl div{border-top:1px solid #dfe5da;gap:5px;padding:11px 0;display:grid}.snapshot-preview-details dt{color:#687266;font-size:12px;font-weight:800}.snapshot-preview-details dd{color:#172019;overflow-wrap:anywhere;margin:0;font-size:14px}.snapshot-history-panel{gap:14px;margin-bottom:18px;padding:18px;display:grid}.snapshot-history-header{justify-content:space-between;align-items:center;gap:16px;display:flex}.snapshot-history-header>div{gap:6px;display:grid}.snapshot-history-actions{align-items:center;gap:10px;display:flex}.snapshot-history-header p,.snapshot-history-header span{color:#687266}.snapshot-history-grid{grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:12px;display:grid}.snapshot-history-item{background:#fbfcfa;border:1px solid #d8ddd4;border-radius:8px;overflow:hidden}.snapshot-history-item img{aspect-ratio:4/3;object-fit:cover;background:#172019;width:100%;display:block}.snapshot-history-item div{gap:4px;padding:10px;display:grid}.snapshot-history-item strong,.snapshot-history-item span{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.snapshot-history-item strong{color:#172019;font-size:13px}.snapshot-history-item span{color:#687266;font-size:12px}.media-frame{max-width:100%;display:inline-block;position:relative}.snapshot-gallery-item .media-frame,.snapshot-history-item .media-frame{width:100%;display:block}.camera-card-media .media-frame{width:100%;height:100%;display:block}.media-load-error{color:#b91c1c;margin-top:6px;font-size:12px;font-weight:700;display:block}.camera-card-media .media-load-error{color:#fecaca;background:#172019c7;border-radius:6px;margin-top:0;padding:4px 6px;position:absolute;bottom:8px;left:8px;right:8px}.layout-background-form{grid-template-columns:minmax(0,1fr) auto;align-items:end;gap:12px;display:grid}.layout-background-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.layout-background-upload{position:relative;overflow:hidden}.layout-background-upload:focus-within{outline-offset:2px;outline:2px solid #2563eb}.layout-background-file-input{cursor:pointer;opacity:0;font-size:120px;position:absolute;inset:0}.location-map{--layout-background-image:linear-gradient(135deg, #dfe9df 0%, #eef4e9 50%, #e4edf2 100%);aspect-ratio:16/7;background:linear-gradient(90deg, #ffffff7a 1px, transparent 1px) 0 0 / 12.5% 100%, linear-gradient(0deg, #ffffff85 1px, transparent 1px) 0 0 / 100% 20%, var(--layout-background-image) center / cover;cursor:default;border:1px solid #cfd6ca;border-radius:8px;min-height:260px;position:relative;overflow:hidden}.location-map.has-background{background-color:#172019}.location-map.editing{cursor:crosshair}.map-empty{color:#687266;font-size:13px;font-weight:800;position:absolute;top:50%;left:50%;transform:translate(-50%,-50%)}.map-background-error{color:#fecaca;z-index:2;background:#172019c7;border-radius:6px;padding:6px 8px;font-size:12px;font-weight:800;position:absolute;top:12px;left:12px}.map-marker{color:#1f6b49;cursor:pointer;font:inherit;background:#f7fbf6;border:2px solid #1f6b49;border-radius:999px;justify-content:center;align-items:center;width:42px;height:42px;padding:0;font-size:12px;font-weight:900;transition:transform .15s,background .15s,color .15s;display:inline-flex;position:absolute;transform:translate(-50%,-50%);box-shadow:0 10px 22px #1720192e}.map-marker:hover,.map-marker:focus-visible{transform:translate(-50%,-50%)scale(1.08)}.map-marker.selected{color:#fff;background:#1f6b49}.map-marker.normal{color:#1f6b49;border-color:#1f6b49}.map-marker.stale,.map-marker.missing{color:#8c4b1f;border-color:#d7a25d}.map-marker.disabled{color:#5f6a5e;border-color:#9aa39b}.map-marker.selected.normal{color:#fff;background:#1f6b49}.map-marker.selected.stale,.map-marker.selected.missing{color:#fff;background:#8c4b1f}.map-marker.selected.disabled{color:#fff;background:#5f6a5e}.map-selected-summary{z-index:2;background:#f8faf6f0;border:1px solid #d8ddd4;border-radius:8px;grid-template-columns:72px minmax(0,1fr);align-items:center;gap:10px;max-width:min(380px,100% - 24px);padding:10px;display:grid;position:absolute;bottom:12px;left:12px;box-shadow:0 12px 30px #17201929}.map-selected-media{aspect-ratio:4/3;color:#aeb8ad;background:#172019;border-radius:6px;justify-content:center;align-items:center;font-size:11px;font-weight:900;display:flex;overflow:hidden}.map-selected-media img{object-fit:cover;width:100%;height:100%;display:block}.map-selected-copy{gap:4px;min-width:0;display:grid}.map-selected-copy strong,.map-selected-copy p,.map-selected-copy small{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.map-selected-copy strong{color:#172019;font-size:14px}.map-selected-copy p,.map-selected-copy small{color:#687266;margin:0;font-size:12px}.map-keyboard-controls{grid-template-columns:repeat(3,34px);justify-content:start;gap:4px;margin-top:4px;display:grid}.map-keyboard-controls .select-camera-button{min-height:30px;padding:0}.map-keyboard-controls .select-camera-button:first-child,.map-keyboard-controls .select-camera-button:last-child{grid-column:2}.camera-card{overflow:hidden}.camera-card.selected{border-color:#1f6b49;box-shadow:0 0 0 2px #1f6b491f}.camera-card.needs-attention{border-color:#d7a25d;box-shadow:0 0 0 2px #d7a25d29}.camera-card-media{aspect-ratio:16/9;color:#aeb8ad;background:#172019;justify-content:center;align-items:center;font-size:13px;font-weight:800;display:flex}.camera-card-media img{object-fit:cover;width:100%;height:100%}.camera-card-body{gap:14px;padding:14px;display:grid}.camera-card-title-row{justify-content:space-between;align-items:start;gap:12px;display:flex}.camera-card-actions{flex-wrap:wrap;justify-content:flex-end;gap:8px;display:flex}.select-camera-button{color:#243226;cursor:pointer;font:inherit;background:#edf1e8;border:0;border-radius:6px;justify-content:center;align-items:center;min-height:34px;padding:0 12px;font-size:13px;font-weight:800;text-decoration:none;display:inline-flex}.select-camera-button.active{color:#fff;background:#1f6b49}.camera-card-body p{color:#687266;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:13px}.camera-card dl{gap:8px;margin:0;display:grid}.camera-health{border-radius:999px;justify-content:center;padding:3px 8px;font-size:12px;font-weight:900;display:inline-flex}.camera-health.normal{color:#1f6b49;background:#dceee4}.camera-health.stale,.camera-health.missing{color:#8c4b1f;background:#fff0d8}.camera-health.disabled{color:#5f6a5e;background:#edf1e8}@media (width<=860px){.top-nav{flex-direction:column;align-items:flex-start;gap:12px;padding:14px 16px}.nav-actions,.nav-actions button{width:100%}.nav-actions button{flex:1 1 0}.capture-grid,.console-page{padding:16px}.capture-grid{grid-template-columns:1fr}.stage-toolbar,.console-header,.location-panel-actions,.location-panel-header,.snapshot-gallery-header{flex-direction:column;align-items:stretch;gap:14px}.data-dir{max-width:none}.operations-summary{grid-template-columns:repeat(2,minmax(0,1fr))}.location-panel-header label{min-width:0}.layout-background-form{grid-template-columns:1fr;align-items:stretch}.location-map{aspect-ratio:4/3;min-height:240px}.camera-registration-form,.camera-connection-body{grid-template-columns:1fr}.camera-connection-qr{justify-self:center}.snapshot-history-header{flex-direction:column;align-items:stretch}.snapshot-gallery-actions,.snapshot-history-actions{justify-content:space-between}.snapshot-gallery-filters{grid-template-columns:1fr}.snapshot-preview-backdrop{align-items:stretch;padding:12px}.snapshot-preview-dialog{grid-template-columns:1fr;max-height:calc(100vh - 24px)}.snapshot-preview-media{min-height:220px}.snapshot-preview-media img{max-height:48vh}.snapshot-preview-header{flex-direction:column;align-items:stretch}}
