/*
 * Page générique (modulaire) — styles.
 *
 * Repris de la maquette « Page modulaire », chargés UNIQUEMENT sur le gabarit
 * template-generique.php (voir inc/enqueue.php). Tout est scopé sous « .pm-page » : plusieurs
 * classes (.wrap, .sec-title, .sec-head, .kick, .hl, .hr, .reveal, .btn-orange) sont partagées
 * avec d'autres gabarits et ne doivent fuir ni vers l'en-tête, ni vers le pied de page. Les
 * polices « Anton » et « Open Sans » sont fournies globalement par style.css (@font-face +
 * enqueue) → non redéclarées ici.
 *
 * Écarts assumés par rapport à la maquette (rendu identique, feuille sans code mort) :
 *   • la maquette scopait ses styles sous « .contact-page » (sa feuille avait été copiée depuis
 *     la page Contact) : le gabarit pose « .pm-page », qui porte le même habillage ;
 *   • la PREMIÈRE section de la page reçoit le retrait haut qui dégage l'en-tête fixe du site.
 *     La maquette s'affichait sans en-tête : son contenu partait du haut de la page, et se
 *     retrouverait caché derrière la barre de navigation, qui est opaque. Le retrait est posé
 *     sur la première section EN FLUX, quelle qu'elle soit — sur cette page plus qu'ailleurs,
 *     l'éditeur décide de ce qui vient en premier (voir « Dégagement de l'en-tête » plus bas) ;
 *   • les cadres « image-slot » de la maquette (attente de l'outil de maquettage) sont de vraies
 *     balises <img> alimentées par la médiathèque. Sans image choisie, le gabarit ne rend pas
 *     l'élément du tout : il n'y a donc aucun cadre d'attente à styler ;
 *   • les COULEURS posées par le RANG (:nth-child) le sont par une CLASSE : filets des cartes de
 *     témoignage (.temoi-card--…) et fonds des cartes de renvoi (.mcard--…). Ces blocs viennent
 *     de répéteurs dont une ligne vide n'est pas rendue — un :nth-child décalerait les couleurs.
 *     La couleur d'une ligne de publication, elle, vient de son TYPE : la feuille ne connaît pas
 *     la liste des types, elle lit « --publi-color », posé au rendu (comme sur la page
 *     « Publications & ressources ») ;
 *   • les trois grilles s'adaptent au NOMBRE d'éléments saisis (--team-cols, --temoi-cols,
 *     --cards-cols) : la maquette figeait 4, 3 et 3 colonnes. Deux cartes occupent donc la
 *     largeur au lieu de laisser une colonne vide à droite ;
 *   • l'habillage du texte riche (.wys-body) couvre ce que produit réellement l'éditeur : les
 *     boutons « citation » et « ajouter un média » donnent un <blockquote> et une <figure>
 *     (ou un .wp-caption sur un contenu plus ancien), là où la maquette écrivait à la main
 *     .wys-quote et .wys-fig. Les listes ORDONNÉES, absentes de la maquette, sont habillées
 *     comme partout ailleurs sur le site : numéro en Anton bleu. L'image insérée dans le texte
 *     garde son PROPORTION D'ORIGINE, là où la maquette imposait un 16/9 recadré : c'est
 *     l'éditeur qui choisit le média, le gabarit n'a pas à en rogner le haut et le bas ;
 *   • sans JavaScript, les blocs « .reveal » sont visibles d'office (@media scripting: none) ;
 *     l'apparition est aussi neutralisée en « mouvement réduit ». Aucun contenu ne peut rester
 *     invisible ;
 *   • les classes que le balisage n'utilise pas ne sont pas reprises : .eyebrow, .hr3, .temoi-img
 *     et .temoi-av (aucun portrait dans ce module) ;
 *   • TROIS points où la maquette ne montre pas ce que son propre CSS demande, et où c'est le CSS
 *     qui fait foi (arbitré avec le PM le 2026-09-14 — ne pas « recorriger » vers l'image) :
 *     le lien « voir tout » (.see-all) et l'enveloppe d'une tuile d'équipe (.tm-mail) sont en
 *     BLEU #055da8, et le chapeau du bandeau (.md-lead) garde ses 28 px de marge basse. Dans le
 *     bundle de la maquette, « .contact-page a { color: inherit } » et « .contact-page p {
 *     margin-bottom: 0 } » l'emportent en spécificité sur « .see-all », « .tm-mail » et
 *     « .md-lead » — l'image affiche donc du marine et un chapeau collé aux boutons, alors que
 *     la feuille écrit bien #055da8 et 28 px. Le scope « .pm-page X » de cette feuille est plus
 *     précis que le reset : l'intention passe.
 *
 * @package medecins-du-monde
 */

/* ============================================================================
 * Base
 * ========================================================================= */

.pm-page {
  --pm-gutter: 26px;
  --pm-space: 80px;
  font-family: 'Open Sans', sans-serif;
  color: #1d1a55;
  background: #fff;
  line-height: 1.4;
  -webkit-font-smoothing: antialiased;
}
.pm-page p {
  margin: 0;
}
.pm-page a {
  text-decoration: none;
  color: inherit;
}
.pm-page .wrap {
  max-width: none;
  margin: 0;
  padding: 0 var(--pm-gutter);
}

