Docs draft
MediaCard
Component storyFigma (MediaCard + .Thumbnail sets) βReact component βThumbnail block βDSDS entity β
When to use it
poster-card PosterCard.news-card NewsCard.Variants
layout Β· tile / row β tile = vertical thumbnail + text; row = horizontal list entry on bg/secondary with optional airtime (the old Release Episode Card).
state Β· rest / hover / focus / loading β Hover: tile washes the thumbnail, row lifts to bg/pressed. Focus: 2px text/primary ring. Loading: skeleton.
Anatomy
thumbnail β .Thumbnail block: Wide/Poster Γ Default/Progress/Watched/Coming Soon/Unavailable/Missing/Loading, with Duration chip on bg/scrim, accent progress bar, state glyphs on a scrim disc, and a Label slot (compose Tag).
text stack β Parent title (caption, secondary) β Title (label-lg, primary) β Meta (body-sm, secondary).
airtime β Row layout only. The old scooter/base teal died with Link's Scooter variant; airtime rides text/positive.
trailing β Slot for kebab / heart / trash β the old .Right Decoration set as composition.
Design specifications
| tile-width | 320px, thumbnail 16:9 |
| row | space.8 padding on color.bg.secondary, thumbnail 128px, gap space.12 |
| title | type.label-lg in color.text.primary |
| meta | type.body-sm in color.text.secondary |
| duration-chip | type.body-sm on color.bg.scrim, radius.xs, inset space.8 |
| progress | 4px color.accent.base on color.ink.500 track |
| focus-ring | 2px color.text.primary, offset 2 |
Accessibility
Card renders as a link when href is given. Duration/progress data is exposed via a progressbar role on the thumbnail, and the progressbar MUST carry an accessible name (β<title> β watch progressβ, falling back to βWatch progressβ) β a bare role with only aria-valuenow fails axe aria-progressbar-name (caught 2026-09-01 by the Storybook a11y gate). Watched/Unavailable overlays keep their text chips β never icon-only. The duration chip sits on bg/scrim over artwork; contrast is content-dependent (as in the old system) β code may add a stronger backdrop.