Web frontend and supporting services for lance.blue

feat(web): filter Duel's scenario picker to head-to-head scenarios master

Duel and Scenario opened the same challenge screen with no difference between them (see TODO.md). challengeScreen now takes a Mode; Duel narrows the picker to scenarios with exactly two slots, Scenario shows the whole catalog unchanged. Pure client-side filter over the existing /api/scenarios data — no new curation, the Rust catalog untouched. Re-entering the challenge screen without a fresh Mode choice (the waiting screen's Back button) defaults to Scenario, the least restrictive pool.