/* ----------------------------------------------------------------------------
 * Dégagement de l'en-tête — l'en-tête du thème est en position:fixed et opaque : sans retrait,
 * il recouvrirait le haut de la première section.
 *
 * Le retrait est porté par la première section EN FLUX : il suit donc la page telle qu'elle est
 * composée au back-office — une bannière d'ordinaire, n'importe quelle autre section sinon.
 *
 * L'en-tête n'a pas une hauteur unique : la bande d'alerte qui le surmonte s'affiche ou non
 * selon un interrupteur du back-office (« alert_show »). Les deux états sont traités, au lieu de
 * réserver toujours la hauteur maximale : sinon un ruban blanc s'intercalerait entre la barre de
 * navigation et la section dès que la bande d'alerte est masquée.
 *
 * Hauteurs mesurées, en pixels :
 *
 *                    sans la bande   avec la bande
 *   ≥ 1280 px             104             146
 *   ≤ 1279 px              59             101
 * ------------------------------------------------------------------------- */

.pm-page > :first-child {
  padding-top: 104px;
}
body:has(.alert-section) .pm-page > :first-child {
  padding-top: 146px;
}

/* ============================================================================
 * Éléments partagés par plusieurs sections
 * ========================================================================= */

.pm-page .sec-title {
  font-family: 'Anton', sans-serif;
  text-transform: uppercase;
  font-size: clamp(28px, 3.6vw, 46px);
  line-height: 1.18;
  letter-spacing: -0.01em;
  color: #1d1a55;
}
.pm-page .sec-title .hl {
  background: linear-gradient(#bddfec, #bddfec) no-repeat;
  background-size: 100% 1.19em;
  background-position: 0 0.12em;
  -webkit-box-decoration-break: clone;
  box-decoration-break: clone;
}
.pm-page .kick {
  font-family: 'Anton', sans-serif;
  text-transform: uppercase;
  font-size: 14px;
  letter-spacing: 0.08em;
  color: #e9511c;
  margin-bottom: 16px;
  display: flex;
  align-items: center;
  gap: 10px;
}
.pm-page .kick::before {
  content: '';
  width: 22px;
  height: 2px;
  background: #e9511c;
  border-radius: 2px;
}
.pm-page .sec-head {
  display: flex;
  justify-content: space-between;
  align-items: flex-end;
  gap: 32px;
  flex-wrap: wrap;
  margin-bottom: 36px;
}
.pm-page .see-all {
  font-family: 'Anton', sans-serif;
  text-transform: uppercase;
  font-size: 14px;
  letter-spacing: 0.05em;
  color: #055da8;
  border-bottom: 2px solid #055da8;
  padding-bottom: 3px;
  white-space: nowrap;
  transition: color 0.25s, border-color 0.25s;
}
.pm-page .see-all:hover {
  color: #e9511c;
  border-color: #e9511c;
}

/* Boutons. */
.pm-page .btn-orange {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  background: #e9511c;
  color: #fff;
  border: 1px solid #e9511c;
  border-radius: 5px;
  padding: 14px 26px;
  font-size: 16px;
  font-weight: 600;
  transition: background-color 0.3s;
}
.pm-page .btn-orange:hover {
  background: #d1440f;
  color: #fff;
}
.pm-page .btn-orange img {
  width: 14px;
  transition: transform 0.3s;
}
.pm-page .btn-orange:hover img {
  transform: translateX(4px);
}
.pm-page .btn-ghost-line {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  background: transparent;
  color: #1d1a55;
  border: 1px solid #cfd9e8;
  border-radius: 5px;
  padding: 14px 26px;
  font-size: 16px;
  font-weight: 600;
  transition: background-color 0.3s, color 0.3s, border-color 0.3s;
}
.pm-page .btn-ghost-line:hover {
  background: #1d1a55;
  color: #fff;
  border-color: #1d1a55;
}

/* Apparitions. */
@keyframes pm-rise {
  from {
    opacity: 0;
    transform: translateY(24px);
  }
  to {
    opacity: 1;
    transform: none;
  }
}
.pm-page .hr {
  animation: pm-rise 0.7s cubic-bezier(0.22, 0.61, 0.36, 1) both;
}
.pm-page .hr2 {
  animation-delay: 0.12s;
}
.pm-page .reveal {
  opacity: 0;
  transform: translateY(22px);
  transition: opacity 0.7s cubic-bezier(0.22, 0.61, 0.36, 1),
    transform 0.7s cubic-bezier(0.22, 0.61, 0.36, 1);
}
.pm-page .reveal.in {
  opacity: 1;
  transform: none;
}

/* ============================================================================
 * Section « Bannière »
 * ========================================================================= */

.pm-page .md-hero {
  position: relative;
  overflow: hidden;
  background: #fff;
  color: #1d1a55;
}
.pm-page .md-hero .hero-media {
  position: relative;
  display: block;
  width: 100%;
  aspect-ratio: 21 / 8;
  background: #12305a;
  overflow: hidden;
}
.pm-page .md-hero .hero-media img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.pm-page .md-hero .hero-media::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, transparent 40%, rgba(29, 26, 85, 0.78) 100%);
}
.pm-page .md-hero .hero-tag {
  position: absolute;
  left: 48px;
  bottom: 34px;
  z-index: 2;
  font-family: 'Anton', sans-serif;
  text-transform: uppercase;
  font-size: 14px;
  letter-spacing: 0.08em;
  color: #fff;
  background: #e9511c;
  border-radius: 5px;
  padding: 8px 16px;
}
/* Sans photo, la pastille perd son support : elle repasse dans le flux, au-dessus du titre,
   plutôt que de disparaître avec la bande image. */
