Welcome Picker Fixes on Android, Tap-Safe Dialogs & Headless UI Smoke Tests
- 🔘 Welcome Picker Buttons Restored: Fixed a startup wiring bug that left 'Subscribe' and 'Skip for now' unresponsive in the new-user welcome screen; dismissing it (✕, Skip, tap outside, or Escape) is now remembered, and accounts that already follow feeds are never re-prompted.
- 👋 Welcome Bundle Picker on Android Chrome: Added a ✕ close button, tap-anywhere bundle selection, and a pinned header/footer sized to the visible viewport (dvh) so Subscribe and Skip are always reachable.
- 📱 Tap-Safe Dialogs Everywhere: Every dialog (Add Feed, OPML, Briefing, Sign-in, Share, and more) now caps at the visible viewport height and scrolls internally, so no button can be pushed off-screen on phones.
- 🛡️ Resilient UI Wiring: A mistyped element reference can no longer disable every button on the page; it now degrades to a single no-op and reports loudly in tests.
- 🌐 Friendlier Errors During Restarts: Temporary 502/503 pages during server restarts now show a clear 'try again' message instead of a cryptic JSON parse error.
- 🧪 Headless UI Smoke Test Deploy Gate: Each deploy now boots the real app against a real backend and drives onboarding, modal dismissal by tap, J/K reading, and a tap-every-button sweep at phone and desktop widths.