Problem
XP is computed and stored only in the browser (useRecorder.ts tb.addSessionXp, 120 + area/500). There is no XP column on User/UserStats, nothing persists it, and the leaderboard can't rank by it. XP resets on refresh.
Acceptance
- Add an XP field (User or UserStats) and compute it server-side on claim/conquest.
- Return xpGained in the conquest/claim response; frontend reads authoritative XP.
- Optional XP-based leaderboard.