Skip to main content Skip to docs navigation

Typography Tokens

Comprehensive guide to the typography token system including font families, weights, composite styles, and semantic text styles.

This documentation is a work in progress. Some information may be incomplete, outdated, or differ from the current product behavior.

Overview

Typography tokens define the typographic styles used throughout the design system to ensure consistency in text appearance across all platforms and applications. They control font families, weights, sizes, line heights, spacing, and text decorations.

Architecture

Chassis Tokens uses a layered typography architecture where foundational tokens defined in the Brand group are referenced by composite typography tokens in the App group. This separation allows brand-specific typography choices to automatically propagate through all text styles.

How it works:

Brand group tokens define the core typographic identity:

  • Font families for different text categories (text, display, code)
  • Font weights with semantic names (normal, strong, mass, elegant)

App group tokens combine these foundational elements with size and spacing values to create complete typography styles ready for use in components:

  • font.text.medium.normal combines fontFamily, fontWeight, fontSize, lineHeight, and other properties
  • Composite tokens automatically adapt when brand fonts or weights change

Benefits:

  • Switch font families across entire system by changing brand tokens
  • Maintain consistent typographic hierarchy across brands
  • Single source of truth for each font property
  • Automatic updates when brand typography changes

This documentation focuses on App group tokens—the complete typography styles used in UI design and development. For details on how Brand group font tokens are structured, see the Tokens Studio page.

Organization

Typography tokens in Chassis are organized into several categories:

Primitive Tokens (Brand group): Core typographic properties including font families and font weights that define brand identity.

Modular Tokens (App group): Individual typographic properties like font sizes, line heights, letter spacing, and paragraph spacing that can be combined in different ways.

Composite Tokens (App group): Complete typography styles combining multiple properties (family, weight, size, line height, spacing) into ready-to-use text styles.

Contextual Tokens (App group): Semantic typography styles assigned to specific use cases like headings, body text, labels, and UI component text.

This multi-tier organization provides both flexibility (through modular tokens) and convenience (through contextual tokens) when applying typography to UI elements.

Font Families

Font family tokens define the typefaces used throughout the design system. These are defined in the Brand group and reference specific font families installed in the design environment or available via web fonts.

Token NamePurpose
typography.fontFamily.textPrimary font family for body text, UI labels, and general content. Should be highly readable at small sizes.
typography.fontFamily.displaySecondary font family for headings, titles, and prominent text. Often has more personality or visual impact.
typography.fontFamily.codeMonospaced font family for code snippets, technical content, and data display.
typography.fontFamily.htmlDefault font family for HTML content. Typically references typography.fontFamily.text.
typography.fontFamily.iconIcon font family if using icon fonts instead of SVG icons.

Example Values

{
  "typography": {
    "fontFamily": {
      "text": {
        "$type": "fontFamilies",
        "$value": "'Helvetica Neue', Helvetica, Arial, system-ui, -apple-system, sans-serif"
      },
      "display": {
        "$type": "fontFamilies",
        "$value": "'Times New Roman', Times, serif"
      },
      "code": {
        "$type": "fontFamilies",
        "$value": "'Courier New', Courier, monospace"
      }
    }
  }
}

Font Weights

Font weight tokens define the thickness or boldness of type. These semantic weight names ensure consistent visual hierarchy while allowing different brands to interpret weights differently based on their chosen typefaces.

Token NameSemantic MeaningTypical Numeric Value
typography.fontWeight.[family].elegantLightest weight for delicate, refined text200-300 (Light)
typography.fontWeight.[family].normalDefault weight for body text and UI400 (Regular)
typography.fontWeight.[family].strongMedium emphasis for labels and important text600 (Semibold)
typography.fontWeight.[family].massHeaviest weight for maximum emphasis700-900 (Bold/Black)

where [family] can be text, display, or code.

Weight Hierarchy

The semantic naming provides a clear hierarchy:

  • elegant: Minimal visual weight, used sparingly for sophisticated treatments
  • normal: Default weight for most content
  • strong: Clear emphasis without overpowering
  • mass: Maximum impact for critical elements

Actual numeric font weights are determined by the fonts loaded in your brand. A typeface with only Regular (400) and Bold (700) may map both strong and mass to Bold, while a typeface with more weights can differentiate between them.

Typography Properties

Modular typography tokens are individual properties that can be combined to create complete text styles. These tokens provide fine-grained control over typography while maintaining consistency.

Font Sizes

Font size tokens define the size of text across the system. Two sets of sizes are available:

Token NamePurposeTypical Size (px)
typography.fontSize.text.[size]Sizes for UI text and body content10-44px
typography.fontSize.display.[size]Sizes for headings and display text10-44px
typography.fontSize.code.[size]Sizes for code and technical content14-19px
typography.fontSize.html.[element]Sizes for HTML semantic elementsVaries by element

