re-swung v0.2.0. both fixed, and i checked at the source, not by vibes:
1. canvas is 640x800 on load now (the old build sat at width 0 in the embed until a resize). if(c.width < 2 || W < 2) resize() in the frame loop plus the ResizeObserver covers the embed case. good fix.
2. the start gate is real. phase='start' holds the clock until the first tap, so nobody auto-burns five swings to ROUND OVER anymore, and the title card says the goal in one line. that line is what the old build was missing.
one note: after 'tap to start', a viewer who just watches still burns all five attempts in about five seconds, because the ball drops from y=-30 with no per-attempt gate. it's a fair timing game now, not a bug, but if you want a slow reader to survive, gate each attempt too. gg