@maboussoleaidant/design-system 0.1.40 → 0.1.41

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/AGENTS.md CHANGED
@@ -233,6 +233,8 @@ Utiliser comme `shadow-{name}`.
233
233
  | `--mba-shadow-xs` | `xs` |
234
234
  | `--mba-shadow-sm` | `sm` |
235
235
  | `--mba-shadow-md` | `md` |
236
+ | `--mba-shadow-footer` | `footer` |
237
+ | `--mba-shadow-footer-pro` | `footer-pro` |
236
238
  | `--mba-shadow-inner` | `inner` |
237
239
 
238
240
  <!-- AUTO-GENERATED:tokens-mapping END -->
package/CHANGELOG.md CHANGED
@@ -6,6 +6,65 @@ Format inspiré de [Keep a Changelog](https://keepachangelog.com/fr/1.1.0/). Ver
6
6
 
7
7
  ---
8
8
 
9
+ ## [0.1.41] — 2026-09-15
10
+
11
+ Mise en conformité du **footer** avec la maquette : coins hauts arrondis et ombre portée. **100 % rétrocompatible** (aucune classe modifiée, aucun changement de structure HTML).
12
+
13
+ ### 💅 Style
14
+
15
+ - **`.mba-footer`** (`src/components/_footer.css`) — ajout de `border-radius` et `box-shadow`.
16
+ - `border-radius: var(--mba-radius-sm) var(--mba-radius-sm) 0 0` → 16 px sur les coins hauts uniquement, coins bas laissés droits.
17
+ - `box-shadow: var(--mba-shadow-footer)` → ombre projetée **vers le haut**, le footer étant ancré en bas de page.
18
+ - Coins hauts **en miroir du `.mba-header`**, qui arrondit ses coins bas avec le même `--mba-radius-sm`. Les deux extrémités de page se répondent désormais.
19
+ - `.mba-footer--pro` reçoit `--mba-shadow-footer-pro`, déclinaison bleue de la même ombre.
20
+ - Vérifié sur desktop / tablette (768 px) / mobile (375 px), variantes aidant et pro.
21
+
22
+ ### ✨ Nouveaux tokens
23
+
24
+ Ombres **sémantiques teintées marque** (`src/tokens/_shadows.css`), hors échelle d'élévation : celle-ci est grise (Grey 400) et à double couche, alors que ces deux ombres sont monocouche et colorées.
25
+
26
+ - **`--mba-shadow-footer`** — `0 -4px 8px 8px rgba(112, 57, 115, 0.04)`, soit Primary 500 (`#703973`, la couleur déposée) à 4 %. Transcription du style Figma « Footer aidant ».
27
+ - **`--mba-shadow-footer-pro`** — même géométrie en Primary Pro 500 (`#395172`) à 4 %.
28
+
29
+ Exposés côté Tailwind via `src/tailwind-preset.css` → `shadow-footer` et `shadow-footer-pro`.
30
+
31
+ ### 📐 Conteneur de page unifié (header + footer)
32
+
33
+ Le header et le footer utilisaient deux modèles de conteneur incompatibles : le header avait `max-width: 80rem` (1280 px) avec un padding horizontal fixe de 80 px, le footer `max-width: 1120px` avec un padding horizontal **nul** au-delà de 768 px. Leurs contenus ne s'alignaient qu'à partir de 1280 px de viewport, et la gouttière du footer s'effondrait complètement en dessous de 1120 px — logo collé au bord de l'écran.
34
+
35
+ - **Nouveau token `--mba-container-gutter`** (`src/tokens/_spacing.css`) — 16 px par défaut, 80 px à partir de 768 px.
36
+ - **`.mba-header__container`**, **`.mba-footer__main`** et **`.mba-footer__legal`** partagent désormais `box-sizing: content-box`, `max-width: var(--mba-container-width)` et `padding-inline: var(--mba-container-gutter)`.
37
+ - `content-box` est nécessaire : le `border-box` global du preflight aurait sinon rogné le contenu à 1120 px moins les gouttières.
38
+
39
+ Position du bord gauche du logo, avant → après :
40
+
41
+ | Viewport | Header | Footer |
42
+ |---|---|---|
43
+ | 1440 px | 160 → 160 px | 160 → 160 px |
44
+ | 1200 px | 80 → 80 px | 40 → **80 px** |
45
+ | 1023 px | 80 → 80 px | 0 → **80 px** |
46
+ | 375 px | 24 → **16 px** | 16 → 16 px |
47
+
48
+ Le rendu au-delà de 1280 px est **inchangé** pour les deux composants (1120 px de contenu utile). Les écarts se résorbent en dessous, et la gouttière ne tombe plus jamais à zéro.
49
+
50
+ ### 🍔 Bascule burger du header remontée à 1130 px
51
+
52
+ La nav horizontale ne tenait plus sur la ligne du logo bien avant l'ancien seuil de 768 px : le dernier item (« Espace partenaire ») débordait du conteneur. Le bloc responsive de `_header.css` est scindé en **deux seuils découplés** :
53
+
54
+ - **1130 px** — bascule nav → burger (`__nav`, `__burger`, `__mobile-menu`, et la hauteur fixe du dropdown Partenaire en desktop).
55
+ - **768 px** — traitement téléphone conservé tel quel (logo à 24 px, ombre retirée, rythme vertical resserré).
56
+
57
+ Ce découplage est délibéré : appliquer le traitement téléphone dès 1130 px rapetissait le logo et supprimait l'ombre sur un écran de portable.
58
+
59
+ | Viewport | Nav | Burger | Logo | Ombre |
60
+ |---|---|---|---|---|
61
+ | 1131 px | visible | masqué | 32 px | oui |
62
+ | 1130 px | masquée | **visible** | 32 px | oui |
63
+ | 769 px | masquée | visible | 32 px | oui |
64
+ | 768 px | masquée | visible | **24 px** | **non** |
65
+
66
+ ---
67
+
9
68
  ## [0.1.40] — 2026-08-07
10
69
 
11
70
  Correctif de **cascade layers**. **100 % rétrocompatible** (aucune classe modifiée).
@@ -374,6 +374,18 @@
374
374
  CONTAINER
375
375
  =========================================== */
376
376
  --mba-container-width: 70rem; /* 1120px */
377
+
378
+ /* Gouttière latérale du conteneur de page.
379
+ Partagée par le header et le footer : leurs contenus
380
+ (logo en tête) restent alignés à toutes les largeurs
381
+ et ne se collent jamais au bord du viewport.
382
+ Valeur mobile par défaut, élargie à partir de md. */
383
+ --mba-container-gutter: 1rem; /* 16px */
384
+ }
385
+ @media (min-width: 768px) {
386
+ :root {
387
+ --mba-container-gutter: 5rem; /* 80px */
388
+ }
377
389
  }
