🍙 Onigiri

The Crunchyroll design system, rendered live from its own tokens and components. It cannot drift from what ships.

Docs draft

Link

When to use it

useNavigating: to a series page, an episode, settings, anywhere the URL changes.
avoidTriggering an action in the current view. Buttons act; links navigate — even when the design wants it to look quiet, that is a ghost Button, not a Link. button

Variants

inlineInline links sit in body copy and underline at rest — color alone cannot mark them against reading text, since the rest color IS the reading color. Standalone links (nav rows, See all) skip the resting underline, as the old system did.

States

restAt rest with no interaction.

hoverPointer is over the control.

pressedActively pressed by pointer or key.

focusedHolds keyboard focus and shows the focus ring.

disabledNot interactive; rendered with the lifted disabled tokens so it stays perceivable.

Guidelines

mustHover and pressed colors are the semantic link roles, never raw brand orange.The old Link set hard-coded #FF640A labels at 2.8:1 on light. The link-role tokens are contracted in the gate.
mustLinks inside body copy set inline, which underlines them at rest.The resting link color is the reading color; without the underline an inline link is invisible until hovered.
shouldLabel with the destination, not the mechanics: Episode 12, My Crunchylist — not Click here.Screen-reader link lists read labels out of context.

API

PropTypeDescription
inlinebooleanRenders the underline at rest, for links inside body copy.
...restAnchorHTMLAttributesForwarded to the native anchor; href is expected.

Design specifications

color-restcolor.text.link
color-hovercolor.text.link-hover
color-pressedcolor.text.link-active
color-disabledcolor.text.disabled
typographyinherited; Figma set shows type.body and type.body-sm

Accessibility

EnterFollows the link.

TabMoves focus; focus-visible draws the 2px text.primary ring and underlines.

color.text.link on color.bg.primaryContracted at ≥ 4.5:1 by the build gate.

color.text.link-hover on color.bg.primaryContracted at ≥ 4.5:1 by the build gate.

color.text.link-active on color.bg.primaryContracted at ≥ 4.5:1 by the build gate.

Renders a real anchor; navigation semantics come free. Never a div or button with a router push.