Typography
Type carries almost everything a user reads — across English, Burmese, and Thai, often on a small, low-end screen. These rules keep text legible and scannable, and safe when Burmese and Thai run longer than English.
Typefaces
The rule. Inter is the Latin typeface — a neutral, highly legible sans designed for screens that stays clear at small sizes. Burmese uses Noto Sans Myanmar, which renders stacked characters and tall glyphs correctly. Thai uses Noto Serif Thai — a professional serif that gives Thai its own distinct, refined voice. All three share one scale.
Why. A first-time, low-literacy user reads slowly; an open, unfussy letterform with generous spacing is faster to decode than a tight or decorative one.
Type scale
One scale serves both languages. Sizes run a little larger than a typical desktop scale, because comfortable reading matters more here than fitting more on screen.
Weights
Build hierarchy with weight, not a pile of different sizes. Two or three sizes plus a weight step keeps a screen calm and easy to scan.
Burmese, Thai & line height
Burmese runs about 1.3–1.7× longer than the same English, and both Burmese and Thai stack marks above and below the baseline that need more vertical room. Never let a layout assume English length, and give Burmese and Thai a looser line height.
When to use which style
- Large title / Title 1 — the one thing a screen is about.
- Headline — a card's heading or a grouped section.
- Body / Callout — the default for sentences and values.
- Footnote / Caption — metadata and secondary labels, never the main message.
When NOT to
- ❌ Don't stack three or more sizes to create hierarchy — use weight instead.
- ❌ Don't size a layout to English and let Burmese overflow or clip.
- ❌ Don't drop below Footnote (13px) for anything a user must read.
What user problem this solves
Comprehension. If text is too small, too tight, or clips in Burmese, a first-time user can't read the screen — and stops trusting the app. A generous, shared scale with room for Burmese keeps every screen readable for everyone we serve.
A screen that looks balanced in English can break in Burmese or Thai — longer strings, taller glyphs. Check those layouts before calling a screen done.
Token reference
Font families
| Token | Value | Sample |
|---|---|---|
fontFamily.sans | Inter, 'Noto Sans Myanmar', 'Noto Serif Thai', sans-serif | Sales 123 |
fontFamily.myanmar | 'Noto Sans Myanmar', sans-serif | အရောင်း ၁၂၃ |
fontFamily.thai | 'Noto Serif Thai', serif | ยอดขาย ๑๒๓ |
fontFamily.mono | ui-monospace, SFMono-Regular, Menlo, monospace | Sales 123 |
Type scale
| Token | Size | Line height |
|---|---|---|
fontSize.caption2 | 11px | 14px |
fontSize.caption | 12px | 16px |
fontSize.footnote | 13px | 18px |
fontSize.subhead | 15px | 20px |
fontSize.callout | 16px | 22px |
fontSize.body | 17px | 24px |
fontSize.headline | 17px | 22px |
fontSize.title3 | 20px | 26px |
fontSize.title2 | 22px | 28px |
fontSize.title1 | 28px | 34px |
fontSize.largeTitle | 34px | 41px |
fontSize.display | 40px | 48px |
Weights
| Token | Value |
|---|---|
fontWeight.regular | 400 |
fontWeight.medium | 500 |
fontWeight.semibold | 600 |
fontWeight.bold | 700 |
Text styles
Ready-made presets components consume directly (size + line-height + weight + tracking).
| Token | Size | Line height | Weight | Tracking |
|---|---|---|---|---|
textStyles.display | 40px | 48px | 700 | -0.4 |
textStyles.largeTitle | 34px | 41px | 700 | -0.4 |
textStyles.title1 | 28px | 34px | 700 | -0.4 |
textStyles.title2 | 22px | 28px | 600 | 0 |
textStyles.title3 | 20px | 26px | 600 | 0 |
textStyles.headline | 17px | 22px | 600 | 0 |
textStyles.body | 17px | 24px | 400 | 0 |
textStyles.callout | 16px | 22px | 400 | 0 |
textStyles.subhead | 15px | 20px | 400 | 0 |
textStyles.footnote | 13px | 18px | 400 | 0 |
textStyles.caption | 12px | 16px | 500 | 0.4 |