- dataset-picker.js writes a compact query string (?ds=&n=&f=&j= plus
intro=1/picker=0 when non-default) on every change and reads it on
init. Refresh restores the page; the URL also works as a shareable
deep-link.
- To avoid a first-paint flicker of the <details> elements, the index
route pre-resolves intro_open / picker_open from the query and renders
the <details open> attribute accordingly.
Read --picker-panel from the card's computed style at scene creation
and re-apply on themechange, so the three-js canvases flip with the
rest of the UI instead of staying stuck on the light palette.
Client-side: disable the form submit button until the picker writes a
dataset_id. Server-side: reject posts where dataset_id is present but
empty, instead of silently defaulting to make_s_curve.