Three steps — account, profile, review (live)
The rules
- The route declares
'libs' => ['wizard'](the lib is per-page, like charts). ONE form withvalidate wizard former+ aformer-endpoint; each step is adiv[wizard-step]withstep-title/step-icon. The lib renders the progress header and the navigation — you author only the fields. - Forward validates the CURRENT step (validator); Back is always free. On Finish, former submits — and a server field error belonging to an earlier step JUMPS back to it.
- A wizard is for flows that genuinely have stages (onboarding, imports); 4–6 fields are just a form.
- The review step is declarative too:
dl[data-wizard-review]fills itself from the answered fields. - Docs:
templates/app/docs/libs/wizard.md; the harness (vertical layout, events): /tests/wizard.