20  Atlas — the static, in-browser scores, species and places app

current

21 Atlas

21.1 Overview

The Atlas (https://marinesensitivity.org/atlas/?ver=v4) is the MST’s interactive application: one static web app, built with Svelte and MapLibre, that runs entirely in the browser. Where the Scores and Species Shiny apps it replaced were server-rendered R processes, the Atlas has no application server of its own: scores, flowers, tables and reports are computed in your browser, by a DuckDB instance compiled to WebAssembly (DuckDB-WASM) querying the release’s published Parquet directly over HTTPS. It still depends on a few other services for what a browser cannot compute itself — score and species map tiles come from the project’s titiler, zone outlines from PMTiles on S3, and the basemap from CARTO — but there is no Atlas-specific backend.

On the public host the release is a query parameter (?ver=v7), resolved client-side against the published versions.json and defaulting to the promoted release when absent. A restricted pre-release is served only through the signed-in preview host, at https://preview.marinesensitivity.org/{ver}/atlas/ (the version as the URL path, since Cloudflare Access scopes its reviewer policies by path, never by query).

This chapter describes the Atlas as of version 0.10.93. Figure 21.1 shows the default Scores view: the 0.05° cell grid colored by a composite sensitivity score across U.S. waters, dark theme (the app’s default). In the current build the four-tool rail is attached to the panel, which opens docked on the left with Layers showing, the map’s legend sits at the bottom right, and the basemap’s attribution is just under it.

The Atlas Scores lens in dark theme on a globe centred on North America: a Spectral-colored score raster along U.S. coasts outlined by Program Area boundaries, a legend card with a score histogram at lower right, and at the left a rail of four icon buttons (Layers highlighted, Details, Table, Report) beside the open Layers panel titled Score · Raster cells. The top bar shows the release chip (v7), the Scores and Species switch, a search field, and icon buttons for Share, Download, Help, Feedback, About and the theme.
Figure 21.1: The Atlas, Scores lens, default view (desktop, dark theme): the Layers panel and its four-tool rail docked on the left, the score legend at the bottom right. Atlas 0.10.91, release v7, 2026-10-16.

Desktop vs. phone layout. On a wide viewport the four rail tools — Layers, Details, Table, Report, the same in both lenses — open a single panel attached to the rail. It docks on the left by default, one header button moves it (and the rail) to the other side, and Table takes the whole stage instead of the side panel. On a phone the identical four tools sit in a labelled bottom tab bar, and the panel becomes a bottom sheet with three heights (peek, half, full). Figure 21.2 shows the phone layout, and Figure 21.3 its top bar’s More (⋯) menu.

The Atlas on a phone: a thin top bar with the release chip, the Scores and Species switch, a search button and a more (three-dot) button; a dark map of the United States with the score raster along the coasts and a Legend · Score chip; a bottom sheet titled Score · Raster cells showing the Raster cells and Program areas switch, a Layer menu and the first rows of the layer stack; and a bottom tab bar with four tabs (Layers, Details, Table, Report).
Figure 21.2: Phone: default view, with the Layers sheet at half height above the four-tab bottom bar. Atlas 0.10.91, release v7, 2026-10-16.
The phone's more menu open over the map: Share, Download…, Feedback, About this release, Take a tour, Docs and Switch to light theme, above the Layers sheet and the four-tab bottom bar.
Figure 21.3: Phone: the top bar’s More (⋯) menu, listing Share, Download…, Feedback, About this release, Take a tour, Docs and the theme switch. Atlas 0.10.91, release v7, 2026-10-16.

21.2 Quick start

Desktop:

  1. Click a cell or a Program Area on the map, then open Details (the rail’s second tool, or the popup’s Details link) for its flower plot; Add to report keeps it as a place, and Open table lists its species.
  2. Or open Report, and under Add a place choose a Program Area, pick one on the map, draw a Rectangle (click, move, click, then Done), pick from the gazetteer, type coordinates or upload a file.
  3. Select a place in the list — Program Area or drawn — to see its results: a coverage note (or, for a Program Area, its published cell count, area and composite), a flower and component table, and (on request) its species table. Rename a drawn place inline if you like.
  4. Share at the foot of the Report tool opens the place-link dialog — the fastest way to hand someone the same place.
  5. Open report (the gold button at the foot of the Report tool) opens a printable, downloadable document (Print, HTML, ZIP or Word).

Phone: the tool rail is the bottom tab bar; use the Program Area picker or Enter coordinates rather than drawing, and the file picker rather than dropping a file on the map (that gesture needs a desktop pointer).

21.3 Getting around

The top bar, left to right on desktop: the MST mark and title; a release chip that opens the version picker; a Scores | Species lens switch; a search field (Program Areas, regions and coordinates in the Scores lens, Section 21.4; species in the Species lens); then, right-aligned and icon-only (each shows a tooltip on hover or focus), Share, Download (a PNG or SVG of the map view, a GeoTIFF of the current data layer, or a GeoJSON of the current places), a (?) Help menu (Take a tour, keyboard shortcuts, a Docs link), Feedback, About this release, and a sun/moon theme toggle. On a phone (below 900 px) the title collapses to the mark, and Share, Download, Feedback, About, Take a tour, Docs and the theme toggle fold into one More (⋯) menu beside a search button; below 381 px the mark hides too. The keyboard-shortcut list is desktop-only. Report is not a top-bar control on either viewport: it is a rail tool.

The tool rail is four controls, always in the same order, in both lenses and on every viewport: Layers · Details · Table · Report. Layers holds the map’s layer stack and the lens’s own data controls. Details shows what was last clicked — the flower plot in the Scores lens, the species information in the Species lens. Table is the species, zone and composition tables (the model inputs, in the Species lens). Report is the Places flow and the report itself.

The panel that a rail tool opens is attached to the rail and docks on the left by default; one header button moves both to the right, and the choice is remembered per browser. Resize it by dragging its map-facing edge or with arrow keys, or collapse it to a small labelled pill; clicking the active tool collapses the panel, and clicking any tool opens it. Table takes the whole stage beside the rail (its “← Map” button returns). The panel’s header says what is shown — the active layer and unit, the clicked cell or species name, “3 places” — rather than the tool’s name, which it shows only when nothing is selected (“Details”, “Table”, “Report”). The panel arrangement is chrome, not part of the shared view: only the top bar’s Share writes it into a link (as a ui= token), the address bar does not carry it. On a phone the same panel is the bottom sheet, with peek/half/full detents. On a desktop the map’s legend floats at the bottom right (mirroring to the bottom left when the panel is docked on the right), with a histogram of the whole layer’s values above its colour ramp and a marker for the clicked value; on a phone it is a compact Legend chip above the sheet that opens the full legend, moving into the sheet’s own header at full height.

21.4 Scores lens

The Scores lens shows the composite, extinction-risk-weighted score for every 0.05° cell (or, aggregated, every Program Area) of U.S. waters. Layers (Figure 21.4) opens with this lens’s own controls at the top: a Raster cells | Program areas switch for the spatial unit, and a Layer menu (the composite score or one component) with a short description of what it shows. Below them, Layers on the map lists the rows you can change, top to bottom: Selection (pinned at the top), Outlines, Data and Place labels. Expanding Data gives its Color palette and, where the release publishes that overlay, a Cells outside Program Areas switch; a Sphere (globe projection) switch sits under the list. Every row’s visibility and opacity can be changed and most can be reordered, but Data can never move above Outlines, so an opaque score raster can never hide the boundaries it is measured against. The basemap’s land, boundaries and roads are drawn under everything and have no row of their own. Reset layers restores the default stack.

A dark panel titled Score · Raster cells with two header buttons (move the panel, collapse it), a Raster cells and Program areas switch, a Layer menu set to Score with a short description, and a Layers on the map list: Selection (nothing selected, disabled), Outlines, Place labels, then an expanded Data row holding a Spectral Color palette menu and an unchecked Cells outside Program Areas switch. Below the list are a checked Sphere (globe projection) switch and a Reset layers button. Place labels now sits above Data.
Figure 21.4: The Layers panel with Place labels moved above Data (one “move up” click) to show the reorder feature, and Data expanded to its Color palette menu and the Cells outside Program Areas switch. The panel’s header names what is on the map (“Score · Raster cells”); the Raster cells and Program areas switch, the Layer menu with a short description of the score, and the layer stack sit below it. Atlas 0.10.91, release v7, 2026-10-16.

Clicking a cell or a Program Area selects it: the URL gains a sel=cell:<id> or sel=zone:<unit>:<key> token, which the Details (flower plot) and Table tools then describe (Section 21.8). A click never switches tools: it updates Details in place and adds a “Last clicked” row to the Report tool. A click on land or outside the scored area shows “No scored cell here” with its coordinates and leaves the selection unchanged.

The top-bar search field also works here: it matches Program Areas (and any subregion/ecoregion archive the release happens to publish) by key (“ALA”) or by name (“Aleutian”), and coordinates typed as “lon, lat” (e.g. “-140, 57” — “lat, lon” is read correctly too, either by an explicit lat/lon label or because the default order would be out of range). Matching is entirely offline, against only what the release itself already publishes — no Nominatim, no third-party geocoder, no network call. Choosing a Program Area result selects it exactly as clicking it on the map would, and flies the camera there; choosing a coordinate result flies to the point and selects that cell. Results are a keyboard-navigable list (arrow keys, Enter to select, Esc to close), on both the desktop top-bar field and the phone’s search modal.

21.5 Species lens

Switching to Species turns the top-bar search into a species picker (common or scientific name, with an “Only species in US waters” checkbox). Layers then leads with a Model input picker — a bar headed ✓ Merged Model (maximum of N inputs) (▶ and the input’s name once an input is picked) with a gold left edge, the active layer as a gold-filled pill, plus one pill per contributing input dataset — a Zoom to layer on change checkbox (on by default; picking an input refits the camera to that surface, and zl=0 in the link turns it off), and, where the selected input publishes both, a labelled Show … as switch (“Original” vs. “Interpolated,” or “Delivered” vs. “As ingested” for a dataset already on the scoring grid). Below it the Data row carries the species title with its zoom actions. An input’s raster is found the way the retired Species Shiny app found it — through the release’s model-asset registry, looked up by model key — and an input whose registry row is missing renders as a struck-through, non-interactive pill, never simply omitted. The species’ own information — names, ESA listing, IUCN Red List category, WoRMS id, and the tree of values (the merged model and its inputs, the layer on screen in bold) — is in Details. Selecting a species flies the map to that model’s extent; clicking it then returns that cell’s modelled value, or “No scored cell here” outside the model’s range. The legend floats in a corner of the map (a legend chip on a phone), titled with the species’ common and scientific name, with a subtitle naming the layer and its 1–100 range.

A dark panel titled Leatherback Turtle (Dermochelys coriacea) with a Model input group: a gold-edged box reading Merged Model (maximum of 6 inputs) with a highlighted Merged Model pill and six outlined input pills (AquaMaps SDM, NMFS Critical Habitat, FWS Critical Habitat, FWS Range, IUCN Range, SWOT+DPS Turtle Range), none struck through, then a Zoom to layer on change checkbox and the layer stack. The Data row shows the scientific and common name with copy buttons and a US waters and Whole range switch. The globe behind shows the merged model's habitat suitability over the Pacific and U.S. coasts, with a legend at lower right.
Figure 21.5: The Species lens’ Layers panel for the leatherback turtle (Dermochelys coriacea): the merged model selected, with all six of its inputs available as pills. In the layer stack, the expanded Data row shows the scientific and common names (each with a copy button) and, for a wide-range model, a US waters / Whole range zoom switch. Atlas 0.10.91, release v7, 2026-10-16.

21.6 Places

Places — the first part of the Report tool, listed with its count (“Places 2 / 20”) above an Add a place section — is what the two retired Shiny apps did not have: any area you outline gets the same scores and species results the built-in Program Areas get. The empty state reads exactly: “No places yet. Click the map, or add one below.” A click on the map shows up as a pink Last clicked row with an Add button, which hides once that place is in the list; a click never wipes places you have explicitly added.

  • Pick a Program Area. The Add a Program Area chooser plus Add this Program Area needs no pointer and works on a phone. Or turn on Pick mode and click on the map — that only highlights it (Ctrl/Cmd-click, Shift-click or long-press to highlight several) — and “Add to places (n)” is the button that actually adds it; several picks become one place. Program Areas are shown as “Full Name (KEY)” — e.g. “St. George Basin (GEO)” — from an app-side name table generated off the canonical Program-Area geometry (no published release, v6 through v9, actually publishes a full name on its own Program Area rows; a release that does publish one is preferred when present), everywhere: Places, search, the map tooltip, the Details flower’s title, the Table header, the Zones table and the report.
  • Pick from the gazetteer. Turn on Pick from gazetteer to show the gazetteer’s polygons on the map and click one to add it. The place is carried in the link by its gazetteer id, not its outline (Section 21.7); other gazetteer collections appear in a Gazetteer layer selector once the gazetteer publishes its layer list, and the map’s credit line names the gazetteer’s data while its polygons or places are shown.
  • Draw a Polygon, Rectangle or Circle: click, move, click for each vertex or corner (not a drag), then press Done — a polygon also closes when you click its first vertex again, or press Enter. A circle is stored as a 64-sided polygon. Dragging a finished shape’s corner edits that place in place (same row, same name, re-analysed) rather than adding a new one.
  • Enter coordinates — the keyboard/screen-reader alternative to drawing, in a modal dialog: a bounding box (xmin, ymin, xmax, ymax), a list of lon, lat vertices one per line, or pasted WKT/GeoJSON. A refusal is shown verbatim — what went wrong, why, and how to fix it.
  • Upload a file, through the picker or by dropping it anywhere on the map: “GeoJSON, zipped shapefile, KML, GPX, FlatGeobuf, WKT or GeoPackage, up to 10 MB.” GeoPackage is now read (polygons only, same as every other format), through the same resident DuckDB-WASM engine the scores boot, via its spatial extension — fetched live, with consent, from extensions.duckdb.org (the one deliberately non-mirrored third-party download, 22.4 MB); each .gpkg upload asks first, not just the first one in a session. A GeoPackage with no vector layer (raster tiles, or a plain attribute table) is refused when ST_Read fails to read it (see Known limitations), not by a dedicated check. Other rules that cause a refusal: polygons only (points and lines are refused, never buffered); a shapefile needs its .prj (projected coordinates are refused); at most 50,000 vertices; a zipped shapefile at most 50 MB uncompressed and 200 entries; and the shape must touch the U.S. study area. A feature’s own name (KML’s <name>, or a name/title/label property on GeoJSON/shapefile/etc., case-insensitive) — auto-detected from the file’s first feature and applied to every feature — names each place; a file with no such property falls back to the file name, numbered. A file with several features becomes one place per feature (up to 20), each named this way, or one merged place, named after the file, your choice.
The Report panel titled 2 places, with a Places list of two rows: Aleutian Arc (ALA), 875,225 square kilometres, with a 28.3 composite chip, and a highlighted bounding box row, 98,973 square kilometres, 100%, with a 34.7 composite chip and search, copy, remove and Open in report links. Below is the sentence 100.0% of this place is inside the US study area (3,600 of 3,600 cells) and a flower plot of the bounding box with 35 at its hub and 34.7 composite beneath. A pink square outlines the box over the Gulf of America on the globe. At the foot of the panel, the sentence Reporting on 2 places., a gold Open report button, and Share and Download places buttons.
Figure 21.6: The Report tool’s list of places with two places, both analysed: a Program Area (“Aleutian Arc (ALA),” 875,225 km², 28.3 composite) and a selected, entered-coordinates place (“bounding box,” 98,973 km², 100% coverage, 34.7 composite) whose coverage note reads “100.0% of this place is inside the US study area (3,600 of 3,600 cells),” with its flower plot below; the box is outlined in pink over the Gulf of America on the map. The pinned footer below reads “Reporting on 2 places.” above the gold Open report button, Share and Download places. Atlas 0.10.92, release v7, 2026-10-16.
A dialog titled Enter coordinates over the dimmed Report panel: a hint naming the three accepted shapes, a text box holding -124.1, 40.2, a bordered refusal message reading This text doesn't read as a bounding box, a list of coordinates or WKT/GeoJSON, then two explanatory sentences, and a gold Add place button.
Figure 21.7: The “Enter coordinates” dialog after a single longitude, latitude point (“-124.1, 40.2”) was entered and Add place clicked: it is refused, because the text matches none of the three accepted shapes (a bounding box, a list of coordinates, pasted WKT/GeoJSON). Atlas 0.10.91, release v7, 2026-10-16.

Each row shows its area and, as soon as it is analysed, its data coverage percentage and composite score directly in the row — for a drawn, typed or uploaded place the same analysis runs for every such place in the list, not only the one currently selected; a Program Area row shows its own published composite the same way (e.g. “Aleutian Arc (ALA) … 28.3 composite”). Row actions: an inline rename (≤ 60 characters, drawn/uploaded places only), zoom to, duplicate (drawn/uploaded only), delete, and Open in report. Selecting any place — drawn, typed, uploaded, or a Program Area — expands the same results panel below the list, though the note at its top differs by kind: a drawn, typed or uploaded place shows a coverage note (“N% of this place is inside the US study area (a of b cells)”, or “This place is outside US waters here: no scores can be computed”); a Program Area shows its own note instead (“N cells, A km²; published composite C.”). Both then show a flower plot and a component table, and a species table on request — a drawn/typed/uploaded place behind a “Loading species needs N tiles, about X MB. Continue?” prompt (species come from map tiles), a Program Area behind a plain Load species button with no such prompt (its species table is a precomputed release table, not tiles). A single selected Program Area reads all of this straight off the release (the same path the Scores lens’s Table › Zones tool uses, Section 21.8); a multi-Program-Area selection (several picks added as one place) still sums area and means the composite for the list row, but its flower/component/species panel asks you to select a single Program Area instead of guessing which one’s to draw. Show analysis cells paints the analysed 0.05° cells (up to 20,000 of them) for a drawn, typed or uploaded place; for a Program Area it reads plainly “Show analysis cells: not available for Program Areas yet” — the app bundle the Atlas reads does not yet carry per-zone cells, even though the release’s own tables do (see Known limitations) — rather than showing a disabled control with a misleading reason. The list caps at 20 places (“n / 20 places”); Recent (this browser only) offers to add a removed place back. The Report tool’s footer is pinned to the bottom of the pane: a sentence saying what the report is about (“Reporting on 2 places.”, “Reporting on the last clicked place. Add it to keep it.”, or “Add a place to open a report.”), the gold Open report button (disabled with nothing to report on), then Share and Download places (GeoJSON, with each gazetteer place’s id), the last two disabled with zero places.

Two different Share buttons. The top-bar Share simply copies the current address to the clipboard, plus a ui= token that records the panel arrangement — no dialog, no summary, no length check. The Share at the foot of the Report tool opens the real dialog described next, and is the one to use whenever places are involved.

21.8 Details and Table

Details (the rail’s second tool) describes what was last clicked, and is the same tool in both lenses. In the Scores lens it is the Flower plot for the clicked cell or Program Area, headed by its subject (“Cell 3372565 · 28.275° N, 83.575° W” or the Program Area’s full name), with Add to report and Open table buttons; with nothing clicked it shows the flower for All US waters. In the Species lens it is the species’ information (see the Species lens above). A drawn place’s flower and species table live in the Report tool’s results panel instead (Section 21.6).

The flower draws one equal-width annular petal per score component, scaled to its rescaled score; the hub shows the plain mean of the components present (not a weighted mean). Since 0.10.41 the values also list in a real table (swatch, component, score, and a Mean row) below the plot.

A dark Details panel headed Cell 3369460 · 28.325° N, 83.675° W with Add to report and Open table buttons, a flower of eight colored petals of different lengths around a hub reading 50, and below it a Component and Score table listing Bird 81.2, Coral 28.8, Fish 48.6, Invertebrate 55.3, Mammal 12.0 and Other 71.5, cut off by the panel's lower edge. On the globe a popup for the same cell reads score 50 with a Details link, and the legend marks 50 on its histogram.
Figure 21.10: The Details tool for a clicked cell in the Gulf of America: one petal per score component, and the values table below it. The panel is headed by the cell’s subject line, with Add to report and Open table buttons above the flower; the map shows the cell’s popup (score 50). The click, aimed at 28.3° N, 83.6° W, landed in cell 3369460 (centre 28.325° N, 83.675° W). Atlas 0.10.91, release v7, 2026-10-16.

Table takes the whole stage beside the rail, with a one-row header: a ← Map button that collapses the panel, what is shown (“Species in Cell …”, “Species in All US waters”, “Species for 2 places”), the column glossary and the CSV download. In the Species lens the Table lists the species’ model inputs instead (with its own CSV download). In the Scores lens it opens three underline tabs: a sortable species table (Category, Taxon, Scientific name, Common name, ER code, ER score, Model, MMPA, MBTA, Area (km²), Avg. suitability, % of category — ESA and IUCN status are folded into ER code), a zones table (every Program Area ranked by the current layer, with “report on selected” once some are ticked), and a composition treemap (one box per species category, sized by suitability × extinction risk × area). Only the species table has the phone’s compact default columns and a Columns control; both tables get sticky headers/first column and horizontal scrolling that never spills the panel. Only the species table’s Download CSV exports it; the zones table and the composition treemap have no export yet. A drawn place’s Components and Species tables in the Places results panel each have their own working Export CSV.

A dark Table view filling the stage beside the rail, headed Cell 3369460 · 28.325° N, 83.675° W, with a Map button, the line Species in Cell 3369460, Species Zones and Composition tabs, and info and download buttons. The table has Category, Taxon, Scientific name, Common name, ER code, ER score, Model, MMPA, MBTA, Area, Avg. suitability and % of category columns, each with a filter box, and rows of birds from Black Noddy and Brown Noddy to Black Tern.
Figure 21.11: The Table tool’s Species tab for the clicked cell in Figure 21.10. The Table fills the whole stage beside the rail, with a single header row (← Map, the subject, Species · Zones · Composition tabs, a glossary button and a CSV download). Atlas 0.10.91, release v7, 2026-10-16.

21.9 Report

The Open report button reports every place currently in the link (#pl=); with no places, it reports the single selected Program Area, or the single clicked cell (its square, the same place Add puts in the list); with none of these, it is disabled and the footer says “Add a place to open a report.” A row’s own Open in report reports just that row’s place. The report opens in a new tab and renders progressively as its data arrives:

  • a header band — mark, release chip, generation time, permalink and QR code (a restricted release also gets a PREVIEW banner and print watermark);
  • an introduction;
  • a collapsible Parameters section (kind, keys or vertices, area, cell count, study-area share, token);
  • a map — interactive on screen; a static snapshot only in print and the HTML export;
  • one flower plot per place, under “Plot of Scores”;
  • a Table of Scores — component and overall scores, with a footnote when a component covers under 99% of the area, or is missing entirely because the release’s own 5% coverage floor dropped it;
  • a Summary of Species per place (a category × count cross-tab, plus the top 20 by score);
  • Sources and Method, with the release’s own citations — each query behind these numbers is a parity-tested twin (npm run parity, max|Δ| < 1e-9) of an msens R function; “Reproduce in R” prints the exact calls to msens::place_decode(), cells_in_polygon_grid() and scores_for_cells() that reproduce it, needing msens ≥ 0.44.0 and a local copy of the release’s sdm.duckdb;
  • a Provenance section (release, status/access, app build SHA, DuckDB-WASM version, tables read, SQL run).
The report page on a light background: Print, Download HTML, Data package (ZIP) and Word document buttons, the line Done — 1 place, the lockup of the mark and the Marine Minerals Administration seal, the title Marine Sensitivity Report with a v7 · released · public chip, a generation time and a permalink ending #pl=z.pa.GAA, a QR code, an Introduction paragraph with links to open the release in the Atlas and to its documentation, a Parameters disclosure, and the Map heading with the start of a map of the Gulf coast labelled San Antonio, Houston and New Orleans.
Figure 21.12: The report document for the Program Area GAA, opened from the Report tool’s Open report button in a new tab: the export buttons, the MMA seal, a release chip, a permalink and QR code, the Introduction, a Parameters disclosure and the start of the interactive map. The title is the default “Marine Sensitivity Report” because the link carries no t= title. Atlas 0.10.92, release v7, 2026-10-16.
The Table of Scores with one row for GOA Program Area A (GAA): 14,256 cells and Bird 59, Coral 12, Fish 31, Invertebrate 32, Mammal 40, Other 26, Turtle 55, Primary production 11 and Overall 33. Below it the Summary of Species section with a species-count table by category and extinction-risk code (5,861 species), its columns USA:EN, USA:TN, USA:LC, IUCN:CR, IUCN:EN, IUCN:VU, IUCN:NT and other each headed by the code over its score in parentheses, ending in a Total column, and the header of the top-20 species table.
Figure 21.13: The report’s Table of Scores and the start of the Summary of Species, for the same Program Area (GOA Program Area A, GAA). The species-count table’s extinction-risk headings take two lines (code over score) so all of its columns fit the page. Atlas 0.10.92, release v7, 2026-10-16.

Four exports, all built client-side: Print (the browser’s dialog; roughly five Letter pages); Download HTML (one self-contained file — the flowers stay inline SVG, only the map is an embedded PNG); a data package (ZIP) — README.md, CITATION.md, provenance.json, places.geojson (drawn/uploaded places only, not zone places), a scores_*.csv/species_*.csv pair per place, and query/*.sql; and a Word document (.docx) — the same tables as coded Word styles, plus the map and a rasterized flower per place.

21.10 Accessibility and performance notes

The Atlas ships a written WCAG 2.1 conformance note and a performance budget report in its own repository. As of the note’s own 0.10.24 (2026-09-23) evaluation the claim is “partially supports,” not full support, and it states plainly that no screen reader was actually driven in producing it — automated and manual keyboard testing stand in for that. Two skip links sit at the very top of the page: “Skip to the tools” and “Skip to the details panel.” The critical-path JavaScript was measured (0.10.20, 2026-09-23) at ~417 KB gzip against a 450 KB budget (it has been 460 KB since 0.10.89), plus ~140 KB for the MapLibre worker against 150 KB; a separate gate asserted the species lens paints its first data pixel within 2.5 s on a laptop and 4 s on CI. The measured numbers may have moved since; see the linked reports for current ones.

21.11 When a service is down

Since 0.10.58, the Atlas checks two external services it does not control: titiler-v8 (every score and species map tile) and the S3 data origin each release’s own files are fetched from. Both are checked at boot and on a manual Retry; a map tile that actually fails to load for a real reason — a 5xx, a network error, or a timeout, never a normal “this release has no data here” 403/404 — re-checks only the tile server. It never polls in the background while everything is fine.

When either is down, a dismissible banner — since 0.10.62 it sits in the map stage, below the top bar, so it never covers the top bar’s controls — names the failing host, the reason (timeout or HTTP status), and what still works — places, tables and reports already built from data already loaded, just no new tiles or new fetches from the down host; when it is specifically the tile server that is down, the legend also switches to a compact “tiles unavailable” state instead of a bare colour ramp. Built after titiler-v8 and the API were unreachable for an hour and the live app kept rendering a perfectly normal-looking map with no raster and no word to anyone.

What it cannot detect: a partial outage (some tiles or objects failing, others not — only a further real request surfaces it), a degraded-but-200 response (a tile that loads but paints wrong data), or a preview session’s own restricted data prefix (the probe always checks the public bucket origin, not a signed-in override). No release the Atlas reads from calls a separate API today, so there is nothing of that kind to probe; DuckDB-WASM’s own Parquet fetches, PMTiles zone archives and the basemap are likewise outside this check’s scope — a partial CDN problem affecting only one of those would not trip the banner.

21.12 Feedback and versions

Feedback opens a dialog: a kind (bug / idea / question / data), a title, a description, an optional email, an annotatable screenshot, and a privacy checkbox (off by default) for including the current view’s link. Send is live: it posts to a Google Apps Script endpoint that writes a Sheet row, mails the team, and — for a public release — also files a public GitHub issue in MarineSensitivity/atlas with the screenshot attached (your email, if given, is never included in it); a restricted release never gets a public issue either way. An email, if given, is kept only in the team’s Sheet row and mail (plus a copy to you), never in the issue (see docs/feedback.md in the atlas repo for the dialog’s exact privacy wording). The original zero-backend fallback stays alongside Send, not replaced by it: “Open as GitHub issue” opens its own prefilled public issue, labelled by kind, with the screenshot copied to your clipboard to paste in — offered on every public release whether or not Send is configured, and the only option on a build with no endpoint set. Tell an analyst plainly: on a public release, both routes end in a public GitHub issue. A restricted release never offers the GitHub route; on a build with no endpoint configured it says plainly that “feedback cannot be sent from here right now.”

GA4 receives interaction events as well as page views, and the app also logs those same events to the batched usage-log Sheet the retired Shiny scores/species apps also wrote (app = "atlas" distinguishes its rows) — never the URL fragment, which the app’s own analytics code is source-scanned to never read.

Versions follow the same public/restricted split as the rest of the MST (see Chapter 2): a public release opens directly on the public host; a restricted pre-release’s Atlas is reached only through the signed-in preview host, at its own /{ver}/atlas/ path. Requesting a release the current host cannot show opens the version picker automatically: a restricted one reads, for example, “v9 is a pre-release under review and is not shown on this host” and offers “Continue on the preview host” (a link straight to that release’s Atlas there, at https://preview.marinesensitivity.org/v9/atlas/?ver=v9), an unrecognized one reads “is not a version this host recognizes,” and either way the promoted release loads underneath while the picker explains why. In the picker, every public release other than the current one offers Switch.

A dialog titled Data release over the dimmed Atlas: a line saying the app renders one published release at a time, then a dated list of releases: v7c, v7b, v9 and v8, each tagged prerelease and restricted with a Continue on the preview host link; v7 tagged current in bold; and v6, v5, v4b, v4, v3, v2 and v1, each tagged retired with a Switch link.
Figure 21.14: The release picker (the release chip’s dialog), listing v7c, v7b, v9 and v8 as restricted pre-releases each with a Continue on the preview host link, v7 as current, and v6 down to v1 as retired, each with a Switch link and a date. Atlas 0.10.91, release v7, 2026-10-16.

21.13 Known limitations (as of 0.10.93)

  • In v7, 1,873 of the 2,619 rng_iucn range inputs have no model-asset registry row, so their pills in the Species lens show struck through (as they did in the retired Species Shiny app); every other input of v3, v6 and v7 resolves. The other pre-v8 releases (v1, v2, v4, v4b, v5, v7b, v7c) were not checked for this chapter.
  • GeoPackage is refused (see the Places section above) whenever ST_Read fails to parse it, including a file with no vector layer — its declared-CRS and no-feature-table checks cannot actually run against an uploaded file, because DuckDB-WASM’s sqlite_scan() cannot open a file registered only through registerFileBuffer, the way an uploaded GeoPackage is, so both checks silently fall through and ST_Read, or the normal out-of-range magnitude check, is left to catch a projected or empty file instead (still refused, just by a different, honest rule).
  • A multi-Program-Area selection (several picks added as one place) sums area and means the composite for its list row, but its flower, component table and species table are not aggregated — the results panel asks you to select a single Program Area for those.
  • Show analysis cells is not available for a Program Area place: the app bundle the Atlas reads carries each zone’s count, area and scores but not its cells.
  • The Atlas’s report is a print-first document built and exported entirely client-side (HTML/ZIP/DOCX from the same source), not the retired Shiny apps’ report.

21.14 Generating Screenshots

Every figure in this chapter was recaptured on 2026-10-16 from the live Atlas (0.10.91, release v7, dark theme; Figure 21.6, Figure 21.9, Figure 21.12 and Figure 21.13 from 0.10.92 later that day, after its Report fixes) with Playwright’s Chromium: desktop at 1280×800 and 1x, phone at 390×844 and 2x with touch, at https://marinesensitivity.org/atlas/. The atlas repository’s own scripts/eyes-shots.mjs covers the standard states (about 20 numbered shots per viewport) and was run against the live site:

ATLAS_URL=https://marinesensitivity.org/atlas OUT=.tmp/eyes ONLY=map,layers,more node scripts/eyes-shots.mjs

It does not reach every state in this chapter, so the figures were taken by one driver script (figs.mjs, kept outside both repositories) that uses the same helpers (go, explore, tool, and screenPointFor to click a map coordinate by projecting it) and loads each state from a URL or UI steps: ?ver=v7&theme=dark for the map, Layers, the version picker and the phone figures (the release chip opens the picker, More the phone menu); a click at 28.3° N, 83.6° W for the flower and the Table; ?ver=v7&lens=species and a search for “leatherback” for the Species lens; #pl=z.pa.GAA plus Open report (a new tab, then scrolled to the Table of Scores heading) for the two report figures and the Share dialog; Add a Program Area (Aleutian Arc) plus Enter coordinates (-93, 26, -90, 29) for the places list; a single point (-124.1, 40.2) for the refusal; and a 3,600-vertex noisy outline pasted into Enter coordinates, then Share, for the simplification ladder. Each PNG was then reduced with pngquant --quality=85-98. The guided-tour images of the Atlas user guide come from a different script, npm run tour:guide (scripts/tour-guide.mjs, from atlas 0.10.90).

21.15 Source Code

atlas on its own main branch — one static build for every release, the same “one checkout, not one per version” convention the retired Scores and Species apps followed.