A brand colour palette is more than a few pretty hexadecimal codes. It's a carefully structured system that covers every colour scenario your brand will face — from website backgrounds and CTA buttons to social media graphics, presentations, and print materials.

This guide walks through building a complete, production-ready brand colour palette from scratch.

What a Complete Brand Palette Includes

Most brands need at least six distinct colour categories:

A simple 7-colour palette covering primary, tints, background, border, muted text, and dark text.

Step-by-Step Process

Start with your primary brand colour

Choose the hue that best represents your brand personality. If you don't have one yet, read our guide on colour psychology in branding first. The primary colour anchors everything else.

Build a primary scale (5–9 shades)

Keep the hue constant; vary lightness from 90% (very light tint) down to 15% (near-black shade). Reduce saturation slightly as lightness increases. Name them numerically: 100, 200 … 900, with 500 as the "true" shade.

Choose secondary colours

Use colour harmony principles — analogous (adjacent on the colour wheel) for a cohesive feel, complementary (opposite) for contrast and energy. Secondary colours typically appear in illustrations, section accents, and supporting UI elements.

Define your neutral scale

Your neutrals do the heavy lifting — they're used for body text, backgrounds, borders, and dividers. Use a slightly warm or cool tint of grey (matching your brand hue temperature) rather than pure grey. A 9-step scale from near-white to near-black gives you everything you need.

Set semantic colours

These are functional colours — success (green), error (red), warning (amber), info (blue). Pick shades that work at 4.5:1 contrast against white and against your brand backgrounds. Keep them clearly distinguishable from your brand colours.

Validate contrast across all uses

Run every text-on-background combination through a contrast checker. Pay special attention to: white text on your primary colour, dark text on light tints, and muted text on white backgrounds.

Export as CSS variables

Encode the full palette as CSS custom properties (see below). This creates a single source of truth and makes theme updates trivial — change one variable and it updates everywhere.

CSS Variable Template

Here's a template structure for a well-organised brand colour system in CSS:

:root { /* Primary */ --color-primary-100: #FFE8DF; --color-primary-300: #FFAA86; --color-primary-500: #FF4D00; /* Base brand colour */ --color-primary-700: #CC3D00; --color-primary-900: #802600; /* Neutral */ --color-neutral-50: #FAFAF8; --color-neutral-100: #F5F5F2; --color-neutral-200: #E8E8E4; --color-neutral-400: #A0A09A; --color-neutral-600: #555550; --color-neutral-900: #111110; /* Semantic */ --color-success: #16A34A; --color-error: #DC2626; --color-warning: #D97706; --color-info: #2563EB; /* Aliases (used in components) */ --bg: var(--color-neutral-50); --surface: #FFFFFF; --ink: var(--color-neutral-900); --ink-muted: var(--color-neutral-400); --border: var(--color-neutral-200); --accent: var(--color-primary-500); }

Pro tip: Define semantic aliases (--bg, --surface, --ink, --accent) that reference your base palette tokens. Your components use the aliases — so when you create a dark mode, you only override the aliases, not every token.

Common Mistakes When Building Brand Palettes

Generate your brand palette instantly

Enter your primary colour and get a complete colour system with CSS variables in one click.

Brand Palette Builder