/* ===========================================================
   AM-Boost — feuille de style MVP v1
   DA : carte de visite Canva (bleu roi + orange + pinceaux arc-en-ciel)

   COULEURS : échantillonnées au pixel (recto ET verso de la carte).
     bleu   verso #1D49A7 · recto #1D3FA8  → écart invisible, on garde #1D49A7
     orange verso #EB4E27 · recto #F26A2E  → le recto tire plus clair,
            couvert par --orange-clair #F7864E

   POLICES de la carte, telles que listées dans Canva :
     · Amsterdam Three  → signature « Anouk Minkowski »   (police Canva, pas de version web)
     · Amsterdam Four   → baselines du recto + citation   (police Canva, pas de version web)
     · Architects Daughter → tout le texte orange du verso (Google Fonts, libre ✅)
     · Montserrat       → présente dans le doc Canva      (Google Fonts, libre ✅)

   SUBSTITUTION : Amsterdam Three/Four ne sont pas diffusables sur le web.
   Remplacées ici par « Allura » (Google Fonts) — même famille : script
   monoline élégant et incliné. À valider à l'œil.

   LOGO : depuis le 30/07, Anouk a fourni son logo officiel
   (source/logo-anouk-officiel.png, généré via ChatGPT à sa demande —
   aucun droit tiers, pas de vectoriel à attendre) :
     assets/logo-officiel.webp/png  (monogramme + lettrage) → hero
     assets/mot-officiel.webp/png   (lettrage seul)         → navigation
   Les anciennes découpes de la carte (logo-am-boost / mot-am-boost)
   ne sont plus référencées.

   ENCRE (30/07) : Anouk trouvait le texte « pas assez peps » — après
   clarification de Le N, le vrai souci était la POLICE, pas la couleur.
   Le sélecteur d'encre A/B/C a donc été retiré : l'encre est figée au
   bleu nuit (--encre #1B2C5C, --encre-2 #4D5A8C pour le texte d'appui ;
   --noir reste réservé aux fonds sombres, bandeau + footer).
   Les tailles du texte courant sont en em (base = body) — hérité de
   l'époque des variantes, on garde : c'est plus robuste.

   POLICE : figée le 12/08 sur QUICKSAND (la n° 4 du sélecteur d'essai),
   choisie par Anouk. Le sélecteur et les 4 polices d'essai ont été
   retirés — voir le bloc « les 3 polices du site ».
   =========================================================== */

/* ---------- les 3 polices du site, hébergées ICI ----------
   Un site de psychologue ne doit pas faire voyager l'IP de ses
   visiteuses chez un tiers : plus aucun appel vers fonts.googleapis.com
   ni fonts.gstatic.com. Fichiers dans assets/polices/, sous-ensemble
   latin (+ latin-ext, que le navigateur ne va chercher que s'il en a
   besoin). Le rendu est identique — ce sont les mêmes fichiers.
   ✔ 12/08 : les 4 polices d'essai (Montserrat/Nunito/Lora/Raleway) ont
   disparu avec le sélecteur. Elles étaient les DERNIÈRES à être
   chargées depuis Google, et seulement sur clic — le site ne fait
   désormais plus AUCUN appel vers l'extérieur, sur aucune page. */
@font-face{font-family:'Quicksand';font-style:normal;font-weight:400 700;font-display:swap;
  src:url(polices/quicksand-latin-ext.woff2) format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Quicksand';font-style:normal;font-weight:400 700;font-display:swap;
  src:url(polices/quicksand-latin.woff2) format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Architects Daughter';font-style:normal;font-weight:400;font-display:swap;
  src:url(polices/architects-latin-ext.woff2) format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Architects Daughter';font-style:normal;font-weight:400;font-display:swap;
  src:url(polices/architects-latin.woff2) format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:'Allura';font-style:normal;font-weight:400;font-display:swap;
  src:url(polices/allura-latin-ext.woff2) format('woff2');
  unicode-range:U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF}
@font-face{font-family:'Allura';font-style:normal;font-weight:400;font-display:swap;
  src:url(polices/allura-latin.woff2) format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}

:root{
  color-scheme: light;

  /* DA carte de visite — mesuré */
  --bleu:        #1D49A7;
  --bleu-fonce:  #143578;
  --bleu-clair:  #4A78D4;
  --bleu-voile:  #EDF2FC;

  --orange:      #EB4E27;
  --orange-clair:#F7864E;
  --orange-voile:#FEF1EC;

  --vert:        #2E9E6E;
  --magenta:     #D6336C;
  --jaune:       #E0A500;

  --encre:       #21306E;   /* texte courant — bleu nuit indigo (appel du 01/08) */
  --encre-2:     #525C9E;   /* texte d'appui : ledes, cartes, FAQ… */

  /* L'ÉTOILE — c'est l'éclat au centre du monogramme « AM » de son logo.
     Elle remplace TOUS les tirets et puces du site (appel du 01/08).
     Pictogramme plein, jaune→orange : elle scintille UNE fois à l'arrivée,
     puis ne bouge plus. Rien ne boucle. */
  --etoile:url("data:image/svg+xml;charset=utf8,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'><defs><linearGradient id='g' x1='0' y1='0' x2='1' y2='1'><stop offset='0' stop-color='%23F7C948'/><stop offset='.55' stop-color='%23F2B705'/><stop offset='1' stop-color='%23F0761E'/></linearGradient></defs><path fill='url(%23g)' d='M12 0C12 6.6 17.4 12 24 12 17.4 12 12 17.4 12 24 12 17.4 6.6 12 0 12 6.6 12 12 6.6 12 0Z'/></svg>");
  --noir:        #21252E;   /* fonds sombres : bandeau + footer */
  --gris:        #5F6673;
  --gris-clair:  #8A909C;
  --trait:       #E4E7ED;
  --papier:      #FFFFFF;
  --creme:       #FAF8F5;

  --max: 1080px;
}

*{box-sizing:border-box}
html{scroll-behavior:smooth}

/* ---------- « Aller au contenu » ----------
   Rangé hors écran, il revient dès qu'on l'atteint au clavier. */
.saut-contenu{
  position:fixed;top:8px;left:8px;z-index:9999;
  transform:translateY(-160%);transition:transform .18s;
  background:var(--bleu);color:#fff;font-weight:800;
  padding:12px 20px;border-radius:12px;text-decoration:none;
  box-shadow:0 8px 24px rgba(0,0,0,.3);
}
.saut-contenu:focus{transform:translateY(0)}
/* ✔ POLICE FIGÉE — QUICKSAND, choisie par Anouk (la n° 4 du sélecteur
   d'essai, confirmée le 11/08). Le sélecteur à 5 boutons et les
   surcharges html[data-police] ont été retirés le 12/08.
   Quicksand s'arrête à 700 : les graisses 800/900 du site sont donc
   ramenées à 700 par le navigateur, sans faux gras.
   Les titres manuscrits (Architects Daughter) et le script (Allura),
   validés par Anouk, ne changent pas non plus. */
body{
  margin:0; background:var(--papier); color:var(--encre);
  font-family:'Quicksand',-apple-system,'Segoe UI',sans-serif;
  font-size:19px; line-height:1.7; font-weight:400;
  -webkit-font-smoothing:antialiased;
  /* Safari iOS grossit tout seul le texte en paysage : on lui retire la main. */
  -webkit-text-size-adjust:100%; text-size-adjust:100%;
  overflow-x:hidden;
}
img{max-width:100%;height:auto;display:block}
a{color:var(--bleu);text-decoration:none}

/* Titres = « Architects Daughter », la voix manuscrite de la carte */
h1,h2,h3,h4{line-height:1.2;margin:0;color:var(--bleu);letter-spacing:0}
/* text-wrap:balance — les titres manuscrits se coupaient mal (un « ? »
   tout seul sur la dernière ligne). Ignoré par les vieux navigateurs. */
h1,h2{font-family:'Architects Daughter',cursive;font-weight:400;text-wrap:balance}
h3,h4{font-family:'Quicksand',sans-serif;font-weight:700;letter-spacing:-.01em}
h1{font-size:clamp(33px,5vw,54px)}
h2{font-size:clamp(29px,4vw,44px)}
h3{font-size:clamp(19px,2.3vw,23px)}
p{margin:0 0 18px}
.wrap{max-width:var(--max);margin:0 auto;padding:0 26px}
/* Script = substitut d'Amsterdam Three / Amsterdam Four */
.script{font-family:'Allura',cursive;font-weight:400;letter-spacing:.01em}
.hand{font-family:'Architects Daughter',cursive}
.center{text-align:center}

/* ---------- bandeau noir ----------
   Retiré du site le 12/08 (version finale). Il ne subsiste que sur
   questions.html, la page de travail d'Anouk, où il porte une simple
   phrase d'état — d'où ces 2 règles, et plus les boutons. */
#brouillon{
  background:var(--noir);color:#fff;font-size:14px;padding:9px 20px;
  display:flex;gap:16px;align-items:center;justify-content:center;flex-wrap:wrap;
}
#brouillon b{color:var(--orange-clair)}

/* ---------- traçabilité des sources ----------
   Le bouton « Voir d'où vient chaque bloc » a été retiré le 12/08 : plus
   rien sur le site n'ajoute la classe « tracer », donc rien ne s'affiche.
   On garde l'outil : les attributs data-src / data-label sont toujours
   dans le HTML (tools/verif.py s'en sert pour vérifier qu'aucune phrase
   n'a été inventée), et une ligne de console les rallume à tout moment :
   document.body.classList.add('tracer') */
