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.
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
- The first RNG seed settled the fit at a sloppy 4.58 Ga / MSWD 0.53 (under-dispersed). Searched seeds for one whose least-squares fit lands at 4.51 Ga, MSWD 0.89, intercept 0.7000 — a resting frame that is both premium and defensible.
- The giant numeral collided with the y-axis ticks and gridlines and read cluttered. Added a soft radial paper scrim behind it so it lifts off the grid as a deliberate overlay readout.
- Found the re-measure loop firing on the very first settled frame — it overwrote the tuned resting seed before anyone (or the 7-second thumbnail) could see 4.51. Held the clean fit for 3.4 s past settle before live re-measuring begins.
Pass 2 · Depth
The second read, and one micro-interaction
- Kept the faint slope −1 evolution tracks as the second-read detail: they fade in only after the isochron settles, drawing a dotted line from each grain's origin on the initial-ratio line to where it sits now — showing, literally, how far each mineral has travelled.
- Added a point-hover micro-interaction: hovering a grain fills it iso-red, marking it as a selected measurement without disturbing the fit.
- Tuned the variable-weight resolve so the age reads as searching then resolving — light while the slope is still climbing, heavy once it locks.
Pass 3 · Hardening
375px, reduced motion, and a Chanel-rule trim
- Verified 375px: nav, wordmark, and figure sit within the viewport;
scrollWidth = 375, zero offenders. Readouts collapse 6→3→2 columns.
prefers-reduced-motion renders the fully settled frame once with no rAF (checked under an emulated media feature: 4.51 Ga, line and seven points drawn, zero console errors). The loop also pauses on document.hidden and resumes into the live state.
- Chanel rule: cut "7 mineral separates" from the plot caption — it already lives in the readout strip — leaving only the equation the caption uniquely carries.