Regroupe l'état de travail en cours réalisé dans un même worktree sur plusieurs tickets/sprints (#85, #136, #145, #155-160, #162-164), mélangeant des tickets QA et inProgress. Ne constitue pas une feature terminée : commit de sauvegarde avant triage/split par ticket en branches feature/* dédiées. Exclut les dossiers d'environnement de build locaux et le heap dump parasite (.gitignore mis à jour). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
7.8 KiB
issueRef, version, updatedBy, updatedAt
| issueRef | version | updatedBy | updatedAt | ||
|---|---|---|---|---|---|
| #161 | 8 |
|
1785241912171 |
#161 — Petite refonte UI montre : dédoublonnage, densité, équilibrage (UX, 2026-07-28)
Statut : cadrage UX exploitable, prêt pour Architect/DevFrontend, pas de blocage.
Référence DA/vocabulaire à respecter, inchangés : gametime-ux-watch-companion, gametime-ux-watch-companion-round2, gametime-visual-identity (#115 : fond #080A12, or #C9A24A, Anton pour les chiffres, Archivo pour les libellés, une donnée dominante par écran). Ce ticket ne remet pas en cause cette DA, il corrige une dérive de densité accumulée par les tickets correctifs ultérieurs (#128 bouton pause/play, #140 chrono+score, #144 FC live, #152 étape).
Constat
Le principe "une donnée dominante par écran" posé par #115 a été dilué par les ajouts successifs : le libellé du chrono est dupliqué (au-dessus du chrono ET sous le bouton pause/play), le temps de série reste affiché alors qu'il n'est jamais un objectif à atteindre, le bouton pause/play empilé sous le chrono déséquilibre verticalement l'écran, et le texte de comptage de passage de l'exercice suivant s'affiche par-dessus son nom pendant le repos.
1. Objectif d'interface
Un seul chrono = un seul libellé, un seul endroit. Ne rester à l'écran que les chronos qui portent un objectif de la série/étape en cours (chrono d'étape temps, chrono de repos, chrono de score en mode stopwatch). Le temps de série écoulé n'est un objectif de rien : il sort de l'écran montre, partout, sans exception. Le bouton pause/play cesse d'empiler une ligne supplémentaire : il rejoint la ligne du chrono pour équilibrer horizontalement l'écran plutôt que de l'allonger verticalement.
2. Écran Séance active — hiérarchie révisée
SÉRIE 2 / 5
Pompes tempo
Passage 1 / 3 · Étape 2 / 4
Chrono étape
00:18 [⏸]
♥ 132
Règles de layout :
- Le libellé du chrono (
Chrono étape,Score chrono,Repos, etc.) n'apparaît qu'une fois, au-dessus de la valeur mm:ss — jamais répété ailleurs sur l'écran (suppression du libellé dupliqué qui apparaissait aujourd'hui sous le bouton pause/play). - Le bouton pause/play (icône seule, cf. #128) se place à droite de la valeur mm:ss, sur la même ligne horizontale, aligné verticalement au centre du chiffre. Cible tactile ≥ 48dp conservée (cf. #128), juste réorientée en horizontal plutôt qu'empilée en dessous.
- Cette ligne chrono + bouton reste le seul bloc "action" de l'écran : pas de deuxième bouton, pas de texte de statut redondant en dessous.
- Temps de série retiré intégralement : ni en donnée dominante, ni en ligne secondaire compacte (
Série mm:ss). La ligne secondaire de chronos (ex. cas #140ÉTAPE · 00:07) ne doit plus jamais contenir de temps de série ; elle ne montre que d'autres chronos porteurs d'objectif s'il y en a (ex. score chrono en parallèle d'un chrono d'étape). - Conséquence sur la priorité du chrono dominant définie dans gametime-ux-watch-companion : retirer purement et simplement
Temps de sériede la liste de priorité (repos > étape temps / chrono suivant prêt > score chrono). S'il ne reste aucun chrono actif porteur d'objectif, l'écran retombe sur l'étatPrêt à démarrer/Prêt pour la série suivantedéjà spécifié, sans jamais afficher un chrono de série à la place. - Si aucun chrono n'est actif pour l'étape courante (ex. étape reps sans chrono, pas de score chrono), la ligne chrono disparaît et le bouton pause/play ne s'affiche pas non plus — cohérent avec la règle #128 « visible uniquement quand un chrono actif est la donnée dominante ». Ne pas afficher un bouton pause/play orphelin sans chrono à côté.
3. Fréquence cardiaque — icône plutôt que texte
- Remplacer le libellé texte
FCpar une petite icône cœur plein, rouge (#FF4D5E, teinte erreur/alerte déjà dans la palette #115 — plus lisible qu'un rouge pur sur fond#080A12, et évite de réutiliser le crimson#D72638qui est déjà le code couleur "alerte/connexion perdue"), suivie de la valeur bpm en Archivo (pas besoin d'Anton ici, ce n'est pas la donnée dominante de l'écran). - Taille icône alignée sur la hauteur de texte du libellé de chrono (petit, discret), positionnée en bas de l'écran, sous le bloc chrono+bouton — reste la donnée la plus secondaire de l'écran.
- Inchangé : silence total si la donnée est absente (cf. gametime-online-layer-philosophy et cadrage #144) — pas d'icône cœur grisée ni de "--", la ligne entière disparaît.
- Pas de changement de fréquence de rafraîchissement ni de source : uniquement le remplacement du libellé.
4. Écran Repos — suppression du texte qui overlap
- Constat : sous "Ensuite : ", un texte de comptage de passage/répétition de l'exercice suivant (ex.
1/10) s'affiche et chevauche visuellement le nom de l'exercice. - Décision : ce texte est supprimé, pas repositionné. Il n'a pas de valeur pendant le repos : c'est un comptage de progression dans l'exercice suivant, qui n'a pas encore commencé — l'utilisateur n'est pas encore à ce point de la séquence, l'afficher avant est trompeur autant qu'illisible.
- Écran repos résultant :
REPOS
Après série 2 / 5
00:37
Ensuite
Fentes sautées
- Le libellé du chrono repos reste unique (
REPOSen tête, cf. #115) — même règle de non-duplication qu'en séance active. - Le bouton pause/play suit la même règle qu'en séance active : à droite du chrono repos, même ligne, une seule fois.
5. Libellés/éléments à supprimer — récapitulatif pour DevFrontend
- Libellé de chrono dupliqué sous le bouton pause/play → supprimé, ne garder que celui au-dessus de la valeur.
Série mm:ss(temps de série) → supprimé de tous les écrans montre (dominant et secondaire), et retiré de la logique de priorité du chrono dominant.- Texte
FC→ remplacé par icône cœur rouge (#FF4D5E) + valeur, comportement de masquage silencieux inchangé. - Texte de comptage
X/Yde l'exercice suivant sur l'écran Repos → supprimé (pas de remplacement).
6. Comportement attendu / points d'attention responsive
- Ligne chrono + bouton horizontale : sur cadran rond, vérifier que
mm:ssen Anton (36-44px, cf. #115) + bouton 48dp tiennent sans se toucher au bord du cercle — si le chiffre est large (mm:ssavec séparateur), réduire l'espacement interne plutôt que la taille du chiffre ou celle de la cible tactile du bouton (le chiffre reste la donnée dominante prioritaire visuellement). - Cas #140 (score manuel + chrono d'étape piloté manuellement) : le petit bouton toggle réduit (~32dp) déjà spécifié pour ce cas suit la même règle de position "à droite de la valeur du chrono", pas sous elle — cohérence transverse avec la nouvelle règle du bouton pause/play principal.
- Aucun changement sur les écrans
No-session,Actions,Connexion perdue(#115) : ce ticket ne touche queSéance activeetRepos, plus le remplacement ponctuelFC→ icône partout où la fréquence cardiaque est affichée sur la montre. - Pas de nouvelle donnée requise côté bridge/projection : ce ticket est une passe de simplification d'affichage, aucune extension de
WatchSessionProjectionni de commande n'est nécessaire (à confirmer par Architect si le champstatusLabelétait la source du libellé dupliqué — dans ce cas c'est un usage en double du même champ à corriger côté présentation montre, pas un nouveau champ à créer).
Hors périmètre
- Écran téléphone / notification (#108) : non concernés, ce ticket est montre uniquement.
- Pas de changement de la logique de choix du chrono dominant hors retrait du temps de série (ordre repos > étape/chrono prêt > score chrono inchangé, cf. gametime-ux-watch-companion).