Build a **mobile-portrait metroidvania** — a compact "discover → unlock → progress" loop: 3 connected rooms + a boss room, with one ability gate the player must unlock to move forward. Static web app.

You previously built "Lumen Vale" (painterly metroidvania, gpt-image-2 sprites, magenta chroma key) — same craft, NEW game: new name, new theme, new ability. Pick a theme that is NOT a glowing forest/cave — e.g. deep-sea trench, volcanic foundry, frozen observatory, rusted shipwreck — your call. NAME IT YOURSELF.

## SHAPE OF THE GAME (must work end-to-end):
- **Portrait orientation** (390×844 base, scales up; desktop shows a centered portrait frame). Touch controls (left/right + jump + action buttons, unobtrusive) AND keyboard (A/D move, SPACE jump, plus the ability key).
- **Room 1 — intro**: safe-ish, teaches movement, 1-2 weak enemies, a visible-but-unreachable exit ABOVE or beyond a gap that the base kit can't cross. The player should SEE where they need to go and fail — that's the metroid hook.
- **Room 2 — the unlock**: a detour with 2-3 enemies + light platforming; at its end sits the **power-up** (your choice — wall-jump, grapple, double-jump, ground-slam... pick what fits the theme). Brief pickup ceremony: flash, name card, control hint.
- **Room 3 — the gate**: traversal challenge that REQUIRES the new ability, plus a mini-checkpoint (respawn here after death, not back at start).
- **Boss room**: one boss with 2 phases (pattern shift at half HP), telegraphed attacks, 8-12 HP. Beating it = victory screen with a small stats recap (time, deaths).
- **Progression persistence**: localStorage save of { room, ability, checkpoint } on pickup/room-change. RESET on title screen.
- 3 hearts, i-frames, knockback, coyote time + jump buffer (you know the drill — same physics quality as Lumen Vale).
- Mini-map strip (4 cells) showing current room + ability dot.

## ART (gpt-image-2, magenta chroma key — proven Lumen Vale pipeline):
- Budget cap **$0.50 (≤12 generations, one-shot each, no regens)**. Suggested: hero idle + run (2), 1-2 enemy types (2), boss (1, can be 1024×1536 for drama), power-up icon (1), per-room background plates (3-4 at 1024×1536 PORTRAIT), platform/ground texture (1).
- `scripts/gen-sprites.ts` with OPENAI_API_KEY from env, runtime chroma key + auto-trim in assets.ts.
- Pick a coherent palette for your theme. Backgrounds painterly, portrait-framed.
- Tiles/platforms: reuse the overlap+mirror anti-tiling trick from Lumen Vale rather than asking gpt-image-2 for seamless tiles.

## TECH:
- Vite + TS, single canvas + minimal DOM HUD. `base: './'`. `npm run build` → dist/. TS strict.
- `window.__game` debug hook: { phase, room, hasAbility, hp, bossHp, teleport(room) }.

## VERIFY:
- Playwright e2e (portrait viewport): title → play → move/jump in room 1 → teleport to room 2 → grab ability → teleport room 3 → use ability (simulate keys) → reach boss room → boss takes damage. No console errors.

## SHIPPING DISCIPLINE (user is budget-capped — CHECKPOINT CULTURE):
- **By turn ~12**: room 1 playable with placeholder rects + physics done. COMMIT a green build.
- **By turn ~25**: all 4 rooms + ability gate + sprites integrated. COMMIT a green build.
- **By turn ~38**: boss + save + minimap + polish. COMMIT.
- Hard cap **45 turns**. Keep `dist/` green at every checkpoint — the user may stop you at any moment and whatever is built will ship as-is.

OUT OF SCOPE: more than 1 unlockable ability, shops/currency, multiple saves, audio beyond light Web Audio synth, settings menus.

WHEN DONE: one-line summary with the name + theme + ability you chose.
