Localize onboarding focus facts by profile locale (DE assertion). Add mobile overflow/touch audits, deep-link matrix, extended console checks, and E2E for empty project, session unavailable, and teaching composer. Safe-area and Heute header layout on 390px viewports. Co-authored-by: cynarAI <cynarAI@users.noreply.github.com>
59 lines
2.4 KiB
HTML
59 lines
2.4 KiB
HTML
<!doctype html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=cover" />
|
|
<meta name="description" content="Deine Oos — immer da, immer wach." />
|
|
<meta name="theme-color" content="#07080a" />
|
|
<meta name="apple-mobile-web-app-title" content="evOo" />
|
|
<link rel="icon" href="/favicon.ico" sizes="any" />
|
|
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
|
|
<link rel="apple-touch-icon" href="/apple-touch-icon.png" />
|
|
<link rel="manifest" href="/site.webmanifest" />
|
|
<!-- Fonts loaded locally via @fontsource-variable (Inter + Geist) — no external CDN -->
|
|
<link rel="stylesheet" href="/evoo-brand.css" />
|
|
<title>evOo</title>
|
|
<script>
|
|
(() => {
|
|
const key = "rakazo.uiAppearance";
|
|
let preference = "system";
|
|
try {
|
|
const stored = localStorage.getItem(key);
|
|
if (stored === "system" || stored === "light" || stored === "dark") preference = stored;
|
|
} catch {}
|
|
const systemLight =
|
|
typeof matchMedia === "function" && matchMedia("(prefers-color-scheme: light)").matches;
|
|
const theme = preference === "system" ? (systemLight ? "light" : "dark") : preference;
|
|
document.documentElement.dataset.theme = theme;
|
|
document.documentElement.style.colorScheme = theme;
|
|
const meta = document.querySelector('meta[name="theme-color"]');
|
|
if (meta) meta.setAttribute("content", theme === "light" ? "#ffffff" : "#07080a");
|
|
})();
|
|
</script>
|
|
<script>
|
|
// Reload once when the browser aborts part of the module graph while the app
|
|
// boots (a network interface changed mid-request). main.tsx clears the flag
|
|
// after a successful boot; a second failure in a row is left to the browser.
|
|
addEventListener(
|
|
"error",
|
|
(event) => {
|
|
const target = event.target;
|
|
if (!(target instanceof HTMLScriptElement) || target.type !== "module") return;
|
|
try {
|
|
if (sessionStorage.getItem("rakazo:boot-reload")) return;
|
|
sessionStorage.setItem("rakazo:boot-reload", "1");
|
|
} catch {
|
|
return;
|
|
}
|
|
location.reload();
|
|
},
|
|
true,
|
|
);
|
|
</script>
|
|
</head>
|
|
<body>
|
|
<div id="root"></div>
|
|
<script type="module" src="/src/main.tsx"></script>
|
|
</body>
|
|
</html>
|