- Persist alertIdsSeen to localStorage so already-seen alerts don't
re-notify every time the PWA is opened; cap stored IDs at 200 entries
- Use serviceWorker.showNotification() for alert notifications so they
work when the app is backgrounded, with fallback to new Notification()
- Add ⛶ fullscreen button to radar embed; uses Fullscreen API and
resizes the MapLibre canvas after toggle
- Fix swipe-to-change-tab: block gesture when touch starts on a map,
hourly scroll row, or radar timeline; also require the gesture to be
more horizontal than vertical (dx > dy*1.5) to avoid conflict with
vertical scrolling