/* ==========================================================================
   CentralAFFICHE — feuille de style unique
   --------------------------------------------------------------------------
   Les couleurs et typographies viennent du bloc :root de la feuille compilée
   par Avada (capture/_systeme-avada.txt, 533 variables résolues).
   Les mises en page viennent d'un relevé au navigateur sur le site en ligne :
   le HTML seul ne disait pas que le pavé d'accroche est orange, que les
   boutons le sont aussi, ni que les pages internes ont une photo pleine
   hauteur à droite.
   ========================================================================== */

/* --------------------------------------------------------------- polices  */
/* Polices sous licence commerciale : PP Telegraf (Pangram Pangram) et
   BC Alphapipe (Briefcase Type Foundry). Le client doit disposer de sa
   propre licence web — celle du prestataire ne se transmet pas. */

@font-face {
  font-family: "BC Alphapipe";
  src: url("../fonts/BC-Alphapipe-L-Regular.ttf") format("truetype");
  font-weight: 400; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "BC Alphapipe";
  src: url("../fonts/BC-Alphapipe-RB-Bold.ttf") format("truetype");
  font-weight: 700; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "PP Telegraf";
  src: url("../fonts/PPTelegraf-UltraLight.ttf") format("truetype");
  font-weight: 200; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "PP Telegraf";
  src: url("../fonts/PPTelegraf-Regular.ttf") format("truetype");
  font-weight: 400; font-style: normal; font-display: swap;
}
@font-face {
  font-family: "PP Telegraf";
  src: url("../fonts/PPTelegraf-UltraBold.ttf") format("truetype");
  font-weight: 800; font-style: normal; font-display: swap;
}

/* ---------------------------------------------------------------- jetons  */
:root {
  --blanc:      #ffffff;
  --casse:      #f9f9fb;
  --clair:      #f2f3f5;
  --orange:     #eb7206;
  --orange-f:   #cf6305;
  --teal:       #165352;
  --teal-clair: #9ed3d0;   /* liseré diagonal relevé entre deux sections */
  --gris:       #434549;
  --sombre:     #212326;
  --noir:       #141617;

  --titre:  "BC Alphapipe", Georgia, serif;
  --texte:  "PP Telegraf", "Helvetica Neue", Arial, sans-serif;

  --largeur: 1200px;
  --gouttiere: 30px;
  --transition: 180ms ease;
}

/* ------------------------------------------------------------- fondations */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }

body {
  margin: 0;
  background: var(--blanc);
  color: var(--noir);
  font-family: var(--texte);
  font-size: 16px;
  line-height: 1.72;
  letter-spacing: 0.015em;
  overflow-x: hidden;
}

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

a { color: var(--noir); text-decoration: none; transition: color var(--transition); }
a:hover, a:focus-visible { color: var(--orange); }
:focus-visible { outline: 2px solid var(--orange); outline-offset: 3px; }

h1, h2, h3, h4, h5, h6 {
  font-family: var(--titre);
  font-weight: 400;
  line-height: 1.2;
  letter-spacing: -0.015em;
  margin: 0 0 0.6em;
}
h1 { font-size: clamp(2.1rem, 1.4rem + 3vw, 3.5rem); }
h2 { font-size: clamp(1.6rem, 1.15rem + 1.9vw, 2.5rem); }
h3 { font-size: clamp(1.3rem, 1.1rem + .9vw, 1.7rem); }
h4 { font-size: 1.25rem; }
h5 { font-size: 1.1rem; }

/* le gras des paragraphes est un repère de lecture chez eux, pas un accident */
strong, b { font-weight: 800; }

p { margin: 0 0 1.2em; }
p:last-child { margin-bottom: 0; }

/* ------------------------------------------------------------ conteneurs  */
.conteneur {
  width: 100%; max-width: var(--largeur);
  margin-inline: auto; padding-inline: var(--gouttiere);
}
.section        { padding-block: clamp(48px, 6vw, 96px); }
.section--clair { background: var(--casse); }
.section--blanc { background: var(--blanc); }
.section--teal  { background: var(--teal); color: var(--blanc); }
.section--teal :is(h1,h2,h3,h4,h5) { color: var(--blanc); }
.section--teal a:not(.bouton) { color: var(--blanc); }
.section--teal a:not(.bouton):hover { color: var(--orange); }

