Frilly for shadcn/ui

Frilly is a shadcn/ui theme built around a yellow primary color (#6e7326) with muted light yellow accents (#d5d6c7). The light mode uses a neutral background (#fdfdfc). Dark mode keeps the yellow primary (#6e7326) on a yellow-tinted background (#0d0d07).

Color palette

TokenLightDark
Background
#fdfdfcwhite
#0d0d07black
Foreground
#151603black
#fdfdfcwhite
Card
#fdfdfcwhite
#0d0d07black
Card foreground
#151603black
#fdfdfcwhite
Popover
#fdfdfcwhite
#0d0d07black
Popover foreground
#151603black
#fdfdfcwhite
Primary
#6e7326olivedrab
#6e7326olivedrab
Primary foreground
#ffffffwhite
#ffffffwhite
Secondary
#d5d6c7lightgrey
#151514black
Secondary foreground
#3d3e2edarkslategray
#aeaeaddarkgray
Muted
#f4f5ealinen
#14150ablack
Muted foreground
#4d4e3cdarkolivegreen
#c2c3b1silver
Accent
#d5d6c7lightgrey
#151514black
Accent foreground
#3d3e2edarkslategray
#aeaeaddarkgray
Destructive
#be2a09firebrick
#f43a10orangered
Destructive foreground
#ffffffwhite
#ffffffwhite
Border
#e5e7eblavender
#1f2937darkslategray
Input
#e5e7eblavender
#1f2937darkslategray
Ring
#6e7326olivedrab
#6e7326olivedrab

Contrast

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

Light mode
Text on background18.01:1AAA
Text on card18.01:1AAA
Primary button5.08:1AA
Secondary button7.39:1AAA
Muted text7.72:1AAA
Accent7.39:1AAA
Destructive5.95:1AA
Dark mode
Text on background19.12:1AAA
Text on card19.12:1AAA
Primary button5.08:1AA
Secondary button8.25:1AAA
Muted text10.31:1AAA
Accent8.25:1AAA
Destructive3.85:1AA Large

CSS variables

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

:root {
  --radius: 0.5rem;
  --background: oklch(0.994 0.002 109.522);
  --foreground: oklch(0.195 0.036 112.544);
  --muted: oklch(0.966 0.014 109.742);
  --muted-foreground: oklch(0.417 0.029 110.724);
  --popover: oklch(0.994 0.002 109.522);
  --popover-foreground: oklch(0.195 0.036 112.544);
  --card: oklch(0.994 0.002 109.522);
  --card-foreground: oklch(0.195 0.036 112.544);
  --border: oklch(0.928 0.006 264.531);
  --input: oklch(0.928 0.006 264.531);
  --primary: oklch(0.534 0.099 112.924);
  --primary-foreground: oklch(1 0 180);
  --secondary: oklch(0.871 0.02 109.896);
  --secondary-foreground: oklch(0.356 0.027 110.831);
  --accent: oklch(0.871 0.02 109.896);
  --accent-foreground: oklch(0.356 0.027 110.831);
  --destructive: oklch(0.523 0.188 32.944);
  --destructive-foreground: oklch(1 0 180);
  --ring: oklch(0.534 0.099 112.924);
  --chart-1: oklch(0.534 0.099 112.924);
  --chart-2: oklch(0.871 0.02 109.896);
  --chart-3: oklch(0.871 0.02 109.896);
  --chart-4: oklch(0.891 0.016 109.821);
  --chart-5: oklch(0.541 0.103 113.044);
}

.dark {
  --radius: 0.5rem;
  --background: oklch(0.157 0.013 110.825);
  --foreground: oklch(0.994 0.002 109.521);
  --muted: oklch(0.189 0.02 111.36);
  --muted-foreground: oklch(0.812 0.025 110.037);
  --popover: oklch(0.157 0.013 110.825);
  --popover-foreground: oklch(0.994 0.002 109.521);
  --card: oklch(0.157 0.013 110.825);
  --card-foreground: oklch(0.994 0.002 109.521);
  --border: oklch(0.278 0.03 256.848);
  --input: oklch(0.278 0.03 256.848);
  --primary: oklch(0.534 0.099 112.924);
  --primary-foreground: oklch(1 0 180);
  --secondary: oklch(0.194 0.001 109.556);
  --secondary-foreground: oklch(0.751 0.002 109.536);
  --accent: oklch(0.194 0.001 109.556);
  --accent-foreground: oklch(0.751 0.002 109.536);
  --destructive: oklch(0.632 0.226 33.013);
  --destructive-foreground: oklch(1 0 180);
  --ring: oklch(0.534 0.099 112.924);
  --chart-1: oklch(0.534 0.099 112.924);
  --chart-2: oklch(0.194 0.001 109.556);
  --chart-3: oklch(0.194 0.001 109.556);
  --chart-4: oklch(0.228 0.001 109.566);
  --chart-5: oklch(0.541 0.103 113.044);
}