/* Palette « Encre & lin ». Changer de direction = changer ce bloc. */
:root {
  --paper: #faf8f4;
  --card: #ffffff;
  --ink: #20242a;
  --ink-soft: #575f6a;
  --ink-faint: #8b939e;
  --accent: #2f6b6b;
  --line: #e4e0d8;

  --measure: 68ch;
  --gap: clamp(1rem, 3vw, 2.5rem);
  --nav-h: 3.75rem;
}

*, *::before, *::after { box-sizing: border-box; }

html { scroll-padding-top: var(--nav-h); }

body {
  margin: 0;
  background: var(--paper);
  color: var(--ink);
  font: 16px/1.65 system-ui, -apple-system, "Segoe UI", sans-serif;
}

img { max-width: 100%; height: auto; }

h1, h2, h3 {
  font-family: ui-serif, Georgia, "Noto Serif", "Liberation Serif", serif;
  font-weight: 500;
}

a { color: var(--accent); }

:focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; }

/* --- navigation -------------------------------------------------------- */
/* Fixe, donc hors du flux : la bannière et les pages secondaires lui font
   la place par leur propre padding. Verre, pour qu'elle se pose aussi bien
   sur la photo que sur le lin des sections. */
.nav {
  position: fixed;
  top: 0;
  left: 0;
  right: 0;
  z-index: 50;
  display: flex;
  align-items: center;
  justify-content: space-between;
  flex-wrap: wrap;
  gap: 1rem;
  height: var(--nav-h);
  padding-inline: var(--gap);
  padding-block: 0;
  /* État par défaut : verre CLAIR, texte encre. C'est le seul des deux qui
     reste lisible sur tout ce que la barre survole — lin, bande des citations,
     photo — donc c'est l'état sans JavaScript. */
  color: var(--ink);
  background: rgba(250, 248, 244, .55);
  backdrop-filter: blur(14px) saturate(150%);
  -webkit-backdrop-filter: blur(14px) saturate(150%);
  border-bottom: 1px solid rgba(32, 36, 42, .10);
  transition: background .25s ease, border-color .25s ease;
}

/* Au sommet, la barre n'a que la photo sous elle : le verre y descend très
   bas et le texte repasse en blanc — 11,95:1 mesuré. */
.nav.au-sommet {
  color: #fff;
  background: rgba(18, 28, 30, .32);
  border-bottom-color: rgba(255, 255, 255, .08);
}

@media (prefers-reduced-motion: reduce) { .nav { transition: none; } }
@supports not (backdrop-filter: blur(1px)) {
  .nav { background: rgba(250, 248, 244, .96); }
}
@media (prefers-reduced-transparency: reduce) {
  .nav { backdrop-filter: none; -webkit-backdrop-filter: none;
         background: rgba(250, 248, 244, .97); }
  .nav.au-sommet { background: rgba(18, 28, 30, .94); }
}
.nav a { color: inherit; }
.nav .brand {
  font-family: ui-serif, Georgia, "Noto Serif", "Liberation Serif", serif;
  letter-spacing: .14em;
  text-transform: uppercase;
  font-size: .95rem;
}
.nav-toggle {
  display: none;
  width: 2.25rem;
  height: 2.25rem;
  background: none;
  border: 1px solid currentColor;
  border-radius: .5rem;
  color: inherit;
  font-size: 1.1rem;
  line-height: 1;
}
.nav-menu {
  display: flex;
  gap: 1.4rem;
  margin: 0;
  padding: 0;
  list-style: none;
  font-size: .9rem;
  letter-spacing: .03em;
}
.nav-menu a { color: inherit; text-decoration: none; }
.nav-menu a:hover { text-decoration: underline; }

/* Le menu ne se replie que si JavaScript est là pour le rouvrir : sans lui,
   la classe `js` est absente et les cinq entrées restent visibles. */
@media (max-width: 899px) {
  /* Ouverte, la barre reprend une hauteur libre : le menu s'y déplie. */
  .nav-site:has(.nav-toggle[aria-expanded="true"]) {
    height: auto;
    padding-bottom: 1rem;
  }

  /* Seul le menu du site se replie : celui des pages secondaires tient en un
     lien et n'a pas de bouton pour le rouvrir. */
  .js .nav-site .nav-toggle { display: block; }
  .js .nav-site .nav-menu { display: none; width: 100%; flex-direction: column; gap: .9rem; }
  .js .nav-site .nav-toggle[aria-expanded="true"] ~ .nav-menu { display: flex; }
  .nav-site .nav-menu { width: 100%; flex-direction: column; gap: .9rem; }
}

