Typography
A short scale of named roles and three weights. The components and your app share the same ones.
Roles, not sizes
Each role bundles a size, line height, weight, and tracking under a name that says what itโs for: headings for hierarchy, body for reading, labels for naming, caption for metadata, and code for source. Pick by what the text is, and the rest follows.
Do
Q3 planning
Goals, owners, and dates for the quarter.
Edited 2 minutes ago
The title leads, the description supports, and the time sits quietly below.
Donโt
Q3 planning
Goals, owners, and dates for the quarter.
Edited 2 minutes ago
A label-sized title under prose-sized text puts the eye in the wrong place first.
Three weights
Regular for reading, medium for labels and actions, semibold for headings. Every role includes its weight, so you rarely set one yourself.
Build it
Choose the semantic element for the content, then apply a role. A smaller heading is still a heading.
123456<h1 className="heading-20 md:heading-24">Project settings</h1><p className="body-md">Manage your workspace preferences.</p><h2 className="heading-16">Notifications</h2><p className="body-sm">Changes apply to this workspace.</p><label className="label-md" htmlFor="name">Project name</label><p className="caption">Updated a moment ago</p>The roles live in styles/jzb-typography.css, which the theme imports. Edit the shared tokens to adjust the whole system:
12345678910:root { --type-heading-36: 36px; --leading-heading-36: 1.15; --tracking-heading: -0.025em; --type-body-md: 16px; --leading-body: 1.6; --weight-regular: 400; --weight-medium: 500; --weight-semibold: 600;}