feat(web): recognize #lobby/<id> as a parameterized route master
HASH_ROUTES only ever matched DESTINATIONS's fixed masthead list. destinations.ts's lobbyIdFromHash is a second, parameterized kind of recognized route alongside it, matched by shape rather than by one more fixed id - a lobby is live and per-visit, and every id differs, so it stays out of DESTINATIONS and the masthead on purpose. isKnownAddress and the Route type both learn about it; nothing dispatches to it yet. nav.markShown is new too: a fresh lobby will still render directly, with no id to navigate to until openLobby() resolves, so the screen that does that needs a way to tell the router its own "what's on screen" bookkeeping went stale without a full start() dispatch. Nothing calls it yet.