/* --- bannière ---------------------------------------------------------- */
.hero {
  position: relative;
  isolation: isolate;
  display: flex;
  flex-direction: column;
  min-height: clamp(32rem, 76vh, 46rem);
  color: #fff;
  text-align: center;
  padding: var(--nav-h) var(--gap) clamp(2rem, 5vh, 4rem);
  padding-top: var(--nav-h);
}
.hero-body { margin: auto 0; width: 100%; }
.hero::before, .hero::after { content: ""; position: absolute; inset: 0; }
.hero::before {
  z-index: -2;
  background: #1b2426 center 38% / cover no-repeat;
  background-image: image-set(
    url("/assets/bg-1280.avif?v=1") type("image/avif"),
    url("/assets/bg-1280.webp?v=1") type("image/webp"),
    url("/assets/bg-1280.jpg?v=1") type("image/jpeg"));
}
@media (max-width: 700px) {
  .hero::before { background-image: image-set(
    url("/assets/bg-640.avif?v=1") type("image/avif"),
    url("/assets/bg-640.webp?v=1") type("image/webp"),
    url("/assets/bg-640.jpg?v=1") type("image/jpeg")); }
}
@media (min-width: 1600px) {
  .hero::before { background-image: image-set(
    url("/assets/bg-2048.avif?v=1") type("image/avif"),
    url("/assets/bg-2048.webp?v=1") type("image/webp"),
    url("/assets/bg-2048.jpg?v=1") type("image/jpeg")); }
}
.hero::after {
  z-index: -1;
  background: linear-gradient(170deg, rgba(18, 28, 30, .46), rgba(18, 28, 30, .68));
}
.hero h1 {
  font-size: clamp(1.75rem, 4.2vw, 2.75rem);
  margin: 0;
  line-height: 1.12;
}
.hero h1 small {
  display: block;
  margin-top: .75rem;
  font: 400 .4em/1 system-ui, sans-serif;
  letter-spacing: .22em;
  text-transform: uppercase;
  opacity: .92;
}
.hero-role { margin: 1rem 0 0; font-size: 1.05rem; }
.hero-accred {
  display: inline-block;
  margin: 1rem 0 0;
  padding: .35rem .9rem;
  border: 1px solid rgba(255, 255, 255, .3);
  border-radius: 999px;
  background: rgba(255, 255, 255, .08);
  font-size: .78rem;
  letter-spacing: .06em;
  text-transform: uppercase;
}
.hero-where { margin: 1.6rem 0 0; font-size: .95rem; }
.hero a { color: #fff; }

.btn {
  display: inline-block;
  margin: 1.4rem .3rem 0;
  padding: .8rem 1.6rem;
  border-radius: 999px;
  background: var(--accent);
  color: #fff;
  font-weight: 600;
  text-decoration: none;
}
.btn-ghost {
  background: transparent;
  border: 1px solid rgba(255, 255, 255, .55);
  font-weight: 500;
}

/* --- sections ---------------------------------------------------------- */
.section { max-width: 72rem; margin: 0 auto; padding: 3.5rem var(--gap); }
.section > h2 { font-size: clamp(1.5rem, 3vw, 2rem); margin: 0 0 1.5rem; }
.prose { max-width: var(--measure); }
.prose p { margin: 0 0 1.1em; }

/* --- parcours ---------------------------------------------------------- */
.parcours {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(15rem, 1fr));
  gap: 1rem;
  margin: 2.5rem 0 0;
  padding: 0;
  list-style: none;
}
.parcours-carte {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: .75rem;
  padding: 1.2rem 1.3rem;
  color: var(--ink-soft);
  font-size: .95rem;
}
.parcours-icone { display: block; font-size: 1.4rem; margin-bottom: .6rem; }

/* --- citations --------------------------------------------------------- */
/* Pleine largeur, hors de la grille des sections : une respiration entre
   « Qui suis-je » et « Thérapies ». */
.citations {
  width: 100vw;
  margin-left: calc(50% - 50vw);
  padding: clamp(2rem, 3.5vw, 3rem) 0;
  background: var(--ink);
  color: var(--paper);
  overflow: hidden;
}
.citations-cadre { overflow: hidden; }

/* Neuf vues pour huit citations : la neuvième reprend la première, pour que
   la boucle revienne à son point de départ sans saut visible. */
