:root{color-scheme:dark;--bg:#07101d;--panel:#101c2d;--panel2:#17263a;--text:#edf5ff;--muted:#9fb0c5;--accent:#4fd1c5;--danger:#ff6b6b;--border:rgba(255,255,255,.12)}*{box-sizing:border-box}body{margin:0;min-height:100vh;background:radial-gradient(circle at top,#122a44,var(--bg) 45%);color:var(--text);font-family:Inter,system-ui,"Segoe UI",sans-serif}header{display:flex;justify-content:space-between;align-items:center;gap:20px;padding:18px 24px;border-bottom:1px solid var(--border);background:rgba(7,16,29,.88)}h1{margin:0}header p{margin:4px 0 0;color:var(--muted)}.tools{display:flex;gap:10px;flex-wrap:wrap}button,select{font:inherit;border:1px solid var(--border);border-radius:10px;padding:10px 14px;background:var(--panel2);color:var(--text);font-weight:700;cursor:pointer}button:last-child{background:var(--accent);color:#061018}main{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:18px;padding:18px}.viewer,aside{background:rgba(16,28,45,.94);border:1px solid var(--border);border-radius:18px;overflow:hidden}.stage{position:relative;aspect-ratio:16/10;background:#02060b}video,canvas{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transform:scaleX(-1)}canvas{pointer-events:none}#placeholder{position:absolute;inset:0;display:flex;flex-direction:column;justify-content:center;align-items:center;gap:8px;color:var(--muted)}.action{display:flex;justify-content:space-between;padding:18px 20px;background:var(--panel2)}.action strong{color:var(--accent)}#error{margin:16px;padding:14px;border:1px solid var(--danger);border-radius:12px;white-space:pre-wrap}aside{padding:18px}.row{display:flex;justify-content:space-between;padding:10px 0;border-bottom:1px solid var(--border)}.row span{color:var(--muted)}.on{color:var(--accent)}.off{color:var(--danger)}h2{font-size:1rem;margin:22px 0 10px}.gesture-item{display:flex;justify-content:space-between;gap:10px;padding:9px 10px;margin-bottom:8px;background:var(--panel2);border-radius:9px}.gesture-item span:last-child{color:var(--muted);text-align:right}#log{max-height:190px;overflow:auto;color:var(--muted)}footer{padding:0 22px 20px;color:var(--muted)}@media(max-width:900px){header{align-items:flex-start;flex-direction:column}main{grid-template-columns:1fr}}
.gesture-list{gap:6px}
.gesture-item{padding:6px 8px;font-size:.78rem;line-height:1.2}
.gesture-item span:last-child{font-size:.74rem}
.status-card h2{font-size:.88rem;margin:16px 0 8px}
.log-panel{
  margin:14px;
  padding:12px 14px;
  border:1px solid var(--border);
  border-radius:12px;
  background:var(--panel2);
  max-width:520px;
}
.log-panel h2{margin:0 0 8px;font-size:.88rem}
.log-panel .command-log{
  max-height:120px;
  min-height:72px;
  overflow:auto;
  font-size:.78rem;
  margin:0;
}

.help-button{background:var(--panel2)!important;color:var(--text)!important}
body.modal-open{overflow:hidden}
.modal[hidden]{display:none}
.modal{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;padding:20px}
.modal-backdrop{position:absolute;inset:0;background:rgba(0,0,0,.72);backdrop-filter:blur(4px)}
.modal-dialog{position:relative;width:min(720px,calc(100vw - 32px));max-height:calc(100vh - 40px);overflow:auto;padding:24px;border:1px solid var(--border);border-radius:18px;background:var(--panel);box-shadow:0 24px 70px rgba(0,0,0,.55)}
.modal-dialog h2{margin:0 0 16px;font-size:1.25rem}
.modal-gesture-list{display:grid;gap:8px}
.modal-gesture-list .gesture-item{display:grid;grid-template-columns:minmax(0,1.2fr) minmax(0,1fr);align-items:center;margin:0;padding:11px 12px;font-size:.92rem}
.modal-gesture-list .gesture-item span:last-child{font-size:.88rem}
.modal-ok{display:block;min-width:120px;margin:20px auto 0;background:var(--accent)!important;color:#061018!important}
@media(max-width:560px){.modal-dialog{padding:18px}.modal-gesture-list .gesture-item{grid-template-columns:1fr;gap:5px}.modal-gesture-list .gesture-item span:last-child{text-align:left}}

