shadcn/ui theme · light original
Porcelain
A clean, near-white system with a single confident indigo accent — minimalism that still has a voice.
Install
npx shadcn@latest add https://csscreme.com/r/porcelain.json Requires a project with shadcn/ui set up. Prefer to paste? The CSS variables are below.
Revenue
Last 30 days across all workspaces.
Total
$48,210+12.4%Active
1,204+3.1%Churn
0.8%-0.2%:root {
--background: oklch(98.5% 0.001 286.4);
--foreground: oklch(21.0% 0.006 285.9);
--card: oklch(100.0% 0.000 89.9);
--card-foreground: oklch(21.0% 0.006 285.9);
--popover: oklch(100.0% 0.000 89.9);
--popover-foreground: oklch(21.0% 0.006 285.9);
--primary: oklch(45.7% 0.215 277.0);
--primary-foreground: oklch(100.0% 0.000 89.9);
--secondary: oklch(99.4% 0.001 286.4);
--secondary-foreground: oklch(21.0% 0.006 285.9);
--muted: oklch(99.4% 0.001 286.4);
--muted-foreground: oklch(55.2% 0.014 285.9);
--accent: oklch(68.5% 0.148 237.3);
--accent-foreground: oklch(15.2% 0.009 285.3);
--destructive: oklch(62.6% 0.193 23.0);
--destructive-foreground: oklch(15.2% 0.009 285.3);
--border: oklch(84.0% 0.006 286.3);
--input: oklch(84.0% 0.006 286.3);
--ring: oklch(45.7% 0.215 277.0);
--radius: 10px;
}
.dark {
--background: oklch(18.3% 0.004 286.0);
--foreground: oklch(96.4% 0.001 286.4);
--card: oklch(25.2% 0.000 89.9);
--card-foreground: oklch(96.4% 0.001 286.4);
--popover: oklch(25.2% 0.000 89.9);
--popover-foreground: oklch(96.4% 0.001 286.4);
--primary: oklch(45.7% 0.215 277.0);
--primary-foreground: oklch(100.0% 0.000 89.9);
--secondary: oklch(22.7% 0.002 286.2);
--secondary-foreground: oklch(96.4% 0.001 286.4);
--muted: oklch(22.7% 0.002 286.2);
--muted-foreground: oklch(70.6% 0.003 286.3);
--accent: oklch(68.5% 0.148 237.3);
--accent-foreground: oklch(15.2% 0.009 285.3);
--destructive: oklch(62.6% 0.193 23.0);
--destructive-foreground: oklch(15.2% 0.009 285.3);
--border: oklch(34.9% 0.003 286.2);
--input: oklch(34.9% 0.003 286.2);
--ring: oklch(45.7% 0.215 277.0);
} @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 Porcelain 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 10px