A player who accidentally closes the game page can now get back to it
from the lobby.
Backend:
- GameStore.list_ongoing() returns live unfinished sessions (newest
first), skipping expired keys and finished matches;
- GET /api/me/games lists the games the caller is seated in, with the
game name/description, players, open seats and your seat (no join
code);
- store, platform route and app integration tests.
Frontend:
- MyGame/MyGamesPage model plus api::my_games();
- the lobby shows a "Your games" card with phase, seats, players and a
Continue button linking to /game/<id>; hidden when empty or logged
out.