The kiosk phone needs the app installed for the full-screen
standalone experience, but no browser auto-prompts on day one —
Chrome's mini-infobar waits for an engagement heuristic that's
too slow for the kiosk use case, and iOS Safari never fires
beforeinstallprompt at all.
New InstallPrompt component mounted in the clock layout (so it
only appears on /clock, not the dashboard). Three branches:
* Chrome / Edge / Android: defer beforeinstallprompt, surface
our own Install button that calls prompt() on tap.
* iOS Safari: detect iOS user agent and show 'Tap Share then
Add to Home Screen' (Apple doesn't fire the install event).
* Already installed: detect display-mode:standalone +
navigator.standalone and render nothing — silent on the
kiosk itself.
Dismissal is per-session (sessionStorage), so a fresh visit on
a new device re-shows the prompt. The banner sits above the
clock footer (bottom: 6rem) so it doesn't fight the Person /
Fleet tabs for taps.