### Goal Implement the **Gymnast** page: the page for one gymnast, reached from the "Your gymnasts" overview. (The overview itself is done, #98.) ### What the page shows From [UI_PLANS.md](docs/UI_PLANS.md) and the mockup [docs/design/gymnastDetail.png](docs/design/gymnastDetail.png) ([description](docs/design/README.md#gymnast)): - [ ] The gymnast's **routines on the chosen apparatus** with their D-values, so the coach can compare versions. - [ ] The gymnast's **list of elements** she can do or is practicing. - [ ] Only for a logged-in coach, and only for that coach's own gymnasts (a protected route; an unknown or foreign id shows a clear "not found"). ### API Already in the schema: `gymnast(id)`, `routine(id)`, `addGymnastElement`, `removeGymnastElement`, `renameGymnast`, `deleteGymnast`. Check the generated types and use the existing Apollo setup. ### Checklist - [ ] Route `/gymnasts/:gymnastId` behind the login check, linked from each row of the gymnasts page. - [ ] Apparatus tabs (accessible tab pattern) and the routine list for the chosen apparatus. - [ ] The element list, with a remove button per element (the accessible name says which element). - [ ] Loading, error and empty states; `role="status"` messages for changes. - [ ] Component tests for the main states and the error case; an axe check. ### Not in this issue - Adding a routine to the gymnast (#152) and the "add to gymnast" button on the element page. Depends on #154 (pages in `src/pages/`). _Text structured with Claude Code in discussion with Ronja. The original title is kept._