### Goal Let a coach **add a routine to a gymnast** from the app. The API exists; the frontend does not use it yet. ### How it should work - A routine belongs to one gymnast and one apparatus (`createRoutine(input: { gymnastId, apparatusId, name })`) and holds an ordered list of elements (`setRoutineItems(routineId, itemIds)`). The D-value comes from the same calculation as the calculator. - Two places start it: the calculator (#95: "Save to a gymnast") and the Gymnast page (#149: "New routine"). ### Checklist - [ ] A choose-gymnast and name step (dialog with focus trapped and returned, a label on every field, errors shown next to the field). - [ ] Call `createRoutine` and then `setRoutineItems`; handle the case where the first succeeds and the second fails (show the error, do not leave an empty routine unnoticed). - [ ] Show the saved routine and its D-value on the Gymnast page. - [ ] Respect the limits from the API (names, number of items, one apparatus per routine) and show the error codes as messages. - [ ] `role="status"` message when it is saved. - [ ] Component tests (success, validation, failure) and an end-to-end test of the whole sequence. ### Depends on #95 (calculator) and #149 (Gymnast page). _Text structured with Claude Code in discussion with Ronja. The original title is kept._