M0 walking skeleton. Streams a real book over HTTP 206 range requests and
resumes where you left off: server progress is fetched before playback starts (no
"0s bug"), then saved every 10s and on tab-hide/pagehide via sendBeacon. This
page is disposable — M4 replaces it entirely (deleted, not migrated).