Agent skill

color-palette

Generate complete, accessible color palettes from a single brand hex. Creates 11-shade scale (50-950), semantic tokens (background, foreground, card, muted), and dark mode variants. Includes WCAG contrast checking for text accessibility. Use when: setting up design system, creating Tailwind theme, building brand colors from single hex, converting designs to code, checking color accessibility.

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/color-palette

Metadata

Additional technical details for this skill

keywords
color-palette brand-colors shade-generation dark-mode tailwind-colors semantic-tokens wcag-contrast accessibility
last verified
1768348800

SKILL.md

Color Palette Generation

Status: Production Ready ✅ Last Updated: 2026-01-14 Standard: Tailwind v4 @theme syntax


Quick Start

Generate complete palette from brand hex:

javascript
// Input: Brand hex
const brandColor = "#0D9488" // Teal-600

// Output: 11-shade scale + semantic tokens + dark mode
primary-50:  #F0FDFA (lightest)
primary-500: #14B8A6 (brand)
primary-950: #042F2E (darkest)

background: #FFFFFF
foreground: #0F172A
primary: #14B8A6

Use the reference files to generate shades, map semantics, and check contrast.


Color Scale Overview

Standard 11-Shade Scale

Shade Lightness Use Case
50 97% Subtle backgrounds
100 94% Hover states
200 87% Borders, dividers
300 75% Disabled states
400 62% Placeholder text
500 48% Brand color
600 40% Primary actions
700 33% Hover on primary
800 27% Active states
900 20% Text on light bg
950 10% Darkest accents

Key principle: Shade 500 represents your brand color. Other shades maintain hue/saturation while varying lightness.


Hex to HSL Conversion

Convert brand hex to HSL for shade generation:

javascript
// Example: #0D9488 → hsl(174, 84%, 29%)
// H (Hue): 174deg
// S (Saturation): 84%
// L (Lightness): 29%

Generate shades by keeping hue constant, adjusting lightness:

  • Lighter shades (50-400): Reduce saturation slightly
  • Mid shades (500-600): Full saturation
  • Darker shades (700-950): Full saturation

See references/shade-generation.md for conversion formula.


Semantic Token Mapping

Map shade scale to semantic tokens for components:

Light Mode

css
--background: white
--foreground: primary-950
--card: white
--card-foreground: primary-900
--muted: primary-50
--muted-foreground: primary-600
--border: primary-200
--primary: primary-600
--primary-foreground: white

Dark Mode

css
--background: primary-950
--foreground: primary-50
--card: primary-900
--card-foreground: primary-50
--muted: primary-800
--muted-foreground: primary-400
--border: primary-800
--primary: primary-500
--primary-foreground: white

Pattern: Invert lightness while preserving relationships. See references/semantic-mapping.md.


Dark Mode Pattern

Swap light and dark shades:

Light Mode Dark Mode
50 (97% L) 950 (10% L)
100 (94% L) 900 (20% L)
200 (87% L) 800 (27% L)
500 (brand) 500 (brand, slightly brighter)

Preserve brand identity: Keep hue/saturation consistent, only invert lightness.

CSS pattern:

css
:root {
  --background: white;
  --foreground: hsl(var(--primary-950));
}

.dark {
  --background: hsl(var(--primary-950));
  --foreground: hsl(var(--primary-50));
}

Contrast Checking

WCAG minimum ratios:

  • Text (AA): 4.5:1 normal, 3:1 large (18px+)
  • UI Elements: 3:1 (buttons, borders)

Quick check pairs:

  • primary-600 text on white background
  • white text on primary-600 background
  • primary-900 text on primary-50 background

Formula:

javascript
contrast = (lighter + 0.05) / (darker + 0.05)
// Where lighter/darker are relative luminance values

See references/contrast-checking.md for full formula and fix patterns.


Quick Reference

Generate Complete Palette

  1. Convert brand hex to HSL
  2. Generate 11 shades (50-950) by varying lightness
  3. Map shades to semantic tokens
  4. Create dark mode variants (invert lightness)
  5. Check contrast for text pairs

Tailwind v4 Output

Use @theme directive:

css
@theme {
  --color-primary-50: #F0FDFA;
  --color-primary-500: #14B8A6;
  --color-primary-950: #042F2E;

  --color-background: #FFFFFF;
  --color-foreground: var(--color-primary-950);
}

Common Adjustments

  • Too vibrant at light shades: Reduce saturation by 10-20%
  • Poor contrast on primary: Use shade 700+ for text
  • Dark mode too dark: Use shade 900 instead of 950 for backgrounds
  • Brand color too light/dark: Adjust to shade 500-600 range

Resources

File Purpose
references/shade-generation.md Hex→HSL conversion, lightness values
references/semantic-mapping.md Token mapping for light/dark modes
references/dark-mode-palette.md Inversion patterns, shade swapping
references/contrast-checking.md WCAG formulas, quick check table
templates/tailwind-colors.css Complete CSS output template
rules/color-palette.md Common mistakes and corrections

Token Efficiency

Without skill: ~8-12k tokens trial-and-error for palette generation With skill: ~3-4k tokens using references Savings: ~65%

Errors prevented:

  • Poor contrast ratios (accessibility violations)
  • Inconsistent shade scales
  • Broken dark mode (wrong lightness values)
  • Raw Tailwind colors instead of semantic tokens
  • Missing foreground pairs for backgrounds

Examples

Brand Color: Teal (#0D9488)

css
@theme {
  /* Shade scale */
  --color-primary-50: #F0FDFA;
  --color-primary-100: #CCFBF1;
  --color-primary-200: #99F6E4;
  --color-primary-300: #5EEAD4;
  --color-primary-400: #2DD4BF;
  --color-primary-500: #14B8A6;
  --color-primary-600: #0D9488;
  --color-primary-700: #0F766E;
  --color-primary-800: #115E59;
  --color-primary-900: #134E4A;
  --color-primary-950: #042F2E;

  /* Light mode semantics */
  --color-background: #FFFFFF;
  --color-foreground: var(--color-primary-950);
  --color-primary: var(--color-primary-600);
  --color-primary-foreground: #FFFFFF;
}

.dark {
  /* Dark mode overrides */
  --color-background: var(--color-primary-950);
  --color-foreground: var(--color-primary-50);
  --color-primary: var(--color-primary-500);
}

Brand Color: Purple (#7C3AED)

css
@theme {
  --color-primary-50: #FAF5FF;
  --color-primary-500: #A855F7;
  --color-primary-950: #3B0764;

  --color-background: #FFFFFF;
  --color-foreground: var(--color-primary-950);
  --color-primary: var(--color-primary-600);
}

Next Steps: Use references/shade-generation.md to convert your brand hex to HSL and generate the 11-shade scale.

Didn't find tool you were looking for?

Be as detailed as possible for better results