:root{--bg:#0b0b0c;--panel:#141416;--panel-2:#1b1b1e;--line:#2b2b30;--text:#e8e8ea;--muted:#8a8a92;--ok:#4caf6d;--warn:#d29922;--error:#f05a4f;--accent:#c8a24a;--mono:ui-monospace, SFMono-Regular, "SF Mono", Menlo, Consolas, monospace}*{box-sizing:border-box}html,body{background:var(--bg);height:100%;color:var(--text);margin:0;font:14px/1.4 system-ui,-apple-system,Segoe UI,Roboto,sans-serif;overflow:hidden}#app{flex-direction:column;gap:8px;height:100%;padding:8px;display:flex;overflow-y:auto}.topbar{background:var(--panel);border:1px solid var(--line);border-radius:8px;flex:none;align-items:center;gap:16px;padding:8px 12px;display:flex}.brand{white-space:nowrap;align-items:baseline;gap:8px;display:flex}.brand b{letter-spacing:.4px;font-size:16px}.brand span{color:var(--muted);font-size:12px}.badges{flex-wrap:wrap;gap:8px;margin-left:auto;display:flex}.badge{background:var(--panel-2);border:1px solid var(--line);border-left-width:3px;border-radius:6px;flex-direction:column;gap:2px;min-width:92px;padding:5px 10px;display:flex}.badge-label{text-transform:uppercase;letter-spacing:.6px;color:var(--muted);font-size:10px}.badge-value{font-family:var(--mono);white-space:nowrap;font-size:13px}.badge.ok{border-left-color:var(--ok)}.badge.warn{border-left-color:var(--warn)}.badge.warn .badge-value{color:var(--warn)}.badge.error{border-left-color:var(--error)}.badge.error .badge-value{color:var(--error)}.main{flex:auto;grid-template-columns:minmax(0,1fr) 320px;gap:8px;min-height:460px;display:grid}.videos{grid-template-columns:1fr 1fr;gap:8px;min-height:0;display:grid}.video{background:var(--panel);border:1px solid var(--line);border-radius:8px;flex-direction:column;min-height:0;display:flex;position:relative;overflow:hidden}.video.primary{border-color:var(--accent)}.video-bar{flex:none;align-items:center;gap:10px;padding:6px 10px;display:flex}.video-canvas{object-fit:cover;background:#050506;flex:auto;width:100%;min-height:220px;display:block}.cam-btn{color:var(--text);cursor:pointer;white-space:nowrap;background:0 0;border:none;padding:0;font-size:13px;font-weight:600}.cam-btn.active{color:var(--accent)}.video-age{font-family:var(--mono);border:1px solid var(--line);background:#08080acc;border-radius:5px;padding:3px 8px;font-size:11px;position:absolute;bottom:10px;left:10px}.video-age.ok{color:var(--ok)}.video-age.warn{color:var(--warn);border-color:var(--warn)}.video-age.error{color:var(--error);border-color:var(--error)}.video-stats{font-family:var(--mono);color:var(--muted);white-space:nowrap;text-overflow:ellipsis;margin-left:auto;font-size:11px;overflow:hidden}.video-stats.warn{color:var(--warn)}.panel{flex-direction:column;gap:8px;padding-right:2px;display:flex;overflow-y:auto}.block{background:var(--panel);border:1px solid var(--line);border-radius:8px;flex-direction:column;gap:8px;padding:10px;display:flex}.headline{letter-spacing:.8px;text-transform:uppercase;color:var(--muted);margin:0;font-size:11px;font-weight:600}.row{align-items:center;gap:8px;display:flex}.row>*{flex:auto}.small{color:var(--muted);font-size:11px}.hint{color:var(--muted);font-size:11px;line-height:1.3}.btn,.select{background:var(--panel-2);color:var(--text);border:1px solid var(--line);cursor:pointer;border-radius:6px;padding:7px 10px;font-family:inherit;font-size:12px}.btn:hover,.select:hover{border-color:var(--accent)}.btn:active{background:#232b36}.stick-wrap{justify-content:center;display:flex}.stick{border:1px solid var(--line);touch-action:none;cursor:grab;background:radial-gradient(circle,#24242a 0%,#131316 70%);border-radius:50%;flex:none;width:128px;height:128px;position:relative}.stick-cross{background:linear-gradient(90deg,#0000 calc(50% - 1px),#2b2b30 calc(50% - 1px) calc(50% + 1px),#0000 calc(50% + 1px)),linear-gradient(#0000 calc(50% - 1px),#2b2b30 calc(50% - 1px) calc(50% + 1px),#0000 calc(50% + 1px));border-radius:50%;position:absolute;inset:0}.stick-knob{background:var(--accent);border-radius:50%;width:34px;height:34px;margin:-17px 0 0 -17px;transition:transform 60ms linear;position:absolute;top:50%;left:50%;box-shadow:0 0 12px #c8a24a66}.dpad{flex:none;grid-template-rows:repeat(3,44px);grid-template-columns:repeat(3,1fr);gap:6px;display:grid}.dpad-btn{background:var(--panel-2);border:1px solid var(--line);color:var(--text);cursor:pointer;touch-action:none;border-radius:8px;font-size:16px}.dpad-btn:not(:disabled):hover{border-color:var(--accent)}.dpad-btn:not(:disabled):active{background:var(--accent);color:#14140f}.dpad-btn:disabled{opacity:.3;cursor:not-allowed}.dpad-stop{color:var(--error);border-color:#f05a4f73}.dpad-up{grid-area:1/2}.dpad-left{grid-area:2/1}.dpad-stop{grid-area:2/2}.dpad-right{grid-area:2/3}.dpad-rotl{grid-area:3/1}.dpad-down{grid-area:3/2}.dpad-rotr{grid-area:3/3}.small.dim{text-align:center;color:#6b6b73;font-family:var(--mono)}.cam-select.active{border-color:var(--accent);color:var(--accent)}.link-btn{color:var(--muted);font-family:var(--mono);letter-spacing:1px;cursor:pointer;background:0 0;border:none;padding:2px 4px;font-size:11px}.link-btn:hover{color:var(--accent)}.route-line{font-family:var(--mono);font-size:13px}.route-line.ok{color:var(--ok)}.yaw{width:100%;accent-color:var(--accent)}.readout{font-family:var(--mono);grid-template-columns:1fr 1fr;gap:2px 10px;font-size:11px;display:grid}.readout>div{justify-content:space-between;gap:6px;display:flex}.readout span{color:var(--muted)}.readout .warn b{color:var(--warn)}.readout .error b{color:var(--error)}.readout>div.warn span,.readout>div.error span{color:inherit}.state-banner{text-align:center;letter-spacing:.5px;border:1px solid var(--line);background:var(--panel-2);border-radius:6px;padding:8px;font-weight:600}.state-banner.ok{color:var(--ok);border-color:#3fb95080}.state-banner.warn{color:var(--warn);border-color:var(--warn);background:#d299221a}.state-banner.error{color:#fff;border-color:var(--error);background:#f85149bf;animation:1s infinite pulse}@keyframes pulse{50%{background:#f8514959}}.estop{color:#fff;letter-spacing:1px;cursor:pointer;background:#8b1f1a;border:1px solid #f85149;border-radius:8px;padding:14px;font-size:14px;font-weight:700}.estop:active{background:#f85149}.toggle{color:var(--text);cursor:pointer;align-items:center;gap:8px;font-size:12px;display:flex}.toggle input{accent-color:var(--accent)}.instructor{background:var(--panel);border:1px solid var(--warn);border-radius:8px;flex-direction:column;flex:0 0 240px;gap:6px;min-height:0;padding:8px;display:flex}.instructor.hidden{display:none}.instructor-canvas{background:#05070a;border-radius:6px;flex:auto;width:100%;min-height:0}.diagnostics{background:var(--panel);border:1px solid var(--line);border-radius:8px;flex-direction:column;flex:none;gap:6px;height:132px;min-height:0;padding:8px;display:flex}.diag-head{align-items:center;gap:8px;display:flex}.diag-head .headline{margin-right:auto}.diag-head .btn{flex:none}.diag-count{color:var(--muted);font-size:11px;font-family:var(--mono)}.diag-list{font-family:var(--mono);flex:auto;font-size:11px;overflow-y:auto}.diag-row{border-bottom:1px solid #2a323d66;gap:10px;padding:1px 0;display:flex}.diag-row span{color:var(--muted);flex:0 0 74px}.diag-row.warn{color:var(--warn)}.diag-row.error{color:var(--error)}@media (max-width:1100px){.main{grid-template-columns:1fr}.videos{grid-template-rows:1fr}}