where [size] can be: 2xsmall, xsmall, small, medium, large, xlarge, 2xlarge, 3xlarge, 4xlarge, 5xlarge

Line Heights

Line height tokens control the vertical spacing between lines of text. Proper line height improves readability and visual rhythm.

Token NamePurposeTypical Value (px)
typography.lineHeight.text.[size]Line heights for body text14-56px
typography.lineHeight.display.[size]Line heights for display text14-56px
typography.lineHeight.code.[size]Line heights for code blocks20-28px
typography.lineHeight.html.[element]Line heights for HTML elementsVaries by element

Line heights are typically 1.25-1.75× the font size for optimal readability. Larger text often uses tighter line height ratios, while smaller text benefits from more generous spacing.

Letter Spacing

Letter spacing (tracking) tokens control the horizontal space between characters.

Token NameValuePurpose
typography.letterSpacing.base.zero0Default letter spacing (no adjustment)

Paragraph Spacing

Paragraph spacing tokens define the vertical space between paragraphs.

Token NameValuePurpose
typography.paragraphSpacing.base.zero0No spacing (for UI labels and single-line text)
typography.paragraphSpacing.base.small8pxTight spacing for compact layouts
typography.paragraphSpacing.base.medium16pxStandard paragraph spacing
typography.paragraphSpacing.base.large24pxGenerous spacing for improved readability

Text Case

Text case tokens control capitalization.

Token NameValuePurpose
typography.textCase.base.nonenoneNo transformation (preserve original case)
typography.textCase.base.lowercaselowercaseForce all lowercase
typography.textCase.base.uppercaseuppercaseForce all uppercase
typography.textCase.base.capitalizecapitalizeCapitalize first letter of each word

Text Decoration

Text decoration tokens control underlines and strikethroughs.

Token NameValuePurpose
typography.textDecoration.base.nonenoneNo decoration
typography.textDecoration.base.underlineunderlineUnderline text
typography.textDecoration.base.line-throughline-throughStrikethrough text

Composite Tokens

Composite typography tokens combine multiple properties into complete, ready-to-use text styles. These are defined in the App group and are the primary tokens used when designing interfaces.

Example composite token:

{
  "font": {
    "text": {
      "medium": {
        "normal": {
          "$type": "typography",
          "$value": {
            "fontFamily": "{typography.fontFamily.text}",
            "fontWeight": "{typography.fontWeight.text.normal}",
            "fontSize": "{typography.fontSize.text.medium}",
            "lineHeight": "{typography.lineHeight.text.medium}",
            "letterSpacing": "{typography.letterSpacing.base.zero}",
            "paragraphSpacing": "{typography.paragraphSpacing.base.zero}",
            "textCase": "{typography.textCase.base.none}",
            "textDecoration": "{typography.textDecoration.base.none}"
          }
        }
      }
    }
  }
}

Text Family Styles

Text family styles use the primary text font family and are available in multiple sizes and weights. These are the workhorses of the design system, used for most UI text.

Token NameWeightSizes AvailablePrimary Use
font.text.[size].normalnormal2xsmall - 5xlargeBody text, descriptions, secondary content
font.text.[size].strongstrong2xsmall - 5xlargeLabels, emphasized text, form labels
font.text.[size].massmass2xsmall - 5xlargeMaximum emphasis, important headings
font.text.[size].elegantelegant2xsmall - 5xlargeRefined, delicate text treatments

Display Family Styles

Display family styles use the display font family for headings and prominent text.

Token NameWeightSizes AvailablePrimary Use
font.display.[size].normalnormal2xsmall - 5xlargeDisplay headings, section titles
font.display.[size].strongstrong2xsmall - 5xlargeEmphasized headings
font.display.[size].massmass2xsmall - 5xlargeHero headings, major impact
font.display.[size].elegantelegant2xsmall - 5xlargeSophisticated display treatments

Code Family Styles

Code family styles use the monospaced code font family.

Token NameWeightSizes AvailablePrimary Use
font.code.[size].normalnormalsmall, medium, largeCode blocks, technical content
font.code.[size].strongstrongsmall, medium, largeEmphasized code, syntax highlighting

Contextual Typography

Contextual typography tokens assign semantic meaning to text styles, making it clear what type of content each style is intended for. These reference composite text styles and provide the most convenient way to apply typography.

Content Hierarchy

Token NameCompositionPurpose
font.context.jumboDisplay family, mass weight, 96pxLargest possible heading, hero sections
font.context.heroDisplay family, mass weight, 64pxHero headings, landing page titles
font.context.leadText family, normal weight, xlargeLead paragraphs, introductory text
font.context.headingDisplay family, strong weight, 3xlargeMain page headings

