Card
Sectioned content containers with variant-driven tone styling and an optional hover modifier. Mark child sections with data-slot attributes to inherit the card layout structure.
At a glance
Structured content
Add slot-marked children to apply the card section spacing automatically.
Hover-ready card
Compose card-hover with any variant when the whole surface should feel clickable.
Playground
Release summary
Switch variants, palettes, and hover behavior to see how the card surface and generated markup change together.
<article class="card-soft/primary">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Interactive
</span>
<h3 class="text-lg font-semibold">Release summary</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Switch variants, palettes, and hover behavior to see
how the card surface and generated markup change
together.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>Hover disabled</span>
<span>card-soft/primary</span>
</div>
</article>
Card
Applies the card container styling using the selected variant and tone palette. Child sections opt into the built-in layout using documented slots.
Solid
Solid card
Use the primary palette for high-emphasis summaries, selections, or key navigation points.
Supporting content
Secondary works well for related panels or secondary summaries in a denser layout.
Highlight a state
Accent cards are useful when you need a little more energy or a stronger semantic distinction.
Low-noise layout
Surface keeps the card present while preserving contrast for nested text and controls.
<article class="card-solid/primary">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Primary
</span>
<h3 class="text-lg font-semibold">Solid card</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Use the primary palette for high-emphasis summaries,
selections, or key navigation points.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-solid/primary</span>
<span>Preview</span>
</div>
</article>
<article class="card-solid/secondary">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Secondary
</span>
<h3 class="text-lg font-semibold">
Supporting content
</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Secondary works well for related panels or secondary
summaries in a denser layout.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-solid/secondary</span>
<span>Preview</span>
</div>
</article>
<article class="card-solid/accent">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Accent
</span>
<h3 class="text-lg font-semibold">Highlight a state</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Accent cards are useful when you need a little more
energy or a stronger semantic distinction.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-solid/accent</span>
<span>Preview</span>
</div>
</article>
<article class="card-solid/surface">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Surface
</span>
<h3 class="text-lg font-semibold">Low-noise layout</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Surface keeps the card present while preserving
contrast for nested text and controls.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-solid/surface</span>
<span>Preview</span>
</div>
</article>
Soft
Soft card
Use the primary palette for high-emphasis summaries, selections, or key navigation points.
Supporting content
Secondary works well for related panels or secondary summaries in a denser layout.
Highlight a state
Accent cards are useful when you need a little more energy or a stronger semantic distinction.
Low-noise layout
Surface keeps the card present while preserving contrast for nested text and controls.
<article class="card-soft/primary">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Primary
</span>
<h3 class="text-lg font-semibold">Soft card</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Use the primary palette for high-emphasis summaries,
selections, or key navigation points.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-soft/primary</span>
<span>Preview</span>
</div>
</article>
<article class="card-soft/secondary">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Secondary
</span>
<h3 class="text-lg font-semibold">
Supporting content
</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Secondary works well for related panels or secondary
summaries in a denser layout.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-soft/secondary</span>
<span>Preview</span>
</div>
</article>
<article class="card-soft/accent">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Accent
</span>
<h3 class="text-lg font-semibold">Highlight a state</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Accent cards are useful when you need a little more
energy or a stronger semantic distinction.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-soft/accent</span>
<span>Preview</span>
</div>
</article>
<article class="card-soft/surface">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Surface
</span>
<h3 class="text-lg font-semibold">Low-noise layout</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Surface keeps the card present while preserving
contrast for nested text and controls.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-soft/surface</span>
<span>Preview</span>
</div>
</article>
Outline
Outline card
Use the primary palette for high-emphasis summaries, selections, or key navigation points.
Supporting content
Secondary works well for related panels or secondary summaries in a denser layout.
Highlight a state
Accent cards are useful when you need a little more energy or a stronger semantic distinction.
Low-noise layout
Surface keeps the card present while preserving contrast for nested text and controls.
<article class="card-outline/primary">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Primary
</span>
<h3 class="text-lg font-semibold">Outline card</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Use the primary palette for high-emphasis summaries,
selections, or key navigation points.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-outline/primary</span>
<span>Preview</span>
</div>
</article>
<article class="card-outline/secondary">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Secondary
</span>
<h3 class="text-lg font-semibold">
Supporting content
</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Secondary works well for related panels or secondary
summaries in a denser layout.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-outline/secondary</span>
<span>Preview</span>
</div>
</article>
<article class="card-outline/accent">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Accent
</span>
<h3 class="text-lg font-semibold">Highlight a state</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Accent cards are useful when you need a little more
energy or a stronger semantic distinction.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-outline/accent</span>
<span>Preview</span>
</div>
</article>
<article class="card-outline/surface">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Surface
</span>
<h3 class="text-lg font-semibold">Low-noise layout</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Surface keeps the card present while preserving
contrast for nested text and controls.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-outline/surface</span>
<span>Preview</span>
</div>
</article>
Ghost
Ghost card
Use the primary palette for high-emphasis summaries, selections, or key navigation points.
Supporting content
Secondary works well for related panels or secondary summaries in a denser layout.
Highlight a state
Accent cards are useful when you need a little more energy or a stronger semantic distinction.
Low-noise layout
Surface keeps the card present while preserving contrast for nested text and controls.
<article class="card-ghost/primary">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Primary
</span>
<h3 class="text-lg font-semibold">Ghost card</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Use the primary palette for high-emphasis summaries,
selections, or key navigation points.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-ghost/primary</span>
<span>Preview</span>
</div>
</article>
<article class="card-ghost/secondary">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Secondary
</span>
<h3 class="text-lg font-semibold">
Supporting content
</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Secondary works well for related panels or secondary
summaries in a denser layout.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-ghost/secondary</span>
<span>Preview</span>
</div>
</article>
<article class="card-ghost/accent">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Accent
</span>
<h3 class="text-lg font-semibold">Highlight a state</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Accent cards are useful when you need a little more
energy or a stronger semantic distinction.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-ghost/accent</span>
<span>Preview</span>
</div>
</article>
<article class="card-ghost/surface">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Surface
</span>
<h3 class="text-lg font-semibold">Low-noise layout</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Surface keeps the card present while preserving
contrast for nested text and controls.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-ghost/surface</span>
<span>Preview</span>
</div>
</article>
Hover Modifier
Adds an interactive hover treatment by animating background, foreground, border color, and scale. Compose it with any card variant.
Composed with variants
Interactive summary
The hover utility animates background, foreground, border color, and scale together.
Lightweight affordance
Ghost cards stay quiet until pointer hover, which is useful for secondary navigation or preview rows.
<article class="card-hover card-soft/primary">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Default state
</span>
<h3 class="text-lg font-semibold">
Interactive summary
</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
The hover utility animates background, foreground,
border color, and scale together.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-hover card-soft/primary</span>
<span>Preview</span>
</div>
</article>
<article class="card-hover card-ghost/surface">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Subtle
</span>
<h3 class="text-lg font-semibold">
Lightweight affordance
</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Ghost cards stay quiet until pointer hover, which is
useful for secondary navigation or preview rows.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>card-hover card-ghost/surface</span>
<span>Preview</span>
</div>
</article>
Card Slots
Add data-slot="header", data-slot="content", and data-slot="footer" to child elements to apply the card section spacing and edge dividers.
Structured content
Slot-based sections
Mark child elements with data-slot attributes to opt into shared section padding and edge dividers.
<article class="card-soft/secondary">
<div data-slot="header" class="flex flex-col gap-1">
<span
class="text-xs tracking-[0.18em] uppercase opacity-70"
>
Layout
</span>
<h3 class="text-lg font-semibold">
Slot-based sections
</h3>
</div>
<div
data-slot="content"
class="space-y-3 text-sm opacity-90"
>
<p>
Mark child elements with data-slot attributes to opt
into shared section padding and edge dividers.
</p>
</div>
<div
data-slot="footer"
class="flex items-center justify-between gap-3 text-xs opacity-75"
>
<span>data-slot="header" | "content" | "footer"</span>
<span>Preview</span>
</div>
</article>
API Reference
Classes
Slots