Equatorial is a shadcn/ui theme built around a neutral gray primary color (#e2e2e4) with neutral gray accents (#e3e2e4). The light mode uses a neutral background (#ffffff). Dark mode keeps the neutral gray primary (#e2e2e4) on an indigo-tinted background (#04050b).
| Token | Light | Dark |
|---|---|---|
| Background | #ffffffwhite | #04050bblack |
| Foreground | #000000black | #ffffffwhite |
| Card | #fcfcfcsnow | #06060fblack |
| Card foreground | #000000black | #ffffffwhite |
| Popover | #ffffffwhite | #04050bblack |
| Popover foreground | #000000black | #ffffffwhite |
| Primary | #e2e2e4gainsboro | #e2e2e4gainsboro |
| Primary foreground | #47474ddarkslategray | #47474ddarkslategray |
| Secondary | #e2e3e4gainsboro | #e2e3e4gainsboro |
| Secondary foreground | #474a4ddarkslategray | #474a4ddarkslategray |
| Muted | #d0dae2gainsboro | #1d272fdarkslategray |
| Muted foreground | #545a5fdimgray | #a0a6abdarkgray |
| Accent | #e3e2e4gainsboro | #e3e2e4gainsboro |
| Accent foreground | #4a474ddarkslategray | #4a474ddarkslategray |
| Destructive | #802f0asaddlebrown | #ed5712orangered |
| Destructive foreground | #fad3c1peachpuff | #ffffffwhite |
| Border | #e5e7eblavender | #1f2937darkslategray |
| Input | #e5e7eblavender | #1f2937darkslategray |
| Ring | #e2e2e4gainsboro | #e2e2e4gainsboro |
WCAG 2 contrast ratios between each background and its foreground color.
| Text on background | 21.00:1 | AAA |
| Text on card | 20.54:1 | AAA |
| Primary button | 7.12:1 | AAA |
| Secondary button | 6.94:1 | AA |
| Muted text | 4.92:1 | AA |
| Accent | 7.06:1 | AAA |
| Destructive | 6.49:1 | AA |
| Text on background | 20.37:1 | AAA |
| Text on card | 20.17:1 | AAA |
| Primary button | 7.12:1 | AAA |
| Secondary button | 6.94:1 | AA |
| Muted text | 6.13:1 | AA |
| Accent | 7.06:1 | AAA |
| Destructive | 3.50:1 | AA Large |
Paste this into your globals.css to use Equatorial in your shadcn/ui project.
:root {
--radius: 0.5rem;
--background: oklch(1 0 180);
--foreground: oklch(0 0 0);
--muted: oklch(0.883 0.016 240.53);
--muted-foreground: oklch(0.464 0.011 240.607);
--popover: oklch(1 0 180);
--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.913 0.003 283.054);
--primary-foreground: oklch(0.401 0.009 282.709);
--secondary: oklch(0.915 0.002 240.312);
--secondary-foreground: oklch(0.408 0.006 240.492);
--accent: oklch(0.914 0.003 305.693);
--accent-foreground: oklch(0.403 0.01 305.399);
--destructive: oklch(0.418 0.121 41.132);
--destructive-foreground: oklch(0.896 0.05 46.307);
--ring: oklch(0.913 0.003 283.054);
--chart-1: oklch(0.913 0.003 283.054);
--chart-2: oklch(0.915 0.002 240.312);
--chart-3: oklch(0.914 0.003 305.693);
--chart-4: oklch(0.939 0.001 240.304);
--chart-5: oklch(0.911 0.005 283.014);
}
.dark {
--radius: 0.5rem;
--background: oklch(0.116 0.018 279.047);
--foreground: oklch(1 0 180);
--muted: oklch(0.268 0.021 241.465);
--muted-foreground: oklch(0.723 0.01 240.468);
--popover: oklch(0.116 0.018 279.047);
--popover-foreground: oklch(1 0 180);
--card: oklch(0.128 0.02 279.1);
--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.913 0.003 283.054);
--primary-foreground: oklch(0.401 0.009 282.709);
--secondary: oklch(0.915 0.002 240.312);
--secondary-foreground: oklch(0.408 0.006 240.492);
--accent: oklch(0.914 0.003 305.693);
--accent-foreground: oklch(0.403 0.01 305.399);
--destructive: oklch(0.65 0.197 40.06);
--destructive-foreground: oklch(1 0 180);
--ring: oklch(0.913 0.003 283.054);
--chart-1: oklch(0.913 0.003 283.054);
--chart-2: oklch(0.915 0.002 240.312);
--chart-3: oklch(0.914 0.003 305.693);
--chart-4: oklch(0.939 0.001 240.304);
--chart-5: oklch(0.911 0.005 283.014);
}