- Add Leaflet map tab in public/index.html with CARTO dark tiles, category
toggles, vote-count markers, and external venue search
- Extract seed data to seed-data.js with CATEGORY_META, buildSeedData(),
mergeSeedData() helpers
- Refactor server.js: approvedOptionsWithVoteSummary(), buildRealtimeSnapshot(),
createUserOption() helpers; Yelp API proxy at /api/yelp; /api/budgets endpoint
- Extract inline seed data from server.js to seed-data.js module
- Add budgetScenarios and priceUpdatedAt to realtime snapshot
- 6th tab (🏆 Results) shows ranked results across all categories
- Medal icons 🥇🥈🥉 for top 3 per category
- Percentage bars with category colors
- Accessible without voter name via ?view=results URL
- Shareable link: no modal, shows live results
- Bottom tab bar on mobile (≤640px), top tabs on desktop
- Name modal → bottom sheet on mobile with drag handle
- Larger tap targets (72px cards, 44px touch areas)
- Arrow hint (›) on clickable option cards
- Touch feedback with :active scale animation
- ARIA roles: tablist/tab/tabpanel, aria-selected, aria-live=polite
- Keyboard: Arrow keys navigate tabs, 1-5 number keys switch tabs
- Skip-to-content link for screen readers
- Visible :focus-visible ring
- Desktop body padding reset for bottom tabs