Rost Reference
Every value in my design system, read straight from Figma, one variant at a time. For each
component you'll see what never changes, then what each variant changes. I keep the token name next to every
value on purpose: six tokens here all come out as #3a3a3a,
and the colour alone can't tell you which one is right.
Badge
A small outlined label for status. The colour sits in the outline and the dot, never in the text.
- Pending: Figma changed after the August read. The set now has a size property, and the four nodes this contract points at (139:396, 139:433, 139:439, 139:445) are now the small, dot-only badges at 24x24. The labelled badge described here is probably a bigger size, at node ids I haven't read yet. Read the set again before building it.
When to use
- Marking the status of something in a list, a card or a table row: Paid, Overdue, Draft.
When not to use
- Telling people something about the whole page. That's InlineBanner.
- Describing what something is about rather than its status. That's Tag.
- Anything clickable. Badge doesn't do hover or focus, Chip does.
Behaviour
status only changes the outline (non-interactive/background/<status>/light) and the little dot. The text stays non-interactive/foreground/tertiary whatever the status, and that's on purpose: I keep badges quiet. There's no background fill either. My first Badge in akount.ing got exactly these three things wrong.
Accessibility
- Element: a
<span>. Nothing to click. - Colour: the outline alone isn't enough. The text has to say the status ("Overdue", not "!").
- Dot:
aria-hidden="true".
Content
One or two words. Sentence case, no punctuation.
Never changes 37
| Part | Property | Value | Token |
|---|---|---|---|
| root | align-items | center | layout |
| root | display | flex | layout |
| root | position | relative | layout |
| root | gap | 2px | spacing/gap/3xsmall |
| root | height | 24px | spacing/size/small |
| root | padding-bottom | 2px | spacing/gap/3xsmall |
| root | padding-top | 0px | spacing/gap/none |
| root | padding-left | 8px | spacing/gap/small |
| root | padding-right | 8px | spacing/gap/small |
| root | border-radius | 10000px | spacing/radius/full |
| icon | align-items | center | layout |
| icon | display | flex | layout |
| icon | flex-shrink | 0 | layout |
| icon | position | relative | layout |
| icon | padding-top | 2px | spacing/gap/3xsmall |
| icons-dot | overflow | clip | layout |
| icons-dot | flex-shrink | 0 | layout |
| icons-dot | position | relative | layout |
| icons-dot | width | 16px | suggest spacing/size/2xsmall |
| icons-dot | height | 16px | suggest spacing/size/2xsmall |
| union | position | absolute | layout |
| union | inset | 37.5% | layout |
| label | flex-shrink | 0 | layout |
| label | white-space | nowrap | layout |
| label | text-align | center | layout |
| label | position | relative | layout |
| label | font-family | 'General Sans Variable' | font-family/base |
| label | font-weight | 500 | typography/label/font-weight/medium |
| label | line-height | 14px | typography/label/line-height |
| label | color | #999 | non-interactive/foreground/tertiary |
| label | font-size | 12px | typography/label/font-size |
| label | letter-spacing | 0px | typography/label/letter-spacing |
| outline | border-sides | all | layout |
| outline | position | absolute | layout |
| outline | inset | 0 | layout |
| outline | opacity | 1 | opacity/solid |
| outline | border-radius | 10000px | spacing/radius/full |
Changes by variant 7
outline.border-color4
| status=Default | #3a3a3a | non-interactive/foreground/quadruple |
| status=Negative | #48050c | non-interactive/background/negative/light |
| status=Positive | #004c19 | non-interactive/background/positive/light |
| status=Warning | #492604 | non-interactive/background/warning/light |
root.justify-content3
| status=Negative | center | layout |
| status=Positive | center | layout |
| status=Warning | center | layout |
Button
A 48px button with just a label, in four levels of emphasis.
When to use
- Doing something: save, send, continue, open.
Primaryfor the one thing a screen is really about. One per screen, no more.Secondaryfor the options next to it,Tertiarywhen little is at stake,Borderlessin busy places where an outline would just be noise.
When not to use
- Actions that need an icon to make sense: use PillButton. Icon only: IconButton.
- Going somewhere. That's a link. A button that navigates breaks open-in-new-tab and the back button.
- Picking between options. That's Toggle or Chip.
Behaviour
type sets how loud it is. state is never something you pass in code: hover, pressed and focus come from :hover, :active and :focus-visible. Disabled is the only one you set yourself. The background fades to opacity/gentle and the label stays readable.
Accessibility
- Element:
<button type="button">, ortype="submit"inside a form. - Name: the label people see. Don't swap it for an
aria-labelthat says something else. - Keyboard: Enter and Space.
- Focus: the
focus-ringpart, 2px, only on:focus-visible. - Disabled: I'd rather use
aria-disabled="true"with a short reason nearby thandisabled.disableddrops the button out of the tab order and nobody can find out why it doesn't work.
Content
A verb, sentence case, two or three words. "Save changes", not "OK" or "SUBMIT". Say what will happen.
Never changes 17
| Part | Property | Value | Token |
|---|---|---|---|
| root | justify-content | center | layout |
| root | align-items | center | layout |
| root | display | flex | layout |
| root | position | relative | layout |
| root | gap | 8px | spacing/gap/small |
| root | height | 48px | spacing/size/medium-large |
| root | border-radius | 10000px | spacing/radius/full |
| label | flex-shrink | 0 | layout |
| label | white-space | nowrap | layout |
| label | text-align | center | layout |
| label | position | relative | layout |
| label | font-family | 'General Sans Variable' | font-family/base |
| label | font-weight | 500 | typography/body/font-weight/medium |
| label | line-height | 22px | typography/body/line-height |
| label | color | #060805 | actions/primary/default/label |
| label | font-size | 16px | typography/body/font-size |
| label | letter-spacing | 0px | typography/body/letter-spacing |
Changes by variant 355
background.background9
| type=Secondary, state=Default | #3a3a3a | actions/secondary/regular/default/background |
| type=Secondary, state=Hover | #747573 | actions/secondary/regular/hover/background |
| type=Tertiary, state=Hover | #060805 | actions/tertiary/hover/background |
| type=Borderless, state=Hover | #060805 | actions/tertiary/hover/background |
| type=Secondary, state=Pressed | #999 | actions/secondary/regular/pressed/background |
| type=Tertiary, state=Pressed | #454545 | actions/tertiary/pressed/background |
| type=Borderless, state=Pressed | #454545 | actions/tertiary/pressed/background |
| type=Secondary, state=Disabled | #3a3a3a | actions/secondary/regular/disabled/background |
| type=Secondary, state=Focus | #3a3a3a | actions/secondary/regular/focus/background |
background.border-color5
| type=Secondary, state=Default | #ededed | actions/secondary/regular/default/outline |
| type=Secondary, state=Hover | #ededed | actions/secondary/regular/hover/outline |
| type=Secondary, state=Pressed | #ededed | actions/secondary/regular/pressed/outline |
| type=Secondary, state=Disabled | #ededed | actions/secondary/regular/disabled/outline |
| type=Secondary, state=Focus | #ededed | actions/secondary/regular/focus/outline |
background.border-radius7
| type=Secondary, state=Default | 10000px | spacing/radius/full |
| type=Secondary, state=Hover | 10000px | spacing/radius/full |
| type=Tertiary, state=Hover | 10000px | spacing/radius/full |
| type=Secondary, state=Pressed | 10000px | spacing/radius/full |
| type=Tertiary, state=Pressed | 10000px | spacing/radius/full |
| type=Secondary, state=Disabled | 10000px | spacing/radius/full |
| type=Secondary, state=Focus | 10000px | spacing/radius/full |
background.border-sides5
| type=Secondary, state=Default | left top | layout |
| type=Secondary, state=Hover | left top | layout |
| type=Secondary, state=Pressed | left top | layout |
| type=Secondary, state=Disabled | left top | layout |
| type=Secondary, state=Focus | left top | layout |
background.inset9
| type=Secondary, state=Default | 0 | layout |
| type=Secondary, state=Hover | 0 | layout |
| type=Tertiary, state=Hover | 0 | layout |
| type=Borderless, state=Hover | 0 | layout |
| type=Secondary, state=Pressed | 0 | layout |
| type=Tertiary, state=Pressed | 0 | layout |
| type=Borderless, state=Pressed | 0 | layout |
| type=Secondary, state=Disabled | 0 | layout |
| type=Secondary, state=Focus | 0 | layout |
background.opacity9
| type=Secondary, state=Default | 0.24 | opacity/gentle |
| type=Secondary, state=Hover | 0.32 | opacity/mild |
| type=Tertiary, state=Hover | 0.32 | opacity/mild |
| type=Borderless, state=Hover | 0.32 | opacity/mild |
| type=Secondary, state=Pressed | 0.32 | opacity/mild |
| type=Tertiary, state=Pressed | 0.32 | opacity/mild |
| type=Borderless, state=Pressed | 0.32 | opacity/mild |
| type=Secondary, state=Disabled | 0.32 | opacity/mild |
| type=Secondary, state=Focus | 0.24 | opacity/gentle |
background.position9
| type=Secondary, state=Default | absolute | layout |
| type=Secondary, state=Hover | absolute | layout |
| type=Tertiary, state=Hover | absolute | layout |
| type=Borderless, state=Hover | absolute | layout |
| type=Secondary, state=Pressed | absolute | layout |
| type=Tertiary, state=Pressed | absolute | layout |
| type=Borderless, state=Pressed | absolute | layout |
| type=Secondary, state=Disabled | absolute | layout |
| type=Secondary, state=Focus | absolute | layout |
focus-ring.border-color4
| type=Primary, state=Focus | #b6ffda | actions/primary/focus/focus-ring |
| type=Secondary, state=Focus | #999 | actions/secondary/regular/focus/focus-ring |
| type=Tertiary, state=Focus | #999 | actions/secondary/regular/focus/focus-ring |
| type=Borderless, state=Focus | #999 | actions/secondary/regular/focus/focus-ring |
focus-ring.border-radius3
| type=Primary, state=Focus | 10000px | spacing/radius/full |
| type=Secondary, state=Focus | 10000px | spacing/radius/full |
| type=Tertiary, state=Focus | 10000px | spacing/radius/full |
focus-ring.border-sides4
| type=Primary, state=Focus | all | layout |
| type=Secondary, state=Focus | all | layout |
| type=Tertiary, state=Focus | all | layout |
| type=Borderless, state=Focus | all | layout |
focus-ring.border-width4
| type=Primary, state=Focus | 2px | spacing/outline/medium |
| type=Secondary, state=Focus | 2px | spacing/outline/medium |
| type=Tertiary, state=Focus | 2px | spacing/outline/medium |
| type=Borderless, state=Focus | 2px | spacing/outline/medium |
focus-ring.inset4
| type=Primary, state=Focus | -5px -4px -4px -5px | layout |
| type=Secondary, state=Focus | -4px | layout |
| type=Tertiary, state=Focus | -4px | layout |
| type=Borderless, state=Focus | -4px | layout |
focus-ring.position4
| type=Primary, state=Focus | absolute | layout |
| type=Secondary, state=Focus | absolute | layout |
| type=Tertiary, state=Focus | absolute | layout |
| type=Borderless, state=Focus | absolute | layout |
root.background5
| type=Primary, state=Default | #00d669 | actions/primary/default/background |
| type=Primary, state=Hover | #00b450 | actions/primary/hover/background |
| type=Primary, state=Pressed | #00913a | actions/primary/pressed/background |
| type=Primary, state=Disabled | #00d669 | actions/primary/disabled/background |
| type=Primary, state=Focus | #00d669 | actions/primary/focus/background |
root.border-color5
| type=Primary, state=Default | rgba(237,237,237,0.64) | actions/primary/default/outline |
| type=Primary, state=Hover | rgba(237,237,237,0.64) | actions/primary/hover/outline |
| type=Primary, state=Pressed | rgba(237,237,237,0.64) | actions/primary/pressed/outline |
| type=Primary, state=Disabled | rgba(237,237,237,0.64) | actions/primary/disabled/outline |
| type=Primary, state=Focus | rgba(237,237,237,0.64) | actions/primary/focus/outline |
root.border-sides5
| type=Primary, state=Default | left top | layout |
| type=Primary, state=Hover | left top | layout |
| type=Primary, state=Pressed | left top | layout |
| type=Primary, state=Disabled | left top | layout |
| type=Primary, state=Focus | left top | layout |
root.border-top-width5
| type=Primary, state=Default | 1px | spacing/outline/small |
| type=Primary, state=Hover | 1px | spacing/outline/small |
| type=Primary, state=Pressed | 1px | spacing/outline/small |
| type=Primary, state=Disabled | 1px | spacing/outline/small |
| type=Primary, state=Focus | 1px | spacing/outline/small |
root.opacity4
| type=Primary, state=Disabled | 0.24 | opacity/gentle |
| type=Secondary, state=Disabled | 0.24 | opacity/gentle |
| type=Tertiary, state=Disabled | 0.24 | opacity/gentle |
| type=Borderless, state=Disabled | 0.24 | opacity/gentle |
root.padding5
| type=Borderless, state=Default | 0px | spacing/gap/none |
| type=Borderless, state=Hover | 0px | spacing/gap/none |
| type=Borderless, state=Pressed | 0px | spacing/gap/none |
| type=Borderless, state=Disabled | 0px | spacing/gap/none |
| type=Borderless, state=Focus | 0px | spacing/gap/none |
root.padding-bottom15
| type=Primary, state=Default | 0px | spacing/gap/none |
| type=Secondary, state=Default | 0px | spacing/gap/none |
| type=Tertiary, state=Default | 0px | spacing/gap/none |
| type=Primary, state=Hover | 0px | spacing/gap/none |
| type=Secondary, state=Hover | 0px | spacing/gap/none |
| type=Tertiary, state=Hover | 0px | spacing/gap/none |
| type=Primary, state=Pressed | 0px | spacing/gap/none |
| type=Secondary, state=Pressed | 0px | spacing/gap/none |
| type=Tertiary, state=Pressed | 0px | spacing/gap/none |
| type=Primary, state=Disabled | 0px | spacing/gap/none |
| type=Secondary, state=Disabled | 0px | spacing/gap/none |
| type=Tertiary, state=Disabled | 0px | spacing/gap/none |
| type=Primary, state=Focus | 0px | spacing/gap/none |
| type=Secondary, state=Focus | 0px | spacing/gap/none |
| type=Tertiary, state=Focus | 0px | spacing/gap/none |
root.padding-left15
| type=Primary, state=Default | 20px | spacing/gap/medium-large |
| type=Secondary, state=Default | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Default | 20px | spacing/gap/medium-large |
| type=Primary, state=Hover | 20px | spacing/gap/medium-large |
| type=Secondary, state=Hover | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Hover | 20px | spacing/gap/medium-large |
| type=Primary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Secondary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Primary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Secondary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Primary, state=Focus | 20px | spacing/gap/medium-large |
| type=Secondary, state=Focus | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Focus | 20px | spacing/gap/medium-large |
root.padding-right15
| type=Primary, state=Default | 20px | spacing/gap/medium-large |
| type=Secondary, state=Default | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Default | 20px | spacing/gap/medium-large |
| type=Primary, state=Hover | 20px | spacing/gap/medium-large |
| type=Secondary, state=Hover | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Hover | 20px | spacing/gap/medium-large |
| type=Primary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Secondary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Primary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Secondary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Primary, state=Focus | 20px | spacing/gap/medium-large |
| type=Secondary, state=Focus | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Focus | 20px | spacing/gap/medium-large |
root.padding-top15
| type=Primary, state=Default | 0px | spacing/gap/none |
| type=Secondary, state=Default | 0px | spacing/gap/none |
| type=Tertiary, state=Default | 0px | spacing/gap/none |
| type=Primary, state=Hover | 0px | spacing/gap/none |
| type=Secondary, state=Hover | 0px | spacing/gap/none |
| type=Tertiary, state=Hover | 0px | spacing/gap/none |
| type=Primary, state=Pressed | 0px | spacing/gap/none |
| type=Secondary, state=Pressed | 0px | spacing/gap/none |
| type=Tertiary, state=Pressed | 0px | spacing/gap/none |
| type=Primary, state=Disabled | 0px | spacing/gap/none |
| type=Secondary, state=Disabled | 0px | spacing/gap/none |
| type=Tertiary, state=Disabled | 0px | spacing/gap/none |
| type=Primary, state=Focus | 0px | spacing/gap/none |
| type=Secondary, state=Focus | 0px | spacing/gap/none |
| type=Tertiary, state=Focus | 0px | spacing/gap/none |
text.color19
| type=Secondary, state=Default | #d3d9d5 | actions/secondary/regular/default/label |
| type=Tertiary, state=Default | #d3d9d5 | actions/tertiary/default/label |
| type=Borderless, state=Default | #d3d9d5 | actions/tertiary/default/label |
| type=Primary, state=Hover | #060805 | actions/primary/hover/label |
| type=Secondary, state=Hover | #ededed | actions/secondary/regular/hover/label |
| type=Tertiary, state=Hover | #ededed | actions/tertiary/hover/label |
| type=Borderless, state=Hover | #ededed | actions/tertiary/hover/label |
| type=Primary, state=Pressed | #060805 | actions/primary/pressed/label |
| type=Secondary, state=Pressed | #d3d9d5 | actions/secondary/regular/pressed/label |
| type=Tertiary, state=Pressed | #d3d9d5 | actions/tertiary/pressed/label |
| type=Borderless, state=Pressed | #d3d9d5 | actions/tertiary/pressed/label |
| type=Primary, state=Disabled | #060805 | actions/primary/disabled/label |
| type=Secondary, state=Disabled | #d3d9d5 | actions/secondary/regular/disabled/label |
| type=Tertiary, state=Disabled | #d3d9d5 | actions/tertiary/disabled/label |
| type=Borderless, state=Disabled | #d3d9d5 | actions/tertiary/disabled/label |
| type=Primary, state=Focus | #060805 | actions/primary/focus/label |
| type=Secondary, state=Focus | #d3d9d5 | actions/secondary/regular/focus/label |
| type=Tertiary, state=Focus | #d3d9d5 | actions/tertiary/focus/label |
| type=Borderless, state=Focus | #d3d9d5 | actions/tertiary/focus/label |
text.flex-shrink19
| type=Secondary, state=Default | 0 | layout |
| type=Tertiary, state=Default | 0 | layout |
| type=Borderless, state=Default | 0 | layout |
| type=Primary, state=Hover | 0 | layout |
| type=Secondary, state=Hover | 0 | layout |
| type=Tertiary, state=Hover | 0 | layout |
| type=Borderless, state=Hover | 0 | layout |
| type=Primary, state=Pressed | 0 | layout |
| type=Secondary, state=Pressed | 0 | layout |
| type=Tertiary, state=Pressed | 0 | layout |
| type=Borderless, state=Pressed | 0 | layout |
| type=Primary, state=Disabled | 0 | layout |
| type=Secondary, state=Disabled | 0 | layout |
| type=Tertiary, state=Disabled | 0 | layout |
| type=Borderless, state=Disabled | 0 | layout |
| type=Primary, state=Focus | 0 | layout |
| type=Secondary, state=Focus | 0 | layout |
| type=Tertiary, state=Focus | 0 | layout |
| type=Borderless, state=Focus | 0 | layout |
text.font-family19
| type=Secondary, state=Default | 'General Sans Variable' | font-family/base |
| type=Tertiary, state=Default | 'General Sans Variable' | font-family/base |
| type=Borderless, state=Default | 'General Sans Variable' | font-family/base |
| type=Primary, state=Hover | 'General Sans Variable' | font-family/base |
| type=Secondary, state=Hover | 'General Sans Variable' | font-family/base |
| type=Tertiary, state=Hover | 'General Sans Variable' | font-family/base |
| type=Borderless, state=Hover | 'General Sans Variable' | font-family/base |
| type=Primary, state=Pressed | 'General Sans Variable' | font-family/base |
| type=Secondary, state=Pressed | 'General Sans Variable' | font-family/base |
| type=Tertiary, state=Pressed | 'General Sans Variable' | font-family/base |
| type=Borderless, state=Pressed | 'General Sans Variable' | font-family/base |
| type=Primary, state=Disabled | 'General Sans Variable' | font-family/base |
| type=Secondary, state=Disabled | 'General Sans Variable' | font-family/base |
| type=Tertiary, state=Disabled | 'General Sans Variable' | font-family/base |
| type=Borderless, state=Disabled | 'General Sans Variable' | font-family/base |
| type=Primary, state=Focus | 'General Sans Variable' | font-family/base |
| type=Secondary, state=Focus | 'General Sans Variable' | font-family/base |
| type=Tertiary, state=Focus | 'General Sans Variable' | font-family/base |
| type=Borderless, state=Focus | 'General Sans Variable' | font-family/base |
text.font-size19
| type=Secondary, state=Default | 16px | typography/body/font-size |
| type=Tertiary, state=Default | 16px | typography/body/font-size |
| type=Borderless, state=Default | 16px | typography/body/font-size |
| type=Primary, state=Hover | 16px | typography/body/font-size |
| type=Secondary, state=Hover | 16px | typography/body/font-size |
| type=Tertiary, state=Hover | 16px | typography/body/font-size |
| type=Borderless, state=Hover | 16px | typography/body/font-size |
| type=Primary, state=Pressed | 16px | typography/body/font-size |
| type=Secondary, state=Pressed | 16px | typography/body/font-size |
| type=Tertiary, state=Pressed | 16px | typography/body/font-size |
| type=Borderless, state=Pressed | 16px | typography/body/font-size |
| type=Primary, state=Disabled | 16px | typography/body/font-size |
| type=Secondary, state=Disabled | 16px | typography/body/font-size |
| type=Tertiary, state=Disabled | 16px | typography/body/font-size |
| type=Borderless, state=Disabled | 16px | typography/body/font-size |
| type=Primary, state=Focus | 16px | typography/body/font-size |
| type=Secondary, state=Focus | 16px | typography/body/font-size |
| type=Tertiary, state=Focus | 16px | typography/body/font-size |
| type=Borderless, state=Focus | 16px | typography/body/font-size |
text.font-weight19
| type=Secondary, state=Default | 500 | typography/body/font-weight/medium |
| type=Tertiary, state=Default | 500 | typography/body/font-weight/medium |
| type=Borderless, state=Default | 500 | typography/body/font-weight/medium |
| type=Primary, state=Hover | 500 | typography/body/font-weight/medium |
| type=Secondary, state=Hover | 500 | typography/body/font-weight/medium |
| type=Tertiary, state=Hover | 500 | typography/body/font-weight/medium |
| type=Borderless, state=Hover | 500 | typography/body/font-weight/medium |
| type=Primary, state=Pressed | 500 | typography/body/font-weight/medium |
| type=Secondary, state=Pressed | 500 | typography/body/font-weight/medium |
| type=Tertiary, state=Pressed | 500 | typography/body/font-weight/medium |
| type=Borderless, state=Pressed | 500 | typography/body/font-weight/medium |
| type=Primary, state=Disabled | 500 | typography/body/font-weight/medium |
| type=Secondary, state=Disabled | 500 | typography/body/font-weight/medium |
| type=Tertiary, state=Disabled | 500 | typography/body/font-weight/medium |
| type=Borderless, state=Disabled | 500 | typography/body/font-weight/medium |
| type=Primary, state=Focus | 500 | typography/body/font-weight/medium |
| type=Secondary, state=Focus | 500 | typography/body/font-weight/medium |
| type=Tertiary, state=Focus | 500 | typography/body/font-weight/medium |
| type=Borderless, state=Focus | 500 | typography/body/font-weight/medium |
text.letter-spacing19
| type=Secondary, state=Default | 0px | typography/body/letter-spacing |
| type=Tertiary, state=Default | 0px | typography/body/letter-spacing |
| type=Borderless, state=Default | 0px | typography/body/letter-spacing |
| type=Primary, state=Hover | 0px | typography/body/letter-spacing |
| type=Secondary, state=Hover | 0px | typography/body/letter-spacing |
| type=Tertiary, state=Hover | 0px | typography/body/letter-spacing |
| type=Borderless, state=Hover | 0px | typography/body/letter-spacing |
| type=Primary, state=Pressed | 0px | typography/body/letter-spacing |
| type=Secondary, state=Pressed | 0px | typography/body/letter-spacing |
| type=Tertiary, state=Pressed | 0px | typography/body/letter-spacing |
| type=Borderless, state=Pressed | 0px | typography/body/letter-spacing |
| type=Primary, state=Disabled | 0px | typography/body/letter-spacing |
| type=Secondary, state=Disabled | 0px | typography/body/letter-spacing |
| type=Tertiary, state=Disabled | 0px | typography/body/letter-spacing |
| type=Borderless, state=Disabled | 0px | typography/body/letter-spacing |
| type=Primary, state=Focus | 0px | typography/body/letter-spacing |
| type=Secondary, state=Focus | 0px | typography/body/letter-spacing |
| type=Tertiary, state=Focus | 0px | typography/body/letter-spacing |
| type=Borderless, state=Focus | 0px | typography/body/letter-spacing |
text.line-height19
| type=Secondary, state=Default | 22px | typography/body/line-height |
| type=Tertiary, state=Default | 22px | typography/body/line-height |
| type=Borderless, state=Default | 22px | typography/body/line-height |
| type=Primary, state=Hover | 22px | typography/body/line-height |
| type=Secondary, state=Hover | 22px | typography/body/line-height |
| type=Tertiary, state=Hover | 22px | typography/body/line-height |
| type=Borderless, state=Hover | 22px | typography/body/line-height |
| type=Primary, state=Pressed | 22px | typography/body/line-height |
| type=Secondary, state=Pressed | 22px | typography/body/line-height |
| type=Tertiary, state=Pressed | 22px | typography/body/line-height |
| type=Borderless, state=Pressed | 22px | typography/body/line-height |
| type=Primary, state=Disabled | 22px | typography/body/line-height |
| type=Secondary, state=Disabled | 22px | typography/body/line-height |
| type=Tertiary, state=Disabled | 22px | typography/body/line-height |
| type=Borderless, state=Disabled | 22px | typography/body/line-height |
| type=Primary, state=Focus | 22px | typography/body/line-height |
| type=Secondary, state=Focus | 22px | typography/body/line-height |
| type=Tertiary, state=Focus | 22px | typography/body/line-height |
| type=Borderless, state=Focus | 22px | typography/body/line-height |
text.position19
| type=Secondary, state=Default | relative | layout |
| type=Tertiary, state=Default | relative | layout |
| type=Borderless, state=Default | relative | layout |
| type=Primary, state=Hover | relative | layout |
| type=Secondary, state=Hover | relative | layout |
| type=Tertiary, state=Hover | relative | layout |
| type=Borderless, state=Hover | relative | layout |
| type=Primary, state=Pressed | relative | layout |
| type=Secondary, state=Pressed | relative | layout |
| type=Tertiary, state=Pressed | relative | layout |
| type=Borderless, state=Pressed | relative | layout |
| type=Primary, state=Disabled | relative | layout |
| type=Secondary, state=Disabled | relative | layout |
| type=Tertiary, state=Disabled | relative | layout |
| type=Borderless, state=Disabled | relative | layout |
| type=Primary, state=Focus | relative | layout |
| type=Secondary, state=Focus | relative | layout |
| type=Tertiary, state=Focus | relative | layout |
| type=Borderless, state=Focus | relative | layout |
text.text-align19
| type=Secondary, state=Default | center | layout |
| type=Tertiary, state=Default | center | layout |
| type=Borderless, state=Default | center | layout |
| type=Primary, state=Hover | center | layout |
| type=Secondary, state=Hover | center | layout |
| type=Tertiary, state=Hover | center | layout |
| type=Borderless, state=Hover | center | layout |
| type=Primary, state=Pressed | center | layout |
| type=Secondary, state=Pressed | center | layout |
| type=Tertiary, state=Pressed | center | layout |
| type=Borderless, state=Pressed | center | layout |
| type=Primary, state=Disabled | center | layout |
| type=Secondary, state=Disabled | center | layout |
| type=Tertiary, state=Disabled | center | layout |
| type=Borderless, state=Disabled | center | layout |
| type=Primary, state=Focus | center | layout |
| type=Secondary, state=Focus | center | layout |
| type=Tertiary, state=Focus | center | layout |
| type=Borderless, state=Focus | center | layout |
text.white-space19
| type=Secondary, state=Default | nowrap | layout |
| type=Tertiary, state=Default | nowrap | layout |
| type=Borderless, state=Default | nowrap | layout |
| type=Primary, state=Hover | nowrap | layout |
| type=Secondary, state=Hover | nowrap | layout |
| type=Tertiary, state=Hover | nowrap | layout |
| type=Borderless, state=Hover | nowrap | layout |
| type=Primary, state=Pressed | nowrap | layout |
| type=Secondary, state=Pressed | nowrap | layout |
| type=Tertiary, state=Pressed | nowrap | layout |
| type=Borderless, state=Pressed | nowrap | layout |
| type=Primary, state=Disabled | nowrap | layout |
| type=Secondary, state=Disabled | nowrap | layout |
| type=Tertiary, state=Disabled | nowrap | layout |
| type=Borderless, state=Disabled | nowrap | layout |
| type=Primary, state=Focus | nowrap | layout |
| type=Secondary, state=Focus | nowrap | layout |
| type=Tertiary, state=Focus | nowrap | layout |
| type=Borderless, state=Focus | nowrap | layout |
Carousel
A card in the home page carousel: a number, a title and a short description.
Never changes 0
| Part | Property | Value | Token |
|---|
Changes by variant 200
background.background1
| state=Pressed | rgba(58,58,58,0.48) | no token yet |
background.border-radius1
| state=Pressed | 24px | spacing/radius/xlarge |
background.inset1
| state=Pressed | 0 | layout |
background.opacity1
| state=Pressed | 0.64 | opacity/strong |
background.position1
| state=Pressed | absolute | layout |
bottom.align-items4
| state=Disabled | center | layout |
| state=Pressed | center | layout |
| state=Focus | center | layout |
| state=Hover | center | layout |
bottom.display4
| state=Disabled | flex | layout |
| state=Pressed | flex | layout |
| state=Focus | flex | layout |
| state=Hover | flex | layout |
bottom.flex-shrink4
| state=Disabled | 0 | layout |
| state=Pressed | 0 | layout |
| state=Focus | 0 | layout |
| state=Hover | 0 | layout |
bottom.gap4
| state=Disabled | 16px | spacing/gap/medium |
| state=Pressed | 16px | spacing/gap/medium |
| state=Focus | 16px | spacing/gap/medium |
| state=Hover | 16px | spacing/gap/medium |
bottom.justify-content4
| state=Disabled | flex-end | layout |
| state=Pressed | flex-end | layout |
| state=Focus | flex-end | layout |
| state=Hover | flex-end | layout |
bottom.padding-left4
| state=Disabled | 32px | spacing/gap/xlarge |
| state=Pressed | 32px | spacing/gap/xlarge |
| state=Focus | 32px | spacing/gap/xlarge |
| state=Hover | 32px | spacing/gap/xlarge |
bottom.position4
| state=Disabled | relative | layout |
| state=Pressed | relative | layout |
| state=Focus | relative | layout |
| state=Hover | relative | layout |
bottom.width4
| state=Disabled | 100% | layout |
| state=Pressed | 100% | layout |
| state=Focus | 100% | layout |
| state=Hover | 100% | layout |
focus-ring.border-color1
| state=Focus | #999 | project/focus/focus-ring |
focus-ring.border-radius1
| state=Focus | 28px | on purpose: Derived: the element radius plus the focus ring offset. |
focus-ring.border-sides1
| state=Focus | all | layout |
focus-ring.border-width1
| state=Focus | 2px | spacing/outline/medium |
focus-ring.inset1
| state=Focus | -4px | layout |
focus-ring.position1
| state=Focus | absolute | layout |
label.color4
| state=Disabled | #999 | project/disabled/sub-label |
| state=Pressed | #00d669 | project/pressed/label |
| state=Focus | #999 | project/focus/sub-label |
| state=Hover | #00d669 | project/hover/label |
label.flex-shrink4
| state=Disabled | 0 | layout |
| state=Pressed | 0 | layout |
| state=Focus | 0 | layout |
| state=Hover | 0 | layout |
label.font-family4
| state=Disabled | 'General Sans Variable' | font-family/base |
| state=Pressed | 'General Sans Variable' | font-family/base |
| state=Focus | 'General Sans Variable' | font-family/base |
| state=Hover | 'General Sans Variable' | font-family/base |
label.font-size4
| state=Disabled | 12px | typography/label/font-size |
| state=Pressed | 12px | typography/label/font-size |
| state=Focus | 12px | typography/label/font-size |
| state=Hover | 12px | typography/label/font-size |
label.font-weight4
| state=Disabled | 400 | typography/label/font-weight/regular |
| state=Pressed | 400 | typography/label/font-weight/regular |
| state=Focus | 400 | typography/label/font-weight/regular |
| state=Hover | 400 | typography/label/font-weight/regular |
label.letter-spacing4
| state=Disabled | 0px | typography/label/letter-spacing |
| state=Pressed | 0px | typography/label/letter-spacing |
| state=Focus | 0px | typography/label/letter-spacing |
| state=Hover | 0px | typography/label/letter-spacing |
label.line-height4
| state=Disabled | 14px | typography/label/line-height |
| state=Pressed | 14px | typography/label/line-height |
| state=Focus | 14px | typography/label/line-height |
| state=Hover | 14px | typography/label/line-height |
label.position4
| state=Disabled | relative | layout |
| state=Pressed | relative | layout |
| state=Focus | relative | layout |
| state=Hover | relative | layout |
label.width4
| state=Disabled | 100% | layout |
| state=Pressed | 100% | layout |
| state=Focus | 100% | layout |
| state=Hover | 100% | layout |
number.align-items4
| state=Disabled | center | layout |
| state=Pressed | center | layout |
| state=Focus | center | layout |
| state=Hover | center | layout |
number.display4
| state=Disabled | flex | layout |
| state=Pressed | flex | layout |
| state=Focus | flex | layout |
| state=Hover | flex | layout |
number.flex-direction4
| state=Disabled | column | layout |
| state=Pressed | column | layout |
| state=Focus | column | layout |
| state=Hover | column | layout |
number.flex-shrink4
| state=Disabled | 0 | layout |
| state=Pressed | 0 | layout |
| state=Focus | 0 | layout |
| state=Hover | 0 | layout |
number.justify-content4
| state=Disabled | center | layout |
| state=Pressed | center | layout |
| state=Focus | center | layout |
| state=Hover | center | layout |
number.position4
| state=Disabled | relative | layout |
| state=Pressed | relative | layout |
| state=Focus | relative | layout |
| state=Hover | relative | layout |
number.width4
| state=Disabled | 16px | suggest spacing/size/2xsmall |
| state=Pressed | 16px | suggest spacing/size/2xsmall |
| state=Focus | 16px | suggest spacing/size/2xsmall |
| state=Hover | 16px | suggest spacing/size/2xsmall |
root.align-items4
| state=Disabled | flex-start | layout |
| state=Pressed | flex-start | layout |
| state=Focus | flex-start | layout |
| state=Hover | flex-start | layout |
root.border-radius4
| state=Disabled | 24px | spacing/radius/xlarge |
| state=Pressed | 24px | spacing/radius/xlarge |
| state=Focus | 24px | spacing/radius/xlarge |
| state=Hover | 24px | spacing/radius/xlarge |
root.display4
| state=Disabled | flex | layout |
| state=Pressed | flex | layout |
| state=Focus | flex | layout |
| state=Hover | flex | layout |
root.flex-direction4
| state=Disabled | column | layout |
| state=Pressed | column | layout |
| state=Focus | column | layout |
| state=Hover | column | layout |
root.gap4
| state=Disabled | 0px | spacing/gap/none |
| state=Pressed | 0px | spacing/gap/none |
| state=Focus | 0px | spacing/gap/none |
| state=Hover | 0px | spacing/gap/none |
root.opacity1
| state=Disabled | 0.32 | opacity/mild |
root.padding4
| state=Disabled | 24px | spacing/gap/large |
| state=Pressed | 24px | spacing/gap/large |
| state=Focus | 24px | spacing/gap/large |
| state=Hover | 24px | spacing/gap/large |
root.position4
| state=Disabled | relative | layout |
| state=Pressed | relative | layout |
| state=Focus | relative | layout |
| state=Hover | relative | layout |
root.width4
| state=Disabled | 312px | just the Figma frame size |
| state=Pressed | 312px | just the Figma frame size |
| state=Focus | 312px | just the Figma frame size |
| state=Hover | 312px | just the Figma frame size |
text.color4
| state=Disabled | #d3d9d5 | project/disabled/label |
| state=Pressed | #00d669 | project/pressed/label |
| state=Focus | #d3d9d5 | project/focus/label |
| state=Hover | #00d669 | project/hover/label |
text.flex-shrink4
| state=Disabled | 0 | layout |
| state=Pressed | 0 | layout |
| state=Focus | 0 | layout |
| state=Hover | 0 | layout |
text.font-family4
| state=Disabled | 'General Sans Variable' | font-family/base |
| state=Pressed | 'General Sans Variable' | font-family/base |
| state=Focus | 'General Sans Variable' | font-family/base |
| state=Hover | 'General Sans Variable' | font-family/base |
text.font-size4
| state=Disabled | 24px | typography/title/font-size |
| state=Pressed | 24px | typography/title/font-size |
| state=Focus | 24px | typography/title/font-size |
| state=Hover | 24px | typography/title/font-size |
text.font-weight4
| state=Disabled | 500 | typography/title/font-weight/medium |
| state=Pressed | 500 | typography/title/font-weight/medium |
| state=Focus | 500 | typography/title/font-weight/medium |
| state=Hover | 500 | typography/title/font-weight/medium |
text.letter-spacing4
| state=Disabled | 0px | typography/title/letter-spacing |
| state=Pressed | 0px | typography/title/letter-spacing |
| state=Focus | 0px | typography/title/letter-spacing |
| state=Hover | 0px | typography/title/letter-spacing |
text.line-height4
| state=Disabled | 32px | typography/title/line-height |
| state=Pressed | 32px | typography/title/line-height |
| state=Focus | 32px | typography/title/line-height |
| state=Hover | 32px | typography/title/line-height |
text.position4
| state=Disabled | relative | layout |
| state=Pressed | relative | layout |
| state=Focus | relative | layout |
| state=Hover | relative | layout |
text.white-space4
| state=Disabled | nowrap | layout |
| state=Pressed | nowrap | layout |
| state=Focus | nowrap | layout |
| state=Hover | nowrap | layout |
title.align-items4
| state=Disabled | center | layout |
| state=Pressed | center | layout |
| state=Focus | center | layout |
| state=Hover | center | layout |
title.display4
| state=Disabled | flex | layout |
| state=Pressed | flex | layout |
| state=Focus | flex | layout |
| state=Hover | flex | layout |
title.flex-shrink4
| state=Disabled | 0 | layout |
| state=Pressed | 0 | layout |
| state=Focus | 0 | layout |
| state=Hover | 0 | layout |
title.gap4
| state=Disabled | 16px | spacing/gap/medium |
| state=Pressed | 16px | spacing/gap/medium |
| state=Focus | 16px | spacing/gap/medium |
| state=Hover | 16px | spacing/gap/medium |
title.position4
| state=Disabled | relative | layout |
| state=Pressed | relative | layout |
| state=Focus | relative | layout |
| state=Hover | relative | layout |
title.width4
| state=Disabled | 100% | layout |
| state=Pressed | 100% | layout |
| state=Focus | 100% | layout |
| state=Hover | 100% | layout |
Chip
A small outlined label you can click, for filters and quick choices.
When to use
- Filters and quick picks in a row: categories on my portfolio, date ranges.
When not to use
- A status nobody clicks: Badge.
- A topic on a piece of content: Tag.
Behaviour
One status (Default) and five states. Hover, pressed and focus come from the browser. There's no selected chip in the kit yet, so a selected chip needs designing before anyone builds one. Not an improvised fill.
Accessibility
- Element:
<button type="button">, witharia-pressedwhen it filters. - Group: wrap the set in something with a name (
role="group"andaria-label="Filter by category"). - Focus:
focus-ring, on:focus-visible.
Content
One or two words, sentence case.
Never changes 24
| Part | Property | Value | Token |
|---|---|---|---|
| root | justify-content | center | layout |
| root | align-items | center | layout |
| root | display | flex | layout |
| root | position | relative | layout |
| root | gap | 8px | spacing/gap/small |
| root | height | 24px | spacing/size/small |
| root | padding-bottom | 2px | spacing/gap/3xsmall |
| root | padding-top | 0px | spacing/gap/none |
| root | padding-left | 8px | spacing/gap/small |
| root | padding-right | 8px | spacing/gap/small |
| root | border-radius | 10000px | spacing/radius/full |
| label | flex-shrink | 0 | layout |
| label | white-space | nowrap | layout |
| label | text-align | center | layout |
| label | position | relative | layout |
| label | font-family | 'General Sans Variable' | font-family/base |
| label | font-weight | 500 | typography/label/font-weight/medium |
| label | line-height | 14px | typography/label/line-height |
| label | font-size | 12px | typography/label/font-size |
| label | letter-spacing | 0px | typography/label/letter-spacing |
| outline | border-sides | all | layout |
| outline | position | absolute | layout |
| outline | inset | 0 | layout |
| outline | border-radius | 10000px | spacing/radius/full |
Changes by variant 22
focus-ring.border-color1
| status=Default, state=Focus | #999 | actions/secondary/regular/focus/focus-ring |
focus-ring.border-radius1
| status=Default, state=Focus | 10000px | spacing/radius/full |
focus-ring.border-sides1
| status=Default, state=Focus | all | layout |
focus-ring.border-width1
| status=Default, state=Focus | 2px | spacing/outline/medium |
focus-ring.inset1
| status=Default, state=Focus | -4px | layout |
focus-ring.position1
| status=Default, state=Focus | absolute | layout |
label.color5
| status=Default, state=Default | #d3d9d5 | actions/secondary/regular/default/label |
| status=Default, state=Hover | #ededed | actions/secondary/regular/hover/label |
| status=Default, state=Pressed | #d3d9d5 | actions/secondary/regular/pressed/label |
| status=Default, state=Disabled | #d3d9d5 | actions/secondary/regular/disabled/label |
| status=Default, state=Focus | #d3d9d5 | actions/secondary/regular/focus/label |
outline.border-color5
| status=Default, state=Default | #ededed | actions/secondary/regular/default/outline |
| status=Default, state=Hover | #ededed | actions/secondary/regular/hover/outline |
| status=Default, state=Pressed | #ededed | actions/secondary/regular/pressed/outline |
| status=Default, state=Disabled | #ededed | actions/secondary/regular/disabled/outline |
| status=Default, state=Focus | #ededed | actions/secondary/regular/focus/outline |
outline.opacity5
| status=Default, state=Default | 0.24 | opacity/gentle |
| status=Default, state=Hover | 0.64 | opacity/strong |
| status=Default, state=Pressed | 1 | opacity/solid |
| status=Default, state=Disabled | 1 | opacity/solid |
| status=Default, state=Focus | 0.24 | opacity/gentle |
root.opacity1
| status=Default, state=Disabled | 0.24 | opacity/gentle |
Divider
A thin line between things.
Never changes 2
| Part | Property | Value | Token |
|---|---|---|---|
| root | position | relative | layout |
| root | width | 104px | just the Figma frame size |
Floating effect
The only drop shadow in the kit, for things that float above the page.
- root
- Whatever the style is applied to. In Figma it's called "Shadow/Floating".
When to use
- Anything lifted above the content: menus, popovers, a card being dragged.
When not to use
- Cards just sitting there. This kit is dark, so surfaces are told apart by tone, not shadow.
Behaviour
0 16px 24px rgba(0,0,0,0.16), as --shadow-floating. There's no family of elevation tokens yet. If I ever need a second shadow, that's when I add one.
Accessibility
- Separation: on a dark background, a shadow doesn't separate anything for someone with low vision. Pair it with a different surface tone or an outline.
Never changes 1
| Part | Property | Value | Token |
|---|---|---|---|
| root | box-shadow | 0px 16px 24px 0px rgba(0, 0, 0, 0.16) | shadow/floating |
Hero Media
The full-width hero on every case study: artwork pinned behind a 16px frame and dimmed to the same level everywhere.
- hero
- The full-width section, 630px tall, on `non-interactive/background/primary`. Its 16px padding is the frame that shows the page around the image. The width has to take off the real scrollbar (100vw includes it), otherwise the sides look about 8px while the top is 16.
- frame
- The window onto the artwork. It fills the hero inside the 16px frame, with `radius/xlarge` corners, and hides anything that spills out (a rounded `clip-path` when the artwork uses fixed positioning).
- media
- The artwork itself: a div with a background image, never an `<img>` (the pinned effect needs a background).
When to use
- The top of every case study on runceanu.com. One per page.
When not to use
- The home page. That one has the Paper effect instead of artwork.
Behaviour
The artwork stays put and the page scrolls over it (background-attachment: fixed). Phones, tablets and prefers-reduced-motion get a normal static background instead. The dim only works as opacity and the colour underneath together. Never change one without the other.
Accessibility
- Artwork: it's a background image, so it's decoration by definition. Anything people need from it goes in the text.
- Contrast: check the text against the dimmed artwork, not the colour underneath.
- Motion: the pinned effect switches off with
prefers-reduced-motion.
Where code differs on purpose
- All apps: The artwork is dimmed with `opacity/medium` (0.48) on a #171717 frame. Figma's node says 32% (`opacity/mild`). I set one dim for every case study on 2026-10-18. What you see is opacity times what's underneath, and three heroes looked darker at the same opacity. Figma never caught up.
Never changes 8
| Part | Property | Value | Token |
|---|---|---|---|
| hero | height | 630px | spacing/layout/hero-height |
| hero | padding | 16px | spacing/gap/medium |
| hero | background | #060805 | non-interactive/background/primary |
| frame | border-radius | 24px | spacing/radius/xlarge |
| frame | background | #171717 | non-interactive/background/secondary |
| media | opacity | 0.48 | opacity/medium |
| media | background-attachment | fixed | layout |
| media | background-size | explicit px (asset-native, e.g. 2336px 1196px) | on purpose: Each artwork's native pixel size. |
IconButton
A round button with only an icon, including the Project type used on case-study thumbnails.
When to use
- Actions everyone knows where a label would crowd things: close, back, next, previous.
Projecton project thumbnails and case-study cards, sitting on top of imagery.
When not to use
- Any icon that isn't instantly obvious. Use PillButton, an icon isn't a label.
- On/off or one-of-many choices. That's Toggle. IconButton does something, it doesn't remember anything.
Behaviour
type is Primary, Secondary, Tertiary or Project. States come from the browser like every other action. Don't shrink it below 40px, fingers need the room.
Accessibility
- Element:
<button type="button">. - Name:
aria-labelis a must, there's no visible text. Say what it does ("Close dialog"), not what it shows ("X"). - Keyboard: Enter and Space.
- Focus:
focus-ring, on:focus-visible. - Tooltip: give it a tooltip with the same words, once there's a Tooltip in the kit.
Content
No text. The aria-label follows the same rules as Button.
Never changes 13
| Part | Property | Value | Token |
|---|---|---|---|
| root | justify-content | center | layout |
| root | align-items | center | layout |
| root | display | flex | layout |
| root | position | relative | layout |
| root | gap | 8px | spacing/gap/small |
| root | border-radius | 10000px | spacing/radius/full |
| icons-arrow-left | overflow | clip | layout |
| icons-arrow-left | flex-shrink | 0 | layout |
| icons-arrow-left | position | relative | layout |
| icons-arrow-left | width | 20px | suggest spacing/size/xsmall |
| icons-arrow-left | height | 20px | suggest spacing/size/xsmall |
| union | position | absolute | layout |
| union | inset | 20.84% 16.66% 20.83% 18.4% | layout |
Changes by variant 208
background.background9
| type=Secondary, state=Default | #3a3a3a | actions/secondary/regular/default/background |
| type=Secondary, state=Hover | #747573 | actions/secondary/regular/hover/background |
| type=Tertiary, state=Hover | #060805 | actions/tertiary/hover/background |
| type=Secondary, state=Pressed | #999 | actions/secondary/regular/pressed/background |
| type=Tertiary, state=Pressed | #454545 | actions/tertiary/pressed/background |
| type=Secondary, state=Disabled | #3a3a3a | actions/secondary/regular/disabled/background |
| type=Secondary, state=Focus | #3a3a3a | actions/secondary/regular/focus/background |
| type=Project, state=Hover | #060805 | actions/tertiary/hover/background |
| type=Project, state=Pressed | #454545 | actions/tertiary/pressed/background |
background.border-color5
| type=Secondary, state=Default | #ededed | actions/secondary/regular/default/outline |
| type=Secondary, state=Hover | #ededed | actions/secondary/regular/hover/outline |
| type=Secondary, state=Pressed | #ededed | actions/secondary/regular/pressed/outline |
| type=Secondary, state=Disabled | #ededed | actions/secondary/regular/disabled/outline |
| type=Secondary, state=Focus | #ededed | actions/secondary/regular/focus/outline |
background.border-radius9
| type=Secondary, state=Default | 10000px | spacing/radius/full |
| type=Secondary, state=Hover | 10000px | spacing/radius/full |
| type=Tertiary, state=Hover | 10000px | spacing/radius/full |
| type=Secondary, state=Pressed | 10000px | spacing/radius/full |
| type=Tertiary, state=Pressed | 10000px | spacing/radius/full |
| type=Secondary, state=Disabled | 10000px | spacing/radius/full |
| type=Secondary, state=Focus | 10000px | spacing/radius/full |
| type=Project, state=Hover | 10000px | spacing/radius/full |
| type=Project, state=Pressed | 10000px | spacing/radius/full |
background.border-sides5
| type=Secondary, state=Default | left top | layout |
| type=Secondary, state=Hover | left top | layout |
| type=Secondary, state=Pressed | left top | layout |
| type=Secondary, state=Disabled | left top | layout |
| type=Secondary, state=Focus | left top | layout |
background.inset9
| type=Secondary, state=Default | 0 | layout |
| type=Secondary, state=Hover | 0 | layout |
| type=Tertiary, state=Hover | 0 | layout |
| type=Secondary, state=Pressed | 0 | layout |
| type=Tertiary, state=Pressed | 0 | layout |
| type=Secondary, state=Disabled | 0 | layout |
| type=Secondary, state=Focus | 0 | layout |
| type=Project, state=Hover | 0 | layout |
| type=Project, state=Pressed | 0 | layout |
background.opacity9
| type=Secondary, state=Default | 0.24 | opacity/gentle |
| type=Secondary, state=Hover | 0.32 | opacity/mild |
| type=Tertiary, state=Hover | 0.32 | opacity/mild |
| type=Secondary, state=Pressed | 0.32 | opacity/mild |
| type=Tertiary, state=Pressed | 0.32 | opacity/mild |
| type=Secondary, state=Disabled | 0.32 | opacity/mild |
| type=Secondary, state=Focus | 0.24 | opacity/gentle |
| type=Project, state=Hover | 0.32 | opacity/mild |
| type=Project, state=Pressed | 0.32 | opacity/mild |
background.position9
| type=Secondary, state=Default | absolute | layout |
| type=Secondary, state=Hover | absolute | layout |
| type=Tertiary, state=Hover | absolute | layout |
| type=Secondary, state=Pressed | absolute | layout |
| type=Tertiary, state=Pressed | absolute | layout |
| type=Secondary, state=Disabled | absolute | layout |
| type=Secondary, state=Focus | absolute | layout |
| type=Project, state=Hover | absolute | layout |
| type=Project, state=Pressed | absolute | layout |
focus-ring.border-color4
| type=Primary, state=Focus | #b6ffda | actions/primary/focus/focus-ring |
| type=Secondary, state=Focus | #999 | actions/secondary/regular/focus/focus-ring |
| type=Tertiary, state=Focus | #999 | actions/secondary/regular/focus/focus-ring |
| type=Project, state=Focus | #999 | actions/secondary/regular/focus/focus-ring |
focus-ring.border-radius4
| type=Primary, state=Focus | 10000px | spacing/radius/full |
| type=Secondary, state=Focus | 10000px | spacing/radius/full |
| type=Tertiary, state=Focus | 10000px | spacing/radius/full |
| type=Project, state=Focus | 10000px | spacing/radius/full |
focus-ring.border-sides4
| type=Primary, state=Focus | all | layout |
| type=Secondary, state=Focus | all | layout |
| type=Tertiary, state=Focus | all | layout |
| type=Project, state=Focus | all | layout |
focus-ring.border-width4
| type=Primary, state=Focus | 2px | spacing/outline/medium |
| type=Secondary, state=Focus | 2px | spacing/outline/medium |
| type=Tertiary, state=Focus | 2px | spacing/outline/medium |
| type=Project, state=Focus | 2px | spacing/outline/medium |
focus-ring.inset4
| type=Primary, state=Focus | -5px -4px -4px -5px | layout |
| type=Secondary, state=Focus | -4px | layout |
| type=Tertiary, state=Focus | -4px | layout |
| type=Project, state=Focus | -4px | layout |
focus-ring.position4
| type=Primary, state=Focus | absolute | layout |
| type=Secondary, state=Focus | absolute | layout |
| type=Tertiary, state=Focus | absolute | layout |
| type=Project, state=Focus | absolute | layout |
root.background5
| type=Primary, state=Default | #00d669 | actions/primary/default/background |
| type=Primary, state=Hover | #00b450 | actions/primary/hover/background |
| type=Primary, state=Pressed | #00913a | actions/primary/pressed/background |
| type=Primary, state=Disabled | #00d669 | actions/primary/disabled/background |
| type=Primary, state=Focus | #00d669 | actions/primary/focus/background |
root.border-color5
| type=Primary, state=Default | rgba(237,237,237,0.64) | actions/primary/default/outline |
| type=Primary, state=Hover | rgba(237,237,237,0.64) | actions/primary/hover/outline |
| type=Primary, state=Pressed | rgba(237,237,237,0.64) | actions/primary/pressed/outline |
| type=Primary, state=Disabled | rgba(237,237,237,0.64) | actions/primary/disabled/outline |
| type=Primary, state=Focus | rgba(237,237,237,0.64) | actions/primary/focus/outline |
root.border-sides5
| type=Primary, state=Default | left top | layout |
| type=Primary, state=Hover | left top | layout |
| type=Primary, state=Pressed | left top | layout |
| type=Primary, state=Disabled | left top | layout |
| type=Primary, state=Focus | left top | layout |
root.border-top-width5
| type=Primary, state=Default | 1px | spacing/outline/small |
| type=Primary, state=Hover | 1px | spacing/outline/small |
| type=Primary, state=Pressed | 1px | spacing/outline/small |
| type=Primary, state=Disabled | 1px | spacing/outline/small |
| type=Primary, state=Focus | 1px | spacing/outline/small |
root.height20
| type=Primary, state=Default | 48px | spacing/size/medium-large |
| type=Secondary, state=Default | 48px | spacing/size/medium-large |
| type=Tertiary, state=Default | 48px | spacing/size/medium-large |
| type=Primary, state=Hover | 48px | spacing/size/medium-large |
| type=Secondary, state=Hover | 48px | spacing/size/medium-large |
| type=Tertiary, state=Hover | 48px | spacing/size/medium-large |
| type=Primary, state=Pressed | 48px | spacing/size/medium-large |
| type=Secondary, state=Pressed | 48px | spacing/size/medium-large |
| type=Tertiary, state=Pressed | 48px | spacing/size/medium-large |
| type=Primary, state=Disabled | 48px | spacing/size/medium-large |
| type=Secondary, state=Disabled | 48px | spacing/size/medium-large |
| type=Tertiary, state=Disabled | 48px | spacing/size/medium-large |
| type=Primary, state=Focus | 48px | spacing/size/medium-large |
| type=Secondary, state=Focus | 48px | spacing/size/medium-large |
| type=Tertiary, state=Focus | 48px | spacing/size/medium-large |
| type=Project, state=Default | 32px | spacing/size/small-medium |
| type=Project, state=Hover | 32px | spacing/size/small-medium |
| type=Project, state=Pressed | 32px | spacing/size/small-medium |
| type=Project, state=Disabled | 32px | spacing/size/small-medium |
| type=Project, state=Focus | 32px | spacing/size/small-medium |
root.opacity4
| type=Primary, state=Disabled | 0.24 | opacity/gentle |
| type=Secondary, state=Disabled | 0.24 | opacity/gentle |
| type=Tertiary, state=Disabled | 0.24 | opacity/gentle |
| type=Project, state=Disabled | 0.24 | opacity/gentle |
root.padding5
| type=Project, state=Default | 0px | spacing/gap/none |
| type=Project, state=Hover | 0px | spacing/gap/none |
| type=Project, state=Pressed | 0px | spacing/gap/none |
| type=Project, state=Disabled | 0px | spacing/gap/none |
| type=Project, state=Focus | 0px | spacing/gap/none |
root.padding-bottom15
| type=Primary, state=Default | 0px | spacing/gap/none |
| type=Secondary, state=Default | 0px | spacing/gap/none |
| type=Tertiary, state=Default | 0px | spacing/gap/none |
| type=Primary, state=Hover | 0px | spacing/gap/none |
| type=Secondary, state=Hover | 0px | spacing/gap/none |
| type=Tertiary, state=Hover | 0px | spacing/gap/none |
| type=Primary, state=Pressed | 0px | spacing/gap/none |
| type=Secondary, state=Pressed | 0px | spacing/gap/none |
| type=Tertiary, state=Pressed | 0px | spacing/gap/none |
| type=Primary, state=Disabled | 0px | spacing/gap/none |
| type=Secondary, state=Disabled | 0px | spacing/gap/none |
| type=Tertiary, state=Disabled | 0px | spacing/gap/none |
| type=Primary, state=Focus | 0px | spacing/gap/none |
| type=Secondary, state=Focus | 0px | spacing/gap/none |
| type=Tertiary, state=Focus | 0px | spacing/gap/none |
root.padding-left15
| type=Primary, state=Default | 20px | spacing/gap/medium-large |
| type=Secondary, state=Default | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Default | 20px | spacing/gap/medium-large |
| type=Primary, state=Hover | 20px | spacing/gap/medium-large |
| type=Secondary, state=Hover | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Hover | 20px | spacing/gap/medium-large |
| type=Primary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Secondary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Primary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Secondary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Primary, state=Focus | 20px | spacing/gap/medium-large |
| type=Secondary, state=Focus | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Focus | 20px | spacing/gap/medium-large |
root.padding-right15
| type=Primary, state=Default | 20px | spacing/gap/medium-large |
| type=Secondary, state=Default | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Default | 20px | spacing/gap/medium-large |
| type=Primary, state=Hover | 20px | spacing/gap/medium-large |
| type=Secondary, state=Hover | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Hover | 20px | spacing/gap/medium-large |
| type=Primary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Secondary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Primary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Secondary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Primary, state=Focus | 20px | spacing/gap/medium-large |
| type=Secondary, state=Focus | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Focus | 20px | spacing/gap/medium-large |
root.padding-top15
| type=Primary, state=Default | 0px | spacing/gap/none |
| type=Secondary, state=Default | 0px | spacing/gap/none |
| type=Tertiary, state=Default | 0px | spacing/gap/none |
| type=Primary, state=Hover | 0px | spacing/gap/none |
| type=Secondary, state=Hover | 0px | spacing/gap/none |
| type=Tertiary, state=Hover | 0px | spacing/gap/none |
| type=Primary, state=Pressed | 0px | spacing/gap/none |
| type=Secondary, state=Pressed | 0px | spacing/gap/none |
| type=Tertiary, state=Pressed | 0px | spacing/gap/none |
| type=Primary, state=Disabled | 0px | spacing/gap/none |
| type=Secondary, state=Disabled | 0px | spacing/gap/none |
| type=Tertiary, state=Disabled | 0px | spacing/gap/none |
| type=Primary, state=Focus | 0px | spacing/gap/none |
| type=Secondary, state=Focus | 0px | spacing/gap/none |
| type=Tertiary, state=Focus | 0px | spacing/gap/none |
root.width20
| type=Primary, state=Default | 48px | spacing/size/medium-large |
| type=Secondary, state=Default | 48px | spacing/size/medium-large |
| type=Tertiary, state=Default | 48px | spacing/size/medium-large |
| type=Primary, state=Hover | 48px | spacing/size/medium-large |
| type=Secondary, state=Hover | 48px | spacing/size/medium-large |
| type=Tertiary, state=Hover | 48px | spacing/size/medium-large |
| type=Primary, state=Pressed | 48px | spacing/size/medium-large |
| type=Secondary, state=Pressed | 48px | spacing/size/medium-large |
| type=Tertiary, state=Pressed | 48px | spacing/size/medium-large |
| type=Primary, state=Disabled | 48px | spacing/size/medium-large |
| type=Secondary, state=Disabled | 48px | spacing/size/medium-large |
| type=Tertiary, state=Disabled | 48px | spacing/size/medium-large |
| type=Primary, state=Focus | 48px | spacing/size/medium-large |
| type=Secondary, state=Focus | 48px | spacing/size/medium-large |
| type=Tertiary, state=Focus | 48px | spacing/size/medium-large |
| type=Project, state=Default | 32px | spacing/size/small-medium |
| type=Project, state=Hover | 32px | spacing/size/small-medium |
| type=Project, state=Pressed | 32px | spacing/size/small-medium |
| type=Project, state=Disabled | 32px | spacing/size/small-medium |
| type=Project, state=Focus | 32px | spacing/size/small-medium |
InlineBanner
A filled status pill with an icon and a label, in four statuses and two sizes.
When to use
- Telling people something about the page or a section they should notice: saved, offline, open for work, needs your attention.
Smallin a line of text,Mediumon its own line or at the top of a section.
When not to use
- The status of one item in a list or table. That's Badge, smaller and quieter.
- Anything that needs a decision. That's a dialog. A banner tells, it doesn't ask.
Behaviour
status (Default, Positive, Negative, Warning) sets the fill and the icon: plus, check, alarm, warning. You can't interact with it: no hover, no focus.
Accessibility
- Element: a
<span>or a<p>. If it shows up because of something the person just did, put it in a live region (role="status", orrole="alert"forNegative). - Colour: the icon carries the status as well as the fill. Until the icons are exported (akount.ing has a deviation for this), the words have to say the status.
- Glyph:
aria-hidden="true". The label carries the meaning.
Content
One short sentence, no full stop if it's a fragment. Lead with what happened: "Saved just now", "Payment failed: card expired".
Where code differs on purpose
- akount.ing: Renders label-only; the per-status glyph (plus / alarm / positive / warning) is an optional slot. The kit glyphs are not exported yet, and drawing substitutes would ship something the kit does not contain.
Never changes 23
| Part | Property | Value | Token |
|---|---|---|---|
| root | align-items | center | layout |
| root | display | flex | layout |
| root | position | relative | layout |
| root | padding | 8px | spacing/gap/small |
| root | border-radius | 8px | spacing/radius/small |
| background | position | absolute | layout |
| background | inset | 0 | layout |
| background | background | #3a3a3a | non-interactive/background/tertiary |
| background | opacity | 0.32 | opacity/mild |
| background | border-radius | 8px | spacing/radius/small |
| union | position | absolute | layout |
| label | overflow | clip | layout |
| label | justify-content | center | layout |
| label | align-items | center | layout |
| label | display | flex | layout |
| label | flex-shrink | 0 | layout |
| label | position | relative | layout |
| text | flex-shrink | 0 | layout |
| text | white-space | nowrap | layout |
| text | text-align | center | layout |
| text | position | relative | layout |
| text | font-family | 'General Sans Variable' | font-family/base |
| text | color | #d3d9d5 | non-interactive/foreground/secondary |
Changes by variant 118
-slot.align-items2
| status=Default, size=Small | center | layout |
| status=Default, size=Medium | center | layout |
-slot.display2
| status=Default, size=Small | flex | layout |
| status=Default, size=Medium | flex | layout |
-slot.flex-shrink2
| status=Default, size=Small | 0 | layout |
| status=Default, size=Medium | 0 | layout |
-slot.gap2
| status=Default, size=Small | 0px | spacing/gap/none |
| status=Default, size=Medium | 0px | spacing/gap/none |
-slot.padding2
| status=Default, size=Small | 0px | spacing/gap/none |
| status=Default, size=Medium | 0px | spacing/gap/none |
-slot.position2
| status=Default, size=Small | relative | layout |
| status=Default, size=Medium | relative | layout |
icons-alarm.flex-shrink2
| status=Negative, size=Small | 0 | layout |
| status=Negative, size=Medium | 0 | layout |
icons-alarm.height2
| status=Negative, size=Small | 16px | suggest spacing/size/2xsmall |
| status=Negative, size=Medium | 20px | suggest spacing/size/xsmall |
icons-alarm.overflow2
| status=Negative, size=Small | clip | layout |
| status=Negative, size=Medium | clip | layout |
icons-alarm.position2
| status=Negative, size=Small | relative | layout |
| status=Negative, size=Medium | relative | layout |
icons-alarm.width2
| status=Negative, size=Small | 16px | suggest spacing/size/2xsmall |
| status=Negative, size=Medium | 20px | suggest spacing/size/xsmall |
icons-plus.flex-shrink2
| status=Default, size=Small | 0 | layout |
| status=Default, size=Medium | 0 | layout |
icons-plus.height2
| status=Default, size=Small | 16px | suggest spacing/size/2xsmall |
| status=Default, size=Medium | 20px | suggest spacing/size/xsmall |
icons-plus.overflow2
| status=Default, size=Small | clip | layout |
| status=Default, size=Medium | clip | layout |
icons-plus.position2
| status=Default, size=Small | relative | layout |
| status=Default, size=Medium | relative | layout |
icons-plus.width2
| status=Default, size=Small | 16px | suggest spacing/size/2xsmall |
| status=Default, size=Medium | 20px | suggest spacing/size/xsmall |
icons-positive.flex-shrink2
| status=Positive, size=Small | 0 | layout |
| status=Positive, size=Medium | 0 | layout |
icons-positive.height2
| status=Positive, size=Small | 16px | suggest spacing/size/2xsmall |
| status=Positive, size=Medium | 20px | suggest spacing/size/xsmall |
icons-positive.overflow2
| status=Positive, size=Small | clip | layout |
| status=Positive, size=Medium | clip | layout |
icons-positive.position2
| status=Positive, size=Small | relative | layout |
| status=Positive, size=Medium | relative | layout |
icons-positive.width2
| status=Positive, size=Small | 16px | suggest spacing/size/2xsmall |
| status=Positive, size=Medium | 20px | suggest spacing/size/xsmall |
icons-warning.flex-shrink2
| status=Warning, size=Small | 0 | layout |
| status=Warning, size=Medium | 0 | layout |
icons-warning.height2
| status=Warning, size=Small | 16px | suggest spacing/size/2xsmall |
| status=Warning, size=Medium | 20px | suggest spacing/size/xsmall |
icons-warning.overflow2
| status=Warning, size=Small | clip | layout |
| status=Warning, size=Medium | clip | layout |
icons-warning.position2
| status=Warning, size=Small | relative | layout |
| status=Warning, size=Medium | relative | layout |
icons-warning.width2
| status=Warning, size=Small | 16px | suggest spacing/size/2xsmall |
| status=Warning, size=Medium | 20px | suggest spacing/size/xsmall |
label.gap4
| status=Default, size=Medium | 8px | spacing/gap/small |
| status=Negative, size=Medium | 8px | spacing/gap/small |
| status=Positive, size=Medium | 8px | spacing/gap/small |
| status=Warning, size=Medium | 8px | spacing/gap/small |
label.padding4
| status=Default, size=Medium | 0px | spacing/gap/none |
| status=Negative, size=Medium | 0px | spacing/gap/none |
| status=Positive, size=Medium | 0px | spacing/gap/none |
| status=Warning, size=Medium | 0px | spacing/gap/none |
label.padding-bottom4
| status=Default, size=Small | 2px | spacing/gap/3xsmall |
| status=Negative, size=Small | 2px | spacing/gap/3xsmall |
| status=Positive, size=Small | 2px | spacing/gap/3xsmall |
| status=Warning, size=Small | 2px | spacing/gap/3xsmall |
root.gap8
| status=Default, size=Small | 4px | spacing/gap/2xsmall |
| status=Negative, size=Small | 4px | spacing/gap/2xsmall |
| status=Positive, size=Small | 4px | spacing/gap/2xsmall |
| status=Warning, size=Small | 4px | spacing/gap/2xsmall |
| status=Default, size=Medium | 8px | spacing/gap/small |
| status=Negative, size=Medium | 8px | spacing/gap/small |
| status=Positive, size=Medium | 8px | spacing/gap/small |
| status=Warning, size=Medium | 8px | spacing/gap/small |
root.opacity6
| status=Negative, size=Small | 1 | opacity/solid |
| status=Positive, size=Small | 1 | opacity/solid |
| status=Warning, size=Small | 1 | opacity/solid |
| status=Negative, size=Medium | 1 | opacity/solid |
| status=Positive, size=Medium | 1 | opacity/solid |
| status=Warning, size=Medium | 1 | opacity/solid |
text.font-size8
| status=Default, size=Small | 12px | typography/label/font-size |
| status=Negative, size=Small | 12px | typography/label/font-size |
| status=Positive, size=Small | 12px | typography/label/font-size |
| status=Warning, size=Small | 12px | typography/label/font-size |
| status=Default, size=Medium | 16px | typography/body/font-size |
| status=Negative, size=Medium | 16px | typography/body/font-size |
| status=Positive, size=Medium | 16px | typography/body/font-size |
| status=Warning, size=Medium | 16px | typography/body/font-size |
text.font-weight8
| status=Default, size=Small | 500 | typography/label/font-weight/medium |
| status=Negative, size=Small | 500 | typography/label/font-weight/medium |
| status=Positive, size=Small | 500 | typography/label/font-weight/medium |
| status=Warning, size=Small | 500 | typography/label/font-weight/medium |
| status=Default, size=Medium | 500 | typography/body/font-weight/medium |
| status=Negative, size=Medium | 500 | typography/body/font-weight/medium |
| status=Positive, size=Medium | 500 | typography/body/font-weight/medium |
| status=Warning, size=Medium | 500 | typography/body/font-weight/medium |
text.letter-spacing8
| status=Default, size=Small | 0px | typography/label/letter-spacing |
| status=Negative, size=Small | 0px | typography/label/letter-spacing |
| status=Positive, size=Small | 0px | typography/label/letter-spacing |
| status=Warning, size=Small | 0px | typography/label/letter-spacing |
| status=Default, size=Medium | 0px | typography/body/letter-spacing |
| status=Negative, size=Medium | 0px | typography/body/letter-spacing |
| status=Positive, size=Medium | 0px | typography/body/letter-spacing |
| status=Warning, size=Medium | 0px | typography/body/letter-spacing |
text.line-height8
| status=Default, size=Small | 14px | typography/label/line-height |
| status=Negative, size=Small | 14px | typography/label/line-height |
| status=Positive, size=Small | 14px | typography/label/line-height |
| status=Warning, size=Small | 14px | typography/label/line-height |
| status=Default, size=Medium | 22px | typography/body/line-height |
| status=Negative, size=Medium | 22px | typography/body/line-height |
| status=Positive, size=Medium | 22px | typography/body/line-height |
| status=Warning, size=Medium | 22px | typography/body/line-height |
union.inset8
| status=Default, size=Small | 12.5% | layout |
| status=Negative, size=Small | 3.9% 3.91% 4.43% 4.43% | layout |
| status=Positive, size=Small | 3.9% 4.43% 4.43% 3.91% | layout |
| status=Warning, size=Small | 8.04% 6.89% 12.76% 5.32% | layout |
| status=Default, size=Medium | 12.5% | layout |
| status=Negative, size=Medium | 3.9% 3.91% 4.43% 4.42% | layout |
| status=Positive, size=Medium | 3.9% 4.43% 4.43% 3.91% | layout |
| status=Warning, size=Medium | 8.04% 6.88% 12.76% 5.32% | layout |
Input
A 56px text field with a floating label, an optional lock icon, a line of help text and an error state.
When to use
- Any single line of text: email, name, an amount, search.
When not to use
- Picking from a known list. That's Chip or Toggle, free text just invites typos.
- Several lines of text. There's no textarea in the kit yet.
Behaviour
Four things change it:
configuration:Emptyshows the label where you'll type.Filledmoves it up and shows the value.selected: it has focus, so the focus ring shows.error: the outline, label, help text and icons go red, and the alarm icon shows up on the right.state:Default,HoverandDisabled.
Check what people typed when they leave the field or submit, not on every key.
Accessibility
- Element: a real
<input>with a<label for>. The floating label is the label. Never aplaceholder. - Supportive Text: connected with
aria-describedby. - Error:
aria-invalid="true", and the help text says how to fix it. - Colour: an error shows as the alarm icon and the message, not only red.
- Focus: the ring shows on
:focus-visibleand when you arrive by keyboard. Never remove the outline without the ring. - Lock Icon: just decoration, unless it means read-only. If it does, set
readonlyand say so in the help text.
Content
Label: a noun, sentence case ("Email address"). Help text: one line. Before an error it's a hint, after it it's the fix ("Use at least 8 characters", not "Invalid input").
Never changes 22
| Part | Property | Value | Token |
|---|---|---|---|
| root | align-items | center | layout |
| root | display | flex | layout |
| root | position | relative | layout |
| root | gap | 8px | spacing/gap/small |
| root | height | 56px | spacing/size/large |
| root | padding-left | 12px | spacing/gap/small-medium |
| root | padding-right | 12px | spacing/gap/small-medium |
| root | padding-top | 0px | spacing/gap/none |
| root | padding-bottom | 0px | spacing/gap/none |
| root | border-radius | 12px | spacing/radius/medium |
| root | width | 208px | just the Figma frame size |
| outline | border-sides | all | layout |
| outline | position | absolute | layout |
| outline | inset | 0 | layout |
| outline | border-width | 1px | spacing/outline/small |
| outline | opacity | 1 | opacity/solid |
| outline | border-radius | 12px | spacing/radius/medium |
| left | align-items | center | layout |
| left | display | flex | layout |
| left | flex | 1 0 0 | layout |
| left | position | relative | layout |
| left | gap | 8px | suggest spacing/gap/small |
Changes by variant 172
content.align-items4
| state=Default, configuration=Empty, selected=False, error=False | flex-start | layout |
| state=Default, configuration=Empty, selected=True, error=True | flex-start | layout |
| state=Default, configuration=Filled, selected=True, error=True | flex-start | layout |
| state=Default, configuration=Filled, selected=False, error=False | flex-start | layout |
content.display4
| state=Default, configuration=Empty, selected=False, error=False | flex | layout |
| state=Default, configuration=Empty, selected=True, error=True | flex | layout |
| state=Default, configuration=Filled, selected=True, error=True | flex | layout |
| state=Default, configuration=Filled, selected=False, error=False | flex | layout |
content.flex-direction4
| state=Default, configuration=Empty, selected=False, error=False | column | layout |
| state=Default, configuration=Empty, selected=True, error=True | column | layout |
| state=Default, configuration=Filled, selected=True, error=True | column | layout |
| state=Default, configuration=Filled, selected=False, error=False | column | layout |
content.flex-shrink4
| state=Default, configuration=Empty, selected=False, error=False | 0 | layout |
| state=Default, configuration=Empty, selected=True, error=True | 0 | layout |
| state=Default, configuration=Filled, selected=True, error=True | 0 | layout |
| state=Default, configuration=Filled, selected=False, error=False | 0 | layout |
content.font-family2
| state=Default, configuration=Empty, selected=True, error=True | 'General Sans Variable' | font-family/base |
| state=Default, configuration=Filled, selected=True, error=True | 'General Sans Variable' | font-family/base |
content.position4
| state=Default, configuration=Empty, selected=False, error=False | relative | layout |
| state=Default, configuration=Empty, selected=True, error=True | relative | layout |
| state=Default, configuration=Filled, selected=True, error=True | relative | layout |
| state=Default, configuration=Filled, selected=False, error=False | relative | layout |
content.text-align2
| state=Default, configuration=Empty, selected=True, error=True | center | layout |
| state=Default, configuration=Filled, selected=True, error=True | center | layout |
content.white-space2
| state=Default, configuration=Empty, selected=True, error=True | nowrap | layout |
| state=Default, configuration=Filled, selected=True, error=True | nowrap | layout |
focus-ring.border-color2
| state=Default, configuration=Empty, selected=True, error=True | #00d669 | input/negative/focus/focus-ring |
| state=Default, configuration=Filled, selected=True, error=True | #00d669 | input/negative/focus/focus-ring |
focus-ring.border-radius2
| state=Default, configuration=Empty, selected=True, error=True | 16px | spacing/radius/large |
| state=Default, configuration=Filled, selected=True, error=True | 16px | spacing/radius/large |
focus-ring.border-sides2
| state=Default, configuration=Empty, selected=True, error=True | all | layout |
| state=Default, configuration=Filled, selected=True, error=True | all | layout |
focus-ring.border-width2
| state=Default, configuration=Empty, selected=True, error=True | 2px | spacing/outline/medium |
| state=Default, configuration=Filled, selected=True, error=True | 2px | spacing/outline/medium |
focus-ring.inset2
| state=Default, configuration=Empty, selected=True, error=True | -4px | layout |
| state=Default, configuration=Filled, selected=True, error=True | -4px | layout |
focus-ring.position2
| state=Default, configuration=Empty, selected=True, error=True | absolute | layout |
| state=Default, configuration=Filled, selected=True, error=True | absolute | layout |
icons-alarm.flex-shrink2
| state=Default, configuration=Empty, selected=True, error=True | 0 | layout |
| state=Default, configuration=Filled, selected=True, error=True | 0 | layout |
icons-alarm.height2
| state=Default, configuration=Empty, selected=True, error=True | 24px | suggest spacing/size/small |
| state=Default, configuration=Filled, selected=True, error=True | 24px | suggest spacing/size/small |
icons-alarm.overflow2
| state=Default, configuration=Empty, selected=True, error=True | clip | layout |
| state=Default, configuration=Filled, selected=True, error=True | clip | layout |
icons-alarm.position2
| state=Default, configuration=Empty, selected=True, error=True | relative | layout |
| state=Default, configuration=Filled, selected=True, error=True | relative | layout |
icons-alarm.width2
| state=Default, configuration=Empty, selected=True, error=True | 24px | suggest spacing/size/small |
| state=Default, configuration=Filled, selected=True, error=True | 24px | suggest spacing/size/small |
icons-lock.flex-shrink4
| state=Default, configuration=Empty, selected=False, error=False | 0 | layout |
| state=Default, configuration=Empty, selected=True, error=True | 0 | layout |
| state=Default, configuration=Filled, selected=True, error=True | 0 | layout |
| state=Default, configuration=Filled, selected=False, error=False | 0 | layout |
icons-lock.height4
| state=Default, configuration=Empty, selected=False, error=False | 20px | suggest spacing/size/xsmall |
| state=Default, configuration=Empty, selected=True, error=True | 20px | suggest spacing/size/xsmall |
| state=Default, configuration=Filled, selected=True, error=True | 20px | suggest spacing/size/xsmall |
| state=Default, configuration=Filled, selected=False, error=False | 20px | suggest spacing/size/xsmall |
icons-lock.overflow4
| state=Default, configuration=Empty, selected=False, error=False | clip | layout |
| state=Default, configuration=Empty, selected=True, error=True | clip | layout |
| state=Default, configuration=Filled, selected=True, error=True | clip | layout |
| state=Default, configuration=Filled, selected=False, error=False | clip | layout |
icons-lock.position4
| state=Default, configuration=Empty, selected=False, error=False | relative | layout |
| state=Default, configuration=Empty, selected=True, error=True | relative | layout |
| state=Default, configuration=Filled, selected=True, error=True | relative | layout |
| state=Default, configuration=Filled, selected=False, error=False | relative | layout |
icons-lock.width4
| state=Default, configuration=Empty, selected=False, error=False | 20px | suggest spacing/size/xsmall |
| state=Default, configuration=Empty, selected=True, error=True | 20px | suggest spacing/size/xsmall |
| state=Default, configuration=Filled, selected=True, error=True | 20px | suggest spacing/size/xsmall |
| state=Default, configuration=Filled, selected=False, error=False | 20px | suggest spacing/size/xsmall |
label.color3
| state=Default, configuration=Empty, selected=False, error=False | #999 | input/regular/default/label |
| state=Default, configuration=Empty, selected=True, error=True | #e93120 | input/negative/focus/label |
| state=Default, configuration=Filled, selected=True, error=True | #e93120 | input/negative/focus/label |
label.flex-shrink3
| state=Default, configuration=Empty, selected=False, error=False | 0 | layout |
| state=Default, configuration=Empty, selected=True, error=True | 0 | layout |
| state=Default, configuration=Filled, selected=True, error=True | 0 | layout |
label.font-family1
| state=Default, configuration=Empty, selected=False, error=False | 'General Sans Variable' | font-family/base |
label.font-size3
| state=Default, configuration=Empty, selected=False, error=False | 16px | typography/body/font-size |
| state=Default, configuration=Empty, selected=True, error=True | 10px | typography/placeholder/font-size |
| state=Default, configuration=Filled, selected=True, error=True | 10px | typography/placeholder/font-size |
label.font-weight3
| state=Default, configuration=Empty, selected=False, error=False | 400 | typography/body/font-weight/regular |
| state=Default, configuration=Empty, selected=True, error=True | 400 | typography/label/font-weight/regular |
| state=Default, configuration=Filled, selected=True, error=True | 400 | typography/label/font-weight/regular |
label.letter-spacing3
| state=Default, configuration=Empty, selected=False, error=False | 0px | typography/body/letter-spacing |
| state=Default, configuration=Empty, selected=True, error=True | 0px | typography/placeholder/letter-spacing |
| state=Default, configuration=Filled, selected=True, error=True | 0px | typography/placeholder/letter-spacing |
label.line-height3
| state=Default, configuration=Empty, selected=False, error=False | 22px | typography/body/line-height |
| state=Default, configuration=Empty, selected=True, error=True | 12px | typography/placeholder/line-height |
| state=Default, configuration=Filled, selected=True, error=True | 12px | typography/placeholder/line-height |
label.position3
| state=Default, configuration=Empty, selected=False, error=False | relative | layout |
| state=Default, configuration=Empty, selected=True, error=True | relative | layout |
| state=Default, configuration=Filled, selected=True, error=True | relative | layout |
label.text-align1
| state=Default, configuration=Empty, selected=False, error=False | center | layout |
label.white-space1
| state=Default, configuration=Empty, selected=False, error=False | nowrap | layout |
outline.background14
| state=Default, configuration=Empty, selected=False, error=False | #060805 | input/regular/default/background |
| state=Hover, configuration=Empty, selected=False, error=False | #060805 | input/regular/default/background |
| state=Default, configuration=Empty, selected=True, error=False | #060805 | input/regular/default/background |
| state=Disabled, configuration=Empty, selected=False, error=False | #060805 | input/regular/default/background |
| state=Default, configuration=Empty, selected=False, error=True | #060805 | input/regular/default/background |
| state=Default, configuration=Filled, selected=False, error=True | #060805 | input/regular/default/background |
| state=Default, configuration=Empty, selected=True, error=True | #060805 | input/negative/focus/background |
| state=Default, configuration=Filled, selected=True, error=True | #060805 | input/negative/focus/background |
| state=Hover, configuration=Empty, selected=False, error=True | #060805 | input/regular/default/background |
| state=Hover, configuration=Filled, selected=False, error=True | #060805 | input/regular/default/background |
| state=Default, configuration=Filled, selected=False, error=False | #060805 | input/regular/default/background |
| state=Disabled, configuration=Filled, selected=False, error=False | #060805 | input/regular/default/background |
| state=Default, configuration=Filled, selected=True, error=False | #060805 | input/regular/default/background |
| state=Hover, configuration=Filled, selected=False, error=False | #060805 | input/regular/default/background |
outline.border-color14
| state=Default, configuration=Empty, selected=False, error=False | #555 | input/regular/default/outline |
| state=Hover, configuration=Empty, selected=False, error=False | #555 | input/regular/default/outline |
| state=Default, configuration=Empty, selected=True, error=False | #555 | input/regular/default/outline |
| state=Disabled, configuration=Empty, selected=False, error=False | #555 | input/regular/default/outline |
| state=Default, configuration=Empty, selected=False, error=True | #555 | input/regular/default/outline |
| state=Default, configuration=Filled, selected=False, error=True | #555 | input/regular/default/outline |
| state=Default, configuration=Empty, selected=True, error=True | #f2705f | input/negative/focus/outline |
| state=Default, configuration=Filled, selected=True, error=True | #f2705f | input/negative/focus/outline |
| state=Hover, configuration=Empty, selected=False, error=True | #555 | input/regular/default/outline |
| state=Hover, configuration=Filled, selected=False, error=True | #555 | input/regular/default/outline |
| state=Default, configuration=Filled, selected=False, error=False | #555 | input/regular/default/outline |
| state=Disabled, configuration=Filled, selected=False, error=False | #555 | input/regular/default/outline |
| state=Default, configuration=Filled, selected=True, error=False | #555 | input/regular/default/outline |
| state=Hover, configuration=Filled, selected=False, error=False | #555 | input/regular/default/outline |
right.align-items2
| state=Default, configuration=Empty, selected=True, error=True | center | layout |
| state=Default, configuration=Filled, selected=True, error=True | center | layout |
right.display2
| state=Default, configuration=Empty, selected=True, error=True | flex | layout |
| state=Default, configuration=Filled, selected=True, error=True | flex | layout |
right.flex-shrink2
| state=Default, configuration=Empty, selected=True, error=True | 0 | layout |
| state=Default, configuration=Filled, selected=True, error=True | 0 | layout |
right.position2
| state=Default, configuration=Empty, selected=True, error=True | relative | layout |
| state=Default, configuration=Filled, selected=True, error=True | relative | layout |
supportive-text.align-items3
| state=Default, configuration=Empty, selected=False, error=False | center | layout |
| state=Default, configuration=Empty, selected=True, error=True | center | layout |
| state=Default, configuration=Filled, selected=True, error=True | center | layout |
supportive-text.display3
| state=Default, configuration=Empty, selected=False, error=False | flex | layout |
| state=Default, configuration=Empty, selected=True, error=True | flex | layout |
| state=Default, configuration=Filled, selected=True, error=True | flex | layout |
supportive-text.justify-content3
| state=Default, configuration=Empty, selected=False, error=False | center | layout |
| state=Default, configuration=Empty, selected=True, error=True | center | layout |
| state=Default, configuration=Filled, selected=True, error=True | center | layout |
supportive-text.position3
| state=Default, configuration=Empty, selected=False, error=False | absolute | layout |
| state=Default, configuration=Empty, selected=True, error=True | absolute | layout |
| state=Default, configuration=Filled, selected=True, error=True | absolute | layout |
text.color3
| state=Default, configuration=Empty, selected=False, error=False | #999 | input/regular/default/supportive |
| state=Default, configuration=Empty, selected=True, error=True | #ededed | input/negative/focus/value |
| state=Default, configuration=Filled, selected=True, error=True | #ededed | input/negative/focus/value |
text.flex-shrink3
| state=Default, configuration=Empty, selected=False, error=False | 0 | layout |
| state=Default, configuration=Empty, selected=True, error=True | 0 | layout |
| state=Default, configuration=Filled, selected=True, error=True | 0 | layout |
text.font-family1
| state=Default, configuration=Empty, selected=False, error=False | 'General Sans Variable' | font-family/base |
text.font-size3
| state=Default, configuration=Empty, selected=False, error=False | 10px | typography/placeholder/font-size |
| state=Default, configuration=Empty, selected=True, error=True | 16px | typography/body/font-size |
| state=Default, configuration=Filled, selected=True, error=True | 16px | typography/body/font-size |
text.font-weight3
| state=Default, configuration=Empty, selected=False, error=False | 500 | typography/label/font-weight/medium |
| state=Default, configuration=Empty, selected=True, error=True | 400 | typography/body/font-weight/regular |
| state=Default, configuration=Filled, selected=True, error=True | 400 | typography/body/font-weight/regular |
text.letter-spacing3
| state=Default, configuration=Empty, selected=False, error=False | 0px | typography/placeholder/letter-spacing |
| state=Default, configuration=Empty, selected=True, error=True | 0px | typography/body/letter-spacing |
| state=Default, configuration=Filled, selected=True, error=True | 0px | typography/body/letter-spacing |
text.line-height3
| state=Default, configuration=Empty, selected=False, error=False | 12px | typography/placeholder/line-height |
| state=Default, configuration=Empty, selected=True, error=True | 22px | typography/body/line-height |
| state=Default, configuration=Filled, selected=True, error=True | 22px | typography/body/line-height |
text.position3
| state=Default, configuration=Empty, selected=False, error=False | relative | layout |
| state=Default, configuration=Empty, selected=True, error=True | relative | layout |
| state=Default, configuration=Filled, selected=True, error=True | relative | layout |
text.text-align1
| state=Default, configuration=Empty, selected=False, error=False | center | layout |
text.white-space1
| state=Default, configuration=Empty, selected=False, error=False | nowrap | layout |
union.inset4
| state=Default, configuration=Empty, selected=False, error=False | 8.33% 16.67% | layout |
| state=Default, configuration=Empty, selected=True, error=True | 8.33% 16.67% | layout |
| state=Default, configuration=Filled, selected=True, error=True | 8.33% 16.67% | layout |
| state=Default, configuration=Filled, selected=False, error=False | 8.33% 16.67% | layout |
union.position4
| state=Default, configuration=Empty, selected=False, error=False | absolute | layout |
| state=Default, configuration=Empty, selected=True, error=True | absolute | layout |
| state=Default, configuration=Filled, selected=True, error=True | absolute | layout |
| state=Default, configuration=Filled, selected=False, error=False | absolute | layout |
Lock frame effect
An 8px blur over a locked project's thumbnail, the blurred view behind the lock.
- root
- Whatever the style is applied to: the frame of a locked project thumbnail, the blurred view behind the lock.
When to use
- On the thumbnail of a locked project (NDA, password), together with the lock icon.
When not to use
- Loading or disabled states. Blur says "hidden", not "wait".
Behaviour
filter: blur(8px) blurs the element's own content. Thumb is the opposite: it blurs what's behind it. In Figma the blur is tied to spacing/base-8, which isn't in tokens.css, so the code uses --effect-lock-frame instead.
Accessibility
- Name: say it's locked in words ("Locked case study"). Blur and an icon aren't enough.
- Content: blurred text is still in the page for anyone who looks. Don't blur confidential copy, show a placeholder.
Never changes 1
| Part | Property | Value | Token |
|---|---|---|---|
| root | filter | blur(8px) | effect/lock-frame |
Paper effect
The sheet of dots behind runceanu.com's hero. It reacts to the cursor, the buttons and clicks, and never moves by itself.
- sheet
- A canvas of dots behind the hero. A CSS mask shapes it: on runceanu.com that's a 1104px circle centred on the hero text (a 552px radial gradient, solid to 40%, gone by 92%). It's sized so the dot grid lines up with the content, not the container. When nothing's happening it costs one still frame, and with reduced motion you get the still sheet and none of what's below.
- dot
- One point on the grid. It never moves by itself, it only reacts (to the lens, the ripple, the pen). The paper should never twinkle.
- lens
- The dome every behaviour shares. It has three sources: the cursor (the magnifier), the button halo (hover a hero button and a lens rises under its centre, as if the button presses into the paper), and press ink (press down and the sheet dents, fast going in and slow coming back). Each dot looks at all three and the strongest wins, so lenses never add up. Dots inside grow and get pushed outward. They never multiply and never change shape.
- ripple
- A ring (a soft band, about 1.8s) that crosses the sheet from the middle. It's triggered by the availability dot's own pulse, every second beat: so every 8s, in step with it, never on a timer of its own. It only runs while the hero is on screen.
- pen
- Every 7 to 8 seconds the pen sketches one kit component in 2px lines (colour `non-interactive/foreground/secondary` at the ink opacity). It draws line by line (about 1.6s), holds (about 3s), then fades. The rule of the grid: outer shapes follow the dot rows and columns exactly, start on a dot, measure in whole cells, and round their corners between dots. Small inner details (a check, an x, a knob, bars, a caret) keep their natural shape. Every point of a line moves with the lens, so the ink bulges like the dots do. One sketch at a time.
When to use
- Behind the home hero, and only there. It's the site's signature, and using it twice waters it down.
When not to use
- Behind dense content or forms. At small sizes the dots fight with the text.
Behaviour
The dots only ever react, through the lens, the ripple and the pen described in the parts. They never animate on their own. Everything snaps to the 16px grid. When nothing happens it's one still frame, and it only runs while the hero is on screen.
Accessibility
- Decorative: the canvas is
aria-hidden="true"and never takes focus. - Motion: with
prefers-reduced-motionyou get the still sheet, and none of the movement.
Never changes 13
| Part | Property | Value | Token |
|---|---|---|---|
| sheet | pitch | 16px | spacing/gap/medium |
| sheet | dot-opacity | 0.16 | opacity/soft |
| sheet | background | #060805 | non-interactive/background/primary |
| dot | radius | 1px | on purpose: Dot geometry, tuned to the 16px pitch; not a reusable decision. |
| lens | radius | 210px | on purpose: Motion tuning parameter of the lens field. |
| lens | push | 9px | on purpose: Motion tuning parameter of the lens field. |
| lens | accent | #00d669 | actions/primary/default/background |
| lens | cursor | radius 210px, power 1.0 | on purpose: Motion tuning parameter (radius and falloff power). |
| lens | halo | radius 240px, power 1.3 | on purpose: Motion tuning parameter (radius and falloff power). |
| lens | press | radius 330px, power 1.7 | on purpose: Motion tuning parameter (radius and falloff power). |
| pen | ink-opacity | 0.32 | opacity/mild |
| pen | stroke-width | 2px | spacing/outline/medium |
| pen | cadence | 7-8s between sketches | on purpose: Timing of the sketch loop; a motion token group does not exist yet. |
PillButton
A 48px button with an icon in front of the label. My main call to action.
When to use
- When an icon helps people get it faster: a back arrow, an external link, a download.
- The calls to action in heroes and sections on runceanu.com.
When not to use
- When the icon is just decoration. Drop it and use Button.
- When there's no room for the label. Use IconButton, never a PillButton with its label hidden.
Behaviour
Same types and states as Button: Primary, Secondary, Tertiary, Borderless. States come from the browser, not from props. The icon sits in a 20px slot (icons-arrow-left in Figma) and takes the label's colour.
Accessibility
- Element:
<button>, or<a>when it takes you somewhere. A pill that navigates is still a link. - Name: the label. The icon is
aria-hidden="true". - Keyboard: Enter, and Space for buttons.
- Focus:
focus-ring, on:focus-visible.
Content
A short verb phrase, sentence case. The icon has to match the words: an arrow pointing left only on "Back".
Never changes 23
| Part | Property | Value | Token |
|---|---|---|---|
| root | justify-content | center | layout |
| root | align-items | center | layout |
| root | display | flex | layout |
| root | position | relative | layout |
| root | gap | 8px | spacing/gap/small |
| root | height | 48px | spacing/size/medium-large |
| root | border-radius | 10000px | spacing/radius/full |
| icons-arrow-left | overflow | clip | layout |
| icons-arrow-left | flex-shrink | 0 | layout |
| icons-arrow-left | position | relative | layout |
| icons-arrow-left | width | 20px | suggest spacing/size/xsmall |
| icons-arrow-left | height | 20px | suggest spacing/size/xsmall |
| union | position | absolute | layout |
| union | inset | 20.84% 16.66% 20.83% 18.4% | layout |
| label | flex-shrink | 0 | layout |
| label | white-space | nowrap | layout |
| label | text-align | center | layout |
| label | position | relative | layout |
| label | font-family | 'General Sans Variable' | font-family/base |
| label | font-weight | 500 | typography/body/font-weight/medium |
| label | line-height | 22px | typography/body/line-height |
| label | font-size | 16px | typography/body/font-size |
| label | letter-spacing | 0px | typography/body/letter-spacing |
Changes by variant 185
background.background9
| type=Tertiary, state=Hover | #060805 | actions/tertiary/hover/background |
| type=Tertiary, state=Pressed | #454545 | actions/tertiary/pressed/background |
| type=Borderless, state=Hover | #060805 | actions/tertiary/hover/background |
| type=Borderless, state=Pressed | #454545 | actions/tertiary/pressed/background |
| type=Secondary, state=Default | #3a3a3a | actions/secondary/regular/default/background |
| type=Secondary, state=Hover | #747573 | actions/secondary/regular/hover/background |
| type=Secondary, state=Pressed | #999 | actions/secondary/regular/pressed/background |
| type=Secondary, state=Disabled | #3a3a3a | actions/secondary/regular/disabled/background |
| type=Secondary, state=Focus | #3a3a3a | actions/secondary/regular/focus/background |
background.border-color5
| type=Secondary, state=Default | #ededed | actions/secondary/regular/default/outline |
| type=Secondary, state=Hover | #ededed | actions/secondary/regular/hover/outline |
| type=Secondary, state=Pressed | #ededed | actions/secondary/regular/pressed/outline |
| type=Secondary, state=Disabled | #ededed | actions/secondary/regular/disabled/outline |
| type=Secondary, state=Focus | #ededed | actions/secondary/regular/focus/outline |
background.border-radius7
| type=Tertiary, state=Hover | 10000px | spacing/radius/full |
| type=Tertiary, state=Pressed | 10000px | spacing/radius/full |
| type=Secondary, state=Default | 10000px | spacing/radius/full |
| type=Secondary, state=Hover | 10000px | spacing/radius/full |
| type=Secondary, state=Pressed | 10000px | spacing/radius/full |
| type=Secondary, state=Disabled | 10000px | spacing/radius/full |
| type=Secondary, state=Focus | 10000px | spacing/radius/full |
background.border-sides5
| type=Secondary, state=Default | left top | layout |
| type=Secondary, state=Hover | left top | layout |
| type=Secondary, state=Pressed | left top | layout |
| type=Secondary, state=Disabled | left top | layout |
| type=Secondary, state=Focus | left top | layout |
background.inset9
| type=Tertiary, state=Hover | 0 | layout |
| type=Tertiary, state=Pressed | 0 | layout |
| type=Borderless, state=Hover | 0 | layout |
| type=Borderless, state=Pressed | 0 | layout |
| type=Secondary, state=Default | 0 | layout |
| type=Secondary, state=Hover | 0 | layout |
| type=Secondary, state=Pressed | 0 | layout |
| type=Secondary, state=Disabled | 0 | layout |
| type=Secondary, state=Focus | 0 | layout |
background.opacity9
| type=Tertiary, state=Hover | 0.32 | opacity/mild |
| type=Tertiary, state=Pressed | 0.32 | opacity/mild |
| type=Borderless, state=Hover | 0.32 | opacity/mild |
| type=Borderless, state=Pressed | 0.32 | opacity/mild |
| type=Secondary, state=Default | 0.24 | opacity/gentle |
| type=Secondary, state=Hover | 0.32 | opacity/mild |
| type=Secondary, state=Pressed | 0.32 | opacity/mild |
| type=Secondary, state=Disabled | 0.32 | opacity/mild |
| type=Secondary, state=Focus | 0.24 | opacity/gentle |
background.position9
| type=Tertiary, state=Hover | absolute | layout |
| type=Tertiary, state=Pressed | absolute | layout |
| type=Borderless, state=Hover | absolute | layout |
| type=Borderless, state=Pressed | absolute | layout |
| type=Secondary, state=Default | absolute | layout |
| type=Secondary, state=Hover | absolute | layout |
| type=Secondary, state=Pressed | absolute | layout |
| type=Secondary, state=Disabled | absolute | layout |
| type=Secondary, state=Focus | absolute | layout |
focus-ring.border-color4
| type=Primary, state=Focus | #b6ffda | actions/primary/focus/focus-ring |
| type=Tertiary, state=Focus | #999 | actions/secondary/regular/focus/focus-ring |
| type=Borderless, state=Focus | #999 | actions/secondary/regular/focus/focus-ring |
| type=Secondary, state=Focus | #999 | actions/secondary/regular/focus/focus-ring |
focus-ring.border-radius3
| type=Primary, state=Focus | 10000px | spacing/radius/full |
| type=Tertiary, state=Focus | 10000px | spacing/radius/full |
| type=Secondary, state=Focus | 10000px | spacing/radius/full |
focus-ring.border-sides4
| type=Primary, state=Focus | all | layout |
| type=Tertiary, state=Focus | all | layout |
| type=Borderless, state=Focus | all | layout |
| type=Secondary, state=Focus | all | layout |
focus-ring.border-width4
| type=Primary, state=Focus | 2px | spacing/outline/medium |
| type=Tertiary, state=Focus | 2px | spacing/outline/medium |
| type=Borderless, state=Focus | 2px | spacing/outline/medium |
| type=Secondary, state=Focus | 2px | spacing/outline/medium |
focus-ring.inset4
| type=Primary, state=Focus | -5px -4px -4px -5px | layout |
| type=Tertiary, state=Focus | -4px | layout |
| type=Borderless, state=Focus | -4px | layout |
| type=Secondary, state=Focus | -4px | layout |
focus-ring.position4
| type=Primary, state=Focus | absolute | layout |
| type=Tertiary, state=Focus | absolute | layout |
| type=Borderless, state=Focus | absolute | layout |
| type=Secondary, state=Focus | absolute | layout |
label.color20
| type=Primary, state=Default | #060805 | actions/primary/default/label |
| type=Primary, state=Hover | #060805 | actions/primary/hover/label |
| type=Primary, state=Focus | #060805 | actions/primary/focus/label |
| type=Primary, state=Pressed | #060805 | actions/primary/pressed/label |
| type=Primary, state=Disabled | #060805 | actions/primary/disabled/label |
| type=Tertiary, state=Default | #d3d9d5 | actions/tertiary/default/label |
| type=Tertiary, state=Hover | #ededed | actions/tertiary/hover/label |
| type=Tertiary, state=Pressed | #d3d9d5 | actions/tertiary/pressed/label |
| type=Tertiary, state=Disabled | #d3d9d5 | actions/tertiary/disabled/label |
| type=Tertiary, state=Focus | #d3d9d5 | actions/tertiary/focus/label |
| type=Borderless, state=Default | #d3d9d5 | actions/tertiary/default/label |
| type=Borderless, state=Hover | #ededed | actions/tertiary/hover/label |
| type=Borderless, state=Pressed | #d3d9d5 | actions/tertiary/pressed/label |
| type=Borderless, state=Disabled | #d3d9d5 | actions/tertiary/disabled/label |
| type=Borderless, state=Focus | #d3d9d5 | actions/tertiary/focus/label |
| type=Secondary, state=Default | #d3d9d5 | actions/secondary/regular/default/label |
| type=Secondary, state=Hover | #ededed | actions/secondary/regular/hover/label |
| type=Secondary, state=Pressed | #d3d9d5 | actions/secondary/regular/pressed/label |
| type=Secondary, state=Disabled | #d3d9d5 | actions/secondary/regular/disabled/label |
| type=Secondary, state=Focus | #d3d9d5 | actions/secondary/regular/focus/label |
root.background5
| type=Primary, state=Default | #00d669 | actions/primary/default/background |
| type=Primary, state=Hover | #00b450 | actions/primary/hover/background |
| type=Primary, state=Focus | #00d669 | actions/primary/focus/background |
| type=Primary, state=Pressed | #00913a | actions/primary/pressed/background |
| type=Primary, state=Disabled | #00d669 | actions/primary/disabled/background |
root.border-color5
| type=Primary, state=Default | rgba(237,237,237,0.64) | actions/primary/default/outline |
| type=Primary, state=Hover | rgba(237,237,237,0.64) | actions/primary/hover/outline |
| type=Primary, state=Focus | rgba(237,237,237,0.64) | actions/primary/focus/outline |
| type=Primary, state=Pressed | rgba(237,237,237,0.64) | actions/primary/pressed/outline |
| type=Primary, state=Disabled | rgba(237,237,237,0.64) | actions/primary/disabled/outline |
root.border-sides5
| type=Primary, state=Default | left top | layout |
| type=Primary, state=Hover | left top | layout |
| type=Primary, state=Focus | left top | layout |
| type=Primary, state=Pressed | left top | layout |
| type=Primary, state=Disabled | left top | layout |
root.border-top-width5
| type=Primary, state=Default | 1px | spacing/outline/small |
| type=Primary, state=Hover | 1px | spacing/outline/small |
| type=Primary, state=Focus | 1px | spacing/outline/small |
| type=Primary, state=Pressed | 1px | spacing/outline/small |
| type=Primary, state=Disabled | 1px | spacing/outline/small |
root.opacity4
| type=Primary, state=Disabled | 0.24 | opacity/gentle |
| type=Tertiary, state=Disabled | 0.24 | opacity/gentle |
| type=Borderless, state=Disabled | 0.24 | opacity/gentle |
| type=Secondary, state=Disabled | 0.24 | opacity/gentle |
root.padding5
| type=Borderless, state=Default | 0px | spacing/gap/none |
| type=Borderless, state=Hover | 0px | spacing/gap/none |
| type=Borderless, state=Pressed | 0px | spacing/gap/none |
| type=Borderless, state=Disabled | 0px | spacing/gap/none |
| type=Borderless, state=Focus | 0px | spacing/gap/none |
root.padding-bottom15
| type=Primary, state=Default | 0px | spacing/gap/none |
| type=Primary, state=Hover | 0px | spacing/gap/none |
| type=Primary, state=Focus | 0px | spacing/gap/none |
| type=Primary, state=Pressed | 0px | spacing/gap/none |
| type=Primary, state=Disabled | 0px | spacing/gap/none |
| type=Tertiary, state=Default | 0px | spacing/gap/none |
| type=Tertiary, state=Hover | 0px | spacing/gap/none |
| type=Tertiary, state=Pressed | 0px | spacing/gap/none |
| type=Tertiary, state=Disabled | 0px | spacing/gap/none |
| type=Tertiary, state=Focus | 0px | spacing/gap/none |
| type=Secondary, state=Default | 0px | spacing/gap/none |
| type=Secondary, state=Hover | 0px | spacing/gap/none |
| type=Secondary, state=Pressed | 0px | spacing/gap/none |
| type=Secondary, state=Disabled | 0px | spacing/gap/none |
| type=Secondary, state=Focus | 0px | spacing/gap/none |
root.padding-left15
| type=Primary, state=Default | 20px | spacing/gap/medium-large |
| type=Primary, state=Hover | 20px | spacing/gap/medium-large |
| type=Primary, state=Focus | 20px | spacing/gap/medium-large |
| type=Primary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Primary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Default | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Hover | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Focus | 20px | spacing/gap/medium-large |
| type=Secondary, state=Default | 20px | spacing/gap/medium-large |
| type=Secondary, state=Hover | 20px | spacing/gap/medium-large |
| type=Secondary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Secondary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Secondary, state=Focus | 20px | spacing/gap/medium-large |
root.padding-right15
| type=Primary, state=Default | 20px | spacing/gap/medium-large |
| type=Primary, state=Hover | 20px | spacing/gap/medium-large |
| type=Primary, state=Focus | 20px | spacing/gap/medium-large |
| type=Primary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Primary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Default | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Hover | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Tertiary, state=Focus | 20px | spacing/gap/medium-large |
| type=Secondary, state=Default | 20px | spacing/gap/medium-large |
| type=Secondary, state=Hover | 20px | spacing/gap/medium-large |
| type=Secondary, state=Pressed | 20px | spacing/gap/medium-large |
| type=Secondary, state=Disabled | 20px | spacing/gap/medium-large |
| type=Secondary, state=Focus | 20px | spacing/gap/medium-large |
root.padding-top15
| type=Primary, state=Default | 0px | spacing/gap/none |
| type=Primary, state=Hover | 0px | spacing/gap/none |
| type=Primary, state=Focus | 0px | spacing/gap/none |
| type=Primary, state=Pressed | 0px | spacing/gap/none |
| type=Primary, state=Disabled | 0px | spacing/gap/none |
| type=Tertiary, state=Default | 0px | spacing/gap/none |
| type=Tertiary, state=Hover | 0px | spacing/gap/none |
| type=Tertiary, state=Pressed | 0px | spacing/gap/none |
| type=Tertiary, state=Disabled | 0px | spacing/gap/none |
| type=Tertiary, state=Focus | 0px | spacing/gap/none |
| type=Secondary, state=Default | 0px | spacing/gap/none |
| type=Secondary, state=Hover | 0px | spacing/gap/none |
| type=Secondary, state=Pressed | 0px | spacing/gap/none |
| type=Secondary, state=Disabled | 0px | spacing/gap/none |
| type=Secondary, state=Focus | 0px | spacing/gap/none |
Projects
One row in the project list: number, name, and industry, type and period on the right.
Never changes 54
| Part | Property | Value | Token |
|---|---|---|---|
| root | align-items | center | layout |
| root | display | flex | layout |
| root | position | relative | layout |
| root | gap | 40px | spacing/gap/2xlarge |
| root | padding-top | 24px | spacing/gap/large |
| root | padding-bottom | 24px | spacing/gap/large |
| root | width | 976px | just the Figma frame size |
| left | align-items | center | layout |
| left | display | flex | layout |
| left | flex | 1 0 0 | layout |
| left | position | relative | layout |
| left | gap | 40px | suggest spacing/gap/2xlarge |
| label | flex-shrink | 0 | layout |
| label | position | relative | layout |
| label | font-family | 'General Sans Variable' | font-family/base |
| label | font-weight | 400 | typography/label/font-weight/regular |
| label | line-height | 14px | typography/label/line-height |
| label | font-size | 12px | typography/label/font-size |
| label | letter-spacing | 0px | typography/label/letter-spacing |
| text | flex-shrink | 0 | layout |
| text | position | relative | layout |
| text | font-family | 'General Sans Variable' | font-family/base |
| text | font-weight | 500 | typography/sub-headline/font-weight/medium |
| text | line-height | 48px | typography/sub-headline/line-height |
| text | font-size | 40px | typography/sub-headline/font-size |
| text | letter-spacing | 0px | typography/sub-headline/letter-spacing |
| right | align-items | center | layout |
| right | display | flex | layout |
| right | flex-shrink | 0 | layout |
| right | height | 100% | layout |
| right | justify-content | flex-end | layout |
| right | position | relative | layout |
| right | gap | 16px | spacing/gap/medium |
| icons-dot | position | absolute | layout |
| icons-dot | inset | 0 | layout |
| icons-dot | flex-shrink | 0 | layout |
| icons-dot | width | 12px | suggest spacing/size/3xsmall |
| icons-dot | height | 12px | suggest spacing/size/3xsmall |
| -actions | justify-content | center | layout |
| -actions | align-items | center | layout |
| -actions | display | flex | layout |
| -actions | flex-shrink | 0 | layout |
| -actions | position | relative | layout |
| -actions | gap | 8px | spacing/gap/small |
| -actions | padding | 0px | spacing/gap/none |
| -actions | border-radius | 10000px | spacing/radius/full |
| -actions | width | 32px | suggest spacing/size/small-medium |
| -actions | height | 32px | suggest spacing/size/small-medium |
| icons-arrow-left | position | absolute | layout |
| icons-arrow-left | inset | 0 | layout |
| icons-arrow-left | flex-shrink | 0 | layout |
| icons-arrow-left | width | 16px | suggest spacing/size/2xsmall |
| icons-arrow-left | height | 16px | suggest spacing/size/2xsmall |
| outline | position | absolute | layout |
Changes by variant 58
-actions.opacity1
| state=Disabled | 0.24 | opacity/gentle |
badge.align-items1
| state=Disabled | center | layout |
badge.border-radius1
| state=Disabled | 10000px | spacing/radius/full |
badge.display1
| state=Disabled | flex | layout |
badge.flex-shrink1
| state=Disabled | 0 | layout |
badge.gap1
| state=Disabled | 2px | spacing/gap/3xsmall |
badge.height1
| state=Disabled | 24px | suggest spacing/size/small |
badge.padding-bottom1
| state=Disabled | 2px | spacing/gap/3xsmall |
badge.padding-left1
| state=Disabled | 8px | spacing/gap/small |
badge.padding-right1
| state=Disabled | 8px | spacing/gap/small |
badge.padding-top1
| state=Disabled | 0px | spacing/gap/none |
badge.position1
| state=Disabled | relative | layout |
focus-ring.border-color1
| state=Focus | #999 | project/focus/focus-ring |
focus-ring.border-sides1
| state=Focus | all | layout |
focus-ring.border-width1
| state=Focus | 2px | spacing/outline/medium |
focus-ring.inset1
| state=Focus | -4px | layout |
focus-ring.position1
| state=Focus | absolute | layout |
icons-lock.flex-shrink1
| state=Locked | 0 | layout |
icons-lock.height1
| state=Locked | 24px | suggest spacing/size/small |
icons-lock.inset1
| state=Locked | 0 | layout |
icons-lock.position1
| state=Locked | absolute | layout |
icons-lock.width1
| state=Locked | 24px | suggest spacing/size/small |
label.color4
| state=Focus | #999 | project/default/sub-label |
| state=Disabled | #999 | project/default/sub-label |
| state=Default | #999 | project/default/sub-label |
| state=Locked | #999 | project/lock/sub-label |
label.opacity1
| state=Disabled | 0.24 | opacity/gentle |
label.white-space2
| state=Disabled | nowrap | layout |
| state=Locked | nowrap | layout |
left.color2
| state=Hover | #00d669 | project/hover/label |
| state=Pressed | #00d669 | project/pressed/label |
left.white-space4
| state=Hover | nowrap | layout |
| state=Focus | nowrap | layout |
| state=Pressed | nowrap | layout |
| state=Default | nowrap | layout |
outline.background6
| state=Hover | #00d669 | project/hover/outline |
| state=Focus | #3a3a3a | project/focus/outline |
| state=Pressed | #10ffa4 | project/pressed/outline |
| state=Disabled | #3a3a3a | project/disabled/outline |
| state=Default | #3a3a3a | project/default/outline |
| state=Locked | #3a3a3a | project/lock/outline |
outline.height1
| state=Hover | 2px | suggest spacing/outline/medium |
outline.opacity1
| state=Disabled | 0.24 | opacity/gentle |
right.opacity1
| state=Disabled | 0.24 | opacity/gentle |
root.opacity1
| state=Disabled | 1 | opacity/solid |
root.padding-left3
| state=Hover | 16px | spacing/gap/medium |
| state=Focus | 0px | spacing/gap/none |
| state=Pressed | 16px | spacing/gap/medium |
root.padding-right3
| state=Hover | 0px | spacing/gap/none |
| state=Focus | 0px | spacing/gap/none |
| state=Pressed | 0px | spacing/gap/none |
text.color4
| state=Focus | #d3d9d5 | project/default/label |
| state=Disabled | #d3d9d5 | project/default/label |
| state=Default | #d3d9d5 | project/default/label |
| state=Locked | #d3d9d5 | project/lock/label |
text.opacity1
| state=Disabled | 0.24 | opacity/gentle |
text.white-space2
| state=Disabled | nowrap | layout |
| state=Locked | nowrap | layout |
Tag
A compact 20px label with small corners, for what a piece of content is about.
When to use
- Saying what something is about: a case study's discipline, a project's platform.
When not to use
- A status: Badge. A filter: Chip.
Behaviour
One type (Primary) and five states. The hover and press states are there for tags that link to a filtered list. A tag that doesn't go anywhere shouldn't have them.
Accessibility
- Static: a
<span>, or<li>items in a<ul>when there are a few. - Linking: an
<a>whose name gives the context ("Projects tagged Fintech"). - Focus:
focus-ring, only on tags that link.
Content
One word if you can. Capitals only for proper nouns.
Never changes 21
| Part | Property | Value | Token |
|---|---|---|---|
| root | justify-content | center | layout |
| root | align-items | center | layout |
| root | display | flex | layout |
| root | position | relative | layout |
| root | gap | 8px | spacing/gap/small |
| root | height | 20px | spacing/size/xsmall |
| root | padding-bottom | 2px | spacing/gap/3xsmall |
| root | padding-top | 0px | spacing/gap/none |
| root | padding-left | 8px | spacing/gap/small |
| root | padding-right | 8px | spacing/gap/small |
| root | border-radius | 4px | spacing/radius/xsmall |
| label | flex-shrink | 0 | layout |
| label | white-space | nowrap | layout |
| label | text-align | center | layout |
| label | position | relative | layout |
| label | font-family | 'General Sans Variable' | font-family/base |
| label | font-weight | 500 | typography/label/font-weight/medium |
| label | line-height | 14px | typography/label/line-height |
| label | color | #d3d9d5 | actions/secondary/regular/default/label |
| label | font-size | 12px | typography/label/font-size |
| label | letter-spacing | 0px | typography/label/letter-spacing |
Changes by variant 52
focus-ring.border-color1
| type=Primary, state=Focus | #999 | actions/secondary/regular/focus/focus-ring |
focus-ring.border-radius1
| type=Primary, state=Focus | 8px | spacing/radius/small |
focus-ring.border-sides1
| type=Primary, state=Focus | all | layout |
focus-ring.border-width1
| type=Primary, state=Focus | 2px | spacing/outline/medium |
focus-ring.inset1
| type=Primary, state=Focus | -4px | layout |
focus-ring.position1
| type=Primary, state=Focus | absolute | layout |
root.background5
| type=Primary, state=Default | #3a3a3a | actions/secondary/regular/default/background |
| type=Primary, state=Hover | #747573 | actions/secondary/regular/hover/background |
| type=Primary, state=Pressed | #999 | actions/secondary/regular/pressed/background |
| type=Primary, state=Disabled | #3a3a3a | actions/secondary/regular/disabled/background |
| type=Primary, state=Focus | #3a3a3a | actions/secondary/regular/focus/background |
root.opacity1
| type=Primary, state=Disabled | 0.24 | opacity/gentle |
text.color4
| type=Primary, state=Hover | #ededed | actions/secondary/regular/hover/label |
| type=Primary, state=Pressed | #d3d9d5 | actions/secondary/regular/pressed/label |
| type=Primary, state=Disabled | #d3d9d5 | actions/secondary/regular/disabled/label |
| type=Primary, state=Focus | #d3d9d5 | actions/secondary/regular/focus/label |
text.flex-shrink4
| type=Primary, state=Hover | 0 | layout |
| type=Primary, state=Pressed | 0 | layout |
| type=Primary, state=Disabled | 0 | layout |
| type=Primary, state=Focus | 0 | layout |
text.font-family4
| type=Primary, state=Hover | 'General Sans Variable' | font-family/base |
| type=Primary, state=Pressed | 'General Sans Variable' | font-family/base |
| type=Primary, state=Disabled | 'General Sans Variable' | font-family/base |
| type=Primary, state=Focus | 'General Sans Variable' | font-family/base |
text.font-size4
| type=Primary, state=Hover | 12px | typography/label/font-size |
| type=Primary, state=Pressed | 12px | typography/label/font-size |
| type=Primary, state=Disabled | 12px | typography/label/font-size |
| type=Primary, state=Focus | 12px | typography/label/font-size |
text.font-weight4
| type=Primary, state=Hover | 500 | typography/label/font-weight/medium |
| type=Primary, state=Pressed | 500 | typography/label/font-weight/medium |
| type=Primary, state=Disabled | 500 | typography/label/font-weight/medium |
| type=Primary, state=Focus | 500 | typography/label/font-weight/medium |
text.letter-spacing4
| type=Primary, state=Hover | 0px | typography/label/letter-spacing |
| type=Primary, state=Pressed | 0px | typography/label/letter-spacing |
| type=Primary, state=Disabled | 0px | typography/label/letter-spacing |
| type=Primary, state=Focus | 0px | typography/label/letter-spacing |
text.line-height4
| type=Primary, state=Hover | 14px | typography/label/line-height |
| type=Primary, state=Pressed | 14px | typography/label/line-height |
| type=Primary, state=Disabled | 14px | typography/label/line-height |
| type=Primary, state=Focus | 14px | typography/label/line-height |
text.position4
| type=Primary, state=Hover | relative | layout |
| type=Primary, state=Pressed | relative | layout |
| type=Primary, state=Disabled | relative | layout |
| type=Primary, state=Focus | relative | layout |
text.text-align4
| type=Primary, state=Hover | center | layout |
| type=Primary, state=Pressed | center | layout |
| type=Primary, state=Disabled | center | layout |
| type=Primary, state=Focus | center | layout |
text.white-space4
| type=Primary, state=Hover | nowrap | layout |
| type=Primary, state=Pressed | nowrap | layout |
| type=Primary, state=Disabled | nowrap | layout |
| type=Primary, state=Focus | nowrap | layout |
TestimonialPicture
The photo of the person behind a testimonial.
Never changes 4
| Part | Property | Value | Token |
|---|---|---|---|
| root | position | absolute | layout |
| root | inset | 0 | layout |
| root | width | 56px | just the Figma frame size |
| root | height | 56px | just the Figma frame size |
Testimonials
A testimonial you can open and close: name and role, with the quote underneath.
Never changes 5
| Part | Property | Value | Token |
|---|---|---|---|
| root | display | flex | layout |
| root | position | relative | layout |
| root | gap | 40px | spacing/gap/2xlarge |
| root | padding-top | 24px | spacing/gap/large |
| root | padding-bottom | 24px | spacing/gap/large |
Changes by variant 474
-actions.align-items8
| state=Hover, expanded=False | center | layout |
| state=Default, expanded=True | center | layout |
| state=Disabled, expanded=True | center | layout |
| state=Pressed, expanded=True | center | layout |
| state=Focus, expanded=True | center | layout |
| state=Hover, expanded=True | center | layout |
| state=Default, expanded=False | center | layout |
| state=Pressed, expanded=False | center | layout |
-actions.border-radius8
| state=Hover, expanded=False | 10000px | spacing/radius/full |
| state=Default, expanded=True | 10000px | spacing/radius/full |
| state=Disabled, expanded=True | 10000px | spacing/radius/full |
| state=Pressed, expanded=True | 10000px | spacing/radius/full |
| state=Focus, expanded=True | 10000px | spacing/radius/full |
| state=Hover, expanded=True | 10000px | spacing/radius/full |
| state=Default, expanded=False | 10000px | spacing/radius/full |
| state=Pressed, expanded=False | 10000px | spacing/radius/full |
-actions.display8
| state=Hover, expanded=False | flex | layout |
| state=Default, expanded=True | flex | layout |
| state=Disabled, expanded=True | flex | layout |
| state=Pressed, expanded=True | flex | layout |
| state=Focus, expanded=True | flex | layout |
| state=Hover, expanded=True | flex | layout |
| state=Default, expanded=False | flex | layout |
| state=Pressed, expanded=False | flex | layout |
-actions.flex-shrink8
| state=Hover, expanded=False | 0 | layout |
| state=Default, expanded=True | 0 | layout |
| state=Disabled, expanded=True | 0 | layout |
| state=Pressed, expanded=True | 0 | layout |
| state=Focus, expanded=True | 0 | layout |
| state=Hover, expanded=True | 0 | layout |
| state=Default, expanded=False | 0 | layout |
| state=Pressed, expanded=False | 0 | layout |
-actions.gap8
| state=Hover, expanded=False | 8px | spacing/gap/small |
| state=Default, expanded=True | 8px | spacing/gap/small |
| state=Disabled, expanded=True | 8px | spacing/gap/small |
| state=Pressed, expanded=True | 8px | spacing/gap/small |
| state=Focus, expanded=True | 8px | spacing/gap/small |
| state=Hover, expanded=True | 8px | spacing/gap/small |
| state=Default, expanded=False | 8px | spacing/gap/small |
| state=Pressed, expanded=False | 8px | spacing/gap/small |
-actions.height8
| state=Hover, expanded=False | 32px | suggest spacing/size/small-medium |
| state=Default, expanded=True | 32px | suggest spacing/size/small-medium |
| state=Disabled, expanded=True | 32px | suggest spacing/size/small-medium |
| state=Pressed, expanded=True | 32px | suggest spacing/size/small-medium |
| state=Focus, expanded=True | 32px | suggest spacing/size/small-medium |
| state=Hover, expanded=True | 32px | suggest spacing/size/small-medium |
| state=Default, expanded=False | 32px | suggest spacing/size/small-medium |
| state=Pressed, expanded=False | 32px | suggest spacing/size/small-medium |
-actions.justify-content8
| state=Hover, expanded=False | center | layout |
| state=Default, expanded=True | center | layout |
| state=Disabled, expanded=True | center | layout |
| state=Pressed, expanded=True | center | layout |
| state=Focus, expanded=True | center | layout |
| state=Hover, expanded=True | center | layout |
| state=Default, expanded=False | center | layout |
| state=Pressed, expanded=False | center | layout |
-actions.padding8
| state=Hover, expanded=False | 0px | spacing/gap/none |
| state=Default, expanded=True | 0px | spacing/gap/none |
| state=Disabled, expanded=True | 0px | spacing/gap/none |
| state=Pressed, expanded=True | 0px | spacing/gap/none |
| state=Focus, expanded=True | 0px | spacing/gap/none |
| state=Hover, expanded=True | 0px | spacing/gap/none |
| state=Default, expanded=False | 0px | spacing/gap/none |
| state=Pressed, expanded=False | 0px | spacing/gap/none |
-actions.position8
| state=Hover, expanded=False | relative | layout |
| state=Default, expanded=True | relative | layout |
| state=Disabled, expanded=True | relative | layout |
| state=Pressed, expanded=True | relative | layout |
| state=Focus, expanded=True | relative | layout |
| state=Hover, expanded=True | relative | layout |
| state=Default, expanded=False | relative | layout |
| state=Pressed, expanded=False | relative | layout |
-actions.width8
| state=Hover, expanded=False | 32px | suggest spacing/size/small-medium |
| state=Default, expanded=True | 32px | suggest spacing/size/small-medium |
| state=Disabled, expanded=True | 32px | suggest spacing/size/small-medium |
| state=Pressed, expanded=True | 32px | suggest spacing/size/small-medium |
| state=Focus, expanded=True | 32px | suggest spacing/size/small-medium |
| state=Hover, expanded=True | 32px | suggest spacing/size/small-medium |
| state=Default, expanded=False | 32px | suggest spacing/size/small-medium |
| state=Pressed, expanded=False | 32px | suggest spacing/size/small-medium |
bottom.align-items5
| state=Default, expanded=True | center | layout |
| state=Disabled, expanded=True | center | layout |
| state=Pressed, expanded=True | center | layout |
| state=Focus, expanded=True | center | layout |
| state=Hover, expanded=True | center | layout |
bottom.display5
| state=Default, expanded=True | flex | layout |
| state=Disabled, expanded=True | flex | layout |
| state=Pressed, expanded=True | flex | layout |
| state=Focus, expanded=True | flex | layout |
| state=Hover, expanded=True | flex | layout |
bottom.flex-shrink5
| state=Default, expanded=True | 0 | layout |
| state=Disabled, expanded=True | 0 | layout |
| state=Pressed, expanded=True | 0 | layout |
| state=Focus, expanded=True | 0 | layout |
| state=Hover, expanded=True | 0 | layout |
bottom.justify-content5
| state=Default, expanded=True | center | layout |
| state=Disabled, expanded=True | center | layout |
| state=Pressed, expanded=True | center | layout |
| state=Focus, expanded=True | center | layout |
| state=Hover, expanded=True | center | layout |
bottom.position5
| state=Default, expanded=True | relative | layout |
| state=Disabled, expanded=True | relative | layout |
| state=Pressed, expanded=True | relative | layout |
| state=Focus, expanded=True | relative | layout |
| state=Hover, expanded=True | relative | layout |
bottom.width5
| state=Default, expanded=True | 976px | no token yet |
| state=Disabled, expanded=True | 100% | layout |
| state=Pressed, expanded=True | 100% | layout |
| state=Focus, expanded=True | 100% | layout |
| state=Hover, expanded=True | 100% | layout |
content.align-items7
| state=Hover, expanded=False | flex-start | layout |
| state=Default, expanded=True | flex-start | layout |
| state=Disabled, expanded=True | flex-start | layout |
| state=Pressed, expanded=True | flex-start | layout |
| state=Hover, expanded=True | flex-start | layout |
| state=Default, expanded=False | flex-start | layout |
| state=Pressed, expanded=False | flex-start | layout |
content.display7
| state=Hover, expanded=False | flex | layout |
| state=Default, expanded=True | flex | layout |
| state=Disabled, expanded=True | flex | layout |
| state=Pressed, expanded=True | flex | layout |
| state=Hover, expanded=True | flex | layout |
| state=Default, expanded=False | flex | layout |
| state=Pressed, expanded=False | flex | layout |
content.flex-direction7
| state=Hover, expanded=False | column | layout |
| state=Default, expanded=True | column | layout |
| state=Disabled, expanded=True | column | layout |
| state=Pressed, expanded=True | column | layout |
| state=Hover, expanded=True | column | layout |
| state=Default, expanded=False | column | layout |
| state=Pressed, expanded=False | column | layout |
content.flex-shrink7
| state=Hover, expanded=False | 0 | layout |
| state=Default, expanded=True | 0 | layout |
| state=Disabled, expanded=True | 0 | layout |
| state=Pressed, expanded=True | 0 | layout |
| state=Hover, expanded=True | 0 | layout |
| state=Default, expanded=False | 0 | layout |
| state=Pressed, expanded=False | 0 | layout |
content.gap7
| state=Hover, expanded=False | 4px | spacing/gap/2xsmall |
| state=Default, expanded=True | 4px | spacing/gap/2xsmall |
| state=Disabled, expanded=True | 4px | spacing/gap/2xsmall |
| state=Pressed, expanded=True | 4px | spacing/gap/2xsmall |
| state=Hover, expanded=True | 4px | spacing/gap/2xsmall |
| state=Default, expanded=False | 4px | spacing/gap/2xsmall |
| state=Pressed, expanded=False | 4px | spacing/gap/2xsmall |
content.justify-content7
| state=Hover, expanded=False | center | layout |
| state=Default, expanded=True | center | layout |
| state=Disabled, expanded=True | center | layout |
| state=Pressed, expanded=True | center | layout |
| state=Hover, expanded=True | center | layout |
| state=Default, expanded=False | center | layout |
| state=Pressed, expanded=False | center | layout |
content.position7
| state=Hover, expanded=False | relative | layout |
| state=Default, expanded=True | relative | layout |
| state=Disabled, expanded=True | relative | layout |
| state=Pressed, expanded=True | relative | layout |
| state=Hover, expanded=True | relative | layout |
| state=Default, expanded=False | relative | layout |
| state=Pressed, expanded=False | relative | layout |
content.white-space7
| state=Hover, expanded=False | nowrap | layout |
| state=Default, expanded=True | nowrap | layout |
| state=Disabled, expanded=True | nowrap | layout |
| state=Pressed, expanded=True | nowrap | layout |
| state=Hover, expanded=True | nowrap | layout |
| state=Default, expanded=False | nowrap | layout |
| state=Pressed, expanded=False | nowrap | layout |
focus-ring.border-color1
| state=Focus, expanded=True | #999 | project/focus/focus-ring |
focus-ring.border-sides1
| state=Focus, expanded=True | all | layout |
focus-ring.border-width1
| state=Focus, expanded=True | 2px | spacing/outline/medium |
focus-ring.inset1
| state=Focus, expanded=True | -4px | layout |
focus-ring.position1
| state=Focus, expanded=True | absolute | layout |
icons-arrow-left.flex-shrink8
| state=Hover, expanded=False | 0 | layout |
| state=Default, expanded=True | 0 | layout |
| state=Disabled, expanded=True | 0 | layout |
| state=Pressed, expanded=True | 0 | layout |
| state=Focus, expanded=True | 0 | layout |
| state=Hover, expanded=True | 0 | layout |
| state=Default, expanded=False | 0 | layout |
| state=Pressed, expanded=False | 0 | layout |
icons-arrow-left.height8
| state=Hover, expanded=False | 16px | suggest spacing/size/2xsmall |
| state=Default, expanded=True | 16px | suggest spacing/size/2xsmall |
| state=Disabled, expanded=True | 16px | suggest spacing/size/2xsmall |
| state=Pressed, expanded=True | 16px | suggest spacing/size/2xsmall |
| state=Focus, expanded=True | 16px | suggest spacing/size/2xsmall |
| state=Hover, expanded=True | 16px | suggest spacing/size/2xsmall |
| state=Default, expanded=False | 16px | suggest spacing/size/2xsmall |
| state=Pressed, expanded=False | 16px | suggest spacing/size/2xsmall |
icons-arrow-left.inset8
| state=Hover, expanded=False | 0 | layout |
| state=Default, expanded=True | 0 | layout |
| state=Disabled, expanded=True | 0 | layout |
| state=Pressed, expanded=True | 0 | layout |
| state=Focus, expanded=True | 0 | layout |
| state=Hover, expanded=True | 0 | layout |
| state=Default, expanded=False | 0 | layout |
| state=Pressed, expanded=False | 0 | layout |
icons-arrow-left.position8
| state=Hover, expanded=False | absolute | layout |
| state=Default, expanded=True | absolute | layout |
| state=Disabled, expanded=True | absolute | layout |
| state=Pressed, expanded=True | absolute | layout |
| state=Focus, expanded=True | absolute | layout |
| state=Hover, expanded=True | absolute | layout |
| state=Default, expanded=False | absolute | layout |
| state=Pressed, expanded=False | absolute | layout |
icons-arrow-left.width8
| state=Hover, expanded=False | 16px | suggest spacing/size/2xsmall |
| state=Default, expanded=True | 16px | suggest spacing/size/2xsmall |
| state=Disabled, expanded=True | 16px | suggest spacing/size/2xsmall |
| state=Pressed, expanded=True | 16px | suggest spacing/size/2xsmall |
| state=Focus, expanded=True | 16px | suggest spacing/size/2xsmall |
| state=Hover, expanded=True | 16px | suggest spacing/size/2xsmall |
| state=Default, expanded=False | 16px | suggest spacing/size/2xsmall |
| state=Pressed, expanded=False | 16px | suggest spacing/size/2xsmall |
label.color6
| state=Default, expanded=True | #d3d9d5 | project/default/label |
| state=Disabled, expanded=True | #d3d9d5 | project/disabled/label |
| state=Pressed, expanded=True | #00d669 | project/pressed/label |
| state=Focus, expanded=True | #d3d9d5 | project/focus/label |
| state=Hover, expanded=True | #00d669 | project/hover/label |
| state=Default, expanded=False | #d3d9d5 | project/default/label |
label.flex-shrink6
| state=Default, expanded=True | 0 | layout |
| state=Disabled, expanded=True | 0 | layout |
| state=Pressed, expanded=True | 0 | layout |
| state=Focus, expanded=True | 0 | layout |
| state=Hover, expanded=True | 0 | layout |
| state=Default, expanded=False | 0 | layout |
label.font-family6
| state=Default, expanded=True | 'General Sans Variable' | font-family/base |
| state=Disabled, expanded=True | 'General Sans Variable' | font-family/base |
| state=Pressed, expanded=True | 'General Sans Variable' | font-family/base |
| state=Focus, expanded=True | 'General Sans Variable' | font-family/base |
| state=Hover, expanded=True | 'General Sans Variable' | font-family/base |
| state=Default, expanded=False | 'General Sans Variable' | font-family/base |
label.font-size6
| state=Default, expanded=True | 24px | typography/title/font-size |
| state=Disabled, expanded=True | 24px | typography/title/font-size |
| state=Pressed, expanded=True | 24px | typography/title/font-size |
| state=Focus, expanded=True | 24px | typography/title/font-size |
| state=Hover, expanded=True | 24px | typography/title/font-size |
| state=Default, expanded=False | 24px | typography/title/font-size |
label.font-weight6
| state=Default, expanded=True | 500 | typography/title/font-weight/medium |
| state=Disabled, expanded=True | 500 | typography/title/font-weight/medium |
| state=Pressed, expanded=True | 500 | typography/title/font-weight/medium |
| state=Focus, expanded=True | 500 | typography/title/font-weight/medium |
| state=Hover, expanded=True | 500 | typography/title/font-weight/medium |
| state=Default, expanded=False | 500 | typography/title/font-weight/medium |
label.letter-spacing6
| state=Default, expanded=True | 0px | typography/title/letter-spacing |
| state=Disabled, expanded=True | 0px | typography/title/letter-spacing |
| state=Pressed, expanded=True | 0px | typography/title/letter-spacing |
| state=Focus, expanded=True | 0px | typography/title/letter-spacing |
| state=Hover, expanded=True | 0px | typography/title/letter-spacing |
| state=Default, expanded=False | 0px | typography/title/letter-spacing |
label.line-height6
| state=Default, expanded=True | 32px | typography/title/line-height |
| state=Disabled, expanded=True | 32px | typography/title/line-height |
| state=Pressed, expanded=True | 32px | typography/title/line-height |
| state=Focus, expanded=True | 32px | typography/title/line-height |
| state=Hover, expanded=True | 32px | typography/title/line-height |
| state=Default, expanded=False | 32px | typography/title/line-height |
label.position6
| state=Default, expanded=True | relative | layout |
| state=Disabled, expanded=True | relative | layout |
| state=Pressed, expanded=True | relative | layout |
| state=Focus, expanded=True | relative | layout |
| state=Hover, expanded=True | relative | layout |
| state=Default, expanded=False | relative | layout |
left.align-items8
| state=Hover, expanded=False | center | layout |
| state=Default, expanded=True | center | layout |
| state=Disabled, expanded=True | center | layout |
| state=Pressed, expanded=True | center | layout |
| state=Focus, expanded=True | center | layout |
| state=Hover, expanded=True | center | layout |
| state=Default, expanded=False | center | layout |
| state=Pressed, expanded=False | center | layout |
left.display8
| state=Hover, expanded=False | flex | layout |
| state=Default, expanded=True | flex | layout |
| state=Disabled, expanded=True | flex | layout |
| state=Pressed, expanded=True | flex | layout |
| state=Focus, expanded=True | flex | layout |
| state=Hover, expanded=True | flex | layout |
| state=Default, expanded=False | flex | layout |
| state=Pressed, expanded=False | flex | layout |
left.flex8
| state=Hover, expanded=False | 1 0 0 | layout |
| state=Default, expanded=True | 1 0 0 | layout |
| state=Disabled, expanded=True | 1 0 0 | layout |
| state=Pressed, expanded=True | 1 0 0 | layout |
| state=Focus, expanded=True | 1 0 0 | layout |
| state=Hover, expanded=True | 1 0 0 | layout |
| state=Default, expanded=False | 1 0 0 | layout |
| state=Pressed, expanded=False | 1 0 0 | layout |
left.gap8
| state=Hover, expanded=False | 24px | spacing/gap/large |
| state=Default, expanded=True | 24px | spacing/gap/large |
| state=Disabled, expanded=True | 24px | spacing/gap/large |
| state=Pressed, expanded=True | 24px | spacing/gap/large |
| state=Focus, expanded=True | 24px | spacing/gap/large |
| state=Hover, expanded=True | 24px | spacing/gap/large |
| state=Default, expanded=False | 24px | spacing/gap/large |
| state=Pressed, expanded=False | 24px | spacing/gap/large |
left.padding4
| state=Disabled, expanded=True | 0px | spacing/gap/none |
| state=Pressed, expanded=True | 0px | spacing/gap/none |
| state=Focus, expanded=True | 0px | spacing/gap/none |
| state=Hover, expanded=True | 0px | spacing/gap/none |
left.position8
| state=Hover, expanded=False | relative | layout |
| state=Default, expanded=True | relative | layout |
| state=Disabled, expanded=True | relative | layout |
| state=Pressed, expanded=True | relative | layout |
| state=Focus, expanded=True | relative | layout |
| state=Hover, expanded=True | relative | layout |
| state=Default, expanded=False | relative | layout |
| state=Pressed, expanded=False | relative | layout |
outline.background6
| state=Default, expanded=True | #3a3a3a | project/default/outline |
| state=Disabled, expanded=True | #3a3a3a | project/disabled/outline |
| state=Pressed, expanded=True | #10ffa4 | project/pressed/outline |
| state=Focus, expanded=True | #3a3a3a | project/focus/outline |
| state=Hover, expanded=True | #00d669 | project/hover/outline |
| state=Default, expanded=False | #3a3a3a | project/default/outline |
outline.height1
| state=Hover, expanded=True | 2px | suggest spacing/outline/medium |
outline.position6
| state=Default, expanded=True | absolute | layout |
| state=Disabled, expanded=True | absolute | layout |
| state=Pressed, expanded=True | absolute | layout |
| state=Focus, expanded=True | absolute | layout |
| state=Hover, expanded=True | absolute | layout |
| state=Default, expanded=False | absolute | layout |
root.align-items10
| state=Focus, expanded=False | center | layout |
| state=Hover, expanded=False | center | layout |
| state=Default, expanded=True | flex-start | layout |
| state=Disabled, expanded=True | flex-start | layout |
| state=Pressed, expanded=True | flex-start | layout |
| state=Focus, expanded=True | flex-start | layout |
| state=Hover, expanded=True | flex-start | layout |
| state=Default, expanded=False | center | layout |
| state=Disabled, expanded=False | center | layout |
| state=Pressed, expanded=False | center | layout |
root.flex-direction5
| state=Default, expanded=True | column | layout |
| state=Disabled, expanded=True | column | layout |
| state=Pressed, expanded=True | column | layout |
| state=Focus, expanded=True | column | layout |
| state=Hover, expanded=True | column | layout |
root.justify-content5
| state=Default, expanded=True | center | layout |
| state=Disabled, expanded=True | center | layout |
| state=Pressed, expanded=True | center | layout |
| state=Focus, expanded=True | center | layout |
| state=Hover, expanded=True | center | layout |
root.opacity1
| state=Disabled, expanded=True | 0.24 | opacity/gentle |
root.padding-left5
| state=Default, expanded=True | 16px | spacing/gap/medium |
| state=Disabled, expanded=True | 16px | spacing/gap/medium |
| state=Pressed, expanded=True | 16px | spacing/gap/medium |
| state=Focus, expanded=True | 16px | spacing/gap/medium |
| state=Hover, expanded=True | 16px | spacing/gap/medium |
root.padding-right3
| state=Pressed, expanded=True | 0px | spacing/gap/none |
| state=Focus, expanded=True | 0px | spacing/gap/none |
| state=Hover, expanded=True | 0px | spacing/gap/none |
root.width9
| state=Focus, expanded=False | 976px | just the Figma frame size |
| state=Hover, expanded=False | 976px | just the Figma frame size |
| state=Disabled, expanded=True | 976px | just the Figma frame size |
| state=Pressed, expanded=True | 976px | just the Figma frame size |
| state=Focus, expanded=True | 976px | just the Figma frame size |
| state=Hover, expanded=True | 976px | just the Figma frame size |
| state=Default, expanded=False | 976px | just the Figma frame size |
| state=Disabled, expanded=False | 976px | just the Figma frame size |
| state=Pressed, expanded=False | 976px | just the Figma frame size |
slot.border-radius8
| state=Hover, expanded=False | 10000px | spacing/radius/full |
| state=Default, expanded=True | 10000px | spacing/radius/full |
| state=Disabled, expanded=True | 10000px | spacing/radius/full |
| state=Pressed, expanded=True | 10000px | spacing/radius/full |
| state=Focus, expanded=True | 10000px | spacing/radius/full |
| state=Hover, expanded=True | 10000px | spacing/radius/full |
| state=Default, expanded=False | 10000px | spacing/radius/full |
| state=Pressed, expanded=False | 10000px | spacing/radius/full |
slot.flex-shrink8
| state=Hover, expanded=False | 0 | layout |
| state=Default, expanded=True | 0 | layout |
| state=Disabled, expanded=True | 0 | layout |
| state=Pressed, expanded=True | 0 | layout |
| state=Focus, expanded=True | 0 | layout |
| state=Hover, expanded=True | 0 | layout |
| state=Default, expanded=False | 0 | layout |
| state=Pressed, expanded=False | 0 | layout |
slot.height8
| state=Hover, expanded=False | 56px | suggest spacing/size/large |
| state=Default, expanded=True | 56px | suggest spacing/size/large |
| state=Disabled, expanded=True | 56px | suggest spacing/size/large |
| state=Pressed, expanded=True | 56px | suggest spacing/size/large |
| state=Focus, expanded=True | 56px | suggest spacing/size/large |
| state=Hover, expanded=True | 56px | suggest spacing/size/large |
| state=Default, expanded=False | 56px | suggest spacing/size/large |
| state=Pressed, expanded=False | 56px | suggest spacing/size/large |
slot.position8
| state=Hover, expanded=False | relative | layout |
| state=Default, expanded=True | relative | layout |
| state=Disabled, expanded=True | relative | layout |
| state=Pressed, expanded=True | relative | layout |
| state=Focus, expanded=True | relative | layout |
| state=Hover, expanded=True | relative | layout |
| state=Default, expanded=False | relative | layout |
| state=Pressed, expanded=False | relative | layout |
slot.width8
| state=Hover, expanded=False | 56px | suggest spacing/size/large |
| state=Default, expanded=True | 56px | suggest spacing/size/large |
| state=Disabled, expanded=True | 56px | suggest spacing/size/large |
| state=Pressed, expanded=True | 56px | suggest spacing/size/large |
| state=Focus, expanded=True | 56px | suggest spacing/size/large |
| state=Hover, expanded=True | 56px | suggest spacing/size/large |
| state=Default, expanded=False | 56px | suggest spacing/size/large |
| state=Pressed, expanded=False | 56px | suggest spacing/size/large |
text.color6
| state=Default, expanded=True | #999 | project/default/sub-label |
| state=Disabled, expanded=True | #999 | project/disabled/sub-label |
| state=Pressed, expanded=True | #c2c7c3 | project/pressed/sub-label |
| state=Focus, expanded=True | #999 | project/focus/sub-label |
| state=Hover, expanded=True | #ededed | project/hover/sub-label |
| state=Default, expanded=False | #999 | project/default/sub-label |
text.flex-shrink6
| state=Default, expanded=True | 0 | layout |
| state=Disabled, expanded=True | 0 | layout |
| state=Pressed, expanded=True | 0 | layout |
| state=Focus, expanded=True | 0 | layout |
| state=Hover, expanded=True | 0 | layout |
| state=Default, expanded=False | 0 | layout |
text.font-family6
| state=Default, expanded=True | 'General Sans Variable' | font-family/base |
| state=Disabled, expanded=True | 'General Sans Variable' | font-family/base |
| state=Pressed, expanded=True | 'General Sans Variable' | font-family/base |
| state=Focus, expanded=True | 'General Sans Variable' | font-family/base |
| state=Hover, expanded=True | 'General Sans Variable' | font-family/base |
| state=Default, expanded=False | 'General Sans Variable' | font-family/base |
text.font-size6
| state=Default, expanded=True | 14px | typography/paragraph/font-size |
| state=Disabled, expanded=True | 14px | typography/paragraph/font-size |
| state=Pressed, expanded=True | 14px | typography/paragraph/font-size |
| state=Focus, expanded=True | 14px | typography/paragraph/font-size |
| state=Hover, expanded=True | 14px | typography/paragraph/font-size |
| state=Default, expanded=False | 14px | typography/paragraph/font-size |
text.font-weight6
| state=Default, expanded=True | 400 | typography/paragraph/font-weight/regular |
| state=Disabled, expanded=True | 400 | typography/paragraph/font-weight/regular |
| state=Pressed, expanded=True | 400 | typography/paragraph/font-weight/regular |
| state=Focus, expanded=True | 400 | typography/paragraph/font-weight/regular |
| state=Hover, expanded=True | 400 | typography/paragraph/font-weight/regular |
| state=Default, expanded=False | 400 | typography/paragraph/font-weight/regular |
text.letter-spacing6
| state=Default, expanded=True | 0px | typography/paragraph/letter-spacing |
| state=Disabled, expanded=True | 0px | typography/paragraph/letter-spacing |
| state=Pressed, expanded=True | 0px | typography/paragraph/letter-spacing |
| state=Focus, expanded=True | 0px | typography/paragraph/letter-spacing |
| state=Hover, expanded=True | 0px | typography/paragraph/letter-spacing |
| state=Default, expanded=False | 0px | typography/paragraph/letter-spacing |
text.line-height6
| state=Default, expanded=True | 20px | typography/paragraph/line-height |
| state=Disabled, expanded=True | 20px | typography/paragraph/line-height |
| state=Pressed, expanded=True | 20px | typography/paragraph/line-height |
| state=Focus, expanded=True | 20px | typography/paragraph/line-height |
| state=Hover, expanded=True | 20px | typography/paragraph/line-height |
| state=Default, expanded=False | 20px | typography/paragraph/line-height |
text.position6
| state=Default, expanded=True | relative | layout |
| state=Disabled, expanded=True | relative | layout |
| state=Pressed, expanded=True | relative | layout |
| state=Focus, expanded=True | relative | layout |
| state=Hover, expanded=True | relative | layout |
| state=Default, expanded=False | relative | layout |
top.align-items5
| state=Default, expanded=True | center | layout |
| state=Disabled, expanded=True | center | layout |
| state=Pressed, expanded=True | center | layout |
| state=Focus, expanded=True | center | layout |
| state=Hover, expanded=True | center | layout |
top.display5
| state=Default, expanded=True | flex | layout |
| state=Disabled, expanded=True | flex | layout |
| state=Pressed, expanded=True | flex | layout |
| state=Focus, expanded=True | flex | layout |
| state=Hover, expanded=True | flex | layout |
top.flex-shrink5
| state=Default, expanded=True | 0 | layout |
| state=Disabled, expanded=True | 0 | layout |
| state=Pressed, expanded=True | 0 | layout |
| state=Focus, expanded=True | 0 | layout |
| state=Hover, expanded=True | 0 | layout |
top.gap5
| state=Default, expanded=True | 24px | spacing/gap/large |
| state=Disabled, expanded=True | 24px | spacing/gap/large |
| state=Pressed, expanded=True | 24px | spacing/gap/large |
| state=Focus, expanded=True | 24px | spacing/gap/large |
| state=Hover, expanded=True | 24px | spacing/gap/large |
top.justify-content2
| state=Default, expanded=True | space-between | layout |
| state=Disabled, expanded=True | space-between | layout |
top.position5
| state=Default, expanded=True | relative | layout |
| state=Disabled, expanded=True | relative | layout |
| state=Pressed, expanded=True | relative | layout |
| state=Focus, expanded=True | relative | layout |
| state=Hover, expanded=True | relative | layout |
top.width5
| state=Default, expanded=True | 100% | layout |
| state=Disabled, expanded=True | 100% | layout |
| state=Pressed, expanded=True | 100% | layout |
| state=Focus, expanded=True | 100% | layout |
| state=Hover, expanded=True | 100% | layout |
Thumb effect
The frosted panel on project thumbnails, a backdrop blur.
- root
- Whatever the style is applied to: the frosted text panel on a project thumbnail. Thumbs and Carousel both use it.
When to use
- The text panel on a project thumbnail, in Thumbs and Carousel.
When not to use
- Navigation. That's the Menu effect.
Behaviour
It blurs what's behind the panel. In Figma the blur is tied to opacity/gentle, an opacity token borrowed as a blur size. It works, but changing that opacity would also move this blur. Its own blur token would fix it.
Accessibility
- Contrast: check the panel text against the busiest part of the thumbnail.
Never changes 1
| Part | Property | Value | Token |
|---|---|---|---|
| root | backdrop-filter | blur(12px) | effect/thumb |
Thumbs
A project thumbnail card, with the project name and details on a frosted panel at the bottom.
Never changes 68
| Part | Property | Value | Token |
|---|---|---|---|
| root | display | flex | layout |
| root | flex-direction | column | layout |
| root | align-items | flex-start | layout |
| root | position | relative | layout |
| root | gap | 0px | spacing/gap/none |
| root | height | 334px | just the Figma frame size |
| root | border-radius | 24px | spacing/radius/xlarge |
| root | width | 384px | just the Figma frame size |
| slot | flex | 1 0 0 | layout |
| slot | width | 100% | layout |
| slot | position | relative | layout |
| slot | background | #171717 | non-interactive/background/secondary |
| slot | border-radius | 24px | spacing/radius/xlarge |
| shadow | position | absolute | layout |
| shadow | height | 167px | no token yet |
| shadow | opacity | 0.48 | opacity/medium |
| content | position | absolute | layout |
| content | display | flex | layout |
| content | flex-direction | column | layout |
| content | align-items | flex-start | layout |
| content | background | rgba(0,0,0,0.48) | no token yet |
| content | gap | 8px | spacing/gap/small |
| content | padding-bottom | 24px | spacing/gap/large |
| content | padding-top | 16px | spacing/gap/medium |
| content | padding-left | 16px | spacing/gap/medium |
| content | padding-right | 16px | spacing/gap/medium |
| content | border-radius | 16px | spacing/radius/large |
| title | align-items | center | layout |
| title | display | flex | layout |
| title | flex-shrink | 0 | layout |
| title | width | 100% | layout |
| title | position | relative | layout |
| title | gap | 16px | spacing/gap/medium |
| number | justify-content | center | layout |
| number | align-items | center | layout |
| number | display | flex | layout |
| number | flex-direction | column | layout |
| number | flex-shrink | 0 | layout |
| number | position | relative | layout |
| number | width | 16px | suggest spacing/size/2xsmall |
| label | flex-shrink | 0 | layout |
| label | width | 100% | layout |
| label | position | relative | layout |
| label | font-family | 'General Sans Variable' | font-family/base |
| label | font-weight | 400 | typography/label/font-weight/regular |
| label | line-height | 14px | typography/label/line-height |
| label | font-size | 12px | typography/label/font-size |
| label | letter-spacing | 0px | typography/label/letter-spacing |
| text | flex-shrink | 0 | layout |
| text | white-space | nowrap | layout |
| text | position | relative | layout |
| text | font-family | 'General Sans Variable' | font-family/base |
| text | font-weight | 500 | typography/title/font-weight/medium |
| text | line-height | 32px | typography/title/line-height |
| text | font-size | 24px | typography/title/font-size |
| text | letter-spacing | 0px | typography/title/letter-spacing |
| bottom | align-items | center | layout |
| bottom | display | flex | layout |
| bottom | flex-shrink | 0 | layout |
| bottom | justify-content | flex-end | layout |
| bottom | position | relative | layout |
| bottom | gap | 16px | spacing/gap/medium |
| bottom | padding-left | 32px | spacing/gap/xlarge |
| icons-dot | position | absolute | layout |
| icons-dot | inset | 0 | layout |
| icons-dot | flex-shrink | 0 | layout |
| icons-dot | width | 12px | suggest spacing/size/3xsmall |
| icons-dot | height | 12px | suggest spacing/size/3xsmall |
Changes by variant 49
badge.align-items1
| state=Disabled | center | layout |
badge.border-radius1
| state=Disabled | 10000px | spacing/radius/full |
badge.display1
| state=Disabled | flex | layout |
badge.gap1
| state=Disabled | 2px | spacing/gap/3xsmall |
badge.height1
| state=Disabled | 24px | spacing/size/small |
badge.padding-bottom1
| state=Disabled | 2px | spacing/gap/3xsmall |
badge.padding-left1
| state=Disabled | 8px | spacing/gap/small |
badge.padding-right1
| state=Disabled | 8px | spacing/gap/small |
badge.padding-top1
| state=Disabled | 0px | spacing/gap/none |
badge.position1
| state=Disabled | absolute | layout |
content.opacity1
| state=Disabled | 0.32 | opacity/mild |
focus-ring.border-color1
| state=Focus | #999 | project/focus/focus-ring |
focus-ring.border-radius1
| state=Focus | 28px | on purpose: Derived: the element radius plus the focus ring offset. |
focus-ring.border-sides1
| state=Focus | all | layout |
focus-ring.border-width1
| state=Focus | 2px | spacing/outline/medium |
focus-ring.inset1
| state=Focus | -4px | layout |
focus-ring.position1
| state=Focus | absolute | layout |
icons-lock.flex-shrink1
| state=Locked | 0 | layout |
icons-lock.height1
| state=Locked | 24px | suggest spacing/size/small |
icons-lock.inset1
| state=Locked | 0 | layout |
icons-lock.position1
| state=Locked | absolute | layout |
icons-lock.width1
| state=Locked | 24px | suggest spacing/size/small |
label.color6
| state=Focus | #999 | project/default/sub-label |
| state=Pressed | #00d669 | project/pressed/label |
| state=Disabled | #999 | project/disabled/sub-label |
| state=Hover | #00d669 | project/hover/label |
| state=Default | #999 | project/default/sub-label |
| state=Locked | #999 | project/default/sub-label |
locked.align-items1
| state=Locked | center | layout |
locked.background1
| state=Locked | #00d669 | non-interactive/background/positive/base |
locked.border-radius1
| state=Locked | 12px | spacing/radius/medium |
locked.display1
| state=Locked | flex | layout |
locked.gap1
| state=Locked | 0px | spacing/gap/none |
locked.padding1
| state=Locked | 8px | spacing/gap/small |
locked.position1
| state=Locked | absolute | layout |
outline.border-color1
| state=Disabled | #3a3a3a | non-interactive/foreground/quadruple |
outline.border-radius1
| state=Disabled | 10000px | spacing/radius/full |
outline.border-sides1
| state=Disabled | all | layout |
outline.inset1
| state=Disabled | 0 | layout |
outline.opacity1
| state=Disabled | 1 | opacity/solid |
outline.position1
| state=Disabled | absolute | layout |
root.opacity1
| state=Disabled | 1 | opacity/solid |
slot.opacity1
| state=Disabled | 0.32 | opacity/mild |
text.color6
| state=Focus | #d3d9d5 | project/default/label |
| state=Pressed | #00d669 | project/pressed/label |
| state=Disabled | #d3d9d5 | project/disabled/label |
| state=Hover | #00d669 | project/hover/label |
| state=Default | #d3d9d5 | project/default/label |
| state=Locked | #d3d9d5 | project/default/label |
Toggle
A 40×40 icon button that stays on or off, alone or as one choice in a group.
When to use
- Switching a view or a filter on and off, when the change happens straight away.
- Picking one option from a short set, as a group. The year switcher in akount.ing works like this.
When not to use
- Doing something. That's IconButton. A toggle remembers, a button doesn't.
- A settings-style switch with a label. There isn't one in the kit yet, so ask for one rather than stretching Toggle.
Behaviour
It changes with selected and state. Off, it's a plate with 12px corners on the secondary surface, faded down. On, it becomes a fully round primary pill. The change of shape is part of the signal, not just the colour.
Accessibility
- Alone:
<button aria-pressed="true|false">. - Group:
role="radio"witharia-checked, inside arole="radiogroup"that has a name. Arrow keys move between options, Tab gets you in and out. - Name:
aria-labelwhen it's icon only. - Focus:
focus-ring(2px,actions/primary/focus/focus-ringwhen it's on), on:focus-visible. - Colour: on and off show in the shape (12px corners to fully round) as well as the colour.
Content
Icon only in the kit. akount.ing adds a text label, and that's a declared deviation. If you add one, keep it to a short word or a number.
Where code differs on purpose
- akount.ing: Accepts a text label; width grows past 40px to fit it, height stays 40px. Label colour follows the surface: secondary label unselected, primary label selected. The year switcher needs text. The kit's toggle is icon-only and specifies no label colour.
- akount.ing: Rendered as role=radio inside a ToggleGroup radio group, which has no surface of its own. Toggles are used as a single-choice set; ToggleGroup is not a kit component.
Never changes 18
| Part | Property | Value | Token |
|---|---|---|---|
| root | justify-content | center | layout |
| root | align-items | center | layout |
| root | display | flex | layout |
| root | position | relative | layout |
| root | gap | 8px | spacing/gap/small |
| root | padding-left | 20px | spacing/gap/medium-large |
| root | padding-right | 20px | spacing/gap/medium-large |
| root | padding-top | 0px | spacing/gap/none |
| root | padding-bottom | 0px | spacing/gap/none |
| root | width | 40px | spacing/size/medium |
| root | height | 40px | spacing/size/medium |
| icons-arrow-left | overflow | clip | layout |
| icons-arrow-left | flex-shrink | 0 | layout |
| icons-arrow-left | position | relative | layout |
| icons-arrow-left | width | 20px | suggest spacing/size/xsmall |
| icons-arrow-left | height | 20px | suggest spacing/size/xsmall |
| union | position | absolute | layout |
| union | inset | 20.84% 16.66% 20.83% 18.4% | layout |
Changes by variant 72
background.background5
| state=Default, selected=False | #3a3a3a | actions/secondary/regular/default/background |
| state=Hover, selected=False | #3a3a3a | actions/secondary/regular/default/background |
| state=Pressed, selected=False | #3a3a3a | actions/secondary/regular/default/background |
| state=Disabled, selected=False | #3a3a3a | actions/secondary/regular/default/background |
| state=Focus, selected=False | #3a3a3a | actions/secondary/regular/default/background |
background.border-color5
| state=Default, selected=False | #ededed | actions/secondary/regular/default/outline |
| state=Hover, selected=False | #ededed | actions/secondary/regular/default/outline |
| state=Pressed, selected=False | #ededed | actions/secondary/regular/default/outline |
| state=Disabled, selected=False | #ededed | actions/secondary/regular/default/outline |
| state=Focus, selected=False | #ededed | actions/secondary/regular/default/outline |
background.border-radius5
| state=Default, selected=False | 12px | spacing/radius/medium |
| state=Hover, selected=False | 12px | spacing/radius/medium |
| state=Pressed, selected=False | 12px | spacing/radius/medium |
| state=Disabled, selected=False | 12px | spacing/radius/medium |
| state=Focus, selected=False | 12px | spacing/radius/medium |
background.border-sides5
| state=Default, selected=False | left top | layout |
| state=Hover, selected=False | left top | layout |
| state=Pressed, selected=False | left top | layout |
| state=Disabled, selected=False | left top | layout |
| state=Focus, selected=False | left top | layout |
background.inset5
| state=Default, selected=False | 0 | layout |
| state=Hover, selected=False | 0 | layout |
| state=Pressed, selected=False | 0 | layout |
| state=Disabled, selected=False | 0 | layout |
| state=Focus, selected=False | 0 | layout |
background.opacity5
| state=Default, selected=False | 0.24 | opacity/gentle |
| state=Hover, selected=False | 0.24 | opacity/gentle |
| state=Pressed, selected=False | 0.24 | opacity/gentle |
| state=Disabled, selected=False | 0.24 | opacity/gentle |
| state=Focus, selected=False | 0.24 | opacity/gentle |
background.position5
| state=Default, selected=False | absolute | layout |
| state=Hover, selected=False | absolute | layout |
| state=Pressed, selected=False | absolute | layout |
| state=Disabled, selected=False | absolute | layout |
| state=Focus, selected=False | absolute | layout |
focus-ring.border-color1
| state=Focus, selected=True | #b6ffda | actions/primary/focus/focus-ring |
focus-ring.border-radius1
| state=Focus, selected=True | 10000px | spacing/radius/full |
focus-ring.border-sides1
| state=Focus, selected=True | all | layout |
focus-ring.border-width1
| state=Focus, selected=True | 2px | spacing/outline/medium |
focus-ring.inset1
| state=Focus, selected=True | -5px -4px -4px -5px | layout |
focus-ring.position1
| state=Focus, selected=True | absolute | layout |
root.background5
| state=Default, selected=True | #00d669 | actions/primary/default/background |
| state=Hover, selected=True | #00b450 | actions/primary/hover/background |
| state=Pressed, selected=True | #00913a | actions/primary/pressed/background |
| state=Disabled, selected=True | #00d669 | actions/primary/disabled/background |
| state=Focus, selected=True | #00d669 | actions/primary/focus/background |
root.border-color5
| state=Default, selected=True | rgba(237,237,237,0.64) | actions/primary/default/outline |
| state=Hover, selected=True | rgba(237,237,237,0.64) | actions/primary/hover/outline |
| state=Pressed, selected=True | rgba(237,237,237,0.64) | actions/primary/pressed/outline |
| state=Disabled, selected=True | rgba(237,237,237,0.64) | actions/primary/disabled/outline |
| state=Focus, selected=True | rgba(237,237,237,0.64) | actions/primary/focus/outline |
root.border-radius10
| state=Default, selected=True | 10000px | spacing/radius/full |
| state=Default, selected=False | 12px | spacing/radius/medium |
| state=Hover, selected=True | 10000px | spacing/radius/full |
| state=Hover, selected=False | 12px | spacing/radius/medium |
| state=Pressed, selected=True | 10000px | spacing/radius/full |
| state=Pressed, selected=False | 12px | spacing/radius/medium |
| state=Disabled, selected=True | 10000px | spacing/radius/full |
| state=Disabled, selected=False | 12px | spacing/radius/medium |
| state=Focus, selected=True | 10000px | spacing/radius/full |
| state=Focus, selected=False | 12px | spacing/radius/medium |
root.border-sides5
| state=Default, selected=True | left top | layout |
| state=Hover, selected=True | left top | layout |
| state=Pressed, selected=True | left top | layout |
| state=Disabled, selected=True | left top | layout |
| state=Focus, selected=True | left top | layout |
root.border-top-width5
| state=Default, selected=True | 1px | spacing/outline/small |
| state=Hover, selected=True | 1px | spacing/outline/small |
| state=Pressed, selected=True | 1px | spacing/outline/small |
| state=Disabled, selected=True | 1px | spacing/outline/small |
| state=Focus, selected=True | 1px | spacing/outline/small |
root.opacity1
| state=Disabled, selected=True | 0.24 | opacity/gentle |