/* --------------------------------------------------- le tiret orange oblique
   Signature graphique du site : un petit parallélogramme orange sous chaque
   titre de rubrique. Relevé au navigateur, absent du HTML lisible.          */
/* Le tiret est une IMAGE sur le site d'origine (Trace-344.png, 50x10), pas un
   trace CSS : on emploie la sienne plutot qu'une approximation. */
.tiret {
  display: block; width: 50px; height: 10px;
  background: url("../img/Trace-344.png") left center / contain no-repeat;
  margin: 0 0 30px;
}
.tiret--droite { margin-left: auto; }
.tiret--centre { margin-inline: auto; }

/* ------------------------------------------------------------- évitement  */
.evitement { position: absolute; left: -9999px; background: var(--blanc);
             color: var(--noir); padding: 12px 20px; z-index: 999; }
.evitement:focus { left: 12px; top: 12px; }

/* ----------------------------------------------------------------- entête */
/* L'en-tête d'origine n'est pas collant : il défile avec la page. */
.entete { background: var(--teal); position: relative; z-index: 100; }
.entete__barre {
  display: flex; align-items: center; justify-content: space-between;
  gap: 24px; min-height: 128px;
}
.entete__logo img { width: 250px; }
.entete__droite { display: flex; flex-direction: column; align-items: flex-end; gap: 10px; }

/* lien vers l'espace pro : à l'origine un bouton transparent à icône seule */
.lien-compte {
  display: grid; place-items: center;
  width: 42px; height: 42px; color: var(--blanc);
}
.lien-compte svg { width: 24px; height: 24px; fill: currentColor; }
.lien-compte:hover { color: var(--orange); }

.nav__bascule { display: none; background: none; border: 0; cursor: pointer;
                padding: 10px; color: var(--blanc); }
.nav__bascule svg { display: block; width: 26px; height: 26px; fill: currentColor; }

.nav__liste { display: flex; align-items: center; gap: 34px;
              list-style: none; margin: 0; padding: 0; }
.nav__liste a {
  color: var(--blanc); font-size: 17px; letter-spacing: 0.015em;
  padding-block: 6px; border-bottom: 2px solid transparent;
}
.nav__liste a:hover { color: var(--orange); border-bottom-color: var(--orange); }
.nav__liste a[aria-current="page"] { color: var(--orange); border-bottom-color: var(--orange); }

/* --------------------------------------------------------------- boutons  */
/* Relevé : fond orange, texte blanc, BC Alphapipe, capitales pour les appels
   à l'action. La variable Avada --button_gradient_top_color valait le teal,
   mais aucun bouton visible du site ne l'emploie. C'est l'écran qui tranche. */
.bouton {
  display: inline-block;
  background: var(--orange); color: var(--blanc);
  font-family: var(--titre); font-size: 17px; line-height: 1.2;
  letter-spacing: 0.02em;
  padding: 15px 30px; border: 2px solid var(--orange);
  cursor: pointer; transition: background var(--transition), border-color var(--transition);
}
.bouton:hover, .bouton:focus-visible {
  background: var(--orange-f); border-color: var(--orange-f); color: var(--blanc);
}
.bouton--capitales { text-transform: uppercase; }
.bouton--blanc { background: var(--blanc); border-color: var(--blanc); color: var(--noir); }
.bouton--blanc:hover { background: var(--clair); border-color: var(--clair); color: var(--noir); }

/* ------------------------------------------------------------------ héros */
/* Photo en fond, pavé orange plein sur la moitié droite. */
.heros {
  position: relative;
  background: var(--sombre) center/cover no-repeat;
  min-height: clamp(420px, 44vw, 640px);
  display: flex; align-items: stretch;
}
.heros__grille {
  width: 100%; max-width: 1340px; margin-inline: auto;
  display: grid; grid-template-columns: 1fr 1fr;
}
.heros__pave {
  grid-column: 2;
  background: var(--orange); color: var(--blanc);
  padding: clamp(34px, 3.4vw, 56px) clamp(28px, 3vw, 48px);
  display: flex; flex-direction: column; justify-content: center;
  margin-right: clamp(0px, 4vw, 72px);
}
.heros__pave :is(h1, p) { color: var(--blanc); }
.heros__pave h1 { margin-bottom: 0; }
.heros__surtitre {
  font-family: var(--titre); font-size: clamp(1.05rem, .9rem + .6vw, 1.4rem);
  line-height: 1.35; margin-bottom: 18px;
}
.heros__accroche {
  font-family: var(--titre); font-size: clamp(1.5rem, 1.1rem + 1.7vw, 2.4rem);
  line-height: 1.15; letter-spacing: -0.015em; margin: 0 0 22px;
}
.heros__texte { font-size: 15px; line-height: 1.5; margin-bottom: 26px; }
.heros__texte span { display: block; }

