Add a reusable theme system with a Neonflux theme

Introduce a theme layer on top of the existing CSS custom properties.
All color tokens now live in themes.css, scoped by a data-theme
attribute on <html>, so a theme is just a new token block plus a
dropdown option - no code changes needed. The Default theme preserves
the existing light/dark behavior; Neonflux adds an electric-cyan dark
theme.

The active theme is chosen via a Theme selector in the sidebar footer
and persisted in a new main-process settings file (userData
settings.json) through getTheme/setTheme IPC, so it survives restarts.
Hard-coded on-accent, selection, shadow and backdrop colors across the
renderer were converted to semantic tokens so every theme stays
consistent.
This commit is contained in:
avi 2026-08-18 12:42:09 -05:00
commit ad0329bbf9
12 changed files with 346 additions and 52 deletions

View file

@ -17,6 +17,10 @@ const copyAssets = {
path.join("src", "renderer", "index.css"),
path.join("dist", "index.css")
);
fs.copyFileSync(
path.join("src", "renderer", "themes.css"),
path.join("dist", "themes.css")
);
fs.mkdirSync(path.join("dist", "icons"), { recursive: true });
fs.copyFileSync(
path.join("build", "icons", "256x256.png"),