Skip to content
themes.dev

Dashboard color palette generator

Pick one brand color and get a complete admin palette for a light or dark dashboard: backgrounds, surfaces, borders, text, a primary scale, status and chart colors. Every pair is checked for WCAG AA contrast and fixed when it falls short. Copy it as a Tailwind v4 @theme block or plain CSS variables.

Need the screens too? AirControl has 191 admin pages for €29
Dashboard theme
24 of 24 contrast checks pass, 1 auto-fixed

Surfaces and text

Primary scale

Primary

Status

Chart colors

Contrast checks (WCAG AA)

Text needs 4.5:1, borders and chart marks 3:1
  • Primary button on background4.94:1AA
  • Text on background17.17:1AA
  • Text on surface18.10:1AA
  • Secondary text on surface8.47:1AA
  • Muted text on surface5.05:1AA
  • Muted text on surface alt4.59:1AA
  • Input border on surface3.12:1AA
  • Button text on primary5.21:1AA
  • Link on surface5.21:1AA
  • Link on background4.94:1AA
  • Success text on success soft6.24:1AA
  • Success on surface3.68:1AA
  • Warning text on warning soft6.63:1AA
  • Warning on surfaceAuto-fixed from 2.55:13.07:1AA
  • Danger text on danger soft6.92:1AA
  • Danger on surface4.31:1AA
  • Info text on info soft6.49:1AA
  • Info on surface3.87:1AA
  • Chart 1 on surface5.21:1AA
  • Chart 2 on surface3.99:1AA
  • Chart 3 on surface3.37:1AA
  • Chart 4 on surface4.00:1AA
  • Chart 5 on surface3.66:1AA
  • Chart 6 on surface3.47:1AA

Export

@theme {
  --color-bg: oklch(0.982 0.006 267);
  --color-surface: oklch(1 0 0);
  --color-surface-alt: oklch(0.967 0.008 267);
  --color-border: oklch(0.925 0.01 267);
  --color-border-strong: oklch(0.66 0.01 267);
  --color-fg: oklch(0.2 0.015 267);
  --color-fg-secondary: oklch(0.42 0.013 267);
  --color-fg-muted: oklch(0.54 0.012 267);
  --color-primary: oklch(0.544 0.191 267);
  --color-on-primary: oklch(1 0 0);
  --color-link: oklch(0.544 0.191 267);
  --color-primary-50: oklch(0.97 0.014 267);
  --color-primary-100: oklch(0.932 0.032 267);
  --color-primary-200: oklch(0.882 0.057 267);
  --color-primary-300: oklch(0.809 0.095 267);
  --color-primary-400: oklch(0.706 0.153 267);
  --color-primary-500: oklch(0.622 0.191 267);
  --color-primary-600: oklch(0.544 0.191 267);
  --color-primary-700: oklch(0.487 0.18 267);
  --color-primary-800: oklch(0.423 0.16 267);
  --color-primary-900: oklch(0.379 0.138 267);
  --color-primary-950: oklch(0.282 0.107 267);
  --color-success: oklch(0.6 0.165 150);
  --color-success-soft: oklch(0.955 0.035 150);
  --color-success-fg: oklch(0.45 0.124 150);
  --color-warning: oklch(0.67 0.141 75);
  --color-warning-soft: oklch(0.955 0.035 75);
  --color-warning-fg: oklch(0.45 0.095 75);
  --color-danger: oklch(0.6 0.17 25);
  --color-danger-soft: oklch(0.955 0.022 25);
  --color-danger-fg: oklch(0.45 0.13 25);
  --color-info: oklch(0.6 0.137 240);
  --color-info-soft: oklch(0.955 0.024 240);
  --color-info-fg: oklch(0.45 0.103 240);
  --color-chart-1: oklch(0.544 0.191 267);
  --color-chart-2: oklch(0.62 0.19 27);
  --color-chart-3: oklch(0.62 0.184 147);
  --color-chart-4: oklch(0.62 0.19 327);
  --color-chart-5: oklch(0.62 0.127 87);
  --color-chart-6: oklch(0.62 0.106 207);
}
How it works

From one brand color to a full admin palette

Most color tools give you a scale of one hue. A dashboard needs a system: quiet neutrals that carry most of the screen, one accent that marks what is clickable, status colors that mean the same thing everywhere, and chart colors that stay apart when six series share a bar. This generator builds that system in four steps.

  1. Read the brand color in OKLCH. Your hex value is converted to lightness, chroma and hue. All later choices are made in that space, so steps look evenly spaced to the eye instead of to the math.
  2. Build the neutrals. Backgrounds, surfaces, borders and text get a small dose of your brand hue. Pure greys next to a saturated accent tend to look dull; tinted greys make the whole interface feel like one product.
  3. Place the primary. The primary scale runs from 50 to 950 with your exact color on the step nearest its lightness. For buttons, the brand color is used as is when it works in the chosen theme. If it is too light for white text (think yellow) or too dark for a dark background (think navy), the same hue moves to a usable lightness.
  4. Check every pair. Text against backgrounds, button text against the primary, badge text against its fill, input borders and chart colors against cards. Any pair under the WCAG AA limit is darkened or lightened until it passes, and the check list shows the ratio before and after.

