Typeface references
Brand, Plain and Mono are shared font-family references — the wrapper layer. Every type style inherits its font from one of them, so changing a reference here restyles every style that uses it. Personality up top via Brand, comfortable reading via Plain, technical content via the Mono extension.
Which writing systems must your type render?
A typeface only draws the characters — glyphs — it actually contains. Those glyphs ship grouped into writing systems (Latin, Cyrillic, Greek…), and the writing system, not the language, is the unit a face either carries or doesn't: German, French and Spanish all ride on Latin, so a face that draws one draws all three. If your product ships in a writing system a face doesn't include, that text quietly falls back to a system font — or the dreaded “tofu” boxes. Tell Etesie which writing systems you ship in and every typeface is checked against them.
The browser walks each family's fallback stack and uses the first face that has each glyph —
exactly the CSS font-family fallback relay Material relies on.
Two typefaces, two jobs
Splitting type into two roles keeps a system both expressive and readable. The brand face appears rarely and large, so it can afford character. The plain face appears constantly and small, so it has to stay quiet and legible. Etesie assigns them automatically by role.
Brand typeface
Carries display, headline and title roles — the large text that sets tone and draws the eye.
Plain typeface
Carries body and label roles — the working text that must stay effortless to read at length.
A third voice: mono, for technical content
Material's type system defines exactly two typeface families — brand and plain — mapped under md.ref.typeface.*. But developer-facing products
render code, keys, hashes, file paths and aligned numbers. That needs a monospace voice Material
doesn't cover.
Etesie adds one thing transparently: --et-typeface-mono. It never
replaces brand or plain. Technical styles reuse real Material role and size metrics and only
swap the family. codeInline is just Body M, in mono.
How they pair
A headline set in your brand face
And the body copy beneath it, set in your plain face. The contrast between the expressive brand face above and the calm plain face here gives the page hierarchy and voice — without either one fighting the other.
Mono stack: geist-mono