@zevra/ui 0.11.0 → 0.12.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/DECISIONS.md CHANGED
@@ -588,3 +588,31 @@ jamais les deux.
588
588
  feedback.css refuse explicitement icône et illustration dans l'écran
589
589
  d'absence (« exactement les trois ajouts qu'un état vide attire »). Ce
590
590
  refus est argumenté et écrit : il tient, la fournée ne le rouvre pas.
591
+
592
+ ## Les entrées ne se rejouent pas (26/08/2026, 0.12.0)
593
+
594
+ Constat d'usage sur le site vitrine : les entrées pilotées par
595
+ `animation-timeline: view()` rejouaient À L'ENVERS dès que le lecteur
596
+ remontait — les vidéos, les cartes d'articles, les grilles entières
597
+ disparaissaient sous ses yeux, y compris en pleine lecture d'un article. Et
598
+ une grille haute, jamais « contenue » dans le viewport, n'atteignait jamais
599
+ son état posé : la section paraissait vide.
600
+
601
+ Arbitrage : **une révélation par visite**. Les sept entrées deviennent des
602
+ animations temporelles courtes, armées par `html.zv-motion` (posé par
603
+ `motion.js`, importable en `@zevra/ui/motion.js`) et libérées par `.zv-in`
604
+ à l'entrée au viewport — une fois, puis plus jamais. Sans JavaScript, rien
605
+ n'est armé : la page s'affiche complète, même dégradation douce qu'avant.
606
+ Les @keyframes remontent au niveau racine pour qu'un échafaudage de scènes
607
+ (l'expérience épinglée d'une home) puisse les re-brancher sur ses timelines
608
+ nommées : il pose `data-zv-motion-skip` sur ses scènes et motion.js n'y
609
+ touche pas.
610
+
611
+ Ce qui RESTE scroll-piloté, et doit le rester : la barre de progression
612
+ (`zv-anim-progress`) et le point d'étape (`zv-anim-dot-active`) — suivre la
613
+ position de lecture est leur raison d'être, avancer et reculer avec elle
614
+ est leur contrat.
615
+
616
+ Corrigé du même mouvement : dans `.zv-band`, l'emphase `strong` de
617
+ zv-body/zv-lead posait l'encre (--ink) sur le navy — invisible. Elle hérite
618
+ désormais de la couleur ambiante, la graisse seule la distingue.
package/README.md CHANGED
@@ -150,9 +150,16 @@ Les règles de la passation : une seule courbe, un seul type de mouvement par
150
150
  scène, des entrées toujours vers le haut, et **aucun mouvement sur la
151
151
  typographie une fois posée**.
152
152
 
153
- Les entrées ne sont déclarées que dans un bloc `@supports` : sans
154
- `animation-timeline`, la page s'affiche complète plutôt que vide. Un seul
155
- media query neutralise les neuf pour `prefers-reduced-motion`.
153
+ Les entrées se jouent **une fois par visite** (0.12.0) : elles sont armées
154
+ par `html.zv-motion` et libérées à l'entrée au viewport par `motion.js` —
155
+ `import '@zevra/ui/motion.js'` une fois par page, et rien d'autre à faire.
156
+ Remonter la page ne défait rien : l'ancien pilotage `view()` rejouait les
157
+ entrées à l'envers sous le lecteur. Sans JavaScript, rien n'est armé et la
158
+ page s'affiche complète. Un échafaudage de scènes scroll-pilotées pose
159
+ `data-zv-motion-skip` sur ses scènes et re-branche les @keyframes sur ses
160
+ timelines nommées. Seuls `zv-anim-progress` et `zv-anim-dot-active` restent
161
+ au défilement — suivre la lecture est leur métier. Un seul media query
162
+ neutralise les neuf pour `prefers-reduced-motion`.
156
163
 
157
164
  ### Les tokens en JavaScript
158
165
 
package/demo/index.html CHANGED
@@ -7,6 +7,7 @@
7
7
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
8
8
  <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Outfit:wght@200;300;400;500;600&family=Public+Sans:wght@400;600&family=Space+Grotesk:wght@500;600;700&display=swap">
9
9
  <link rel="stylesheet" href="../src/index.css">
10
+ <script src="../src/motion.js" defer></script>
10
11
  <style>
11
12
  /* Propre à la planche : elle n'appartient pas au système. */
12
13
  .demo-sec { padding-top: 72px; }
@@ -1 +1 @@
1
- {"version":3,"file":"css-inline.d.ts","sourceRoot":"","sources":["../react/css-inline.ts"],"names":[],"mappings":"AAGA;;;iEAGiE;AACjE,eAAO,MAAM,WAAW,EAAE,MAAklgO,CAAA;AAE5mgO;;;yBAGyB;AACzB,eAAO,MAAM,WAAW,EAAE,MAAm4B,CAAA"}
1
+ {"version":3,"file":"css-inline.d.ts","sourceRoot":"","sources":["../react/css-inline.ts"],"names":[],"mappings":"AAGA;;;iEAGiE;AACjE,eAAO,MAAM,WAAW,EAAE,MAAghnO,CAAA;AAE1inO;;;yBAGyB;AACzB,eAAO,MAAM,WAAW,EAAE,MAAm4B,CAAA"}