shadcn/ui theme · light original

Graphite

Pure black on pure white with graphite greys and no accent hue — the stark, developer-tool monochrome that never goes out of style.

monominimalprofessional

Install

npx shadcn@latest add https://csscreme.com/r/graphite.json

Requires a project with shadcn/ui set up. Prefer to paste? The CSS variables are below.

Live preview

Revenue

Last 30 days across all workspaces.

Total

$48,210+12.4%

Active

1,204+3.1%

Churn

0.8%-0.2%

Tokens

:root {
  --background: oklch(100.0% 0.000 89.9);
  --foreground: oklch(14.5% 0.000 89.9);
  --card: oklch(98.5% 0.000 89.9);
  --card-foreground: oklch(14.5% 0.000 89.9);
  --popover: oklch(98.5% 0.000 89.9);
  --popover-foreground: oklch(14.5% 0.000 89.9);
  --primary: oklch(20.5% 0.000 89.9);
  --primary-foreground: oklch(100.0% 0.000 89.9);
  --secondary: oklch(99.1% 0.000 89.9);
  --secondary-foreground: oklch(14.5% 0.000 89.9);
  --muted: oklch(99.1% 0.000 89.9);
  --muted-foreground: oklch(55.6% 0.000 89.9);
  --accent: oklch(43.9% 0.000 89.9);
  --accent-foreground: oklch(100.0% 0.000 89.9);
  --destructive: oklch(62.6% 0.193 23.0);
  --destructive-foreground: oklch(15.2% 0.009 285.3);
  --border: oklch(85.1% 0.000 89.9);
  --input: oklch(85.1% 0.000 89.9);
  --ring: oklch(20.5% 0.000 89.9);
  --radius: 6px;
}

.dark {
  --background: oklch(18.7% 0.000 89.9);
  --foreground: oklch(96.7% 0.000 89.9);
  --card: oklch(25.2% 0.000 89.9);
  --card-foreground: oklch(96.7% 0.000 89.9);
  --popover: oklch(25.2% 0.000 89.9);
  --popover-foreground: oklch(96.7% 0.000 89.9);
  --primary: oklch(20.5% 0.000 89.9);
  --primary-foreground: oklch(100.0% 0.000 89.9);
  --secondary: oklch(23.1% 0.000 89.9);
  --secondary-foreground: oklch(96.7% 0.000 89.9);
  --muted: oklch(23.1% 0.000 89.9);
  --muted-foreground: oklch(70.9% 0.000 89.9);
  --accent: oklch(43.9% 0.000 89.9);
  --accent-foreground: oklch(100.0% 0.000 89.9);
  --destructive: oklch(62.6% 0.193 23.0);
  --destructive-foreground: oklch(15.2% 0.009 285.3);
  --border: oklch(35.2% 0.000 89.9);
  --input: oklch(35.2% 0.000 89.9);
  --ring: oklch(20.5% 0.000 89.9);
}

Tailwind v4

@theme inline {
  --color-background: var(--background);
  --color-foreground: var(--foreground);
  --color-card: var(--card);
  --color-card-foreground: var(--card-foreground);
  --color-popover: var(--popover);
  --color-popover-foreground: var(--popover-foreground);
  --color-primary: var(--primary);
  --color-primary-foreground: var(--primary-foreground);
  --color-secondary: var(--secondary);
  --color-secondary-foreground: var(--secondary-foreground);
  --color-muted: var(--muted);
  --color-muted-foreground: var(--muted-foreground);
  --color-accent: var(--accent);
  --color-accent-foreground: var(--accent-foreground);
  --color-destructive: var(--destructive);
  --color-destructive-foreground: var(--destructive-foreground);
  --color-border: var(--border);
  --color-input: var(--input);
  --color-ring: var(--ring);
  --radius: var(--radius);
}

Colors are OKLCH. Contrast is checked in both modes: foreground on background, on cards, and button labels on the primary fill.

Where this came from

Themes here aren't randomised swatches — they start life as a palette in our design layer, studied against real interfaces. See the Graphite palette for the full role breakdown, font pairing and spacing scale, or browse the showcase and breakdowns the palettes are drawn from.

Font pairing Geist headings · Geist body  ·  Radius 6px

Related themes