[ psic4t/nospeak ] feat: add PWA connection keep-alive and visibility recovery
Add application-level ping mechanism and visibility change handling to
prevent relay connections from silently dropping in PWA/browser when
backgrounded for extended periods (e.g., NAT timeout after ~5 minutes).
Changes:
- Add 120-second ping interval using lightweight Nostr subscription
- Add 5-second ping timeout to detect dead connections
- Add visibility change listener to verify connections when tab resumes