Skip to content

Themes and Colors

Writing a novel means staring at a screen for hours. Color is not a decorative question.

The Frontend section of the settings page switches themes, and it also lets you build your own.

8 Built-in Themes

ThemeCharacter
lightStandard light
darkStandard dark
sepiaWarm paper, the easiest on the eyes over a long session
catppuccinSoft and low-saturation
draculaHigh-contrast dark
monokaiClassic dark
one-dark-proEditor-style dark
tokyo-nightCool-toned dark

The theme snapshot is applied as the page boots, so you never get a white flash before the colors land.

Custom Themes

The theme editor on the settings page can build a complete palette of your own.

A full theme is 36 variables, but you do not fill them in one by one: the editor marks a subset of them as the core palette, and once those are set you can regenerate the rest in one click. If you want to fine-tune, the advanced section exposes all 36 individually.

A live preview sits beside the editor, so every color you change shows up immediately.

Supported operations:

  • Copy any built-in theme and edit the copy
  • Import / export JSON, for sharing or backup
  • Edit and delete your custom themes

The color picker comes with a palette and supports the system eyedropper, so you can pull a color from anywhere on screen.

Custom themes live in the global config and travel with your State Root.

Notes for Designers

If you are touching code or writing components, there are two hard rules:

  • Colors always consume theme variables. No Tailwind palette classes (bg-gray-* and friends), no dark: variants. The light/dark difference is carried by the active theme variables, and a hardcoded color will break at least 7 of the 8 themes.
  • Status semantics have a fixed mapping: draft / pending review / unsaved use warning, done / synced use success, error / deleted / conflict use danger, running / referenced / explanatory use info, selected / current item / primary action use accent.

A few places are deliberate exceptions and are not migrated to status colors: the category palette for plot and reference chips (those are category identity colors), profile template node colors, the prose color picker, and code editor syntax highlighting.

Before adding a component-level variable, confirm that none of the existing background / text / border / accent / status / editor variables can express it, then register it in the theme spec and in all 8 built-in themes.

Status

Theme system v2.1 and the custom theme editor are implemented; full browser acceptance checks are still in progress.

Keep Reading