## Objectif

Produire des fiches de drills basket homogènes, directement exploitables par
DevBackend pour créer les seed data GameTime (entités `Exercise`, `Program`,
`WorkoutTemplate` de `lib/domain/entities.dart`), sans aller-retour d'interprétation.

Ce skill est destiné à l'agent **Coach**, dans le cadre du ticket **#80 —
Bibliothèque de drills basket de démarrage + séance exemple modifiable**, et
réutilisable pour tout futur enrichissement de la bibliothèque de contenu basket.

## Catégories à couvrir pour une bibliothèque de démarrage

- Shoot (tir extérieur, mi-distance)
- Lancers francs
- Dribble / ball-handling
- Finition (layups, floaters, contact)
- Conditionnement (endurance, explosivité spécifique basket)
- Défense (individuelle, déplacements)
- Mobilité / échauffement

Une bibliothèque de démarrage complète vise au moins un drill par catégorie, sans
obligation d'exhaustivité — mieux vaut peu de drills bien spécifiés que beaucoup de
drills vagues.

## Gabarit de fiche — un exercice (`Exercise`)

Pour chaque drill, remplir tous les champs suivants avant de le considérer prêt :

```
Nom : (court, concret, ex. "Lancers francs — série de 10")
Catégorie : (une des catégories ci-dessus)
Description : (2-4 phrases : geste, placement, objectif ; vocabulaire basket précis)
Matériel : (ballon / panier / cônes / chrono — jamais de matériel connecté ou de caméra)
Niveau conseillé : (debutant / intermediaire / tous niveaux)

Mesures activées (au moins une) :
- Temps (hasTimeMeasure) : oui/non — si oui, defaultTargetTimeSeconds
- Répétitions (hasRepsMeasure) : oui/non — si oui, defaultTargetReps
- Score (hasScoreMeasure) : oui/non
  - scoreInputMode : manual | stopwatch
  - si manual : scoreLabel (ex. "Paniers marqués"), scoreUnit (ex. "sur 10")
  - defaultTargetScore ou defaultTargetScoreTimeMs selon le mode

Étapes (steps, optionnel — seulement si le drill a plusieurs phases distinctes) :
- Étape 1 : nom, type (time|reps), defaultTargetValue, score optionnel
- Étape 2 : ...

Média souhaité : image et/ou vidéo (décrire l'intention : ex. "photo du placement des
pieds" — ne pas fournir de fichier, c'est à DevBackend/DevFrontend de le résoudre)
```

Règles de cohérence à vérifier avant de livrer la fiche :
- Au moins une mesure activée.
- Si score en mode manuel : `scoreLabel` ET `scoreUnit` renseignés.
- Les cibles par défaut (`defaultTarget*`) doivent avoir un sens réel pour un débutant
  raisonnable (pas de surcharge, pas de valeur arbitraire).
- Si le drill a plusieurs phases nettement différentes (ex. échauffement puis
  chronométré), utiliser `steps` plutôt que de forcer plusieurs mesures sur un seul
  exercice plat.

## Gabarit de fiche — un programme (`Program`)

```
Nom : (ex. "Séance shoot & finition")
Repos par défaut entre séries (defaultRestSeconds) : (valeur réaliste, ex. 30-60s)

Exercices (dans l'ordre) :
1. [Nom exercice] — setsCount : X, mesures activées : [...], cibles : [...], repos
   spécifique (restSecondsOverride) si différent du défaut
2. ...
```

## Gabarit de fiche — une séance-modèle (`WorkoutTemplate`)

```
Nom : (ex. "Séance découverte basket")
Programmes inclus (dans l'ordre) : [Nom programme 1], [Nom programme 2], ...
```

## Checklist finale avant de transmettre à Architect/DevBackend

- [ ] Au moins un drill par catégorie listée ci-dessus.
- [ ] Chaque fiche exercice respecte le gabarit et les règles de cohérence.
- [ ] Au moins un programme d'exemple cohérent (drills compatibles, ordre logique
      échauffement → technique → conditionnement).
- [ ] Au moins une séance-modèle d'exemple composée du/des programme(s).
- [ ] Rien ne dépasse le modèle de données actuel (`Exercise`/`Program`/
      `WorkoutTemplate`/`ExerciseStep`) — sinon, remonter à Architect avant de livrer.
- [ ] Aucun drill ne nécessite de matériel connecté, de caméra ou d'abonnement tiers.
- [ ] Le contenu reste éditable/supprimable : pas d'hypothèse de donnée protégée.