:root{--bg:#f8fafc;--surface:#fff;--card:#f1f5f9;--line:#e2e8f0;--line-strong:#cbd5e1;--text:#0f172a;--muted:#64748b;--blue:#2563eb;--blue-hover:#1d4ed8;--good:#16a34a;--gold:#d97706;--sky:#0284c7;--bad:#dc2626;--mono:"JetBrains Mono", ui-monospace, Menlo, monospace}*{box-sizing:border-box}html,body{background:var(--bg);width:100%;height:100%;color:var(--text);-webkit-user-select:none;user-select:none;margin:0;font:15px/1.4 Inter,system-ui,-apple-system,sans-serif;overflow:hidden}button{font:inherit;color:inherit;cursor:pointer;transition:transform .12s,background .15s,border-color .15s,box-shadow .15s}button:active:not(:disabled){transform:scale(.97)}.hidden,body[data-screen=menu] .game-hud,body[data-screen=menu] .calibrate-screen,body[data-screen=menu] .lab-screen,body[data-screen=menu] .cam-stage,body[data-screen=calibrate] .menu-screen,body[data-screen=calibrate] .game-hud,body[data-screen=calibrate] .lab-screen,body[data-screen=game] .menu-screen,body[data-screen=game] .calibrate-screen,body[data-screen=game] .lab-screen,body[data-screen=lab] .menu-screen,body[data-screen=lab] .calibrate-screen,body[data-screen=lab] .game-hud,body[data-screen=lab] .game-viewport{display:none!important}.game-viewport{background:linear-gradient(#e0f2fe 0%,#f0f9ff 60%,#f8fafc 100%);width:100vw;height:100vh;position:relative;overflow:hidden}#game-canvas{width:100%;height:100%;display:block;position:absolute;inset:0}.menu-screen{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:10;background:radial-gradient(circle at 50% 40%,#ffffff59,#f8fafcb8);justify-content:center;align-items:center;padding:24px;display:flex;position:absolute;inset:0}.menu-card{border:1px solid var(--line-strong);text-align:center;background:#fffffff5;border-radius:28px;flex-direction:column;align-items:center;width:min(400px,100%);padding:36px 32px 32px;display:flex;box-shadow:0 24px 60px #0f172a1f,0 4px 12px #0f172a0d}.menu-badge{color:#b45309;font-family:var(--mono);letter-spacing:.06em;background:#fef3c7;border:1px solid #fde68a;border-radius:999px;align-items:center;gap:6px;margin-bottom:14px;padding:5px 14px;font-size:12px;font-weight:800;display:inline-flex}.menu-icon{margin-bottom:8px;font-size:64px;line-height:1}.menu-title{letter-spacing:-.02em;color:var(--text);margin:0;font-size:36px;font-weight:900}.menu-controls-hint{background:var(--card);color:var(--muted);border-radius:999px;align-items:center;gap:10px;margin:14px 0 28px;padding:6px 16px;font-size:13px;font-weight:700;display:flex}.dot-sep{opacity:.5}.menu-actions{flex-direction:column;gap:12px;width:100%;display:flex}.btn-primary{background:var(--blue);color:#fff;letter-spacing:.01em;border:none;border-radius:16px;padding:12px 22px;font-size:16px;font-weight:800;box-shadow:0 8px 20px #2563eb47}.btn-primary:hover:not(:disabled){background:var(--blue-hover);box-shadow:0 10px 24px #2563eb59}.btn-primary.active{background:var(--good);box-shadow:0 6px 16px #16a34a47}.btn-secondary{background:var(--surface);color:var(--text);border:2px solid var(--line-strong);border-radius:16px;padding:11px 20px;font-size:15px;font-weight:700}.btn-secondary:hover{border-color:var(--blue);color:var(--blue);background:#f8fafc}.btn-secondary.active{border-color:var(--blue);color:var(--blue);background:#eff6ff}.btn-ghost{color:var(--muted);border:1px solid var(--line-strong);background:0 0;border-radius:12px;padding:8px 14px;font-size:13px;font-weight:600}.btn-ghost:hover{color:var(--text);background:var(--card)}.btn-xl{padding:16px 24px;font-size:18px}.btn-lg{padding:13px 22px;font-size:16px}.btn-sm{border-radius:12px;padding:8px 16px;font-size:14px}.full-w{width:100%}.game-hud{pointer-events:none;contain:layout style;z-index:6;justify-content:space-between;align-items:center;gap:12px;display:flex;position:absolute;top:16px;left:18px;right:18px}.hud-left,.hud-right{pointer-events:auto;align-items:center;gap:10px;display:flex}.hud-btn{border:1px solid var(--line-strong);color:var(--text);background:#fffffff5;border-radius:14px;padding:9px 15px;font-size:14px;font-weight:700;box-shadow:0 4px 12px #0f172a0f}.hud-btn:hover{border-color:var(--blue);color:var(--blue)}.hud-btn.active{border-color:var(--blue);color:var(--blue);background:#eff6ff}.hud-stat{border:1px solid var(--line-strong);contain:layout style paint;background:#fffffff5;border-radius:14px;align-items:baseline;gap:8px;padding:6px 16px;display:flex;box-shadow:0 4px 12px #0f172a0f}.hud-label{letter-spacing:.08em;color:var(--muted);font-size:11px;font-weight:800}.hud-stat strong{font-family:var(--mono);color:var(--text);font-size:20px;font-weight:800}.coin-stat strong{color:var(--gold)}.hearts-stat{padding:8px 14px}.hearts-stat strong{font-size:18px}.game-toast{letter-spacing:.02em;pointer-events:none;opacity:0;border:1px solid var(--line-strong);white-space:nowrap;z-index:7;background:#fffffff2;border-radius:999px;padding:8px 22px;font-size:24px;font-weight:900;position:absolute;top:22%;left:50%;transform:translate(-50%);box-shadow:0 10px 28px #0f172a24}.game-toast.go{animation:.85s ease-out popToast}.modal-overlay{-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);z-index:12;background:#f8fafcc7;justify-content:center;align-items:center;padding:20px;display:flex;position:absolute;inset:0}.modal-card{background:var(--surface);border:1px solid var(--line-strong);text-align:center;border-radius:26px;width:min(380px,100%);padding:32px 28px;box-shadow:0 24px 54px #0f172a24}.modal-icon{font-size:52px;line-height:1}.modal-card h2{margin:8px 0 18px;font-size:28px;font-weight:900}.score-summary{grid-template-columns:repeat(3,1fr);gap:8px;margin-bottom:22px;display:grid}.score-box{background:var(--bg);border:1px solid var(--line);border-radius:14px;flex-direction:column;gap:2px;padding:10px 8px;display:flex}.score-box span{letter-spacing:.08em;color:var(--muted);font-size:10px;font-weight:800}.score-box strong{font-family:var(--mono);font-size:18px;font-weight:800}.modal-actions{flex-direction:column;gap:10px;display:flex}.cam-stage{border:2px solid var(--surface);contain:layout style paint;background:#f1f5f9;border-radius:18px;position:relative;overflow:hidden;box-shadow:0 10px 28px #0f172a24}body[data-screen=game] .cam-stage{z-index:6;width:230px;height:136px;position:absolute;bottom:18px;right:18px}body[data-screen=game] .cam-stage.pip-hidden{display:none!important}.cam-stage video,.cam-stage canvas{object-fit:contain;width:100%;height:100%;position:absolute;inset:0}.cam-stage video{opacity:.88;transform:scaleX(-1)}.flash{pointer-events:none;opacity:0;border:1px solid var(--line-strong);white-space:nowrap;z-index:4;background:#fffffff0;border-radius:999px;padding:4px 14px;font-size:18px;font-weight:900;position:absolute;top:18%;left:50%;transform:translate(-50%);box-shadow:0 6px 18px #0f172a1a}.flash.go{animation:.75s ease-out popToast}@keyframes popToast{0%{opacity:0;transform:translate(-50%,8px)scale(.92)}18%{opacity:1;transform:translate(-50%)scale(1.03)}75%{opacity:1}to{opacity:0;transform:translate(-50%,-8px)}}.lab-screen{background:var(--bg);flex-direction:column;width:100vw;height:100vh;display:flex}.lab-top{background:var(--surface);border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;height:64px;padding:0 24px;display:flex}.lab-title{letter-spacing:.04em;font-size:17px;font-weight:900}.lab-body{flex:1;grid-template-columns:minmax(0,1fr) 320px;gap:20px;width:100%;max-width:1180px;min-height:0;margin:0 auto;padding:20px 24px;display:grid}.lab-cam-slot{flex-direction:column;gap:12px;min-height:0;display:flex}.lab-cam-slot .cam-stage{border:1px solid var(--line-strong);flex:1;min-height:0;box-shadow:inset 0 1px 3px #0f172a0a}.lab-lane-pills{grid-template-columns:repeat(4,1fr);gap:10px;display:grid}.lane-pill{background:var(--surface);border:2px solid var(--line-strong);color:var(--muted);border-radius:14px;padding:12px 10px;font-size:14px;font-weight:800}.lane-pill:hover{border-color:var(--blue);color:var(--text)}.lane-pill.active[data-lane=left]{border-color:var(--blue);color:var(--blue);background:#eff6ff}.lane-pill.active[data-lane=center]{border-color:var(--good);color:var(--good);background:#f0fdf4}.lane-pill.active[data-lane=right]{border-color:var(--gold);color:var(--gold);background:#fffbeb}.lane-pill.jump-pill{color:var(--sky);background:#f0f9ff;border-color:#bae6fd}.lane-pill.jump-pill.active{background:var(--sky);border-color:var(--sky);color:#fff}.lab-controls{flex-direction:column;gap:16px;display:flex}.lab-card{background:var(--surface);border:1px solid var(--line);border-radius:20px;flex-direction:column;gap:12px;padding:18px;display:flex;box-shadow:0 4px 12px #0f172a08}.lab-card h3{text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin:0;font-size:13px;font-weight:800}.lab-status-row{align-items:center;gap:8px;font-size:13px;display:flex}.status-dot{background:var(--line-strong);border-radius:50%;width:10px;height:10px}.status-dot.on{background:var(--good);box-shadow:0 0 8px #16a34a73}.lab-btn-grid{grid-template-columns:1fr 1fr;gap:8px;display:grid}.lab-btn-grid button{border-radius:12px;padding:10px 12px;font-size:13.5px}.clean-slider{flex-direction:column;gap:4px;display:flex}.cs-head{justify-content:space-between;font-size:13px;font-weight:600;display:flex}.cs-head output{font-family:var(--mono);color:var(--muted);font-size:12px}.clean-slider input[type=range]{width:100%;accent-color:var(--blue)}.err-msg{color:var(--bad);margin:8px 0 0;font-size:12px}.cal-status-chip{color:var(--muted);background:var(--bg);border:1px solid var(--line);border-radius:999px;margin:14px 0 0;padding:5px 12px;font-size:12px;font-weight:700}.cal-status-chip.done{color:var(--good);background:#f0fdf4;border-color:#bbf7d0}.calibrate-screen{z-index:11;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);background:radial-gradient(circle at 50% 35%,#ffffffc7,#f8fafceb);justify-content:center;align-items:center;padding:18px;display:flex;position:absolute;inset:0}.cal-shell{background:var(--surface);border:1px solid var(--line-strong);border-radius:26px;flex-direction:column;gap:12px;width:min(860px,100%);height:min(670px,95vh);padding:18px 22px;display:flex;box-shadow:0 24px 60px #0f172a1f,0 4px 12px #0f172a0d}.cal-header{justify-content:space-between;align-items:center;gap:12px;display:flex}.cal-steps-bar{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.cal-step-pill{background:var(--bg);border:1.5px solid var(--line);color:var(--muted);border-radius:999px;align-items:center;gap:6px;padding:6px 12px;font-size:12.5px;font-weight:800;transition:all .18s;display:inline-flex}.cal-step-pill .step-num{background:var(--line);width:19px;height:19px;color:var(--text);font-family:var(--mono);border-radius:50%;justify-content:center;align-items:center;font-size:11px;display:inline-flex}.cal-step-pill.active{border-color:var(--blue);color:var(--blue);background:#eff6ff}.cal-step-pill.active .step-num{background:var(--blue);color:#fff}.cal-step-pill.done{color:var(--good);background:#f0fdf4;border-color:#86efac}.cal-step-pill.done .step-num{background:var(--good);color:#fff}.cal-banner{background:var(--bg);border:1px solid var(--line-strong);border-radius:18px;justify-content:space-between;align-items:center;gap:16px;padding:12px 18px;display:flex}.cal-prompt-wrap{flex-direction:column;gap:2px;display:flex}.cal-step-badge{font-family:var(--mono);letter-spacing:.08em;color:var(--blue);text-transform:uppercase;font-size:11px;font-weight:800}.cal-prompt-title{color:var(--text);margin:0;font-size:21px;font-weight:900}.cal-prompt-sub{color:var(--muted);margin:0;font-size:13px;font-weight:600}.cal-timer-ring{background:var(--surface);border:2px solid var(--blue);text-align:center;border-radius:16px;flex-direction:column;justify-content:center;align-items:center;min-width:108px;padding:8px 14px;display:flex;box-shadow:0 4px 12px #2563eb1a}.cal-timer-ring.jump-wait{border-color:var(--gold);background:#fffbeb}.cal-timer-ring.jump-live{border-color:var(--sky);background:#f0f9ff}.cal-timer-ring.done{border-color:var(--good);background:#f0fdf4}.cal-timer-ring strong{font-family:var(--mono);color:var(--text);font-size:22px;font-weight:800;line-height:1.1}.cal-timer-ring span{color:var(--muted);text-transform:uppercase;letter-spacing:.05em;font-size:11px;font-weight:800}.cal-progress-track{background:var(--card);border-radius:999px;height:7px;overflow:hidden}.cal-progress-fill{background:linear-gradient(90deg, var(--blue), var(--good));border-radius:999px;width:0%;height:100%;transition:width 80ms linear}.cal-cam-slot{flex:1;min-height:0;display:flex;position:relative}.cal-cam-slot .cam-stage{border:2px solid var(--line-strong);flex:1;width:100%;height:100%}.cal-footer{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;display:flex}.cal-metrics{flex-wrap:wrap;align-items:center;gap:8px;display:flex}.cal-metric-chip{background:var(--bg);border:1px solid var(--line);border-radius:12px;align-items:baseline;gap:6px;padding:5px 11px;display:flex}.cal-metric-chip.captured{background:#f0fdf4;border-color:#bbf7d0}.cal-metric-chip span{letter-spacing:.06em;color:var(--muted);font-size:10px;font-weight:800}.cal-metric-chip strong{font-family:var(--mono);color:var(--text);font-size:13px;font-weight:800}.cal-actions{align-items:center;gap:8px;display:flex}@media (max-width:860px){.lab-body{grid-template-columns:1fr;overflow-y:auto}.lab-cam-slot{min-height:320px}.cal-banner{flex-direction:column;align-items:flex-start}body[data-screen=game] .cam-stage{width:160px;height:96px}}
