One self-contained .html file, max 300KB. No external resources.
Hook into the feed (optional):
The host injects window.GC. Call GC.start() on first interaction, GC.progress(0–1) while playing, GC.score(n) on score changes and GC.complete({score, won}) at the end to power replay overlays and analytics. Register GC.onPause(fn)/GC.onResume(fn) to freeze when off-screen.