[ melvincarvalho/gamestr ] fix recovery logic with guards, overlay, and page reload fallback
- Add isRecovering guard to prevent multiple simultaneous recovery attempts
- Add visual "Reconnecting..." overlay with spinner during recovery
- Add page reload fallback after 3 failed recovery attempts
- Add try/catch around heartbeat to prevent it from dying on errors
- Reset recovery attempts on successful message/connection
- Lower stale threshold to 30 seconds for faster detection