What is in the palette

TokenUsed for
bgPage background behind everything.
surface, surface-altCards, panels and the sidebar; the alt shade for table headers, hover rows and active nav items.
border, border-strongHairlines between areas; the strong border for inputs and controls, checked at 3:1.
fg, fg-secondary, fg-mutedHeadings and body text, supporting text, and labels or timestamps. All three pass 4.5:1.
primary, on-primary, linkButtons and active states, the text on those buttons, and links on surfaces.
primary-50 … primary-950Eleven steps of your brand hue for tints, hover states and data highlights.
success, warning, danger, infoEach as a solid (dots, bars), a soft fill (badges, alerts) and a text color that reads on that fill.
chart-1 … chart-8Five to eight series colors spread around the color wheel, starting from your primary.

Tips for a dark dashboard color palette

  • Skip pure black. A background around oklch(0.17) with a hint of hue is easier on the eyes and leaves room for shadows and elevation.
  • Lighter means closer. In dark mode, raise cards by making them lighter than the page instead of adding a drop shadow nobody can see.
  • Soften the text. Off-white (around 96% lightness) reads better than #ffffff on dark grey and causes less halation for people with astigmatism.
  • Brighten the accents. A primary and status colors that work on white are often too dark on a dark surface. Raise their lightness and keep the hue.
  • Mute the fills. Badge and alert backgrounds should be dark, low-chroma versions of the status hue, with a light text color on top.
  • Design both themes from the same tokens. Name colors by role (surface, fg-muted) instead of value, so one class works in light and dark.

Using the export

With Tailwind CSS v4, paste the @theme block below @import "tailwindcss"; and the tokens become utilities right away:

<div class="bg-bg text-fg">
  <div class="rounded-xl border border-border bg-surface p-4">
    <p class="text-fg-muted">Revenue</p>
    <button class="bg-primary text-on-primary">New report</button>
    <span class="bg-success-soft text-success-fg">Paid</span>
  </div>
</div>

Without Tailwind, use the CSS variables export and reference them as var(--surface). Both exports can include a second block for the other theme, so a class on the root element switches the whole dashboard between light and dark.

Want to see the result on more than one mock screen? AirControl is a Tailwind CSS admin theme with 191 fully designed pages, from analytics dashboards to billing and chat, ready for your palette.

Questions

What colors does an admin dashboard need?

More than a brand color. A working admin panel color scheme has a page background, one or two surface colors for cards and table headers, a border and a stronger border for inputs, three levels of text (primary, secondary and muted), a primary color with a readable text color on top, a lighter-to-darker scale of that primary, four status colors (success, warning, danger, info) and a set of chart colors that stay apart from each other. This generator produces all of them from one input.

How do I make a dark dashboard color palette?

Switch the theme to Dark. The generator then uses a dark, slightly tinted background instead of pure black, makes cards lighter than the page so they stand out without heavy shadows, lowers the text from pure white to soft off-white, and brightens the primary, status and chart colors so they keep enough contrast against the dark surfaces.

Can I get the palette as hex codes?

Yes. Every swatch shows its hex code and copies it on click, and the export switches between OKLCH and hex values. Contrast ratios are always measured on the hex value you copy.

What does WCAG AA mean for a dashboard?

WCAG 2.2 level AA asks for a contrast ratio of at least 4.5:1 for normal text and 3:1 for user interface parts such as input borders, focus rings and chart marks. The generator checks every text and UI pair in the palette against those limits and darkens or lightens a color until it passes.

Why OKLCH instead of HSL?

In HSL a yellow and a blue with the same lightness value look very different in brightness. OKLCH is perceptual: the same L looks equally light across hues. That makes it possible to build a primary scale and chart colors that step evenly, whichever brand color you start from. Tailwind CSS v4 defines its own palette in OKLCH for the same reason.

How do I use the palette with Tailwind CSS v4?

Copy the @theme block into your main CSS file after @import "tailwindcss". Every token becomes a utility: bg-surface, text-fg-muted, border-border-strong, bg-primary-600, text-success-fg and so on. Tick the dark mode option to also get a .dark block that overrides the same variables.

Is the generator free?

Yes. There is no sign-up and nothing is sent to a server: the colors are calculated in your browser. Use the palettes in any project, commercial included.

See your palette on all 191 AirControl pages.

Dashboards, CRM, projects, billing, chat and auth screens in one consistent Tailwind CSS style. One-time payment, lifetime updates.