boxcat

Proof

Every typographic decision on the site, set at the size it actually occurs

A specimen is for looking at. This one sets the measure, the scale, the mathematics and the notes in the margin at the sizes they actually occur, so all of it can be settled by eye.

The measure#

A column has a width, and the width is not a matter of taste. Too narrow and the eye never builds any momentum. Too wide and it loses the start of the next line on the way back, which feels like your own fault and is not. Bringhurst puts the comfortable range for a single-column serif setting at about sixty-six characters including spaces, and treats anything wider as needing extra leading to stay navigable (Bringhurst 2012).

Sixty-six here. It also leaves room for the margin column.

The scale#

Sizes come from a modular scale in ratio 1.2. The labels are roles.

2.488 Page title
1.728 Section heading
1.200 Subsection
1.000 Running text, which is nearly all of it
0.833 Captions, marginalia, metadata

The face is Source Serif 4, drawn by Frank Grießhammer for Adobe and released under an open licence (Grießhammer 2021). It carries an optical size axis: at the top the strokes thin and the spacing closes up, at the bottom the counters open and the letters stand further apart. Metal type did the same, cutting each size.

Where the lines break#

Browsers break a paragraph one line at a time. Each line takes as many words as fit, the break is set, and it is never revisited. A comfortable break early can force a bad one six lines down. In justified text this is visible as the pale channels that open through the column.

Knuth and Plass published the alternative in 1981 (Knuth and Plass 1981). Score every line by how far it has to stretch or squeeze, add penalties for hyphenation and for neighbouring lines that are noticeably unlike each other, and take the set of breaks with the lowest total. The paragraph is solved once, whole. It stays cheap because the best route to any breakpoint follows from the best routes to the ones before it. The production details are in Knuth’s TeX documentation (Knuth 1984).

A greedy line breaker saves a word early and pays for it four lines down.

This page runs that algorithm in the browser through Justif, Lyall Cooper’s implementation, which upgrades already-rendered HTML in place and declines any paragraph it cannot measure (Cooper 2026). With JavaScript off you get the browser’s own justification: worse, and intact.

Two smaller things ride along with it. Punctuation at the edge of a line hangs slightly outside the block, so the edge reads as straight rather than dented by every quotation mark. Word spacing moves in increments too small to see one at a time. Both belong to the micro-typography Zapf argued for in the hz-program (Zapf 1993) and Schlicht’s microtype package made routine in TeX documents (Schlicht 2025). Hochuli’s short book is the best account of why adjustments at this scale are worth making (Hochuli 2008).

Below about forty characters none of it works. No algorithm justifies a column that narrow without opening channels through it, so on a phone this page sets ragged right.

The margin#

Notes sit in the right margin, beside the sentence that caused them.4 Here. On a narrow screen there is no margin to sit in, so the marker becomes a control and the note unfolds in the text. Footnotes and endnotes ask you to carry a question somewhere else and bring it back. Tufte’s books keep the note beside the thing it annotates (Tufte 2006).

There is a second register:

Quotation#

Two registers here as well. A blockquote is evidence: someone else’s words, set apart and attributed.

Typography exists to honour content. Robert Bringhurst, The Elements of Typographic Style

A pull quote is the page’s own words, louder: the line above about greedy line breakers.

Tables#

Tables get what a statistics journal would give them: a heavier rule above and below, a lighter one under the header, nothing else. A vertical rule usually means the columns are too close together.

AssetRawOn the wireNotes
Text face283 kB283 kBwoff2 is already compressed
Maths face1,152 kB35 kBcut to the glyphs actually set
Stylesheet30 kB7 kBbrotli, precompressed at build
Line breaker152 kB49 kBblocks first paint, deliberately
Table 1 What the page costs to deliver. The maths face is the interesting row: it is cut at build time to the glyphs the site actually sets.

