Show modal for all clients when scoreboard grows: end points, next
hammer, full table. Auto-dismiss 5s; dismiss button and backdrop.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Skeuomorphic team1/team2 stone chips near top of HUD; deplete
left-to-right from stones_remaining. Score strip shows end totals.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Replace constant-rate velocity rotate with ω0 spin + v_lat curl.
Path samples are (x, y, theta); client time is index/SAMPLE_RATE_HZ.
Ultraworked with [OhMyOpenCode](https://github.com/code-yeongyu/oh-my-opencode)
Co-authored-by: Sisyphus <sisyphus@ohmyopencode>
Extract mutable state from game.ts into a dedicated GameModel class to clarify data flow and state transitions.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
Replace the ad-hoc StoneState | {...} union in drawStone/draw with a named DrawableStone type.
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)
Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>