:root{color-scheme:dark;--bg: #16161d;--panel: #1e1e28;--border: #2e2e3c;--fg: #e6e6ef;--dim: #8b8ba3;--accent: #7aa2f7;--ok: #9ece6a;--warn: #e0af68;--err: #f7768e;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--fg);min-height:100vh}#app{max-width:1100px;margin:0 auto;padding:16px}.topbar{display:flex;align-items:center;justify-content:space-between;gap:12px;flex-wrap:wrap;padding-block:8px 16px}h1{font-size:1.25rem;margin:0;letter-spacing:.02em}h2{font-size:.8rem;text-transform:uppercase;letter-spacing:.08em;color:var(--dim);margin:0 0 10px;font-weight:600}.dim{color:var(--dim);font-weight:400}.status-group{display:flex;gap:8px;align-items:center}.badge{font-size:.75rem;font-family:ui-monospace,SF Mono,Menlo,monospace;padding:4px 9px;border-radius:999px;border:1px solid var(--border);background:var(--panel);color:var(--dim);white-space:nowrap}.badge-ok{color:var(--ok);border-color:color-mix(in srgb,var(--ok) 40%,var(--border))}.badge-stub{color:var(--warn);border-color:color-mix(in srgb,var(--warn) 40%,var(--border))}.badge-err{color:var(--err);border-color:color-mix(in srgb,var(--err) 40%,var(--border))}.stage{position:relative;background:#000;border:1px solid var(--border);border-radius:10px;overflow:hidden;display:flex;align-items:center;justify-content:center;aspect-ratio:4 / 3;max-width:100%}.stage.dragover{border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 35%,transparent)}.stage:fullscreen,.stage:-webkit-full-screen{width:100vw;height:100vh;max-width:100vw;aspect-ratio:auto;border:none;border-radius:0}.stage.fast-forward:after{content:"▶▶fast forward";position:absolute;top:10px;right:10px;padding:3px 10px;border-radius:999px;background:color-mix(in srgb,var(--accent) 65%,black 35%);color:#fff;font-family:ui-monospace,Menlo,monospace;font-size:.72rem;letter-spacing:.03em;pointer-events:none}.touch-controls{position:absolute;inset:0;pointer-events:none;z-index:5}.touch-controls[hidden]{display:none}.touch-btn{position:absolute;transform:translate(-50%,-50%);min-width:46px;min-height:46px;padding:0 10px;border-radius:999px;border:1px solid color-mix(in srgb,var(--fg) 35%,transparent);background:color-mix(in srgb,var(--panel) 55%,transparent);color:var(--fg);display:flex;align-items:center;justify-content:center;font:inherit;font-size:.85rem;font-weight:600;pointer-events:auto;touch-action:none;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;cursor:pointer}.touch-btn-wide{min-width:64px;padding:0 14px}.touch-btn.pressed{background:color-mix(in srgb,var(--accent) 55%,var(--panel) 45%);border-color:var(--accent)}.touch-controls.editing .touch-btn{border-style:dashed;border-color:var(--accent);box-shadow:0 0 0 2px color-mix(in srgb,var(--accent) 25%,transparent)}.touch-btn.dragging{opacity:.75}.touch-btn-remove{display:none;position:absolute;top:-8px;right:-8px;width:20px;height:20px;align-items:center;justify-content:center;border-radius:999px;background:var(--err);color:#fff;font-size:.7rem;line-height:1;cursor:pointer}.touch-controls.editing .touch-btn-remove{display:flex}.touch-btn.removed{display:none}.touch-controls.editing .touch-btn.removed{display:flex;opacity:.35}.scanlines-overlay{position:absolute;inset:0;pointer-events:none;opacity:0;background:repeating-linear-gradient(to bottom,rgba(0,0,0,.3) 0px,rgba(0,0,0,.3) 1px,transparent 1px,transparent 3px);transition:opacity .1s}.stage.scanlines-on .scanlines-overlay{opacity:1}canvas{width:100%;height:100%;object-fit:contain;image-rendering:pixelated;display:block}#screen[hidden],#screen-gl[hidden]{display:none}.drop-hint{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:4px;text-align:center;pointer-events:none;padding:16px}.drop-hint p{margin:0}.drop-hint[hidden]{display:none}.controls{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-block:14px}.button{font:inherit;font-size:.85rem;padding:7px 13px;border-radius:7px;border:1px solid var(--border);background:var(--panel);color:var(--fg);cursor:pointer;transition:border-color .12s,background .12s}.button:hover:not(:disabled){border-color:var(--accent)}.button:disabled{opacity:.4;cursor:not-allowed}.button.button-active{background:color-mix(in srgb,var(--accent) 30%,var(--panel) 70%);border-color:var(--accent)}.slot-picker{font-size:.85rem;color:var(--dim);display:flex;align-items:center;gap:6px}.checkbox{font-size:.85rem;color:var(--dim);display:flex;align-items:center;gap:6px;cursor:pointer}.checkbox input{accent-color:var(--accent)}select{font:inherit;font-size:.85rem;padding:6px 8px;border-radius:7px;border:1px solid var(--border);background:var(--panel);color:var(--fg)}.panels{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}.panel{background:var(--panel);border:1px solid var(--border);border-radius:10px;padding:14px}.panel-footer{margin-top:10px}.gamepad-debug{font-family:ui-monospace,Menlo,monospace;font-size:.75rem;color:var(--dim);white-space:pre-wrap;word-break:break-word;margin:8px 0 0}.sync-form{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.sync-form input[type=email]{flex:1;min-width:160px;font:inherit;font-size:.85rem;padding:7px 10px;border-radius:7px;border:1px solid var(--border);background:var(--bg);color:var(--fg)}.sync-actions{display:flex;gap:8px;margin-block:0 10px}.sync-hint{font-size:.82rem;margin:0 0 10px}#sync-status:empty{display:none}#sync-status.error{color:var(--err)}.list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px;max-height:340px;overflow-y:auto}.list li{display:flex;align-items:center;gap:8px;font-size:.85rem;padding:6px 8px;border-radius:6px;background:color-mix(in srgb,var(--bg) 55%,transparent)}.list li.empty{background:none;color:var(--dim);font-style:italic;padding-inline:0}.list li.show-more{background:none;padding-inline:0;justify-content:center}.list li.show-more button{width:100%;padding:6px;border-radius:6px}.list .name{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.save-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:1px}.save-thumb-wrap{position:relative;flex-shrink:0}.save-thumb{display:block;width:48px;height:42px;border-radius:4px;object-fit:cover;background:#000;border:1px solid var(--border);image-rendering:pixelated}.save-thumb-slot{position:absolute;bottom:-4px;right:-4px;min-width:15px;padding:1px 4px;border-radius:999px;background:var(--accent);color:#0b0b12;font-size:.65rem;font-weight:700;line-height:1.4;text-align:center;border:1px solid var(--bg)}.save-thumb-empty{content:"";visibility:hidden}.list .meta{color:var(--dim);font-size:.75rem;font-family:ui-monospace,Menlo,monospace}.list button{font:inherit;font-size:.75rem;padding:3px 8px;border-radius:5px;border:1px solid var(--border);background:transparent;color:var(--fg);cursor:pointer}.list button:hover{border-color:var(--accent)}.list button.danger:hover{border-color:var(--err);color:var(--err)}.keymap{display:grid;grid-template-columns:auto 1fr;gap:4px 12px;margin:0;font-size:.82rem}.keymap dt{color:var(--dim)}.keymap dd{margin:0;font-family:ui-monospace,Menlo,monospace}.log{font-family:ui-monospace,Menlo,monospace;font-size:.78rem;color:var(--dim);min-height:1.4em;margin-block:14px 0;word-break:break-word}.log.error{color:var(--err)}@media (max-width: 560px){#app{padding:12px}.controls{gap:6px}}
