Problem
There are two unrelated capture mechanics that never agree. useRecorder.ts runs a client-side 10-ping proximity capture (CAPTURE_SAMPLES_NEEDED=10, its own pointInPolygon, checkConquest) that flips ownership in localStorage; the backend runs closed-loop claim + route-intersection split. A run can 'capture' client-side while the backend claim/conquest does nothing (or vice versa), so the meters and the persisted truth disagree.
Acceptance
- Choose the backend closed-loop+split as authoritative.
- Make the client meters reflect backend results (or a faithful preview), not an independent rule.
- XP/stats come from the backend response.