Blueprint.stateMachine becomes stateMachines[], the viewer renders each machine in its own panel, and StateMachine draws self-loops (a === b) for recurring transitions that don't change state. Existing blueprints move to the array form unchanged.
Refactor the List-specific screen into a data-driven, reusable viewer: - generic Blueprint type + shared LoadState machine + registry - vue-router: / (gallery) and /b/:slug (illustration) - BlueprintViewer renders any blueprint; specimens stay bespoke - add Grid blueprint (6 functions incl. Position) + GridSpecimen