Adolescent for shadcn/ui

Adolescent is a shadcn/ui theme built around a light green primary color (#f5fbe9) with light green accents (#ecfbe9). The light mode uses a neutral background (#fafcf8). Dark mode keeps the light green primary (#f5fbe9) on a green-tinted background (#0c1004).

Color palette

TokenLightDark
Background
#fafcf8snow
#0c1004black
Foreground
#101603black
#ffffffwhite
Card
#fafcf8snow
#0c1004black
Card foreground
#101603black
#ffffffwhite
Popover
#fafcf8snow
#0c1004black
Popover foreground
#101603black
#ffffffwhite
Primary
#f5fbe9honeydew
#f5fbe9honeydew
Primary foreground
#2e410bdarkgreen
#2e410bdarkgreen
Secondary
#fbf9e9oldlace
#fbf9e9oldlace
Secondary foreground
#41390bdarkolivegreen
#41390bdarkolivegreen
Muted
#e8e7e3gainsboro
#1c1b17black
Muted foreground
#4f4d40darkolivegreen
#bfbdb0silver
Accent
#ecfbe9honeydew
#ecfbe9honeydew
Accent foreground
#13410bdarkgreen
#13410bdarkgreen
Destructive
#ca1c16firebrick
#e6201acrimson
Destructive foreground
#ffffffwhite
#ffffffwhite
Border
#e5e7eblavender
#1f2937darkslategray
Input
#e5e7eblavender
#1f2937darkslategray
Ring
#f5fbe9honeydew
#f5fbe9honeydew

Contrast

WCAG 2 contrast ratios between each background and its foreground color.

Light mode
Text on background17.86:1AAA
Text on card17.86:1AAA
Primary button10.59:1AAA
Secondary button10.90:1AAA
Muted text6.87:1AA
Accent10.94:1AAA
Destructive5.68:1AA
Dark mode
Text on background19.24:1AAA
Text on card19.24:1AAA
Primary button10.59:1AAA
Secondary button10.90:1AAA
Muted text9.12:1AAA
Accent10.94:1AAA
Destructive4.59:1AA

CSS variables

Paste this into your globals.css to use Adolescent in your shadcn/ui project.

:root {
  --radius: 0.5rem;
  --background: oklch(0.988 0.005 122.295);
  --foreground: oklch(0.189 0.039 124.788);
  --muted: oklch(0.928 0.005 98.398);
  --muted-foreground: oklch(0.418 0.022 98.975);
  --popover: oklch(0.988 0.005 122.295);
  --popover-foreground: oklch(0.189 0.039 124.788);
  --card: oklch(0.988 0.005 122.295);
  --card-foreground: oklch(0.189 0.039 124.788);
  --border: oklch(0.928 0.006 264.531);
  --input: oklch(0.928 0.006 264.531);
  --primary: oklch(0.979 0.025 122.611);
  --primary-foreground: oklch(0.348 0.081 127.254);
  --secondary: oklch(0.979 0.02 98.603);
  --secondary-foreground: oklch(0.344 0.063 98.876);
  --accent: oklch(0.973 0.029 141.001);
  --accent-foreground: oklch(0.333 0.096 140.96);
  --destructive: oklch(0.537 0.206 28.804);
  --destructive-foreground: oklch(1 0 180);
  --ring: oklch(0.979 0.025 122.611);
  --chart-1: oklch(0.979 0.025 122.611);
  --chart-2: oklch(0.979 0.02 98.603);
  --chart-3: oklch(0.973 0.029 141.001);
  --chart-4: oklch(0.992 0.008 98.433);
  --chart-5: oklch(0.98 0.026 122.627);
}

.dark {
  --radius: 0.5rem;
  --background: oklch(0.164 0.025 123.476);
  --foreground: oklch(1 0 180);
  --muted: oklch(0.222 0.007 98.765);
  --muted-foreground: oklch(0.797 0.019 98.636);
  --popover: oklch(0.164 0.025 123.476);
  --popover-foreground: oklch(1 0 180);
  --card: oklch(0.164 0.025 123.476);
  --card-foreground: oklch(1 0 180);
  --border: oklch(0.278 0.03 256.848);
  --input: oklch(0.278 0.03 256.848);
  --primary: oklch(0.979 0.025 122.611);
  --primary-foreground: oklch(0.348 0.081 127.254);
  --secondary: oklch(0.979 0.02 98.603);
  --secondary-foreground: oklch(0.344 0.063 98.876);
  --accent: oklch(0.973 0.029 141.001);
  --accent-foreground: oklch(0.333 0.096 140.96);
  --destructive: oklch(0.59 0.227 28.866);
  --destructive-foreground: oklch(1 0 180);
  --ring: oklch(0.979 0.025 122.611);
  --chart-1: oklch(0.979 0.025 122.611);
  --chart-2: oklch(0.979 0.02 98.603);
  --chart-3: oklch(0.973 0.029 141.001);
  --chart-4: oklch(0.992 0.008 98.433);
  --chart-5: oklch(0.98 0.026 122.627);
}