MuseMVP Docs
Theme and Layout

Theme Modes and Tokens

Configure light/dark/system mode, token variables, and theme switch behavior in the current MuseMVP implementation.

This guide focuses on the current theme implementation in MuseMVP: mode switching (light / dark / system) plus CSS token customization.

Capability Overview

CapabilityCurrent behavior
Theme modesControlled by config.ui.enabledThemes
Default modeControlled by config.ui.defaultTheme
Theme providernext-themes, mounted in src/modules/html-document/Document.tsx
Token sourcesrc/app/globals.css and src/app/styles/theme.css
UI switcherColorThemeSwitcherNoCustomTheme used in app layouts

Scope

The current system is a stable "mode switch + token variables" setup. It does not include a built-in multi-brand preset library.

Quick Configuration

Set allowed modes

Update enabledThemes and defaultTheme in src/config/index.ts.

// src/config/index.ts
ui: {
  enabledThemes: ["light", "dark", "system"],
  defaultTheme: "dark",
}

Update core tokens

Update shared and dark-mode tokens in src/app/globals.css.

/* src/app/globals.css */
:root {
  --background: oklch(...);
  --foreground: oklch(...);
  --primary: oklch(...);
}

.dark {
  --background: oklch(...);
  --foreground: oklch(...);
  --primary: oklch(...);
}

Add product-specific tokens when needed

Place additional design tokens in src/app/styles/theme.css (for example --success, --highlight) and consume them in components.

Mode Option Reference

ModeMeaning
lightAlways uses light palette
darkAlways uses dark palette
systemFollows OS/browser color-scheme preference

Common Pitfalls

Import order matters

src/app/main.css imports theme.css first and globals.css second.
If the same variable exists in both files, globals.css wins.

Default mode must be enabled

Keep defaultTheme included in enabledThemes.
Example: if defaultTheme is dark, enabledThemes should still include dark.