---
issueRef: "#155"
version: 5
updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"}
updatedAt: 1785248859142
---
## Entrée produit utilisateur — Main (2026-07-27)

UX doit cadrer les surfaces suivantes :

### Téléphone en séance
- afficher seulement **fréquence cardiaque live**, **distance live**, **calories live** ;
- surface légère, non dominante.

### Montre en séance
- écran principal : **fréquence cardiaque live uniquement** ;
- glissement inverse du menu action : écran secondaire avec **fréquence cardiaque live + distance + calories**.

### Après séance / historique
- graphiques et lecture détaillée des statistiques conservées ;
- fréquence cardiaque détaillée **par étape, série et exercice** ;
- distance et calories également restituées dans l'historique.

### Contraintes fortes
- silence total si donnée absente ;
- uniquement pour montres compatibles ;
- aucun message bloquant.

---

## Cadrage UX — agent UX (2026-07-27)

### Décision produit
Les stats capteurs (`FC live`, `distance live`, `calories live`) sont une **couche de lecture légère** ajoutée à l’exécution existante, jamais une nouvelle navigation principale ni une nouvelle logique de séance.

Principes à respecter :
- **Téléphone** : la surface séance reste centrée sur l’exécution ; les stats live restent secondaires et compactes.
- **Montre** : l’écran principal reste centré sur l’état d’effort ; la `FC live` seule y a droit en permanence, `distance` et `calories` partent dans un écran secondaire dédié.
- **Après-séance / Historique** : les stats deviennent consultables en détail, avec restitution hiérarchique cohérente avec l’existant `programme > exercice > série`, et niveau `étape` quand disponible.
- **Silence par défaut** : si une donnée n’existe pas, la surface se resserre sans placeholder, sans warning, sans écran vide.

### Téléphone pendant la séance
Ajouter sous le bloc d’exécution principal une **barre stats live compacte**, toujours sur la surface séance, sans ouvrir de panneau dédié.

Ordre fixe :
`FC 142 bpm   ·   0,84 km   ·   186 kcal`

Règles :
- une seule ligne si tout tient ;
- retour sur 2 lignes max si nécessaire sur petit écran ;
- style secondaire visuellement, plus discret que chrono / répétitions / score ;
- ne jamais concurrencer le bloc temps, les CTA d’exécution, ni les contrôles de série.
- `FC` en premier, puis `Distance`, puis `Calories`.
- chaque métrique n’apparaît que si elle est disponible.
- si aucune métrique n’est disponible, la barre n’existe pas.

États :
- en séance active : valeurs live visibles et rafraîchies discrètement ;
- en pause : conserver la dernière valeur connue ;
- en repos : la barre reste visible si des valeurs existent.

### Montre pendant la séance
#### Écran principal
L’écran principal `Séance active` conserve sa hiérarchie actuelle. On y ajoute la **FC live uniquement** en lecture secondaire.

Placement exact :
- la `FC live` apparaît sur la **ligne secondaire sous le libellé du chrono dominant** et **au-dessus du CTA principal**.
- sur l’écran principal montre, **jamais distance ni calories**.
- si la FC live est absente, cette ligne disparaît purement et simplement.

#### Écran secondaire `Stats`
Ajouter un **écran secondaire stats** accessible par **glissement inverse du menu `Actions`**.

Navigation montre :
- swipe dans un sens : `Actions`
- swipe dans l’autre sens : `Stats`

Contenu de l’écran `Stats` :
- `FC`
- `Distance`
- `Calories`

Règles :
- une carte/ligne par métrique disponible ;
- ordre fixe : `FC`, `Distance`, `Calories` ;
- si une métrique manque, ne pas réserver sa place ;
- si aucune stat n’existe, l’écran `Stats` n’est pas exposé du tout.

### Après-séance
Ajouter dans l’écran de fin de séance une section dédiée `Statistiques` après le récap principal d’exécution.

Résumé global attendu :
- `FC moyenne`
- `FC min`
- `FC max`
- `Distance`
- `Calories`

Graphiques à afficher quand la donnée existe :
- `FC` : courbe temporelle de séance
- `Distance` : progression cumulée sur la séance
- `Calories` : progression cumulée sur la séance

Pour la FC, ajouter si possible des repères visuels simples sur la courbe :
- séparateurs d’exercices
- séparateurs de séries
- étapes quand disponibles

### Détail hiérarchique
Dans le détail existant, enrichir chaque niveau quand la donnée existe.

- **Exercice** : sous-résumé stats
- **Série** : sous-résumé compact
- **Étape** : seulement si les données sont réellement disponibles à ce niveau

Règles :
- ne jamais fabriquer un faux niveau de précision ;
- l’absence d’une stat n’empêche pas d’afficher les autres.

### Historique
#### Liste historique
Dans chaque carte de séance historique, ajouter au plus **une ligne de résumé stats** sous le résumé existant, uniquement si des données existent.

Exemple : `FC 148 moy · 2,84 km · 426 kcal`

#### Détail d’une séance historique
Le détail historique reprend la même structure que l’après-séance :
- résumé global ;
- graphiques ;
- détail par exercice ;
- détail par série ;
- détail par étape quand disponible.

### Fallback silencieux et compatibilité
Règles impératives :
- Feature active **uniquement sur montres compatibles**.
- Si la montre n’est pas compatible, **aucune surface dédiée n’apparaît**.
- Si un capteur ou une métrique est indisponible, **ne rien afficher** pour cette métrique.
- **Aucun message bloquant**, **aucune alerte**, **aucun placeholder**.
- En cas de donnée partielle : afficher seulement ce qui existe.
- En cas de perte temporaire de mesure live : garder la dernière valeur connue si la session l’utilise déjà ; sinon masquer la métrique.

### Décision finale de surface
- **Téléphone séance** : une barre stats live compacte intégrée à l’écran d’exécution.
- **Montre séance** : `FC live` sur l’écran principal, écran `Stats` secondaire par glissement inverse de `Actions` pour `FC + distance + calories`.
- **Après-séance / Historique** : résumé global + graphiques + détail hiérarchique `exercice / série / étape` quand disponible.
- **Fallback** : disparition silencieuse des données absentes, sans message ni friction.
