Jump to a component
AniCanonKit · Characters
CastCard
A cast member on the cast page: the portrait (an initial until one is approved), the role, the name, what they have, and what is happening to them now.
Live, from @anicanon/sakuga 2.0.0
Sakuga for iOS and Android is coming
iOS
Coming soon
CastCard for iOS is in the roughs. The tokens it will read are the ones on this page, the same on every platform.
Android
Coming soon
CastCard for Android is in the roughs. The tokens it will read are the ones on this page, the same on every platform.
- Use it for
- One cast member on the cast page: the portrait, role and name, what they have, what is happening to them now, and the next step at its foot.
- Not for
- Laying out a faction's castCastGrid
- A character in a creation or editing flowCharacterCard
- A character's face and name in a row or on a series pageCastAvatar
- A cast member a panel or a prompt holdsMentionChip
Guidelines
stateis a live fact about them (attentionwhen it waits on the creator,busywhile something is drawn).actionis the next step, across the card's foot:attention(review),draft(continue setup),busywith the loader and the time it has run.- One state and one action at most.
CastGridlays a faction's cast six across.
import { CastCard } from '@anicanon/sakuga/anicanonkit';
export default function CastCardExample() {
return (
<div
style={{
display: 'grid',
gridTemplateColumns: 'repeat(4,170px)',
gap: 12,
}}
>
{[
{
name: 'Kiko',
image: '/art/eba-cast-kiko.webp',
role: 'Leads the E.R.A.',
meta: '2 looks',
},
{
name: 'Rick',
initial: 'R',
action: { label: 'Face sheet ready, review', tone: 'attention' },
},
{
name: 'Sophia',
initial: 'S',
action: { label: 'Continue setup', tone: 'draft' },
},
{
name: 'Tattoo',
initial: 'T',
action: { label: 'Designing the look', tone: 'busy', time: '0:31' },
},
{
name: 'The Professor',
image: '/art/eba-cast-the-professor.webp',
role: 'Arthur Penhaligon',
state: { label: '1 look waiting on you', tone: 'attention' },
},
{ name: 'Felix', initial: 'F' },
]
.slice(0, 4)
.map((c, i) => (
<CastCard {...Object.assign({ key: i, href: '#' }, c)} />
))}
</div>
);
}PropsCastCardProps
namerequiredstringimagestringinitialstringrolestringmetastringhrefstringstate{ label: string; tone?: 'attention' | 'busy'; }action{ label: string; tone?: 'attention' | 'draft' | 'busy'; time?: string; }Each token reads a role, and the role lands on a value in each theme. Change the role and every component that reads it follows.
Space and shape
cast-card-action-loader-sizeicon-size-smcast-card-active-scalescale-press-lgcast-card-gapgap-mdcast-card-padding-topinset-lgcast-card-padding-xinset-mdcast-card-padding-bottominset-mdcast-card-radiusradius-lgcast-card-inset-ring-widthline-hairlinecast-card-focus-outline-offsetfocus-ring-offsetcast-card-state-gapgap-smcast-card-state-heighticon-size-mdcast-card-state-padding-xinset-smcast-card-state-radiusradius-fullcast-card-dot-sizestate-dot-sizecast-card-dot-radiusradius-fullcast-card-action-gapgap-mdcast-card-action-heightsize-control-smcast-card-action-margin-topgap-xscast-card-action-margin-xcast-card-action-margin-bottomcast-card-action-padding-xinset-mdcast-card-time-opacityopacity-legibleType
cast-card-font-familyfont-sanscast-card-role-fonttext-eyebrowcast-card-role-letter-spacingtracking-capscast-card-name-fonttext-labelcast-card-meta-fonttext-smallcast-card-state-fonttext-microcast-card-action-fonttext-microMotion
cast-card-press-durationmotion-fastcast-card-press-easingease-standardcast-card-active-durationmotion-instantcast-card-durationmotion-fastcast-card-easingease-standardChecked automatically with axe-core 4.11.4 against WCAG 2.2 A and AA, on the live preview above, in light and dark, on 26 October 2026.
- Result
- No issues found, in light or in dark.
- By design
- With
hrefit is a link that Tab reaches and Enter follows, named bynameand described by its role, meta, state and action; withouthrefall of these read as text. The portrait and the state dot are hidden, and a busy action's loader stays quiet inside the card. - Not tested
- The automated check doesn't test keyboard use, focus order or what a screen reader says. The lines above are the design system's own account of them.