ACOS Game Development Skill v1.0
Purpose
Intelligence layer for FrankX's Games Lab (frankx.ai/games). Encodes world-class browser game design principles — animation choreography, feedback systems, quality gates, and per-genre templates. Any agent loading this skill produces games at AAA studio quality, not "indie jam" quality.
Activation
Auto-activates when session involves: game development, Canvas2D rendering, game feel tuning, particle effects, game loop optimization, or any /games/ route work.
Triggers: game, canvas, particle, collision, sprite, dungeon, puzzle game, roguelike, game loop, game feel
Game Registry (7 Games)
1. Crystal Match
- Slug:
crystal-match
- Engine: React DOM (CSS animations)
- Genre: Puzzle (match-3)
- Quality Baseline: Bejeweled 3, Candy Crush Saga
- Key Feel: Satisfying cascades, escalating combos, gems feel alive
- File:
app/games/crystal-match/page.tsx
2. Neon Depths
- Slug:
neon-depths
- Engine: Canvas2D
- Genre: Roguelike (turn-based dungeon crawler)
- Quality Baseline: Brogue, Hoplite, Into the Breach
- Key Feel: Tense exploration, impactful combat, atmospheric dungeon
- File:
app/games/neon-depths/page.tsx
3. Neon Runner
- Slug:
neon-runner
- Engine: Canvas2D
- Genre: Action (endless runner)
- Quality Baseline: Subway Surfers, Alto's Odyssey
- Key Feel: Speed sensation, near-miss drama, fluid lane changes
- File:
app/games/neon-runner/page.tsx
4. Snake Neon
- Slug:
snake-neon
- Engine: Canvas2D
- Genre: Arcade (snake)
- Quality Baseline: Snake.io, Slither.io
- Key Feel: Fluid movement, satisfying growth, dramatic death
- File:
app/games/snake-neon/page.tsx
5. 2048 Neon
- Slug:
neon-2048
- Engine: React DOM (CSS animations)
- Genre: Puzzle (sliding tiles)
- Quality Baseline: Original 2048, Threes!
- Key Feel: Satisfying merges, tile weight, big-merge celebration
- File:
app/games/neon-2048/page.tsx
6. Word Forge
- Slug:
word-forge
- Engine: React DOM (CSS animations)
- Genre: Word (Wordle-style)
- Quality Baseline: Wordle, Spelling Bee
- Key Feel: Letter reveal drama, keyboard feedback, win celebration
- File:
app/games/word-forge/page.tsx
7. Memory Match
- Slug:
memory-match
- Engine: React DOM (Framer Motion)
- Genre: Puzzle (card matching)
- Quality Baseline: Concentration, Memrise
- Key Feel: Card flip satisfaction, match celebration, mismatch clarity
- File:
app/games/memory-match/page.tsx
10 Quality Gates (MANDATORY)
Every game MUST pass ALL gates before deploy. No exceptions.
Gate 1: No Instant State Changes
Every visual change must be animated. Position changes use eased interpolation. Color changes use transitions. Size changes use scale animations. If a value snaps from A to B without interpolation, the game fails this gate.
Gate 2: Three-Stage Feedback
Every primary player action has: anticipation (50-100ms buildup) → action (the actual change) → follow-through (100-300ms settle/overshoot). A swap in Crystal Match: gems lean toward target → cross positions → bounce into place. A move in Neon Depths: player leans → slides → settles.
Gate 3: Idle Animations
Nothing is ever static. Every visible entity has subtle movement when idle:
- Player characters: breathing glow, gentle scale oscillation (0.97-1.03, 2-3s)
- Items: floating hover (±2px, 2s sine), glow pulse
- Enemies: slow sway, faint glow flicker
- UI elements: subtle shimmer, particle drift
- Board/background: ambient dust motes, gradient shift
Gate 4: Environmental Depth
The world feels alive beyond the player's actions:
- Ambient particles (dust, energy motes, sparkles) — 1-3 per frame, capped at 30
- Background has subtle movement (gradient shift, star drift, grid pulse)
- Lighting responds to events (flash on impact, dim on death, warm on reward)
Gate 5: Impact Feedback (Hitstop + Layered Effects)
Every collision or significant event uses layered feedback:
- Hitstop: 2-5 frame freeze to emphasize the moment
- Particles: burst from impact point in relevant colors
- Screen shake: intensity proportional to significance
- Flash: brief color overlay (red=damage, gold=reward, white=hit)
- Sound hook: even if muted, the code path exists for future audio
Gate 6: Eased Movement (NEVER Linear)
All movement uses easing functions from effects.ts:
- Position changes: outCubic (smooth deceleration)
- Bouncy effects: outElastic or outBounce
- UI transitions: inOutCubic
- Decay effects: outQuad
- NEVER
transition: all — always specify exact properties
- NEVER
animation: linear — always use cubic-bezier or named easings
Gate 7: Death/Failure Sequence
Failure is NEVER just a text overlay. Every game has a multi-stage death sequence:
- Freeze frame / hitstop (50-100ms)
- Dramatic visual (explosion, shatter, dim, collapse)
- Screen response (shake, flash, zoom)
- Particle aftermath (debris, fade, dissolve)
- Score/stats reveal with dramatic timing
- Retry prompt with clear call-to-action
Gate 8: Victory/Win Celebration
Winning is NEVER just a score display. Every game has:
- Moment of recognition (brief pause, glow)
- Celebration burst (confetti, particles, flash)
- Score dramatic count-up (not instant display)
- Achievement/stats with satisfying reveal timing
- Play-again prompt that feels inviting
Gate 9: Color Storytelling
Colors communicate game state consistently:
- Cyan/Blue (#43BFE3): Player, safe, neutral, UI
- Gold/Amber (#F59E0B): Reward, score, items, positive
- Red/Rose (#F43F5E): Danger, damage, error, negative
- Green/Emerald (#10B981): Health, success, growth
- Purple/Violet (#8B5CF6): Special, rare, magic, combo
- White/Silver (#E2E8F0): Impact, flash, emphasis
Color intensity scales with significance (bigger combo = brighter).
Gate 10: Mobile-First Input
Touch controls must feel as good as keyboard:
- Touch targets minimum 48px (WCAG)
- Swipe dead zone 30px (prevent accidental)
- Visual feedback on touch (ripple, press state) within 16ms
- D-pad buttons for games needing directional input
- Input buffering (2 frames) — never drop player input
Animation Principles (Disney's 12, Adapted)
From Disney
- Squash & Stretch: Gems compress on impact, tiles stretch on fast moves
- Anticipation: Brief windup before every action (lean, glow, scale down)
- Follow-Through: Overshoot + settle after movement completes
- Slow In, Slow Out: Ease into and out of all movement (outCubic default)
- Arcs: Natural curved motion paths, not straight lines
- Secondary Action: Supporting animations reinforce primary (particles on move, glow on select)
- Staging: Draw player attention to what matters (dim background during key events)
- Appeal: Everything should look good. Clean shapes, consistent sizes, brand colors.
Game-Specific
- Hitstop: 2-5 frame pause on significant impacts. Makes hits feel powerful.
- Juice Escalation: Effects intensify with combos/streaks. 1x normal → 2x particles → 3x shake + flash.
- Telegraph: Enemies/hazards signal intent before acting. Red pulse = about to attack. Glow = about to move.
- Weight: Heavy objects move slowly with strong follow-through. Light objects move fast with minimal overshoot.
Genre Templates
Puzzle (Crystal Match, 2048)
- Primary loop: Select → action → cascade → score
- Key animation: Match celebration must escalate with chain length
- Idle: Board should ripple subtly, individual pieces shimmer
- Signature moment: Long cascade with escalating particles + screen shake
- Anti-pattern: Instant gem removal without pop animation
Action/Runner (Neon Runner)
- Primary loop: Dodge → collect → speed up → survive
- Key animation: Speed sensation through FOV, speed lines, ground acceleration
- Idle: N/A (always moving), but player character has micro-animations
- Signature moment: Near-miss with slow-motion + dramatic zoom
- Anti-pattern: Flat perspective with no depth cues
Roguelike (Neon Depths)
- Primary loop: Explore → encounter → combat → loot → descend
- Key animation: Combat hitstop is the most important single animation
- Idle: Dungeon atmosphere — dust, flicker, enemy sway
- Signature moment: Room reveal with radial light expansion
- Anti-pattern: Instant teleport between tiles, instant damage numbers
Word (Word Forge)
- Primary loop: Type → submit → reveal → learn
- Key animation: Sequential letter reveal with staggered timing
- Idle: Gentle keyboard glow, submitted rows have subtle shimmer
- Signature moment: Winning guess with all-green cascade + celebration
- Anti-pattern: All letters revealed simultaneously
Arcade (Snake)
- Primary loop: Move → grow → avoid → survive
- Key animation: Fluid interpolated movement (never grid-snap)
- Idle: Body segments sway slightly, head has directional lean
- Signature moment: Death sequence rippling from head to tail
- Anti-pattern: Stepped movement where snake teleports between cells
Technical Standards
Canvas Games (Neon Depths, Neon Runner, Snake)
- Game loop:
requestAnimationFrame with delta-time tracking
- Rendering: Clear → draw background → draw entities → draw effects → draw HUD
- Effects pipeline:
ctx.save() → apply shake offset → draw scene → ctx.restore() → draw flash overlay
- Particle budget: Mobile 100 max, desktop 200 max (enforced by ParticleSystem)
- State: Game state in
useRef (not useState) to avoid React re-renders in loop
- Resolution: Canvas sized to container, CSS handles responsive scaling
DOM Games (Crystal Match, 2048, Word Forge, Memory Match)
- Animations: CSS
@keyframes injected via <style> tag, or Framer Motion
- Timing: CSS
cubic-bezier(0.33, 1, 0.68, 1) = outCubic, cubic-bezier(0.34, 1.56, 0.64, 1) = outBack
- Stagger: CSS custom property
--delay with animation-delay: var(--delay) for sequential reveals
- State management: React useState for UI state, useRef for animation state
- Performance:
will-change: transform on animated elements, transform over top/left
Shared Engine (lib/games/effects.ts)
- ParticleSystem: burst, sparkle, floatingText
- ScreenShake: intensity decay via outQuad
- FlashEffect: color overlay with fade
- AnimatedValue: smooth numeric transitions
- GameTimer: frame-based callbacks and sequences
- Hitstop: freeze-frame for impact emphasis
- GameAudio: Web Audio API oscillator stubs
- Easing: outQuad, outCubic, outElastic, outBounce, inOutCubic
- Colors: NEON brand palette, hexToRGBA, lerpColor, pulseAlpha
Anti-Patterns (NEVER DO)
| Anti-Pattern |
Why It's Bad |
Do This Instead |
| Instant state change |
Feels like a bug, not a game |
Animate everything with easing |
transition: all 0.3s |
Transitions wrong properties, looks sloppy |
Specify exact properties and durations |
animation: linear |
Robotic, unnatural movement |
Use cubic-bezier easing curves |
| Static entities |
Dead, lifeless world |
Add idle animations to everything |
| Text-only game over |
Anticlimactic, cheap feeling |
Multi-stage death sequence with effects |
| Score instant display |
No satisfaction, no drama |
Score count-up with accelerating pace |
| Uniform particle bursts |
Looks like a default particle emitter |
Vary size, speed, color, gravity per context |
| Grid-snap movement |
Characters teleport, feels jarring |
Interpolate position over 60-80% of tick |
| Same shake for everything |
Loses meaning, becomes noise |
Scale shake intensity to event significance |
| Ignoring mobile |
Half the audience can't play |
Touch-first, keyboard-enhanced |
Shared Resources
- Effects Engine:
lib/games/effects.ts — import { ParticleSystem, ScreenShake, FlashEffect, AnimatedValue, GameTimer, Hitstop, GameAudio, ease, NEON, NEON_BURST }
- Game Registry:
lib/games/registry.ts — GameEntry, GameQualityMetrics, getGameBySlug, getQualityReport
- Brand Colors: NEON object (cyan, violet, purple, amber, emerald, rose, fuchsia, lime, white)
- Production Path:
.worktrees/vercel-ui-ux/app/games/
Every frame is a chance to delight. Build like Supergiant, polish like Nintendo.
1---2name: game-development3description: ACOS game development intelligence for high-quality browser game design and implementation.4---56# ACOS Game Development Skill v1.078## Purpose910Intelligence layer for FrankX's Games Lab (frankx.ai/games). Encodes world-class browser game design principles — animation choreography, feedback systems, quality gates, and per-genre templates. Any agent loading this skill produces games at AAA studio quality, not "indie jam" quality.1112## Activation1314Auto-activates when session involves: game development, Canvas2D rendering, game feel tuning, particle effects, game loop optimization, or any `/games/` route work.1516**Triggers**: `game`, `canvas`, `particle`, `collision`, `sprite`, `dungeon`, `puzzle game`, `roguelike`, `game loop`, `game feel`1718---1920## Game Registry (7 Games)2122### 1. Crystal Match23- **Slug**: `crystal-match`24- **Engine**: React DOM (CSS animations)25- **Genre**: Puzzle (match-3)26- **Quality Baseline**: Bejeweled 3, Candy Crush Saga27- **Key Feel**: Satisfying cascades, escalating combos, gems feel alive28- **File**: `app/games/crystal-match/page.tsx`2930### 2. Neon Depths31- **Slug**: `neon-depths`32- **Engine**: Canvas2D33- **Genre**: Roguelike (turn-based dungeon crawler)34- **Quality Baseline**: Brogue, Hoplite, Into the Breach35- **Key Feel**: Tense exploration, impactful combat, atmospheric dungeon36- **File**: `app/games/neon-depths/page.tsx`3738### 3. Neon Runner39- **Slug**: `neon-runner`40- **Engine**: Canvas2D41- **Genre**: Action (endless runner)42- **Quality Baseline**: Subway Surfers, Alto's Odyssey43- **Key Feel**: Speed sensation, near-miss drama, fluid lane changes44- **File**: `app/games/neon-runner/page.tsx`4546### 4. Snake Neon47- **Slug**: `snake-neon`48- **Engine**: Canvas2D49- **Genre**: Arcade (snake)50- **Quality Baseline**: Snake.io, Slither.io51- **Key Feel**: Fluid movement, satisfying growth, dramatic death52- **File**: `app/games/snake-neon/page.tsx`5354### 5. 2048 Neon55- **Slug**: `neon-2048`56- **Engine**: React DOM (CSS animations)57- **Genre**: Puzzle (sliding tiles)58- **Quality Baseline**: Original 2048, Threes!59- **Key Feel**: Satisfying merges, tile weight, big-merge celebration60- **File**: `app/games/neon-2048/page.tsx`6162### 6. Word Forge63- **Slug**: `word-forge`64- **Engine**: React DOM (CSS animations)65- **Genre**: Word (Wordle-style)66- **Quality Baseline**: Wordle, Spelling Bee67- **Key Feel**: Letter reveal drama, keyboard feedback, win celebration68- **File**: `app/games/word-forge/page.tsx`6970### 7. Memory Match71- **Slug**: `memory-match`72- **Engine**: React DOM (Framer Motion)73- **Genre**: Puzzle (card matching)74- **Quality Baseline**: Concentration, Memrise75- **Key Feel**: Card flip satisfaction, match celebration, mismatch clarity76- **File**: `app/games/memory-match/page.tsx`7778---7980## 10 Quality Gates (MANDATORY)8182Every game MUST pass ALL gates before deploy. No exceptions.8384### Gate 1: No Instant State Changes85Every visual change must be animated. Position changes use eased interpolation. Color changes use transitions. Size changes use scale animations. If a value snaps from A to B without interpolation, the game fails this gate.8687### Gate 2: Three-Stage Feedback88Every primary player action has: anticipation (50-100ms buildup) → action (the actual change) → follow-through (100-300ms settle/overshoot). A swap in Crystal Match: gems lean toward target → cross positions → bounce into place. A move in Neon Depths: player leans → slides → settles.8990### Gate 3: Idle Animations91Nothing is ever static. Every visible entity has subtle movement when idle:92- Player characters: breathing glow, gentle scale oscillation (0.97-1.03, 2-3s)93- Items: floating hover (±2px, 2s sine), glow pulse94- Enemies: slow sway, faint glow flicker95- UI elements: subtle shimmer, particle drift96- Board/background: ambient dust motes, gradient shift9798### Gate 4: Environmental Depth99The world feels alive beyond the player's actions:100- Ambient particles (dust, energy motes, sparkles) — 1-3 per frame, capped at 30101- Background has subtle movement (gradient shift, star drift, grid pulse)102- Lighting responds to events (flash on impact, dim on death, warm on reward)103104### Gate 5: Impact Feedback (Hitstop + Layered Effects)105Every collision or significant event uses layered feedback:106- Hitstop: 2-5 frame freeze to emphasize the moment107- Particles: burst from impact point in relevant colors108- Screen shake: intensity proportional to significance109- Flash: brief color overlay (red=damage, gold=reward, white=hit)110- Sound hook: even if muted, the code path exists for future audio111112### Gate 6: Eased Movement (NEVER Linear)113All movement uses easing functions from effects.ts:114- Position changes: outCubic (smooth deceleration)115- Bouncy effects: outElastic or outBounce116- UI transitions: inOutCubic117- Decay effects: outQuad118- NEVER `transition: all` — always specify exact properties119- NEVER `animation: linear` — always use cubic-bezier or named easings120121### Gate 7: Death/Failure Sequence122Failure is NEVER just a text overlay. Every game has a multi-stage death sequence:1231. Freeze frame / hitstop (50-100ms)1242. Dramatic visual (explosion, shatter, dim, collapse)1253. Screen response (shake, flash, zoom)1264. Particle aftermath (debris, fade, dissolve)1275. Score/stats reveal with dramatic timing1286. Retry prompt with clear call-to-action129130### Gate 8: Victory/Win Celebration131Winning is NEVER just a score display. Every game has:1321. Moment of recognition (brief pause, glow)1332. Celebration burst (confetti, particles, flash)1343. Score dramatic count-up (not instant display)1354. Achievement/stats with satisfying reveal timing1365. Play-again prompt that feels inviting137138### Gate 9: Color Storytelling139Colors communicate game state consistently:140- **Cyan/Blue** (#43BFE3): Player, safe, neutral, UI141- **Gold/Amber** (#F59E0B): Reward, score, items, positive142- **Red/Rose** (#F43F5E): Danger, damage, error, negative143- **Green/Emerald** (#10B981): Health, success, growth144- **Purple/Violet** (#8B5CF6): Special, rare, magic, combo145- **White/Silver** (#E2E8F0): Impact, flash, emphasis146Color intensity scales with significance (bigger combo = brighter).147148### Gate 10: Mobile-First Input149Touch controls must feel as good as keyboard:150- Touch targets minimum 48px (WCAG)151- Swipe dead zone 30px (prevent accidental)152- Visual feedback on touch (ripple, press state) within 16ms153- D-pad buttons for games needing directional input154- Input buffering (2 frames) — never drop player input155156---157158## Animation Principles (Disney's 12, Adapted)159160### From Disney1611. **Squash & Stretch**: Gems compress on impact, tiles stretch on fast moves1622. **Anticipation**: Brief windup before every action (lean, glow, scale down)1633. **Follow-Through**: Overshoot + settle after movement completes1644. **Slow In, Slow Out**: Ease into and out of all movement (outCubic default)1655. **Arcs**: Natural curved motion paths, not straight lines1666. **Secondary Action**: Supporting animations reinforce primary (particles on move, glow on select)1677. **Staging**: Draw player attention to what matters (dim background during key events)1688. **Appeal**: Everything should look good. Clean shapes, consistent sizes, brand colors.169170### Game-Specific1719. **Hitstop**: 2-5 frame pause on significant impacts. Makes hits feel powerful.17210. **Juice Escalation**: Effects intensify with combos/streaks. 1x normal → 2x particles → 3x shake + flash.17311. **Telegraph**: Enemies/hazards signal intent before acting. Red pulse = about to attack. Glow = about to move.17412. **Weight**: Heavy objects move slowly with strong follow-through. Light objects move fast with minimal overshoot.175176---177178## Genre Templates179180### Puzzle (Crystal Match, 2048)181- **Primary loop**: Select → action → cascade → score182- **Key animation**: Match celebration must escalate with chain length183- **Idle**: Board should ripple subtly, individual pieces shimmer184- **Signature moment**: Long cascade with escalating particles + screen shake185- **Anti-pattern**: Instant gem removal without pop animation186187### Action/Runner (Neon Runner)188- **Primary loop**: Dodge → collect → speed up → survive189- **Key animation**: Speed sensation through FOV, speed lines, ground acceleration190- **Idle**: N/A (always moving), but player character has micro-animations191- **Signature moment**: Near-miss with slow-motion + dramatic zoom192- **Anti-pattern**: Flat perspective with no depth cues193194### Roguelike (Neon Depths)195- **Primary loop**: Explore → encounter → combat → loot → descend196- **Key animation**: Combat hitstop is the most important single animation197- **Idle**: Dungeon atmosphere — dust, flicker, enemy sway198- **Signature moment**: Room reveal with radial light expansion199- **Anti-pattern**: Instant teleport between tiles, instant damage numbers200201### Word (Word Forge)202- **Primary loop**: Type → submit → reveal → learn203- **Key animation**: Sequential letter reveal with staggered timing204- **Idle**: Gentle keyboard glow, submitted rows have subtle shimmer205- **Signature moment**: Winning guess with all-green cascade + celebration206- **Anti-pattern**: All letters revealed simultaneously207208### Arcade (Snake)209- **Primary loop**: Move → grow → avoid → survive210- **Key animation**: Fluid interpolated movement (never grid-snap)211- **Idle**: Body segments sway slightly, head has directional lean212- **Signature moment**: Death sequence rippling from head to tail213- **Anti-pattern**: Stepped movement where snake teleports between cells214215---216217## Technical Standards218219### Canvas Games (Neon Depths, Neon Runner, Snake)220- **Game loop**: `requestAnimationFrame` with delta-time tracking221- **Rendering**: Clear → draw background → draw entities → draw effects → draw HUD222- **Effects pipeline**: `ctx.save()` → apply shake offset → draw scene → `ctx.restore()` → draw flash overlay223- **Particle budget**: Mobile 100 max, desktop 200 max (enforced by ParticleSystem)224- **State**: Game state in `useRef` (not `useState`) to avoid React re-renders in loop225- **Resolution**: Canvas sized to container, CSS handles responsive scaling226227### DOM Games (Crystal Match, 2048, Word Forge, Memory Match)228- **Animations**: CSS `@keyframes` injected via `<style>` tag, or Framer Motion229- **Timing**: CSS `cubic-bezier(0.33, 1, 0.68, 1)` = outCubic, `cubic-bezier(0.34, 1.56, 0.64, 1)` = outBack230- **Stagger**: CSS custom property `--delay` with `animation-delay: var(--delay)` for sequential reveals231- **State management**: React useState for UI state, useRef for animation state232- **Performance**: `will-change: transform` on animated elements, `transform` over `top/left`233234### Shared Engine (`lib/games/effects.ts`)235- ParticleSystem: burst, sparkle, floatingText236- ScreenShake: intensity decay via outQuad237- FlashEffect: color overlay with fade238- AnimatedValue: smooth numeric transitions239- GameTimer: frame-based callbacks and sequences240- Hitstop: freeze-frame for impact emphasis241- GameAudio: Web Audio API oscillator stubs242- Easing: outQuad, outCubic, outElastic, outBounce, inOutCubic243- Colors: NEON brand palette, hexToRGBA, lerpColor, pulseAlpha244245---246247## Anti-Patterns (NEVER DO)248249| Anti-Pattern | Why It's Bad | Do This Instead |250|---|---|---|251| Instant state change | Feels like a bug, not a game | Animate everything with easing |252| `transition: all 0.3s` | Transitions wrong properties, looks sloppy | Specify exact properties and durations |253| `animation: linear` | Robotic, unnatural movement | Use cubic-bezier easing curves |254| Static entities | Dead, lifeless world | Add idle animations to everything |255| Text-only game over | Anticlimactic, cheap feeling | Multi-stage death sequence with effects |256| Score instant display | No satisfaction, no drama | Score count-up with accelerating pace |257| Uniform particle bursts | Looks like a default particle emitter | Vary size, speed, color, gravity per context |258| Grid-snap movement | Characters teleport, feels jarring | Interpolate position over 60-80% of tick |259| Same shake for everything | Loses meaning, becomes noise | Scale shake intensity to event significance |260| Ignoring mobile | Half the audience can't play | Touch-first, keyboard-enhanced |261262---263264## Shared Resources265266- **Effects Engine**: `lib/games/effects.ts` — import { ParticleSystem, ScreenShake, FlashEffect, AnimatedValue, GameTimer, Hitstop, GameAudio, ease, NEON, NEON_BURST }267- **Game Registry**: `lib/games/registry.ts` — GameEntry, GameQualityMetrics, getGameBySlug, getQualityReport268- **Brand Colors**: NEON object (cyan, violet, purple, amber, emerald, rose, fuchsia, lime, white)269- **Production Path**: `.worktrees/vercel-ui-ux/app/games/`270271---272273*Every frame is a chance to delight. Build like Supergiant, polish like Nintendo.*