namemyapp Logo
namemyapp
Back to Blog

How to Build a SaaS Brand Color Palette That Survives Dark Mode and a CEO Change

Most SaaS color systems die twice. First, when someone flips on dark mode and your "trustworthy blue" turns into a glowing headache. Second, when a new…

September 6, 2026
10 min read
Editorial agent
How to Build a SaaS Brand Color Palette That Survives Dark Mode and a CEO Change

Most SaaS color systems die twice. First, when someone flips on dark mode and your "trustworthy blue" turns into a glowing headache. Second, when a new CEO arrives, hates the orange, and orders a full rebrand three weeks before a product launch.

A good saas brand color palette is boring in the right ways. It's a set of tokens, not a mood board. It maps to function first, feeling second. And it leaves room for taste without letting taste run the show.

Here's how to build one that lasts.

Start With Roles, Not Vibes

Before you pick a single hex code, decide what colors actually do in your product. SaaS interfaces are not posters. Color communicates state: primary actions, destructive actions, warnings, success, neutral surfaces, text hierarchy.

Your startup color palette needs named roles, not named feelings.

A practical role set looks like this:

  • Primary — main buttons, links, active states
  • Primary hover — one step darker or lighter
  • Accent — secondary highlights, badges, charts
  • Success — confirmations, positive deltas
  • Warning — cautions, pending states
  • Danger — destructive actions, errors
  • Surface — backgrounds, cards, modals
  • Text — primary, secondary, muted
Rule

If a color doesn't have a job, it doesn't go in the palette. Every extra color is a future design argument.

This sounds obvious. Most teams skip it. They start with a brand mood board, pick five pretty colors, and then try to force those five colors to cover twelve functional states. That's how you get a red "Save" button.

Define Your Color Tokens in Code Early

The fastest way to make a tech brand color palette durable is to encode it as CSS custom properties or design tokens from day one. Not in a Figma file. Not in a brand PDF. In the codebase.

Here's a minimal token structure that works for a small SaaS app:

css
:root {
  --color-primary: #2563eb;
  --color-primary-hover: #1d4ed8;
  --color-accent: #f59e0b;
  --color-success: #16a34a;
  --color-warning: #d97706;
  --color-danger: #dc2626;
  --color-surface: #ffffff;
  --color-surface-alt: #f8fafc;
  --color-text: #0f172a;
  --color-text-muted: #64748b;
}

Once these variables exist, changing the entire product's primary color is a one-line diff. A new CEO who hates blue? Change --color-primary and --color-primary-hover. Done by lunch.

If you're using Tailwind, map these to your tailwind.config.js theme. If you're on a design system like Radix or shadcn/ui, wire them into the theme provider. The point is the same: tokens live in code, not in a slide deck.

Pick Your Base Colors With Dark Mode in Mind

Dark mode breaks palettes that were designed on a white canvas. A saturated blue that looks great on #ffffff can vibrate uncomfortably on #0f172a. A muted gray that works as secondary text on light mode disappears entirely on dark.

Here's the fix: choose base hues that survive a contrast flip.

For your primary color, test it against both #ffffff and #0f172a at the same saturation. If it passes contrast on both, you've got a keeper. If it only works on one, you need a dark-mode variant.

A practical approach:

  1. Pick one hue family for primary. Blue is the default for a reason — it's the most accessible hue across light and dark surfaces.
  2. Pick one hue family for accent. This is where personality lives. Orange, teal, violet, or lime.
  3. Keep success, warning, and danger close to their conventional hues. Green means go. Red means stop. Don't get creative here.
  4. Use neutral grays for surfaces and text. Warm grays feel friendlier. Cool grays feel more technical. Pick one and stick with it.
Insight

The best startup color palette is 80% neutral, 15% one primary hue, 5% one accent hue. Color is seasoning, not the meal.

Build a Dark Mode Variant, Not a Separate Palette

The most common dark mode mistake is treating it as a second brand. It's not. It's the same brand under different lighting.

Your dark mode should change surface and text tokens, not brand hues. Primary, accent, success, warning, and danger stay the same hue. They might shift lightness slightly to avoid glow, but they should remain recognizable.

Here's what a dark mode token override looks like:

css
[data-theme="dark"] {
  --color-surface: #0f172a;
  --color-surface-alt: #1e293b;
  --color-text: #f8fafc;
  --color-text-muted: #94a3b8;
  --color-primary: #3b82f6;
  --color-primary-hover: #60a5fa;
}

Notice what changed: surfaces, text, and the primary's lightness. Notice what didn't: the hue. Your brand still reads as "you" in dark mode because the hue relationships stay intact.

Test your dark mode at 3 a.m. with your actual product, not a mockup. Colors that pass contrast checkers still look wrong on real screens. Trust your eyes after the math.

Document the Rules Somewhere Boring

A SaaS brand color palette without documentation is just a list of hex codes. The documentation is what survives a CEO change.

Write down:

  • Which roles exist and what they mean
  • Which colors map to which roles
  • Where tokens live in the codebase
  • How to add a new color (and who approves it)
  • What to do when someone wants to change the brand color

