Isochron

Colophon · site 111 · Deep Time

How Isochron was made

Isochron is a fictional geochronology page with one job: to derive an age in front of you. Seven mineral grains from a single 4.51-billion-year-old cooling event are plotted as a Rb–Sr isochron; as simulated time runs, they slide down their evolution tracks, the line through them pivots up about the initial ratio, and the fitted slope is read out as an age. The audience is anyone who has heard that we "date rocks" and wanted to see the actual geometry that makes it work.

Palette

A dating lab works on bleached printout under a drafting pen. The bright madder red is reserved for the isochron line and marks; small text takes a darker ink so body copy clears 4.5:1 on paper — the ink/line split, applied from the start.

Paper
#F0ECE2
Bleached lab printout — the ground everything is measured on.
Plot ink
#1A1D1F
Graphite near-black — the data points, axes, and the age.
Grid ash
#9AA0A2
Pencil grid — lines only, never small text.
Ash ink
#5C6163
The darker sibling for labels — clears contrast on paper.
Iso red
#C23A2E
Drafting-pen madder — the isochron line and the unit mark.
Red deep
#9C2C22
The one red permitted at small sizes (equations, ±).

Type

Isochron 4.51
Inter Tight (variable, wght 100–900) — display and the giant age numeral. Its weight axis is animated: the number resolves from a light, searching 220 to a settled, heavy 720 as the fit locks in. Tabular figures keep the digits from twitching.
m = 0.0662 · λ = 1.42e−11
IBM Plex Mono — every readout, axis label, and caption. The instrument voice: fixed pitch, unglamorous, trustworthy.

The signature: a self-plotting isochron

No library — the whole diagram is inline SVG generated and animated in vanilla JS on a single requestAnimationFrame loop. The model is physically honest. Each grain i starts with rubidium ratio x₀ᵢ and the shared initial strontium Y₀ = 0.7005. As time t runs, rubidium decays to strontium atom-for-atom:

xᵢ(t) = x₀ᵢ · e^(−λt)   // ⁸⁷Rb/⁸⁶Sr falls
yᵢ(t) = Y₀ + x₀ᵢ · (1 − e^(−λt)) + ε  // ⁸⁷Sr/⁸⁶Sr rises by exactly what Rb lost

Each grain therefore slides down a track of slope −1 while the whole set stays colinear, pivoting about (0, Y₀). Crucially the age is not scripted: every frame least-squares-regresses the displayed, noisy points, and the age falls out of the fitted slope m:

t = ln(m + 1) / λ   // λ(⁸⁷Rb) = 1.42×10⁻¹¹ /yr

So the readout you watch — 4.51 Ga, ± 0.07, MSWD 0.89 — is genuinely computed from the scatter on screen. A seeded RNG fixes the resting sample so the settled fit lands on an honest 4.51 Ga; after a hold the page keeps re-measuring, re-jittering the points within their error and recomputing the fit, so the age breathes the way a real analysis does. A second SVG panel draws the ⁸⁷Rb decay curve and marks where 4.51 Ga falls: barely 9% of one 48.8-billion-year half-life — the clock has scarcely begun.

Three passes

Pass 1 · Craft

Making the resting state honest and legible

Pass 2 · Depth

The second read, and one micro-interaction

Pass 3 · Hardening

375px, reduced motion, and a Chanel-rule trim