Theme
Sound
Jump to a component
Core · Foundations
Text
Text sets words in Sakuga's type scale: a variant names the style, tone changes only its colour.
Live, from @anicanon/sakuga 2.0.0
Sakuga for iOS and Android is coming
iOS
Coming soon
Text 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
Text 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
- Words on a board or in a component, set in Sakuga's type scale: titles, body, the caption line that explains, a field's name, an eyebrow.
- Not for
- A subtitle line over videoCaption
- An action inside a line of textTextLink
- A character or a place named inside proseMention
- A proposed change in the words, the old struck and the new underlinedRevision
- The heading that opens a shelfSectionHeader
Guidelines
title-1totitle-4(Funnel Display, 30 to 17 px),body(14/20),label(14/20 semibold),caption(13/18, the quiet line that explains),small(12/16),micro(12/16 bold, a field's name) andeyebrow(10.5/14 capitals, what kind of thing it is).tone:primary,secondary,muted,accent, andon-mediaoron-media-mutedover a picture. Bold words inside body, caption and small read in the strong colour.- With no variant it only sets a tone, inside other text.
numericlines figures up (timecodes, seconds). markhighlights the words a check flagged inside a sentence (the part of a prompt the story contradicts), or the words a person selected. Writing read by Maki takes a kind:mark="stated"(said in the text: a quiet fill),mark="inferred"(read between the lines: a dotted underline); a conflict keeps the plainmark.aspicks the element; titles default to headings, body and caption to paragraphs, the rest to spans.- Never set type by hand on a board or in a component: if a size is missing from the scale, it is missing from Sakuga.
display(64 px) is a name that is the whole page, as a character's;lead(18/28) is the paragraph that introduces it. One of each per page at most.
import { Text } from '@anicanon/sakuga/ui';
export default function TextExample() {
return (
<>
<Text variant="eyebrow">Script</Text>
<Text variant="title-2">#5 · Red Line · Sé station</Text>
<Text variant="body">
Kiko steps out of the smoke and stops between them.
</Text>
<Text variant="label">Take 3</Text>
<Text variant="caption">
{'Arrived 4 min ago · '}
<b>to review</b>
</Text>
<Text variant="micro">Notes</Text>
<Text variant="small" numeric>
0+00 – 5+00 · 120 frames
</Text>
<Text variant="caption" tone="accent">
Waits for you
</Text>
</>
);
}PropsTextProps
variantTextVariantdisplay: a name that is the page (64 px); lead: the paragraph that introduces it (18/28).
tone'primary' | 'secondary' | 'muted' | 'accent' | 'on-media' | 'on-media-muted'numericbooleanTabular figures.
markboolean | 'stated' | 'inferred'Highlights the words: what a check flagged or a selection (true); what writing states or implies ('stated', 'inferred').
asElementTypeidstringchildrenReactNodeclassNamestringTypes
type TextVariant = 'display' | 'title-1' | 'title-2' | 'title-3' | 'title-4' | 'lead' | 'body' | 'label' | 'caption' | 'small' | 'micro' | 'eyebrow';
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.
Colour
txt-primaryText: titles, body and labels.text-primaryneutral-925#0b0a10text-primaryneutral-0#fffffftxt-secondaryText: captions.text-secondaryneutral-800#2e2d36text-secondaryneutral-200#dcdcdetxt-mutedText: small lines, micro labels and eyebrows.text-mutedneutral-600#5c5b67text-mutedneutral-400#a3a3a7txt-strongText: bold words inside body, captions and small lines.text-primaryneutral-925#0b0a10text-primaryneutral-0#fffffftxt-accentText: the accent tone, for a number or a mention.text-accentcamellia-700#b42354text-accentcamellia-400#f4779ftxt-on-mediaText: over a picture or the dark stage.text-on-medianeutral-0#fffffftext-on-medianeutral-0#fffffftxt-on-media-mutedText: a quiet line over a picture or the dark stage.text-on-media-mutedneutral-400#a3a3a7text-on-media-mutedneutral-400#a3a3a7Space and shape
txt-mark-padding-xinset-2xs2px
txt-mark-radiusradius-xs4px
txt-mark-inferred-underline-offsetunderline-offset3px
Type
txt-title-1-fonttext-title-1700 30px/36px "Funnel Display", "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
txt-title-1-letter-spacingits own value
calc(-1 * -.01em)
txt-title-2-fonttext-title-2700 24px/30px "Funnel Display", "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
txt-title-3-fonttext-title-3700 20px/26px "Funnel Display", "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
txt-title-4-fonttext-title-4700 17px/22px "Funnel Display", "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
txt-body-fonttext-body400 14px/20px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
txt-label-fonttext-label600 14px/20px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
txt-caption-fonttext-caption500 13px/18px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
txt-small-fonttext-small500 12px/16px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
txt-micro-fonttext-micro700 12px/16px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
txt-eyebrow-fonttext-eyebrow700 11px/14px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
txt-eyebrow-letter-spacingtracking-caps.06em
txt-body-b-font-weightweight-strong600
txt-display-fonttext-display700 64px/64px "Funnel Display", "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
txt-display-letter-spacingits own value
calc(-1 * -.01em)
txt-lead-fonttext-lead400 18px/28px "Funnel Sans", system-ui, -apple-system, "Segoe UI", sans-serif
Checked 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
- Not focusable; read as text, with display and title variants rendered as headings (h1 to h3), lead, body and caption as paragraphs, and
markas highlighted text, unlessassets the element.tonechanges only the colour. - 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.