This is "Gem Cascade", a match-3 game you already shipped. It works end-to-end. The mechanics, scoring, animations, sound, e2e tests — all good. Don't touch the game logic.

YOUR JOB THIS RUN: make it look 3-5x better through procedural art and animation. The current art is competent but generic — flat gradient gems on a flat dark gradient background. The bar to clear: someone seeing a screenshot should believe this is a hand-crafted indie game, not a "build me a match-3" demo.

CONSTRAINTS:
- NO external image, font, or audio assets. Everything procgen at boot.
- Stay vanilla TS + canvas. No new libs. (You can pull in tiny utility packages if truly needed, but justify it.)
- Don't break the existing __game hook, the e2e test, or the build pipeline.
- Don't touch game.ts game-logic semantics (matches, gravity, scoring, move counting).
- Output goes to dist/ via `npm run build` like before.

THINGS WORTH TRYING (pick whichever combo gives the biggest lift — don't do all):
- Sprite generation: layered gradients, normal-map fake lighting, ambient occlusion shadow, beveled highlights, subtle inner glow, animated specular shimmer
- Background: parallax depth (multiple layers procgen — distant stars, nearer dust, foreground particles), subtle vignette, gradient that *moves* with chains
- Particles: more variety on clears — not just "burst" but trails, sparks, drifting embers that fade. Different shapes and behaviors for different gem types.
- Post-FX on big chains: chromatic aberration pulse, radial blur, color grading shift, screen-space shake with anticipation
- Idle animation: gems gently bob/breathe at rest, hint pulse has more telegraphing, board has subtle ambient motion so it never feels frozen
- Title screen: gems on title screen could orbit/dance, "play" button could glow on hover, more visual identity (a slogan, an unlock teaser, anything)
- Game-over screen: should *feel* like a moment — not just a panel
- Color theory: make sure all 6 gems are color-distinct *and* shape-distinct *and* texture-distinct so colorblind players can still tell them apart at a glance

OPINIONATED CALLS I WANT YOU TO MAKE:
- Pick ONE aesthetic direction (e.g. "cosmic gem garden", "molten forge", "stained glass cathedral", "vaporwave neon dream") and commit. Don't half-ass three.
- If you have to pick between many small improvements vs. one transformative effect, pick transformative.
- Performance: ok to render heavier on title screen / game-over (idle time). In-game must stay 60fps on a low-end laptop.

WHEN DONE:
- `npm run build` clean
- update or extend your e2e test to validate nothing broke
- print a short "what changed" summary

Aim for the bar where someone scrolls past on Twitter and *stops*.
