Card

Clickable surface for content listings

stable v1.0.0

Preview

12 May 2026

Horizontal: 120×120 image on the left

Vertical: image on top

Text-only

Sample subtitle

No image. For decision contexts, like Signal.

The real canon component. Horizontal and vertical with href (the whole surface is the link, real hover); text-only without href renders <article>: both forms belong to the component.

Variants

VariantLayoutUse
HorizontalImage left (120×120), text rightArticle listings
VerticalImage on top, text belowCase studies, portfolio
Text-onlyNo image. Title, subtitle, descriptionDecision contexts (Signal)

Props

PropTypeNote
variant'horizontal' | 'vertical' | 'text-only'Required
hrefstringOptional: without href it renders <article> instead of <a>
titlestringRequired
image, imageAltstringHorizontal / vertical
datestringCaption above the title (horizontal)
subtitle, description, footerstringText-only

Tokens

PropertyValue
Card-titleAleo 22px / 600 (--text-card-title, fixed, independent of the scale)
Border1px solid --color-border at 30%
Border-radiussm (4px)
HoverBorder darkens, subtle background tint. 0.2s ease.
ShadowNone. In any state.

Constraints

  • No CTA text. The whole surface is the link.
  • Card-title fixed at 22px. It doesn't follow the Major Third scale.
  • Horizontal becomes vertical on mobile.

Decisions

DecisionWhy
No "Read more"The whole card is the link. The text would be noise.
Fixed 22pxA UI element, not a content heading
120×120 thumbnailsClean proportion, consistent across listings