378
390
  /**
379
391
  * MBA Design System - Border Radius
@@ -432,6 +444,22 @@
432
444
  0 2px 24px 0 rgba(113, 113, 122, 0.04),
433
445
  1px 2px 24px 0 rgba(113, 113, 122, 0.08);
434
446
 
447
+ /* ===========================================
448
+ OMBRES SÉMANTIQUES (teintées marque)
449
+ Hors échelle d'élévation : couleur de marque
450
+ et non Grey 400, une seule couche.
451
+ =========================================== */
452
+
453
+ /* Footer — style Figma « Footer aidant »
454
+ 0 -4px 8px 8px, Primary 500 (#703973) à 4 %
455
+ Offset Y négatif : le footer est ancré en bas
456
+ de page, son ombre remonte sur le contenu. */
457
+ --mba-shadow-footer: 0 -4px 8px 8px rgba(112, 57, 115, 0.04);
458
+
459
+ /* Footer variante Pro — même géométrie,
460
+ Primary Pro 500 (#395172) à 4 %. */
461
+ --mba-shadow-footer-pro: 0 -4px 8px 8px rgba(57, 81, 114, 0.04);
462
+
435
463
  /* ===========================================
436
464
  VALEURS UTILITAIRES
437
465
  =========================================== */
@@ -3495,9 +3523,13 @@ button.mba-input-icon__icon:hover {
3495
3523
  display: flex;
3496
3524
  align-items: center;
3497
3525
  justify-content: space-between;
3498
- padding: var(--mba-space-md) 5rem; /* vertical: md (24px), horizontal: 80px */
3499
- max-width: 80rem; /* 1280px = 1120px de contenu + 2 x 80px de padding */
3526
+ /* content-box : --mba-container-width borne le CONTENU, la gouttière
3527
+ s'ajoute autour. Sans cela, le border-box global du preflight
3528
+ rognerait le contenu à 1120px - 2 x gouttière. */
3529
+ box-sizing: content-box;
3530
+ max-width: var(--mba-container-width); /* 1120px de contenu */
3500
3531
  margin: 0 auto;
3532
+ padding: var(--mba-space-md) var(--mba-container-gutter);
3501
3533
  }
