🍙 Onigiri

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

Docs draft

Modal

When to use it

useFocused work that blocks the page: pickers, forms, confirmations.
avoidA single yes/no decision — that composition exists ready-made. confirm-dialog
avoidMulti-step flows. The old Stepped Modal was a wizard trapped in an overlay. page-navigation page navigation.

Anatomy

surfacebg.elevated + shadow.modal, square corners as the old system built it, 720 max (narrow: 480).

top blockThe 44px close target ALONE, top right — the old modals have no title bar.

content columnCENTERED: title (title-3), then the Content SLOT — a true SlotNode: drop anything in per instance (inputs, CTAs, graphics). Ships with .Modal Content / Message as default and / Form as a ready-made drop-in reproducing the old form modal. Buttons stack full-width on small screens (code's responsibility).

scrimbg.scrim (#23252B at 50%, the old .Scrim) — a token painted on ::backdrop, never a component.

Design specifications

surfacecolor.bg.elevated
shadowshadow.modal
radiusradius.none — the old modals were square; flagged for review
padding-contentspace.80 x / space.48 bottom at full width; space.24 narrow
close44px target, Icon/Close glyph in color.text.secondary
scrimcolor.bg.scrim

Accessibility

EscapeCloses (native dialog).

TabTrapped inside; background is inert (native dialog).

Built on the native dialog element with showModal — focus trap, Escape, and inert background come from the platform, never re-implemented.