Files
mcma-webui/src/styles/global.css
T
Senko-san 55aa8933af
Docker Build & Publish / Prune old image versions (push) Has been cancelled
Docker Build & Publish / build (push) Has been cancelled
Docker Build & Publish / push (push) Has been cancelled
fix(theme): kill flash of white on dark-themed load
The app painted white until <ThemeProvider> mounted and set data-theme,
then snapped to the dark theme. Two fixes:

- Inline head script (rsbuild html.tags) sets data-theme before first
  paint, mirroring modern-sk's exact logic (localStorage 'modern-sk-theme'
  || 'dark') so there's no second flip when the provider mounts. Inline =
  zero round-trips.
- body now paints var(--color-bg) so the themed background shows before
  React mounts #root and layers the felt grain on top.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-09 13:18:29 +03:00

45 lines
1.4 KiB
CSS

/*
* Global app styles bridging our component code to modern-sk tokens.
*
* Our components reference semantic --color-* names; modern-sk ships its own
* token names (--ink, --fg-*, --steel-*, --lime, --hair). These aliases map
* one to the other. They are `var()` references, so they resolve at the use
* site and follow the active [data-theme] (dark/light) automatically.
*/
:root {
--color-bg: var(--ink);
--color-surface-1: var(--ink-raised);
--color-surface-2: var(--steel-800);
--color-surface-3: var(--steel-700);
--color-text-1: var(--fg-1);
--color-text-2: var(--fg-2);
--color-text-3: var(--fg-3);
--color-accent: var(--lime);
--color-border: var(--hair);
}
html,
body,
#root {
height: 100%;
}
body {
margin: 0;
font-family: var(--font-sans);
color: var(--fg-1);
/* Paint the themed background immediately. The inline theme script in
index.html (see rsbuild.config.ts) sets [data-theme] before first paint, so
--color-bg resolves to the right value here before React mounts #root and
layers the .modern-sk-felt grain on top — no flash of white. */
background: var(--color-bg);
-webkit-font-smoothing: antialiased;
}
/* #root carries .modern-sk-felt (set in index.tsx) → grained --ink background.
Ensure scrollable content fills the viewport above the grain overlay. */
#root {
display: flex;
flex-direction: column;
}