feat(themes): Omarchy catalog, 12 light themes, Dark/Light Appearance picker

Expand the catalog from 11 themes (10 dark, 1 light) to 37 (24/13):
all 18 remaining Omarchy defaults (palettes from each theme's
colors.toml) plus 8 canonical light themes (Tokyo Night Day, Solarized
Light, One Light, Ayu Light, GitHub Light, Gruvbox Light, Everforest
Light, Kanagawa Lotus). Lupine leads the light list as the default
light theme; the app default stays tokyo-night.

Appearance panel: Dark/Light segmented filter (SSR-initialized from the
user's current theme), scrollable theme list, Bookshelf section pinned;
active row revealed on open. Light themes carry color-scheme: light and
the soft-shadow token set. Public-page theme selects get Dark/Light
optgroups. New moon/sun icons.

tailwind.config: safelist the new theme ids — Tailwind v3 purges custom
@layer base class selectors that appear in no scanned content file, so
an unsafelisted id silently ships without its CSS (found the hard way).

theme.ts: applyTheme now swaps only theme-* classes (changing theme
from the login select no longer wipes min-h-screen) and keeps the class
in sync on <html> for the new ThemeFlashGuard — a pre-paint inline
script on the four public pages that applies the saved theme before
first paint.

Kanagawa's UI accent uses crystalBlue (#7e9cd8) instead of Omarchy's
foreground-as-accent so links stay distinguishable from text.
This commit is contained in:
John O'Keefe committed 2026-10-18 12:08:07 -04:00
1 parent 4f913da0b1
commit d5bb874651
21 files changed
+1120 -289

No files matched your search

+30
View File
@@ -18,6 +18,36 @@ const config: Config = {
"theme-catppuccin-macchiato",
"theme-catppuccin-frappe",
"theme-catppuccin-latte",
// Omarchy dark themes (theme_options.go). Theme ids are runtime values
// applied via `theme-<name>` classes, so each must be safelisted or the
// CSS build purges its variable block from @layer base.
"theme-vantablack",
"theme-last-horizon",
"theme-ethereal",
"theme-hackerman",
"theme-matte-black",
"theme-solitude",
"theme-retro-82",
"theme-osaka-jade",
"theme-kanagawa",
"theme-miasma",
"theme-lumon",
"theme-ristretto",
"theme-gruvbox",
"theme-everforest",
// Light themes
"theme-tokyo-night-day",
"theme-solarized-light",
"theme-one-light",
"theme-ayu-light",
"theme-github-light",
"theme-gruvbox-light",
"theme-everforest-light",
"theme-kanagawa-lotus",
"theme-rose-pine",
"theme-lupine",
"theme-flexoki-light",
"theme-white",
],
theme: {
extend: {