Step 1 of both Invite and Schedule flows. Choose training template.
settings.html#s-createStep 2 for personal training. Choose when.
No availability: all slots busy on this day — user picks another date. Error: inline banner with Retry (no outer banner — positioned after content, CTA remains in footer).
Step 2 for group training. Day strip + event cards.
Empty: template has no scheduled sessions — CTA to go back and pick another template.
Step 3 of Invite flow — coach shares deep link with someone not yet in the app.
Entry: Clients tab "+" sheet → Invite to training. URL param mode=invite (default).
Step 3 of Schedule training flow — coach proposes a session to an existing in-app client. Reuses 3 of 4 invite screens; differs only here.
Awaiting for coach + Request for athlete inbox → snackbar confirmation → navigates back to originEntry points (URL param mode=schedule&origin=X):
• Client Detail ⋯ → Schedule training (origin=s-client-detail)
• Client Detail empty Upcoming → Schedule training CTA
• Calendar FAB → Schedule training (future, not yet wired)