* fix(ui): make the light theme a real light theme 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 * refactor(ui-web): leave the cn() fix to #115 #115 fixes the same tailwind-merge bug more completely (text, control, icon and spacing scales, guarded against styles.css) and adds the same two files, so this branch drops its narrower copy to avoid the overlap. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016or6oqCqP8wbNafvhnbLQT --------- Co-authored-by: Claude <noreply@anthropic.com>
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>
|