[data-src]{position:relative}
body.tracer [data-src]{
  outline:2px dashed var(--tint,#ccc); outline-offset:9px; border-radius:4px;
  margin-bottom:14px;
}
body.tracer [data-src]::after{
  content:attr(data-label);
  position:absolute; top:-9px; right:-9px; transform:translateY(-100%);
  font-size:10.5px; font-weight:900; letter-spacing:.09em; text-transform:uppercase;
  background:var(--tint); color:#fff; padding:2px 8px; border-radius:20px;
  white-space:nowrap; z-index:40;
}
[data-src="pdf"]     {--tint:#2E9E6E}
[data-src="anouk"]   {--tint:#0E7490}   /* ses réponses du 30/07 — mot pour mot */
[data-src="reformule"]{--tint:#E0A500}
[data-src="propose"] {--tint:#1B3C92}
[data-src="manquant"]{--tint:#D6336C}

/* ---------- pinceaux : les ARCHES des coins ----------
   ✔ FIGÉ LE 03/08 sur la variante 4 « Souffle », choisie par Le N
   après les avoir toutes essayées. Le sélecteur a été retiré le même
   jour, et les cinq blocs [data-coin="…"] sont
   devenus le seul bloc :root ci-dessous.

   POUR CHANGER DE FOND PLUS TARD : tout tient dans le bloc :root —
   deux url() et quatre nombres. Les quatre autres variantes sont
   rangées, images ET réglages, dans source/coins-variantes/ (voir
   son README) et sur le Drive. Rien d'autre à toucher : le pinceau
   est un bloc vide dont l'image, les proportions et la taille
   viennent toutes de ces variables.

     1 « Carte »     les vrais coins de sa carte, découpés (webp)
     2 « Dessin »    premier dessin SVG — un quart d'ellipse
     3 « Arche »     l'arche mesurée, franche
     4 « Souffle »   la même, aérée + halo sur le fond   ← EN LIGNE
     5 « Signature » anatomie complète, fondue au fond

   CE QUI SÉPARE 2 DE 3, ET C'EST TOUT LE SUJET : sur sa carte, le
   bord intérieur de la peinture est CREUX (mesuré : la portée est de
   207 px le long du bord haut, 165 le long du bord gauche, mais
   seulement 109 sur la diagonale). La peinture épouse les deux bords
   et s'amincit au milieu. La variante 2 faisait exactement l'inverse
   — une tache bombée. Voir tools/arches.py pour le relevé complet.

   AU RAS DU COIN (top:0/left:0) : sur sa carte le geste part du bord.
   Une version précédente les décalait de 46 à 96 px vers l'extérieur,
   ce qui coupait le trait en plein milieu de sa course.

   C'est la HAUTEUR qui pilote, pas la largeur : dans une tranche courte
   (« À quoi pouvez-vous vous attendre », l'en-tête « Anouk Minkowski »)
   un pinceau à largeur fixe se faisait trancher en deux par le bas de la
   section. Le min(…, x%) le fait rapetisser au lieu d'être coupé — il
   reste toujours un geste entier.

   PROPORTIONS : reprises de la carte, où les deux arches n'ont PAS la
   même allure — la chaude est basse et large (207 × 165), la froide
   haute et étroite (172 × 325). Elles ne sont pas interchangeables.

   Un coin plein est forcément coupé par les DEUX bords qui s'y touchent.
   Sur la carte, ces deux bords sont ceux du carton et l'œil les accepte.
   Sur la page, un seul des deux est un vrai bord :
     · à GAUCHE (chaud) et à DROITE (froid) → le bord de la fenêtre :
       coupe franche, exactement comme le carton ;
     · en HAUT (chaud) et en BAS (froid) → le haut/bas d'une SECTION, une
       limite invisible au milieu de la page. Là, un fondu de 10 % : le
       geste s'éloigne du papier au lieu d'être tranché au couteau.

   DEUX COUCHES, ET C'EST VOULU : l'arche est peinte sur un ::before,
   le voile de couleur de la variante « Souffle » sur un ::after. Un
   masque CSS rogne toujours au ras du cadre de l'élément qui le porte —
   tant que les deux vivaient sur le même bloc, le fondu du bas
   découpait le voile en RECTANGLE, exactement le « collage » qu'on
   cherche à éviter. Séparés, chacun est libre. */
.brush-corner{
  position:absolute;pointer-events:none;z-index:0;user-select:none;width:auto;
}
.brush-corner::before{
  content:"";position:absolute;inset:0;
  background:var(--coin-image) no-repeat;background-size:100% 100%;
}
.brush-tl{
  top:0;left:0;--coin-image:var(--coin-chaud);
  aspect-ratio:var(--coin-format-chaud);height:var(--coin-haut-chaud);
}
.brush-br{
  bottom:0;right:0;--coin-image:var(--coin-froid);
  aspect-ratio:var(--coin-format-froid);height:var(--coin-haut-froid);
}
.brush-tl::before{
  -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 10%);
          mask-image:linear-gradient(to bottom,transparent 0,#000 10%);
}
.brush-br::before{
  -webkit-mask-image:linear-gradient(to bottom,#000 90%,transparent 100%);
          mask-image:linear-gradient(to bottom,#000 90%,transparent 100%);
}

/* ══ LE FOND EN LIGNE — variante 4 « Souffle » ══
   Les six valeurs qui définissent le décor de toute la page. Pour
   passer à une autre variante, on ne remplace QUE ce bloc : le
   README de source/coins-variantes/ donne les six lignes de chacune,
   prêtes à coller.

   Les tailles viennent de sa carte, converties en proportions d'écran :
   l'arche chaude y couvre 20,6 % de la largeur du carton et 25,4 % de sa
   hauteur, la froide 17,1 % et 50 %. Rapporté à une fenêtre de 1440,
   ça donne 339 × 273 px pour la chaude et 275 × 518 pour la froide —
   c'est très exactement ce que produisent les deux clamps ci-dessous.
   La froide est donc deux fois plus haute que la chaude, comme chez elle. */
:root{
  --coin-chaud:url(coin-chaud-4.svg);
  --coin-format-chaud:520/420;  --coin-haut-chaud:min(clamp(140px,19vw,310px),62%);
  --coin-froid:url(coin-froid-4.svg);
  --coin-format-froid:340/640;  --coin-haut-froid:min(clamp(240px,36vw,570px),86%);
}

/* LE VOILE, la moitié invisible de « Souffle ». C'est LA réponse au
   « on dirait un collage » : une nappe de couleur très diluée déborde
   largement de l'arche (trois fois sa taille) et se dissout dans le
   fond de la section, si bien qu'il n'y a plus de frontière nette
   entre le geste et la page. Elle vit DERRIÈRE l'arche (z-index:-1
   dans le contexte du pinceau lui-même), donc elle ne peut jamais
   passer par-dessus le texte.
   ⚠ Ce voile appartient à la variante 4. Si un jour on repasse à une
   autre arche, il faut retirer ces trois règles en même temps —
   c'est écrit dans le README des variantes.

   03/08 — LE VOILE NE DÉBORDE PLUS DANS LE VIDE. Il s'étendait sur 330 %
   de large et 370 % de haut, alors que sa couleur tombait à zéro dès
   72 % : le dernier tiers était une surface transparente que le
   navigateur repeignait quand même à chaque tuile. On a ramené le cadre
   à ce qui se voit (330 × 0,72 = 237,6 % → -137,6 % ; 370 × 0,72 =
   266,4 % → -166,4 %) et rééchelonné les étapes de couleur dans la même
   proportion (33 / 0,72 = 45,8 %, et le zéro arrive maintenant au bord).
   Même ellipse, exactement les mêmes pixels, **moitié moins de surface
   à peindre**. Les trois nombres vont ensemble : en changer un seul
   déforme le halo. */
.brush-corner::after{content:"";position:absolute;z-index:-1}
.brush-tl::after{
  inset:0 -137.6% -166.4% 0;
  background:radial-gradient(100% 100% at 0 0,rgba(240,105,35,.17),
             rgba(240,105,35,.085) 45.8%,rgba(240,105,35,0) 100%);
}
.brush-br::after{
  inset:-166.4% 0 0 -137.6%;
  background:radial-gradient(100% 100% at 100% 100%,rgba(29,73,167,.17),
             rgba(29,73,167,.085) 45.8%,rgba(29,73,167,0) 100%);
}

/* L'EXCEPTION QUI COMPTE : tout en haut de la page, le pinceau chaud ne
   touche pas une limite de section invisible — il touche le bas de la
   barre de navigation, qui est un VRAI bord, souligné d'un filet. Le
   fondu y serait un aveu de faiblesse : on coupe net, l'encre file sous
   la barre exactement comme elle file sous le bord du carton. Les trois
   autres arches, elles, démarrent au milieu de la page : elles gardent
   leur fondu. */
#accueil .hero .brush-tl::before{-webkit-mask-image:none;mask-image:none}

.brush-rule{
  height:8px;width:200px;border-radius:8px;margin:0 auto;
  background:linear-gradient(90deg,var(--bleu),var(--vert),var(--jaune),var(--orange),var(--magenta));
}

/* ---------- navigation ---------- */
header.nav{
  position:sticky;top:0;z-index:50;background:rgba(255,255,255,.93);
  border-bottom:2px solid var(--trait);
}
/* Verre liquide (30/07, demande Le N) : le contenu passe flouté sous la
   barre — effet léger, liseré lumineux en haut, ombre très douce.
   Le flou vit sur un ::before, PAS sur la barre elle-même : Chrome peint
   mal les descendants qui débordent d'un élément en backdrop-filter
   (le panneau du menu mobile devenait transparent au texte de la page).
   Sans backdrop-filter (vieux navigateurs), on reste sur le blanc
   quasi opaque du dessus : toujours lisible. */
@supports ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){
  header.nav{background:transparent;border-bottom:1px solid rgba(228,231,237,.65)}
  header.nav::before{
    content:"";position:absolute;inset:0;z-index:-1;
    background:rgba(255,255,255,.75);
    -webkit-backdrop-filter:blur(18px) saturate(170%);
    backdrop-filter:blur(18px) saturate(170%);
    box-shadow:inset 0 1px 0 rgba(255,255,255,.65),0 6px 22px rgba(27,44,92,.08);
  }
}
.nav .wrap{display:flex;align-items:center;justify-content:space-between;gap:20px;padding-top:14px;padding-bottom:14px}
/* le lettrage « AM-Boost », découpé au pixel dans le recto de la carte */
/* padding vertical : le logo est un lien vers l'accueil, il doit faire
   au moins 44 px de haut au doigt. */
.logo{display:flex;align-items:center;flex:0 0 auto;padding:7px 0}
.logo img{display:block;height:38px;width:auto}
.nav nav{display:flex;gap:26px;align-items:center;position:relative}
.nav nav a{font-weight:700;font-size:16px;color:var(--gris);white-space:nowrap;transition:color .3s}
.nav nav a:hover,.nav nav a[aria-current]{color:var(--bleu)}
.burger{display:none}

/* ---------- navigation sur téléphone ----------
   Mesuré avant : les 4 liens ne tiennent pas sur une ligne à 390 px,
   ils passaient à la ligne et l'entête collant mangeait 152 px,
   soit 18 % de l'écran d'un iPhone, en permanence.
   Repliés dans un panneau : entête à 62 px, et chaque lien devient
   une cible de 54 px de haut (minimum recommandé par Apple : 44 px).

   Le bouton n'apparaît que si le JavaScript tourne (classe « js » sur
   <html>). Sinon les 4 liens restent visibles : la navigation marche
   toujours, elle prend juste deux lignes. */
@media(max-width:880px){
  .nav .wrap{padding-top:7px;padding-bottom:7px;gap:12px}
  .logo img{height:30px}

  html.js .burger{
    display:grid;place-content:center;gap:5px;
    width:48px;height:48px;flex:0 0 auto;margin-right:-6px;
    background:transparent;border:0;padding:0;cursor:pointer;
  }
  html.js .burger span{
    display:block;width:24px;height:3px;border-radius:3px;background:var(--bleu);
    transition:transform .25s cubic-bezier(.22,.75,.3,1),opacity .18s;
  }
  html.js .burger[aria-expanded="true"] span:nth-child(1){transform:translateY(8px) rotate(45deg)}
  html.js .burger[aria-expanded="true"] span:nth-child(2){opacity:0}
  html.js .burger[aria-expanded="true"] span:nth-child(3){transform:translateY(-8px) rotate(-45deg)}

  html.js .nav nav{
    display:none;position:absolute;left:0;right:0;top:100%;
    flex-direction:column;align-items:stretch;gap:0;
    background:#fff;border-bottom:2px solid var(--trait);
    box-shadow:0 18px 34px rgba(33,37,46,.16);
  }
  html.js .nav nav.ouvert{display:flex;animation:am-monte .22s both cubic-bezier(.22,.75,.3,1)}
  /* Panneau déplié : son propre verre, un peu plus opaque que la barre
     pour que la liste reste parfaitement lisible. Possible uniquement
     parce que le flou de la barre vit sur son ::before — sinon Chrome
     laissait le texte de la page transparaître net (bug des descendants
     débordants d'un élément en backdrop-filter). */
  @supports ((-webkit-backdrop-filter:blur(1px)) or (backdrop-filter:blur(1px))){
    html.js .nav nav{
      /* verre en haut, blanc plein au bord bas : au bord, le noyau de
         flou est tronqué et laisse transparaître le texte quasi net —
         le dégradé rend le bord opaque, l'artefact disparaît */
      background:linear-gradient(180deg,rgba(255,255,255,.9),#fff 80%);
      -webkit-backdrop-filter:blur(14px) saturate(170%);
      backdrop-filter:blur(14px) saturate(170%);
    }
  }
  html.js .nav nav a{
    display:flex;align-items:center;min-height:54px;padding:15px 26px;
    font-size:18px;border-bottom:1px solid var(--trait);
  }
  html.js .nav nav a:last-child{border-bottom:0}
  html.js .nav nav a[aria-current]{background:var(--bleu-voile);color:var(--bleu)}
  html.js .nav nav a::after{display:none}   /* le trait de survol n'a pas de sens en liste */

  html:not(.js) .nav .wrap{flex-wrap:wrap;justify-content:center}
  html:not(.js) .nav nav{flex-wrap:wrap;justify-content:center;gap:14px}

  /* entête à un seul lien (page questions) : il reste à l'écran */
  html.js .nav-simple nav{
    display:flex;position:static;flex-direction:row;
    background:transparent;border:0;box-shadow:none;
  }
  html.js .nav-simple nav a{
    min-height:44px;padding:0;font-size:16px;border:0;background:transparent;
  }
}

/* ---------- boutons ---------- */
.btn{
  display:inline-flex;align-items:center;gap:10px;
  /* 18.7 px et pas 17.5 : en gras, la norme bascule à 3:1 dès 18.66 px.
     Le blanc sur l'orange d'Anouk (3,72:1) devient conforme sans que sa
     couleur bouge d'un cheveu. */
  font-weight:800;font-size:18.7px;padding:15px 30px;border-radius:40px;
  border:3px solid transparent;transition:.18s;cursor:pointer;font-family:inherit;
}
.btn-primary{background:var(--orange);color:#fff;box-shadow:0 6px 22px rgba(232,98,42,.32)}
.btn-primary:hover{background:#D2551F;transform:translateY(-2px);box-shadow:0 10px 28px rgba(232,98,42,.4)}
/* fond plein, pas transparent : sinon un coup de pinceau du hero passe
   au travers du bouton et le rend illisible sur téléphone. */
.btn-ghost{border-color:var(--bleu);color:var(--bleu);background:var(--papier)}
.btn-ghost:hover{background:var(--bleu);color:#fff}
.btns{display:flex;gap:14px;flex-wrap:wrap}

/* ---------- sections ---------- */
/* Tranches du scroll continu (ex-pages) : une ancre doit atterrir sous la
   nav, seule barre encore collante — hauteur mesurée par menu.js. */
.tranche{scroll-margin-top:var(--nav-h,64px)}
/* Même règle pour la seule ancre qui ne soit pas une tranche : le bloc de
   contact, visé depuis le bouton « Faites le premier pas » de l'accueil
   (15/08). Sans elle, la nav collante recouvrirait le titre « Me joindre ».
   Le reste de l'air vient du padding normal de la section (74 px, 52 en
   mobile) : l'ancre atterrit sous la nav, pas collée dessous. */
#me-joindre{scroll-margin-top:var(--nav-h,64px)}

section{position:relative;padding:74px 0}
section.tight{padding:52px 0}
section.creme{background:var(--creme)}
section.bleu{background:var(--bleu);color:#fff}
section.bleu h2,section.bleu h3{color:#fff}
section.bleu p{color:#D3DCF3}

/* Les surtitres manuscrits (« Les consultations », « Me joindre »,
   « Ou écrivez-moi »…) étaient trop petits — appel du 01/08. */
.kicker{
  display:inline-block;font-family:'Architects Daughter',cursive;
  font-size:clamp(23px,2.7vw,28px);font-weight:400;letter-spacing:.02em;
  line-height:1.25;color:var(--orange);margin-bottom:8px;
}
.lede{font-size:1.08em;color:var(--encre-2);max-width:70ch}
section.bleu .lede{color:#C7D3F0}

/* ---------- hero ---------- */
.hero{padding:62px 0 60px;overflow:hidden;position:relative}
.hero .wrap{position:relative;z-index:2;text-align:center}

/* le recto de la carte de visite, rejoué en tête de site.
   Le logo est l'image réelle de la carte, pas un lettrage refait. */
.logo-hero{
  display:block;margin:0 auto 6px;
  width:clamp(230px,32vw,340px);height:auto;
}
.hero .rule-carte{
  height:5px;width:min(420px,72%);margin:10px auto 22px;border-radius:5px;
  background:linear-gradient(90deg,transparent,var(--orange) 18%,#F7B25E 50%,var(--orange) 82%,transparent);
}
/* La citation ferme le hero au lieu de l'ouvrir (mail du 06/08) : elle
   passe SOUS les quatre questions, ses marges sont donc inversées. */
.hero .accroche{
  font-family:'Allura',cursive;font-size:clamp(32px,4.8vw,54px);
  color:var(--bleu);line-height:1.22;margin:38px auto 4px;max-width:26ch;
}
/* Les 4 questions (appel du 01/08) : plus de « ? » dans un rond gris.
   Une étoile jaune, nue, plus petite, qui arrive plus vite.

   Texte CENTRÉ → texte ALIGNÉ (02/08, demande de Le N). Les 4 phrases
   n'ont pas la même longueur : centrées, leurs étoiles partaient de 4
   abscisses différentes, écartées de 100 px — on lisait 4 étoiles en
   escalier, pas une liste. Chaque item est maintenant une grille de
   2 colonnes : l'étoile dans la première (largeur fixe), le texte dans
   la seconde. Les 4 étoiles tombent donc sur une seule verticale, et
   la 3e phrase, qui passe sur 2 lignes, revient sous son propre texte
   au lieu de repasser sous l'étoile. Le bloc, lui, reste centré. */
.hero .questions{max-width:540px;margin:34px auto 0;padding:0;text-align:left;display:grid;gap:11px}
.hero .questions li{
  list-style:none;font-size:.95em;line-height:1.55;color:var(--encre);
  display:grid;grid-template-columns:18px 1fr;gap:9px;align-items:start;
}
.hero .questions li::before{
  content:"";width:18px;height:18px;
  /* centrée sur la 1re ligne de texte, pas sur son sommet */
  margin-top:calc((1.55em - 18px) / 2);
}
/* La baseline est le <h1> de la page (voir index.html). Les trois lignes
   qui suivent annulent ce que la règle « h1,h2,h3,h4 » lui imposerait, pour
   qu'elle s'affiche exactement comme quand c'était un <p> : même marge
   basse, même interligne, même chasse. Aucun pixel ne bouge. */
.baseline{margin-top:16px;margin-bottom:18px;line-height:1.7;letter-spacing:normal}
.baseline .b1{font-family:'Allura',cursive;font-size:clamp(24px,3vw,34px);color:var(--bleu);display:block}
.baseline .b2{font-family:'Allura',cursive;font-size:clamp(24px,3vw,34px);color:var(--orange);display:block}

/* ---------- le claim, sans encadré (mail du 06/08) ----------
   Le bandeau bleu a disparu : « pas dans un encadré mais en gras ».
   Reste UNE ligne, centrée comme le bouton dans son ovale orange juste
   dessous, avec une flèche à part qui pointe vers ce bouton. */
.claim-nu{
  margin:6px 0 6px;
}
.claim-nu strong{
  display:inline-block;
  font-size:clamp(25px,3.5vw,37px);font-weight:800;letter-spacing:-.02em;
  line-height:1.18;color:var(--bleu);max-width:27ch;
  /* deux lignes de longueur égale plutôt qu'une longue et un moignon :
     sans ça, sa phrase se coupait en trois, « Retrouvez votre » puis
     « énergie » tout seul. */
  text-wrap:balance;
}
/* Ses deux exclamations n'en font plus qu'une : les deux couleurs de sa
   carte tiennent la coupure à la place du point d'exclamation perdu. */
.claim-nu strong span{color:var(--orange)}
/* Élément à part dans le même paragraphe (donc dans le même bloc animé
   au défilement) : bloc de largeur fixe centré par margin auto, pas
   par le flex qui décalait tout avant le 07/08. */
.fl-vers-cta{display:block;margin:6px auto 0}
.fl-vers-cta path{stroke-dasharray:1;animation:am-trace .58s both cubic-bezier(.3,.75,.35,1)}
.fl-vers-cta path:nth-child(2){animation-duration:.2s;animation-delay:.44s}
.reveal .fl-vers-cta path{animation-play-state:paused}
.reveal.vu .fl-vers-cta path{animation-play-state:running}

/* ---------- grilles / cartes ---------- */
.grid{display:grid;gap:20px}
.g2{grid-template-columns:repeat(2,1fr)}
.g3{grid-template-columns:repeat(3,1fr)}
.g4{grid-template-columns:repeat(4,1fr)}
@media(max-width:980px){.g4{grid-template-columns:repeat(2,1fr)}.g3{grid-template-columns:1fr}}
@media(max-width:700px){.g2,.g4{grid-template-columns:1fr}}

.card{
  background:#fff;border:2px solid var(--trait);border-radius:20px;padding:26px 28px;
  transition:.2s;
}
.card:hover{border-color:var(--bleu-clair);transform:translateY(-3px);box-shadow:0 12px 30px rgba(27,60,146,.09)}
.card h3{margin-bottom:10px}
.card p{color:var(--encre-2);font-size:.9em;margin:0}
.card .num{
  display:grid;place-items:center;width:44px;height:44px;border-radius:50%;
  background:var(--bleu);color:#fff;font-weight:900;font-size:19px;margin-bottom:16px;
}

/* ---------- les 4 rôles ---------- */
.roles{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-top:34px}
@media(max-width:900px){.roles{grid-template-columns:repeat(2,1fr)}}
@media(max-width:520px){.roles{grid-template-columns:1fr}}
.role{border:3px solid var(--c);border-radius:20px;padding:24px 22px;background:#fff;position:relative}
.role .tag{
  font-size:12.5px;font-weight:900;letter-spacing:.14em;text-transform:uppercase;
  color:#fff;background:var(--c);padding:4px 12px;border-radius:20px;display:inline-block;margin-bottom:14px;
}
.role p{margin:0;font-size:.87em;color:var(--encre-2);line-height:1.6}
.role svg{width:38px;height:38px;margin-bottom:10px;display:block}

/* ---------- étapes ---------- */
.etape{
  display:grid;grid-template-columns:78px 1fr;gap:24px;align-items:start;
  padding:30px 0;border-bottom:2px solid var(--trait);
}
.etape:last-child{border-bottom:0}
@media(max-width:640px){.etape{grid-template-columns:1fr;gap:12px}}
/* Les 4 bulles parcourent l'arc-en-ciel du logo, de gauche à droite
   (bleu → cyan → vert → jaune → orange → rouge → magenta), en dégradé
   qui respire lentement — appel du 01/08. */
@keyframes am-degrade{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
.etape .rond{
  width:66px;height:66px;border-radius:50%;display:grid;place-items:center;
  font-weight:700;font-size:26px;color:#fff;
  background:linear-gradient(125deg,var(--c1),var(--c2) 50%,var(--c1));
  background-size:230% 230%;
  animation:am-degrade 9s ease-in-out infinite;
  box-shadow:0 6px 18px color-mix(in srgb,var(--c1) 34%,transparent);
  --c1:#1D49A7;--c2:#2FA3D8;
}
.etape:nth-child(2) .rond{--c1:#2E9E6E;--c2:#8CC63F;animation-delay:-2.25s}
.etape:nth-child(3) .rond{--c1:#F2B705;--c2:#F26A2E;animation-delay:-4.5s}
.etape:nth-child(4) .rond{--c1:#E8352E;--c2:#D6336C;animation-delay:-6.75s}
/* même typo que les sous-titres (manuscrite), en plus petit — appel du 01/08 */
.etape h3{
  font-family:'Architects Daughter',cursive;font-weight:400;letter-spacing:0;
  font-size:clamp(25px,3.1vw,34px);margin-bottom:8px;
}
/* « La question centrale : » a disparu : c'est une flèche courbe qui
   annonce la question. Sa pointe arrive pile au milieu de la hauteur
   de la première ligne, sans la toucher. */
.etape .question{
  position:relative;padding-left:50px;
  /* 24 px et pas 23 : à partir de 24 px la norme de lisibilité passe de
     4,5:1 à 3:1, et l'orange d'Anouk (3,71:1 sur crème) devient conforme
     SANS toucher sa couleur. Un pixel plutôt qu'un orange assombri. */
  font-family:'Architects Daughter',cursive;font-size:24px;color:var(--orange);
  margin:0 0 14px;line-height:1.35;
}
.fl-courbe{position:absolute;left:0;top:calc(1.35em / 2);transform:translateY(-50%);overflow:visible}
.fl-courbe path{stroke-dasharray:1;animation:am-trace .58s both cubic-bezier(.3,.75,.35,1)}
.fl-courbe path:nth-child(2){animation-duration:.2s;animation-delay:.44s}
.fl-courbe path:nth-child(4){animation-duration:.2s;animation-delay:.62s}
.fl-courbe path:nth-child(3){animation-delay:.18s}
.reveal .fl-courbe path{animation-play-state:paused}
.reveal.vu .fl-courbe path{animation-play-state:running}
/* les amorces « Nous travaillerons sur : », « Nous surmonterons : »…
   — une seule taille pour les quatre (harmonisation du 01/08) */
.etape .amorce{color:var(--encre-2);font-size:.9em;margin:0 0 12px}
.etape ul{margin:0;padding:0;list-style:none;display:flex;flex-wrap:wrap;gap:8px}
/* Dans SON dossier ces items sont écrits avec des tirets (« - Votre
   identité », « - Vos peurs »). Sa consigne du 01/08 — « tous les tirets
   et toutes les puces du site deviennent UNE MÊME étoile » — s'applique
   donc ici aussi : la pastille garde sa forme, le tiret redevient l'étoile. */
.etape ul li{
  background:var(--bleu-voile);color:var(--bleu);font-weight:700;font-size:15.5px;
  padding:6px 15px 6px 12px;border-radius:20px;
  display:inline-flex;align-items:center;gap:7px;
}
.etape ul li::before{content:"";width:14px;height:14px;flex:none}

/* ---------- auto-test ---------- */
.test{background:#fff;border:3px solid var(--bleu);border-radius:24px;padding:34px 32px;max-width:760px;margin:0 auto}
.test h3{text-align:center;margin-bottom:6px}
.test .sub{text-align:center;color:var(--encre-2);margin-bottom:22px}
.test label{
  display:flex;gap:14px;align-items:flex-start;cursor:pointer;
  padding:14px 16px;border:2px solid var(--trait);border-radius:14px;margin-bottom:10px;
  font-size:.92em;transition:.16s;
}
.test label:hover{border-color:var(--bleu-clair);background:var(--bleu-voile)}
.test input{
  appearance:none;width:24px;height:24px;min-width:24px;margin-top:2px;
  border:2.5px solid var(--gris-clair);border-radius:7px;cursor:pointer;transition:.16s;
}
.test input:checked{background:var(--vert);border-color:var(--vert)}
.test input:checked::after{content:"✓";color:#fff;font-weight:900;display:grid;place-items:center;height:100%;font-size:15px}
.test label:has(input:checked){border-color:var(--vert);background:#EDFAF3}
.test .resultat{
  margin-top:20px;padding:24px;border-radius:16px;background:var(--orange-voile);
  border:2px solid var(--orange);text-align:center;
  display:none;
}
.test .resultat.on{display:block;animation:pop .35s ease}
@keyframes pop{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
.test .resultat p{color:var(--encre);font-weight:700;font-size:1em}

/* ---------- modalités ---------- */
.modes{display:grid;grid-template-columns:repeat(4,1fr);gap:18px}
@media(max-width:900px){.modes{grid-template-columns:repeat(2,1fr)}}
@media(max-width:520px){.modes{grid-template-columns:1fr}}
.mode{text-align:center;padding:28px 20px;border:2px solid var(--trait);border-radius:20px;background:#fff}
/* la couleur de chaque carte = celle de son pictogramme (survol) */
.mode:nth-child(1){--c:var(--bleu)}
.mode:nth-child(2){--c:var(--orange)}
.mode:nth-child(3){--c:var(--vert)}
.mode:nth-child(4){--c:var(--magenta)}
.mode svg{width:46px;height:46px;margin:0 auto 14px;display:block}
.mode b{display:block;font-size:.97em;color:var(--bleu);margin-bottom:4px;transition:color .25s}
.mode span{font-size:.82em;color:var(--encre-2)}

/* ---------- citations ---------- */
.citation{
  text-align:center;max-width:800px;margin:0 auto;
  font-family:'Allura',cursive;font-size:clamp(27px,3.8vw,42px);
  line-height:1.4;color:var(--bleu);
}
.citation.orange{color:var(--orange)}
section.bleu .citation{color:#fff}

/* « le mettre en gras et en plus grand » — ses deux citations bleues
   (mail du 11/08). Allura n'existe qu'en une seule graisse : demander
   font-weight:700 ne charge aucun fichier, le navigateur FABRIQUE un
   faux gras en dédoublant le glyphe — sur un script fin, les boucles
   se bouchent et les déliés bavent. On épaissit donc le TRAIT lui-même
   (-webkit-text-stroke, repris par tous les navigateurs depuis 2021) :
   la lettre garde exactement son dessin, elle prend juste du corps.
   paint-order:stroke fill pose le trait SOUS le remplissage, sinon
   l'épaississement mange l'intérieur des lettres. */
.citation.forte{
  font-size:clamp(33px,5.1vw,58px);
  -webkit-text-stroke:.8px currentColor;
  paint-order:stroke fill;
  /* Agrandie, elle ne tenait plus dans les 800 px de .citation : le
     dernier mot partait seul sur une 3e ligne, sous un <br> qui en
     annonçait deux. La boîte suit la taille du texte. */
  max-width:1040px;
}
/* Le mot « avec » de sa citation. Souligné depuis le 11/08 ; le
   soulignement est décalé vers le bas, sans ça il traverse les jambages
   du script.
   🆕 12/08 — il était en MAJUSCULES, elle l'a repris : « la typologie ne
   donne pas super en majuscule alors peut-être mieux en minuscule gras ».
   Retour aux minuscules, et le « gras » se fait comme pour la citation
   entière : on épaissit le TRAIT (Allura n'a pas de graisse, un
   font-weight:700 ferait fabriquer un faux gras qui bouche les boucles).
   1,5px contre 0,8px pour le reste de la phrase : le mot pèse plus
   lourd, mais il reste de la même écriture. */
.citation .avec{
  font-weight:inherit;
  -webkit-text-stroke:1.5px currentColor;
  text-decoration:underline;
  text-decoration-thickness:2px;
  text-underline-offset:.08em;
}

/* ---------- listes texte ---------- */
.prose{max-width:74ch}
.prose p{font-size:.97em;color:var(--encre)}
.prose .fort{font-size:1.1em;font-weight:700;color:var(--bleu)}
/* Le « NON » qui répond à ses deux questions (mail du 11/08 : « mettre
   en-dessous en Maj: NON »). Seul sur sa ligne, à la taille du texte
   courant, il se lisait comme un mot oublié entre deux paragraphes.
   Il prend donc la couleur d'accent et du corps : c'est une réponse
   qui tranche, elle doit s'entendre.
   ⚠ Il a d'abord été composé dans Architects Daughter, la police des
   titres — mauvais choix, corrigé le 11/08 : cette écriture manuscrite
   dessine son O nettement plus petit et plus bas que ses N, si bien que
   le mot se lisait « NoN ». Passe encore dans « FAQ » ou « AM-BOOST »,
   qu'on reconnaît d'un bloc ; pas dans un mot de trois lettres dont
   toute la force est d'être asséné. Il prend donc Quicksand en gras,
   qui aligne les trois capitales — et c'est déjà la police de ses
   majuscules du paragraphe juste en dessous (UNIQUE, RESSOURCES,
   REGARD EXTERIEUR, DEBLOQUER) : le bloc devient cohérent.
   🆕 12/08 — Anouk : « Le NON le mettre comme ça mais = Non (en
   minuscule) ». Le mot garde donc son corps et son orange, il perd
   seulement ses capitales. L'interlettrage de +.04em partait avec :
   il aérait des majuscules, il déchirait un mot en minuscules.
   🆕 14/08 — Le N tranche que « en minuscule » voulait bien dire TOUT
   en minuscules : « Non » devient « non ». Corps, orange et place
   inchangés ; seule la capitale saute. */
.prose p.non-tranche{
  margin:20px 0 18px;font-weight:700;
  font-size:1.75em;line-height:1;color:var(--orange);
  /* 14/08 — décalé vers la droite (Le N) : le mot n'est plus dans l'axe
     du paragraphe, il est le point d'arrivée de la flèche. Le retrait
     laisse la place au coude ; le mot reste court, il ne se coupe pas. */
  position:relative;padding-left:54px;
}
/* La flèche qui descend de sous le « o » de « Sommes » et coude vers le
   « non ». Elle est posée en absolu pour ne rien pousser dans le fil du
   texte : le paragraphe garde sa place, même si la flèche disparaît.
   Les trois nombres ci-dessous sont mesurés, pas estimés — et ils vont
   ensemble, changer la taille les décale tous :
     · 44 px (dessin de 60) → le trait fait 0,73 de son gabarit ;
     · left:9px  → le montant tombe à 16,7 px du bord du paragraphe,
       soit l'aplomb du « o » de « Sommes » (mesuré au Range, identique
       à 3 px près sur téléphone : un seul réglage suffit) ;
     · top:-13px → la pointe arrive au milieu de la hauteur des lettres
       minuscules, et le haut du trait démarre dans la marge, sous les
       jambages de « capables », jamais dedans. */
.fl-non{position:absolute;left:9px;top:-13px;overflow:visible}
.fl-non path{stroke-dasharray:1;animation:am-trace .5s both cubic-bezier(.3,.75,.35,1)}
.fl-non path:nth-child(2){animation-duration:.18s;animation-delay:.42s}
/* Les 2 questions qui préparent le « Non » : elles restent bleues (c'est
   la voix d'appui du paragraphe) mais passent en italique gras — on doit
   entendre qu'elles sont POSÉES, pas affirmées. Demande du 11/08. */
.prose p.non-avant{color:var(--encre-2);font-style:italic;font-weight:700}
/* Et la phrase qui suit le « Non » : c'est celle qui résume son métier
   (« Parce qu'à deux c'est plus facile »). En orange gras, elle sort du
   paragraphe. <b> plutôt qu'un <span> : c'est bien une emphase forte,
   les lecteurs d'écran doivent l'entendre aussi. Demande du 11/08. */
.prose .non-apres{color:var(--orange);font-weight:700}
.liste-nue{margin:0 0 20px;padding:0;list-style:none}
.liste-nue li{
  padding:9px 0 9px 32px;position:relative;font-size:.97em;border-bottom:1px solid var(--trait);
}
.liste-nue li:last-child{border-bottom:0}
.liste-nue li::before{
  content:"";position:absolute;left:1px;top:16px;width:17px;height:17px;
}
/* Variante pour les énumérations courtes arrivées le 06/08 (« ne plus
   douter », « une transition de vie »…) : mêmes étoiles, mais sans les
   filets de séparation — sur des bouts de 3 mots ils dessinaient un
   tableau. Lignes resserrées, étoile recalée sur la première ligne. */
.liste-nue.serree li{border-bottom:0;padding:5px 0 5px 30px}
.liste-nue.serree li::before{top:10px}
.deux-listes .liste-nue{margin-bottom:26px}

.situations{display:flex;flex-wrap:wrap;gap:11px;margin-top:14px;justify-content:center}
.situations span{
  display:inline-flex;align-items:center;gap:9px;
  background:#fff;border:2px solid var(--bleu);color:var(--bleu);font-weight:700;
  padding:9px 20px;border-radius:30px;font-size:17px;
}
.situations span::before{content:"";width:16px;height:16px;flex:none}
/* « Je ne cherche pas à… » : ce sont les deux phrases en creux,
   leur étoile reste en retrait pour ne pas les mettre en avant. */
.liste-nue.sourdine li::before{filter:grayscale(1);opacity:.42}

/* ═══ L'ÉTOILE — le motif unique du site (appel du 01/08) ═══
   Elle remplace tous les tirets et toutes les puces. Elle scintille
   UNE fois quand son bloc arrive à l'écran, puis ne bouge plus jamais :
   un pictogramme, pas un gyrophare. */
@keyframes am-scintille{
  0%  {opacity:0;  transform:scale(.15) rotate(-80deg)}
  55% {opacity:1;  transform:scale(1.32) rotate(10deg)}
  76% {opacity:1;  transform:scale(.93)  rotate(-2deg)}
  100%{opacity:1;  transform:scale(1)    rotate(0deg)}
}
.hero .questions li::before,
.liste-nue li::before,
.etape ul li::before,
.situations span::before{
  background:var(--etoile) center/contain no-repeat;
  transform-origin:center;
  animation:am-scintille .62s both cubic-bezier(.3,1.15,.4,1);
}
/* tant que le bloc est sous l'écran, l'étoile attend son tour */
.reveal li::before,.reveal span::before,
li.reveal::before,span.reveal::before{animation-play-state:paused}
.reveal.vu li::before,.reveal.vu span::before,
li.reveal.vu::before,span.reveal.vu::before{animation-play-state:running}

/* ---------- le dessin d'Anouk (accueil) ----------
   Repris TEL QUEL (sa demande du 30/07). En pleine largeur sur grand
   écran ; sur téléphone, le paysage serait illisible → trois volets
   verticaux découpés dans la même image, rien n'est redessiné.
   🆕 14/08 : un 4ᵉ volet ferme la série — la phrase de fin, reprise
   d'un seul tenant (voir tools/volet-phrase.py). */
.dessin-anouk{margin:0}
.dessin-anouk img{width:100%;border-radius:18px}
.dessin-volets{display:none}
@media(max-width:700px){
  .dessin-anouk .dessin-large{display:none}
  .dessin-volets{display:grid;gap:16px}
}
/* Le dessin a quitté l'accueil : il ouvre « Qui suis-je », plus large
   que le reste du site pour être vraiment en évidence (appel du 01/08). */
.wrap.large{max-width:1260px}

/* ---------- « Qui suis-je » : la photo en haut à gauche ---------- */
.entete-anouk{
  display:grid;grid-template-columns:minmax(190px,300px) 1fr;
  gap:38px;align-items:center;text-align:left;
}
.entete-anouk .portrait{
  width:100%;border-radius:24px;
  box-shadow:0 20px 44px rgba(33,48,110,.20);
}
/* le bloc se rétrécit sur le nom : le trait dessous fait sa largeur exacte */
.entete-anouk .nom-bloc{width:fit-content;max-width:100%}
.entete-anouk .brush-rule{width:100%;margin:0 0 16px}
@media(max-width:760px){
  .entete-anouk{grid-template-columns:1fr;gap:22px;text-align:center;max-width:340px;margin:0 auto}
  .entete-anouk .nom-bloc{margin:0 auto}
  .entete-anouk .brush-rule{margin:0 auto 14px}
}

/* ---------- « ou » : le pivot entre les deux accompagnements ---------- */
.ou{display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:22px}
.ou::before,.ou::after{content:"";height:2px;border-radius:2px;background:var(--trait)}
.ou span{font-family:'Architects Daughter',cursive;font-size:32px;color:var(--orange);line-height:1}

/* ---------- « au service de la personne » ----------
   Elle portait une double flèche dessinée ; retirée le 02/08 (demande
   de Le N). La phrase se tient seule, un cran plus grande que le corps
   de texte — c'est la conclusion du bloc « Mon approche ». */
.outils{margin:0;font-size:1.05em;line-height:1.6}

/* ---------- FAQ ---------- */
.faq details{
  border:2px solid var(--trait);border-radius:16px;padding:18px 24px;margin-bottom:12px;background:#fff;
  transition:border-color .25s;
}
.faq details[open]{border-color:var(--bleu-clair)}
.faq summary{
  cursor:pointer;font-weight:800;font-size:1em;color:var(--bleu);list-style:none;
  display:flex;justify-content:space-between;gap:16px;align-items:center;
}
.faq summary::-webkit-details-marker{display:none}
/* le « + » pivote pour devenir une croix : même glyphe, donc le mouvement se voit */
.faq summary::after{
  content:"+";color:var(--orange);font-size:28px;font-weight:400;line-height:1;
  transition:transform .28s cubic-bezier(.3,.8,.35,1);
}
.faq details[open] summary::after{content:"+";transform:rotate(45deg)}
.faq details p{margin:14px 0 0;color:var(--encre-2);font-size:.92em}

/* ---------- contact ----------
   La colonne de gauche est une colonne flex dont l'encadré prend tout le
   reste de la hauteur : il descend donc exactement jusqu'à la base du
   bouton « Envoyer » d'en face. Le contenu, lui, est centré dedans —
   étiré aux quatre coins il aurait paru vide, centré il paraît posé. */
.col-contact{display:flex;flex-direction:column}
.col-contact .contact-box{flex:1;align-content:center;gap:20px}
.contact-box{
  background:#fff;border:3px solid var(--orange);border-radius:24px;
  padding:34px;display:grid;gap:14px;max-width:520px;
}
.contact-box .rappel{margin:6px 0 0;font-size:.9em;color:var(--encre-2)}
/* min-height : appeler ou écrire depuis un téléphone, c'est L'action
   de cette page — la cible doit être franche. */
.contact-box a{display:flex;gap:14px;align-items:center;min-height:48px;font-size:20px;font-weight:800;color:var(--bleu)}
.contact-box a:hover{color:var(--orange)}
.contact-box svg{width:26px;height:26px;flex:none}

form.contact{display:grid;gap:16px;max-width:520px}
form.contact label{font-weight:800;font-size:16px;color:var(--bleu);display:block;margin-bottom:6px}
form.contact input,form.contact textarea{
  width:100%;font-family:inherit;font-size:.9em;padding:13px 16px;
  border:2px solid var(--trait);border-radius:13px;background:#fff;color:var(--encre);
}
/* Au clavier, on doit VOIR où on est : un simple changement de bordure
   ne suffit pas (il se confond avec le survol). Anneau bleu franc. */
form.contact input:focus-visible,form.contact textarea:focus-visible{
  outline:3px solid var(--bleu);outline-offset:2px;border-color:var(--bleu);
}
form.contact input:focus,form.contact textarea:focus{border-color:var(--bleu)}
/* même règle pour tout ce qui se navigue au clavier */
a:focus-visible,button:focus-visible,summary:focus-visible,label:focus-visible{
  outline:3px solid var(--bleu);outline-offset:3px;border-radius:6px;
}
/* sur fond noir, le liseré bleu ne se voit pas : il passe au blanc */
footer.site a:focus-visible{outline-color:#fff}
form.contact textarea{min-height:110px;resize:vertical}

/* ---------- footer ---------- */
footer.site{background:var(--noir);color:#B8BEC9;padding:56px 0 34px;margin-top:0}
footer.site .wrap{display:grid;grid-template-columns:1.4fr 1fr 1fr;gap:36px}
@media(max-width:820px){footer.site .wrap{grid-template-columns:1fr;gap:26px}}
/* h3 depuis le 02/08 (les niveaux de titre ne sautent plus) — le rendu
   ne bouge pas d'un pixel, la taille est forcée ici. */
footer.site :is(h3,h4){color:#fff;font-size:15px;letter-spacing:.1em;text-transform:uppercase;margin-bottom:14px;font-weight:700}
/* padding généreux : au doigt, un lien de 35 px de haut se rate. 11 px
   de part et d'autre amènent la cible à 49 px. */
footer.site a{color:#B8BEC9;display:block;padding:11px 0;font-size:16px}
footer.site a:hover{color:var(--orange-clair)}
footer.site .bas{
  border-top:1px solid #3A3F4A;margin-top:34px;padding-top:22px;
  font-size:15px;color:#7C8494;text-align:center;
}
footer.site .sig{font-family:'Allura',cursive;font-size:26px;color:#fff;margin-bottom:10px;display:block}


/* ===========================================================
   ANIMATIONS — v3
   ===========================================================
   Règle : une animation doit DIRE quelque chose, sinon elle dégage.
   Le propos de la carte de visite, c'est le mouvement
   (« Comprendre ouvre des perspectives · Agir trace le chemin »).
   Donc trois gestes, et rien d'autre :
     1. ça se PEINT     — les pinceaux se posent comme sur la carte
     2. ça se DIT DANS L'ORDRE — comprendre d'abord, agir ensuite
     3. ça se TRACE     — le trajet en 4 étapes se dessine au défilement

   Rien ne boucle, rien ne clignote, rien ne rebondit deux fois.
   Tout est coupé si le visiteur a demandé « moins d'animations » (voir tout en bas).
   =========================================================== */

@keyframes am-monte    {from{opacity:0;transform:translateY(18px)} to{opacity:1;transform:none}}
@keyframes am-trait    {from{opacity:0;transform:scaleX(0)}        to{opacity:1;transform:scaleX(1)}}
/* Le geste des deux coins descend : sur la carte, la brosse part du haut
   et file vers le bas. On dévoile donc de haut en bas, plus de gauche à
   droite comme quand les coins étaient des arcs à 45°. */
/* Les marges négatives d'arrivée : le voile de couleur de la variante
   « Souffle » déborde volontairement du pinceau, et un clip-path à
   inset(0 0 0 0) le rognerait au ras du cadre.

   03/08 — « backwards » plutôt que « both ». L'état d'arrivée ne rogne
   rien du tout : c'est un cadre plus grand que le voile lui-même. Mais
   avec « both » il restait collé aux deux pinceaux du haut de page POUR
   TOUJOURS, et un navigateur qui voit une découpe la réapplique à chaque
   fois qu'il repeint la zone — pendant tout le reste de la visite. En
   « backwards », le geste démarre exactement pareil et, une fois joué,
   l'élément redevient un rectangle ordinaire. Même animation à l'œil,
   un calcul de moins à chaque défilement. */
@keyframes am-pinceau-g{from{clip-path:inset(-60% -300% 100% -60%)} to{clip-path:inset(-60% -300% -330% -60%)}}
@keyframes am-pinceau-d{from{clip-path:inset(-330% -60% 100% -300%)} to{clip-path:inset(-330% -60% -60% -300%)}}
@keyframes am-coche    {from{opacity:0;transform:scale(0)}         to{opacity:1;transform:scale(1)}}
@keyframes am-ecrit    {from{-webkit-mask-position:100% 0;mask-position:100% 0}
                        to  {-webkit-mask-position:0 0;   mask-position:0 0}}

/* ---------- 1. le coup de pinceau se peint ----------
   Il part du bord et file vers l'intérieur, dans le sens du geste. */
.hero .brush-tl{animation:am-pinceau-g 1.6s .05s backwards cubic-bezier(.25,.75,.3,1)}
.hero .brush-br{animation:am-pinceau-d 1.6s .25s backwards cubic-bezier(.25,.75,.3,1)}

/* ---------- 2. le haut de page arrive dans l'ordre de lecture ----------
   Base commune à toutes les pages : chaque bloc du hero se pose à la suite. */
.hero > .wrap > *{animation:am-monte .7s both cubic-bezier(.22,.75,.3,1)}
.hero > .wrap > *:nth-child(1){animation-delay:.06s}
.hero > .wrap > *:nth-child(2){animation-delay:.22s}
.hero > .wrap > *:nth-child(3){animation-delay:.38s}
.hero > .wrap > *:nth-child(4){animation-delay:.54s}
.hero > .wrap > *:nth-child(5){animation-delay:.70s}
.hero > .wrap > *:nth-child(6){animation-delay:.86s}
.hero > .wrap > .brush-rule{animation:am-trait .85s .30s both cubic-bezier(.22,.75,.3,1)}

/* Accueil : la carte de visite se rejoue. Le logo, puis la promesse
   en DEUX temps — « Comprendre… » d'abord, « Agir… » ensuite — puis l'appel. */
.hero > .wrap > .logo-hero {animation-delay:.05s}
.hero > .wrap > .baseline  {animation:none}
/* Le sous-titre s'écrit (30/07, demande Le N) : un voile révèle chaque
   ligne de gauche à droite, comme un mot tracé à la main. Une fois, au
   chargement — rien ne boucle. Navigateur sans mask : texte simplement
   visible, rien de masqué. */
.hero .baseline .b1,
.hero .baseline .b2{
  -webkit-mask-image:linear-gradient(100deg,#000 46%,rgba(0,0,0,0) 54%);
  mask-image:linear-gradient(100deg,#000 46%,rgba(0,0,0,0) 54%);
  -webkit-mask-size:250% 100%;mask-size:250% 100%;
  -webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;
  animation:am-ecrit .85s .30s both ease-in-out;
}
.hero .baseline .b2{animation-delay:.80s}
.hero > .wrap > .rule-carte{animation:am-trait .85s .78s both cubic-bezier(.22,.75,.3,1)}
.hero > .wrap > .accroche  {animation-delay:.95s}
/* Les 4 questions arrivent plus vite qu'avant (appel du 01/08),
   et chaque étoile scintille juste après sa ligne. */
.hero > .wrap > .questions {animation:none}
.hero .questions li        {animation:am-monte .42s both cubic-bezier(.22,.75,.3,1)}
.hero .questions li:nth-child(1){animation-delay:1.00s}
.hero .questions li:nth-child(2){animation-delay:1.07s}
.hero .questions li:nth-child(3){animation-delay:1.14s}
.hero .questions li:nth-child(4){animation-delay:1.21s}
.hero .questions li:nth-child(1)::before{animation-delay:1.10s}
.hero .questions li:nth-child(2)::before{animation-delay:1.17s}
.hero .questions li:nth-child(3)::before{animation-delay:1.24s}
.hero .questions li:nth-child(4)::before{animation-delay:1.31s}

/* ---------- 3. apparition des blocs au défilement ----------
   Posé par assets/anim.js, qui ne masque que ce qui est sous l'écran. */
.reveal{opacity:0;transform:translateY(18px)}
.reveal.vu{
  opacity:1;transform:none;
  transition:opacity .6s cubic-bezier(.22,.75,.3,1),transform .6s cubic-bezier(.22,.75,.3,1);
  transition-delay:var(--d,0s);
}

/* ---------- 4. le trajet en 4 étapes se trace ----------
   Le fil relie une étape à la suivante et prend la couleur des deux ronds.
   Il ne se dessine que quand l'étape est atteinte : le chemin se fait en marchant. */
.etape{position:relative}
.etape::before{
  content:"";position:absolute;left:31px;top:102px;bottom:-32px;width:4px;border-radius:4px;
  background:linear-gradient(180deg,#2FA3D8,#2E9E6E);
  transform:scaleY(1);transform-origin:top center;
}
.etape:nth-child(2)::before{background:linear-gradient(180deg,#8CC63F,#F2B705)}
.etape:nth-child(3)::before{background:linear-gradient(180deg,#F26A2E,#E8352E)}
.etape:last-child::before{display:none}
.etape.reveal::before{transform:scaleY(0)}
.etape.reveal.vu::before{transform:scaleY(1);transition:transform .9s cubic-bezier(.3,.7,.3,1) .18s}
/* le numéro se pose avant que le fil ne reparte */
.etape .rond{transform-origin:center}
.etape.reveal .rond{transform:scale(.55);opacity:.35}
.etape.reveal.vu .rond{
  transform:scale(1);opacity:1;
  transition:transform .6s cubic-bezier(.2,1.5,.4,1) .05s,opacity .4s .05s;
}
@media(max-width:640px){.etape::before{display:none}}

/* ---------- 5. le trait de pinceau sous la navigation ----------
   Il se peint de gauche à droite au survol, comme les coins de la carte. */
.nav nav a{position:relative;padding-bottom:5px}
.nav nav a::after{
  content:"";position:absolute;left:0;right:0;bottom:0;height:3px;border-radius:3px;
  background:linear-gradient(90deg,var(--orange),var(--magenta));
  transform:scaleX(0);transform-origin:left center;
  transition:transform .3s cubic-bezier(.22,.75,.3,1);
}
.nav nav a:hover::after{transform:scaleX(1)}
/* sans JavaScript, pas de trait glisseur : l'onglet actif garde son trait fixe */
html:not(.js) .nav nav a[aria-current]::after{transform:scaleX(1)}

/* Le trait qui glisse (30/07, demande Le N) : UN seul trait pinceau pour
   la tranche active, déplacé par le scroll-spy de menu.js. La classe
   « pret » n'arrive qu'après le premier placement : pas de glissade
   fantôme depuis le bord gauche au chargement. */
html.js .nav nav .glisseur{
  position:absolute;height:3px;border-radius:3px;pointer-events:none;
  background:linear-gradient(90deg,var(--orange),var(--magenta));
}
html.js .nav nav .glisseur.pret{
  transition:left .45s cubic-bezier(.22,.75,.3,1),width .45s cubic-bezier(.22,.75,.3,1);
}
@media(max-width:880px){
  /* en liste verticale (menu replié), le trait n'a pas de sens */
  html.js .nav nav .glisseur{display:none}
}
.logo img{transition:transform .3s cubic-bezier(.22,.75,.3,1)}
.logo:hover img{transform:translateY(-2px)}

/* ---------- 6. réactions au survol ---------- */
.role,.mode{transition:transform .22s cubic-bezier(.22,.75,.3,1),box-shadow .22s,border-color .22s}
.role:hover{transform:translateY(-4px);box-shadow:0 14px 30px rgba(33,37,46,.10)}
.mode:hover{transform:translateY(-4px);border-color:var(--bleu-clair);box-shadow:0 14px 30px rgba(27,60,146,.10);
  /* navigateurs récents : bord + ombre teintés à la couleur du picto */
  border-color:color-mix(in srgb,var(--c) 50%,#fff);
  box-shadow:0 14px 30px color-mix(in srgb,var(--c) 16%,transparent)}
.mode:hover b{color:var(--c)}
/* le pictogramme se redessine trait par trait au survol
   (pathLength="1" dans le SVG : dasharray 1 = le trait entier) */
@keyframes am-trace{from{stroke-dashoffset:1}to{stroke-dashoffset:0}}
.mode svg > *{stroke-dasharray:1}
.mode:hover svg > :nth-child(1){animation:am-trace .5s ease both}
.mode:hover svg > :nth-child(2){animation:am-trace .5s ease .15s both}
.mode:hover svg > :nth-child(3){animation:am-trace .5s ease .3s both}
.mode:hover svg > :nth-child(4){animation:am-trace .5s ease .45s both}
.mode:hover svg > :nth-child(5){animation:am-trace .5s ease .6s both}
.mode:hover svg > :nth-child(6){animation:am-trace .5s ease .75s both}
.situations span{transition:transform .2s cubic-bezier(.22,.75,.3,1)}
.situations span:hover{transform:translateY(-2px)}

/* ---------- 7. l'auto-test : la coche se pose ---------- */
.test input:checked::after{animation:am-coche .3s cubic-bezier(.2,1.5,.4,1) both}
.faq details[open] p{animation:am-monte .35s both cubic-bezier(.22,.75,.3,1)}

/* ---------- 8. respect du réglage système ----------
   « Réduire les animations » (macOS / iOS / Windows) : tout s'arrête,
   et rien ne reste masqué. */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{
    animation-duration:.001ms!important;animation-delay:0s!important;
    transition-duration:.001ms!important;transition-delay:0s!important;
  }
  .reveal{opacity:1!important;transform:none!important}
  .etape::before{transform:scaleY(1)!important}
  .etape .rond{transform:none!important;opacity:1!important}
  html{scroll-behavior:auto}
}


/* ===========================================================
   TÉLÉPHONE — v1, écrit après mesure (banc Chrome, écrans réels
   320 / 375 / 390 / 430 / 768 / 1440 px).

   Le site est consulté majoritairement au téléphone. Trois principes :
     1. RIEN sous 44 px au doigt — c'est le minimum Apple ;
     2. l'écran est petit : on retire du vide, pas du contenu ;
     3. le pouce tape en bas de l'écran : les boutons y sont pleine largeur.
   =========================================================== */

/* ---------- 1. cibles tactiles ---------- */
@media(max-width:880px){
  /* bandeau noir : ne subsiste que sur questions.html, lue par Anouk
     sur son téléphone — donc un texte un peu plus grand. */
  #brouillon{font-size:15px;padding:11px 18px;gap:12px}
}

/* ---------- 2. respiration : moins de marges perdues ---------- */
@media(max-width:560px){
  section{padding:52px 0}
  section.tight{padding:38px 0}
  .wrap{padding:0 20px}

  .claim-nu strong{max-width:none}
  .card{padding:20px 18px;border-radius:16px}
  .test{padding:22px 16px;border-radius:18px}
  .contact-box{padding:24px 20px;border-radius:18px}
  .faq details{padding:16px 18px}
  .role{padding:18px 20px}
}
@media(max-width:400px){.wrap{padding:0 16px}}

/* ---------- 3. le pouce : les boutons prennent toute la largeur ---------- */
@media(max-width:520px){
  .btns{flex-direction:column;align-items:stretch;gap:12px}
  .btn{width:100%;justify-content:center;padding:16px 22px}
}

/* ---------- 4. grilles : 4 modalités = 2×2, pas 4 blocs empilés ----------
   Empilées, les 4 cartes faisaient 760 px de défilement pour quatre mots. */
@media(max-width:520px){
  .modes{grid-template-columns:repeat(2,1fr);gap:12px}
  .mode{padding:18px 10px}
  .mode svg{width:36px;height:36px;margin-bottom:10px}
  .mode b{font-size:.84em;line-height:1.3}
  .mode span{font-size:.76em;line-height:1.45}
  .roles{gap:12px}
  .grid{gap:14px}
}
@media(max-width:340px){.modes{grid-template-columns:1fr}}

/* ---------- 5. les pinceaux cadrent, ils n'envahissent pas ----------
   Sur téléphone le clamp les tient déjà à 104-122 px : le seul réglage
   qui reste utile est de les alléger pour que le texte passe devant. */
@media(max-width:560px){
  .brush-corner{opacity:.82}
}

/* ---------- 6. hero : le message arrive plus vite ----------
   Mesuré : la première phrase était à 728 px du haut, soit presque
   un écran entier de logo avant de comprendre de quoi il s'agit. */
@media(max-width:560px){
  .hero{padding:34px 0 44px}
  .logo-hero{width:min(200px,58vw)}
  .hero .accroche{margin:28px auto 24px;line-height:1.28}
  .hero .questions{gap:9px}
  .hero .questions li{font-size:.92em;grid-template-columns:16px 1fr;gap:7px}
  .hero .questions li::before{width:16px;height:16px;margin-top:calc((1.55em - 16px) / 2)}
  .baseline{margin-top:12px}
}

/* ---------- 7. étapes : le numéro ne mange pas la ligne ---------- */
@media(max-width:560px){
  .etape{padding:24px 0}
  .etape .rond{width:52px;height:52px;font-size:21px}
  .etape .question{font-size:20px}
  .etape ul li{font-size:14.8px;padding:6px 13px}
}

/* ---------- 8. étiquettes de situations ---------- */
@media(max-width:560px){
  .situations{gap:9px}
  .situations span{font-size:15.5px;padding:8px 15px}
  .lede{font-size:.97em}
  .prose p{font-size:.92em}
  .liste-nue li{font-size:.92em}
  .citation{line-height:1.35}
}

/* ══════════════════════════════════════════════════════════════════════
   9. iPHONE — LA COUCHE TACTILE                        (audit du 02/08)
   ══════════════════════════════════════════════════════════════════════
   Tout ce qui suit corrige des défauts qui ne se voient sur AUCUNE
   capture d'écran : ils ne se sentent qu'avec un doigt, sur un vrai
   téléphone. Mesurés un par un dans un iPhone simulé avant d'écrire
   une seule ligne. */

/* ---------- 9.1 le survol qui reste collé ----------
   Mesuré : 22 règles :hover, dont 7 qui déplacent l'élément, et AUCUNE
   règle :active. Sur iOS un doigt qui touche une carte déclenche le
   survol — et il RESTE collé jusqu'au prochain appui ailleurs : la carte
   reste soulevée, le picto reste redessiné, l'ombre reste posée.
   On ne réécrit pas les 22 règles (le survol à la souris est très bien) :
   on les neutralise là où il n'y a pas de souris, et on rend l'appui
   lui-même — un enfoncement court, qui repart quand le doigt repart. */
@media (hover:none){
  /* le survol ne peut plus rester accroché */
  .btn-primary:hover{background:var(--orange);transform:none;box-shadow:0 6px 22px rgba(232,98,42,.32)}
  .btn-ghost:hover{background:var(--papier);color:var(--bleu)}
  .card:hover{transform:none;box-shadow:none;border-color:var(--trait)}
  .role:hover,.situations span:hover{transform:none;box-shadow:none}
  .logo:hover img{transform:none}
  .mode:hover{transform:none;box-shadow:none;border-color:var(--trait)}
  .mode:hover b{color:inherit}
  .mode:hover svg > *{animation:none}
  .test label:hover{border-color:var(--trait);background:transparent}
  .nav nav a:hover::after{transform:scaleX(0)}
  .contact-box a:hover,footer.site a:hover{color:inherit}

  /* …et c'est l'APPUI qui répond, à la milliseconde où le doigt touche */
  .btn:active{transform:scale(.97)}
  .card:active,.role:active,.mode:active,.test label:active{
    transform:scale(.985);border-color:var(--bleu-clair);
  }
  .situations span:active{transform:scale(.96)}
  .faq summary:active,.contact-box a:active,
  footer.site a:active,.nav nav a:active{opacity:.55}
}

/* ---------- 9.2 le flash gris d'iOS ----------
   iOS pose de lui-même un rectangle terne sur la cible pendant ~200 ms.
   Il est rectangulaire — donc il déborde de tous nos angles arrondis —
   et il écrase le retour d'appui du 9.1, qui est plus fin. On le coupe
   uniquement là où on a déjà prévu mieux. */
a,button,summary,label,input,textarea,
.card,.role,.mode,.situations span{-webkit-tap-highlight-color:transparent}

/* ---------- 9.3 l'encoche ----------
   Mesuré : 0 règle env(safe-area) dans toute la feuille. Un iPhone à
   encoche COUCHÉ perd 59 px sur le côté : la première lettre de chaque
   ligne passait dessous. max() garde la marge actuelle partout ailleurs —
   sur un écran sans encoche env() vaut 0, donc rien ne bouge d'un pixel. */
.wrap{
  padding-left:max(26px,env(safe-area-inset-left));
  padding-right:max(26px,env(safe-area-inset-right));
}
@media(max-width:400px){
  .wrap{
    padding-left:max(16px,env(safe-area-inset-left));
    padding-right:max(16px,env(safe-area-inset-right));
  }
}
/* la barre d'accueil (le trait noir en bas de l'iPhone) ne doit pas
   recouvrir la dernière ligne du pied de page */
footer.site{padding-bottom:max(34px,calc(env(safe-area-inset-bottom) + 20px))}

/* ---------- 9.4 l'iPhone couché ----------
   Mesuré : l'entête collant faisait 63 px sur les 390 px de haut d'un
   iPhone 14 en paysage — 16 % de l'écran mangés en permanence par une
   barre. Sous 460 px de haut, elle se serre à 46 px (12 %), et le menu
   déplié devient défilant : quatre liens de 54 px ne tiennent pas dans
   ce qui reste. */
@media (orientation:landscape) and (max-height:460px){
  .nav .wrap{padding-top:4px;padding-bottom:4px}
  .logo img{height:26px}
  html.js .burger{height:40px}
  html.js .nav nav{max-height:calc(100dvh - 52px);overflow-y:auto;overscroll-behavior:contain}
  html.js .nav nav a{min-height:44px;padding-top:9px;padding-bottom:9px}
}

/* ---------- 9.5 les cibles trop fines ----------
   Apple demande 44 px. Mesurés en dessous : une question de FAQ (32 px
   de haut à 430 px de large) et l'adresse mail des mentions légales
   (21 px — une ligne de texte nue). Le pied de page, lui, était déjà bon.

   Enfermé dans (hover:none) EXPRÈS : à la souris on vise au pixel, la
   règle des 44 px n'a pas lieu d'être. Mesuré : sans ce garde-fou, la
   ligne « Contact » des mentions passait de 49 à 71 px sur grand écran.
   Le bureau validé le 01/08 ne bouge donc pas d'un pixel. */
@media (hover:none){
  .faq summary{min-height:44px}
  li > a[href^="mailto:"],li > a[href^="tel:"],
  p > a[href^="mailto:"],p > a[href^="tel:"]{display:inline-block;padding:11px 0}
}

/* ---------- 9.6 le menu déplié ne fait plus glisser la page ----------
   Panneau ouvert, un doigt qui va au bout de la liste continuait sur la
   page derrière (le « scroll chaining » d'iOS) : on croyait fermer le
   menu, on partait au milieu du texte. Il s'arrête maintenant au bord. */
html.js .nav nav.ouvert{overscroll-behavior:contain}

/* NOTE, pas un défaut du site : le volet « Mon approche » est affiché à
   56 % de sa taille (640 px de source pour 358 px à l'écran, sur un
   écran qui en demande 1074). Son texte fin est donc un peu doux sur un
   iPhone Retina. Ça ne se corrige pas en CSS — il faudrait le fichier
   d'origine d'Anouk en plus grand. Le dessin n'est PAS retouché. */
