The theme is not in the theme file. index.css declares --color-brand-orange, --color-brand-red, .bg-wevote-gradient, and .topographic-line — grep confirms all four are defined and never used. The actual palette is around 30 hex literals scattered across five components: #070014, #2A0040, #FF2D55 / #E0264A, #FF6321, #00E5FF, #8B5CF6 / #6D28D9, plus three more at LoginScreen.tsx:72. Rebranding currently means hunting through JSX.
Clean up first
Semantic tokens
Named by role rather than colour, so a rebrand does not leave behind --color-brand-orange: blue.
Runtime override and presets
Presets matter because most adopters want their own colours before their own features, and few will hand-pick eight values.
Two smaller fixes while in here
Deliberate exception
The 0–10 rating scale colours at RatingScreen.tsx:21-24 (#94a3b8 / #f43f5e / #fbbf24 / #22c55e) stay hardcoded. They are semantic — low / poor / fair / good — not brand. Someone theming the app pink should not end up with a green "0" and a red "10".
The theme is not in the theme file.
index.cssdeclares--color-brand-orange,--color-brand-red,.bg-wevote-gradient, and.topographic-line— grep confirms all four are defined and never used. The actual palette is around 30 hex literals scattered across five components:#070014,#2A0040,#FF2D55/#E0264A,#FF6321,#00E5FF,#8B5CF6/#6D28D9, plus three more atLoginScreen.tsx:72. Rebranding currently means hunting through JSX.Clean up first
apps/web/src/App.css— dead Vite starter CSS (.hero,#next-steps,#docs,.ticks) referencing undefined--accent/--border/--shadow, imported by nothingapps/web/public/bg.png— 961 KB, committed, unreferenced.bg.webp(8 KB) is what the app actually uses; that one file is about half the repo's asset weight.index.cssSemantic tokens
@themeblock:--color-surface,--color-surface-raised,--color-accent,--color-accent-strong,--color-accent-warm,--color-highlight,--color-feature,--color-feature-deepbg-surface,text-accent,from-accent to-accent-warm)Named by role rather than colour, so a rebrand does not leave behind
--color-brand-orange: blue.Runtime override and presets
@themeinto plain custom properties on:root, soConfigContextcan writeconfig.themeOverridesontodocument.documentElement— recolouring the whole app with no rebuild[data-theme="..."]presets (the current warm pink/purple asdefault, a cool blue, a neutral dark), selected viaconfig.themePreset, with per-variable overrides layering on topPresets matter because most adopters want their own colours before their own features, and few will hand-pick eight values.
Two smaller fixes while in here
@fontsource.index.css:1hotlinks Google Fonts on every page load — a third-party request on the critical rendering path, and a GDPR problem for some deployers.overflow-hiddenoffbody(index.css:14) onto the voting layout wrapper. It is correct for the fixed-viewport voting screens, but it will silently clip the admin tables.Deliberate exception
The 0–10 rating scale colours at
RatingScreen.tsx:21-24(#94a3b8/#f43f5e/#fbbf24/#22c55e) stay hardcoded. They are semantic — low / poor / fair / good — not brand. Someone theming the app pink should not end up with a green "0" and a red "10".