Quaint for shadcn/ui

Quaint is a shadcn/ui theme built around a deep green primary color (#101806) with deep pink accents (#180610). The light mode uses a neutral background (#fafcf8). Dark mode keeps the deep green primary (#101806) on a neutral background (#000000).

Color palette

TokenLightDark
Background
#fafcf8snow
#000000black
Foreground
#080c03black
#ffffffwhite
Card
#f8fbf4whitesmoke
#030303black
Card foreground
#050802black
#ffffffwhite
Popover
#f8fbf4whitesmoke
#030303black
Popover foreground
#050802black
#ffffffwhite
Primary
#101806black
#101806black
Primary foreground
#7cbc2fyellowgreen
#7cbc2fyellowgreen
Secondary
#061018black
#061018black
Secondary foreground
#74aedccornflowerblue
#74aedccornflowerblue
Muted
#ecf0f4whitesmoke
#0b1013black
Muted foreground
#474747darkslategray
#b8b8b8silver
Accent
#180610black
#180610black
Accent foreground
#dc74aepalevioletred
#dc74aepalevioletred
Destructive
#973602saddlebrown
#fb610eorangered
Destructive foreground
#ffffffwhite
#000000black
Border
#e5e7eblavender
#1f2937darkslategray
Input
#e5e7eblavender
#1f2937darkslategray
Ring
#101806black
#101806black

Contrast

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

Light mode
Text on background19.13:1AAA
Text on card19.24:1AAA
Primary button7.83:1AAA
Secondary button8.05:1AAA
Muted text8.11:1AAA
Accent6.65:1AA
Destructive7.38:1AAA
Dark mode
Text on background21.00:1AAA
Text on card20.67:1AAA
Primary button7.83:1AAA
Secondary button8.05:1AAA
Muted text9.65:1AAA
Accent6.65:1AA
Destructive6.82:1AA

CSS variables

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

:root {
  --radius: 0.5rem;
  --background: oklch(0.989 0.006 126.512);
  --foreground: oklch(0.146 0.023 125.739);
  --muted: oklch(0.953 0.006 242.283);
  --muted-foreground: oklch(0.399 0 180);
  --popover: oklch(0.983 0.01 126.554);
  --popover-foreground: oklch(0.128 0.02 125.469);
  --card: oklch(0.983 0.01 126.554);
  --card-foreground: oklch(0.128 0.02 125.469);
  --border: oklch(0.928 0.006 264.531);
  --input: oklch(0.928 0.006 264.531);
  --primary: oklch(0.197 0.036 128.839);
  --primary-foreground: oklch(0.725 0.179 131.198);
  --secondary: oklch(0.168 0.023 243.166);
  --secondary-foreground: oklch(0.728 0.091 244.183);
  --accent: oklch(0.16 0.038 347.329);
  --accent-foreground: oklch(0.695 0.145 347.386);
  --destructive: oklch(0.466 0.14 41.734);
  --destructive-foreground: oklch(1 0 180);
  --ring: oklch(0.197 0.036 128.839);
  --chart-1: oklch(0.197 0.036 128.839);
  --chart-2: oklch(0.168 0.023 243.166);
  --chart-3: oklch(0.16 0.038 347.329);
  --chart-4: oklch(0.204 0.032 245.008);
  --chart-5: oklch(0.199 0.038 128.902);
}

.dark {
  --radius: 0.5rem;
  --background: oklch(0 0 0);
  --foreground: oklch(1 0 180);
  --muted: oklch(0.169 0.01 242.996);
  --muted-foreground: oklch(0.781 0 180);
  --popover: oklch(0.092 0 180);
  --popover-foreground: oklch(1 0 180);
  --card: oklch(0.092 0 180);
  --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.197 0.036 128.839);
  --primary-foreground: oklch(0.725 0.179 131.198);
  --secondary: oklch(0.168 0.023 243.166);
  --secondary-foreground: oklch(0.728 0.091 244.183);
  --accent: oklch(0.16 0.038 347.329);
  --accent-foreground: oklch(0.695 0.145 347.386);
  --destructive: oklch(0.684 0.204 41.664);
  --destructive-foreground: oklch(0 0 0);
  --ring: oklch(0.197 0.036 128.839);
  --chart-1: oklch(0.197 0.036 128.839);
  --chart-2: oklch(0.168 0.023 243.166);
  --chart-3: oklch(0.16 0.038 347.329);
  --chart-4: oklch(0.204 0.032 245.008);
  --chart-5: oklch(0.199 0.038 128.902);
}