/* ---------------------------------------------------------- pages internes
   Contenu à gauche dans la trame, photo pleine hauteur à droite jusqu'au
   bord de l'écran.                                                        */
.duo { display: grid; grid-template-columns: 1fr 1fr; align-items: stretch; }
.duo__contenu {
  max-width: 700px; margin-left: auto;
  padding: clamp(34px, 4vw, 68px) clamp(24px, 3vw, 48px) clamp(34px, 4vw, 68px) var(--gouttiere);
}
/* Cadrage en HAUT A GAUCHE, comme l'original. Centre, le recadrage rogne
   l'affiche du panneau sur sa gauche - c'est ce qui donnait l'impression que
   le texte "mangeait" la photo. */
.duo__visuel { background: var(--clair) left top / cover no-repeat; min-height: 380px; }
.duo--inverse .duo__contenu { margin-left: 0; margin-right: auto;
  padding-left: clamp(24px, 3vw, 48px); padding-right: var(--gouttiere); }
.duo--inverse .duo__visuel { grid-row: 1; grid-column: 1; }
/* Section teal de l'accueil : le texte occupe toute la largeur jusqu'a
   l'image, collee au bord DROIT (image 452 px sur 1440, soit 31,5 % -
   mesure sur l'original). */
.duo--texte-large { grid-template-columns: 1fr 31.5%; align-items: center; }
.duo__image { display: grid; place-items: center; padding: 0; }
.duo__image img { width: 100%; max-width: 584px; }

/* Les illustrations au trait sont petites à l'origine : sans bride, elles
   remplissent leur colonne et écrasent la mise en page. */
.illustration { max-width: 300px; margin-inline: auto; }

/* ---------------------------------------------------------- fil d'ariane  */
.ariane { font-size: 14px; font-weight: 200; margin-bottom: 22px; color: var(--gris); }
.ariane ol { display: flex; flex-wrap: wrap; gap: 8px; list-style: none; margin: 0; padding: 0; }
.ariane li + li::before { content: "/"; margin-right: 8px; }

/* -------------------------------------------------------- titre de rubrique */
/* Sur l'ACCUEIL, le libelle de rubrique est SOMBRE : rgb(20,22,23), 45px.
   Sur une page interne, le meme libelle est le H1 et il est ORANGE, 50px.
   D'ou la distinction par la balise : <p> sur l'accueil, <h1> ailleurs. */
.rubrique__mention {
  font-family: var(--titre); color: var(--noir); font-weight: 400;
  font-size: clamp(1.9rem, 1.4rem + 1.6vw, 2.8rem);
  line-height: 1.1; margin: 0 0 14px;
}
h1.rubrique__mention {
  color: var(--orange);
  font-size: clamp(2rem, 1.5rem + 1.8vw, 3.125rem);
}

/* ----------------------------------------------------------------- grille */
.grille { display: grid; gap: clamp(24px, 3vw, 44px); }
.grille--2 { grid-template-columns: repeat(2, 1fr); }
.grille--3 { grid-template-columns: repeat(3, 1fr); }
.grille--4 { grid-template-columns: repeat(4, 1fr); }
.grille--texte-visuel { grid-template-columns: 1fr 1fr; align-items: center; }
.grille--visuel-texte { grid-template-columns: 1fr 1fr; align-items: center; }
.aligne-droite { text-align: right; }
.aligne-droite .liste-atouts li { padding-left: 0; padding-right: 34px; }
.aligne-droite .liste-atouts li::before { left: auto; right: 0; }

/* légende orange sous les illustrations */
.legende {
  color: var(--orange); text-align: center;
  font-size: 15px; margin-top: 16px;
}

/* ------------------------------------------------------------------ listes */
/* Les etapes sont pucees par la marque CentralAFFICHE en 30x30, sans
   numerotation ni filet de separation : releve sur le site d'origine. */
