Theme studio
Edit the tokens and watch the whole site and the dashboard below follow. The link keeps your theme; export it when you're done.
Theme
Colors (light)
primary
Lightness0.205
Chroma0.000
Hue0ยฐ
Contrast (light)
WCAG 2 ratios: text needs 4.5:1, and lines and charts 3:1. 6 pairs are under.
- foreground on background19.79:1
- card-foreground on card19.79:1
- popover-foreground on popover19.79:1
- primary-foreground on primary17.16:1
- secondary-foreground on secondary16.42:1
- muted-foreground on muted4.54:1
- muted-foreground on background4.96:1
- accent-foreground on accent16.42:1
- destructive on background4.76:1
- sidebar-foreground on sidebar18.96:1
- sidebar-primary-foreground on sidebar-primary17.16:1
- sidebar-accent-foreground on sidebar-accent16.42:1
- border on background1.26:1 Needs 3:1
- input on background1.26:1 Needs 3:1
- ring on background2.59:1 Needs 3:1
- chart-1 on background1.48:1 Needs 3:1
- chart-2 on background4.73:1
- chart-3 on background7.80:1
- chart-4 on background10.39:1
- chart-5 on background15.12:1
- sidebar-border on sidebar1.21:1 Needs 3:1
- sidebar-ring on sidebar2.48:1 Needs 3:1
Radius, fonts and density
Radius0.625rem
Density
Sample dashboard
Export
Theme URL
A registry item for ndop init --theme, ndop add and the shadcn CLI. It holds the whole theme, so it never changes or expires.
CSS
Replaces the theme in your Tailwind CSS file, after @ndop/core/styles.css.
@import '@fontsource-variable/geist';
@import '@fontsource-variable/geist-mono';
@theme {
--font-sans: 'Geist Variable', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', 'Noto Sans', Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji';
--font-mono: 'Geist Mono Variable', ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, 'Liberation Mono', 'Courier New', monospace;
}
:root {
--background: oklch(1 0 0);
--foreground: oklch(0.145 0 0);
--card: oklch(1 0 0);
--card-foreground: oklch(0.145 0 0);
--popover: oklch(1 0 0);
--popover-foreground: oklch(0.145 0 0);
--primary: oklch(0.205 0 0);
--primary-foreground: oklch(0.985 0 0);
--secondary: oklch(0.97 0 0);
--secondary-foreground: oklch(0.205 0 0);
--muted: oklch(0.97 0 0);
--muted-foreground: oklch(0.545 0 0);
--accent: oklch(0.97 0 0);
--accent-foreground: oklch(0.205 0 0);
--destructive: oklch(0.577 0.245 27.325);
--border: oklch(0.922 0 0);
--input: oklch(0.922 0 0);
--ring: oklch(0.708 0 0);
--chart-1: oklch(0.87 0 0);
--chart-2: oklch(0.556 0 0);
--chart-3: oklch(0.439 0 0);
--chart-4: oklch(0.371 0 0);
--chart-5: oklch(0.269 0 0);
--radius: 0.625rem;
--sidebar: oklch(0.985 0 0);
--sidebar-foreground: oklch(0.145 0 0);
--sidebar-primary: oklch(0.205 0 0);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.97 0 0);
--sidebar-accent-foreground: oklch(0.205 0 0);
--sidebar-border: oklch(0.922 0 0);
--sidebar-ring: oklch(0.708 0 0);
}
.dark {
--background: oklch(0.145 0 0);
--foreground: oklch(0.985 0 0);
--card: oklch(0.205 0 0);
--card-foreground: oklch(0.985 0 0);
--popover: oklch(0.205 0 0);
--popover-foreground: oklch(0.985 0 0);
--primary: oklch(0.922 0 0);
--primary-foreground: oklch(0.205 0 0);
--secondary: oklch(0.269 0 0);
--secondary-foreground: oklch(0.985 0 0);
--muted: oklch(0.269 0 0);
--muted-foreground: oklch(0.708 0 0);
--accent: oklch(0.269 0 0);
--accent-foreground: oklch(0.985 0 0);
--destructive: oklch(0.704 0.191 22.216);
--border: oklch(1 0 0 / 10%);
--input: oklch(1 0 0 / 15%);
--ring: oklch(0.556 0 0);
--chart-1: oklch(0.87 0 0);
--chart-2: oklch(0.556 0 0);
--chart-3: oklch(0.439 0 0);
--chart-4: oklch(0.371 0 0);
--chart-5: oklch(0.269 0 0);
--sidebar: oklch(0.205 0 0);
--sidebar-foreground: oklch(0.985 0 0);
--sidebar-primary: oklch(0.488 0.243 264.376);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.269 0 0);
--sidebar-accent-foreground: oklch(0.985 0 0);
--sidebar-border: oklch(1 0 0 / 10%);
--sidebar-ring: oklch(0.556 0 0);
}
@media (prefers-color-scheme: dark) {
[data-ndop-theme='system'] {
--background: oklch(0.145 0 0);
--foreground: oklch(0.985 0 0);
--card: oklch(0.205 0 0);
--card-foreground: oklch(0.985 0 0);
--popover: oklch(0.205 0 0);
--popover-foreground: oklch(0.985 0 0);
--primary: oklch(0.922 0 0);
--primary-foreground: oklch(0.205 0 0);
--secondary: oklch(0.269 0 0);
--secondary-foreground: oklch(0.985 0 0);
--muted: oklch(0.269 0 0);
--muted-foreground: oklch(0.708 0 0);
--accent: oklch(0.269 0 0);
--accent-foreground: oklch(0.985 0 0);
--destructive: oklch(0.704 0.191 22.216);
--border: oklch(1 0 0 / 10%);
--input: oklch(1 0 0 / 15%);
--ring: oklch(0.556 0 0);
--chart-1: oklch(0.87 0 0);
--chart-2: oklch(0.556 0 0);
--chart-3: oklch(0.439 0 0);
--chart-4: oklch(0.371 0 0);
--chart-5: oklch(0.269 0 0);
--sidebar: oklch(0.205 0 0);
--sidebar-foreground: oklch(0.985 0 0);
--sidebar-primary: oklch(0.488 0.243 264.376);
--sidebar-primary-foreground: oklch(0.985 0 0);
--sidebar-accent: oklch(0.269 0 0);
--sidebar-accent-foreground: oklch(0.985 0 0);
--sidebar-border: oklch(1 0 0 / 10%);
--sidebar-ring: oklch(0.556 0 0);
}
}
JSON
The tokens in the W3C Design Tokens format, for design tools.
{
"light": {
"background": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
1,
0,
0
],
"alpha": 1
}
},
"foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.145,
0,
0
],
"alpha": 1
}
},
"card": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
1,
0,
0
],
"alpha": 1
}
},
"card-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.145,
0,
0
],
"alpha": 1
}
},
"popover": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
1,
0,
0
],
"alpha": 1
}
},
"popover-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.145,
0,
0
],
"alpha": 1
}
},
"primary": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.205,
0,
0
],
"alpha": 1
}
},
"primary-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.985,
0,
0
],
"alpha": 1
}
},
"secondary": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.97,
0,
0
],
"alpha": 1
}
},
"secondary-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.205,
0,
0
],
"alpha": 1
}
},
"muted": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.97,
0,
0
],
"alpha": 1
}
},
"muted-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.545,
0,
0
],
"alpha": 1
}
},
"accent": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.97,
0,
0
],
"alpha": 1
}
},
"accent-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.205,
0,
0
],
"alpha": 1
}
},
"destructive": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.577,
0.245,
27.32499999999999
],
"alpha": 1
}
},
"border": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.922,
0,
0
],
"alpha": 1
}
},
"input": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.922,
0,
0
],
"alpha": 1
}
},
"ring": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.708,
0,
0
],
"alpha": 1
}
},
"chart-1": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.87,
0,
0
],
"alpha": 1
}
},
"chart-2": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.556,
0,
0
],
"alpha": 1
}
},
"chart-3": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.439,
0,
0
],
"alpha": 1
}
},
"chart-4": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.371,
0,
0
],
"alpha": 1
}
},
"chart-5": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.269,
0,
0
],
"alpha": 1
}
},
"radius": {
"$type": "dimension",
"$value": {
"value": 0.625,
"unit": "rem"
}
},
"sidebar": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.985,
0,
0
],
"alpha": 1
}
},
"sidebar-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.145,
0,
0
],
"alpha": 1
}
},
"sidebar-primary": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.205,
0,
0
],
"alpha": 1
}
},
"sidebar-primary-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.985,
0,
0
],
"alpha": 1
}
},
"sidebar-accent": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.97,
0,
0
],
"alpha": 1
}
},
"sidebar-accent-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.205,
0,
0
],
"alpha": 1
}
},
"sidebar-border": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.922,
0,
0
],
"alpha": 1
}
},
"sidebar-ring": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.708,
0,
0
],
"alpha": 1
}
}
},
"dark": {
"background": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.145,
0,
0
],
"alpha": 1
}
},
"foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.985,
0,
0
],
"alpha": 1
}
},
"card": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.205,
0,
0
],
"alpha": 1
}
},
"card-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.985,
0,
0
],
"alpha": 1
}
},
"popover": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.205,
0,
0
],
"alpha": 1
}
},
"popover-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.985,
0,
0
],
"alpha": 1
}
},
"primary": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.922,
0,
0
],
"alpha": 1
}
},
"primary-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.205,
0,
0
],
"alpha": 1
}
},
"secondary": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.269,
0,
0
],
"alpha": 1
}
},
"secondary-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.985,
0,
0
],
"alpha": 1
}
},
"muted": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.269,
0,
0
],
"alpha": 1
}
},
"muted-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.708,
0,
0
],
"alpha": 1
}
},
"accent": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.269,
0,
0
],
"alpha": 1
}
},
"accent-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.985,
0,
0
],
"alpha": 1
}
},
"destructive": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.704,
0.191,
22.216000000000008
],
"alpha": 1
}
},
"border": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
1,
0,
0
],
"alpha": 0.1
}
},
"input": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
1,
0,
0
],
"alpha": 0.15
}
},
"ring": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.556,
0,
0
],
"alpha": 1
}
},
"chart-1": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.87,
0,
0
],
"alpha": 1
}
},
"chart-2": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.556,
0,
0
],
"alpha": 1
}
},
"chart-3": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.439,
0,
0
],
"alpha": 1
}
},
"chart-4": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.371,
0,
0
],
"alpha": 1
}
},
"chart-5": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.269,
0,
0
],
"alpha": 1
}
},
"sidebar": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.205,
0,
0
],
"alpha": 1
}
},
"sidebar-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.985,
0,
0
],
"alpha": 1
}
},
"sidebar-primary": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.488,
0.243,
264.376
],
"alpha": 1
}
},
"sidebar-primary-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.985,
0,
0
],
"alpha": 1
}
},
"sidebar-accent": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.269,
0,
0
],
"alpha": 1
}
},
"sidebar-accent-foreground": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.985,
0,
0
],
"alpha": 1
}
},
"sidebar-border": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
1,
0,
0
],
"alpha": 0.1
}
},
"sidebar-ring": {
"$type": "color",
"$value": {
"colorSpace": "oklch",
"components": [
0.556,
0,
0
],
"alpha": 1
}
}
},
"font-sans": {
"$type": "fontFamily",
"$value": [
"Geist Variable",
"-apple-system",
"BlinkMacSystemFont",
"Segoe UI",
"Roboto",
"Helvetica Neue",
"Noto Sans",
"Arial",
"sans-serif",
"Apple Color Emoji",
"Segoe UI Emoji",
"Segoe UI Symbol",
"Noto Color Emoji"
]
},
"font-mono": {
"$type": "fontFamily",
"$value": [
"Geist Mono Variable",
"ui-monospace",
"SFMono-Regular",
"Menlo",
"Monaco",
"Consolas",
"Liberation Mono",
"Courier New",
"monospace"
]
}
}