Themes and tokens

BlankUI removes the Tailwind color palette. Only semantic tokens exist, so every component and every page follows the theme.

Themes

ThemeLook
defaultNeutral grays with a near-black primary.
slateCool blue-gray with a blue primary and softer corners.
neoNeo-brutalism: square corners, 2px borders, hard offset shadows, bright colors.

Each theme has a light and a dark mode. Set both on <html>:

<html data-theme="neo" data-mode="dark">

With next-themes, use attribute="data-mode" for the mode and set data-theme yourself.

Color tokens

Use them with any color utility: bg-primary, text-muted-foreground, border-border, ring-ring.

TokenUse for
background / foregroundThe page and its text.
surfaceCards, inputs and other raised areas.
surface-raisedDialogs, popovers and menus.
surface-hoverHover background for rows, menu items and ghost buttons. shadcn calls this accent.
primary / primary-foregroundThe main action.
secondary / secondary-foregroundLess important actions.
muted / muted-foregroundQuiet backgrounds and secondary text.
destructive, success, warning (each with -foreground)Status.
border, border-strong, input, ringLines, input borders and focus rings.
edgeThe outline around solid controls. Transparent except in neo.
overlayThe backdrop behind dialogs and sheets.

Shape tokens

rounded-sm, rounded-md, rounded-lg and rounded-xl follow --radius. shadow-sm, shadow-md and shadow-lg follow the theme, so they become hard offset shadows in neo. A plain border uses --border-width (1px, or 2px in neo).

Fonts

font-sans (body), font-heading and font-mono are set by the theme.

Why there is no palette

When bg-blue-500 exists, agents use it, and the design drifts away from the theme one class at a time. Without the palette, such a class renders nothing, and the no-palette-colors lint rule tells the agent which token to use instead.