.liste-etapes { list-style: none; margin: 0; padding: 0; }
.liste-etapes li {
  position: relative;
  padding: 11px 0 11px 62px;
}
.liste-etapes li::before {
  content: "";
  position: absolute; left: 8px; top: 12px;
  width: 30px; height: 30px;
  background: url("../img/logo-panneau.png") center / contain no-repeat;
}
/* Sur fond teal, la marque existe en version blanche : la noire y disparait. */
.section--teal .liste-etapes li::before {
  background-image: url("../img/logo-panneau-blanc.png");
}

.liste-atouts { list-style: none; margin: 0; padding: 0; }
.liste-atouts li { position: relative; padding: 10px 0 10px 34px; }
.liste-atouts li::before {
  content: ""; position: absolute; left: 0; top: 1.15em;
  width: 16px; height: 2px; background: var(--orange);
}

/* --------------------------------------------------------- séparateur oblique
   Relevé entre la section AFFIgape et la section teal, puis sous celle-ci. */
/* Separateurs obliques : 50 px de haut, et le triangle n'occupe que 48 % de la
   largeur - l'aqua cale a GAUCHE, l'orange cale a DROITE. Mesure au navigateur
   (svg de 915 px dans une section de 1905). Un triangle pleine largeur, ou
   oriente a l'envers, se voit immediatement. */
.oblique { height: 50px; width: 100%; display: block; overflow: hidden; }
.oblique svg { width: 48%; height: 100%; display: block; }
.oblique--droite svg { margin-left: auto; }
/* Sur l'ACCUEIL les deux separateurs sont plus larges qu'en pages internes :
   79 % contre 48 % (pointe vers 21 % de la largeur, plein 50 px au bord
   droit, mesure sur l'original a 1440 px). */
.oblique--large svg { width: 79%; }

/* ------------------------------------------------------------- pictogrammes */
/* Pictogrammes : cercles orange de 104 px, legende en gras sous l'icone.
   Pas de titre intermediaire sur le site d'origine. */
.carte-picto { text-align: center; }
.carte-picto img { width: 104px; height: 104px; margin: 0 auto 22px; }
/* Legendes en blanc, graisse NORMALE : mesure sur l'original (weight 400). */
.carte-picto p { font-weight: 400; font-size: 16px; line-height: 1.5; }

/* ------------------------------------------------------------------ équipe */
/* Les portraits sont des avatars dessines sur fond gris clair, carres et non
   ronds. Le nom et la fonction n'apparaissent PAS sous la photo : ils se
   revelent AU SURVOL, en blanc sur un voile sombre. Releve a l'ecran. */
.equipe { list-style: none; margin: 0; padding: 0; }
.membre { position: relative; overflow: hidden; background: var(--clair); }
.membre img { width: 100%; display: block; }

.membre__legende {
  position: absolute; inset: 0;
  display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 6px; padding: 16px; text-align: center;
  background: rgba(20, 22, 23, .72); color: var(--blanc);
  opacity: 0; transition: opacity var(--transition);
}
.membre:hover .membre__legende,
.membre:focus-within .membre__legende { opacity: 1; }

.membre__nom  { font-family: var(--titre); font-size: 1.3rem; margin: 0; color: var(--blanc); }
.membre__role { font-size: 15px; margin: 0; color: var(--blanc); }

/* Sans survol possible (tactile), la legende reste lisible en permanence :
   masquer une information au doigt reviendrait a la supprimer. */
@media (hover: none) {
  .membre__legende { opacity: 1; background: rgba(20, 22, 23, .62); }
}

/* -------------------------------------------------------------- références */
/* Les logos sont en couleur sur le site d'origine : pas de désaturation. */
/* Carrousel de références, refait d'après celui du site d'origine (greffon
   « Logo Showcase Ultimate » + Swiper) sans dépendance — voir carrousel.js.
   Dimensions relevées dans la CSS du greffon : cellule de 130 px de haut
   minimum, logo plafonné à 150 px de large, flèches de 35 px bordées de
   #eaeaf1. Nombre de logos visibles et écart suivant les points de rupture
   du réglage d'origine : 5/30 px, 4/20 px (<1199), 3/15 px (<979),
   2/15 px (<768). */
.carrousel { position: relative; padding: 0 30px; --visibles: 5; --ecart: 30px; }

/* Sans script, la liste reste une rangée défilable au doigt ; carrousel.js
   pose carrousel--actif, qui ferme la fenêtre et affiche les flèches. */
.carrousel__fenetre { overflow-x: auto; }
.carrousel--actif .carrousel__fenetre { overflow: hidden; }

