← All tools

Website Theming Tool

Pick a primary hue and saturation, choose a secondary color harmony, tune your button and status colors, then copy the generated CSS custom properties.

Primary Color

Hue240°
Saturation75%

Secondary Color Harmony


Button Lightness

Primary Button54%
Secondary Button54%

Status Colors

Success Hue150°
Success Saturation60%
Error Hue0°
Error Saturation75%
CSS Custom Properties
:root {

  /* ─── Primary ─── */
  --primary-50: hsl(240 75% 97%);
  --primary-100: hsl(240 75% 93%);
  --primary-200: hsl(240 75% 86%);
  --primary-300: hsl(240 75% 76%);
  --primary-400: hsl(240 75% 65%);
  --primary-500: hsl(240 75% 54%);
  --primary-600: hsl(240 75% 44%);
  --primary-700: hsl(240 75% 34%);
  --primary-800: hsl(240 75% 24%);
  --primary-900: hsl(240 75% 15%);

  /* ─── Secondary ─── */
  --secondary-50: hsl(60 75% 97%);
  --secondary-100: hsl(60 75% 93%);
  --secondary-200: hsl(60 75% 86%);
  --secondary-300: hsl(60 75% 76%);
  --secondary-400: hsl(60 75% 65%);
  --secondary-500: hsl(60 75% 54%);
  --secondary-600: hsl(60 75% 44%);
  --secondary-700: hsl(60 75% 34%);
  --secondary-800: hsl(60 75% 24%);
  --secondary-900: hsl(60 75% 15%);

  /* ─── Buttons ─── */
  --btn-primary-bg:       hsl(240 75% 54%);
  --btn-primary-hover:    hsl(240 75% 47%);
  --btn-primary-active:   hsl(240 75% 40%);
  --btn-primary-text:     hsl(0 0% 100%);
  --btn-focus-ring:       hsla(240, 75%, 54%, 0.22);

  --btn-secondary-bg:     hsl(60 75% 54%);
  --btn-secondary-hover:  hsl(60 75% 47%);
  --btn-secondary-active: hsl(60 75% 40%);
  --btn-secondary-text:   hsl(0 0% 100%);

  /* ─── Backgrounds ─── */
  --bg-page:      hsl(240 11% 97%);
  --bg-surface:   hsl(240 6% 100%);
  --bg-card:      hsl(240 6% 99%);
  --bg-hover:     hsl(240 11% 94%);
  --bg-affix:     hsl(240 11% 97%);

  /* ─── Borders ─── */
  --border:        hsl(240 23% 88%);
  --border-subtle: hsl(240 23% 93%);

  /* ─── Typography ─── */
  --text-primary: hsl(240 19% 12%);
  --text-muted:   hsl(240 11% 46%);
  --text-subtle:  hsl(240 11% 65%);

  /* ─── Success ─── */
  --success-bg:     hsl(150 60% 97%);
  --success-border: hsl(150 60% 86%);
  --success-500:    hsl(150 60% 54%);
  --success-text:   hsl(150 60% 34%);
  --success-dark:   hsl(150 60% 24%);

  /* ─── Warning (derived from secondary) ─── */
  --warning-bg:     var(--secondary-50);
  --warning-border: var(--secondary-200);
  --warning-500:    var(--secondary-500);
  --warning-text:   var(--secondary-700);
  --warning-dark:   var(--secondary-800);

  /* ─── Error ─── */
  --error-bg:     hsl(0 75% 97%);
  --error-border: hsl(0 75% 86%);
  --error-500:    hsl(0 75% 54%);
  --error-text:   hsl(0 75% 34%);
  --error-dark:   hsl(0 75% 24%);

  /* ─── Series (chart colors) ─── */
  --series-1: hsl(240 75% 54%);
  --series-2: hsl(300 75% 54%);
  --series-3: hsl(0 75% 54%);
  --series-4: hsl(60 75% 54%);
  --series-5: hsl(120 75% 54%);
  --series-6: hsl(180 75% 54%);
  --series-7: hsl(270 75% 54%);
  --series-8: hsl(330 75% 54%);
  --series-9: hsl(30 75% 54%);
  --series-10: hsl(90 75% 54%);
  --series-11: hsl(150 75% 54%);
  --series-12: hsl(210 75% 54%);

}
Primary
50
100
200
300
400
500
600
700
800
900
Secondary
50
100
200
300
400
500
600
700
800
900
Success
Error
Btn Primary
Btn Secondary
Series Colors Preview
Alpha
Beta
Gamma
Delta
Epsilon
Zeta