Big day — added three new puzzles and did a significant refactoring pass. Puzzle 16 is a directional lock mechanic. Puzzle 17 introduces a wrapping slider, a new shared component where the knob wraps around from one end of the track back to the start. Puzzle 18 builds on that foundation with another variation.

Extracted helper modules from several large components that had grown unwieldy. SegmentedSlider3D, Switch3D, and puzzles 09, 12, and 14 all got split into focused helper files. Also extracted useSliderDrag and useSwitchDrag hooks, and pulled geometry utilities out of trackPath.ts into a dedicated trackPathGeometry.ts. The TestAPI component got the same treatment with a new testApiHelpers.ts.

Created a shared puzzle components directory with reusable pieces like WrappingSlider, useWrappingSliderSnap, and snapToNearest. Updated the game complete modal to reflect the new final puzzle number.