A class is one lesson at /lesson/[slug]. It has two modes and a fixed sequence of steps.
Both modes play the same lesson; they differ in what carries it.
Watch is the film. Cards with an animated explainer play their clip inline — muted, once, no loop — while the section's narration audio carries the voice.
Learn is the deck. The same cards, but each shows its static illustration, never the clip and never a video thumbnail. This is deliberate across every tier: the animated explainers belong to the film, and a still frame masquerading as a lesson image reads as a broken video.
Switch with the mode control, or land directly in the film with ?mode=watch.
buildSteps() assembles this, in order:
Checks and Explore steps are interleaved with the concept cards, not bolted on the end: each one is attached to the card it belongs after. Anything that could not be placed lands just before the assessment rather than being dropped.
On Primary, the interactive cadence is an admin setting (0–4 widgets) and the widgets are spread evenly through the cards at runtime — so the pacing can be tuned without re-baking a single lesson.
On by default. Every card has recorded audio. Mute it and the transcript ("Read the full text") opens automatically, so muting never costs you the content.
A returning learner is restored to the step they left, with a dismissible "picked up where you left off" banner. Note this is the lesson resuming — Watch does not resume mid-film.
? opens the shortcut overlay. Arrow keys move between steps. When keyboard navigation moves focus to the stage, a transient highlight shows where focus landed — the visible partner to the screen-reader announcement, since the focus outline is otherwise suppressed. Mouse clicks do not trigger it.
Finishing steps and answering questions updates your mastery for that class, feeds the streak, and makes the class eligible for spaced review. Progress syncs to the cloud when signed in; see 13 · Account and settings.