.carrousel__piste { display: flex; align-items: center; list-style: none; margin: 0; padding: 0; }
.carrousel--actif .carrousel__piste { transition: transform 1000ms; }
/* Recalage instantané entre deux pas de la boucle. !important : doit gagner
   aussi pendant le survol, quel que soit l'état de la piste. */
.carrousel__piste--fige { transition: none !important; }

/* L'original fait 130 px de cellule et 150 px de logo maxi : reduits d'un
   quart a la demande du client, pour un bandeau moins haut. */
.carrousel__piste li {
  flex: 0 0 calc((100% - (var(--visibles) - 1) * var(--ecart)) / var(--visibles));
  margin-right: var(--ecart);
  min-height: 96px;
  display: flex; align-items: center; justify-content: center;
}
.carrousel__piste a { display: flex; align-items: center; justify-content: center; width: 100%; }
.carrousel__piste img { width: 100%; max-width: 115px; transition: transform 350ms; }
.carrousel__piste li:hover img { transform: scale(1.1); }

.carrousel__fleche {
  position: absolute; top: 50%; transform: translateY(-50%);
  display: none;
  width: 35px; height: 35px; padding: 0;
  align-items: center; justify-content: center;
  background: var(--blanc); border: 1px solid #eaeaf1;
  color: var(--noir); cursor: pointer;
  transition: background-color 300ms, border-color 300ms;
}
.carrousel--actif .carrousel__fleche { display: inline-flex; }
.carrousel__fleche--prec { left: 0; }
.carrousel__fleche--suiv { right: 0; }
/* #ff5500 : couleur de survol du greffon, que l'original ne surchargeait
   pas — légèrement plus vive que l'orange de la charte. */
