- Shipped
- April 30, 2026 at 12:23 AM UTC
- Author
- kamo
- Commit
- 36564a5
A 132×132 goal frame appears in the upper-left whenever a head is in solo-drag or active-throw, offset 56px from the corner so heads can miss past or behind it. Three solid walls (top, left, bottom) act as elastic bounce surfaces (0.65 restitution); the right side is the open entry. A bold red X in the back panel makes the "remove" intent unmistakable, and a pulsing entry indicator marks the open side. When a thrown head's center crosses into the score zone, it's removed from the throw map, the underlying tool window is closed via tool:close, and the head is removed via removeHead. A green radial flash, 18-particle gold/orange burst, and a bouncing GOAL! overlay fire on score. When a thrown head merely bounces off any goal wall (debounced by 350ms so a single fail doesn't spam events), the goal shakes red and a MISS! overlay punches in. Stability: goal collision lives entirely inside the throw RAF loop (no spring-system contention), and HexHeadGoalZone owns all celebration state internally — the engine only fires events. Pure additive feature; non-throw drag/drop paths are unchanged.