Tune the theme on the left and every component below follows. The panel is the real SThemeCustomizer — colors, radius, size, spacing, surfaces, borders and the per-token overrides apply to this page as you change them.
primary, the fills derived from the base palette, and the role ramp
SButton
SButton · SLink · SBadge · STag
SSwitch · SCheckbox · SSlider · SProgress · SRating · SPagination · SAvatar
primary-50 → primary-950
the feedback scheme: destructive, success, warning and info
SAlert
Feedback scheme role
Feedback scheme role
Feedback scheme role
Feedback scheme role
SBadge · STag · SProgress
toast · SPopconfirm
destructive · destructive-foreground · destructive-text · destructive-subtle · destructive-border
hairline tokens, control fills and the focus ring
SInput · SSelect · STextarea · SInputNumber
SCheckbox · SRadioGroup · SSwitch · SRating · SSlider
SSegment · SToggleGroup · STagsInput · SCheckboxGroup
Focus ring · disabled — press Tab to walk the ring token
surfaces, muted fills and table borders
Surface, border, radius and shadow tokens
| Invoice | Status | Amount |
|---|---|---|
| INV-001 | Paid | $250.00 |
| INV-002 | Pending | $150.00 |
| INV-003 | Paid | $350.00 |
| INV-004 | Refunded | $450.00 |
Empty state icons and copy follow the text ladder.
the elevation ladder, nested surfaces and surfaceStyle
Elevation ladder — background → surface → elevated → carbon
Nesting — a surface inside a surface
Surface panel
Shadow ladder
Text roles on the page surface
--vean-foreground — the quick brown fox
--vean-muted-foreground — the quick brown fox
muted-foreground/70 — the quick brown fox
hairline tokens, border-strong and the ring
Hairline tokens
Control outlines — SInput · SSelect · STextarea
SCheckbox · SRadioGroup · SSwitch · STag
SSeparator
Card outlines read the same hairline tokens
Horizontal and vertical separators
Focus rings
Border opacity and ring width are global: the hairline tiles above are the same token at different alpha.
dialogs and popups on the elevated surface
SDialog · SDrawer · SSheet · SDropdownMenu · SPopover · STooltip · SPopconfirm
Popup surface tokens
the ladder every control and text rung reads
SButton · SBadge · STag
SInput · SSelect · STextarea · SInputNumber
SCheckbox · SSwitch · SSlider · SRadioGroup · SSegment
SProgress · SAvatar
Text ladder — --vean-text-4xs → --vean-text-2xl
text-4xs
text-3xs
text-2xs
text-xs
text-sm
text-base
text-lg
text-xl
text-2xl
one seed drives the whole rung ladder
Rung ladder — every rung is a multiple of --vean-radius
SButton · SInput · STag · STextarea at five rungs
Nesting — inner radius derived from the outer panel
Card and controls inside it share the seed
one unit drives padding, margin and gap
Padding ladder — the inner block is fixed, the frame moves
Gap ladder — SButtonGroup · SToolbar · SKbd
SButtonGroup · SToolbar · SSeparator
SAlert stack · SCard padding
space-y-2 between rows
space-y-2 between rows
Cards pad their body with the same grid
the region skin, mirroring the global roles
SLayout · STreeMenu — the region skin in place
Region tokens — the sidebar mirrors the global roles
chart-1 to chart-5, derived from primary
Grouped bars
Stacked bar · legend
the fill to foreground pairs the contrast guard walks
Solid fills — SButton on every role
Fill ↔ foreground pairs — the contrast guard's units
Text roles on the page surface
text-foreground — body copy at 14px
text-muted-foreground — body copy at 14px
text-muted-foreground/70 — body copy at 14px
In dark mode the guard re-picks a fill level or flips the foreground; the AAA policy widens the thresholds.