@zevra/ui 0.15.0 → 0.15.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/src/layout.css CHANGED
@@ -313,88 +313,6 @@
313
313
  color: var(--label);
314
314
  }
315
315
 
316
- /* ─── Entrées à menu déroulant ──────────────────────────────────────────
317
- *
318
- * Une nav de vitrine qui porte l'architecture d'un site — des familles,
319
- * pas quatre liens — a besoin de déplier. Ouverture au survol ET au focus
320
- * (`:focus-within`) : en CSS seul, donc accessible au clavier sans une
321
- * ligne de JavaScript et sans état à tenir.
322
- *
323
- * Le panneau est le .zv-menu du paquet, simplement ancré sous l'entrée. */
324
-
325
- .zv-navdd {
326
- position: relative;
327
- display: inline-flex;
328
- }
329
-
330
- /* Le bouton porte .zv-navlink : il doit se rendre EXACTEMENT comme un lien
331
- * simple de la barre. Piège à éviter — un `font: inherit`, réflexe habituel
332
- * pour dénuder un bouton, remet la fonte du CONTENEUR (16px/400) là où
333
- * .zv-navlink pose 14px/500 : les entrées à menu deviennent plus grosses
334
- * que les autres. On ne reprend donc du bouton que ce qui doit disparaître. */
335
- .zv-navdd__btn {
336
- display: inline-flex;
337
- align-items: center;
338
- gap: 5px;
339
- padding: 0;
340
- border: 0;
341
- background: none;
342
- cursor: pointer;
343
- font-family: inherit;
344
- line-height: inherit;
345
- }
346
-
347
- .zv-navdd__chevron {
348
- width: 12px;
349
- height: 12px;
350
- fill: none;
351
- stroke: currentColor;
352
- stroke-width: 2;
353
- /* Bouts francs : le trait carré du jeu d'icônes (25/08/2026). */
354
- stroke-linecap: square;
355
- stroke-linejoin: miter;
356
- transition: transform 160ms var(--zv-easing, cubic-bezier(0.2, 0.7, 0.2, 1));
357
- }
358
-
359
- .zv-navdd:hover .zv-navdd__chevron,
360
- .zv-navdd:focus-within .zv-navdd__chevron {
361
- transform: rotate(180deg);
362
- }
363
-
364
- /* Le pont invisible (::before) couvre l'interstice entre l'entrée et son
365
- * panneau : sans lui, le survol se rompt en descendant vers le menu et le
366
- * menu se referme sous le curseur. */
367
- .zv-navdd__menu {
368
- position: absolute;
369
- top: 100%;
370
- left: 50%;
371
- translate: -50% 0;
372
- padding-top: 14px;
373
- display: none;
374
- min-width: 250px;
375
- z-index: 50;
376
- }
377
-
378
- .zv-navdd__menu::before {
379
- content: '';
380
- position: absolute;
381
- inset: 0 0 auto 0;
382
- height: 14px;
383
- }
384
-
385
- .zv-navdd:hover .zv-navdd__menu,
386
- .zv-navdd:focus-within .zv-navdd__menu {
387
- display: flex;
388
- flex-direction: column;
389
- }
390
-
391
- .zv-navdd__sep {
392
- display: block;
393
- height: 1px;
394
- margin: 6px 0;
395
- background: var(--hairline);
396
- }
397
-
398
316
  /* ─── Sélecteur de langue ───────────────────────────────────────────────
399
317
  * Des initiales au registre mono, pas un menu : trois langues se lisent
400
318
  * d'un coup d'œil, et un menu pour trois entrées coûte un clic pour rien.
@@ -496,6 +496,95 @@
496
496
  * clic extérieur, fermeture à Échap. Le CSS ci-dessus est prêt à les recevoir
497
497
  * (aria-selected, :focus-visible) ; le composant doit les écrire. */
498
498
 