Keep it to one page. Put it in your README.md or a Notion doc linked from your repo. Not a 40-page brand book. One page.

Warning

If your color documentation is longer than your onboarding doc, nobody will read it. Short beats comprehensive every time.

Test Against Real Screens, Not Just Figma

Figma lies. Colors look different on a MacBook Pro, a cheap Dell monitor, a phone in sunlight, and a projector in a conference room.

Before you lock a palette, test it on:

  • A light-mode dashboard with dense data tables
  • A dark-mode mobile screen at 50% brightness
  • A form with validation errors
  • A chart with five overlapping data series
  • A marketing page with a hero image behind text

If your primary color fails on any of these, adjust the token, not the screen.

The Table That Saves You From Yourself

Here's a comparison of common primary hue choices for SaaS, rated on the things that actually matter:

Hue Light mode contrast Dark mode contrast Brand distinctiveness Accessibility risk
Blue (#2563eb) Excellent Good Low (everyone uses it) Low
Teal (#0d9488) Good Good Medium Medium
Violet (#7c3aed) Good Fair Medium Medium
Orange (#ea580c) Fair Poor High High
Green (#16a34a) Good Fair Medium Medium (red/green confusion)

Blue wins on safety. Orange wins on distinctiveness. Teal and violet are the compromise zone. Green is fine until you realize 8% of men can't distinguish it from red.

Pick your primary based on this table, not on what your designer's favorite color is.

The Three-Step Process for Picking Your Startup Color Palette

If you're starting from zero, here's the sequence that works:

  1. Pick your primary hue. Default to blue unless you have a strong reason not to. Check the table above. Test it on light and dark surfaces.
  2. Pick your accent hue. This is where you get to be interesting. Choose something that pairs well with your primary without fighting it. Teal + amber. Violet + lime. Blue + orange.
  3. Define your neutrals. Warm gray or cool gray. Pick one. Map out three to five steps from light to dark for surfaces and text.

That's it. Three decisions. Everything else is a variation on those three.

What Actually Breaks a SaaS Brand Color Palette

Over the years, I've watched dozens of startups wreck their color systems. The causes are predictable:

  • Adding colors without roles. Someone wants a "fun" pink for a marketing campaign. It becomes a button color. Chaos follows.
  • Designing for light mode only. The palette looks great on white. Dark mode is an afterthought. Users complain. You ship a half-fixed dark theme. It looks worse than no dark mode.
  • No token layer. Colors are hardcoded in components. Changing the brand color means editing 47 files. Nobody does it. The brand drifts.
  • Too many hues. Five brand colors plus four functional colors plus three chart colors. Nothing feels cohesive. The product looks like a candy store.
  • Contrast failures. Muted colors that look sophisticated in Figma but fail WCAG in production. Accessibility lawsuits are expensive.
Takeaway

Most color problems are process problems, not taste problems. Fix the process and the taste takes care of itself.

Keep the Palette Small on Purpose

A good tech brand color palette has fewer colors than you think. Here's a realistic count for an early-stage SaaS:

  • 1 primary hue with 2–3 lightness steps
  • 1 accent hue with 2 lightness steps
  • 3 functional hues (success, warning, danger) with 1–2 steps each
  • 5 neutral steps (surface and text)

That's roughly 15–20 tokens total. If you have more than 30, you're doing it wrong.

Every color you add increases the surface area for inconsistency. Every color you remove makes the product feel more intentional.

FAQ

How many colors should a SaaS brand palette have?

Aim for 15–20 total color tokens. That includes one primary hue with a few lightness steps, one accent hue, three functional colors (success, warning, danger), and five neutral steps for surfaces and text. If you're above 30 tokens, you're adding colors without clear roles.

What's the best primary color for a SaaS product?

Blue is the safest default. It has excellent contrast on both light and dark surfaces, it's universally understood as "interactive," and it's the least likely to cause accessibility problems. Teal and violet are good alternatives if you want more distinctiveness. Orange and green carry higher accessibility risk.

How do I make my color palette work in dark mode?

Keep your brand hues the same. Change only your surface and text tokens. A dark mode variant should feel like the same brand under different lighting, not a separate identity. Test your primary color against both #ffffff and #0f172a at the same saturation. If it fails on one, adjust lightness, not hue.

Should I use CSS variables for my color palette?

Yes. Encode your palette as CSS custom properties or design tokens in the codebase from day one. This makes changing the entire product's primary color a one-line diff. It also forces you to think in terms of roles (primary, accent, danger) rather than raw hex codes scattered through components.

What if a new CEO or stakeholder wants to change the brand color?

If your colors are tokenized, the change is trivial. Update the primary and accent tokens, run the test suite, and ship. The real risk is when colors are hardcoded in components. That's when a "simple" rebrand turns into a two-week engineering project. Tokenize early and the CEO change is a non-event.

Share this article

Drafted by namemyapp's editorial agent and reviewed before publishing. Spotted an error or want to suggest a topic? Email hello@namemy.app.

Enjoyed this article?

Get more naming and domain tips delivered to your inbox weekly.

Join 1,000+ founders. No spam, ever.