@import"https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@400;600&family=Space+Grotesk:wght@400;500;600;700&display=swap";:root{font-family:Space Grotesk,Avenir Next,Trebuchet MS,sans-serif;color:#1b1a16;--font-mono: "JetBrains Mono", "Courier New", monospace;--bg: #f4f2ec;--bg-soft: #fdfaf3;--panel: #ffffff;--panel-border: rgba(25, 23, 19, .08);--text: #1b1a16;--muted: #605e57;--accent: #1f7a6f;--accent-strong: #d16c2f;--accent-soft: #e8d8c1;--danger: #b42318;--warning: #d97706;--success: #047857;--shadow: 0 20px 45px rgba(25, 23, 19, .12);--radius: 24px;--transition: .2s ease}*,*:before,*:after{box-sizing:border-box}body{margin:0;min-height:100vh;color:var(--text);background:radial-gradient(1200px 800px at 10% 10%,#fef6e8 0%,transparent 60%),radial-gradient(900px 700px at 85% 20%,#e7f2ee 0%,transparent 60%),linear-gradient(180deg,#f4f2ec,#efe9de)}body:before{content:"";position:fixed;inset:-20%;background:radial-gradient(600px 400px at 15% 80%,rgba(209,108,47,.12),transparent 60%),radial-gradient(500px 500px at 85% 70%,rgba(31,122,111,.14),transparent 60%);opacity:.7;pointer-events:none;z-index:0}#root{position:relative;z-index:1}h1,h2,h3{margin:0;letter-spacing:-.02em}p{margin:0}.muted{color:var(--muted)}.app-shell{min-height:100vh;height:auto;display:flex;flex-direction:column;gap:1.5rem;padding:1.75rem 2rem 2rem}.topbar{display:flex;justify-content:space-between;align-items:center;gap:1.5rem;animation:slideDown .6s ease}.brand{display:flex;align-items:center;gap:1rem}.brand-mark{background:linear-gradient(135deg,var(--accent),var(--accent-strong));color:#fff;font-weight:700;padding:.75rem .95rem;border-radius:16px;letter-spacing:.1em;font-size:1rem;text-transform:uppercase;box-shadow:0 10px 25px #1f7a6f4d}.topbar-actions{display:flex;align-items:center;gap:.75rem}.field-inline{display:flex;align-items:center;gap:.5rem;background:#ffffffb3;border:1px solid var(--panel-border);padding:.5rem .75rem;border-radius:999px}.field-inline input{border:none;background:transparent;min-width:180px;font-family:inherit;color:var(--text)}.field-label{font-size:.75rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.app-body{display:grid;grid-template-columns:minmax(260px,1fr) minmax(0,2fr);grid-template-rows:minmax(0,1fr);grid-template-areas:"sites viewer";gap:1.5rem;flex:1;min-height:0;height:100%}.panel-section{background:var(--panel);border-radius:var(--radius);border:1px solid var(--panel-border);padding:1.25rem;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:1rem;animation:riseIn .6s ease;animation-fill-mode:both;min-height:0}.sites-panel{grid-area:sites;animation-delay:.05s}.viewer-panel{grid-area:viewer;animation-delay:.15s}.downloads-panel,.downloads-results-panel{animation-delay:.25s;overflow:hidden;min-height:0}.downloads-results-panel{animation-delay:.35s}.logs-panel{min-height:0;flex:1}.versions-panel,.tailscale-panel,.s3-panel{min-height:0;flex:1;overflow:hidden}.version-summary,.tailscale-summary,.s3-summary{display:flex;flex-wrap:wrap;gap:.5rem}.version-controls{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center}.version-controls input[type=search]{flex:1;min-width:200px;border:1px solid var(--panel-border);background:var(--bg-soft);padding:.5rem .75rem;border-radius:12px;font-size:.9rem;color:var(--text)}.version-controls select{border:none;background:transparent;font-family:inherit;color:var(--text)}.tailscale-controls,.s3-controls{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center}.tailscale-controls input[type=search]{flex:1;min-width:220px;border:1px solid var(--panel-border);background:var(--bg-soft);padding:.5rem .75rem;border-radius:12px;font-size:.9rem;color:var(--text)}.s3-controls input[type=search],.s3-controls input[type=text],.s3-controls input[type=date]{flex:1;min-width:200px;border:1px solid var(--panel-border);background:var(--bg-soft);padding:.5rem .75rem;border-radius:12px;font-size:.9rem;color:var(--text)}.tailscale-controls select,.s3-controls select{border:none;background:transparent;font-family:inherit;color:var(--text)}.tailscale-meta{font-size:.75rem}.s3-meta{font-size:.75rem;display:flex;align-items:center;flex-wrap:wrap;gap:.4rem}.meta-divider{margin:0 .35rem;color:var(--muted)}.version-export-buttons{display:flex;flex-wrap:wrap;gap:.5rem}.version-export-buttons .ghost.small{white-space:nowrap}.version-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));grid-auto-rows:minmax(180px,max-content);gap:.75rem;overflow-x:hidden;overflow-y:auto;padding-right:.25rem;min-height:0;flex:1;align-content:start}.tailscale-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));grid-auto-rows:minmax(140px,auto);gap:.75rem;overflow-x:hidden;overflow-y:auto;padding-right:.25rem;min-height:0;flex:1;align-content:start}.s3-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));grid-auto-rows:minmax(160px,auto);gap:.75rem;overflow-x:hidden;overflow-y:auto;padding-right:.25rem;min-height:0;flex:1;align-content:start}.version-card{background:var(--bg-soft);border:1px solid var(--panel-border);border-radius:16px;padding:.75rem;display:flex;flex-direction:column;gap:.35rem;overflow:hidden;min-width:0;min-height:160px;cursor:pointer}.tailscale-card{min-height:140px}.s3-card{min-height:160px}.version-card:focus{outline:2px solid var(--accent);outline-offset:2px}.version-card-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;flex-wrap:wrap;min-width:0}.version-card-actions{display:inline-flex;align-items:center;gap:.4rem}.info-button{width:28px;height:28px;border-radius:50%;border:1px solid var(--panel-border);background:#fff;color:var(--accent);font-weight:600;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-family:var(--font-mono)}.info-button svg{width:14px;height:14px}.info-button:hover{border-color:var(--accent);box-shadow:0 6px 14px #1f7a6f33}.cron-button{color:var(--accent-strong)}.cron-button:hover{border-color:var(--accent-strong);box-shadow:0 6px 14px #d16c2f33}.version-site{font-weight:600;font-size:.95rem;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.version-meta{font-size:.75rem;color:var(--muted);overflow-wrap:anywhere}.version-meta.success{color:var(--success);font-weight:600}.tailscale-ip-row{display:inline-flex;align-items:center;gap:.35rem}.copy-circle-button{width:20px;height:20px;border-radius:999px;border:1px solid var(--panel-border);background:#fff;color:var(--muted);display:inline-flex;align-items:center;justify-content:center;padding:0;cursor:pointer;transition:border-color .15s ease,color .15s ease,transform .15s ease,box-shadow .15s ease}.copy-circle-button svg{width:12px;height:12px}.copy-circle-button:hover{border-color:var(--accent);color:var(--accent);box-shadow:0 6px 14px #1f7a6f2e;transform:translateY(-1px)}.copy-circle-button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.tailscale-uptime,.s3-uptime{font-size:.8rem;font-weight:600;color:var(--accent)}.version-pill,.tailscale-pill,.s3-pill{padding:.25rem .6rem;border-radius:999px;font-size:.7rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;border:1px solid transparent;white-space:nowrap;line-height:1.2;flex:0 0 auto}.s3-alert{color:var(--danger);font-weight:600}.version-warning{font-size:.75rem;color:var(--warning)}.version-confirm-modal{width:min(92vw,640px)}.version-confirm-body{display:flex;flex-direction:column;gap:.75rem}.version-confirm-warning{flex-direction:column;align-items:flex-start;gap:.35rem;font-size:.78rem;line-height:1.4}.version-confirm-slider{display:flex;flex-direction:column;gap:.35rem;font-size:.75rem;color:var(--muted)}.version-confirm-slider input[type=range]{width:100%;accent-color:var(--warning)}.version-confirm-actions{display:flex;justify-content:flex-end;gap:.5rem}.ghost.warning{border-color:#d9770673;color:var(--warning)}.lock-button{border-color:#b4231866;color:var(--danger);background:#b4231814}.lock-button:hover{background:#b4231829}.version-pill.v2-current{color:var(--success);background:#0478571f;border-color:#04785740}.version-pill.v2-warning,.version-pill.v2-unknown{color:var(--warning);background:#d977061f;border-color:#d9770640}.version-pill.legacy{color:var(--danger);background:#b423181f;border-color:#b4231840}.version-pill.offline{color:var(--muted);background:#605e571f;border-color:#605e5740}.version-pill.error{color:var(--danger);background:#b423181f;border-color:#b4231840}.tailscale-pill.online{color:var(--success);background:#0478571f;border-color:#04785740}.tailscale-pill.offline{color:var(--danger);background:#b423181f;border-color:#b4231840}.tailscale-pill.unknown{color:var(--warning);background:#d977061f;border-color:#d9770640}.s3-pill.critical{color:var(--danger);background:#b423181f;border-color:#b4231840}.s3-pill.warning{color:var(--warning);background:#d977061f;border-color:#d9770640}.s3-pill.minor{color:var(--accent-strong);background:#d16c2f1f;border-color:#d16c2f40}.s3-pill.healthy{color:var(--success);background:#0478571f;border-color:#04785740}.s3-pill.no_uploads{color:var(--muted);background:#605e571f;border-color:#605e5740}.code-manager-layout{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,1fr);gap:1.5rem;flex:1;min-height:0}.codegen-panel{min-height:0}.codegen-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:1rem}.codegen-fields{display:flex;flex-direction:column;gap:.75rem}.codegen-fields select,.codegen-fields input[type=text]{width:100%}.codegen-sites{background:var(--bg-soft);border:1px solid var(--panel-border);border-radius:18px;padding:.75rem;display:flex;flex-direction:column;gap:.75rem;min-height:0}.codegen-sites-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem}.codegen-sites-header h3{margin:0;font-size:1rem}.codegen-sites input[type=search]{border:1px solid var(--panel-border);background:#fff;padding:.5rem .75rem;border-radius:12px;font-size:.9rem;color:var(--text)}.codegen-toggles{display:flex;flex-wrap:wrap;gap:.75rem}.codegen-selection{font-size:.8rem;color:var(--muted)}.codegen-site-list{border:1px solid var(--panel-border);background:#fff;border-radius:12px;padding:.5rem;display:flex;flex-direction:column;gap:.35rem;overflow:auto;max-height:260px}.codegen-site-item{display:flex;align-items:center;gap:.5rem;font-size:.85rem;color:var(--text);cursor:pointer}.codegen-site-item span{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.codegen-site-item input{flex-shrink:0}.codegen-output{position:relative}.codegen-output textarea{width:100%;border:1px solid var(--panel-border);background:var(--bg-soft);border-radius:12px;padding:.75rem;font-family:var(--font-mono);font-size:.82rem;line-height:1.4;color:var(--text);resize:vertical}.copy-icon-button{position:absolute;right:1rem;bottom:1rem;border-radius:999px;border:1px solid rgba(15,23,42,.15);background:#fff9;color:var(--text);padding:.35rem .65rem;font-size:.75rem;letter-spacing:.02em;opacity:.65;transition:opacity .15s ease,transform .15s ease}.copy-icon-button:hover{opacity:1;transform:translateY(-1px)}.copy-icon-button:disabled{opacity:.4;cursor:not-allowed;transform:none}.modal-overlay{position:fixed;inset:0;background:#0f0d0a73;display:flex;align-items:center;justify-content:center;padding:1.5rem;z-index:10}.modal-card{width:min(720px,92vw);max-height:80vh;background:var(--panel);border-radius:20px;border:1px solid var(--panel-border);padding:1rem 1.25rem;box-shadow:var(--shadow);display:flex;flex-direction:column;gap:.75rem}.tailscale-modal{width:min(92vw,720px)}.s3-modal{width:min(92vw,900px)}.tailscale-modal-body,.s3-modal-body{display:flex;flex-direction:column;gap:1rem}.tailscale-modal-meta,.s3-modal-meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.5rem 1rem;font-size:.8rem;color:var(--muted)}.s3-modal-summary{display:flex;flex-wrap:wrap;gap:.5rem}.tailscale-graph{border-radius:16px;border:1px solid var(--panel-border);background:#fff;padding:.75rem;height:160px;position:relative}.s3-graph{border-radius:16px;border:1px solid var(--panel-border);background:#fff;padding:.75rem;height:160px}.tailscale-graph svg{width:100%;height:100%}.tailscale-tooltip{position:absolute;top:.25rem;transform:translate(-50%);background:#0f172aeb;color:#f8fafc;font-size:.7rem;padding:.2rem .45rem;border-radius:999px;pointer-events:none;white-space:nowrap;box-shadow:0 6px 12px #0f172a33}.tailscale-legend{font-size:.75rem;color:var(--muted);display:flex;flex-direction:column;gap:.15rem}.s3-graph svg{width:100%;height:100%}.tailscale-insights{font-size:.8rem;color:var(--muted);display:flex;flex-direction:column;gap:.35rem}.s3-history{display:flex;flex-direction:column;gap:.75rem}.s3-history-header{display:flex;align-items:flex-start;justify-content:space-between;gap:.75rem;flex-wrap:wrap}.s3-history-content{display:grid;grid-template-columns:minmax(160px,1fr) minmax(0,2fr);gap:.75rem;min-height:0}.s3-history-list{display:flex;flex-direction:column;gap:.4rem;max-height:280px;overflow:auto;padding-right:.25rem}.s3-history-item{border:1px solid var(--panel-border);background:var(--bg-soft);border-radius:12px;padding:.4rem .6rem;display:flex;align-items:center;gap:.4rem;cursor:pointer;font-size:.75rem;color:var(--text)}.s3-history-item.active{border-color:var(--accent);box-shadow:0 6px 14px #1f7a6f33}.s3-history-date{font-weight:600}.s3-history-total{margin-left:auto;color:var(--muted)}.s3-entry-details{border:1px solid var(--panel-border);border-radius:16px;padding:.75rem;background:#fff;display:flex;flex-direction:column;gap:.6rem}.s3-entry-title{display:flex;align-items:center;justify-content:space-between;gap:.5rem}.s3-entry-status{font-size:.7rem;text-transform:uppercase;letter-spacing:.08em;color:var(--muted)}.s3-entry-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:.35rem .75rem;font-size:.78rem;color:var(--muted)}.s3-diagnosis{font-size:.8rem;color:var(--text);background:#1f7a6f14;border-radius:12px;padding:.45rem .6rem}.s3-entry-issues,.s3-entry-paths{font-size:.78rem;color:var(--muted);display:flex;flex-direction:column;gap:.25rem}.s3-sync-grid{border:1px solid var(--panel-border);border-radius:12px;padding:.5rem;background:var(--bg-soft);display:grid;grid-template-columns:repeat(auto-fit,minmax(70px,1fr));gap:.4rem;font-size:.74rem;color:var(--text)}.s3-sync-item{display:flex;justify-content:space-between;gap:.35rem;font-family:var(--font-mono)}.modal-header{display:flex;align-items:flex-start;justify-content:space-between;gap:1rem}.modal-code{margin:0;background:#0b0f0f;color:#f5f5f5;padding:.75rem;border-radius:12px;overflow:auto;font-family:var(--font-mono);font-size:.78rem;line-height:1.4;border:1px solid rgba(255,255,255,.12)}.panel-header{display:flex;justify-content:space-between;align-items:flex-start;gap:1rem}.panel-actions{display:flex;flex-wrap:wrap;gap:.5rem;align-items:center}.panel-actions select{border:1px solid var(--panel-border);border-radius:12px;padding:.4rem .6rem;background:var(--bg-soft);color:var(--text)}.mode-toggle{display:inline-flex;gap:.4rem}.panel-tools input{width:100%;border:1px solid var(--panel-border);background:var(--bg-soft);padding:.6rem .8rem;border-radius:12px;font-size:.95rem;color:var(--text)}.log-controls{display:flex;align-items:center;gap:.75rem;flex-wrap:wrap}.log-controls input{flex:1;min-width:180px;border:1px solid var(--panel-border);background:var(--bg-soft);padding:.5rem .75rem;border-radius:12px;font-size:.9rem;color:var(--text)}.log-toggle{display:inline-flex;align-items:center;gap:.35rem;font-size:.8rem;color:var(--muted)}.log-toggle.warning{color:var(--warning);flex-direction:column;align-items:flex-start}.log-toggle.warning .field-hint{color:var(--warning);margin-top:.25rem}.log-stream{flex:1;min-height:0;border-radius:16px;padding:.75rem;background:#0b0f0f;color:#e5e7eb;font-family:var(--font-mono);font-size:.78rem;line-height:1.35;overflow-y:auto;border:1px solid rgba(255,255,255,.08)}.log-line{padding:.2rem 0;white-space:pre-wrap;word-break:break-word}.log-line.error{color:#fca5a5}.log-line.warn{color:#fcd34d}.log-line.debug{color:#93c5fd}button{font-family:inherit}button.primary{border:none;border-radius:999px;padding:.75rem 1.5rem;background:linear-gradient(135deg,var(--accent),var(--accent-strong));color:#fff;font-weight:600;cursor:pointer;box-shadow:0 12px 20px #1f7a6f33;transition:transform var(--transition),box-shadow var(--transition)}button.primary.small{padding:.5rem 1.05rem;font-size:.85rem}button.primary:hover:not(:disabled){transform:translateY(-1px);box-shadow:0 16px 30px #1f7a6f4d}button.primary:disabled{opacity:.6;cursor:not-allowed;box-shadow:none}.ghost{border:1px solid var(--panel-border);background:transparent;border-radius:999px;padding:.45rem 1rem;cursor:pointer;transition:background var(--transition),border-color var(--transition);color:var(--text);text-decoration:none;display:inline-flex;align-items:center;justify-content:center;gap:.35rem}.ghost.small{padding:.35rem .8rem;font-size:.85rem}.ghost:hover:not(:disabled){background:#1f7a6f14;border-color:#1f7a6f4d}.ghost.api-ref-button{background:#2563eb24;border-color:#2563eb8c;color:#1d4ed8;box-shadow:0 0 0 2px #2563eb29}.ghost.api-ref-button:hover:not(:disabled){background:#2563eb38;border-color:#2563ebcc;box-shadow:0 0 0 3px #2563eb33}.ghost.active{background:#1f7a6f1f;border-color:#1f7a6f59}button.ghost:disabled{opacity:.5;cursor:not-allowed}.chip{border:1px solid var(--panel-border);background:transparent;border-radius:999px;padding:.35rem .85rem;font-size:.85rem;cursor:pointer}.chip.active{background:var(--accent);color:#fff;border-color:transparent;box-shadow:0 8px 16px #1f7a6f40}.field{display:flex;flex-direction:column;gap:.35rem;font-size:.85rem;color:var(--muted)}.field input,.field select{border:1px solid var(--panel-border);border-radius:12px;padding:.55rem .75rem;font-size:.95rem;background:var(--bg-soft);color:var(--text)}.checkbox-row{display:flex;gap:1rem;flex-wrap:wrap;font-size:.85rem;color:var(--text)}.checkbox-row input{margin-right:.35rem}.site-list{display:flex;flex-direction:column;gap:.65rem;overflow-y:auto;padding-right:.25rem;flex:1}.site-item{text-align:left;border:1px solid transparent;border-radius:16px;padding:.75rem;background:#fff9;cursor:pointer;transition:border-color var(--transition),box-shadow var(--transition),background var(--transition);display:flex;flex-direction:column;gap:.35rem}.site-item.active{border-color:#1f7a6f80;box-shadow:0 12px 24px #1f7a6f2e;background:#fff}.site-item:hover{border-color:#1f7a6f4d}.site-item-main{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.site-name{font-weight:600}.site-count{font-size:.75rem;border-radius:999px;padding:.15rem .6rem;background:#1f7a6f26;color:var(--accent)}.site-count.count-empty{background:#d9770633;color:#9a3412}.site-meta{font-size:.75rem;color:var(--muted)}.site-meta.error{color:var(--danger)}.panel-status,.empty-state{display:flex;gap:.6rem;align-items:center;padding:.75rem;border-radius:14px;background:#1f7a6f14;color:var(--text)}.panel-status.error{background:#b4231814;color:var(--danger)}.panel-status.note{background:#d9770614;color:#92400e}.download-progress{margin-top:.35rem;display:grid;gap:.25rem;font-size:.78rem;color:var(--muted)}.progress-line{line-height:1.3}.empty-state{justify-content:center;text-align:center;color:var(--muted)}.play-state{flex-direction:column;gap:.75rem}.play-button{width:120px;height:120px;border-radius:50%;border:none;background:linear-gradient(135deg,var(--accent),var(--accent-strong));color:#fff;font-size:1rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;cursor:pointer;box-shadow:0 18px 30px #1f7a6f4d;transition:transform var(--transition),box-shadow var(--transition)}.play-button:hover:not(:disabled){transform:translateY(-2px);box-shadow:0 22px 36px #1f7a6f59}.play-button:disabled{opacity:.6;cursor:not-allowed;box-shadow:none}.spinner{width:16px;height:16px;border-radius:50%;border:2px solid rgba(31,122,111,.3);border-top-color:var(--accent);animation:spin .8s linear infinite}.panel-status-row{display:flex;align-items:center;justify-content:space-between;gap:1rem;flex-wrap:wrap}.status-group{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.status-pill{padding:.35rem .75rem;border-radius:999px;background:#1f7a6f1f;color:var(--accent);font-size:.8rem}.status-pill.muted{background:#0000000a;color:var(--muted)}.status-pill.error{background:#b423181f;color:var(--danger)}.stream-indicator{display:inline-flex;align-items:center;gap:.5rem;font-size:.85rem;font-weight:600;text-transform:uppercase;letter-spacing:.08em}.stream-indicator.live{color:var(--success)}.stream-indicator.connecting{color:var(--warning)}.stream-indicator.error{color:var(--danger)}.stream-indicator.idle{color:var(--muted)}.status-detail{font-size:.75rem;font-weight:500;text-transform:none;letter-spacing:normal;color:var(--muted)}.viewer-surface{flex:1;display:flex;min-height:0;overflow:hidden}.video-frame{flex:1;background:#0b0f0f;border-radius:22px;padding:.75rem;position:relative;display:flex;align-items:center;justify-content:center;box-shadow:inset 0 0 0 1px #ffffff0f;min-height:0;height:100%}.video-frame video{width:100%;height:100%;max-height:100%;border-radius:16px;object-fit:contain;background:#000}.quality-toggle{position:absolute;top:1rem;right:1rem;display:inline-flex;gap:.25rem;padding:.25rem;border-radius:999px;background:#0f171e8c;-webkit-backdrop-filter:blur(6px);backdrop-filter:blur(6px);box-shadow:0 8px 18px #00000040;z-index:2}.quality-toggle button{border:none;border-radius:999px;padding:.35rem .75rem;font-size:.75rem;font-weight:600;color:#e2e8f0;background:transparent;cursor:pointer}.quality-toggle button.active{background:#ffffff2e;color:#fff}.stream-stats{position:absolute;right:1rem;bottom:1rem;padding:.4rem .7rem;border-radius:10px;background:#0f171eb3;color:#fff;font-size:.75rem;font-weight:600;letter-spacing:.02em;z-index:2}.stream-overlay{position:absolute;left:1rem;bottom:1rem;padding:.5rem .75rem;border-radius:12px;background:#0f171eb3;color:#fff;display:flex;flex-direction:column;gap:.25rem;font-size:.75rem}.stream-overlay.error{background:#b42318b3}.stream-overlay.connecting{background:#d97706b3}.downloads-layout{display:grid;grid-template-columns:minmax(260px,1fr) minmax(0,2fr);gap:1.5rem;flex:1;min-height:0}.downloads-form-scroll,.downloads-results-scroll{flex:1;min-height:0;overflow-y:auto;padding-right:.25rem}.downloads-results-scroll,.download-form{display:flex;flex-direction:column;gap:1rem}.form-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.75rem}.optional-filters{border:1px solid var(--panel-border);border-radius:18px;padding:.75rem 1rem;background:#1f7a6f0f;display:flex;flex-direction:column;gap:.75rem}.optional-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem;font-weight:600}.optional-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1rem}.filter-card{border:1px solid var(--panel-border);border-radius:18px;padding:.85rem;background:#ffffffb3;display:flex;flex-direction:column;gap:.75rem}.filter-card.active{border-color:#1f7a6f73;box-shadow:0 12px 20px #1f7a6f26}.filter-toggle{display:inline-flex;align-items:center;gap:.5rem;padding:.6rem .85rem;border-radius:999px;border:1px solid var(--panel-border);background:#1f7a6f1a;font-size:.9rem;font-weight:600;color:var(--text);cursor:pointer}.filter-toggle.active{background:#1f7a6f33;border-color:#1f7a6f66}.filter-toggle input{margin:0}.field.disabled{opacity:.6}.field-hint{display:block;margin-top:.35rem;font-size:.7rem;color:var(--muted)}.field-hint.warning{color:var(--warning)}.form-actions{display:flex;align-items:center;gap:.75rem}.download-summary{display:flex;gap:1.5rem;flex-wrap:wrap;font-size:.9rem;background:#1f7a6f14;padding:.75rem 1rem;border-radius:16px}.download-status{display:flex;flex-direction:column;gap:.5rem;padding:.75rem 1rem;border-radius:16px;border:1px solid var(--panel-border);background:#1f7a6f14;color:var(--text)}.download-status.error{background:#b4231814;color:var(--danger)}.download-status-header{display:flex;align-items:center;justify-content:space-between;gap:.75rem}.download-status-title{display:inline-flex;align-items:center;gap:.5rem;font-weight:600}.download-status-detail{font-size:.8rem;color:var(--muted)}.download-results{min-height:0}.download-selection-bar{display:flex;align-items:center;justify-content:space-between;gap:.75rem;flex-wrap:wrap;padding:.65rem .9rem;border-radius:14px;border:1px solid var(--panel-border);background:#1f7a6f14}.selection-summary{font-weight:600;color:var(--text)}.selection-actions{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.download-list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:.75rem}.download-item{display:flex;justify-content:space-between;align-items:center;gap:1rem;padding:.75rem 1rem;border-radius:16px;border:1px solid var(--panel-border);background:#ffffffa6}.download-item.preview{align-items:flex-start}.download-select{display:flex;align-items:center;padding-top:.25rem}.download-select input{width:18px;height:18px}.download-main{display:flex;flex-direction:column;gap:.25rem}.download-title{font-weight:600}.download-meta{font-size:.8rem;color:var(--muted)}.download-url{font-size:.75rem;color:var(--muted);word-break:break-all}.download-actions{display:flex;align-items:center;gap:.5rem}.lock-screen{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:2rem}.lock-card{width:min(420px,100%);background:var(--panel);border-radius:28px;padding:2rem;box-shadow:var(--shadow);border:1px solid var(--panel-border);display:flex;flex-direction:column;gap:1.5rem;animation:riseIn .6s ease}.lock-header{display:flex;align-items:center;justify-content:center;width:100%}.lock-form{display:flex;flex-direction:column;gap:1rem}.mobile-tabs{display:none;gap:.5rem}.tab{flex:1;border:1px solid var(--panel-border);border-radius:999px;padding:.5rem .75rem;background:#fff9;cursor:pointer;font-weight:600}.tab.active{background:var(--accent);color:#fff;border-color:transparent}:focus-visible{outline:3px solid rgba(31,122,111,.35);outline-offset:2px}.camera-settings-panel{min-height:0;flex:1;overflow:hidden}.camera-settings-controls{display:flex;flex-wrap:wrap;gap:.75rem;align-items:center}.camera-settings-controls input[type=search]{flex:1;min-width:220px;border:1px solid var(--panel-border);background:var(--bg-soft);padding:.5rem .75rem;border-radius:12px;font-size:.9rem;color:var(--text)}.camera-settings-controls select{border:none;background:transparent;font-family:inherit;color:var(--text)}.camera-settings-meta{font-size:.75rem}.camera-settings-summary{display:flex;flex-wrap:wrap;gap:.5rem}.camera-settings-pill{padding:.25rem .6rem;border-radius:999px;font-size:.7rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;border:1px solid transparent;white-space:nowrap;line-height:1.2;flex:0 0 auto}button.camera-settings-pill{background:#fff;border-color:var(--panel-border);cursor:pointer;transition:border-color .15s ease,box-shadow .15s ease}button.camera-settings-pill:hover{border-color:var(--accent)}button.camera-settings-pill.active{border-color:var(--accent);box-shadow:0 6px 14px #1f7a6f33}.camera-settings-pill.all{color:var(--muted)}.camera-settings-pill.healthy{color:var(--success);background:#0478571f;border-color:#04785740}.camera-settings-pill.mismatch{color:var(--warning);background:#d977061f;border-color:#d9770640}.camera-settings-pill.schedule_mismatch{color:var(--warning);background:#d9770629;border-color:#d9770659}.camera-settings-pill.critical{color:var(--danger);background:#b4231829;border-color:#b4231859}.camera-settings-pill.error{color:var(--danger);background:#b423181f;border-color:#b4231840}.camera-settings-pill.no_cameras{color:var(--muted);background:#605e5714;border-color:#605e5733}.camera-settings-pill.unknown{color:var(--muted);background:#605e571f;border-color:#605e5740}.camera-settings-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));grid-auto-rows:minmax(170px,auto);gap:.75rem;overflow-x:hidden;overflow-y:auto;padding-right:.25rem;min-height:0;flex:1;align-content:start}.camera-settings-card{min-height:170px}.camera-settings-card-body{display:flex;flex-direction:column;gap:.5rem}.camera-settings-badges{display:flex;flex-wrap:wrap;gap:.4rem}.camera-settings-card-meta{display:flex;flex-direction:column;gap:.15rem;font-size:.75rem;color:var(--muted)}.camera-settings-status-row{display:flex;align-items:center;gap:.4rem;flex-wrap:wrap}.camera-settings-dot{width:10px;height:10px;border-radius:999px;background:var(--muted);border:1px solid rgba(15,23,42,.12)}.camera-settings-dot.healthy{background:var(--success)}.camera-settings-dot.mismatch,.camera-settings-dot.schedule_mismatch{background:var(--warning)}.camera-settings-dot.critical,.camera-settings-dot.error{background:var(--danger)}.camera-settings-dot.no_cameras,.camera-settings-dot.unknown{background:var(--muted)}.camera-settings-counts{display:flex;flex-wrap:wrap;gap:.5rem;font-size:.75rem;color:var(--muted)}.camera-settings-counts .alert{color:var(--danger);font-weight:600}.camera-settings-pill.clock-ok{color:var(--success);background:#0478571a;border-color:#04785733}.camera-settings-pill.clock-drift{color:var(--danger);background:#b423181f;border-color:#b423184d}.camera-settings-pill.clock-unknown{color:var(--muted);background:#605e5714;border-color:#605e572e}.camera-settings-pill.reboot{color:var(--muted);background:#0f172a0f;border-color:#0f172a1f}.camera-settings-modal{width:min(92vw,960px)}.camera-settings-modal-body{display:flex;flex-direction:column;gap:1rem}.camera-settings-modal-meta{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:.5rem 1rem;font-size:.8rem;color:var(--muted)}.camera-settings-ip-row{display:inline-flex;align-items:center;gap:.35rem}.camera-settings-graph{border-radius:16px;border:1px solid var(--panel-border);background:#fff;padding:.75rem;height:160px;position:relative}.camera-settings-graph svg{width:100%;height:100%}.camera-settings-tooltip{position:absolute;top:.25rem;transform:translate(-50%);background:#0f172aeb;color:#f8fafc;font-size:.7rem;padding:.2rem .45rem;border-radius:999px;pointer-events:none;white-space:nowrap;box-shadow:0 6px 12px #0f172a33}.camera-settings-camera-list{display:flex;flex-direction:column;gap:.75rem;max-height:320px;overflow:auto;padding-right:.25rem}.camera-settings-camera{border:1px solid var(--panel-border);border-radius:16px;padding:.75rem;background:var(--bg-soft);display:flex;flex-direction:column;gap:.5rem}.camera-settings-camera-header{width:100%;display:flex;align-items:center;justify-content:space-between;gap:.5rem;flex-wrap:wrap;border:none;background:transparent;padding:0;cursor:pointer;text-align:left}.camera-settings-camera-header:hover .camera-settings-caret{color:var(--accent)}.camera-settings-camera-meta-inline{display:inline-flex;align-items:center;gap:.5rem;font-size:.72rem;color:var(--muted)}.camera-settings-caret{font-size:.9rem;color:var(--muted);transition:transform .2s ease,color .2s ease}.camera-settings-caret.open{transform:rotate(90deg)}.camera-settings-camera-meta{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap}.camera-settings-camera-name{font-weight:600}.camera-settings-camera-meta{font-size:.78rem;color:var(--muted);display:flex;flex-wrap:wrap;gap:.5rem}.camera-settings-error{color:var(--danger);font-size:.78rem}.camera-settings-compare{overflow-x:auto}.camera-settings-compare-table{width:100%;border-collapse:collapse;font-size:.78rem;background:#fff;border:1px solid var(--panel-border);border-radius:12px;overflow:hidden}.camera-settings-compare-table th,.camera-settings-compare-table td{padding:.45rem .6rem;text-align:left;border-bottom:1px solid rgba(15,23,42,.08)}.camera-settings-compare-table thead th{font-size:.7rem;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);background:#94a3b814}.camera-settings-compare-table tr.ok td{color:var(--success)}.camera-settings-compare-table tr.mismatch td{color:var(--danger);font-weight:600}.camera-settings-raw{border:1px solid var(--panel-border);border-radius:16px;padding:.75rem;background:#fff}.camera-settings-raw-header{display:flex;align-items:center;justify-content:space-between;gap:.5rem;margin-bottom:.5rem;font-size:.8rem;color:var(--muted)}.camera-settings-raw-pre{max-height:240px;overflow:auto;font-size:.72rem;background:#94a3b814;border-radius:12px;padding:.6rem;white-space:pre-wrap;color:var(--text)}@keyframes riseIn{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}@keyframes slideDown{0%{opacity:0;transform:translateY(-12px)}to{opacity:1;transform:translateY(0)}}@keyframes spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}@media(min-width:981px){.app-shell{height:100vh;overflow:hidden}}@media(max-width:980px){.topbar{flex-direction:column;align-items:flex-start}.topbar-actions{width:100%;justify-content:flex-start;flex-wrap:wrap}.app-body{display:block;min-height:auto}.panel-section{display:none}.panel-section[data-active=true],.panel-section.logs-panel,.panel-section.downloads-panel,.panel-section.downloads-results-panel,.panel-section.versions-panel,.panel-section.codegen-panel{display:flex}.code-manager-layout{display:flex;flex-direction:column}.codegen-grid{grid-template-columns:1fr}.codegen-site-list{max-height:40vh}.downloads-layout{grid-template-columns:1fr}.downloads-form-scroll,.downloads-results-scroll{overflow:visible;padding-right:0}.mobile-tabs{display:flex}.site-list{max-height:50vh}}@media(max-width:640px){.app-shell{padding:1.5rem}.field-inline{flex-direction:column;align-items:flex-start;width:100%;border-radius:16px}.field-inline input{width:100%}.panel-actions{flex-direction:column;align-items:stretch}.download-item{flex-direction:column;align-items:flex-start}.download-actions{width:100%;justify-content:flex-start;flex-wrap:wrap}}