.pm-page .md-hero .hero-tag--inline {
  position: static;
  display: inline-block;
  margin-bottom: 22px;
}
.pm-page .md-hero .wrap {
  position: relative;
  z-index: 1;
  padding-top: 72px;
  padding-bottom: var(--pm-space);
  display: grid;
  grid-template-columns: 1.05fr 0.95fr;
  gap: 64px;
  align-items: end;
}
/* Sans chapeau ni bouton, le titre occupe toute la largeur. */
.pm-page .md-hero .md-hero-wrap--solo {
  grid-template-columns: 1fr;
}
.pm-page .md-hero h1,
.pm-page .md-hero h2 {
  font-family: 'Anton', sans-serif;
  text-transform: uppercase;
  font-size: clamp(48px, 7vw, 110px);
  line-height: 1.18;
  letter-spacing: -0.02em;
  color: #1d1a55;
  margin: 0;
  padding-bottom: 12px;
}
.pm-page .md-hero h1 .hl,
.pm-page .md-hero h2 .hl {
  color: #055da8;
  background: none;
}
.pm-page .md-lead {
  font-size: 17px;
  line-height: 1.85;
  color: #5b6172;
  max-width: 620px;
  margin-bottom: 28px;
}
.pm-page .md-lead:last-child {
  margin-bottom: 0;
}
.pm-page .md-ctas {
  display: flex;
  gap: 12px;
  flex-wrap: wrap;
  justify-content: flex-start;
}

/* ============================================================================
 * Section « Contenu riche »
 * ========================================================================= */

.pm-page .md-wys {
  padding: 0 0 var(--pm-space);
}
.pm-page .wys-grid {
  display: grid;
  grid-template-columns: 0.75fr 1.25fr;
  gap: 56px;
  align-items: start;
}
.pm-page .wys-grid--solo {
  grid-template-columns: 1fr;
}
.pm-page .wys-aside {
  position: sticky;
  top: 110px;
}
.pm-page .wys-aside .sec-title {
  line-height: 1.18;
}
.pm-page .wys-body {
  max-width: 820px;
}
.pm-page .wys-body h2 {
  font-family: 'Anton', sans-serif;
  text-transform: uppercase;
  font-size: clamp(22px, 2.3vw, 30px);
  line-height: 1.18;
  color: #1d1a55;
  margin: 40px 0 18px;
}
.pm-page .wys-body h2:first-child,
.pm-page .wys-body h3:first-child,
.pm-page .wys-body p:first-child {
  margin-top: 0;
}
.pm-page .wys-body h3 {
  font-family: 'Anton', sans-serif;
  text-transform: uppercase;
  font-size: 19px;
  line-height: 1.15;
  color: #055da8;
  margin: 32px 0 14px;
}
.pm-page .wys-body p {
  font-size: 16px;
  line-height: 1.9;
  color: #5b6172;
  margin-bottom: 20px;
}
.pm-page .wys-body p strong {
  color: #1d1a55;
}
/* « display: inline » n'est pas cosmétique : sans lui, le « a { display: block } » de style.css
   casse la phrase en trois autour de chaque lien. */
.pm-page .wys-body a {
  display: inline;
  color: #055da8;
  font-weight: 600;
  border-bottom: 1px solid #bddfec;
  transition: color 0.2s, border-color 0.2s;
}
.pm-page .wys-body a:hover {
  color: #e9511c;
  border-color: #e9511c;
}
/* Bouton posé dans le texte depuis le menu « Formats » de l'éditeur (« Bouton — lien » ou
   « Bouton — document PDF », habillés dans style.css). Les deux règles ci-dessus sont plus
   précises que la classe seule : sans ce rappel, le bouton reprendrait la couleur bleue du
   lien de phrase et son filet bleu clair remplacerait le bas de son cadre. */
.pm-page .wys-body a.mdm-button,
.pm-page .wys-body a.mdm-pdf-button {
  display: inline-flex;
  border: 1px solid #e9511c;
  color: #fff;
}
.pm-page .wys-body a.mdm-button:hover {
  border-color: #d1440f;
  color: #fff;
}
.pm-page .wys-body a.mdm-pdf-button:hover {
  border-color: #e9511c;
  color: #e9511c;
}
/* Listes : style.css applique au site entier « ul, ol { list-style: none; padding-inline-start:
   0 } » — reset pensé pour les listes de mise en page (menus, grilles de cartes). Sans les règles
   ci-dessous, une liste écrite au back-office s'affiche sans puce ni retrait. Puce = tiret
   orange, numéro = compteur Anton bleu, comme sur les autres pages de contenu du site. */
