FoundationUsable

Typography

Space Grotesk for the interface, IBM Plex Mono for code and DM Sans 900 for game moments, with semantic roles.

System statusUsable

Variable Space Grotesk 300–700: headings 500–600, labels 500 and reading 400. IBM Plex Mono 600 for code and metadata. DM Sans 900 only for rewards and game titles.

Current state

Decisions that already exist and can be observed in the product.

Font files and their OFL licenses are served from /fonts; no Google Fonts request.

Headings use clamp with rem bounds. Inputs use 1rem and paragraphs a 1.75 line height.

Every weight ships as a real file; nothing is synthesized. The registry distributes font stacks and roles; consumers copy the font files and declare @font-face.

Interface font · Space Grotesk · 300–700

Build with character.

Clear hierarchy, strong contrast, and comfortable reading for real product interfaces.

bl-type-display

Build with character. Learn by making.

clamp(2.5rem, 1.5rem + 4vw, 4.5rem) · 500 · 1.1 · -0.04em

bl-type-page-title

Build with character. Learn by making.

clamp(2rem, 1.5rem + 2vw, 3rem) · 600 · 1.15 · -0.03em

bl-type-section-title

Build with character. Learn by making.

clamp(1.25rem, 1rem + 1vw, 1.5rem) · 500 · 1.25 · -0.02em

bl-type-card-title

Build with character. Learn by making.

1.125rem · 500 · 1.3 · -0.01em

bl-type-body

Build with character. Learn by making.

1rem · 400 · 1.75 · 0em

bl-type-small

Build with character. Learn by making.

0.875rem · 400 · 1.7 · 0em

bl-type-label

Build with character. Learn by making.

1rem · 500 · 1.5 · 0em

bl-type-label-small

Build with character. Learn by making.

0.875rem · 500 · 1.5 · 0em

bl-type-label-large

Build with character. Learn by making.

1.125rem · 500 · 1.5 · 0em

bl-type-input

Build with character. Learn by making.

1rem · 400 · 1.5 · 0em

bl-type-code

Build with character. Learn by making.

0.875rem · 600 · 1.7 · 0em

bl-type-eyebrow

Build with character. Learn by making.

0.75rem · 600 · 1.5 · 0.1em

bl-type-game-title

Build with character. Learn by making.

clamp(2rem, 1.25rem + 2.5vw, 3.5rem) · 900 · 1.1 · -0.02em

bl-type-game-number

Build with character. Learn by making.

1rem · 900 · 1.2 · 0em

Technical font · IBM Plex Mono

npx shadcn@latest add https://brutallab.facilito.dev/r/brutallab-typography.json

Current tokens

Values present today; documenting them does not make every value final.

TokenValueCurrent use
clamp(2.5rem, 1.5rem + 4vw, 4.5rem) / 500 / 1.1Space Grotesk
clamp(2rem, 1.5rem + 2vw, 3rem) / 600 / 1.15Space Grotesk
clamp(1.25rem, 1rem + 1vw, 1.5rem) / 500 / 1.25Space Grotesk
1.125rem / 500 / 1.3Space Grotesk
1rem / 400 / 1.75Space Grotesk
0.875rem / 400 / 1.7Space Grotesk
1rem / 500 / 1.5Space Grotesk
0.875rem / 500 / 1.5Space Grotesk
1.125rem / 500 / 1.5Space Grotesk
1rem / 400 / 1.5Space Grotesk
0.875rem / 600 / 1.7IBM Plex Mono
0.75rem / 600 / 1.5IBM Plex Mono
clamp(2rem, 1.25rem + 2.5vw, 3.5rem) / 900 / 1.1DM Sans
1rem / 900 / 1.2DM Sans

What is missing

Gaps that prevent this foundation from being a stable rule.

Some inherited components retain direct typography utilities.

Next decisions

Recommended order for turning findings into a stable foundation.

  1. 01

    Use semantic roles and preserve h1/h2/h3 hierarchy. Check long translations and zoom before publishing.