--- 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.