.carrousel__fleche:hover { background: #ff5500; border-color: #ff5500; }
.carrousel__fleche svg { width: 6px; height: 11px; fill: currentColor; }

@media (max-width: 1198px) { .carrousel { --visibles: 4; --ecart: 20px; } }
@media (max-width: 978px)  { .carrousel { --visibles: 3; --ecart: 15px; } }
@media (max-width: 767px)  { .carrousel { --visibles: 2; --ecart: 15px; } }

/* Bandeau de references moins haut que les .section standard (demande
   client) : l'original ne laisse que ~30 px entre logos et bouton. */
.section--references { padding-block: 52px 56px; }
.section--references .bloc-action--bas { margin-top: 28px; }

/* --------------------------------------------------------------- contact  */
/* L'original n'a NI titre "Nos coordonnees", NI intitules "Adresse
   electronique" / "Telephone" : seulement les trois lignes, en 22px. */
.coordonnees { list-style: none; margin: 0; padding: 0; }
.coordonnees li { padding: 10px 0; }
.coordonnees a { font-size: 22px; line-height: 1.45; }

/* Feuille posee au-dessus de chaque logo de societe */
.logo-societe { margin-bottom: 30px; }
.logo-societe img { max-width: 300px; }
.logo-societe .feuille { width: 47px; height: 48px; margin-bottom: 6px; }

.formulaire { display: grid; gap: 18px; grid-template-columns: repeat(2, 1fr); }
.champ { display: flex; flex-direction: column; gap: 6px; }
.champ--large { grid-column: 1 / -1; }

/* L'original n'affiche AUCUN intitule : l'indication est dans le champ, avec
   l'asterisque des champs obligatoires ("Nom*", "Mail*"...).
   L'intitule reste dans le HTML mais masque visuellement : un lecteur d'ecran
   en a besoin, et un champ dont l'indication disparait a la saisie n'est plus
   identifiable sans lui. */
.champ label {
  position: absolute; width: 1px; height: 1px;
  margin: -1px; padding: 0; overflow: hidden;
  clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap;
}
.champ ::placeholder { color: rgba(20,22,23,.55); opacity: 1; }
/* Bordure et fond releves sur le formulaire d'origine : 1px rgba(19,21,22,.3)
   sur fond transparent, et non un champ blanc borde de gris. */
.champ :is(input, textarea) {
  font-family: var(--texte); font-size: 16px; padding: 13px 16px;
  border: 1px solid rgba(19,21,22,.3); background: transparent; color: var(--noir);
  transition: border-color var(--transition);
}
.champ :is(input, textarea):focus { border-color: var(--orange); outline: none; }
.champ textarea { resize: vertical; min-height: 132px; }

.pot-de-miel { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

.message { padding: 16px 20px; margin-bottom: 24px; }
.message--succes { background: #e6f4ea; border-left: 4px solid #1e7b34; }
.message--erreur { background: #fdecea; border-left: 4px solid #c0281c; }

/* ------------------------------------------------------------ pied de page */
/* Fond teal, quatre colonnes, mention centrée dessous. */
.pied {
  background: var(--teal); color: rgba(255,255,255,.78);
  padding-block: clamp(44px, 4.5vw, 68px) 0; font-size: 15px;
}
.pied h2 {
  font-family: var(--titre); font-size: 1.15rem; color: var(--blanc);
  margin: 0 0 20px; letter-spacing: 0;
}
.pied a { color: rgba(255,255,255,.78); }
.pied a:hover { color: var(--orange); }
.pied ul { list-style: none; margin: 0; padding: 0; }
.pied li { padding: 6px 0; }
.pied__logo { width: 240px; }

.reseaux { display: flex; gap: 14px; }
.reseaux a {
  display: grid; place-items: center; width: 42px; height: 42px;
  border: 1px solid rgba(255,255,255,.4); color: var(--blanc);
}
.reseaux a:hover { border-color: var(--orange); color: var(--orange); }
.reseaux svg { width: 20px; height: 20px; fill: currentColor; }

.pied__bas {
  margin-top: 40px; padding-block: 26px;
  text-align: center; font-size: 14px; color: rgba(255,255,255,.7);
}

/* ============================================ classes ex-styles en ligne
   Ces regles remplacent 35 attributs style="..." qui etaient INOPERANTS en
   production : la politique de securite de contenu (style-src 'self', sans
   'unsafe-inline') bloque tout attribut style. Le defaut etait invisible en
   developpement, ou aucun en-tete CSP n'etait envoye.
   Les chemins d'images sont ici relatifs a CETTE feuille, donc valables quelle
   que soit la profondeur de la page - avantage supplementaire sur le style
   en ligne, qui devait etre ajuste page par page.                          */

.centre            { text-align: center; }
.bloc-action       { margin-top: 26px; }
.bloc-action--haut { margin-top: 34px; }
.bloc-action--bas  { margin-top: 52px; }
.section--sans-bas { padding-bottom: 0; }
.section--suite    { padding-top: 34px; }
.mesure-lecture    { max-width: 820px; }
.conteneur--etroit { max-width: 720px; }

.note { font-size: 13px; font-weight: 200; }
.note--espacee { margin-top: 26px; font-size: 14px; }

.titre-suite { margin-top: 38px; }
.illustration--espacee { margin-top: 34px; }
.legende + .legende { margin-top: 8px; }
.bouton + .bouton { margin-left: 10px; }
.pied__bas--seul { margin-top: 0; border-top: 0; }

.logos-marques { max-width: 300px; margin-bottom: 34px; }
.logos-marques img { margin-bottom: 22px; }
.logos-marques img:last-child { margin-bottom: 0; }

/* section teal de l'accueil */
.duo--teal { background: var(--teal); }
/* Le texte est cale a GAUCHE du viewport (20 px) et court sur toute la
   colonne : pas de conteneur centre. Titre 35 px et paragraphes 18px/22px
   releves dans la capture (fusion-text-8) - c'est cet interligne serre,
   avec la pleine largeur, qui rend le bloc aussi peu haut que l'original. */
.duo--teal .duo__contenu {
  color: var(--blanc);
  max-width: none; margin-left: 0;
  padding: 45px clamp(24px, 3vw, 60px) 40px 20px;
}
.duo--teal .duo__contenu h2 { font-size: 35px; margin: 0 0 30px; }
.duo--teal .duo__contenu p { font-size: 18px; line-height: 22px; margin: 0 0 30px; }
.duo--teal :is(h1, h2, h3) { color: var(--blanc); }

/* visuels de fond, un par page */
/* Le cadrage differe D'UNE PAGE A L'AUTRE : AFFIpige est cale a gauche
   (0% 0%), AFFIgape a droite (100% 0%). Un cadrage uniforme tronque l'affiche
   de moitie sur l'une des deux. Mesure au navigateur. */
.heros--accueil          { background-image: url("../img/entete_v5.png"); }
.duo__visuel--accueil    { background-image: url("../img/acceuil-panneau-2.jpeg"); }
.duo__visuel--affipige   { background-image: url("../img/Affipige-entete-v3.png"); background-position: 0% 0%; }
.duo__visuel--affigape   { background-image: url("../img/entete-affigape-v4.png"); background-position: 100% 0%; }

/* ================================================== apparition au defilement
   Le site d'origine anime l'entree des blocs dans l'ecran (Avada pose une
   classe au passage). On reproduit le principe sans dependance : l'element
   part legerement decale et transparent, et revient a sa place quand il entre
   dans la fenetre. La classe est posee par assets/js/apparition.js.

   Regle d'or : l'etat de DEPART n'est applique que si le script tourne
   (attribut data-anime sur <html>). Sans JavaScript, rien n'est masque - une
   animation ratee ne doit jamais faire disparaitre du contenu.              */
/* PAS de will-change ici : la regle porte sur des dizaines d'elements, et
   will-change force autant de couches de composition. Le navigateur s'essouffle
   au point de ne plus repondre - constate le 2026-08-14. C'est une aide a
   reserver a un element isole et bref, jamais a une regle collective. */
[data-anime] .apparait {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 620ms ease, transform 620ms cubic-bezier(.22,.61,.36,1);
}
[data-anime] .apparait--gauche { transform: translateX(-34px); }
[data-anime] .apparait--droite { transform: translateX(34px); }

[data-anime] .apparait.est-visible {
  opacity: 1;
  transform: none;
}

/* -------------------------------------------------------------- responsive */
@media (max-width: 1100px) {
  .heros__grille { grid-template-columns: 38% 62%; }
}

@media (max-width: 980px) {
  .grille--3, .grille--4 { grid-template-columns: repeat(2, 1fr); }
  .grille--texte-visuel, .grille--visuel-texte { grid-template-columns: 1fr; }
  .grille--visuel-texte > :first-child { order: 2; }
  .aligne-droite { text-align: left; }
  .aligne-droite .liste-atouts li { padding-left: 34px; padding-right: 0; }
  .aligne-droite .liste-atouts li::before { left: 0; right: auto; }
  .tiret--droite { margin-left: 0; }

  /* .heros est un conteneur flex : un ::before y devient un element flex et
     s'effondre. En petite largeur on repasse en bloc pour que la bande de
     photo au-dessus du pave orange ait bien une hauteur. */
  .heros { display: block; min-height: 0; }
  .heros::before { content: ""; display: block; height: 220px; }
  .heros__grille { grid-template-columns: 1fr; max-width: none; }
  .heros__pave { grid-column: 1; margin-right: 0; }

  .duo { grid-template-columns: 1fr; }
  .duo__contenu, .duo--inverse .duo__contenu, .duo--teal .duo__contenu {
    max-width: var(--largeur); margin-inline: auto;
    padding-inline: var(--gouttiere);
  }
  .duo__visuel, .duo--inverse .duo__visuel { grid-row: auto; grid-column: 1; min-height: 300px; }
}

@media (max-width: 800px) {
  .nav__bascule { display: block; }
  .entete { position: relative; }
  .entete__barre { position: relative; min-height: 84px; }
  .entete__droite { flex-direction: row; align-items: center; gap: 4px; }
  .entete__logo img { width: 180px; }
  .nav__liste {
    display: none; position: absolute; left: 0; right: 0; top: 100%;
    flex-direction: column; align-items: stretch; gap: 0;
    background: var(--teal); padding: 8px 0 20px;
    box-shadow: 0 18px 30px rgba(0,0,0,.22); z-index: 50;
  }
  .nav[data-ouvert="true"] .nav__liste { display: flex; }
  .nav__liste a { display: block; padding: 14px var(--gouttiere); border-bottom: 0; }
  .nav__liste a:hover, .nav__liste a[aria-current="page"] {
    background: rgba(255,255,255,.08); border-bottom: 0;
  }
}

@media (max-width: 620px) {
  .grille--2, .grille--3, .grille--4 { grid-template-columns: 1fr; }
  .formulaire { grid-template-columns: 1fr; }
}

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { transition-duration: 1ms !important; animation-duration: 1ms !important; }
  /* Le contenu doit rester visible : on annule l'etat de depart, pas seulement
     la duree - sinon un bloc jamais observe resterait transparent. */
  [data-anime] .apparait { opacity: 1 !important; transform: none !important; }
}
