fix: prevent white background flash and overscroll on Safari iOS

- Set background-color: #101010 on html/body/.App so the Safari iOS
  rubber-band overscroll area is dark instead of white
- Always render body background style in ViewLoader (not just during
  Suspense fallback) so keyColour param and --background-color-override
  propagate to the body for the overscroll region
- Add viewport-fit=cover, apple-mobile-web-app meta tags for proper
  iOS notch/safe-area handling
- Fix manifest.json background_color from #ffffff to #101010
- Align theme_color across both manifests to #101010

https://claude.ai/code/session_016z5vU45pexTdkQV2eHJqh4
This commit is contained in:
Claude
2026-05-09 16:35:53 +00:00
parent fe44b33da2
commit e9de1ec19f
5 changed files with 13 additions and 5 deletions
+3 -1
View File
@@ -4,8 +4,10 @@
<meta charset="utf-8" />
<base href="/" />
<link rel="icon" href="favicon.ico" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
<meta name="theme-color" content="#101010" />
<meta name="apple-mobile-web-app-capable" content="yes" />
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
<meta name="ontime" content="ontime - time keeping for live events" />
<link rel="apple-touch-icon" href="ontime-logo.png" />
<link rel="icon" type="image/png" href="ontime-logo.png" />
+2 -2
View File
@@ -14,6 +14,6 @@
"scope": "./",
"start_url": "./",
"display": "",
"theme_color": "#121212",
"background_color": "#ffffff"
"theme_color": "#101010",
"background_color": "#101010"
}
+1 -1
View File
@@ -2,7 +2,7 @@
"name": "",
"short_name": "",
"icons": [{ "src": "ontime-logo.png", "sizes": "295x295", "type": "image/png" }],
"theme_color": "#2B5ABC",
"theme_color": "#101010",
"background_color": "#101010",
"display": "standalone"
}
+2
View File
@@ -81,6 +81,8 @@ html,
user-select: none;
-webkit-app-region: drag;
isolation: isolate;
// prevents Safari iOS from showing white in the overscroll (rubber-band) area
background-color: $ui-black;
}
// reset button styles
+5 -1
View File
@@ -23,15 +23,19 @@ export default function ViewLoader({ children }: PropsWithChildren) {
const searchParams = new URLSearchParams(window.location.search);
const colourFromParams = searchParams.get('keyColour') ?? '#101010';
// always keep body background in sync so Safari iOS overscroll area matches the view
const bodyBgStyle = `body { background-color: var(--background-color-override, ${colourFromParams}); }`;
return (
<Suspense
fallback={
<>
<style>{`body { background: var(--background-color-override, ${colourFromParams}); }`}</style>
<style>{bodyBgStyle}</style>
<Loader />
</>
}
>
<style>{bodyBgStyle}</style>
<OverrideStyles />
{children}
</Suspense>