.pm-page .wys-body ul,
.pm-page .wys-body ol {
  margin: 0 0 24px;
  padding-left: 0;
  display: flex;
  flex-direction: column;
  gap: 14px;
  list-style: none;
}
.pm-page .wys-body ol {
  counter-reset: pm-li;
}
.pm-page .wys-body li {
  position: relative;
  padding-left: 26px;
  font-size: 16px;
  line-height: 1.8;
  color: #5b6172;
  list-style: none;
}
.pm-page .wys-body ul > li::before {
  content: '';
  position: absolute;
  left: 0;
  top: 13px;
  width: 11px;
  height: 3px;
  border-radius: 2px;
  background: #e9511c;
}
.pm-page .wys-body ol > li {
  padding-left: 34px;
  counter-increment: pm-li;
}
.pm-page .wys-body ol > li::before {
  content: counter(pm-li);
  position: absolute;
  left: 0;
  top: 0;
  font-family: 'Anton', sans-serif;
  font-size: 17px;
  line-height: 1.7;
  color: #055da8;
}
.pm-page .wys-body li strong {
  color: #1d1a55;
}
/* Citation : le bouton « citation » de la barre d'outils produit un <blockquote>. */
.pm-page .wys-body blockquote {
  margin: 34px 0;
  padding: 30px 34px;
  background: #eef6fb;
  border-left: 5px solid #055da8;
  border-radius: 5px;
}
.pm-page .wys-body blockquote p {
  font-size: clamp(17px, 1.8vw, 21px);
  font-weight: 600;
  line-height: 1.65;
  color: #1d1a55;
  margin: 0;
}
.pm-page .wys-body blockquote cite {
  display: block;
  margin-top: 14px;
  font-family: 'Anton', sans-serif;
  font-style: normal;
  text-transform: uppercase;
  font-size: 12px;
  letter-spacing: 0.05em;
  color: #055da8;
}
/* Image légendée : « Ajouter un média » produit une <figure> (ou un .wp-caption plus ancien). */
.pm-page .wys-body figure,
.pm-page .wys-body .wp-caption {
  margin: 34px 0;
  max-width: 100%;
}
.pm-page .wys-body figure img,
.pm-page .wys-body .wp-caption img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: 10px;
  background: #eef3f8;
}
.pm-page .wys-body figcaption,
.pm-page .wys-body .wp-caption-text {
  font-size: 14px;
  line-height: 1.6;
  color: #8a90ad;
  margin-top: 14px;
}
.pm-page .wys-body img {
  max-width: 100%;
  height: auto;
}
/* Alignements proposés par la médiathèque (« À gauche », « À droite », « Centré »). L'éditeur,
   lui, les rend DÉJÀ flottants : c'est wp-content.css, la feuille que WordPress charge dans
   TinyMCE, qui pose « .alignleft { float: left } ». Sans les règles ci-dessous, l'image posée à
   droite au back-office retombe dans la ligne de texte sur le site — le rendu ne ressemble plus
   à ce que la personne qui rédige a sous les yeux. Mêmes valeurs que les autres contenus riches
   du site (.prose, .cd-prose, .legal-body, .highlight-box — style.css) ; elles sont reprises ici
   parce que « .wys-body » ne figure pas dans cette liste et que les marges de <figure>
   ci-dessus l'emporteraient de toute façon en spécificité. */
.pm-page .wys-body .aligncenter {
  display: block;
  margin-left: auto;
  margin-right: auto;
}
.pm-page .wys-body .alignleft {
  float: left;
  max-width: 50%;
  margin: 6px 24px 16px 0;
}
.pm-page .wys-body .alignright {
  float: right;
  max-width: 50%;
  margin: 6px 0 16px 24px;
}
/* Empêche une image flottante de dépasser du bas de la colonne et de chevaucher la section
   suivante lorsque le texte qui l'accompagne est plus court qu'elle. */
.pm-page .wys-body::after {
  content: '';
  display: table;
  clear: both;
}

/* ============================================================================
 * Section « Publications »
 * ========================================================================= */

