How it works
Every layer is an array with a time axis and, for an ocean model, a depth axis. The clock is a date,
and each layer finds its own nearest time step, so daily sea ice from 1978, daily SST from 1981 and a
daily ocean model from 1993 line up on one day; a layer with nothing near that date says so.
The datasets are virtual stores: byte-reference indexes on source.coop that point into the original
netCDF files where they are published. The page reads each one's flat/arrays.json for its
axes and units, opens its Icechunk form with icechunk-js,
and reads only the chunks it draws with zarrita.js.
Where the index lives is named once, in data/fourd/stores.json.
Depth is a place, not a slider: for an ocean layer the page reads every level down to a chosen depth
over a box, and draws one level as a shell below the surface, sunk by its depth times the
exaggeration, and two sections through the box along a meridian and a parallel. Decoded windows are
cached, and the next few dates are read ahead while one is shown, so Play only shows dates that have
arrived.
The globe unfolds onto a map: equidistant from a centre (the box, or a picked point), or Spilhaus,
which puts the world ocean in one square. Depth stays depth: on the map it goes down from the plane
by the same exaggeration. The horizon keeps only what lies within a range of the centre, on the
globe and on the map.
Each layer can be drawn as its colour fill, as contour lines, or both: lines are traced through
the cell centres (marching squares) at the layer's contour step, on surfaces and on the shell and
sections of an ocean layer, and a sea ice layer also gets its edge at 15 percent. The links beside a
layer open the same array and date in gridlook or the store explorer.