Theme it
Pick the pack, re-value the token contract in one artifact, and check the contrast the components actually paint.
Start from the defaults
“No skin” shows the neutral library baseline. Your application owns its theme and can override only the values that need to change. Refined and the other named presets remain optional starting points.
Components and portals render without a skin config or provider. Add your brand through application CSS.
Paint the document, not just the body
Apply bg-background to your document’s <html> element so overscroll and viewport gaps use the active theme.
The Next.js starter includes this root background. Keep the skin and color-mode attributes on the same theme boundary.
With a named skin on <html data-skin>, SkinProvider applies the config's motion and colorScheme to the root.
A skin that declares a fixed colorScheme holds the page in that mode while it is mounted, whatever the theme
toggle asks for. A skin scoped to a wrapper spreads skinScopeAttributes(skin) on that element and follows the
page mode. Create a skin shows both installs.
Keep frequent feedback immediate
Hover colors and hover-following highlights update immediately, as do desktop sidebar toggles. Press feedback, selection indicators, and popup entrances retain their motion tokens and respect reduced-motion preferences.
Group neighboring tooltips in one TooltipProvider: the first hover waits 500 ms, then neighboring tooltips open
immediately within Base UI’s 400 ms grouping window. Use the provider’s delay and timeout props when your
interaction needs different timing.
One artifact owns the theme
A theme is one file — <short-name>.control-ui-theme.json, format control-ui-theme/v1 — with tokens split into
shared, light, and dark. Color-valued tokens go in light and dark; everything else in shared. A token
left out inherits the base skin, so the artifact composes onto the pack instead of forking it.
Contrast is part of the theme
Contrast is a property of the theme, not a follow-up audit. Normal and small text clears 4.5:1 after alpha compositing in both modes; focus indicators and control boundaries clear 3:1.
The accessibility page checks the canonical colors plus what the components actually paint — popups, badges, active tabs — and the same checks run from the CLI, on every commit, over the baseline and every preset mode.