Skip to content

Note · 2026-10-23 · 4 min

Three scripts, three line heights

The site ships three scripts: Latin, Simplified Chinese, and Khmer. They do not share a measure. Latin needs tighter leading and a narrower column; Chinese needs a larger line-height and no letter-spacing; Khmer needs more of both, and no letter-spacing at all.

Latin

Latin is the source. Body text is 17–18px with a line-height around 1.65 and a measure of roughly 65 characters. Display type is tracked slightly negative; Chinese and Khmer are tracked at zero. The same CSS cannot set all three.

Chinese

The Chinese pages use a subset of Noto Sans SC, rebuilt at build time from the characters actually used on the site. The current subset is about 27 KB per weight, with a hash in the font URL, so a copy change produces a new file instead of a stale cache.

The body line-height is 1.8. Headlines get no negative tracking. The subset is a build step, not a runtime fallback: if a character is missing, the browser falls through to a system font, which is a silent failure. The fix is to run the subset script with the site build, which prebuild now does.

Khmer

Khmer is the hardest of the three. Strings run 25–35% longer than English, so buttons cannot be fixed-width. The root font size is 112.5%, body line-height is 1.9, and every heading sets letter-spacing: 0. Without that, the script's combining marks separate.

The Khmer pages do not use the display serif yet. We will compare Noto Serif Khmer on three headings before it can replace the sans. If it does not hold up, the display falls back to Noto Sans Khmer 600 and the body stays as it is.

What v2 changes

v2 adds a serif display face and a mono label face. The serif is Noto Serif for Latin; Chinese still falls back to the system Songti until a Noto Serif SC subset exists. The mono is IBM Plex Mono for labels, figure numbers and dates.

The rule is unchanged: one role per script, not one font for everything. A display face can differ by script as long as the role stays the same.

What is still missing

  • A Noto Serif SC subset for Chinese display type.
  • A team test of Noto Serif Khmer.
  • A test page that renders the longest Khmer navigation item at 390 px.

Until those are done, the typography is a working system, not a finished one.