/** * InteractivePlayer — full-bleed live-play surface. * * Mirrors the candy.ai-style layout from the screenshots: * * ┌──────────────────────────────────────────┐ * │ VideoStage (scene video, or idle) │ * │ │ * │ ┌TopBar─────────────────────────────┐ │ * │ │ ◀ avatar · name · lvl · 🔊 ⋯ ✕ │ │ * │ └────────────────────────────────────┘ │ * │ │ * │ ┌ChatOverlay (last N turns)┐ │ * │ │ viewer: Hi │ │ * │ │ char: Hey trouble… │ │ * │ └───────────────────────────┘ │ * │ │ * │ ┌Input──────────────────────── ▶ ┐ │ * │ │ Ask Anything… │ │ * │ └─────────────────────────────────┘ │ * └──────────────────────────────────────────┘ * * The video stage stays full-bleed behind chat — when the player * mounts we render a placeholder backdrop with the experience * gradient; as scene jobs complete via /pending, the most recent * ``status === 'ready'`` job becomes the current scene. Phase-1 * asset ids are stubs so we show a small debug label; phase-2 * replaces the placeholder with a