Button
Composable button utilities: pick a variant, a tone, and a size. Everything else (hover, focus, active) is built in.
At a glance
Playground
Controls
Preview
Codehtml
<button class="btn-solid/primary btn-size-md">
Button
</button>
Button
componentcomposable
Applies button styling using the selected variant and tone palette.
Pattern
btn-{variant}[/{palette}]
Variant
solid/soft/outline/ghost
Palette
primary/secondary/accent/surface/success/danger/disabled/default:inherited
Composes with
btn-size-{size}+btn-icon
Solid
Codehtml
<button class="btn-solid/primary">Primary</button>
<button class="btn-solid/secondary">Secondary</button>
<button class="btn-solid/accent">Accent</button>
<button class="btn-solid/surface">Surface</button>
Soft
Codehtml
<button class="btn-soft/primary">Primary</button>
<button class="btn-soft/secondary">Secondary</button>
<button class="btn-soft/accent">Accent</button>
<button class="btn-soft/surface">Surface</button>
Outline
Codehtml
<button class="btn-outline/primary">Primary</button>
<button class="btn-outline/secondary">Secondary</button>
<button class="btn-outline/accent">Accent</button>
<button class="btn-outline/surface">Surface</button>
Ghost
Codehtml
<button class="btn-ghost/primary">Primary</button>
<button class="btn-ghost/secondary">Secondary</button>
<button class="btn-ghost/accent">Accent</button>
<button class="btn-ghost/surface">Surface</button>
Button Group
componentcomposable
Groups adjacent buttons into a visually connected row sharing a variant style and tone palette.
Pattern
btn-group-{variant}[/{palette}]
Variant
solid/soft/outline/ghost/default:outline
Palette
primary/secondary/accent/surface/success/danger/disabled/default:inherited
Composes with
btn-size-{size}+btn-icon
Solid
Codehtml
<div class="btn-group-solid/primary">
<label>
<input type="radio" name="button-group-solid" checked />
First
</label>
<label>
<input type="radio" name="button-group-solid" />
Second
</label>
<label>
<input type="radio" name="button-group-solid" />
Third
</label>
</div>
Soft
Codehtml
<div class="btn-group-soft/primary">
<label>
<input type="radio" name="button-group-soft" checked />
First
</label>
<label>
<input type="radio" name="button-group-soft" />
Second
</label>
<label>
<input type="radio" name="button-group-soft" />
Third
</label>
</div>
Outline
Codehtml
<div class="btn-group-outline/primary">
<label>
<input
type="radio"
name="button-group-outline"
checked
/>
First
</label>
<label>
<input type="radio" name="button-group-outline" />
Second
</label>
<label>
<input type="radio" name="button-group-outline" />
Third
</label>
</div>
Ghost
Codehtml
<div class="btn-group-ghost/primary">
<label>
<input type="radio" name="button-group-ghost" checked />
First
</label>
<label>
<input type="radio" name="button-group-ghost" />
Second
</label>
<label>
<input type="radio" name="button-group-ghost" />
Third
</label>
</div>
Sizes
modifier
Controls the padding and font size of a button. Composes with any btn variant.
Pattern
btn-size-{size}
Size
sm/md/lg/[length]
Preset Sizes
Use sm, md, or lg to apply one of the three built-in size presets.
Codehtml
<button class="btn-solid/primary btn-size-sm">Small</button>
<button class="btn-solid/primary btn-size-md">
Medium
</button>
<button class="btn-solid/primary btn-size-lg">Large</button>
Arbitrary Size
Pass any CSS length in square brackets to set a custom size.
Codehtml
<button class="btn-solid/primary btn-size-[0.625rem]">
0.625rem
</button>
<button class="btn-solid/primary btn-size-[1rem]">
1rem
</button>
<button class="btn-solid/primary btn-size-[1.5rem]">
1.5rem
</button>
Override via CSS Variable
Set --btn-size directly as a CSS variable utility to control size dynamically.
Codehtml
<button class="btn-solid/primary [--btn-size:0.75rem]">
0.75rem
</button>
<button class="btn-solid/primary [--btn-size:1rem]">
1rem
</button>
<button class="btn-solid/primary [--btn-size:1.25rem]">
1.25rem
</button>
Icon Buttons
modifier
Modifier utility to create square, fully-rounded icon buttons by equalizing inline and block padding. Composes with any btn variant and size.
Pattern
btn-icon
Codehtml
<button class="btn-icon btn-solid/primary">
<!-- icon svg -->
</button>
<button class="btn-icon btn-soft/primary">
<!-- icon svg -->
</button>
<button class="btn-icon btn-outline/primary">
<!-- icon svg -->
</button>
<button class="btn-icon btn-ghost/primary">
<!-- icon svg -->
</button>
API Reference
Classes
componentbtn-{variant}[/{palette}]
component
Applies button styling using the selected variant and tone palette.
Variant
solid/soft/outline/ghost
Paletteprimary/secondary/accent/surface/success/danger/disabled/default:inherited
componentbtn-group-{variant}[/{palette}]
component
Groups adjacent buttons into a visually connected row sharing a variant style and tone palette.
Variant
solid/soft/outline/ghost
Paletteprimary/secondary/accent/surface/success/danger/disabled/default:inherited
componentbtn-size-{size}
component
Controls the padding and font size of a button. Composes with any btn variant.
Size
sm/md/lg/[length]
componentbtn-icon
component
Modifier utility to create square, fully-rounded icon buttons by equalizing inline and block padding. Composes with any btn variant and size.
CSS Variables
css-variable--btn-px
css-variable
Inline (horizontal) padding. Override to decouple from --btn-size.
default:calc(var(--size) * 0.8)
css-variable--btn-py
css-variable
Block (vertical) padding. Override to decouple from --btn-size.
default:calc(var(--size) * 0.5)
css-variable--btn-gap
css-variable
Gap between content elements (e.g. icon + label).
default:calc(var(--size) * 0.2)