499
+ /* ─── Entrées à menu déroulant de la barre vitrine ──────────────────────
500
+ *
501
+ * ⚠️ CE BLOC DOIT RESTER APRÈS `.zv-menu`, et donc dans CE fichier. Le
502
+ * panneau d'une entrée porte les deux classes ; `.zv-navdd__menu` reprend à
503
+ * `.zv-menu` son display, sa position et son ancrage, à spécificité égale —
504
+ * c'est l'ORDRE qui tranche. Posé dans layout.css, qu'index.css importe
505
+ * AVANT navigation.css, il perdait : les trois menus d'une barre
506
+ * s'affichaient en même temps, ouverts en permanence.
507
+ *
508
+ * Une nav de vitrine qui porte l'architecture d'un site — des familles,
509
+ * pas quatre liens — a besoin de déplier. Ouverture au survol ET au focus
510
+ * (`:focus-within`) : en CSS seul, donc accessible au clavier sans une
511
+ * ligne de JavaScript et sans état à tenir.
512
+ *
513
+ * Le panneau est le .zv-menu du paquet, simplement ancré sous l'entrée. */
514
+
515
+ .zv-navdd {
516
+ position: relative;
517
+ display: inline-flex;
518
+ }
519
+
520
+ /* Le bouton porte .zv-navlink : il doit se rendre EXACTEMENT comme un lien
521
+ * simple de la barre. Piège à éviter — un `font: inherit`, réflexe habituel
522
+ * pour dénuder un bouton, remet la fonte du CONTENEUR (16px/400) là où
523
+ * .zv-navlink pose 14px/500 : les entrées à menu deviennent plus grosses
524
+ * que les autres. On ne reprend donc du bouton que ce qui doit disparaître. */
525
+ .zv-navdd__btn {
526
+ display: inline-flex;
527
+ align-items: center;
528
+ gap: 5px;
529
+ padding: 0;
530
+ border: 0;
531
+ background: none;
532
+ cursor: pointer;
533
+ font-family: inherit;
534
+ line-height: inherit;
535
+ }
536
+
537
+ .zv-navdd__chevron {
538
+ width: 12px;
539
+ height: 12px;
540
+ fill: none;
541
+ stroke: currentColor;
542
+ stroke-width: 2;
543
+ /* Bouts francs : le trait carré du jeu d'icônes (25/08/2026). */
544
+ stroke-linecap: square;
545
+ stroke-linejoin: miter;
546
+ transition: transform 160ms var(--zv-easing, cubic-bezier(0.2, 0.7, 0.2, 1));
547
+ }
548
+
549
+ .zv-navdd:hover .zv-navdd__chevron,
550
+ .zv-navdd:focus-within .zv-navdd__chevron {
551
+ transform: rotate(180deg);
552
+ }
553
+
554
+ /* Le pont invisible (::before) couvre l'interstice entre l'entrée et son
555
+ * panneau : sans lui, le survol se rompt en descendant vers le menu et le
556
+ * menu se referme sous le curseur. */
557
+ .zv-navdd__menu {
558
+ position: absolute;
559
+ top: 100%;
560
+ left: 50%;
561
+ translate: -50% 0;
562
+ padding-top: 14px;
563
+ display: none;
564
+ min-width: 250px;
565
+ z-index: 50;
566
+ }
567
+
568
+ .zv-navdd__menu::before {
569
+ content: '';
570
+ position: absolute;
571
+ inset: 0 0 auto 0;
572
+ height: 14px;
573
+ }
574
+
575
+ .zv-navdd:hover .zv-navdd__menu,
576
+ .zv-navdd:focus-within .zv-navdd__menu {
577
+ display: flex;
578
+ flex-direction: column;
579
+ }
580
+
581
+ .zv-navdd__sep {
582
+ display: block;
583
+ height: 1px;
584
+ margin: 6px 0;
585
+ background: var(--hairline);
586
+ }
587
+
499
588
  /* ─── Popover ───────────────────────────────────────────────────────────
500
589
  * HORS RELEVÉ (25/08/2026, voir DECISIONS.md). Le menu impose ses items ;
501
590
  * il n'existait aucune surface ancrée LIBRE — aide contextuelle,