feat(shorts): flèches en ligne avec le menu + fondu des contrôles au repos
CI / build-and-test (push) Successful in 14m54s

Demandes (page /shorts) : retrouver les flèches Préc./Suiv. là où se
trouve le menu, et des contrôles presque invisibles au repos pour
laisser la vidéo respirer (ton pro).

- Flèches déplacées du milieu des côtés vers la rangée HAUTE du cadre,
  centrées : même niveau que le FAB menu, sans chevaucher la flèche
  retour mobile (gauche) ni le FAB (droite). Le toast « Lien copié »
  passe en z-30 pour rester lisible sous la rangée.
- Fondu au repos : nouvelles règles index.css — flèches (.shorts-ctrl)
  et FAB à 0.18 d'opacité quand le chrome est au repos (2,5 s sans
  souris), pleins au moindre mouvement (chromeVisible) ou au survol
  direct (:hover), jamais atténués quand le panneau est ouvert
  (pm-fab-open). Sur tactile, le chrome ne se masque jamais (pas de
  mousemove : comportement voulu, mobile inchangé).
- Le minuteur d'immobilité est armé au chargement (pokeChrome sous
  matchMedia('(hover: hover)')) : sans un premier mousemove,
  chromeVisible restait true et le fondu ne s'armait jamais.
- mouseenter sur l'iframe : en entrant sur la vidéo, le document
  parent ne reçoit pas les mouvements internes à l'iframe — l'entrée
  réveille les contrôles.

Recette Playwright desktop+mobile, 14/14 : position haute centrée,
absence de chevauchements, repos 0.18 (flèches + FAB), retour plein
après mouvement réel, mobile plein en permanence. Build + test:section
verts avant commit.
This commit is contained in:
2026-10-02 11:28:03 -04:00
parent 3ab61821b2
commit e44b545e01
3 changed files with 46 additions and 13 deletions
+22
View File
@@ -572,6 +572,28 @@ body {
opacity: 0;
pointer-events: none;
}
/* Contrôles flottants (rangée de flèches + FAB menu) : presque fondu au repos
pour laisser la vidéo respirer (ton pro), pleins dès le moindre mouvement
de souris (chromeVisible) ou survol direct. Le panneau ouvert et le FAB
ouvert ne sont jamais atténués. Le tactile ne déclenche presque pas
mousemove : sur mobile tout reste donc plein (comportement voulu). */
.shorts-frame .shorts-ctrl,
.shorts-frame app-player-menu .pm-fab {
transition: opacity 0.25s ease;
}
.shorts-chrome-hidden .shorts-frame .shorts-ctrl {
opacity: 0.18;
}
.shorts-chrome-hidden .shorts-frame .shorts-ctrl:not(:disabled):hover {
opacity: 1;
}
.shorts-chrome-hidden .shorts-frame app-player-menu .pm-fab {
opacity: 0.18;
}
.shorts-chrome-hidden .shorts-frame app-player-menu .pm-fab:hover,
.shorts-chrome-hidden .shorts-frame app-player-menu .pm-fab.pm-fab-open {
opacity: 1;
}
@media (prefers-reduced-motion: reduce) {
.shorts-chrome {
transition: none;