Theming
Every color, radius, and font in Noarka UI is a CSS variable. Override them to re-skin the whole library without forking a single component.
How it works
Two stylesheets carry the theme. tokens.css declares every variable once in :root, and an @theme inline block maps them to Tailwind utilities: --primary becomes bg-primary, --radius-lg becomes rounded-lg, and so on. base.css adds keyframes and small structural styles on top. The @source line registers the library's classes, which Tailwind would otherwise skip inside node_modules.
Color tokens
The default palette is dark-first. Swatches show the exact shipped values:
| Token | Swatch | Value |
|---|---|---|
--backgroundPage background. | oklch(16.9% 0.002 286.2) | |
--foregroundDefault text. | oklch(96% 0.011 286.2) | |
--cardCard background. | oklch(20.1% 0.002 286.2) | |
--popoverDialog and tooltip background. | oklch(20.1% 0.002 286.2) | |
--surfaceShared popup and menu background. | oklch(22.3% 0.002 286.2) | |
--secondarySecondary fills. | oklch(23.1% 0.002 286.3) | |
--mutedMuted fills and skeleton base. | oklch(23.1% 0.002 286.3) | |
--accentHover and focus fills. | oklch(25.3% 0.004 286.1) | |
--primaryBrand actions and accents. | oklch(67.4% 0.132 39.1) | |
--destructiveDanger actions. | oklch(58.6% 0.123 21.5) | |
--successPositive status. | oklch(74.6% 0.161 152.4) | |
--warningWarning status. | oklch(67.9% 0.077 76.8) | |
--borderHairline borders. | oklch(100% 0.00011 271.152 / 0.034) | |
--inputInput borders. | oklch(23.1% 0.002 286.3) | |
--ringFocus rings. | oklch(100% 0.00011 271.152 / 0.034) |
Dark mode
The shipped palette is dark, defined once in :root. There is no bundled light theme. A light mode is simply the same variables re-declared with light values:
Per-app overrides
Scope variables under a data-theme attribute to theme one app (or one subtree) without touching the rest:
Radius
One base radius drives the whole scale. Change --radius and every rounded utility follows:
Fonts
Three font tokens cover every surface: --font-sans for UI text, --font-serif for display headings, and --font-mono for code. They follow the next/font variable convention, so any variable font can be slotted in:
Surface
Floating UI shares one background so popups read as a single layer: --surface (#1b1b1c), exposed as bg-surface, text-surface, and border-surface. Menus, tooltips, popovers, sheets, selects, and the dialog footer bands use it; dialog bodies stay on bg-card. Like every token, re-declare it per theme or per app to retint every floating surface at once.
Next steps
Ready to apply this to a project? The installation guide covers importing both stylesheets and the one extra line Tailwind needs.