fix(web): keep the keyboard when a screen change destroys the focus master
Most of the app moves between screens on a button inside the screen — "Play against a bot", launching a match, going back from the waiting screen, "Go home" on the not-found screen, "Try again" on the error screen. Each render() removes the button that was just pressed, and a removed element's focus goes to <body>: the next Tab restarts from the top of the document, and a screen reader hears nothing about the page having changed. render() now moves focus to the new screen's heading, which is also what a screen reader reads on arrival, so the announcement and the focus target are the same element. #app is the fallback for a screen with no heading. Only when the render took the focus away. A masthead link is outside #app, so clicking Home leaves focus on Home. Neither landing element is a control the player aimed at, so tabindex="-1" gets no ring.