Modifiers are plain HTML attributes. We call them modifiers because that is exactly what they do — modify the default appearance or state of an element.
Under the hood they are CSS attribute selectors: [sm], [g-4], [text-red]. Drop an attribute on any element and the style applies immediately.
Prefer classes? Every modifier is also available as a class — .sm, .g-4, .text-red.
Modifiers compose without conflict. Each one owns a single property, so stacking sm g-2 text-red on the same element is perfectly safe — order never matters and nothing
overrides anything else.
The three scale modifiers set --unit and --unit-size together. sm is two thirds of the default and lg four thirds. Everything built
with calc(var(--unit) * N) scales in step — spacing, font size, line height, border-radius,
gap.
Buttons, text inputs and dropdowns — and a <label> wrapping one — keep
their text size under sm. Only --unit changes, so they get shorter while
the text stays readable.
| Modifier | --unit | --unit-size |
|---|---|---|
sm | 2.67px (4px × ⅔) | 10.67px (16px × ⅔) |
md | 4px | 16px |
lg | 5.33px (4px × 4⁄3) | 21.33px (16px × 4⁄3) |
Control the display type or flex ratio of any element.
| Modifier | Effect |
|---|---|
hide | display: none |
flex | display: flex |
block | display: block |
inline-block | display: inline-block |
f-0..8 | flex: 0..8 |
justify-between | justify-content: space-between |
wrap | flex-wrap: wrap |
overflow-hidden | overflow: hidden |
overflow-auto | overflow: auto |
Strip an element's surface or make it react to the pointer. hover lays a faint
foreground tint over whatever background the element already has. The typed hover="…" form swaps in a background color of your own instead.
| Modifier | Effect | Preview |
|---|---|---|
bg-transparent | No background, border or own text color | |
bg-background | Page background color | |
bg-card | Card surface color | |
rounded | border-radius: var(--radius) | |
hover | Pointer cursor and a hover tint | |
hover="…" | Hover background color (experimental) |
Set width or height to full, auto or a size in units, and cap width with max-w-*.
Sizes run 0–8, then 10, 12, 16, 18, 20, 24, 32, 36, 40, 48, 60, 64, 72, 96, 128 and 160. The
typed w and h attributes take any value — experimental, Chrome 133+ only
for now.
| Modifier | Effect |
|---|---|
w-full | width: 100% |
h-full | height: 100% |
mw-full | min-width: 100% |
mh-full | min-height: 100% |
w-auto | width: auto |
h-auto | height: auto |
w-* | width: N × --unit |
h-* | height: N × --unit |
max-w-full | max-width: 100% |
max-w-* | max-width: N × --unit |
w="N" | width: N × --unit (experimental) |
h="N" | height: N × --unit (experimental) |
Gap between flex or grid children. Scales with --unit.
| Modifier | Property |
|---|---|
g-0..8, 10, 12, 16 | gap |
Margin and padding utilities follow a consistent naming pattern. All values scale with --unit, so they respond to sm, md, and lg automatically.
| Prefix | Property |
|---|---|
m-0..8 | margin (all sides) |
mt-0..8 | margin-top |
mb-0..8 | margin-bottom |
ml-0..8 | margin-left |
mr-0..8 | margin-right |
mx-0..8 | margin-inline (left + right) |
my-0..8 | margin-block (top + bottom) |
p-0..8 | padding (all sides) |
pt-0..8 | padding-top |
pb-0..8 | padding-bottom |
pl-0..8 | padding-left |
pr-0..8 | padding-right |
px-0..8 | padding-inline (left + right) |
py-0..8 | padding-block (top + bottom) |
m--1..8 | negative margin — every margin prefix takes --1..8, e.g. mx--4 |
Position and inset utilities for positioned elements. Inset values scale with --unit.
| Modifier | Property |
|---|---|
position="…" | static / relative / absolute / fixed / sticky |
contain="…" | none / strict / content / size / inline-size / layout / style / paint |
t-0..8 | top |
r-0..8 | right |
b-0..8 | bottom |
l-0..8 | left |
order-first | order: -1 |
Text and background color utilities built on CSS custom properties. Background tints use 20% opacity so they work on any surface without clashing.
| Modifier | Preview |
|---|---|
text-blue | Aa |
text-purple | Aa |
text-green | Aa |
text-orange | Aa |
text-cyan | Aa |
text-red | Aa |
text-yellow | Aa |
text-slate | Aa |
text-primary | Aa |
text-muted | Aa |
| Modifier | Preview |
|---|---|
bg-blue | |
bg-purple | |
bg-green | |
bg-orange | |
bg-cyan | |
bg-red | |
bg-yellow | |
bg-slate |
Prefix a scale, display, sizing, gap or spacing modifier with sm:, md:, or lg: to apply it only at a specific breakpoint — p-8 sm:p-4, w-96 sm:w-full. Carousels switch axis on phones with sm:x, sm:y and sm:z.
| Prefix | Breakpoint | Available modifiers |
|---|---|---|
sm: | ≤ 768px | sm, md, lg, hide, flex, block, vertical, order-first, f-*, g-*, w-*, h-*, max-w-*, m*-*, p*-* |
md: | 769px – 1024px | sm, md, lg, hide, flex, block, vertical, order-first, f-*, g-*, w-*, h-*, max-w-*, m*-*, p*-* |
lg: | > 1024px | sm, md, lg, hide, flex, block, vertical, order-first, f-*, g-*, w-*, h-*, max-w-*, m*-*, p*-* |
Rotate any element by a number of degrees. Built on the rotate property, so it
composes with transform-based animations instead of overriding them. Typed
attribute — Chrome 133+ for now.
| Modifier | Effect |
|---|---|
rotate="N" | rotate: N degrees (experimental) |
A small set of functional animations. Each one has a clear semantic role — loading, attention,
error, or content placeholder. Drop the modifier on any element; pair with <icon> for inline indicators.
| Modifier | Use | Preview |
|---|---|---|
animate-spin | Loading, processing | |
animate-pulse | Alive, loading dot | |
animate-ping | Notification ring | |
animate-bounce | Bouncing attention | |
animate-shake | Error feedback | |
animate-shimmer | Skeleton placeholder |
Two-state transitions driven by the [toggled] attribute. Add the modifier to arm
the transition (in-variants start hidden, out-variants and flips start in their resting
state); add [toggled] to play to the other state, remove it to reverse. animate-y also flips on its own when its parent's next sibling carries [open], which is how an accordion chevron turns.
| Modifier | Use | Preview |
|---|---|---|
animate-fade-in | Fade content in | |
animate-fade-out | Fade content out | |
animate-slide-in-left | Slide in from left | |
animate-slide-in-right | Slide in from right | |
animate-slide-in-up | Slide in from above | |
animate-slide-in-down | Slide in from below | |
animate-bounce-in | Bounce in | |
animate-bounce-out | Bounce out | |
animate-x | Flip horizontally (rotateY 180°) | |
animate-y | Flip vertically (rotateX 180°) |
v1.0.0