
CalCOFI Explorer
One app, five lenses β stations, hexagons, cruises, regions and sections β for one organism or one ocean variable at a time over the frozen release.
DuckDB-WASM MapLibre Plotly
Open β Source β status Β· usage
The SIO look as connective tissue: UC San Diego's palette β navy type on white, UCSD blue links, one yellow accent, Sand and navy bands β with Source Sans 3 and Teko standing in for Brix Sans and Refrigerator Deluxe, a horizontal lockup in the header, and the same tokens at two scales. This page is every token, both themes, both scales. Click the toggle at the right.
ship β workflows β database β apps Β· services Β· R
Explore the data Read the contract
fonts: checkingβ¦
Source Sans 3 (variable 200β900, roman + italic) for body and UI; Teko (variable 300β700) for page display headings only. Both OFL, self-hosted in fonts/ (72 KB, latin). The tokens name roles (--sans, --display), so licensing Brix Sans later is a one-file swap.
Body Source Sans 3 400 at 18 px on 1.44 β since 1949, CalCOFI cruises have sampled the California Current, one of the longest-running ocean observing programs anywhere. View all
Caption 14 px Β· italic 400 Β· bold 700 Β· semibold 600 Β· light 300 Β· 0123456789 Β· mono --fs-sm
Body 13 px β the explorer's working surface: one organism or one ocean variable at a time over the frozen release, the queries run in your browser, every view is a URL.
Group title 11.5 px 600 uppercase
Hint 11.5 px muted on the panel gray Β· 1,234 observations Β· release v2026.08.25
The same at 11 px in system-ui, for the eye: Source Sans 3's x-height is smaller, which is why --fs-sm is 11.5 px in the app scale.
β¦and 11 px in Source Sans 3 β hint 11 px muted on the panel gray Β· 1,234 observations Β· release v2026.08.25
Read from theme.css by this page (not copied), so the table cannot drift from the file. WCAG 2 contrast for every text token on every ground it is used on; AA for normal text is 4.5:1. Two values are derived from the brand rather than verbatim β --muted (Cool Gray darkened: the brand's #747678 is 4.2:1 on the panel gray) and light --warn (Gold darkened: #C69214 is 2.8:1 on white) β plus --cc-green/--cc-red for an app's go / no-go states.
| token | light (default) | dark | note | ||||||
|---|---|---|---|---|---|---|---|---|---|
| value | on --bg | on --panel | on --band | value | on --bg | on --panel | on --band | ||
The bar at the top of this page is the page-scale header (72 px, lockup 36 px, uppercase 15 px nav). The app-scale one (44 px, lockup 28 px, 13 px) is in the iframe under App. One bar, no utility strip, no search: the lockup β calcofi.io, the product title β its own root, the release chip, the product's links, the toggle.
Drawn by scripts/build_lockup.py: the v1 rosette + "CalCOFI" in Source Sans 3 800, shaped and outlined, so the SVG needs no font. The long programme name was tried beneath the wordmark and is illegible at 36 px; it stays in prose.
One yellow per view β it is the accent, not a colour. 8 px corners, 42 px tall, 200 px wide on pages; 28 px tall in apps.
Rounded, borderless, no shadow; the image on top; an uppercase eyebrow; the title in the accent; the "open Β· source" row as text-links. --panel-2 on a band, --panel on the page ground.

One app, five lenses β stations, hexagons, cruises, regions and sections β for one organism or one ocean variable at a time over the frozen release.
DuckDB-WASM MapLibre Plotly
Open β Source β status Β· usage

Every dataset at a station: what was sampled, when, and the time series behind it.

The band re-tokens its subtree: --fg, --muted, --accent and the panels resolve to values that read on navy, so a card, a chip or a text-link inside needs no second rule set. A text-link
The same tokens with <meta name="cc-scale" content="app">: 13 px body, 11.5 px labels, 4 px gutters, a 44 px header with the lockup at 28 px, 4 / 6 px corners. This is the explorer's rail, legend and a floating card in copied markup β the test of whether the type works at density. The whitespace of the page scale does not transfer, and is not supposed to.
Opens on its own: ?scale=app.
Organism
density per 10 mΒ² Β· standard haul factor
Filters 1990β2005 Β· Q1 Q2
Export
1,234 stations Β· 45,678 samples Β· release v2026.08.25 Β· DuckDB-WASM in your browser
line 90 Β· station 60 Β· 33.2Β°N 119.3Β°W Β· seafloor 1,850 m
mean 36.4 per 10 mΒ² Β· 412 tows Β· 1951β2024
β query 41 ms Β· β 1 dataset without effort