Typography
Ten sizes, two weights, one typeface. Every text style reads its size, line height and tracking from variables, so the whole ramp moves together.
Preview
One typeface carries the system. Inter, ten sizes, two weights, the same in Figma and in every target the tokens generate.
fontFamily/Heading and fontFamily/Body both alias one family variable. Repoint that one value and headings and body move together, so a brand swaps the whole system with a single edit.
Figma lists the face as Inter Variable and ships Regular and Semi Bold as named styles. In code the family is Inter. One face, two names, one variable behind both.
Scale
Ten steps, and that is the whole vocabulary. Every line below is set in the step it names, at its real size, with its own line height and letter spacing applied.
Letter spacing moves in three bands, not per step. Wide +0.1 on xs and sm, normal 0 on base, lg and xl, tight -0.4 on 2xl and up. That is the file’s own rule, and it is why the ramp holds at both ends: small text opens, large text closes. Line height has its own tell. 18 and 20 both set on 28, so lg and xl share one rhythm.
Weights
Two weights. Regular 400 is Default, Semi Bold 600 is Emphasized. Each of the ten steps ships twice, once in each, and the pair shares one size, one line height and one letter spacing.
Two weights is a decision, not a gap. No text style and no variable defines a Medium, so there is nothing to bind a layer to and nothing to drift toward. Hierarchy comes from size and spacing.
Platforms
The ramp is wired to both platforms as variables, not as a note in a description. Every Apple text style and every Material 3 type role resolves to a step below.
That is Brand mode. The same variables have a System mode that returns the platform’s own published numbers instead, Apple’s 17pt body and Material’s 57sp displayLarge among them, so a mirror screen can switch platform without being rebuilt. Set the mode on the frame and everything inside follows.
The bridge carries the size and only the size. Line height, weight and tracking stay on the Appetite side, so a step keeps its rhythm whichever platform name you reach it by. Dynamic Type and Material scaling are runtime behaviour no Figma file can model: read every number here as the default size class.
Tokens
Twenty text styles resting on twenty eight variables. The styles are what you apply to a layer; the variables are what move when you change your mind.
Each row is two styles, not one. 3xl/default is Regular 400 and 3xl/emphasized is Semi Bold 600; size, line height and tracking are identical across the pair. base is the only style carrying paragraph spacing, 16, because it is the only one that regularly runs past a line.
Ten sizes and ten line heights complete the collection, one matched pair per step. The family variables are no longer the control point on their own: both resolve through platform/font/brand, so repoint that one value and the whole system moves, Figma and generated code together. Change a family variable alone only if headings should break away from body.