Add worker busy indicator, stop/reset, localStorage persistence, and Colab-style button
Three features for x-ocaml interactive cells:
1. Worker busy indicator + stop/reset: When a cell is running (e.g. infinite
loop), the run button transforms into a spinning stop button. Clicking it
terminates the web worker, creates a fresh one, replays init messages, and
resets all cells to Not_run. Both builtin and jtw worker backends support
reset.
2. localStorage persistence: Exercise cells with data-id save their source
to localStorage (debounced 300ms). On reload, saved source is restored.
A small Reset button (bottom-left) appears when saved state exists,
allowing revert to the original HTML source.
3. Colab-style circular run/stop button: Replaces the old boxy text button
with a filled circle + white play triangle (CSS mask + ::after pseudo-
element). Running state shows a spinning arc with red accent and stop
square. Test cells get collapsible details with pass/fail/error indicators.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>