.pm-page .md-publi {
  padding: 0 0 var(--pm-space);
}
.pm-page .publi-list {
  display: flex;
  flex-direction: column;
  gap: 16px;
  padding-top: 6px;
}
.pm-page .publi-row {
  display: grid;
  grid-template-columns: 96px 1fr auto;
  align-items: stretch;
  border: 1px solid #c9d3e0;
  border-left-width: 4px;
  border-left-color: var(--publi-color, #055da8);
  border-radius: 4px;
  background: #fff;
  transition: transform 0.35s cubic-bezier(0.22, 0.61, 0.36, 1), box-shadow 0.3s;
}
/* Sans fichier joint, la ligne n'est pas un lien : ni curseur main, ni bascule au survol. */
.pm-page a.publi-row {
  cursor: pointer;
}
.pm-page a.publi-row:hover,
.pm-page a.publi-row:focus-within {
  transform: rotate(-0.8deg);
  box-shadow: 0 16px 36px rgba(13, 16, 50, 0.1);
  outline: none;
}
.pm-page .publi-year {
  display: flex;
  align-items: center;
  justify-content: center;
  border-right: 1px solid #e9edf4;
  font-family: 'Anton', sans-serif;
  font-size: 30px;
  line-height: 0.9;
  letter-spacing: -0.01em;
  color: var(--publi-color, #055da8);
}
.pm-page .publi-main {
  padding: 24px 30px;
  display: flex;
  flex-direction: column;
  justify-content: center;
  min-width: 0;
}
.pm-page .publi-tag {
  align-self: flex-start;
  font-family: 'Anton', sans-serif;
  text-transform: uppercase;
  font-size: 14px;
  letter-spacing: 0.06em;
  color: #fff;
  background: var(--publi-color, #055da8);
  padding: 5px 11px;
  border-radius: 4px;
  margin-bottom: 12px;
}
.pm-page .publi-title {
  font-size: clamp(18px, 1.7vw, 23px);
  font-weight: 600;
  line-height: 1.4;
  color: #1d1a55;
  letter-spacing: -0.01em;
  text-wrap: pretty;
}
.pm-page .publi-meta {
  font-size: 14px;
  font-weight: 500;
  color: #5b6078;
  margin-top: 14px;
}
.pm-page .publi-action {
  display: flex;
  align-items: center;
  padding-right: 24px;
}
.pm-page .publi-dl {
  display: inline-flex;
  align-items: center;
  gap: 12px;
  background: #e9511c;
  color: #fff;
  border: 1px solid #e9511c;
  border-radius: 5px;
  padding: 12px 22px;
  font-size: 14px;
  font-weight: 600;
  white-space: nowrap;
  transition: background-color 0.2s, color 0.2s;
}
.pm-page a.publi-row:hover .publi-dl {
  background: #fff;
  color: #e9511c;
}
/* Une publication sans année n'a pas de colonne d'année : la grille se referme dessus. */
.pm-page .publi-row:not(:has(.publi-year)) {
  grid-template-columns: 1fr auto;
}

/* ============================================================================
 * Section « Équipe »
 * ========================================================================= */

.pm-page .md-team {
  padding: 0 0 var(--pm-space);
}
.pm-page .team-wall {
  display: grid;
  grid-template-columns: repeat(var(--team-cols, 4), minmax(0, 260px));
  gap: 16px;
  justify-content: center;
}
.pm-page .tm {
  position: relative;
  display: grid;
  grid-template-columns: 1fr auto;
  grid-template-areas:
    'tx mail'
    'cta cta';
  align-items: center;
  gap: 20px 14px;
  width: 100%;
  text-align: left;
  padding: 26px 24px 26px 28px;
  border: none;
  border-radius: 5px;
  background: #eef6fb;
  border-left: 5px solid #055da8;
  overflow: hidden;
  transition: background-color 0.3s, border-color 0.3s;
}
/* Sans bouton, la tuile n'a qu'une rangée : pas d'espace réservé sous le nom. */
.pm-page .tm--sans-cta {
  grid-template-areas: 'tx mail';
}
.pm-page .tm:hover {
  background: #dceaf5;
  border-left-color: #e9511c;
}
.pm-page .tm-tx {
  grid-area: tx;
  min-width: 0;
}
.pm-page .tm-name {
  font-family: 'Anton', sans-serif;
  text-transform: uppercase;
  font-size: 18px;
  line-height: 1.15;
  color: #1d1a55;
  margin-bottom: 9px;
}
.pm-page .tm-role {
  font-size: 14px;
  color: #8a90ad;
  font-weight: 600;
  line-height: 1.5;
}
.pm-page .tm-mail {
  grid-area: mail;
  display: grid;
  place-items: center;
  width: 34px;
  height: 34px;
  border-radius: 9px;
  background: #fff;
  color: #055da8;
  flex-shrink: 0;
  transition: background-color 0.25s, color 0.25s, transform 0.25s;
}
.pm-page .tm-mail:hover {
  background: #055da8;
  color: #fff;
  transform: translateY(-2px);
}
.pm-page .tm-mail svg {
  width: 17px;
  height: 17px;
  stroke: currentColor;
  stroke-width: 1.9;
  fill: none;
}
.pm-page .tm-cta {
  grid-area: cta;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  justify-self: start;
  padding: 9px 16px;
  border-radius: 6px;
  background: #e9511c;
  color: #fff;
  font-family: 'Anton', sans-serif;
  text-transform: uppercase;
  font-size: 14px;
  letter-spacing: 0.04em;
  transition: background-color 0.25s;
}
.pm-page .tm-cta:hover {
  background: #d1440f;
  color: #fff;
}

/* ============================================================================
 * Section « Témoignages »
 * ========================================================================= */

.pm-page .md-temoi {
  padding: 0 0 var(--pm-space);
}
.pm-page .temoi-grid {
  display: grid;
  grid-template-columns: repeat(var(--temoi-cols, 3), minmax(0, 1fr));
  gap: 18px;
}
.pm-page .temoi-card {
  position: relative;
  display: flex;
  flex-direction: column;
  border: 1px solid #e1e8f3;
  border-radius: 14px;
  overflow: hidden;
  background: #fff;
  transition: transform 0.4s cubic-bezier(0.22, 0.61, 0.36, 1), box-shadow 0.4s, border-color 0.3s;
}
/* Filet de couleur en haut de carte : classe posée au rendu selon le rang des cartes
   réellement affichées (voir mdm_gen_cycle_class). */
.pm-page .temoi-card::before {
  content: '';
  position: absolute;
  left: 0;
  right: 0;
  top: 0;
  height: 4px;
  z-index: 3;
  background: var(--temoi-color, #055da8);
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.45s cubic-bezier(0.22, 0.61, 0.36, 1);
}
.pm-page .temoi-card--bleu {
  --temoi-color: #055da8;
}
.pm-page .temoi-card--vert {
  --temoi-color: #00af9c;
}
.pm-page .temoi-card--orange {
  --temoi-color: #e9511c;
}
.pm-page .temoi-card:hover::before {
  transform: scaleX(1);
}
.pm-page .temoi-card:hover {
  transform: translateY(-6px);
  box-shadow: 0 22px 46px rgba(29, 26, 85, 0.14);
  border-color: transparent;
}
.pm-page .temoi-inner {
  padding: 34px 30px 28px;
  display: flex;
  flex-direction: column;
  gap: 18px;
  flex: 1;
}
.pm-page .temoi-mark {
  font-family: 'Anton', sans-serif;
  font-size: 46px;
  line-height: 0.7;
  color: #c9d6e6;
  transition: color 0.35s;
}
.pm-page .temoi-card:hover .temoi-mark {
  color: var(--temoi-color, #055da8);
}
.pm-page .temoi-body {
  position: relative;
  display: block;
  flex: 1;
}
.pm-page .temoi-quote {
  font-size: 16px;
  font-weight: 500;
  line-height: 1.8;
  color: #1d1a55;
  text-wrap: pretty;
}
.pm-page .temoi-who {
  position: relative;
  display: flex;
  align-items: center;
  gap: 14px;
  padding-top: 20px;
  border-top: 1px solid #eef2f8;
}
.pm-page .temoi-name {
  font-family: 'Anton', sans-serif;
  text-transform: uppercase;
  font-size: 16px;
  line-height: 1.18;
  color: #1d1a55;
  margin-bottom: 5px;
}
.pm-page .temoi-role {
  font-size: 14px;
  color: #8a90ad;
  font-weight: 600;
  line-height: 1.45;
}

/* ============================================================================
 * Section « Cartes »
 * ========================================================================= */

.pm-page .md-cards {
  padding: 0 0 var(--pm-space);
}
.pm-page .cards-grid {
  display: grid;
  grid-template-columns: repeat(var(--cards-cols, 3), minmax(0, 1fr));
  gap: 18px;
}
.pm-page .mcard {
  position: relative;
  border-radius: 10px;
  padding: 36px 30px 30px;
  min-height: 280px;
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  color: #fff;
  background: var(--mcard-bg, #1d1a55);
  overflow: hidden;
  transition: transform 0.4s cubic-bezier(0.22, 0.61, 0.36, 1), box-shadow 0.4s;
}
.pm-page a.mcard:hover {
  transform: translateY(-6px);
  box-shadow: 0 24px 48px rgba(29, 26, 85, 0.18);
}
.pm-page .mcard--marine {
  --mcard-bg: #1d1a55;
  --mcard-fg: #1d1a55;
}
.pm-page .mcard--bleu {
  --mcard-bg: #055da8;
  --mcard-fg: #055da8;
}
.pm-page .mcard--vert {
  --mcard-bg: #00af9c;
  --mcard-fg: #00857a;
}
.pm-page .mcard-body {
  display: flex;
  flex-direction: column;
  gap: 16px;
}
.pm-page .mcard-tag {
  font-family: 'Anton', sans-serif;
  text-transform: uppercase;
  font-size: 14px;
  letter-spacing: 0.05em;
  color: rgba(255, 255, 255, 0.85);
}
.pm-page .mcard h3 {
  font-family: 'Anton', sans-serif;
  text-transform: uppercase;
  font-size: clamp(26px, 2.4vw, 32px);
  letter-spacing: 0.005em;
  color: #fff;
  line-height: 1.18;
  margin: 0;
}
.pm-page .mcard p {
  font-size: 15px;
  color: rgba(255, 255, 255, 0.9);
  line-height: 1.7;
}
.pm-page .mcard-btn {
  display: inline-flex;
  align-items: center;
  gap: 10px;
  align-self: flex-start;
  margin-top: 26px;
  background: #fff;
  border: 1px solid #fff;
  border-radius: 5px;
  padding: 12px 22px;
  font-size: 15px;
  font-weight: 600;
  color: var(--mcard-fg, #1d1a55);
  transition: background-color 0.3s, color 0.3s;
}
.pm-page a.mcard:hover .mcard-btn {
  background: transparent;
  color: #fff;
  border-color: #fff;
}

/* ============================================================================
 * Adaptations
 * ========================================================================= */

/* Sans JavaScript, rien ne doit rester invisible : les blocs en attente d'apparition
   s'affichent d'office. Même chose en « mouvement réduit ». */
@media (scripting: none) {
  .pm-page .reveal {
    opacity: 1;
    transform: none;
  }
}
@media (prefers-reduced-motion: reduce) {
  .pm-page .hr,
  .pm-page .reveal {
    animation: none;
    opacity: 1;
    transform: none;
    transition: none;
  }
}

@media (max-width: 1279px) {
  .pm-page {
    --pm-gutter: 10px;
  }
  .pm-page > :first-child {
    padding-top: 59px;
  }
  body:has(.alert-section) .pm-page > :first-child {
    padding-top: 101px;
  }
}

@media (max-width: 1040px) {
  .pm-page .md-hero .wrap {
    grid-template-columns: 1fr;
    gap: 26px;
  }
  .pm-page .md-hero .hero-tag {
    left: 20px;
    bottom: 20px;
  }
  .pm-page .wys-grid {
    grid-template-columns: 1fr;
    gap: 30px;
  }
  .pm-page .wys-aside {
    position: static;
  }
  .pm-page .cards-grid,
  .pm-page .temoi-grid {
    grid-template-columns: 1fr;
  }
  .pm-page .mcard {
    min-height: 240px;
  }
}

@media (max-width: 768px) {
  .pm-page {
    --pm-space: 52px;
  }
  /* Trop étroit pour partager la ligne : l'image reprend toute la largeur. « display: block »
     la sort du fil du texte — sans lui, une image insérée au milieu d'un paragraphe resterait
     posée sur la ligne et la phrase se retrouverait collée à son coin bas gauche. */
  .pm-page .wys-body .alignleft,
  .pm-page .wys-body .alignright {
    float: none;
    display: block;
    max-width: 100%;
    margin: 24px 0;
  }
  .pm-page .md-hero .wrap {
    padding-top: 56px;
    padding-bottom: var(--pm-space);
  }
  .pm-page .publi-row,
  .pm-page .publi-row:not(:has(.publi-year)) {
    grid-template-columns: 1fr;
  }
  .pm-page .publi-year {
    justify-content: flex-start;
    border-right: none;
    border-bottom: 1px solid #e9edf4;
    padding: 16px 20px;
  }
  .pm-page .publi-main {
    padding: 18px 20px;
  }
  .pm-page .publi-action {
    padding: 0 20px 20px;
  }
  /* Les trois grilles deviennent des rangées à faire défiler du doigt. */
  .pm-page .team-wall,
  .pm-page .cards-grid,
  .pm-page .temoi-grid {
    display: flex;
    grid-template-columns: none;
    overflow-x: auto;
    gap: 14px;
    scroll-snap-type: x mandatory;
    -webkit-overflow-scrolling: touch;
    margin: 0 calc(var(--pm-gutter) * -1);
    padding: 0 var(--pm-gutter) 10px;
    scroll-padding-left: var(--pm-gutter);
    justify-content: flex-start;
    scrollbar-width: none;
    -ms-overflow-style: none;
  }
  .pm-page .team-wall::-webkit-scrollbar,
  .pm-page .cards-grid::-webkit-scrollbar,
  .pm-page .temoi-grid::-webkit-scrollbar {
    display: none;
    width: 0;
    height: 0;
  }
  .pm-page .temoi-card,
  .pm-page .mcard {
    flex: 0 0 86%;
    scroll-snap-align: start;
  }
  .pm-page .tm {
    flex: 0 0 82%;
    scroll-snap-align: start;
  }
}

@media (min-width: 1700px) {
  .pm-page {
    --pm-gutter: 1.8057vw;
    --pm-space: 5.5559vw;
  }
  .pm-page > :first-child {
    padding-top: 7.2227vw;
  }
  body:has(.alert-section) .pm-page > :first-child {
    padding-top: 10.1395vw;
  }
  .pm-page .sec-title {
    font-size: clamp(1.9446vw, 3.6vw, 3.1946vw);
  }
  .pm-page .kick {
    font-size: 0.9723vw;
    margin-bottom: 1.1112vw;
    gap: 0.6945vw;
  }
  .pm-page .kick::before {
    width: 1.5279vw;
    height: 0.1389vw;
    border-radius: 0.1389vw;
  }
  .pm-page .sec-head {
    gap: 2.2224vw;
    margin-bottom: 2.5002vw;
  }
  .pm-page .see-all {
    font-size: 0.9723vw;
    border-bottom: 0.1389vw solid #055da8;
    padding-bottom: 0.2083vw;
  }
  .pm-page .btn-orange {
    gap: 0.8334vw;
    border: 0.0694vw solid #e9511c;
    border-radius: 0.3472vw;
    padding: 0.9723vw 1.8057vw;
    font-size: 1.1112vw;
  }
  .pm-page .btn-orange img {
    width: 0.9723vw;
  }
  .pm-page .btn-orange:hover img {
    transform: translateX(0.2778vw);
  }
  .pm-page .btn-ghost-line {
    gap: 0.6945vw;
    border: 0.0694vw solid #cfd9e8;
    border-radius: 0.3472vw;
    padding: 0.9723vw 1.8057vw;
    font-size: 1.1112vw;
  }
  .pm-page .reveal {
    transform: translateY(1.5279vw);
  }
  .pm-page .md-hero .hero-tag {
    left: 3.3335vw;
    bottom: 2.3613vw;
    font-size: 0.9723vw;
    border-radius: 0.3472vw;
    padding: 0.5556vw 1.1112vw;
  }
  .pm-page .md-hero .hero-tag--inline {
    margin-bottom: 1.5279vw;
  }
  .pm-page .md-hero .wrap {
    padding-top: 5.0003vw;
    padding-bottom: var(--pm-space);
    gap: 4.4447vw;
  }
  .pm-page .md-hero h1,
  .pm-page .md-hero h2 {
    font-size: clamp(3.3335vw, 7vw, 7.6394vw);
    padding-bottom: 0.8334vw;
  }
  .pm-page .md-lead {
    font-size: 1.1806vw;
    max-width: 43.0582vw;
    margin-bottom: 1.9446vw;
  }
  .pm-page .md-ctas {
    gap: 0.8334vw;
  }
  .pm-page .wys-grid {
    gap: 3.8891vw;
  }
  .pm-page .wys-aside {
    top: 7.6394vw;
  }
  .pm-page .wys-body {
    max-width: 56.9479vw;
  }
  .pm-page .wys-body h2 {
    font-size: clamp(1.5279vw, 2.3vw, 2.0835vw);
    margin: 2.7779vw 0 1.2501vw;
  }
  .pm-page .wys-body h3 {
    font-size: 1.3195vw;
    margin: 2.2224vw 0 0.9723vw;
  }
  .pm-page .wys-body p {
    font-size: 1.1112vw;
    margin-bottom: 1.389vw;
  }
  .pm-page .wys-body a {
    border-bottom: 0.0694vw solid #bddfec;
  }
  .pm-page .wys-body a.mdm-button,
  .pm-page .wys-body a.mdm-pdf-button {
    border: 0.0694vw solid #e9511c;
  }
  .pm-page .wys-body ul,
  .pm-page .wys-body ol {
    margin: 0 0 1.6668vw;
    gap: 0.9723vw;
  }
  .pm-page .wys-body li {
    padding-left: 1.8057vw;
    font-size: 1.1112vw;
  }
  .pm-page .wys-body ul > li::before {
    top: 0.9028vw;
    width: 0.7639vw;
    height: 0.2083vw;
    border-radius: 0.1389vw;
  }
  .pm-page .wys-body ol > li {
    padding-left: 2.3613vw;
  }
  .pm-page .wys-body ol > li::before {
    font-size: 1.1806vw;
  }
  .pm-page .wys-body blockquote {
    margin: 2.3613vw 0;
    padding: 2.0835vw 2.3613vw;
    border-left: 0.3472vw solid #055da8;
    border-radius: 0.3472vw;
  }
  .pm-page .wys-body blockquote p {
    font-size: clamp(1.1806vw, 1.8vw, 1.4584vw);
  }
  .pm-page .wys-body blockquote cite {
    margin-top: 0.9723vw;
    font-size: 0.8334vw;
  }
  .pm-page .wys-body figure,
  .pm-page .wys-body .wp-caption {
    margin: 2.3613vw 0;
  }
  .pm-page .wys-body figure img,
  .pm-page .wys-body .wp-caption img {
    border-radius: 0.6945vw;
  }
  .pm-page .wys-body figcaption,
  .pm-page .wys-body .wp-caption-text {
    font-size: 0.9723vw;
    margin-top: 0.9723vw;
  }
  .pm-page .wys-body .alignleft {
    margin: 0.4167vw 1.6668vw 1.1112vw 0;
  }
  .pm-page .wys-body .alignright {
    margin: 0.4167vw 0 1.1112vw 1.6668vw;
  }
  .pm-page .publi-list {
    gap: 1.1112vw;
    padding-top: 0.4167vw;
  }
  .pm-page .publi-row {
    grid-template-columns: 6.6671vw 1fr auto;
    border: 0.0694vw solid #c9d3e0;
    border-left-width: 0.2778vw;
    border-radius: 0.2778vw;
  }
  .pm-page a.publi-row:hover,
  .pm-page a.publi-row:focus-within {
    box-shadow: 0 1.1112vw 2.5002vw rgba(13, 16, 50, 0.1);
  }
  .pm-page .publi-year {
    border-right: 0.0694vw solid #e9edf4;
    font-size: 2.0835vw;
  }
  .pm-page .publi-main {
    padding: 1.6668vw 2.0835vw;
  }
  .pm-page .publi-tag {
    font-size: 0.9723vw;
    padding: 0.3472vw 0.7639vw;
    border-radius: 0.2778vw;
    margin-bottom: 0.8334vw;
  }
  .pm-page .publi-title {
    font-size: clamp(1.2501vw, 1.7vw, 1.5973vw);
  }
  .pm-page .publi-meta {
    font-size: 0.9723vw;
    margin-top: 0.9723vw;
  }
  .pm-page .publi-action {
    padding-right: 1.6668vw;
  }
  .pm-page .publi-dl {
    gap: 0.8334vw;
    border: 0.0694vw solid #e9511c;
    border-radius: 0.3472vw;
    padding: 0.8334vw 1.5279vw;
    font-size: 0.9723vw;
  }
  .pm-page .team-wall {
    grid-template-columns: repeat(var(--team-cols, 4), minmax(0, 18.0566vw));
    gap: 1.1112vw;
  }
  .pm-page .tm {
    gap: 1.389vw 0.9723vw;
    padding: 1.8057vw 1.6668vw 1.8057vw 1.9446vw;
    border-radius: 0.3472vw;
    border-left: 0.3472vw solid #055da8;
  }
  .pm-page .tm-name {
    font-size: 1.2501vw;
    margin-bottom: 0.625vw;
  }
  .pm-page .tm-role {
    font-size: 0.9723vw;
  }
  .pm-page .tm-mail {
    width: 2.3613vw;
    height: 2.3613vw;
    border-radius: 0.625vw;
  }
  .pm-page .tm-mail:hover {
    transform: translateY(-0.1389vw);
  }
  .pm-page .tm-mail svg {
    width: 1.1806vw;
    height: 1.1806vw;
  }
  .pm-page .tm-cta {
    padding: 0.625vw 1.1112vw;
    border-radius: 0.4167vw;
    font-size: 0.9723vw;
  }
  .pm-page .temoi-grid {
    gap: 1.2501vw;
  }
  .pm-page .temoi-card {
    border: 0.0694vw solid #e1e8f3;
    border-radius: 0.9723vw;
  }
  .pm-page .temoi-card::before {
    height: 0.2778vw;
  }
  .pm-page .temoi-card:hover {
    transform: translateY(-0.4167vw);
    box-shadow: 0 1.5279vw 3.1946vw rgba(29, 26, 85, 0.14);
  }
  .pm-page .temoi-inner {
    padding: 2.3613vw 2.0835vw 1.9446vw;
    gap: 1.2501vw;
  }
  .pm-page .temoi-mark {
    font-size: 3.1946vw;
  }
  .pm-page .temoi-quote {
    font-size: 1.1112vw;
  }
  .pm-page .temoi-who {
    gap: 0.9723vw;
    padding-top: 1.389vw;
    border-top: 0.0694vw solid #eef2f8;
  }
  .pm-page .temoi-name {
    font-size: 1.1112vw;
    margin-bottom: 0.3472vw;
  }
  .pm-page .temoi-role {
    font-size: 0.9723vw;
  }
  .pm-page .cards-grid {
    gap: 1.2501vw;
  }
  .pm-page .mcard {
    border-radius: 0.6945vw;
    padding: 2.5002vw 2.0835vw 2.0835vw;
    min-height: 19.4456vw;
  }
  .pm-page a.mcard:hover {
    transform: translateY(-0.4167vw);
    box-shadow: 0 1.6668vw 3.3335vw rgba(29, 26, 85, 0.18);
  }
  .pm-page .mcard-body {
    gap: 1.1112vw;
  }
  .pm-page .mcard-tag {
    font-size: 0.9723vw;
  }
  .pm-page .mcard h3 {
    font-size: clamp(1.8057vw, 2.4vw, 2.2224vw);
  }
  .pm-page .mcard p {
    font-size: 1.0417vw;
  }
  .pm-page .mcard-btn {
    gap: 0.6945vw;
    margin-top: 1.8057vw;
    border: 0.0694vw solid #fff;
    border-radius: 0.3472vw;
    padding: 0.8334vw 1.5279vw;
    font-size: 1.0417vw;
  }
}
