Troupe tokens

Every sample on this page uses semantic tokens only. Switching the brand changes one attribute on the root element; nothing else on the page changes.

Components: Button, Input, Switch, Text

Colour

Surface

color.surface.default
color.surface.subtle
color.surface.raised
color.surface.inverse
color.surface.danger
color.surface.success

Text

color.text.default
color.text.subtle
color.text.inverse
color.text.action
color.text.on-action
color.text.danger
color.text.success
color.text.disabled

Action

color.action.primary.default
color.action.primary.hover
color.action.primary.active
color.action.primary.disabled
color.action.secondary.default
color.action.secondary.hover
color.action.secondary.active
color.action.secondary.disabled

Border

color.border.default
color.border.subtle
color.border.strong
color.border.focus-visible
color.border.invalid

Typography

font.size.display · font.family.heading · font.weight.heading · font.line-height.heading

Ensemble

font.size.headline

A system that grows on request

font.size.title

Tokens carry the brand

font.size.lead · font.family.body

One attribute on the root element switches palette, type, shape, density and motion.

font.size.body · font.weight.body · font.line-height.body

Running text sits on the body family and line height. Emphasis uses font.weight.strong. Components never see a raw value; they read semantic names, and each brand decides what those names mean.

font.size.caption

Captions, labels and metadata.

font.family.code

--troupe-color-surface-default

Space

Density is three separate axes: inset (padding inside), stack (vertical gap), inline (horizontal gap).

Inset

space.inset.xs
space.inset.sm
space.inset.md
space.inset.lg
space.inset.xl

Stack

xs
sm
md
lg
xl
space.stack.*

Inline

space.inline.xs
space.inline.sm
space.inline.md
space.inline.lg

Radius and shadow

Control
radius.control
Container
radius.container
Indicator
radius.indicator
Raised
shadow.raised
Overlay
shadow.overlay

Border

border.width.default
border.width.strong
border.width.focus-visible
Focus ring
border.offset.focus-visible

Motion

Each button plays one motion type with its motion.duration.* and motion.easing.* pair.