@zevra/ui 0.29.0 → 0.30.0

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/src/layout.css CHANGED
@@ -440,8 +440,21 @@
440
440
  * les entrées de nav posées sur ses lettres. Deux textes superposés, aucun
441
441
  * lisible. Signalé en recette sur mcp-factory.
442
442
  * Le dégradé n'est pas perdu : il vit sous la barre, là où il adoucit le
443
- * passage sans se disputer la place avec la navigation. */
444
- background: color-mix(in srgb, var(--paper) 92%, transparent);
443
+ * passage sans se disputer la place avec la navigation.
444
+ *
445
+ * L'OPACITÉ, elle, est retombée de 92 à 72 %. À 92 la barre était un
446
+ * bandeau blanc : ce qui passait dessous n'était plus qu'un fantôme, et
447
+ * le flou ne servait à rien puisqu'il n'y avait rien à voir au travers.
448
+ * C'est du verre qu'on veut, pas un cache — le rendu de
449
+ * landing.zevra.tech, qui fait toujours référence. À 72 avec un flou de
450
+ * 14, le contenu transparaît franchement ET les entrées de nav restent
451
+ * nettes. Comparé à l'écran sur un titre passant sous la barre, à 92, 72
452
+ * et 60 : 92 ne montre rien, 60 devient bavard.
453
+ *
454
+ * ⚠️ Baisser l'opacité SANS monter le flou rendrait la nav illisible :
455
+ * les deux vont ensemble. C'est le flou qui fait le verre ; l'opacité ne
456
+ * fait que doser ce qu'on en voit. */
457
+ background: color-mix(in srgb, var(--paper) 72%, transparent);
445
458
  /* ⚠️ LE PRÉFIXÉ D'ABORD. Lightning CSS — le compilateur de Tailwind v4,
446
459
  * donc celui de toutes nos applications Next — SUPPRIME `backdrop-filter`
447
460
  * non préfixé quand il précède la forme `-webkit-`. Or Firefox ne connaît
@@ -457,12 +470,16 @@
457
470
  * compilateur NUE, sans repli, et un navigateur qui l'ignore n'a alors
458
471
  * plus AUCUN fond sous une barre fixe — 3,5 % d'usage qui voyaient le
459
472
  * voile correctement et ne verraient plus rien. */
460
- -webkit-backdrop-filter: blur(6px);
461
- backdrop-filter: blur(6px);
473
+ -webkit-backdrop-filter: blur(14px);
474
+ backdrop-filter: blur(14px);
462
475
  }
463
476
 
464
477
  /* La frange de dégradé, posée SOUS la barre. `pointer-events: none` : elle
465
478
  * couvre le haut du contenu, elle ne doit rien intercepter. */
479
+ /* Le prolongement du voile SOUS la barre : il éteint le verre au lieu de
480
+ * le couper net. Son sommet doit valoir EXACTEMENT l'opacité de la barre —
481
+ * sinon la jointure fait une marche, d'autant plus visible que la barre est
482
+ * translucide. Les deux valeurs bougent donc ensemble. */
466
483
  .zv-header::after {
467
484
  content: '';
468
485
  position: absolute;
@@ -472,11 +489,11 @@
472
489
  height: 24px;
473
490
  background: linear-gradient(
474
491
  180deg,
475
- color-mix(in srgb, var(--paper) 92%, transparent),
492
+ color-mix(in srgb, var(--paper) 72%, transparent),
476
493
  color-mix(in srgb, var(--paper) 0%, transparent)
477
494
  );
478
- -webkit-backdrop-filter: blur(6px);
479
- backdrop-filter: blur(6px);
495
+ -webkit-backdrop-filter: blur(14px);
496
+ backdrop-filter: blur(14px);
480
497
  pointer-events: none;
481
498
  }
482
499
 
package/src/rail.js CHANGED
@@ -27,14 +27,26 @@
27
27
  */
28
28
  (() => {
29
29
  if (typeof document === 'undefined') return
30
- if (document.documentElement.dataset.zvRail === 'on') return
31
- document.documentElement.dataset.zvRail = 'on'
30
+ /* ⚠️ Le drapeau d'armement ne doit JAMAIS reprendre le nom de l'attribut
31
+ * qui désigne un rail. Il s'appelait `data-zv-rail`, comme le composant :
32
+ * posé sur <html>, il faisait de la PAGE ENTIÈRE un rail. Sur une page
33
+ * sans rail — la seule où ça se voit —, `a[href^="#"]` ramassait alors
34
+ * tous les liens d'ancre, boutons compris, et le premier d'entre eux
35
+ * recevait `.zv-rail__item--on` : un appel à l'action en indigo sur fond
36
+ * indigo, illisible. Constaté sur /bootcamp. */
37
+ if (document.documentElement.dataset.zvRailArme === 'on') return
38
+ document.documentElement.dataset.zvRailArme = 'on'
32
39
 
33
40
  /** Hauteur de la ligne de lecture, en fraction du viewport. 45 % : un peu
34
41
  * au-dessus du milieu, là où l'œil se pose vraiment. */
35
42
  const LIGNE = 0.45
36
43
 
37
- const rails = () => Array.from(document.querySelectorAll('[data-zv-rail]'))
44
+ /* Ceinture et bretelles : <html> et <body> ne sont jamais des rails, quoi
45
+ * qu'un consommateur écrive dessus. */
46
+ const rails = () =>
47
+ Array.from(document.querySelectorAll('[data-zv-rail]')).filter(
48
+ (el) => el !== document.documentElement && el !== document.body,
49
+ )
38
50
 
39
51
  const suivre = (rail) => {
40
52
  const entrees = Array.from(rail.querySelectorAll('a[href^="#"]'))