Brand Palette Generator
Turn one brand colour into a complete, usable UI palette.
Generate matching light and dark themes from one colour.
The stylesheet appears here
The Theme Color Generator produces matching light and dark themes from one colour — elevated surfaces, softened text, desaturated accents — rather than inverting a light theme, which is what makes most first attempts at dark mode look wrong.
A dark theme is not a light theme with the colours inverted. Inverting produces pure white text on pure black, saturated colours that glow and smear, and a set of greys that have lost every relationship they had. Everyone tries it once.
This generates both themes properly from one brand colour. The light theme gets near-white surfaces with the faintest trace of your hue, near-black text rather than pure black, and borders that step evenly. The dark theme gets elevated surfaces that get lighter as they come forward — which is how depth is shown when there are no shadows to speak of — text at around 87% rather than pure white, and accent colours with their saturation pulled back so they stop glowing.
Every token comes as a pair, so the output is a complete themed stylesheet: a :root block, a dark block keyed on either prefers-color-scheme or a data attribute, and every value checked for contrast in both modes. The preview shows a real interface in both themes at once, which is the only reliable way to tell whether the two are actually siblings.
Dark surfaces start near #121212, text sits near 87% rather than pure white, and accents are pulled back so they stop glowing.
A stack of surface colours that get lighter as they come forward, which is how depth works when shadows are invisible.
Every value exists in both modes, so the output is a complete themed stylesheet rather than a palette.
Light and dark side by side as a real interface — the only reliable way to tell whether they are siblings.
prefers-color-scheme for the system default and a data attribute for an explicit choice.
Both themes are built around it.
How much hue the surfaces carry, and how hard the light and dark ends push.
Light and dark side by side, as a real interface rather than swatches.
Both blocks, switched by prefers-color-scheme or a data attribute.
Because pure black with white text produces halation — the text appears to bleed — and it leaves nowhere to go when something needs to sit behind the background. Most dark themes start around #121212 for exactly these reasons.
Saturated colours appear far more intense against a dark background. The usual fix is to lighten and desaturate them for the dark theme, which is what this generator does rather than reusing the same values.
In a dark theme, a card that sits above the page is drawn slightly lighter rather than with a shadow, because shadows are invisible against dark backgrounds. Each level of elevation is a step lighter, and the generator produces the whole stack.
Both, ideally: follow the system by default, and let a data attribute override it when someone picks a theme explicitly. The tool emits the structure for that rather than forcing one or the other.
What people who use the Theme Color Generator think of it. Reviews come from visitors and are posted as written.
No ratings yet
Yours would be the first.
0 reviews
Newest first
No reviews yet
Be the first to rate the Theme Color Generator. It takes half a minute and no account.
Write the first reviewTurn one brand colour into a complete, usable UI palette.
See your palette as a real interface instead of swatches.
Build a whole palette from one hue, and nothing else.
Build a moving gradient background with the keyframes included.
Check any text and background pair against WCAG AA and AAA.
Build radial gradients with full control of shape and position.
Pick colours in OKLCH, the space modern CSS is built on.
Work out the solid colour a translucent layer really produces.