Shell anatomy
The shared CreationPipeline chrome every staged flow renders into — annotated.
Editable title
TypeLeft: inline-editable .h1 + the item's type & status badges. Right: a .savestate that reads "Saved" (check) or "Saving…" while autosave is in flight.
One .step per stage from stages[], joined by .arr chevrons. Done (check in .n, from doneness) · Active (indigo fill, the active stage shows its number) · plain reachable · Locked (dimmed + lock chip, from locked). Clicking a non-locked step fires onSelect.
Rendered as {children} for the active stage. Header, stepper, and footer are the framework; everything between them is the page.
Left: a one-line .hint from footer.hint. Right: Back (ghost — omitted on stage 1, fires onBack), an optional Skip (ghost, when footer.canSkip), and the screen's one pink CTA — Continue → {next} (.btn acc lg), disabled until footer.canContinue is met.
.btn acc) is reserved for the single primary action — almost always the footer's Continue. Steps, Back, Skip, and in-stage controls stay indigo/neutral, keeping hot pink at ~10% of the surface.<CreationPipeline />
props{ id, label, icon }. Drives the stepper and the Continue label. e.g. Brief · Research · Plan · Produce · Schedule.id. Renders on in the stepper and decides which children stage body shows.stageId → boolean. true renders the step as done with a check — derived from saved artifacts, not visited-state.stageId → boolean. Soft-gates not-yet-reachable stages (dim + lock chip, non-clickable). No auto-advance — progression is explicit.{ title, badges[], savestate } — the editable title, type/status badges, and 'saved' | 'saving' indicator.{ hint, canContinue, continueLabel, canSkip } — the hint line, Continue gate + its label, and whether a Skip appears.canContinue is true — persists the stage and advances.footer.canSkip — advances past an optional stage without persisting it.Same component, same gating rules, same single-CTA discipline — only stages[] and the stage body change between flows.