diff --git a/frontend/src/main.jsx b/frontend/src/main.jsx index 7c3d36e..0a6689c 100644 --- a/frontend/src/main.jsx +++ b/frontend/src/main.jsx @@ -4,25 +4,38 @@ import App from "./App.jsx"; import { applyTheme, DEFAULT_THEME_KEY } from "./styles/themes"; import { registerSW } from "virtual:pwa-register"; -// ✅ Theme VOR React setzen (kein Theme-Flash) -try { - const key = localStorage.getItem("hpTheme:guest") || DEFAULT_THEME_KEY; - applyTheme(key); -} catch { - applyTheme(DEFAULT_THEME_KEY); +async function bootstrap() { + // ✅ Theme sofort setzen + try { + const key = localStorage.getItem("hpTheme:guest") || DEFAULT_THEME_KEY; + applyTheme(key); + } catch { + applyTheme(DEFAULT_THEME_KEY); + } + + // ✅ Warten bis ALLE Fonts geladen sind + try { + if (document.fonts && document.fonts.ready) { + await document.fonts.ready; + } + } catch { + // ignore + } + + // ✅ Erst JETZT sichtbar machen + document.body.classList.remove("preload"); + document.body.classList.add("ready"); + + ReactDOM.createRoot(document.getElementById("root")).render(); + + // ✅ Service Worker – KEIN Auto-Reload mehr + registerSW({ + immediate: true, + onNeedRefresh() { + console.info("Neue Version verfügbar – Reload manuell"); + // optional: später Toast „Update verfügbar“ + }, + }); } -// ✅ Preload Unlock (nach Theme!) -document.body.classList.remove("preload"); -document.body.classList.add("ready"); - -ReactDOM.createRoot(document.getElementById("root")).render(); - -// ✅ Service Worker NUR EINMAL registrieren -const updateSW = registerSW({ - immediate: true, - onNeedRefresh() { - updateSW(true); - window.location.reload(); - }, -}); +bootstrap();