Numerals in a table are tabular lining figures, so the columns stack. In running text they are old-style — 1,847 and 1981 and 66 — sitting inside the line rather than standing above it.

Mathematics#

Equations are MathML, laid out by the browser directly (Wang and Verdier 2025), so they select, they search, they read aloud, and they scale. The face is New Computer Modern Math, Tsolomitis’s Unicode extension of Knuth’s Computer Modern (Tsolomitis 2025).

Inline mathematics such as ρ(x)=e^(−x^2/2σ^2)𝜌(𝑥)=𝑒𝑥2/2𝜎2 sits in the line without disturbing the leading.

𝑓̂(𝜉)=𝑓(𝑥)𝑒2𝜋𝑖𝑥𝜉d𝑥
(7)

Stretchy delimiters and large operators are the real test, since those glyphs are assembled from parts rather than drawn once:

𝐴2=sup𝑥0𝐴𝑥2𝑥2=𝜆max(𝐴𝐴)
(8)
(𝑎11𝑎12𝑎1𝑛𝑎21𝑎22𝑎2𝑛𝑎𝑚1𝑎𝑚2𝑎𝑚𝑛)(𝑥1𝑥2𝑥𝑛)=(𝑏1𝑏2𝑏𝑚)
(9)

Everything numbered can be referred to, and every reference carries a preview. Hover Equation 7, or Table 1, or Equation 9: the target comes to you.

Code#

def adjustment_ratio(target: float, natural: float, stretch: float) -> float:
    """How far this line must stretch to fill the measure. Zero is perfect."""
    if natural == target:
        return 0.0
    if natural < target:
        return (target - natural) / stretch if stretch > 0 else INFEASIBLE
    return (target - natural) / shrink if shrink > 0 else INFEASIBLE

Inline code such as font-optical-sizing: auto is set slightly smaller than the text around it. Monospace faces run large in the x-height.

Figures#

Figure 2 Diagrams render to inline SVG with currentColor strokes, so they invert with the theme instead of sitting in a lit box on a dark page. A CeTZ drawing belongs here; this is a placeholder at the right size.

Figure 2 scrolls inside its own box if it cannot fit, so the page body never scrolls sideways.

The apparatus#

The pipeline is Typst, whose 0.15 release added MathML output and a bundle target that emits a multi-file site from a single project (“Typst 0.15 Contains Multitudes” 2026). Typst treats the bundle as one document for introspection, so a reference in one essay to an equation in another resolves on its own.

Works cited#

  • “Typst 0.15 Contains Multitudes.” 2026. https://typst.app/blog/2026/typst-0.15/.
  • Bringhurst, Robert. 2012. The Elements of Typographic Style. 4th ed. Hartley & Marks.
  • Cooper, Lyall. 2026. Justif: Text Justification for Perfectionists. Released. https://github.com/lyallcooper/justif.
  • Grießhammer, Frank. 2021. “Source Serif.”. https://github.com/adobe-fonts/source-serif.
  • Hochuli, Jost. 2008. Detail in Typography. Hyphen Press.
  • Knuth, Donald E. 1984. The Texbook. Addison-Wesley.
  • Knuth, Donald E., and Michael F. Plass. 1981. “Breaking Paragraphs into Lines.” Software: Practice and Experience 11 (11): 1119–84.
  • Schlicht, Robert. 2025. The Microtype Package: Subliminal Refinements Towards Typographical Perfection. https://ctan.org/pkg/microtype.
  • Tsolomitis, Antonis. 2025. “The New Computer Modern Font Family.”. https://ctan.org/pkg/newcomputermodern.
  • Tufte, Edward R. 2006. Beautiful Evidence. Graphics Press.
  • Wang, David Carlisle, and Frédéric Verdier. 2025. Mathml Core. https://www.w3.org/TR/mathml-core/.
  • Zapf, Hermann. 1993. “About Micro-Typography and the Hz-Program.” Electronic Publishing 6 (3): 283–88.