- Accordion
- Alert
- Alert Dialog
- Attachment
- Badge
- Breadcrumb
- Bubble
- Button
- Button Group
- Calendar
- Card
- Checkbox
- Collapsible
- Command
- Context Menu
- Data Table
- Dialog
- Drawer
- Dropdown Menu
- Empty
- Field
- Hover Card
- Input
- Input Group
- Item
- Kbd
- Label
- Marker
- Menubar
- Message
- Message Scroller
- Pagination
- Popover
- Progress
- Questionnaire
- Radio Group
- Scroll Area
- Select
- Separator
- Sheet
- Sidebar
- Skeleton
- Slider
- Sonner
- Spinner
- Switch
- Table
- Tabs
- Textarea
- Toggle
- Toggle Group
- Tooltip
Theming follows shadcn/ui: components read CSS variables, and Tailwind exposes them as utilities like bg-background and text-muted-foreground. The style item installs our values; change them and every component follows.
Convention#
A color has a background variable and a -foreground variable for the text on it:
--primary: #3e6ae1;
--primary-foreground: #ffffff;<div className="bg-primary text-primary-foreground">Hello</div>Variables#
Components only use shadcn's standard variables, so they also work with any other shadcn theme.
:root {
--radius: 0.625rem;
--background: #ffffff;
--foreground: #333333;
--card: #ffffff;
--card-foreground: #333333;
--popover: #ffffff;
--popover-foreground: #333333;
--primary: #3e6ae1;
--primary-foreground: #ffffff;
--secondary: #f5f5f5;
--secondary-foreground: #1a1a1a;
--muted: #f5f5f5;
--muted-foreground: #6e6e6e;
--accent: #f2f2f2;
--accent-foreground: #333333;
--destructive: #d42f2f;
--border: #ebebeb;
--input: #e0e0e0;
--ring: #0077e6;
--sidebar: #f9f9f9;
--sidebar-foreground: #333333;
--sidebar-primary: #3e6ae1;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #ededed;
--sidebar-accent-foreground: #333333;
--sidebar-border: #ebebeb;
--sidebar-ring: #0077e6;
--success: #0a772a;
}
.dark {
--background: #1c1c1c;
--foreground: #ececec;
--card: #1c1c1c;
--card-foreground: #ececec;
--popover: #1c1c1c;
--popover-foreground: #ececec;
--primary: #3e6ae1;
--primary-foreground: #ffffff;
--secondary: #242424;
--secondary-foreground: #f5f5f5;
--muted: #242424;
--muted-foreground: #9a9a9a;
--accent: #2a2a2a;
--accent-foreground: #ececec;
--destructive: #ff6b6b;
--border: #2e2e2e;
--input: #3a3a3a;
--ring: #3d9bff;
--sidebar: #151515;
--sidebar-foreground: #ececec;
--sidebar-primary: #3e6ae1;
--sidebar-primary-foreground: #ffffff;
--sidebar-accent: #313131;
--sidebar-accent-foreground: #ececec;
--sidebar-border: #2e2e2e;
--sidebar-ring: #3d9bff;
--success: #3ddc6e;
}A few notes on how they're used:
primaryis the one blue for things you act on: the default button, links, checked controls.ringis brighter, and only for keyboard focus.accentis a neutral hover fill, not a brand color.inputis the border of controls,borderthe hairline between regions.
Derived colors#
Some colors in the design aren't variables. The button's gradient, its border and the tab track are mixed from variables in the component with color-mix(), the way shadcn's base-nova style does it:
"from-[color-mix(in_oklch,var(--primary),white_15%)] to-primary"Change --primary and the gradient, border and hover states all follow.
Success color#
The design adds one color, success, for positive status. It follows shadcn's pattern for adding new colors: a variable, plus a theme entry so Tailwind generates bg-success and text-success.
@theme inline {
--color-success: var(--success);
}No component uses it on its own. Apply it with className:
import { Badge } from "@/components/ui/badge"
export function BadgeStatus() {
return (
<div className="flex flex-wrap items-center gap-2">
<Badge className="bg-success/15 text-success">Connected</Badge>
<Badge variant="secondary">Disconnected</Badge>
</div>
)
}Radius#
--radius is the base of shadcn's radius scale (rounded-sm to rounded-4xl). Controls use rounded-lg, which is --radius itself (10px by default). Nested pieces stay concentric: a part inset by 4px inside a rounded-xl frame uses a radius 4px smaller.
Using another theme#
Every component works with any shadcn theme. Skip the style item, or overwrite its variables with your own: the textures, gradients and shadows are derived from whatever your variables are.