The web shell hardcoded dark surfaces (panel hex, white/black alphas, white text), so switching to light left the sidebar, chat, composer and side panel dark with ink text on top. Shell surfaces now use the shared tokens: light gets a warm paper frame with white panels, hairline borders and short soft shadows; dark keeps its look via dark: variants. - Light palette: visible borders (border was equal to muted), white primary-foreground, lighter user bubble, readable warning/success. - Selected sidebar row lives in one place (roster-row-style). - Markdown, inline code, code blocks, quotes and scrollbars follow tokens. - cn() now knows the text-ui-* scale is a font size; tailwind-merge treated it as a color and dropped labels' color on resized buttons (sign-up submit rendered ink on ink). - Stage bloom was offset left by a double translateX. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016or6oqCqP8wbNafvhnbLQT
58 lines
2.3 KiB
HTML
58 lines
2.3 KiB
HTML
<!doctype html>
|
|
<html lang="de">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<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" />
|
|
<!-- 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>
|