Blessing for shadcn/ui

Blessing is a shadcn/ui theme built around a light yellow primary color (#efecc8) with light green accents (#deefc8). The light mode uses a neutral background (#ffffff). Dark mode keeps the light yellow primary (#efecc8) on a yellow-tinted background (#100f04).

Color palette

TokenLightDark
Background
#ffffffwhite
#100f04black
Foreground
#080802black
#fdfdfcwhite
Card
#fcfcfcsnow
#141306black
Card foreground
#040401black
#ffffffwhite
Popover
#fcfcfcsnow
#141306black
Popover foreground
#040401black
#ffffffwhite
Primary
#efecc8blanchedalmond
#efecc8blanchedalmond
Primary foreground
#181707black
#181707black
Secondary
#efd9c8bisque
#efd9c8bisque
Secondary foreground
#673d1esaddlebrown
#673d1esaddlebrown
Muted
#efe4dcantiquewhite
#231810black
Muted foreground
#47423edarkslategray
#c1bcb8silver
Accent
#deefc8gainsboro
#deefc8gainsboro
Accent foreground
#101807black
#101807black
Destructive
#c51616firebrick
#dc1818crimson
Destructive foreground
#ffffffwhite
#ffffffwhite
Border
#e5e7eblavender
#1f2937darkslategray
Input
#e5e7eblavender
#1f2937darkslategray
Ring
#efecc8blanchedalmond
#efecc8blanchedalmond

Contrast

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

Light mode
Text on background20.07:1AAA
Text on card20.08:1AAA
Primary button15.05:1AAA
Secondary button6.80:1AA
Muted text7.94:1AAA
Accent14.94:1AAA
Destructive5.98:1AA
Dark mode
Text on background18.87:1AAA
Text on card18.67:1AAA
Primary button15.05:1AAA
Secondary button6.80:1AA
Muted text9.20:1AAA
Accent14.94:1AAA
Destructive4.99:1AA

CSS variables

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

:root {
  --radius: 0.5rem;
  --background: oklch(1 0 180);
  --foreground: oklch(0.13 0.018 106.012);
  --muted: oklch(0.926 0.016 60.045);
  --muted-foreground: oklch(0.382 0.01 59.927);
  --popover: oklch(0.992 0 161.565);
  --popover-foreground: oklch(0.103 0.014 106.012);
  --card: oklch(0.992 0 161.565);
  --card-foreground: oklch(0.103 0.014 106.012);
  --border: oklch(0.928 0.006 264.531);
  --input: oklch(0.928 0.006 264.531);
  --primary: oklch(0.937 0.048 103.921);
  --primary-foreground: oklch(0.199 0.028 105.116);
  --secondary: oklch(0.898 0.034 59.761);
  --secondary-foreground: oklch(0.404 0.074 56.086);
  --accent: oklch(0.929 0.055 126.548);
  --accent-foreground: oklch(0.195 0.033 128.115);
  --destructive: oklch(0.525 0.205 28.156);
  --destructive-foreground: oklch(1 0 180);
  --ring: oklch(0.937 0.048 103.921);
  --chart-1: oklch(0.937 0.048 103.921);
  --chart-2: oklch(0.898 0.034 59.761);
  --chart-3: oklch(0.929 0.055 126.548);
  --chart-4: oklch(0.92 0.026 59.888);
  --chart-5: oklch(0.939 0.051 103.959);
}

.dark {
  --radius: 0.5rem;
  --background: oklch(0.166 0.022 105.369);
  --foreground: oklch(0.994 0.002 103.137);
  --muted: oklch(0.221 0.023 58.628);
  --muted-foreground: oklch(0.799 0.008 60.143);
  --popover: oklch(0.183 0.026 105.208);
  --popover-foreground: oklch(1 0 180);
  --card: oklch(0.183 0.026 105.208);
  --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.937 0.048 103.921);
  --primary-foreground: oklch(0.199 0.028 105.116);
  --secondary: oklch(0.898 0.034 59.761);
  --secondary-foreground: oklch(0.404 0.074 56.086);
  --accent: oklch(0.929 0.055 126.548);
  --accent-foreground: oklch(0.195 0.033 128.115);
  --destructive: oklch(0.57 0.223 28.235);
  --destructive-foreground: oklch(1 0 180);
  --ring: oklch(0.937 0.048 103.921);
  --chart-1: oklch(0.937 0.048 103.921);
  --chart-2: oklch(0.898 0.034 59.761);
  --chart-3: oklch(0.929 0.055 126.548);
  --chart-4: oklch(0.92 0.026 59.888);
  --chart-5: oklch(0.939 0.051 103.959);
}