Fulldev UI follows the same CSS variable and semantic token model as shadcn/ui.
Keep component styling on tokens such as background, foreground, primary,
muted, border, and ring instead of hard-coded colors.
Where to make changes
Change the tokens in your stylesheet, the one components.json points to.
Update values in :root and .dark, and keep the @theme inline mappings in
place so Tailwind utilities like bg-background, text-foreground, and
border-border keep working across all installed components.
Styles and presets
Fulldev UI supports the shadcn/ui styles: Vega, Nova, Maia, Lyra, Mira, Luma, Sera, and Rhea. A style changes the shape of components, such as radius, density, and type, while your theme tokens keep the colors. Use the style menu next to any preview to compare them.
A shadcn/ui preset sets the style, theme, and fonts at once. Build one on the Create page and see Presets for how to start or switch a project with it.
Override component styles
A class you pass to a component is merged after the style’s classes, so it
wins when both set the same thing, such as class="rounded-md". Two cases need
the same form as the style’s class:
- Important classes. Some shadcn/ui styles mark a class with
!, such asrounded-xl!onCommandandCommandDialogandrounded-lg!onCommandIteminside a dialog. Add!to yours as well, for examplecontentClass="rounded-md!"onCommandDialog. TheCommandItemclass also has a variant, so match both:class="in-data-[slot=dialog-content]:rounded-md!". shadcn/ui components behave the same way. - Classes with a variant. A class such as
in-data-[slot=navigation-menu-content]:rounded-smonNavigationMenuLinkonly applies inside a menu panel, so a plainrounded-mddoes not replace it there. Use the same variant:class="in-data-[slot=navigation-menu-content]:rounded-md".
What styles do not cover
Fulldev UI follows the shadcn/ui token model, so a few things stay per component instead of becoming tokens:
-
Radius. One
--radiussets the whole radius scale, from--radius-smto--radius-4xl, the same as shadcn/ui. There are no separate radius tokens per role, such as for buttons or cards, and nocorner-shapeoption. Pass a radius class to a component or pick a style with the shape you want. -
Control sizes and borders. Each style sets its own control heights. Borders are 1px, except the 2px switch border in Luma and Rhea, and there is no border-width token. Use the size props, such as
size="lg"onButton(44px in Sera), or a class such ash-11for a larger touch target. -
Navigation menu width. The menu panel is positioned next to its trigger, and the navigation menu script writes its position and width inline. Until it has a full-width option, override both with
!important. The panel moves tobodywhile open, so it spans the page:[data-slot="navigation-menu-positioner"] { left: 0 !important; width: 100% !important; max-width: none !important; } [data-slot="navigation-menu-popup"] { width: 100% !important; }
Tokens to keep in sync
Most projects only need to tune the core surface and action tokens, the sidebar
tokens, and --radius. Changing those values is usually enough to make buttons,
cards, inputs, overlays, and navigation feel cohesive without rewriting
component classes.
Dark mode
If you use the included ThemeToggle, render ThemeProvider in your
document <head> so the saved theme or system preference is applied before the
page paints.
For deeper token guidance, use the official shadcn/ui theming docs and dark mode docs as the reference.