Gracious is a shadcn/ui theme built around a vivid deep green primary color (#051702) with vivid deep red accents (#170205). The light mode uses a neutral background (#ffffff). Dark mode keeps the vivid deep green primary (#051702) on a neutral background (#030703).
| Token | Light | Dark |
|---|---|---|
| Background | #ffffffwhite | #030703black |
| Foreground | #010401black | #fcfdfcwhite |
| Card | #fcfcfcsnow | #050b04black |
| Card foreground | #000000black | #ffffffwhite |
| Popover | #fcfcfcsnow | #050b04black |
| Popover foreground | #000000black | #ffffffwhite |
| Primary | #051702black | #051702black |
| Primary foreground | #29d312limegreen | #29d312limegreen |
| Secondary | #020517black | #020517black |
| Secondary foreground | #b9c0f9lightsteelblue | #b9c0f9lightsteelblue |
| Muted | #d4d6e8gainsboro | #17192bblack |
| Muted foreground | #3e4051darkslategray | #aeb0c1silver |
| Accent | #170205black | #170205black |
| Accent foreground | #f15b6csalmon | #f15b6csalmon |
| Destructive | #d8440echocolate | #dd450eorangered |
| Destructive foreground | #ffffffwhite | #ffffffwhite |
| Border | #e5e7eblavender | #1f2937darkslategray |
| Input | #e5e7eblavender | #1f2937darkslategray |
| Ring | #051702black | #051702black |
WCAG 2 contrast ratios between each background and its foreground color.
| Text on background | 20.60:1 | AAA |
| Text on card | 20.54:1 | AAA |
| Primary button | 9.19:1 | AAA |
| Secondary button | 11.56:1 | AAA |
| Muted text | 7.08:1 | AAA |
| Accent | 6.15:1 | AA |
| Destructive | 4.43:1 | AA Large |
| Text on background | 19.85:1 | AAA |
| Text on card | 19.87:1 | AAA |
| Primary button | 9.19:1 | AAA |
| Secondary button | 11.56:1 | AAA |
| Muted text | 8.06:1 | AAA |
| Accent | 6.15:1 | AA |
| Destructive | 4.26:1 | AA Large |
Paste this into your globals.css to use Gracious in your shadcn/ui project.
:root {
--radius: 0.5rem;
--background: oklch(1 0 180);
--foreground: oklch(0.098 0.019 140.323);
--muted: oklch(0.88 0.025 279.872);
--muted-foreground: oklch(0.377 0.028 279.057);
--popover: oklch(0.992 0 161.565);
--popover-foreground: oklch(0 0 0);
--card: oklch(0.992 0 161.565);
--card-foreground: oklch(0 0 0);
--border: oklch(0.928 0.006 264.531);
--input: oklch(0.928 0.006 264.531);
--primary: oklch(0.183 0.052 140.159);
--primary-foreground: oklch(0.755 0.248 141.836);
--secondary: oklch(0.123 0.045 268.524);
--secondary-foreground: oklch(0.822 0.08 278.619);
--accent: oklch(0.14 0.044 13.973);
--accent-foreground: oklch(0.671 0.184 16.71);
--destructive: oklch(0.593 0.193 36.892);
--destructive-foreground: oklch(1 0 180);
--ring: oklch(0.183 0.052 140.159);
--chart-1: oklch(0.183 0.052 140.159);
--chart-2: oklch(0.123 0.045 268.524);
--chart-3: oklch(0.14 0.044 13.973);
--chart-4: oklch(0.151 0.063 268.733);
--chart-5: oklch(0.184 0.053 140.088);
}
.dark {
--radius: 0.5rem;
--background: oklch(0.122 0.018 140.757);
--foreground: oklch(0.993 0.002 142.106);
--muted: oklch(0.222 0.036 277.329);
--muted-foreground: oklch(0.762 0.023 279.833);
--popover: oklch(0.139 0.021 140.768);
--popover-foreground: oklch(1 0 180);
--card: oklch(0.139 0.021 140.768);
--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.183 0.052 140.159);
--primary-foreground: oklch(0.755 0.248 141.836);
--secondary: oklch(0.123 0.045 268.524);
--secondary-foreground: oklch(0.822 0.08 278.619);
--accent: oklch(0.14 0.044 13.973);
--accent-foreground: oklch(0.671 0.184 16.71);
--destructive: oklch(0.603 0.196 36.864);
--destructive-foreground: oklch(1 0 180);
--ring: oklch(0.183 0.052 140.159);
--chart-1: oklch(0.183 0.052 140.159);
--chart-2: oklch(0.123 0.045 268.524);
--chart-3: oklch(0.14 0.044 13.973);
--chart-4: oklch(0.151 0.063 268.733);
--chart-5: oklch(0.184 0.053 140.088);
}