:root{font-family:system-ui,sans-serif;color:#e8eaed;background:#12141a}*{box-sizing:border-box}html{height:100%;overflow:hidden}@supports (height:100dvh){html{height:100dvh;max-height:100dvh}}body{margin:0}.home-app,body{height:100%;max-height:100%;overflow:hidden}.home-app{min-height:0;display:flex;flex-direction:column;background:#12141a}.home-app__header{flex-shrink:0;display:flex;align-items:center;justify-content:space-between;gap:1rem;padding:.65rem 1rem .65rem 1.25rem;border-bottom:1px solid #2a3142;background:#161920}.home-app__title{margin:0;font-size:1.15rem;font-weight:600;color:#e8eaed;letter-spacing:.02em}.home-app__body,.home-app__cameras{flex:1 1;display:flex;min-height:0;align-items:stretch}.home-app__cameras{width:100%;overflow:hidden;flex-direction:row;flex-wrap:nowrap;justify-content:center;gap:.75rem;padding:.65rem .85rem .85rem;box-sizing:border-box}.home-app__cameras--empty{flex-direction:column;justify-content:center;align-items:center}.camera-wall__empty{text-align:center;padding:2rem 1.5rem;max-width:28rem}.camera-wall__empty-title{margin:0;font-size:1.15rem;font-weight:600;color:#8b949e;letter-spacing:.02em}.camera-wall__empty-sub{margin:.75rem 0 0;font-size:.85rem;line-height:1.45;color:#6e7681}.camera-tile{min-width:0;max-width:50%;background:#0d1117;border:1px solid #2a3142;border-radius:10px;overflow:hidden}.camera-tile,.camera-tile__inner{flex:1 1;display:flex;flex-direction:column;min-height:0}.camera-tile__inner{padding:.65rem .75rem .75rem}.relay-ws-indicator{display:inline-flex;align-items:center;gap:.35rem;padding:.35rem .55rem;border-radius:999px;border:1px solid #30363d;background:#1a1d26;color:#8b949e;cursor:default;line-height:0}.relay-ws-indicator:focus-visible{outline:2px solid #388bfd;outline-offset:2px}.relay-ws-indicator__dot{width:8px;height:8px;border-radius:50%;background:currentColor;opacity:.9}.relay-ws-indicator--ok{color:#7ee787;border-color:#238636}.relay-ws-indicator--ok .relay-ws-indicator__dot{background:#3fb950;box-shadow:0 0 8px rgba(63,185,80,.45)}.relay-ws-indicator--wait{color:#d2a8ff;border-color:#6e40c9}.relay-ws-indicator--bad{color:#ff7b72;border-color:#da3633}.relay-ws-indicator--bad .relay-ws-indicator__dot{background:#f85149}@keyframes relay-spin{to{transform:rotate(1turn)}}.relay-ws-indicator__arc--spin{animation:relay-spin .9s linear infinite;transform-origin:12px 12px}.camera-rail__toolbar{display:flex;align-items:center;gap:.5rem;flex-wrap:wrap;flex-shrink:0;margin-bottom:.5rem}.camera-rail__title-block{display:flex;align-items:baseline;gap:.35rem;margin-right:auto}.camera-rail__title{font-size:.95rem;font-weight:600;color:#e8eaed}.camera-rail__id{font-size:.72rem;color:#6e7681;font-family:ui-monospace,monospace}.camera-rail__badges{display:flex;flex-wrap:wrap;gap:.35rem}.camera-rail__pill{font-size:.65rem;text-transform:uppercase;letter-spacing:.04em;padding:.2rem .4rem;border-radius:4px;border:1px solid #30363d;color:#8b949e}.camera-rail__pill.is-ok{color:#7ee787;border-color:#238636;background:rgba(35,134,54,.12)}.camera-rail__pill.is-warn{color:#d2a8ff;border-color:#6e40c9}.camera-rail__pill.is-bad{color:#ff7b72;border-color:#da3633}.camera-rail__info-btn{flex-shrink:0;display:inline-flex;align-items:center;justify-content:center;width:2rem;height:2rem;padding:0;border-radius:8px;border:1px solid #444c5c;background:#21262d;color:#8b949e;cursor:pointer}.camera-rail__info-btn.is-open,.camera-rail__info-btn:hover{color:#79c0ff;border-color:#388bfd}.camera-rail__details{margin-bottom:.5rem;padding:.5rem .65rem;border-radius:8px;background:#161b22;border:1px solid #30363d;max-height:40vh;overflow:auto}.camera-rail__status-line{margin:0 0 .35rem;font-size:.82rem}.camera-rail__dl{margin:.35rem 0 0;display:grid;grid-gap:.45rem;gap:.45rem;font-size:.8rem}.camera-rail__dl div{display:grid;grid-template-columns:minmax(5.5rem,8.5rem) 1fr;grid-gap:.5rem;gap:.5rem}.camera-rail__dl dt{margin:0;color:#8b949e}.camera-rail__dl dd{margin:0;color:#e8eaed}.camera-rail__muted{margin:.25rem 0 0;font-size:.78rem;color:#6e7681}.camera-rail__pre{margin:.5rem 0 0;font-size:.72rem;line-height:1.4;color:#7ee787;white-space:pre-wrap;font-family:ui-monospace,monospace}.camera-rail__video{flex:1 1;min-height:0;display:flex;flex-direction:column;border-radius:8px;overflow:hidden;border:1px solid #2a3142;background:#0d1117}.camera-rail__mode-toggle{flex-shrink:0;display:flex;gap:.35rem;padding:.35rem .5rem;border-bottom:1px solid #2a3142;background:#161920}.camera-rail__mode-toggle button{padding:.25rem .65rem;font-size:.75rem;border-radius:6px;border:1px solid #444c5c;background:#1a1d26;color:#8b949e;cursor:pointer}.camera-rail__mode-toggle button.is-active{border-color:#388bfd;color:#79c0ff;background:#21262d}.camera-rail__video .equirect-sphere-wrap{flex:1 1;min-height:0;width:100%;margin-top:0;border-radius:0;border:none;aspect-ratio:unset;height:auto;max-height:100%}.camera-rail__flat-frame{flex:1 1;min-height:0;width:100%;display:flex;align-items:center;justify-content:center}.camera-rail__flat-img{max-width:100%;max-height:100%;object-fit:contain}.page{min-height:100vh;display:grid;place-items:center;padding:1rem}.home-stack{display:flex;flex-direction:column;align-items:center;gap:.75rem}.home-live-preview{text-align:left}.card,.home-live-preview .label-muted{text-align:center}.card{padding:1.75rem 2rem;border-radius:12px;background:#1a1d26;border:1px solid #2a3142;max-width:22rem}.card-wide{max-width:28rem;text-align:left}.card-wide h1{text-align:center}.camera-stats{margin:.5rem 0 0;display:grid;grid-gap:.65rem;gap:.65rem}.camera-stats div{display:grid;grid-template-columns:minmax(6.5rem,9rem) 1fr;grid-gap:.5rem;gap:.5rem;align-items:baseline;font-size:.9rem}.camera-stats dt{margin:0;color:#8b949e;font-weight:500}.camera-stats dd{margin:0;color:#e8eaed}.ws-target{margin:.35rem 0 0;font-size:.7rem;color:#6e7681;word-break:break-all;text-align:center}.card h1{margin:0 0 .75rem;font-size:1.25rem;font-weight:600}.status{margin:0;font-size:1rem;line-height:1.5}.status.ok{color:#7ee787}.status.bad{color:#ff7b72}.status.wait{color:#d2a8ff}.status.muted{color:#8b949e}.preview-zoom-readout{margin:.35rem 0 0;font-size:.85rem;font-family:ui-monospace,monospace;color:#8fcbff;text-align:center}.preview-remote-control{margin:.75rem 0 0;padding:.6rem .65rem;background:#0d1117;border:1px solid #30363d;border-radius:6px}.preview-remote-hint{margin:0 0 .5rem;font-size:.72rem;line-height:1.35;text-transform:none;letter-spacing:normal}.preview-remote-hint code{font-size:.68rem;color:#79c0ff}.preview-stepper-row{display:grid;grid-template-columns:7.5rem 1fr;align-items:center;grid-gap:.5rem;gap:.5rem;margin:.45rem 0 0;font-size:.78rem;color:#c9d1d9}.preview-stepper-name{font-family:ui-monospace,monospace;color:#8b949e}.preview-stepper-buttons{display:flex;align-items:center;justify-content:flex-end;gap:.4rem}.preview-stepper-btn{min-width:2rem;height:2rem;padding:0 .5rem;font-size:1.1rem;line-height:1;font-weight:600;color:#c9d1d9;background:#21262d;border:1px solid #30363d;border-radius:6px;cursor:pointer}.preview-stepper-btn:hover:not(:disabled){background:#30363d;border-color:#58a6ff;color:#58a6ff}.preview-stepper-btn:disabled{opacity:.35;cursor:not-allowed}.preview-stepper-value{min-width:4.5rem}.preview-stepper-input,.preview-stepper-value{font-family:ui-monospace,monospace;font-size:.72rem;color:#ffa657;text-align:center}.preview-stepper-input{box-sizing:border-box;width:5.25rem;min-width:4.25rem;padding:.3rem .35rem;background:#0d1117;border:1px solid #30363d;border-radius:4px}.preview-stepper-input--wide{width:6.25rem;min-width:5.25rem}.preview-stepper-input:disabled{opacity:.35;cursor:not-allowed}.preview-stepper-input:focus{outline:none;border-color:#58a6ff}.preview-android-live{margin:.5rem 0 0;padding:.5rem .65rem;background:#161b22;border:1px solid #30363d;border-radius:6px}.preview-android-live-pre{margin:.25rem 0 0;font-size:.8rem;line-height:1.45;color:#7ee787;white-space:pre-wrap;text-align:left}.preview-android-live-copy{margin:.4rem 0 0;font-size:.75rem;line-break:anywhere}.preview-android-live-copy code{font-size:.72rem;color:#ffa657}.label-muted{margin:0 0 .25rem;font-size:.75rem;text-transform:uppercase;letter-spacing:.06em;color:#8b949e}.divider{margin:1rem 0;border:none;border-top:1px solid #2a3142}.home-demo-link{margin:1rem 0 0;text-align:center}.home-demo-link a{color:#79c0ff;font-size:.95rem}.webrtc-page .hint{margin:.75rem 0 0;font-size:.85rem;line-height:1.45;color:#8b949e}.webrtc-page .hint code{font-size:.8em;background:#0d1117;padding:.1em .35em;border-radius:4px}.webrtc-page .hint a{color:#79c0ff}.webrtc-actions{margin:1.25rem 0 0;display:flex;flex-wrap:wrap;gap:.5rem}.webrtc-actions button{padding:.5rem 1rem;border-radius:8px;border:1px solid #388bfd;background:#1f6feb;color:#fff;font-size:.9rem;cursor:pointer}.webrtc-actions button:hover{background:#388bfd}.remote-videos{margin:1rem 0 0;display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));grid-gap:.75rem;gap:.75rem}.remote-videos video{width:100%;border-radius:8px;background:#0d1117;border:1px solid #2a3142}.webrtc-log{max-height:10rem;overflow:auto;padding:.65rem .75rem;font-size:.75rem;font-family:ui-monospace,monospace;line-height:1.4}.preview-frame-wrap,.webrtc-log{margin:1rem 0 0;border-radius:8px;background:#0d1117;border:1px solid #2a3142}.preview-frame-wrap{overflow:hidden;width:100%;aspect-ratio:1/1;display:flex;align-items:center;justify-content:center}.preview-frame{display:block;width:100%;height:100%;object-fit:contain}.preview-view-toggle{margin:.75rem 0 0;display:flex;gap:.5rem;justify-content:center}.preview-view-toggle button{padding:.35rem .85rem;border-radius:8px;border:1px solid #444c5c;background:#1a1d26;color:#8b949e;font-size:.85rem;cursor:pointer}.preview-view-toggle button.toggle-active{border-color:#388bfd;color:#79c0ff;background:#21262d}.equirect-sphere-wrap{width:100%;aspect-ratio:1/1;margin-top:.75rem;border-radius:8px;overflow:hidden;background:#0d1117;border:1px solid #2a3142;display:flex;align-items:center;justify-content:center}.equirect-sphere-wrap canvas{display:block;width:100%!important;height:100%!important}