3502
3534
 
3503
3535
  /* ===========================================
@@ -4082,21 +4114,23 @@ button.mba-input-icon__icon:hover {
4082
4114
 
4083
4115
  /* ===========================================
4084
4116
  RESPONSIVE
4085
- =========================================== */
4086
- @media (max-width: 768px) {
4087
- .mba-header {
4088
- box-shadow: none; /* pas de shadow en mobile */
4089
- }
4090
4117
 
4091
- .mba-header__container {
4092
- padding: var(--mba-space-sm) var(--mba-space-md); /* 12px 16px */
4093
- justify-content: space-between;
4094
- }
4118
+ Deux seuils distincts, volontairement découplés :
4095
4119
 
4096
- .mba-header__mobile-menu {
4097
- padding: var(--mba-space-sm) var(--mba-space-xs); /* top/bottom SM, left/right XS */
4098
- }
4120
+ - 1130px — bascule nav horizontale → menu burger.
4121
+ En dessous, la nav complète ne tient plus sur la ligne
4122
+ du logo et le dernier item débordait du conteneur.
4099
4123
 
4124
+ - 768px — traitement téléphone (logo réduit, ombre
4125
+ retirée, rythme vertical resserré). Ces choix sont
4126
+ propres au petit écran : les appliquer dès 1130px
4127
+ rapetisserait le logo sur un portable.
4128
+ =========================================== */
4129
+
4130
+ /* -------------------------------------------
4131
+ Bascule nav → burger
4132
+ ------------------------------------------- */
4133
+ @media (max-width: 1130px) {
4100
4134
  .mba-header__nav {
4101
4135
  display: none;
4102
4136
  }
@@ -4105,16 +4139,12 @@ button.mba-input-icon__icon:hover {
4105
4139
  display: flex;
4106
4140
  }
4107
4141
 
4108
- .mba-header__logo-img {
4109
- height: 24px;
4110
- }
4111
-
4112
- .mba-icon {
4113
- margin-top: var(--mba-space-xxs);
4142
+ .mba-header__mobile-menu {
4143
+ padding: var(--mba-space-sm) var(--mba-space-xs); /* top/bottom SM, left/right XS */
4114
4144
  }
4115
4145
  }
4116
4146
 
4117
- @media (min-width: 769px) {
4147
+ @media (min-width: 1131px) {
4118
4148
  .mba-header__mobile-menu {
4119
4149
  display: none !important;
4120
4150
  }
@@ -4132,6 +4162,30 @@ button.mba-input-icon__icon:hover {
4132
4162
  }
4133
4163
  }
4134
4164
 
4165
+ /* -------------------------------------------
4166
+ Traitement téléphone
4167
+ ------------------------------------------- */
4168
+ @media (max-width: 768px) {
4169
+ .mba-header {
4170
+ box-shadow: none; /* pas de shadow en mobile */
4171
+ }
4172
+
4173
+ .mba-header__container {
4174
+ /* Gouttière héritée du token (16px sous md), seul le rythme
4175
+ vertical est resserré en mobile. */
4176
+ padding: var(--mba-space-sm) var(--mba-container-gutter);
4177
+ justify-content: space-between;
4178
+ }
4179
+
4180
+ .mba-header__logo-img {
4181
+ height: 24px;
4182
+ }
4183
+
4184
+ .mba-icon {
4185
+ margin-top: var(--mba-space-xxs);
4186
+ }
4187
+ }
4188
+
4135
4189
  }
4136
4190
  /* end @layer components */
4137
4191
  /**
@@ -4428,6 +4482,10 @@ button.mba-input-icon__icon:hover {
4428
4482
  *
4429
4483
  * Footer principal avec logo, navigation, réseaux sociaux et mentions légales.
4430
4484
  *
4485
+ * Coins hauts arrondis (--mba-radius-sm), en miroir du .mba-header qui
4486
+ * arrondit ses coins bas avec la même valeur, et ombre projetée vers le haut
4487
+ * (--mba-shadow-footer, style Figma « Footer aidant »).
4488
+ *
4431
4489
  * Structure:
4432
4490
  * .mba-footer
4433
4491
  * .mba-footer__main - Section principale (flex, space-between)
@@ -4450,6 +4508,8 @@ button.mba-input-icon__icon:hover {
4450
4508
  .mba-footer {
4451
4509
  width: 100%;
4452
4510
  background-color: var(--mba-color-white);
4511
+ border-radius: var(--mba-radius-sm) var(--mba-radius-sm) 0 0;
4512
+ box-shadow: var(--mba-shadow-footer);
4453
4513
  }
4454
4514
 
4455
4515
  /* ===========================================
@@ -4457,9 +4517,12 @@ button.mba-input-icon__icon:hover {
4457
4517
  =========================================== */
4458
4518
 
4459
4519
  .mba-footer__main {
4520
+ /* Conteneur commun avec .mba-header__container : même largeur de
4521
+ contenu, même gouttière, donc logos alignés à toutes les largeurs. */
4522
+ box-sizing: content-box;
4460
4523
  max-width: var(--mba-container-width);
4461
4524
  margin: 0 auto;
4462
- padding: var(--mba-space-xl) var(--mba-space-sm) var(--mba-space-sm);
4525
+ padding: var(--mba-space-xl) var(--mba-container-gutter) var(--mba-space-sm);
4463
4526
  display: flex;
4464
4527
  flex-direction: column;
4465
4528
  gap: var(--mba-space-lg);
@@ -4467,7 +4530,7 @@ button.mba-input-icon__icon:hover {
4467
4530
 
4468
4531
  @media (min-width: 768px) {
4469
4532
  .mba-footer__main {
4470
- padding: var(--mba-space-xl) 0;
4533
+ padding: var(--mba-space-xl) var(--mba-container-gutter);
4471
4534
  }
4472
4535
  }
4473
4536
 
@@ -4719,9 +4782,10 @@ button.mba-input-icon__icon:hover {
4719
4782
 
4720
4783
 
4721
4784
  .mba-footer__legal {
4785
+ box-sizing: content-box;
4722
4786
  max-width: var(--mba-container-width);
4723
4787
  margin: 0 auto;
4724
- padding: var(--mba-space-md) var(--mba-space-sm);
4788
+ padding: var(--mba-space-md) var(--mba-container-gutter);
4725
4789
  display: flex;
4726
4790
  flex-direction: column;
4727
4791
  gap: var(--mba-space-sm);
@@ -4729,7 +4793,6 @@ button.mba-input-icon__icon:hover {
4729
4793
 
4730
4794
  @media (min-width: 768px) {
4731
4795
  .mba-footer__legal {
4732
- padding: var(--mba-space-md) 0;
4733
4796
  flex-direction: row;
4734
4797
  justify-content: space-between;
4735
4798
  align-items: center;
@@ -4789,6 +4852,10 @@ button.mba-input-icon__icon:hover {
4789
4852
  PRO VARIANT
4790
4853
  =========================================== */
4791
4854
 
4855
+ .mba-footer--pro {
4856
+ box-shadow: var(--mba-shadow-footer-pro);
4857
+ }
4858
+
4792
4859
  .mba-footer--pro .mba-footer__contact,
4793
4860
  .mba-footer--pro .mba-footer__nav-link,
4794
4861
  .mba-footer--pro .mba-footer__legal-link {