Titles

Token NameCompositionPurpose
font.context.title.largeText family, strong weight, xlargeSection titles, card headers
font.context.title.mediumText family, strong weight, largeSubsection titles
font.context.title.smallText family, strong weight, mediumSmall section headings

Body Text

Token NameCompositionPurpose
font.context.body.largeText family, normal weight, largeLarge body text, comfortable reading
font.context.body.mediumText family, normal weight, mediumStandard body text (16px)
font.context.body.smallText family, normal weight, smallCompact body text, dense layouts

Highlights

Token NameCompositionPurpose
font.context.highlight.largeText family, normal weight, largeHighlighted content, featured text
font.context.highlight.mediumText family, normal weight, mediumStandard highlights
font.context.highlight.smallText family, normal weight, smallCompact highlights

Component Typography

Component-specific typography tokens reference contextual or composite tokens and are used directly in UI components. These ensure consistent typography across all component implementations.

Button Typography

Token NameReferencesApplied To
font.button.mediumfont.text.medium.strongStandard button labels
font.button.largefont.text.large.strongLarge button labels
font.button.smallfont.text.small.strongCompact button labels

Form Input Typography

Token NameReferencesApplied To
font.form-input.medium-labelfont.text.medium.strongInput field labels
font.form-input.medium-valuefont.text.medium.normalInput field text values
font.form-input.medium-helpfont.text.small.normalHelper text, validation messages

Badge Typography

Token NameReferencesApplied To
font.badge.mediumfont.text.xsmall.strongStandard badge text
font.badge.largefont.text.small.strongLarge badge text
font.badge.smallfont.text.2xsmall.strongSmall badge text

Alert Typography

Token NameReferencesApplied To
font.alert.large-titlefont.text.xlarge.strongAlert titles
font.alert.large-bodyfont.text.large.normalAlert message text
font.alert.small-titlefont.text.medium.strongCompact alert titles
font.alert.small-bodyfont.text.medium.normalCompact alert text

HTML Element Typography

HTML element typography tokens provide default styles for semantic HTML elements, ensuring consistent typography when rendering content from CMS systems or markdown.

ElementToken ReferencesPurpose
<h1>font.html.h1Top-level heading
<h2>font.html.h2Second-level heading
<h3>font.html.h3Third-level heading
<h4>font.html.h4Fourth-level heading
<h5>font.html.h5Fifth-level heading
<h6>font.html.h6Sixth-level heading
<p>font.html.paragraphParagraph text
<body>font.html.bodyDefault body text
<code>font.html.codeInline code
<blockquote>font.html.blockquoteBlock quotations
<cite>font.html.citeCitation text
<ul>, <ol>font.html.listList text

Usage Guidelines

Choosing the Right Token

For components: Use component-specific tokens (font.button.*, font.form-input.*, etc.)

For content: Use contextual tokens (font.context.body.*, font.context.title.*, etc.)

For custom styles: Use composite tokens (font.text.[size].[weight], font.display.[size].[weight])

For fine control: Use modular tokens (typography.fontSize.*, typography.lineHeight.*, etc.)

Accessibility

  • Minimum font size for body text should be 16px (medium) for readability
  • Use strong or mass weights to ensure sufficient contrast in text hierarchy
  • Line heights of 1.5× or greater improve readability for body text
  • Avoid using elegant (light) weights for small text sizes

Performance

  • Limit the number of font families loaded to 2-3 maximum
  • Load only the font weights actually used in your design
  • Use system fonts when performance is critical
  • Consider variable fonts for flexible weight options with minimal file size

Brand Customization

To customize typography for a new brand:

  1. Create a brand token set (e.g., brand-acme.json)
  2. Override typography.fontFamily.* tokens with brand-specific fonts
  3. Override typography.fontWeight.* tokens to match available weights
  4. All composite and contextual tokens automatically update

Example:

{
  "typography": {
    "fontFamily": {
      "text": {
        "$type": "fontFamilies",
        "$value": "'Inter', sans-serif"
      },
      "display": {
        "$type": "fontFamilies",
        "$value": "'Playfair Display', serif"
      }
    },
    "fontWeight": {
      "text": {
        "normal": {
          "$type": "fontWeights",
          "$value": "Regular"
        },
        "strong": {
          "$type": "fontWeights",
          "$value": "SemiBold"
        },
        "mass": {
          "$type": "fontWeights",
          "$value": "Bold"
        },
        "elegant": {
          "$type": "fontWeights",
          "$value": "Light"
        }
      }
    }
  }
}