.citations-piste {
  display: flex;
  width: 900%;
  animation: defile-citations 72s infinite;
}
.citation {
  width: calc(100% / 9);
  margin: 0;
  padding: 0 var(--gap);
  text-align: center;
}
.citation blockquote {
  margin: 0 auto;
  max-width: 44ch;
  font-family: ui-serif, Georgia, "Noto Serif", "Liberation Serif", serif;
  font-style: italic;
  font-size: clamp(1.25rem, 2.5vw, 1.95rem);
  line-height: 1.45;
}
.citation cite {
  display: block;
  margin-top: 1.1rem;
  font: 500 .78rem/1 system-ui, sans-serif;
  font-style: normal;
  letter-spacing: .18em;
  text-transform: uppercase;
  opacity: .62;
}

/* WCAG 2.2.2 : un mouvement perpétuel doit pouvoir être arrêté. Le survol
   suffit à la souris ; le focus est ce qui donne la même prise au clavier. */
.citations-cadre:hover .citations-piste,
.citations-cadre:focus-within .citations-piste {
  animation-play-state: paused;
}
.citations-cadre:focus-visible { outline: 2px solid var(--paper); outline-offset: -4px; }

/* Chaque vue tient 8 s, la glissade en occupe 1,1. */
@keyframes defile-citations {
  0%,      10.0% { transform: translateX(0); }
  11.1%,   21.1% { transform: translateX(-11.111%); }
  22.2%,   32.2% { transform: translateX(-22.222%); }
  33.3%,   43.3% { transform: translateX(-33.333%); }
  44.4%,   54.4% { transform: translateX(-44.444%); }
  55.5%,   65.5% { transform: translateX(-55.555%); }
  66.6%,   76.6% { transform: translateX(-66.666%); }
  77.7%,   87.7% { transform: translateX(-77.777%); }
  88.8%,  100.0% { transform: translateX(-88.888%); }
}

/* Qui demande moins de mouvement reprend la main : le défilement s'arrête et
   la piste redevient une liste qu'on fait glisser soi-même. */
@media (prefers-reduced-motion: reduce) {
  .citations-piste {
    animation: none;
    width: auto;
    overflow-x: auto;
    scroll-snap-type: x mandatory;
  }
  .citation { width: 100%; flex: 0 0 100%; scroll-snap-align: center; }
}

/* --- thérapies --------------------------------------------------------- */
.therapie {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: .75rem;
  margin-bottom: 1rem;
}
.therapie > summary {
  display: flex;
  flex-wrap: wrap;
  gap: .4rem 1rem;
  align-items: baseline;
  justify-content: space-between;
  padding: 1.1rem 1.3rem;
  cursor: pointer;
  font-family: ui-serif, Georgia, "Noto Serif", "Liberation Serif", serif;
  font-size: 1.2rem;
}
.therapie .tarif {
  font-family: system-ui, sans-serif;
  font-size: .85rem;
  color: var(--accent);
  white-space: nowrap;
}
.therapie > .prose { padding: 0 1.3rem 1.3rem; }
/* Le marqueur natif est retiré partout : au-delà de 900 px tout est déplié,
   en dessous c'est le chevron qui le remplace. */
.therapie > summary { list-style: none; }
.therapie > summary::-webkit-details-marker { display: none; }

@media (min-width: 900px) {
  .therapie > summary { cursor: default; }
}

@media (max-width: 899px) {
  .therapie > summary { padding-right: 2.8rem; position: relative; }
  .therapie > summary::after {
    content: "";
    position: absolute;
    right: 1.3rem;
    top: 1.45rem;
    width: .55rem;
    height: .55rem;
    border-right: 2px solid var(--accent);
    border-bottom: 2px solid var(--accent);
    transform: rotate(45deg);
    transform-origin: center;
    transition: transform .2s ease;
  }
}

.therapie[open] > summary::after { transform: rotate(-135deg); }

@media (prefers-reduced-motion: reduce) {
  .therapie > summary::after { transition: none; }
}

/* --- contact ----------------------------------------------------------- */
/* Les pages secondaires n'ont pas de bannière : elles compensent elles-mêmes
   la hauteur de la barre fixe. */
.nav-page ~ main { padding-top: calc(var(--nav-h) + 1rem); }

