Run the numerical suites, course.test.cjs, and progress.test.cjs from the shared lab README. The progress suite checks fresh overview entry, visited-step accounting, incorrect/correct checks, filtered results, reload and history behavior, persisted large text, desktop/mobile overflow, direct links, and blocked storage. The existing course suite covers all 41 lessons, rendering, themes, jobs, exports, and WebGL fallback.
This iteration addresses the long overview, the disabled Previous button at lesson boundaries, and generic recovery after an incorrect prediction.
navigation.test.cjs verifies module selection, combined-filter recovery, previous-lesson transitions, retries, module milestones, mobile overflow, and content focus. Existing progress and course suites remain the regression checks.A rendered review showed that the previous 17 px body, 16 px equations, and 14 px chart captions still looked undersized on desktop. The revised default is 24 px body text, 32 px introductory copy, 22 px equations, and 20 px captions, chart labels, and primary lesson controls. Larger text remains optional; the larger baseline does not depend on enabling it. Mobile retains 19 px body text and 16 px supporting text.
The reading panel receives a larger share of the desktop workspace and uses primary text color for explanations. In stacked layouts, reading steps precede the visualization while Experiment keeps the visual first. Field legends and scene notes move below the canvas into a wrapping row. Numeric legend endpoints are checked for overlap.
The typography browser suite asserts computed sizes, overflow, and reading order at desktop widths of 1280/1440/1920 px and mobile widths of 390/320 px. Desktop screenshots are captured at actual viewport size to review the balance between text, navigation, and diagrams.
The user preferred the typography before the desktop enlargement. The current CSS type scale is restored from c31c69e (17 px prose, 21 px introductions, 16 px controls, 14 px secondary text). The dedicated field-annotation row remains to avoid covering the model.
This iteration adds a mobile lesson dialog, restores overview scroll position, and preserves the same lesson’s live state when returning from the overview. A shared playback speed control adjusts both visual motion and simulation playback without changing computed predictions. Overview browsing pauses both the renderer and guided simulation timers. Camera tweens no longer jump to their destination before the first frame, and user dragging/zooming interrupts them. Step transitions respect reduced-motion preferences.
Verification includes the restored font sizes, all existing course/progress/navigation checks, and focused browser tests for dialog focus, responsive reparenting, overview position, simulation suspension/resume, playback controls, and reduced-motion camera behavior.