Create custom hook to encapsulate zoom state management and animation: - Zoom state: targetZoom, uncappedAdaptiveZoomRef - React Spring animation with smooth easing config - Automatic pause/resume at precision mode threshold - Zoom capping when pointer lock state changes - Recalculation of capped zoom when pointer lock is released This hook replaces ~150 lines of zoom-related logic in MapRenderer.tsx. Part of the ongoing refactoring to reduce MapRenderer.tsx from 2409 lines to ~300-500 lines by extracting utilities and custom hooks. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>