.contact-grille { display: grid; grid-template-columns: minmax(0, 1fr); gap: 2rem; }
@media (min-width: 900px) {
  .contact-grille { grid-template-columns: 18rem minmax(0, 1fr); }
}
.carte-info {
  background: var(--card);
  border: 1px solid var(--line);
  border-radius: .75rem;
  padding: 1.1rem 1.2rem;
  margin-bottom: 1rem;
}
.carte-info h3 {
  margin: 0 0 .6rem;
  font: 600 .72rem/1 system-ui, sans-serif;
  letter-spacing: .11em;
  text-transform: uppercase;
  color: var(--accent);
}
.carte-info p { margin: 0 0 .45rem; color: var(--ink-soft); font-size: .95rem; }
.carte-info b { color: var(--ink); }

.champ { margin: 0 0 1rem; }
.champ label {
  display: block;
  margin-bottom: .35rem;
  color: var(--ink-soft);
  font-size: .9rem;
}
.champ input, .champ textarea {
  width: 100%;
  padding: .7rem .8rem;
  border: 1px solid var(--line);
  border-radius: .55rem;
  background: var(--card);
  color: var(--ink);
  font: inherit;
}
.champ textarea { resize: vertical; }
.piege { position: absolute; left: -9999px; }

#contact-form button {
  padding: .8rem 1.8rem;
  border: 0;
  border-radius: 999px;
  background: var(--accent);
  color: #fff;
  font: 600 1rem/1 system-ui, sans-serif;
  cursor: pointer;
}
#form-status { margin: .5rem 0 0; min-height: 1.5em; color: var(--ink-soft); }

#carte img { border-radius: .75rem; border: 1px solid var(--line); width: 100%; }

footer {
  border-top: 1px solid var(--line);
  padding: 2rem var(--gap);
  color: var(--ink-faint);
  font-size: .9rem;
  text-align: center;
}

.hero-badge { display: flex; flex-wrap: wrap; align-items: center;
              justify-content: center; gap: .9rem; margin-top: 1.2rem; }
.hero-badge img { background: #fff; border-radius: .4rem; padding: .3rem; }

.carte { margin: 0; }
.carte figcaption { margin-top: .7rem; font-size: .82rem; color: var(--ink-faint); }
.carte figcaption a { color: var(--ink-soft); }

/* --- panneau de verre -------------------------------------------------- */
/* Le flou prend ce qui est DERRIÈRE : il n'existe que parce que la photo est
   posée sur ::before, en dehors du flux. */
.hero-glass {
  max-width: 54rem;
  margin: 0 auto;
  padding: clamp(1.75rem, 4vw, 3rem) clamp(1.4rem, 4vw, 3.25rem);
  border: 1px solid rgba(255, 255, 255, .22);
  border-radius: clamp(1.25rem, 3vw, 1.9rem);
  background: rgba(255, 255, 255, .05);
  backdrop-filter: blur(11px) saturate(150%);
  -webkit-backdrop-filter: blur(11px) saturate(150%);
  /* Le liseré clair en haut : c'est lui qui fait lire « verre » plutôt que
     « rectangle translucide ». */
  box-shadow:
    inset 0 1px 0 rgba(255, 255, 255, .38),
    inset 0 -1px 0 rgba(255, 255, 255, .07),
    0 1.5rem 3.5rem rgba(8, 14, 16, .38);
}

/* Sans flou, le panneau ne tamise rien : il doit redevenir opaque, sinon le
   texte blanc se pose sur la photo nue. */
@supports not (backdrop-filter: blur(1px)) {
  .hero-glass {
    background: rgba(18, 28, 30, .72);
  }
}

@media (prefers-reduced-transparency: reduce) {
  .hero-glass {
    backdrop-filter: none;
    -webkit-backdrop-filter: none;
    background: rgba(18, 28, 30, .78);
  }
}

.hero-glass > * { text-shadow: 0 1px 4px rgba(8, 14, 16, .55); }
.hero-actions { margin: 1.8rem 0 0; text-shadow: none; }

.mention {
  font-size: .5em;
  vertical-align: .55em;
  letter-spacing: .04em;
  opacity: .72;
}

/* Le bouton fantôme reprend la même matière, en plus mince. */
.btn-ghost {
  background: rgba(255, 255, 255, .12);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
}

/* La barre de navigation flotte au-dessus de la photo, pas du panneau. */

.avis {
  margin: 1rem 0 0;
  padding: .9rem 1rem;
  border-left: 3px solid var(--accent);
  background: var(--card);
  font-size: .92rem;
  color: var(--ink-soft);
}

.sr-only {
  position: absolute;
  width: 1px; height: 1px;
  margin: -1px; padding: 0;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}
