Build note · Generative Assets · №102
CORESTACK is a fictional ice-core reading room. The page has one job: turn the scrollbar into a drill so that going down is going deeper — and older. Every forty pixels is one more annual layer of climate, read off the ice as you descend: bright snow years, dark ash years, and the dust bands left by history's great eruptions, logged live against CO₂ and temperature. Nothing here is a picture; every band, bubble and number is computed from the year at the drill head.
This is the second Wave-Five piece — the Deep Time set, where each page compresses a span the eye can't hold into something you can watch. An ice sheet keeps an honest diary: a snow layer for every year, thinning under its own weight as it is buried, darkening when a distant volcano throws ash into the stratosphere. CORESTACK reads that diary in the only direction it was written — downward. Scroll and the borehole wall slides past a fixed drill head; the sidecar names the year, the metres of ice above you, the CO₂ trapped in that layer's bubbles, and how much colder or warmer the season ran. At rest the drill sits at 1650 CE, deep in the Little Ice Age, so the first thing you see is banded ice — not a blank surface.
Four values argued from a core barrel under a work-lamp, plus one warm mark for heat. Ice is not white — it is a hundred cold greys — so the field is a faint blue-grey firn and the range runs to near-black ash.
One colour is added and argued: a muted ember (#B5763A) carries the temperature curve and the eruption leader lines — warmth, and fire. Like meltwater it is a mark, never set as small text, so the ink/line split holds and no readout drops below contrast.
Fraunces gives the current year the weight of a carved date — a single big serif numeral is the one warm, human note in an otherwise instrument-cold page. IBM Plex Mono does all the work: tabular figures mean the depth and CO₂ don't jitter as they climb, and the fixed grid suits a page that is, at heart, a scientific log. The one act of typographic nerve is the scale itself — a three-metre core barrel implied by forty-pixel annual bands, so the type sits inside a ruler you scroll through rather than beside a picture.
The whole piece rests on one honest coupling: the same scroll offset that moves the ice past the drill head also sets the year, which sets every reading and every band. There is no separate animation to fall out of sync — the CO₂ dot, the temperature curve, the depth in metres, the ash of a given year and the label that names it are all functions of the one number under the drill-head line. Make the ice move and the climate reads itself.
The first build was a pastel wash — the annual darkness ran across a tiny range near white, so the core looked like faint venetian blinds rather than banded ice, with no snow-year / ash-year contrast at all. Widened the dynamic range hard: a multi-octave hash for year-to-year variation, a Little-Ice-Age densification bump, and a strong ash boost in the years after an eruption, then remapped the colour ramp from bright firn all the way to near-black ash. Split each year into a bright spring layer over a darker winter one with a hoar boundary line. Now a Tambora or Samalas year lands as an unmistakable black band and the snow years glow — the strata finally look drilled.
Driving the core to 1815 exposed a silent bug the load probe missed: the eruption labels were being drawn inside the column's clip mask, so every chip was clipped away and no eruption was ever named on the ice. Collected the labels during the band pass and drew them after the clip released, with ember leader lines that reach into the empty left margin — which also balances the composition. Then the second-read detail: trapped air bubbles speckled through the firn, dense near the surface and squeezed out with depth — the very archive the CO₂ number is read from — plus a heavier boundary line every tenth layer so the eye can count decades.
At 375 px the corner colophon collided with the wrapped masthead and blurred over it — moved the colophon into the bottom sidecar on small screens and tidied the header to a single line. Took one ornament off (Chanel rule): a decorative meltwater caustic that shimmered over the ice but wasn't argued by the subject — ice cores don't shimmer. With it gone the render loop can settle and stop when the scroll is idle instead of running forever; it also pauses on visibilitychange, caps devicePixelRatio at 2, and rebuilds on resize. prefers-reduced-motion skips the loop entirely and paints one static frame at 1650, updating only when you scroll. Verified headless at 1440 / 375: one <h1>, zero console errors, the year and depth driving off their rest values as the core is drilled, and no horizontal overflow.