@zevra/ui 0.31.0 → 0.33.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.
@@ -1362,3 +1362,124 @@
1362
1362
  .zv-legal__encart--important .zv-legal__encart-label {
1363
1363
  color: var(--warn-ink);
1364
1364
  }
1365
+
1366
+ /* ─── Page d'erreur ─────────────────────────────────────────────────────
1367
+ * HORS RELEVÉ (28/08/2026), voir DECISIONS.md « La page d'erreur ».
1368
+ *
1369
+ * Une page entière, pas un encart : 404, 403, 410, 500, maintenance. Elle
1370
+ * est ICI et non dans feedback.css parce que la landing Astro en a besoin
1371
+ * autant que les apps Next, et que components.css est le seul module que
1372
+ * les deux couches chargent réellement — c'est lui qui porte le bouton.
1373
+ *
1374
+ * ⚠️ Le bloc ne pose AUCUN texte et n'embarque AUCUNE image. Le glyphe
1375
+ * arrive en propriété (`@zevra/ui/glyphes`), la copie vient de l'app. Une
1376
+ * plaisanterie câblée dans un design system part dans les sept apps, dans
1377
+ * une seule langue, et n'en revient jamais. */
1378
+
1379
+ .zv-errpage {
1380
+ display: flex;
1381
+ flex-direction: column;
1382
+ align-items: center;
1383
+ justify-content: center;
1384
+ /* 70vh et non 100 : la page garde sa barre de navigation au-dessus et son
1385
+ * pied en dessous — une erreur n'est pas une raison de perdre la sortie. */
1386
+ min-height: 70vh;
1387
+ padding: 72px 24px;
1388
+ text-align: center;
1389
+ }
1390
+
1391
+ /* La marque, en tête : sur une page qui n'a plus de contenu, c'est le seul
1392
+ * repère qui dit encore où l'on se trouve. */
1393
+ .zv-errpage__glyphe {
1394
+ width: 56px;
1395
+ height: 56px;
1396
+ object-fit: contain;
1397
+ }
1398
+
1399
+ /* Le kicker, avec le filet de spectre — PREMIER de ses trois emplois
1400
+ * autorisés. C'est là que le code d'erreur se dit, en mono comme toutes les
1401
+ * métadonnées du système. */
1402
+ .zv-errpage__kicker {
1403
+ display: flex;
1404
+ align-items: center;
1405
+ gap: 12px;
1406
+ margin-top: 30px;
1407
+ }
1408
+
1409
+ .zv-errpage__titre {
1410
+ margin-top: 16px;
1411
+ font-family: var(--font-display);
1412
+ font-size: var(--h3);
1413
+ font-weight: 300;
1414
+ letter-spacing: -0.02em;
1415
+ line-height: 1.1;
1416
+ color: var(--ink);
1417
+ }
1418
+
1419
+ .zv-errpage__texte {
1420
+ /* La mesure bornée n'est pas décorative : centré et pleine largeur, ce
1421
+ * paragraphe devient illisible dès 900px. Même raison qu'en
1422
+ * .zv-empty__text, et même ordre de grandeur. */
1423
+ margin: 14px auto 0;
1424
+ max-width: 480px;
1425
+ font-size: var(--lead);
1426
+ line-height: 1.6;
1427
+ color: var(--muted);
1428
+ }
1429
+
1430
+ /* Deux actions au plus, et UN SEUL bouton plein : la sortie principale et
1431
+ * un recours. Au-delà, la page d'erreur devient un menu. */
1432
+ .zv-errpage__actions {
1433
+ display: flex;
1434
+ flex-wrap: wrap;
1435
+ justify-content: center;
1436
+ gap: 12px;
1437
+ margin-top: 30px;
1438
+ }
1439
+
1440
+ /* La cote de l'incident : le code et le chemin demandé. Ce n'est pas un
1441
+ * ornement — elle donne au visiteur de quoi signaler la panne et au support
1442
+ * de quoi la retrouver. Sa forme est celle d'une référence de dossier, ce
1443
+ * qui est la seule illustration dont cette maison ait besoin. */
1444
+ .zv-errpage__ref {
1445
+ margin-top: 44px;
1446
+ padding-top: 14px;
1447
+ /* --line et NON --hairline : le cheveu (#eef1f8) est plus CLAIR que le
1448
+ * papier (#f5f6fa), donc invisible dès que la page ne repose pas sur du
1449
+ * blanc — et une page d'erreur repose sur le papier. Vu au navigateur ; le
1450
+ * trait était bien là, et ne se voyait pas. */
1451
+ border-top: 1px solid var(--line);
1452
+ min-width: 220px;
1453
+ font-family: var(--font-mono);
1454
+ font-size: var(--mono);
1455
+ font-weight: 600;
1456
+ letter-spacing: 0.14em;
1457
+ text-transform: uppercase;
1458
+ color: var(--label);
1459
+ /* Un chemin long ne doit pas pousser la page en défilement horizontal. */
1460
+ max-width: 100%;
1461
+ overflow-wrap: anywhere;
1462
+ }
1463
+
1464
+ @media (max-width: 767px) {
1465
+ .zv-errpage {
1466
+ min-height: 60vh;
1467
+ padding: 48px 20px;
1468
+ }
1469
+
1470
+ /* --h3 (38px) sur 320px de large coupe « introuvable » en deux. */
1471
+ .zv-errpage__titre {
1472
+ font-size: var(--card-title);
1473
+ }
1474
+
1475
+ .zv-errpage__texte {
1476
+ font-size: var(--body);
1477
+ }
1478
+
1479
+ /* Empilées : côte à côte, deux boutons de 48px ne laissent pas la place
1480
+ * aux libellés et se coupent. */
1481
+ .zv-errpage__actions {
1482
+ flex-direction: column;
1483
+ align-self: stretch;
1484
+ }
1485
+ }