/* ==========================================================================
   Auto Pièces VSP : blocs Gutenberg natifs des pages (2026-10-29)

   Chargé après generate-style (et de préférence après apv-theme) sur le site,
   et dans l'éditeur de blocs. Compositions proposées dans
   l'éditeur (dossier patterns/).

   Couleurs : uniquement les variables des couleurs globales de GeneratePress
   (Customizer) : --bleu, --bleu-fonce, --bleu-clair, --jaune, --texte, --noir,
   --gris-fond, --bordure, --blanc ; nuances dérivées de theme.css
   (--apv-jaune-survol, --apv-filet-clair).

   Portée : « :is(.entry-content, .is-root-container) » = contenu de la page sur
   le site, zone de contenu dans l'éditeur (dans l'iframe, avec ou sans le
   préfixe .editor-styles-wrapper ajouté par add_editor_style). Les classes
   apv-* et is-style-* n'existent pas dans les pages Elementor : rien ne les
   touche pendant la transition.

   Spécificité : theme.css règle le contenu par « body:not(.elementor-page)
   .entry-content … » (0,2,2). Les règles qui doivent passer devant ont au
   moins trois classes (portée + composant + bloc). Aucun !important.

   Sommaire : 0 polices et jetons de l'éditeur / 1 jetons des blocs /
   2 base de l'éditeur / 3 blocs natifs / 4 sections et styles de groupe /
   5 compositions apv-* / 6 mouvement réduit
   ========================================================================== */

/* 0. Polices et jetons pour l'éditeur -------------------------------------- */
/* Mêmes fichiers que theme.css (le navigateur ne les charge qu'une fois sur le
   site) : l'éditeur ne reçoit pas theme.css. */
@font-face {
  font-family: "Sora";
  src: url("../fonts/sora-variable-latin.woff2") format("woff2");
  font-weight: 100 800;
  font-style: normal;
  font-display: swap;
  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: "Figtree";
  src: url("../fonts/figtree-variable-latin.woff2") format("woff2");
  font-weight: 300 900;
  font-style: normal;
  font-display: swap;
  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;
}

/* Copie des jetons de theme.css, posée seulement sur la zone de l'éditeur
   (.is-root-container n'existe pas sur le site) : source de vérité = theme.css. */
.is-root-container {
  --apv-police-titre: "Sora", "Helvetica Neue", Arial, sans-serif;
  --apv-police-texte: "Figtree", "Helvetica Neue", Arial, sans-serif;
  --apv-taille-0: 0.875rem;
  --apv-taille-1: 1.0625rem;
  --apv-taille-2: 1.25rem;
  --apv-taille-3: clamp(1.375rem, 1.2rem + 0.6vw, 1.625rem);
  --apv-taille-4: clamp(1.75rem, 1.3rem + 1.8vw, 2.5rem);
  --apv-taille-5: clamp(2.125rem, 1.4rem + 3.2vw, 3.75rem);
  --apv-interligne: 1.65;
  --apv-mesure: 68ch;
  --apv-jaune-survol: color-mix(in srgb, var(--jaune) 90%, var(--noir));
  --apv-filet-clair: color-mix(in srgb, var(--blanc) 22%, var(--bleu-fonce));
  --apv-rayon: 8px;
  --apv-rayon-carte: 14px;
  --apv-rayon-barre: 18px;
  --apv-filet: 4px;
  --apv-gouttiere: clamp(0.75rem, 3vw, 2rem);
  --apv-focus: 3px solid var(--bleu);
  --apv-titres: var(--titres, var(--bleu-fonce));
  --apv-mesure-section: 100%;
  --apv-carte-bordure: 1px solid var(--bordure);
  --apv-carte-bordure-survol: var(--jaune);
  --apv-carte-ombre: 0 1px 2px color-mix(in srgb, var(--bleu-fonce) 6%, transparent), 0 4px 14px color-mix(in srgb, var(--bleu-fonce) 6%, transparent);
  --apv-carte-ombre-survol: 0 4px 8px color-mix(in srgb, var(--bleu-fonce) 8%, transparent), 0 16px 32px color-mix(in srgb, var(--bleu-fonce) 14%, transparent);
  --apv-carte-elevation: -3px;
  --apv-transition-carte: transform 200ms ease, box-shadow 200ms ease, border-color 200ms ease;
  --apv-carte-fixe-bordure-survol: color-mix(in srgb, var(--bleu) 40%, var(--bordure));
  --apv-transition-carte-fixe: border-color 200ms ease;
}

/* 1. Jetons propres aux blocs ------------------------------------------------ */
:root,
.is-root-container {
  /* Entre deux sections : 56 px à 390 px, 80 px à 960 px, 96 px au plus (décision client du 2026-10-29) */
  --apv-espace-section: clamp(3.5rem, 2.25rem + 3.5vw, 6rem);
  /* Haut et bas d'une section colorée bord à bord (la marge extérieure s'y ajoute) */
  --apv-pad-section-couleur: clamp(2.5rem, 1.75rem + 3vw, 4.5rem);
  --apv-pad-panneau: clamp(1.75rem, 5vw, 3.5rem);     /* intérieur d'un panneau coloré */
  --apv-pad-carte: clamp(1.25rem, 2.5vw, 1.75rem);    /* intérieur d'une carte */
  /* Bord à bord : le contenu revient à 1200 px par un remplissage latéral */
  --apv-pad-pleine-largeur: max(var(--apv-gouttiere), (100% - var(--apv-largeur-section, 75rem)) / 2);
}

/* 2. Base de l'éditeur (le site a la même chose dans theme.css, section 7) --- */
.is-root-container {
  font-family: var(--apv-police-texte);
  font-size: var(--apv-taille-1);
  line-height: var(--apv-interligne);
  color: var(--texte);
}

.is-root-container :is(h1, h2, h3, h4, h5, h6).wp-block-heading {
  font-family: var(--apv-police-titre);
  line-height: 1.15;
  letter-spacing: -0.015em;
  color: var(--apv-titres);
  text-wrap: pretty;
}

.is-root-container h1.wp-block-heading { font-size: var(--apv-taille-5); font-weight: 800; letter-spacing: -0.03em; }
.is-root-container h2.wp-block-heading { font-size: var(--apv-taille-4); font-weight: 800; letter-spacing: -0.025em; }
.is-root-container h3.wp-block-heading { font-size: var(--apv-taille-3); font-weight: 700; }
.is-root-container h4.wp-block-heading { font-size: var(--apv-taille-2); font-weight: 700; }

.is-root-container :is(h2, h3).wp-block-heading {
  margin-top: 1.6em;
  margin-bottom: 0.5em;
}

.is-root-container p {
  margin: 0 0 1em;
}

.is-root-container a {
  color: var(--bleu);
  text-decoration-thickness: 1px;
  text-underline-offset: 0.18em;
}

.is-root-container li::marker {
  color: var(--bleu);
}

.is-root-container .wp-block-image img {
  height: auto;
  border-radius: var(--apv-rayon-carte);
}

/* Boutons dans l'éditeur : gabarit des .apv-btn (theme.css, section 4) */
.is-root-container .wp-block-button .wp-block-button__link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 2.75rem;
  padding: 0.6875rem 1.375rem;
  border: 2px solid var(--jaune);
  border-radius: var(--apv-rayon);
  background-color: var(--jaune);
  font-family: var(--apv-police-titre);
  font-size: 1rem;
  font-weight: 800;
  line-height: 1.2;
  color: var(--bleu-fonce);
  text-decoration: none;
}

.is-root-container .wp-block-button.is-style-outline .wp-block-button__link {
  border-color: var(--bleu);
  background-color: transparent;
  color: var(--bleu);
}

/* 3. Blocs natifs dans le contenu ------------------------------------------- */

/* Boutons : « Secondaire » (style du thème) = « Contour » de WordPress.
   Passe devant « body .wp-block-button:not(.is-style-outline) … » (0,3,1). */
:is(.entry-content, .is-root-container) .wp-block-button.is-style-secondaire .wp-block-button__link {
  border-color: var(--bleu);
  background-color: transparent;
  color: var(--bleu);
}

:is(.entry-content, .is-root-container) .wp-block-button.is-style-secondaire .wp-block-button__link:hover {
  border-color: var(--bleu);
  background-color: var(--bleu);
  color: var(--blanc);
}

:is(.entry-content, .is-root-container) .wp-block-buttons {
  gap: 0.75rem;
  margin-block: 1.5rem;
}

/* Alignement des boutons (décision client du 2026-10-29) : jamais calés à gauche
   sous un bloc. Par défaut centrés ; alignés à droite quand ils suivent un
   texte, une liste ou une grille. Un réglage explicite de l'éditeur (gauche,
   centre, droite) reste prioritaire : il pose une classe is-content-justification-*.
   Exceptions qui gardent leur mise en page : appel à l'action (apv-cta), cartes
   à image (apv-carte-image), widgets, page Contact. */
:is(.entry-content, .is-root-container) .wp-block-buttons:not([class*="is-content-justification-"]) {
  justify-content: center;
}

:is(.entry-content, .is-root-container) :is(p, ul, ol, .wp-block-list, .wp-block-group, .wp-block-columns, .wp-block-table, .wp-block-details) + .wp-block-buttons:not([class*="is-content-justification-"]) {
  justify-content: flex-end;
}

:is(.entry-content, .is-root-container) .wp-block-buttons.is-content-justification-center {
  justify-content: center;
}

/* Patterns / ul utilisés comme grille dans un gabarit PHP */
ul.apv-services__grille {
  margin: 0;
  padding: 0;
  list-style: none;
}

/* Le gabarit de bouton de theme.css ne prévoit pas de transition sur les blocs */
.entry-content .wp-block-button .wp-block-button__link {
  transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}

/* Image « Arrondie » : coins de carte (le site arrondit déjà les images du
   contenu ; le style le garantit hors du contenu et dans l'éditeur). */
:is(.entry-content, .is-root-container) .wp-block-image.is-style-arrondi img {
  border-radius: var(--apv-rayon-carte);
}

/* Liste « Coches » : pastille bleu clair et coche bleue dessinées en CSS */
:is(.entry-content, .is-root-container) ul.is-style-coches {
  margin-left: 0; /* GeneratePress : 3em sur toutes les listes */
  padding-left: 0;
  list-style: none;
}

:is(.entry-content, .is-root-container) ul.is-style-coches > li {
  position: relative;
  padding-left: 2.125rem;
}

:is(.entry-content, .is-root-container) ul.is-style-coches > li + li {
  margin-top: 0.6em;
}

/* Pastille */
:is(.entry-content, .is-root-container) ul.is-style-coches > li::before {
  content: "";
  position: absolute;
  top: 0.15em;
  left: 0;
  width: 1.375rem;
  height: 1.375rem;
  border-radius: 50%;
  background-color: var(--bleu-clair);
}

/* Coche : coin bas-droit d'un rectangle tourné de 45° */
:is(.entry-content, .is-root-container) ul.is-style-coches > li::after {
  content: "";
  position: absolute;
  top: calc(0.15em + 0.3rem);
  left: 0.5rem;
  width: 0.375rem;
  height: 0.6875rem;
  border-right: 2px solid var(--bleu);
  border-bottom: 2px solid var(--bleu);
  transform: rotate(45deg);
}

/* Séparateur : par défaut le filet jaune du logo (court, épais) ;
   « Large » : trait fin sur toute la largeur. */
:is(.entry-content, .is-root-container) hr.wp-block-separator {
  height: 0;
  margin-block: 2.5rem;
  border: 0;
  border-top: var(--apv-filet) solid var(--jaune);
  border-radius: 2px;
  background: none;
  opacity: 1;
}

:is(.entry-content, .is-root-container) hr.wp-block-separator:not(.is-style-wide):not(.is-style-dots) {
  width: 3.5rem;
  margin-inline: 0;
}

:is(.entry-content, .is-root-container) hr.wp-block-separator:not(.is-style-wide):not(.is-style-dots).aligncenter {
  margin-inline: auto;
}

:is(.entry-content, .is-root-container) hr.wp-block-separator.is-style-wide {
  border-top: 1px solid var(--bordure);
}

:is(.entry-content, .is-root-container) hr.wp-block-separator.is-style-dots {
  border: 0;
  color: var(--texte);
}

/* Galerie : intervalle régulier, coins de carte, légende sous l'image
   (pas de voile en dégradé sur la photo) */
:is(.entry-content, .is-root-container) .wp-block-gallery.has-nested-images {
  --wp--style--unstable-gallery-gap: 0.75rem;
  gap: 0.75rem;
  margin-block: 2rem;
}

:is(.entry-content, .is-root-container) .wp-block-gallery.has-nested-images figure.wp-block-image {
  margin: 0;
}

:is(.entry-content, .is-root-container) .wp-block-gallery.has-nested-images figure.wp-block-image img {
  border-radius: var(--apv-rayon-carte);
}

:is(.entry-content, .is-root-container) .wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption)::before {
  display: none;
}

:is(.entry-content, .is-root-container) .wp-block-gallery.has-nested-images figure.wp-block-image figcaption {
  position: static;
  max-height: none;
  margin: 0;
  padding: 0.5rem 0 0;
  overflow: visible;
  background: none;
  font-size: var(--apv-taille-0);
  line-height: 1.45;
  text-align: left;
  text-shadow: none;
  color: var(--texte);
}

:is(.entry-content, .is-root-container) .wp-block-gallery.has-nested-images figure.wp-block-image figcaption a {
  color: var(--bleu);
}

/* Citation : source sous le texte */
:is(.entry-content, .is-root-container) .wp-block-quote cite {
  display: block;
  margin-top: 0.75rem;
  font-family: var(--apv-police-texte);
  font-size: var(--apv-taille-0);
  font-style: normal;
  font-weight: 600;
  color: var(--texte);
}

:is(.entry-content, .is-root-container) .wp-block-quote > :last-child {
  margin-bottom: 0;
}

/* Tableau : filets de theme.css, sans les traits épais de WordPress */
:is(.entry-content, .is-root-container) .wp-block-table {
  margin-block: 2rem;
  overflow-x: auto;
}

:is(.entry-content, .is-root-container) .wp-block-table :is(thead, tfoot) {
  border: 0;
}

:is(.entry-content, .is-root-container) .wp-block-table table {
  margin: 0;
}

:is(.entry-content, .is-root-container) .wp-block-table.is-style-stripes {
  border-bottom: 0;
}

:is(.entry-content, .is-root-container) .wp-block-table.is-style-stripes tbody tr:nth-child(odd) {
  background-color: var(--gris-fond);
}

:is(.entry-content, .is-root-container) .wp-block-table figcaption {
  margin-top: 0.5rem;
  font-size: var(--apv-taille-0);
  color: var(--texte);
}

/* Détails (core/details) : accordéon, dans une FAQ ou seul */
:is(.entry-content, .is-root-container) .wp-block-details {
  max-width: min(52rem, 100%);
  margin: 0;
  border-bottom: 1px solid var(--bordure);
}

:is(.entry-content, .is-root-container) :not(.wp-block-details) + .wp-block-details,
:is(.entry-content, .is-root-container) .wp-block-details:first-child {
  border-top: 1px solid var(--bordure);
}

:is(.entry-content, .is-root-container) .wp-block-details > summary {
  position: relative;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
  min-height: 3.5rem;
  padding: 0.875rem 0.25rem;
  font-family: var(--apv-police-titre);
  font-size: 1.125rem;
  font-weight: 700;
  line-height: 1.35;
  letter-spacing: -0.01em;
  color: var(--noir);
  list-style: none;
  cursor: pointer;
  transition: color 0.2s ease;
}

:is(.entry-content, .is-root-container) .wp-block-details > summary::-webkit-details-marker {
  display: none;
}

/* Marqueur : chevron dans une pastille, tourne à l'ouverture */
:is(.entry-content, .is-root-container) .wp-block-details > summary::after {
  content: "";
  flex: 0 0 auto;
  width: 2rem;
  height: 2rem;
  border-radius: 50%;
  background-color: var(--bleu-clair);
  background-image:
    linear-gradient(var(--bleu), var(--bleu)),
    linear-gradient(var(--bleu), var(--bleu));
  background-position: center;
  background-repeat: no-repeat;
  background-size: 0.75rem 2px, 2px 0.75rem;
  transition: transform 0.2s ease, background-size 0.2s ease;
}

/* Ouvert : le « + » devient « − » (la barre verticale se replie) */
:is(.entry-content, .is-root-container) .wp-block-details[open] > summary::after {
  background-size: 0.75rem 2px, 2px 0;
  transform: rotate(180deg);
}

:is(.entry-content, .is-root-container) .wp-block-details > summary:hover {
  color: var(--bleu);
}

:is(.entry-content, .is-root-container) .wp-block-details > summary:focus-visible {
  outline: var(--apv-focus);
  outline-offset: 2px;
  border-radius: var(--apv-rayon);
}

:is(.entry-content, .is-root-container) .wp-block-details > :not(summary) {
  max-width: var(--apv-mesure-section);
  margin: 0 0 1em;
  padding-inline: 0.25rem;
}

:is(.entry-content, .is-root-container) .wp-block-details > :last-child:not(summary) {
  padding-bottom: 0.5rem;
}

/* 4. Sections et styles de groupe ------------------------------------------ */

/* Rythme : une section (groupe de premier niveau, colonnes, compositions)
   respire plus qu'un paragraphe. */
:is(.entry-content, .is-root-container) > :is(.wp-block-group, .wp-block-columns, .wp-block-gallery) {
  margin-block: var(--apv-espace-section);
}

/* Deux sections colorées bord à bord se touchent */
:is(.entry-content, .is-root-container) > .alignfull:is(.is-style-fond-bleu-clair, .is-style-fond-gris, .is-style-fond-bleu-fonce, .apv-cta) + .alignfull:is(.is-style-fond-bleu-clair, .is-style-fond-gris, .is-style-fond-bleu-fonce, .apv-cta) {
  margin-top: calc(-1 * var(--apv-espace-section));
}

/* Texte courant dans une section : toute la largeur du contenu (décision client
   du 2026-10-29 : plus de paragraphe coupé aux trois quarts). Articles : largeur
   de lecture (--apv-mesure-section redéfinie sur body.single-post, theme.css). */
:is(.entry-content, .is-root-container) .wp-block-group :is(p, ul, ol):not(.apv-chiffre__valeur):not(.apv-chiffre__libelle) {
  max-width: var(--apv-mesure-section);
}

:is(.entry-content, .is-root-container) .wp-block-group :is(p, h2, h3).has-text-align-center {
  margin-inline: auto;
}

/* Premier et dernier élément d'un panneau : pas de marge qui s'ajoute au remplissage */
:is(.entry-content, .is-root-container) :is(.is-style-fond-bleu-clair, .is-style-fond-gris, .is-style-fond-bleu-fonce, .apv-bandeau, .apv-cta, .apv-service, .apv-chiffre) > :first-child,
:is(.entry-content, .is-root-container) :is(.is-style-fond-bleu-clair, .is-style-fond-gris, .is-style-fond-bleu-fonce, .apv-bandeau, .apv-cta, .apv-service, .apv-chiffre) > .wp-block-group__inner-container > :first-child {
  margin-top: 0;
}

:is(.entry-content, .is-root-container) :is(.is-style-fond-bleu-clair, .is-style-fond-gris, .is-style-fond-bleu-fonce, .apv-bandeau, .apv-cta, .apv-service, .apv-chiffre) > :last-child,
:is(.entry-content, .is-root-container) :is(.is-style-fond-bleu-clair, .is-style-fond-gris, .is-style-fond-bleu-fonce, .apv-bandeau, .apv-cta, .apv-service, .apv-chiffre) > .wp-block-group__inner-container > :last-child {
  margin-bottom: 0;
}

/* Fonds : panneau arrondi dans la largeur du texte ; bord à bord avec « Pleine largeur » */
:is(.entry-content, .is-root-container) .wp-block-group:is(.is-style-fond-bleu-clair, .is-style-fond-gris, .is-style-fond-bleu-fonce) {
  padding: var(--apv-pad-panneau);
  border-radius: var(--apv-rayon-barre);
}

:is(.entry-content, .is-root-container) .wp-block-group.alignfull:is(.is-style-fond-bleu-clair, .is-style-fond-gris, .is-style-fond-bleu-fonce) {
  padding-block: var(--apv-pad-section-couleur);
  padding-inline: var(--apv-pad-pleine-largeur);
  border-radius: 0;
}

:is(.entry-content, .is-root-container) .wp-block-group.is-style-fond-bleu-clair {
  background-color: var(--bleu-clair);
}

:is(.entry-content, .is-root-container) .wp-block-group.is-style-fond-gris {
  background-color: var(--gris-fond);
}

/* Fond bleu foncé : texte clair automatiquement (et cartes blanches intactes) */
:is(.entry-content, .is-root-container) .wp-block-group:is(.is-style-fond-bleu-fonce, .apv-cta) {
  background-color: var(--bleu-fonce);
  color: var(--blanc);
}

:is(.entry-content, .is-root-container) .wp-block-group:is(.is-style-fond-bleu-fonce, .apv-cta) :is(h1, h2, h3, h4, h5, h6, p, li, summary, figcaption, cite, td, th) {
  color: var(--blanc);
}

:is(.entry-content, .is-root-container) .wp-block-group:is(.is-style-fond-bleu-fonce, .apv-cta) li::marker {
  color: var(--jaune);
}

:is(.entry-content, .is-root-container) .wp-block-group:is(.is-style-fond-bleu-fonce, .apv-cta) a:not(.wp-block-button__link) {
  color: var(--blanc);
  text-decoration: underline;
}

:is(.entry-content, .is-root-container) .wp-block-group:is(.is-style-fond-bleu-fonce, .apv-cta) a:not(.wp-block-button__link):hover {
  color: var(--jaune);
}

:is(.entry-content, .is-root-container) .wp-block-group:is(.is-style-fond-bleu-fonce, .apv-cta) :focus-visible {
  outline-color: var(--jaune);
}

/* Bouton secondaire sur fond foncé : contour blanc, plein au survol */
:is(.entry-content, .is-root-container) .wp-block-group:is(.is-style-fond-bleu-fonce, .apv-cta) .wp-block-button:is(.is-style-outline, .is-style-secondaire) .wp-block-button__link {
  border-color: var(--blanc);
  background-color: transparent;
  color: var(--blanc);
}

:is(.entry-content, .is-root-container) .wp-block-group:is(.is-style-fond-bleu-fonce, .apv-cta) .wp-block-button:is(.is-style-outline, .is-style-secondaire) .wp-block-button__link:hover {
  border-color: var(--blanc);
  background-color: var(--blanc);
  color: var(--bleu-fonce);
}

/* Éléments du contenu sur fond foncé */
:is(.entry-content, .is-root-container) .wp-block-group:is(.is-style-fond-bleu-fonce, .apv-cta) blockquote {
  border-left-color: var(--jaune);
  background-color: transparent;
}

:is(.entry-content, .is-root-container) .wp-block-group:is(.is-style-fond-bleu-fonce, .apv-cta) .wp-block-details {
  border-color: var(--apv-filet-clair);
}

:is(.entry-content, .is-root-container) .wp-block-group:is(.is-style-fond-bleu-fonce, .apv-cta) .wp-block-details > summary:hover {
  color: var(--jaune);
}

:is(.entry-content, .is-root-container) .wp-block-group:is(.is-style-fond-bleu-fonce, .apv-cta) ul.is-style-coches > li::before {
  background-color: var(--jaune);
}

:is(.entry-content, .is-root-container) .wp-block-group:is(.is-style-fond-bleu-fonce, .apv-cta) ul.is-style-coches > li::after {
  border-color: var(--bleu-fonce);
}

:is(.entry-content, .is-root-container) .wp-block-group:is(.is-style-fond-bleu-fonce, .apv-cta) .apv-chiffre {
  border-top-color: var(--apv-filet-clair);
}

:is(.entry-content, .is-root-container) .wp-block-group:is(.is-style-fond-bleu-fonce, .apv-cta) .apv-chiffre .apv-chiffre__valeur {
  color: var(--jaune);
}

/* Une carte blanche posée sur le fond foncé garde ses couleurs */
:is(.entry-content, .is-root-container) .wp-block-group.is-style-fond-bleu-fonce .apv-service :is(h2, h3, h4) {
  color: var(--apv-titres);
}

:is(.entry-content, .is-root-container) .wp-block-group.is-style-fond-bleu-fonce .apv-service :is(p, li) {
  color: var(--texte);
}

:is(.entry-content, .is-root-container) .wp-block-group.is-style-fond-bleu-fonce .apv-service a:not(.wp-block-button__link) {
  color: var(--bleu);
}

/* 5. Compositions ------------------------------------------------------------ */

/* 5.1 Bandeau de titre de page (apv-bandeau) ------------------------------- */
/* Titre simple sur le fond blanc de la page (décision client du 2026-10-29 : ni
   fond bleu clair ni panneau), aligné sur le bord gauche du contenu ; grand titre
   Sora, filet jaune du logo entre le titre et le chapeau. Un fond ajouté dans
   l'éditeur (has-background) est retiré : le bandeau est le même sur toutes les pages. */
:is(.entry-content, .is-root-container) .wp-block-group.apv-bandeau {
  padding: 0;
  border-radius: 0;
  background: none;
}

/* Premier bloc de la page : écart sous la barre d'en-tête ; resserré sous le fil d'Ariane */
:is(.entry-content, .is-root-container) > .wp-block-group.apv-bandeau:first-child {
  margin-top: clamp(1.5rem, 4vw, 2.5rem);
  margin-bottom: 0;
}

body:has(.apv-fil-ariane) .entry-content > .wp-block-group.apv-bandeau:first-child,
.entry-content .apv-fil-ariane + .wp-block-group.apv-bandeau {
  margin-top: 0;
}

/* Bord à bord : le contenu revient sur la colonne de 1 200 px */
:is(.entry-content, .is-root-container) .wp-block-group.apv-bandeau.alignfull {
  padding-inline: var(--apv-pad-pleine-largeur);
}

:is(.entry-content, .is-root-container) .apv-bandeau h1.wp-block-heading,
:is(.entry-content, .is-root-container) .apv-bandeau h1 {
  max-width: none; /* décision client n° 5 : pas de coupure forcée en ch */
  margin: 0;
  font-size: var(--apv-taille-5);
  font-weight: 800;
  line-height: 1.05;
  letter-spacing: -0.035em;
}

:is(.entry-content, .is-root-container) .apv-bandeau h1::after {
  content: "";
  display: block;
  width: 3.5rem;
  height: var(--apv-filet);
  margin-top: clamp(1rem, 2vw, 1.5rem);
  border-radius: 2px;
  background-color: var(--jaune);
}

:is(.entry-content, .is-root-container) .apv-bandeau .apv-bandeau__chapo {
  max-width: none;
  margin: clamp(1rem, 2vw, 1.5rem) 0 0;
  font-size: var(--apv-taille-2);
  line-height: 1.5;
  color: var(--texte);
}

/* 5.2 Texte et image (apv-texte-image, variante --inverse) ----------------- */
:is(.entry-content, .is-root-container) .wp-block-columns.apv-texte-image {
  gap: clamp(1.5rem, 5vw, 4rem);
}

/* Centrage vertical par colonne : la feuille du noyau impose
   « align-items: normal » au conteneur des colonnes. */
:is(.entry-content, .is-root-container) .apv-texte-image > .wp-block-column {
  align-self: center;
}

/* La colonne de l'image passe après le texte (à droite ; dessous en mobile),
   quel que soit l'ordre des colonnes dans l'éditeur. */
:is(.entry-content, .is-root-container) .apv-texte-image > .wp-block-column:has(> .wp-block-image) {
  order: 2;
}

@media (min-width: 782px) {
  :is(.entry-content, .is-root-container) .wp-block-columns.apv-texte-image.apv-texte-image--inverse {
    flex-direction: row-reverse;
  }
}

:is(.entry-content, .is-root-container) .apv-texte-image .wp-block-column > :first-child {
  margin-top: 0;
}

:is(.entry-content, .is-root-container) .apv-texte-image .wp-block-column > :last-child {
  margin-bottom: 0;
}

:is(.entry-content, .is-root-container) .apv-texte-image .wp-block-image {
  margin: 0;
}

/* Colonnes empilées (moins de 782 px) : l'image ne dépasse pas 34 rem de large */
@media (max-width: 781px) {
  :is(.entry-content, .is-root-container) .apv-texte-image .wp-block-image {
    max-width: 34rem;
  }
}

:is(.entry-content, .is-root-container) .apv-texte-image .wp-block-image img {
  display: block;
  width: 100%;
  height: auto;
  border-radius: var(--apv-rayon-carte);
}

/* Photo (contrôle technique, dépannage…) : hauteur bornée, recadrée sans
   déformation ; même arrondi que les autres images de la composition.
   Sans fond par défaut : un logo ou une image à fond transparent reste sur le
   fond de la section (demande client du 2026-10-29). Fond gris à la demande :
   classe « apv-image-fond » sur le bloc image (Avancé > Classe CSS). */
:is(.entry-content, .is-root-container) .apv-texte-image .wp-block-image img {
  max-height: min(28rem, 70vh);
  object-fit: cover;
  background-color: transparent;
}

:is(.entry-content, .is-root-container) .apv-texte-image .wp-block-image.apv-image-fond img,
:is(.entry-content, .is-root-container) .wp-block-image.apv-image-fond img {
  background-color: var(--gris-fond);
}

/* Logo ou image détourée (PNG, SVG, WebP transparents) : jamais recadrée */
:is(.entry-content, .is-root-container) .apv-texte-image .wp-block-image img:is([src$=".svg" i], [src*="logo" i]) {
  object-fit: contain;
  border-radius: 0;
}

/* 5.3 Services en cartes (apv-services > grille > apv-service) ------------- */
/* La grille est le parent direct des cartes (groupe « Grille », colonnes ou
   conteneur intérieur) : 1, 2 puis 3 colonnes. */
:is(.entry-content, .is-root-container) .apv-services:has(> .apv-service),
:is(.entry-content, .is-root-container) .apv-services :has(> .apv-service) {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: clamp(0.75rem, 1.5vw, 1.25rem);
  margin-block: 2rem 0;
}

:is(.entry-content, .is-root-container) .apv-services :has(> .apv-service) > :not(.apv-service) {
  grid-column: 1 / -1;
}

@media (min-width: 640px) {
  :is(.entry-content, .is-root-container) .apv-services:has(> .apv-service),
  :is(.entry-content, .is-root-container) .apv-services :has(> .apv-service) {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (min-width: 1024px) {
  :is(.entry-content, .is-root-container) .apv-services:has(> .apv-service),
  :is(.entry-content, .is-root-container) .apv-services :has(> .apv-service) {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

/* Carte : bordure fine et ombre légère sur fond blanc ; survol commun à toutes
   les cartes du site (jetons --apv-carte-* de theme.css). Le composant vaut
   aussi hors du contenu (gabarits PHP des fiches) : sélecteur sans portée. */
:is(.entry-content, .is-root-container) .wp-block-group.apv-service,
.apv-service {
  margin: 0;
  padding: var(--apv-pad-carte);
  border: var(--apv-carte-bordure);
  border-radius: var(--apv-rayon-carte);
  background-color: var(--blanc);
  box-shadow: var(--apv-carte-ombre);
  transition: var(--apv-transition-carte);
}

/* Carte NON cliquable (services, garanties, avantages : décision client n° 18,
   2026-10-29) : au survol, seule la bordure change, sans élévation ni ombre
   renforcée (jetons --apv-carte-fixe-* de theme.css). Classe générique
   « apv-carte-fixe » pour tout autre composant non cliquable. */
:is(.entry-content, .is-root-container) .wp-block-group.apv-service,
.apv-service,
.apv-carte-fixe {
  transition: var(--apv-transition-carte-fixe);
}

:is(.entry-content, .is-root-container) .wp-block-group.apv-service:hover,
.apv-service:hover,
.apv-carte-fixe:hover {
  border-color: var(--apv-carte-fixe-bordure-survol);
  box-shadow: var(--apv-carte-ombre);
  transform: none;
}

/* Icône du bloc apv/icone dans une pastille (le SVG lui-même porte le fond) */
:is(.entry-content, .is-root-container) .apv-service :is(svg.apv-icon, svg.apv-icone) {
  box-sizing: content-box;
  display: block;
  width: 1.5rem;
  height: 1.5rem;
  margin: 0 0 1rem;
  padding: 0.75rem;
  border-radius: var(--apv-rayon);
  background-color: var(--bleu-clair);
  color: var(--bleu);
}

:is(.entry-content, .is-root-container) .apv-service :is(.wp-block-apv-icone, .apv-icone-bloc) {
  margin: 0;
  line-height: 0;
}

:is(.entry-content, .is-root-container) .apv-service h3.wp-block-heading,
:is(.entry-content, .is-root-container) .apv-service .wp-block-heading {
  margin: 0 0 0.5rem;
  font-size: 1.25rem;
  font-weight: 800;
  line-height: 1.25;
  letter-spacing: -0.015em;
}

:is(.entry-content, .is-root-container) .apv-services .apv-service p {
  margin: 0 0 0.75em;
  font-size: 1rem;
  line-height: 1.6;
}

:is(.entry-content, .is-root-container) .apv-services .apv-service p:last-child {
  margin-bottom: 0;
}

/* 5.3 bis Carte de garantie (apv-service apv-service--offre + p.apv-badge-prix) */
/* UN SEUL composant pour Services (217), Extension de garantie (3437) et les
   fiches véhicules (décision client du 2026-10-29) : icône SVG en pastille,
   prix en pastille en haut à droite, titre bleu foncé, texte ; liseré jaune du
   logo en haut de la carte. Grille : celle des services (1 / 2 / 3 colonnes),
   aussi quand les offres ne sont pas dans un groupe apv-services.
   Balisage hors blocs (gabarit PHP) :
     <div class="apv-services__grille">
       <div class="apv-service apv-service--offre">
         <?php apv_icon( 'car' ); ?>
         <p class="apv-badge-prix">299,00 €</p>
         <h3 class="apv-service__titre">Extension Garantie 1 an</h3>
         <p>3ème année de Garantie (…)</p>
       </div> …
     </div> */
:is(.entry-content, .is-root-container) :has(> .apv-service--offre):not(.apv-services):not(.apv-services *) {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: clamp(0.75rem, 1.5vw, 1.25rem);
}

:is(.entry-content, .is-root-container) :has(> .apv-service--offre):not(.apv-services):not(.apv-services *) > :not(.apv-service) {
  grid-column: 1 / -1;
}

@media (min-width: 640px) {
  :is(.entry-content, .is-root-container) :has(> .apv-service--offre):not(.apv-services):not(.apv-services *) {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (min-width: 1024px) {
  :is(.entry-content, .is-root-container) :has(> .apv-service--offre):not(.apv-services):not(.apv-services *) {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

:is(.entry-content, .is-root-container) .wp-block-group.apv-service.apv-service--offre,
.apv-service.apv-service--offre {
  position: relative;
  overflow: hidden;
}

/* Liseré jaune du logo en haut de la carte (dans l'arrondi : overflow) */
.apv-service.apv-service--offre::before {
  content: "";
  position: absolute;
  inset: 0 0 auto;
  height: var(--apv-filet);
  background-color: var(--jaune);
}

/* Titre bleu foncé, même gabarit que le titre d'une carte de service */
:is(.entry-content, .is-root-container) .apv-service.apv-service--offre :is(h2, h3, h4),
.apv-service.apv-service--offre :is(h2, h3, h4, .apv-service__titre) {
  margin: 0 0 0.5rem;
  font-family: var(--apv-police-titre);
  font-size: 1.25rem;
  font-weight: 800;
  line-height: 1.25;
  letter-spacing: -0.015em;
  color: var(--bleu-fonce);
}

.apv-service.apv-service--offre p {
  max-width: none;
  margin: 0;
  font-size: 1rem;
  line-height: 1.6;
  color: var(--texte);
}

/* Icône en pastille (bloc apv/icone ou apv_icon() dans un gabarit) */
.apv-service.apv-service--offre :is(svg.apv-icon, svg.apv-icone) {
  box-sizing: content-box;
  display: block;
  width: 1.5rem;
  height: 1.5rem;
  margin: 0 0 1rem;
  padding: 0.75rem;
  border-radius: var(--apv-rayon);
  background-color: var(--bleu-clair);
  color: var(--bleu);
}

/* Sans icône, le titre laisse la place de la pastille */
.apv-service--offre:not(:has(svg)) :is(.wp-block-heading, h2, h3, h4) {
  padding-right: 6.5rem;
}

:is(.entry-content, .is-root-container) .apv-service.apv-service--offre p.apv-badge-prix,
.apv-service.apv-service--offre p.apv-badge-prix {
  position: absolute;
  top: var(--apv-pad-carte);
  right: var(--apv-pad-carte);
  max-width: none;
  margin: 0;
  padding: 0.3125rem 0.75rem;
  border-radius: 999px;
  background-color: var(--gris-fond);
  font-family: var(--apv-police-titre);
  font-size: 0.9375rem;
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  line-height: 1.4;
  white-space: nowrap;
  color: var(--bleu-fonce);
}

/* Pastille placée en dernier dans l'éditeur : le texte reste sans marge basse */
:is(.entry-content, .is-root-container) .apv-service--offre p:has(+ p.apv-badge-prix:last-child) {
  margin-bottom: 0;
}

/* 5.4 Appel à l'action (apv-cta) ------------------------------------------- */
/* Fond et couleurs : section 4 (avec is-style-fond-bleu-fonce). */
:is(.entry-content, .is-root-container) .wp-block-group.apv-cta {
  padding: var(--apv-pad-panneau);
  border-radius: var(--apv-rayon-barre);
}

:is(.entry-content, .is-root-container) .wp-block-group.apv-cta.alignfull {
  padding-block: var(--apv-pad-section-couleur);
  padding-inline: var(--apv-pad-pleine-largeur);
  border-radius: 0;
}

:is(.entry-content, .is-root-container) .apv-cta h2.wp-block-heading,
:is(.entry-content, .is-root-container) .apv-cta h2 {
  margin: 0 0 0.5rem;
  font-size: var(--apv-taille-4);
}

:is(.entry-content, .is-root-container) .wp-block-group.apv-cta p {
  margin: 0;
  font-size: 1.125rem;
}

:is(.entry-content, .is-root-container) .apv-cta .wp-block-buttons {
  margin: 1.5rem 0 0;
}

/* Bouton d'appel : le numéro se lit d'un coup d'œil (chiffres à chasse fixe) */
:is(.entry-content, .is-root-container) .apv-cta .wp-block-button__link[href^="tel:"] {
  font-size: 1.1875rem;
  font-variant-numeric: tabular-nums;
  letter-spacing: -0.01em;
  white-space: nowrap;
}

/* Grand écran : texte à gauche, boutons à droite */
@media (min-width: 900px) {
  :is(.entry-content, .is-root-container) .wp-block-group.apv-cta:not(:has(> .wp-block-group__inner-container)),
  :is(.entry-content, .is-root-container) .wp-block-group.apv-cta > .wp-block-group__inner-container {
    display: grid;
    grid-template-columns: minmax(0, 1fr) auto;
    column-gap: clamp(2rem, 5vw, 4rem);
    align-items: center;
  }

  :is(.entry-content, .is-root-container) .apv-cta > *,
  :is(.entry-content, .is-root-container) .apv-cta > .wp-block-group__inner-container > * {
    grid-column: 1;
  }

  :is(.entry-content, .is-root-container) .apv-cta > .wp-block-buttons,
  :is(.entry-content, .is-root-container) .apv-cta > .wp-block-group__inner-container > .wp-block-buttons {
    grid-column: 2;
    grid-row: 1 / span 2;
    justify-content: flex-end;
    margin: 0;
  }
}

/* Mobile : boutons pleine largeur, l'un sous l'autre */
@media (max-width: 599px) {
  :is(.entry-content, .is-root-container) .apv-cta .wp-block-buttons {
    flex-direction: column;
    align-items: stretch;
  }

  :is(.entry-content, .is-root-container) .apv-cta .wp-block-button,
  :is(.entry-content, .is-root-container) .apv-cta .wp-block-button .wp-block-button__link {
    width: 100%;
  }
}

/* 5.5 Questions fréquentes (apv-faq) ---------------------------------------- */
/* Accordéon : section 3 (core/details). La FAQ ajoute la mesure et le rythme. */
:is(.entry-content, .is-root-container) .apv-faq h2.wp-block-heading,
:is(.entry-content, .is-root-container) .apv-faq > h2 {
  margin: 0 0 1.25rem;
}

:is(.entry-content, .is-root-container) .apv-faq .wp-block-details > summary {
  font-size: clamp(1.0625rem, 1rem + 0.3vw, 1.1875rem);
}

/* 5.6 Chiffres (apv-chiffres > apv-chiffre) -------------------------------- */
:is(.entry-content, .is-root-container) .apv-chiffres:has(> .apv-chiffre),
:is(.entry-content, .is-root-container) .apv-chiffres :has(> .apv-chiffre) {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 9.5rem), 1fr));
  gap: clamp(1.25rem, 3vw, 2.5rem) clamp(1rem, 3vw, 2.5rem);
}

:is(.entry-content, .is-root-container) .apv-chiffres :has(> .apv-chiffre) > :not(.apv-chiffre),
:is(.entry-content, .is-root-container) .apv-chiffres:has(> .apv-chiffre) > :not(.apv-chiffre) {
  grid-column: 1 / -1;
}

@media (min-width: 1024px) {
  :is(.entry-content, .is-root-container) .apv-chiffres:has(> .apv-chiffre),
  :is(.entry-content, .is-root-container) .apv-chiffres :has(> .apv-chiffre) {
    grid-template-columns: repeat(auto-fit, minmax(13rem, 1fr));
  }
}

:is(.entry-content, .is-root-container) .wp-block-group.apv-chiffre {
  margin: 0;
  padding-top: 1rem;
  border-top: 1px solid var(--bordure);
}

:is(.entry-content, .is-root-container) .apv-chiffre p.apv-chiffre__valeur,
:is(.entry-content, .is-root-container) .apv-chiffre .apv-chiffre__valeur {
  margin: 0 0 0.375rem;
  font-family: var(--apv-police-titre);
  font-size: clamp(2.25rem, 1.6rem + 2.6vw, 3.75rem);
  font-weight: 800;
  font-variant-numeric: tabular-nums;
  line-height: 1;
  letter-spacing: -0.04em;
  color: var(--bleu);
}

:is(.entry-content, .is-root-container) .apv-chiffre p.apv-chiffre__libelle,
:is(.entry-content, .is-root-container) .apv-chiffre .apv-chiffre__libelle {
  max-width: 28ch;
  margin: 0;
  font-size: 1rem;
  line-height: 1.45;
  color: var(--texte);
}

/* 5.7 Classes des pages converties (2026-10-29) ------ */

/* Premier bloc de la page (autre qu'un bandeau) : écart sous la barre d'en-tête.
   Passe devant « … .entry-content > div:first-child { margin-top: 0 } » (0,3,2). */
:is(.entry-content, .is-root-container) > :is(.wp-block-group, .wp-block-columns):first-child:not(.apv-bandeau) {
  margin-top: 1.5rem;
}

/* Surtitre : petit libellé bleu au-dessus d'un titre, en capitales par CSS
   (décision client du 2026-10-29) : le contenu est saisi « Nos services ». */
:is(.entry-content, .is-root-container) .wp-block-group p.apv-surtitre,
:is(.entry-content, .is-root-container) p.apv-surtitre {
  margin: 0 0 0.625rem;
  font-family: var(--apv-police-titre);
  font-size: 0.8125rem;
  font-weight: 700;
  line-height: 1.3;
  letter-spacing: 0.08em;
  text-transform: uppercase;
  color: var(--bleu);
  /* Petit trait jaune 24 × 2 px à gauche, centré sur la ligne (décision client n° 3) */
  display: flex;
  align-items: center;
  gap: 0.625rem;
}

:is(.entry-content, .is-root-container) p.apv-surtitre::before {
  content: "";
  flex: none;
  width: 24px;
  height: 2px;
  border-radius: 1px;
  background-color: var(--jaune);
}

:is(.entry-content, .is-root-container) p.apv-surtitre.has-text-align-center {
  justify-content: center;
}

:is(.entry-content, .is-root-container) .apv-surtitre + :is(h1, h2) {
  margin-top: 0;
}

/* Section de texte (Services) et groupe de texte (mentions) */
:is(.entry-content, .is-root-container) .wp-block-group.apv-section {
  margin-block: var(--apv-espace-section);
}

:is(.entry-content, .is-root-container) .wp-block-group.apv-page-texte {
  margin-block: clamp(2rem, 5vw, 3.5rem) 0;
}

:is(.entry-content, .is-root-container) .wp-block-group:is(.apv-section, .apv-page-texte) > :first-child,
:is(.entry-content, .is-root-container) .wp-block-group:is(.apv-section, .apv-page-texte) > .wp-block-group__inner-container > :first-child {
  margin-top: 0;
}

/* Grilles nommées : même rendu que la détection par :has (section 5.3 et 5.6).
   Sans portée aussi : grille des cartes de garantie dans un gabarit PHP. */
:is(.entry-content, .is-root-container) .wp-block-group.apv-services__grille,
.apv-services__grille {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: clamp(0.75rem, 1.5vw, 1.25rem);
}

@media (min-width: 640px) {
  :is(.entry-content, .is-root-container) .wp-block-group.apv-services__grille,
  .apv-services__grille {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (min-width: 1024px) {
  :is(.entry-content, .is-root-container) .wp-block-group.apv-services__grille,
  .apv-services__grille {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }
}

:is(.entry-content, .is-root-container) .wp-block-group.apv-chiffres__grille {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(min(100%, 9.5rem), 1fr));
  gap: clamp(1.25rem, 3vw, 2.5rem) clamp(1rem, 3vw, 2.5rem);
}

/* Carrousel (core/gallery), sans JS : grille de vignettes au même format 4:3,
   2 colonnes en mobile, 3 sur grand écran (réglage « columns-3 »). Une grille
   reste lisible au clavier et au lecteur d'écran, sans contrôles à ajouter. */
:is(.entry-content, .is-root-container) .wp-block-gallery.apv-carrousel figure.wp-block-image img {
  aspect-ratio: 4 / 3;
  width: 100%;
  height: auto;
  object-fit: cover;
  background-color: var(--gris-fond);
}

/* Groupe de boutons justifié à droite (/services/, sous les offres) : la règle
   du noyau est rappelée au niveau de la portée des blocs. */
:is(.entry-content, .is-root-container) .wp-block-buttons.is-content-justification-right {
  justify-content: flex-end;
}

/* 5.8 Page de lecture (body.apv-lecture : modèle « Page de lecture ») ------- */
/* Mentions légales, confidentialité, règlement du jeu, plan du site : une
   colonne centrée de 50 rem (800 px) qui porte le fil d'Ariane, le bandeau et
   le texte. Les règles de largeur de theme.css (3 ter) lisent
   --apv-largeur-section et --apv-mesure : on les redéfinit ici, sans les
   réécrire. « html body » passe devant « body.full-width-content » (3 ter). */
html body.apv-lecture {
  /* 45 rem (720 px) : 70 à 75 caractères par ligne à 17 px (demande client du 2026-10-29) */
  --apv-largeur-section: 45rem;
  --apv-mesure: 45rem;
  /* Recalculé ici : la valeur de :root a été figée avec 75 rem */
  --apv-pad-pleine-largeur: max(var(--apv-gouttiere), (100% - 45rem) / 2);
}

/* Marge latérale de sécurité : 20 px au moins en mobile (la gouttière du site
   descend à 12 px), sans rien changer dès 667 px. Porte sur le fil d'Ariane et
   l'article, tous deux dans .site-main. */
body.apv-lecture .site-main {
  padding-inline: max(0px, 1.25rem - var(--apv-gouttiere));
}

/* Fil d'Ariane (hors .entry-content) sur la même colonne */
body.apv-lecture .site-main .apv-fil-ariane {
  max-width: min(45rem, 100% - 2 * var(--apv-gouttiere));
  margin-inline: auto;
}

/* Groupes à mise en page « contrainte » : leurs enfants prennent la largeur de
   la colonne (sinon centrés à la taille de contenu des réglages globaux). */
body.apv-lecture .entry-content {
  --wp--style--global--content-size: 100%;
  --wp--style--global--wide-size: 100%;
  overflow-wrap: break-word;
}

body.apv-lecture .entry-content .wp-block-group.apv-page-texte :is(p, ul, ol, h2, h3, h4) {
  max-width: none;
}

/* Listes du texte légal */
body.apv-lecture .entry-content :is(ul, ol):not(.wp-block-gallery) {
  padding-inline-start: 1.25em;
}

body.apv-lecture .entry-content :is(ul, ol):not(.wp-block-gallery) > li + li {
  margin-top: 0.375em;
}

/* Rien ne déborde : médias et tableaux tenus dans la colonne */
body.apv-lecture .entry-content :is(img, video, iframe) {
  max-width: 100%;
  height: auto;
}

body.apv-lecture .entry-content .wp-block-table {
  max-width: 100%;
  overflow-x: auto;
}

/* Plan du site Rank Math ([rank_math_html_sitemap]) : sections séparées par
   un filet, titres de section en taille H3 (et non H2 géant), liens en liste. */
body.apv-lecture .entry-content .rank-math-html-sitemap__section {
  margin-top: clamp(1.75rem, 4vw, 2.75rem);
  padding-top: clamp(1.25rem, 3vw, 1.75rem);
  border-top: 1px solid var(--bordure);
}

body.apv-lecture .entry-content .rank-math-html-sitemap__section:first-child {
  margin-top: clamp(2rem, 5vw, 3.5rem);
}

body.apv-lecture .entry-content .rank-math-html-sitemap__title {
  margin: 0 0 0.75rem;
  font-size: var(--apv-taille-3);
  font-weight: 700;
  letter-spacing: -0.01em;
}

body.apv-lecture .entry-content .rank-math-html-sitemap__list {
  margin: 0;
  padding-inline-start: 1.25em;
}

body.apv-lecture .entry-content .rank-math-html-sitemap__item {
  margin-block: 0.375rem;
  line-height: 1.5;
}

/* 5.9 Bannière diagonale (apv-banniere) ------------------------------------- */
/* group alignfull apv-banniere > columns apv-banniere__colonnes > colonne
   apv-banniere__texte (H2 + paragraphe) + colonne apv-banniere__media (image
   apv-banniere__image ou core/cover). Fond bleu à gauche, photo à droite sur
   toute la hauteur, séparation en diagonale (clip-path sur la colonne média).
   Mobile (moins de 782 px) : photo au-dessus du texte, sans diagonale.
   Contraste : blanc sur --bleu 7,92. */
:is(.entry-content, .is-root-container) .wp-block-group.apv-banniere {
  padding: 0;
  border-radius: 0;
  background-color: var(--bleu);
  color: var(--blanc);
  overflow: hidden;
}

/* L'enveloppe de WordPress (is-layout-constrained) limitait les colonnes à la
   largeur du contenu : bande bleue à droite de la photo. Bannière bord à bord. */
:is(.entry-content, .is-root-container) .apv-banniere > .wp-block-group__inner-container,
:is(.entry-content, .is-root-container) .apv-banniere > .wp-block-group__inner-container > .apv-banniere__colonnes {
  width: 100%;
  max-width: none;
}

:is(.entry-content, .is-root-container) .apv-banniere .wp-block-columns.apv-banniere__colonnes {
  gap: 0;
  max-width: none;
  margin: 0;
  align-items: stretch;
}

:is(.entry-content, .is-root-container) .apv-banniere .wp-block-column.apv-banniere__texte {
  align-self: center;
  padding-block: var(--apv-pad-section-couleur);
  padding-inline: max(1.25rem, var(--apv-gouttiere));
}

:is(.entry-content, .is-root-container) .apv-banniere .apv-banniere__texte > :first-child {
  margin-top: 0;
}

:is(.entry-content, .is-root-container) .apv-banniere .apv-banniere__texte > :last-child {
  margin-bottom: 0;
}

:is(.entry-content, .is-root-container) .apv-banniere :is(h1, h2, h3) {
  margin: 0;
  color: var(--blanc);
}

/* Trait jaune du logo sous le titre */
:is(.entry-content, .is-root-container) .apv-banniere :is(h1, h2, h3)::after {
  content: "";
  display: block;
  width: 3.5rem;
  height: var(--apv-filet);
  margin-top: clamp(0.875rem, 1.6vw, 1.25rem);
  border-radius: 2px;
  background-color: var(--jaune);
}

:is(.entry-content, .is-root-container) .apv-banniere p {
  margin: clamp(0.875rem, 1.6vw, 1.25rem) 0 0;
  font-size: 1.125rem;
  color: var(--blanc);
}

:is(.entry-content, .is-root-container) .apv-banniere a:not(.wp-block-button__link) {
  color: var(--blanc);
  text-decoration: underline;
}

:is(.entry-content, .is-root-container) .apv-banniere :focus-visible {
  outline-color: var(--jaune);
}

/* Colonne média : la photo remplit toute la colonne, quelle que soit sa taille */
:is(.entry-content, .is-root-container) .apv-banniere .wp-block-column.apv-banniere__media {
  position: relative;
  order: -1;
  aspect-ratio: 16 / 9;
  overflow: hidden;
}

:is(.entry-content, .is-root-container) .apv-banniere .apv-banniere__media > :is(.wp-block-image, .wp-block-cover, figure) {
  position: absolute;
  inset: 0;
  width: 100%;
  max-width: none;
  height: 100%;
  min-height: 0;
  margin: 0;
  padding: 0;
}

:is(.entry-content, .is-root-container) .apv-banniere .apv-banniere__media img {
  display: block;
  width: 100%;
  max-width: none;
  height: 100%;
  object-fit: cover;
  border-radius: 0;
}

/* Photo du contrôle technique (Services, image 2528) : le texte incrusté en bas
   de l'image était coupé (décision client n° 19, 2026-10-29). Zoom fixe (pas
   d'animation) ancré à droite et vers le haut : la bande de texte du bas (le
   tiers inférieur) sort du cadre, le macaron « 60 € » reste visible. Règle
   provisoire, à retirer quand la photo sera remplacée. */
:is(.entry-content, .is-root-container) .apv-banniere .apv-banniere__media > .wp-block-image:has(img.wp-image-2528) {
  overflow: hidden;
}

:is(.entry-content, .is-root-container) .apv-banniere .apv-banniere__media img.wp-image-2528 {
  transform: scale(1.7);
  transform-origin: 100% 20%;
}

/* Légende de la photo : gardée pour les lecteurs d'écran, masquée à l'écran
   (elle se posait en bande sur la photo recadrée) */
/* La figure avec légende passe en « display: table » (noyau) : l'image se
   rétrécissait et la légende prenait une bande en bas (liseré sous la photo). */
:is(.entry-content, .is-root-container) .apv-banniere .apv-banniere__media .wp-block-image,
:is(.entry-content, .is-root-container) .apv-carte-image .wp-block-image {
  display: block;
}

:is(.entry-content, .is-root-container) .apv-banniere .apv-banniere__media figcaption,
:is(.entry-content, .is-root-container) .apv-carte-image .wp-block-image figcaption {
  display: block;
  position: absolute;
  width: 1px;
  height: 1px;
  overflow: hidden;
  clip-path: inset(50%);
  white-space: nowrap;
}

/* Bureau (décision client du 2026-10-29) : la photo est un calque posé sur
   toute la hauteur de la bannière (haut et bas collés, aucun liseré bleu
   dessous, quelle que soit la hauteur du texte) ; la colonne de texte est plus
   étroite (40 % environ) et décalée à gauche : la diagonale coupe plus tard et
   la photo occupe 60 % de la largeur. */
@media (min-width: 782px) {
  :is(.entry-content, .is-root-container) .apv-banniere .wp-block-columns.apv-banniere__colonnes {
    position: relative;
    display: block;
    min-height: clamp(20rem, 30vw, 28rem);
  }

  /* Le texte commence sur le bord gauche du contenu (colonne de 1 200 px) */
  :is(.entry-content, .is-root-container) .apv-banniere .wp-block-column.apv-banniere__texte {
    position: relative;
    z-index: 1;
    display: flex;
    flex-direction: column;
    justify-content: center;
    box-sizing: border-box;
    width: 42%;
    min-height: inherit;
    margin: 0;
    padding-inline: max(var(--apv-gouttiere), (100vw - var(--apv-largeur-section, 75rem)) / 2) clamp(1.5rem, 3vw, 3rem);
  }

  :is(.entry-content, .is-root-container) .apv-banniere .wp-block-column.apv-banniere__media {
    position: absolute;
    inset: 0 0 0 auto;
    width: 60%;
    height: 100%;
    margin: 0;
    padding: 0;
    aspect-ratio: auto;
    /* Diagonale : le bord gauche de la photo part de 16 % en haut jusqu'à 0 en bas */
    clip-path: polygon(16% 0, 100% 0, 100% 100%, 0 100%);
  }
}

/* 5.10 Appel à l'action avec photo (apv-cta > apv-texte-image) -------------- */
/* « Besoin d'un dépannage ? » : la photo occupe toute sa moitié du panneau, bord
   à bord (haut, bas, côté extérieur), sans marge bleue ; seuls les angles
   extérieurs du panneau sont arrondis (overflow du panneau). Mobile : photo en
   haut, bord à bord. */
:is(.entry-content, .is-root-container) .wp-block-group.apv-cta:has(.apv-texte-image) {
  display: block;
  padding: 0;
  overflow: hidden;
}

:is(.entry-content, .is-root-container) .wp-block-group.apv-cta:has(.apv-texte-image) > .wp-block-group__inner-container {
  display: block;
}

:is(.entry-content, .is-root-container) .apv-cta .wp-block-columns.apv-texte-image {
  gap: 0;
  max-width: none;
  margin: 0;
  align-items: stretch;
}

:is(.entry-content, .is-root-container) .apv-cta .apv-texte-image > .wp-block-column:not(:has(> .wp-block-image)) {
  align-self: center;
  padding: var(--apv-pad-panneau);
}

:is(.entry-content, .is-root-container) .apv-cta .apv-texte-image > .wp-block-column:has(> .wp-block-image) {
  position: relative;
  order: -1;
  align-self: stretch;
  aspect-ratio: 16 / 9;
}

:is(.entry-content, .is-root-container) .apv-cta .apv-texte-image .wp-block-column > .wp-block-image {
  position: absolute;
  inset: 0;
  max-width: none;
  margin: 0;
}

:is(.entry-content, .is-root-container) .apv-cta .apv-texte-image .wp-block-image img {
  width: 100%;
  height: 100%;
  max-height: none;
  object-fit: cover;
  border-radius: 0;
}

@media (min-width: 782px) {
  :is(.entry-content, .is-root-container) .apv-cta .apv-texte-image > .wp-block-column:has(> .wp-block-image) {
    order: 2;
    min-height: 18rem;
    aspect-ratio: auto;
  }
}

/* « Votre contrôle technique à seulement 60 euros » (Services) : même panneau, texte à gauche et photo à
   droite (sans --inverse). Photo 2528 recadrée (zoom fixe calé en haut à droite) : le logo incrusté
   en haut à gauche et la bande de texte du bas sortent du cadre, le macaron « 60 € » reste visible. */
:is(.entry-content, .is-root-container) .apv-cta .apv-texte-image .wp-block-image:has(img.wp-image-2528) {
  overflow: hidden;
}

:is(.entry-content, .is-root-container) .apv-cta .apv-texte-image img.wp-image-2528 {
  object-position: 100% 0;
  transform: scale(1.6);
  transform-origin: 100% 70%;
}

@media (min-width: 782px) {
  :is(.entry-content, .is-root-container) .apv-cta .apv-texte-image img.wp-image-2528 {
    transform-origin: 100% 53%;
  }
}

/* 5.11 Section de texte (apv-section) ---------------------------------------- */
/* Toute la largeur du contenu (décision client du 2026-10-29 : la limite de
   60 rem est retirée ; seules les pages de lecture et les articles gardent une
   largeur de lecture). */
:is(.entry-content, .is-root-container) .wp-block-group.apv-section > p,
:is(.entry-content, .is-root-container) .wp-block-group.apv-section > .wp-block-group__inner-container > p {
  max-width: var(--apv-mesure-section);
}

/* 5.12 Plan d'accès au clic (bloc apv/plan : div.apv-plan) -------------------- */
/* Zone neutre 16:9 (320 px au moins) : adresse, bouton « Afficher la carte »
   (bouton principal), note, lien « Ouvrir dans Google Maps ». Une fois chargée,
   l'iframe occupe toute la zone. Renommé de apv-carte le 2026-10-29 : plus de
   conflit avec les cartes d'article (article.apv-carte, blog.css), les
   neutralisations de survol et de remplissage sont retirées. */
:is(.entry-content, .is-root-container) .apv-plan {
  position: relative;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 1rem;
  box-sizing: border-box;
  /* min-width : sans lui, le rapport 16:9 transfère la hauteur minimale en
     largeur minimale (569 px) et la carte déborde d'une colonne étroite */
  width: 100%;
  min-width: 0;
  aspect-ratio: 16 / 9;
  min-height: 20rem;
  margin-block: 1.5rem;
  padding: var(--apv-pad-carte);
  overflow: hidden;
  border: 1px solid var(--bordure);
  border-radius: var(--apv-rayon-carte);
  background-color: var(--gris-fond);
  text-align: center;
}

:is(.entry-content, .is-root-container) .apv-plan > * {
  margin: 0;
}

:is(.entry-content, .is-root-container) .apv-plan :is(.apv-plan__adresse, .apv-plan__note, p, address) {
  max-width: 36ch;
  font-style: normal;
  color: var(--texte);
}

:is(.entry-content, .is-root-container) .apv-plan .apv-plan__adresse {
  font-weight: 600;
  color: var(--noir);
}

:is(.entry-content, .is-root-container) .apv-plan .apv-plan__note {
  font-size: var(--apv-taille-0);
}

:is(.entry-content, .is-root-container) .apv-plan .apv-plan__charger {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-height: 3rem;
  padding: 0 1.5rem;
  border: 0;
  border-radius: var(--apv-rayon);
  background-color: var(--jaune);
  font-family: var(--apv-police-titre);
  font-size: 1.0625rem;
  font-weight: 700;
  color: var(--bleu-fonce);
  cursor: pointer;
}

:is(.entry-content, .is-root-container) .apv-plan .apv-plan__charger:hover {
  background-color: var(--apv-jaune-survol);
}

:is(.entry-content, .is-root-container) .apv-plan .apv-plan__charger[hidden] {
  display: none;
}

:is(.entry-content, .is-root-container) .apv-plan :is(.apv-plan__charger, .apv-plan__lien):focus-visible {
  outline: var(--apv-focus);
  outline-offset: 3px;
}

:is(.entry-content, .is-root-container) .apv-plan .apv-plan__lien {
  display: inline-flex;
  align-items: center;
  min-height: 2.75rem;
  font-weight: 600;
  color: var(--bleu);
  text-decoration: underline;
  text-underline-offset: 0.18em;
}

/* Une fois l'iframe chargée, elle couvre toute la zone */
:is(.entry-content, .is-root-container) .apv-plan :is(.apv-plan__iframe, iframe) {
  position: absolute;
  inset: 0;
  width: 100%;
  max-width: none;
  height: 100%;
  border: 0;
  border-radius: 0;
}

/* Zone d'attente (adresse, note, bouton) : colonne centrée */
:is(.entry-content, .is-root-container) .apv-plan .apv-plan__zone {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 0.75rem;
}

:is(.entry-content, .is-root-container) .apv-plan .apv-plan__zone > * {
  margin: 0;
}

/* 5.12 bis (vidéo .apv-video) retirée le 2026-10-29 : le bloc apv/video rend
   désormais .apv-yt (styles du bloc, blocks/video/). */

/* 5.13 Page Contact (apv-contact) et formulaires WPForms --------------------- */
/* Deux colonnes dès 900 px : formulaire (3/5) et coordonnées (2/5, panneau bleu
   clair) ; empilées en dessous. Fonctionne que apv-contact soit un core/columns
   ou un core/group. */
:is(.entry-content, .is-root-container) .apv-contact:not(:has(> .wp-block-group__inner-container)),
:is(.entry-content, .is-root-container) .apv-contact > .wp-block-group__inner-container {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: clamp(1.5rem, 4vw, 3.5rem);
  align-items: start;
}

@media (min-width: 900px) {
  :is(.entry-content, .is-root-container) .apv-contact:not(:has(> .wp-block-group__inner-container)),
  :is(.entry-content, .is-root-container) .apv-contact > .wp-block-group__inner-container {
    grid-template-columns: minmax(0, 3fr) minmax(0, 2fr);
  }
}

:is(.entry-content, .is-root-container) .apv-contact .apv-contact__infos {
  padding: var(--apv-pad-panneau);
  border-radius: var(--apv-rayon-carte);
  background-color: var(--bleu-clair);
}

:is(.entry-content, .is-root-container) .apv-contact :is(.apv-contact__formulaire, .apv-contact__infos) > :first-child {
  margin-top: 0;
}

:is(.entry-content, .is-root-container) .apv-contact :is(.apv-contact__formulaire, .apv-contact__infos) > :last-child {
  margin-bottom: 0;
}

/* WPForms : variables du balisage moderne, puis règles directes (le balisage
   classique n'a pas de variables). Le formulaire lui-même n'est pas modifié.
   Bord de champ : --bordure-champ (proposée dans la direction artistique,
   4,08:1 sur blanc) ou, à défaut, --texte (contraste 3:1 des composants). */
body .wpforms-container {
  --wpforms-field-border-color: var(--bordure-champ, var(--texte));
  --wpforms-field-border-radius: var(--apv-rayon);
  --wpforms-field-background-color: var(--blanc);
  --wpforms-field-text-color: var(--noir);
  --wpforms-field-size-input-height: 48px;
  --wpforms-label-color: var(--noir);
  --wpforms-label-error-color: var(--erreur, var(--noir));
  --wpforms-button-background-color: var(--jaune);
  --wpforms-button-text-color: var(--bleu-fonce);
  --wpforms-button-border-radius: var(--apv-rayon);
  --wpforms-button-size-height: 48px;
  margin-block: 0;
}

body .wpforms-container .wpforms-form .wpforms-field {
  padding: 0 0 1.25rem;
}

body .wpforms-container .wpforms-form .wpforms-field .wpforms-field-label {
  margin: 0 0 0.375rem;
  font-family: var(--apv-police-texte);
  font-size: 1rem;
  font-weight: 600;
  line-height: 1.4;
  color: var(--noir);
}

body .wpforms-container .wpforms-form .wpforms-field .wpforms-required-label {
  color: var(--bleu);
}

body .wpforms-container .wpforms-form .wpforms-field :is(.wpforms-field-sublabel, .wpforms-field-description) {
  font-size: var(--apv-taille-0);
  color: var(--texte);
}

body .wpforms-container .wpforms-form .wpforms-field :is(input[type="text"], input[type="email"], input[type="tel"], input[type="url"], input[type="number"], input[type="date"], select, textarea) {
  width: 100%;
  max-width: 100%;
  height: 3rem;
  padding: 0 0.875rem;
  border: 1px solid var(--bordure-champ, var(--texte));
  border-radius: var(--apv-rayon);
  background-color: var(--blanc);
  box-shadow: none;
  font-family: var(--apv-police-texte);
  font-size: 1rem;
  color: var(--noir);
}

body .wpforms-container .wpforms-form .wpforms-field textarea {
  height: auto;
  min-height: 9rem;
  padding-block: 0.75rem;
  line-height: 1.5;
}

body .wpforms-container .wpforms-form .wpforms-field :is(input, select, textarea)::placeholder {
  color: var(--texte);
  opacity: 1;
}

body .wpforms-container .wpforms-form .wpforms-field :is(input, select, textarea):focus {
  border-color: var(--bleu);
  outline: var(--apv-focus);
  outline-offset: 1px;
  box-shadow: none;
}

body .wpforms-container .wpforms-form .wpforms-field :is(input[type="checkbox"], input[type="radio"]) {
  width: 1.25rem;
  height: 1.25rem;
  accent-color: var(--bleu);
}

/* Les tailles « moyenne » et « petite » de WPForms : pleine largeur de la colonne */
body .wpforms-container .wpforms-form .wpforms-field :is(.wpforms-field-medium, .wpforms-field-small) {
  max-width: 100%;
}

/* Bouton d'envoi = bouton principal jaune */
body .wpforms-container .wpforms-form .wpforms-submit-container .wpforms-submit {
  min-height: 3rem;
  height: auto;
  padding: 0 1.75rem;
  border: 0;
  border-radius: var(--apv-rayon);
  background-color: var(--jaune);
  box-shadow: none;
  font-family: var(--apv-police-titre);
  font-size: 1.0625rem;
  font-weight: 700;
  color: var(--bleu-fonce);
  cursor: pointer;
}

body .wpforms-container .wpforms-form .wpforms-submit-container .wpforms-submit:hover {
  background-color: var(--apv-jaune-survol);
}

body .wpforms-container .wpforms-form .wpforms-submit-container .wpforms-submit:focus-visible {
  outline: var(--apv-focus);
  outline-offset: 3px;
}

/* Erreurs : message en gras sous le champ, bord épaissi. Couleur : --erreur si
   elle est ajoutée au Customizer (rouge proposé dans le rapport du 2026-10-29, 6,57:1 sur blanc), sinon
   le noir du texte : l'erreur ne repose jamais sur la couleur seule. */
body .wpforms-container .wpforms-form .wpforms-field :is(label.wpforms-error, em.wpforms-error, .wpforms-error:not(input):not(select):not(textarea)) {
  display: block;
  margin-top: 0.375rem;
  font-size: 0.9375rem;
  font-style: normal;
  font-weight: 600;
  color: var(--erreur, var(--noir));
}

body .wpforms-container .wpforms-form .wpforms-field :is(input, select, textarea).wpforms-error {
  border-width: 2px;
  border-color: var(--erreur, var(--noir));
}

/* Confirmation d'envoi : panneau bleu clair, filet bleu à gauche */
body .entry-content .wpforms-confirmation-container-full.wpforms-confirmation-container-full:not(.wpforms-redirection-message),
body .wpforms-container .wpforms-confirmation-container-full.wpforms-confirmation-container-full {
  margin: 0 0 1.5rem;
  padding: 1.25rem 1.5rem;
  border: 0;
  border-left: var(--apv-filet) solid var(--bleu);
  border-radius: 0 var(--apv-rayon-carte) var(--apv-rayon-carte) 0;
  background-color: var(--bleu-clair);
  color: var(--texte);
}

body .entry-content .wpforms-confirmation-container-full p:last-child {
  margin-bottom: 0;
}

/* 5.14 Grandes cartes à image (apv-cartes-image > apv-carte-image) ----------- */
/* /vente-voiture-sans-permis/ (décision client du 2026-10-29) : image en fond
   (cover), dégradé sombre en bas, titre, texte court et bouton par-dessus.
   Côte à côte dès 782 px, empilées en dessous. Un seul lien par carte : le
   bouton, dont le pseudo-élément couvre toute la carte ; focus visible sur la
   carte entière. Survol : jetons --apv-carte-* et léger zoom de l'image (aucun
   zoom ni élévation avec prefers-reduced-motion).
   Dégradé : il porte une information (lisibilité du texte sur la photo) ;
   bleu foncé à 92 % en bas, 80 % à 45 % de la hauteur : blanc sur ce fond
   6,1:1 au moins pour le texte, 3,4:1 au pire pour le titre (grand texte).
   Balisage : group apv-cartes-image > group apv-carte-image > core/image
   (apv-carte-image__media) + group apv-carte-image__corps (H2, paragraphe,
   core/buttons avec un bouton). */
:is(.entry-content, .is-root-container) .wp-block-group.apv-cartes-image,
:is(.entry-content, .is-root-container) .wp-block-group.apv-cartes-image > .wp-block-group__inner-container {
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: clamp(1rem, 2vw, 1.5rem);
}

:is(.entry-content, .is-root-container) .wp-block-group.apv-cartes-image:has(> .wp-block-group__inner-container) {
  display: block;
}

@media (min-width: 782px) {
  :is(.entry-content, .is-root-container) .wp-block-group.apv-cartes-image:not(:has(> .wp-block-group__inner-container)),
  :is(.entry-content, .is-root-container) .wp-block-group.apv-cartes-image > .wp-block-group__inner-container {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

:is(.entry-content, .is-root-container) .wp-block-group.apv-carte-image {
  position: relative;
  isolation: isolate;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  box-sizing: border-box;
  min-height: clamp(26rem, 38vw, 32rem);
  margin: 0;
  padding: 0;
  overflow: hidden;
  border: var(--apv-carte-bordure);
  border-radius: var(--apv-rayon-carte);
  background-color: var(--bleu-fonce);
  box-shadow: var(--apv-carte-ombre);
  transition: var(--apv-transition-carte);
}

:is(.entry-content, .is-root-container) .wp-block-group.apv-carte-image > .wp-block-group__inner-container {
  display: contents;
}

:is(.entry-content, .is-root-container) .wp-block-group.apv-carte-image:hover {
  border-color: var(--apv-carte-bordure-survol);
  box-shadow: var(--apv-carte-ombre-survol);
  transform: translateY(var(--apv-carte-elevation));
}

/* Image en fond */
:is(.entry-content, .is-root-container) .apv-carte-image .wp-block-image {
  position: absolute;
  inset: 0;
  z-index: -2;
  width: 100%;
  max-width: none;
  height: 100%;
  margin: 0;
}

:is(.entry-content, .is-root-container) .apv-carte-image .wp-block-image img {
  display: block;
  width: 100%;
  height: 100%;
  max-height: none;
  object-fit: cover;
  border-radius: 0;
  transform: scale(1);
  transition: transform 400ms ease;
}

:is(.entry-content, .is-root-container) .apv-carte-image:hover .wp-block-image img,
:is(.entry-content, .is-root-container) .apv-carte-image:focus-within .wp-block-image img {
  transform: scale(1.04);
}

/* Dégradé sombre en bas, sous le texte */
:is(.entry-content, .is-root-container) .wp-block-group.apv-carte-image::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background-image: linear-gradient(
    to top,
    color-mix(in srgb, var(--bleu-fonce) 92%, transparent) 0%,
    color-mix(in srgb, var(--bleu-fonce) 80%, transparent) 45%,
    color-mix(in srgb, var(--bleu-fonce) 0%, transparent) 85%
  );
}

:is(.entry-content, .is-root-container) .apv-carte-image .wp-block-group.apv-carte-image__corps {
  margin: 0;
  padding: clamp(1.25rem, 3vw, 2rem);
  background: none;
}

:is(.entry-content, .is-root-container) .apv-carte-image .apv-carte-image__corps :is(h2, h3, p) {
  max-width: none;
  color: var(--blanc);
}

:is(.entry-content, .is-root-container) .apv-carte-image .apv-carte-image__corps :is(h2, h3) {
  margin: 0 0 0.5rem;
  font-size: clamp(1.5rem, 1.1rem + 1.4vw, 2.125rem);
  line-height: 1.12;
}

:is(.entry-content, .is-root-container) .apv-carte-image .apv-carte-image__corps p {
  margin: 0;
  font-size: 1.0625rem;
  line-height: 1.5;
}

/* Bouton sous le texte, aligné à droite dans la carte (décision client n° 7, 2026-10-29) */
:is(.entry-content, .is-root-container) .apv-carte-image .apv-carte-image__corps .wp-block-buttons {
  justify-content: flex-end;
  margin: 1.25rem 0 0;
}

/* Le lien du bouton couvre toute la carte (un seul lien) */
:is(.entry-content, .is-root-container) .apv-carte-image .wp-block-button__link::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
}

:is(.entry-content, .is-root-container) .apv-carte-image .wp-block-button__link:focus-visible {
  outline: none;
}

:is(.entry-content, .is-root-container) .wp-block-group.apv-carte-image:has(.wp-block-button__link:focus-visible) {
  outline: 3px solid var(--bleu);
  outline-offset: 3px;
}

:is(.entry-content, .is-root-container) .apv-carte-image:has(.wp-block-button__link:focus-visible) .wp-block-button__link {
  box-shadow: 0 0 0 3px var(--blanc);
}

/* 5.15 Information avec icône (apv-info : icône, libellé, texte) ------------- */
/* /vente-voiture-sans-permis/ (horaires, téléphone) : icône du sprite dans une
   pastille bleu clair à gauche, libellé en Sora, texte dessous.
   Le bloc « Suivez-nous » de /contact/ (apv-info apv-reseaux) garde sa propre mise en page. */
:is(.entry-content, .is-root-container) .wp-block-group.apv-info:not(.apv-reseaux),
:is(.entry-content, .is-root-container) .wp-block-group.apv-info:not(.apv-reseaux) > .wp-block-group__inner-container {
  display: grid;
  grid-template-columns: auto minmax(0, 1fr);
  column-gap: 1rem;
  align-items: start;
}

:is(.entry-content, .is-root-container) .wp-block-group.apv-info:not(.apv-reseaux):has(> .wp-block-group__inner-container) {
  display: block;
}

:is(.entry-content, .is-root-container) .wp-block-group.apv-info:not(.apv-reseaux) {
  margin: 0 0 1.5rem;
}

:is(.entry-content, .is-root-container) .wp-block-group.apv-info:not(.apv-reseaux):last-child {
  margin-bottom: 0;
}

:is(.entry-content, .is-root-container) .apv-info:not(.apv-reseaux) > :not(p):not(.wp-block-group__inner-container),
:is(.entry-content, .is-root-container) .apv-info:not(.apv-reseaux) > .wp-block-group__inner-container > :not(p) {
  grid-row: 1 / span 2;
  margin: 0;
  line-height: 0;
}

:is(.entry-content, .is-root-container) .apv-info:not(.apv-reseaux) :is(svg.apv-icon, svg.apv-icone) {
  box-sizing: content-box;
  display: block;
  width: 1.5rem;
  height: 1.5rem;
  padding: 0.75rem;
  border-radius: var(--apv-rayon);
  background-color: var(--bleu-clair);
  color: var(--bleu);
}

:is(.entry-content, .is-root-container) .apv-info:not(.apv-reseaux) p {
  grid-column: 2;
  margin: 0;
}

:is(.entry-content, .is-root-container) .apv-info:not(.apv-reseaux) p.apv-info__titre {
  margin: 0.125rem 0 0.25rem;
  font-family: var(--apv-police-titre);
  font-size: 1.125rem;
  font-weight: 700;
  line-height: 1.3;
  color: var(--apv-titres);
}

/* 5.16 Cartes de texte côte à côte (core/columns apv-cartes-texte > core/column
   apv-carte-texte apv-carte-fixe) ---------------------------------------------- */
/* /vente-voiture-sans-permis/ (décision client n° 9, 2026-10-29) : deux cartes
   blanches non cliquables (bordure fine, ombre légère ; survol : bordure seule),
   bouton aligné à droite en bas de carte. Côte à côte dès 782 px (seuil natif du
   bloc Colonnes), empilées en dessous. */
:is(.entry-content, .is-root-container) .wp-block-columns.apv-cartes-texte {
  gap: clamp(1.25rem, 3vw, 2rem);
  align-items: stretch;
  margin: 0;
}

:is(.entry-content, .is-root-container) .wp-block-column.apv-carte-texte {
  display: flex;
  flex-direction: column;
  min-width: 0;
  padding: clamp(1.5rem, 3vw, 2.25rem);
  border: var(--apv-carte-bordure);
  border-radius: var(--apv-rayon-carte);
  background-color: var(--blanc);
  box-shadow: var(--apv-carte-ombre);
  transition: var(--apv-transition-carte-fixe);
}

:is(.entry-content, .is-root-container) .wp-block-column.apv-carte-texte:hover {
  border-color: var(--apv-carte-fixe-bordure-survol);
}

:is(.entry-content, .is-root-container) .wp-block-column.apv-carte-texte > :first-child {
  margin-top: 0;
}

:is(.entry-content, .is-root-container) .wp-block-column.apv-carte-texte h2 {
  font-size: clamp(1.375rem, 1.1rem + 1vw, 1.75rem);
}

:is(.entry-content, .is-root-container) .wp-block-column.apv-carte-texte > .wp-block-buttons {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  margin-top: auto;
  padding-top: 1.25rem;
}

/* 6. Mouvement réduit -------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  :is(.entry-content, .is-root-container) .wp-block-details > summary,
  :is(.entry-content, .is-root-container) .wp-block-details > summary::after,
  .entry-content .wp-block-button .wp-block-button__link,
  :is(.entry-content, .is-root-container) .apv-carte-image .wp-block-image img {
    transition: none;
  }

  /* Pas de zoom de l'image (l'élévation est déjà à 0 : jeton de theme.css) */
  :is(.entry-content, .is-root-container) .apv-carte-image:hover .wp-block-image img,
  :is(.entry-content, .is-root-container) .apv-carte-image:focus-within .wp-block-image img {
    transform: none;
  }

  .is-root-container {
    --apv-carte-elevation: 0px;
    --apv-transition-carte: none;
  }
}

/* Conteneurs de groupe : le CSS dynamique de GeneratePress donne 40 px (30 px sous 768 px) de marge
   intérieure à tout « .site-main .wp-block-group__inner-container » ; ces marges s'empilaient d'un groupe
   à l'autre (titre des cartes de services à 204 px de large en mobile). Remise à zéro : la marge
   intérieure des sections et des cartes est portée par le groupe lui-même (règles plus haut). */
.site-main .entry-content .wp-block-group__inner-container {
  padding: 0;
}

/* Logo « Ligier Garantie + » de la page Extension de garantie (étape 9) : réduit de 30 %, même place
   (centré dans sa colonne). Source 1000 × 1000 px affichée sur moins de 400 px : jamais agrandie. */
:is(.entry-content, .is-root-container) .wp-block-image.apv-logo-garantie {
  width: 70%;
  max-width: 70%;
  margin-inline: auto;
}

:is(.entry-content, .is-root-container) .wp-block-image.apv-logo-garantie img {
  width: 100%;
  height: auto;
}

/* 5.17 Contact : colonne « Nos coordonnées / Horaires » (apv-coord), plan, puis « Suivez-nous » --------------------------
   Icône du sprite (même jeu et même taille que le pied, 20 px) dans une pastille de 44 px, alignée en haut
   avec le titre ; titre H3 mesuré ; texte dessous ; 20 px entre les blocs. Réseaux : [apv_reseaux], ronds. */
body .entry-content .apv-contact__infos .apv-coord {
  display: grid;
  gap: 1.25rem;
  margin: 0 0 1.5rem;
}

body .entry-content .apv-coord .wp-block-group__inner-container {
  display: contents;
}

body .entry-content .apv-coord .apv-coord__item {
  display: grid;
  grid-template-columns: 2.75rem minmax(0, 1fr);
  column-gap: 1rem;
  align-items: start;
  margin: 0;
}

body .entry-content .apv-coord .apv-coord__item .apv-icone-bloc {
  grid-column: 1;
  grid-row: 1 / span 4;
  display: grid;
  place-items: center;
  width: 2.75rem;
  height: 2.75rem;
  margin: 0;
  border-radius: 50%;
  background-color: var(--blanc);
  box-shadow: inset 0 0 0 1px var(--bordure);
  color: var(--bleu);
  line-height: 0;
}

body .entry-content .apv-coord .apv-coord__item .apv-icone-bloc svg {
  width: 1.25rem;
  height: 1.25rem;
  padding: 0;
  background: none;
}

body .entry-content .apv-coord .apv-coord__item > *:not(.apv-icone-bloc),
body .entry-content .apv-coord .apv-coord__item > .wp-block-group__inner-container > *:not(.apv-icone-bloc) {
  grid-column: 2;
}

body .entry-content .apv-contact__infos h3.apv-coord__titre {
  margin: 0.5rem 0 0.375rem;
  font-size: 1.125rem;
  line-height: 1.3;
  color: var(--apv-titres);
}

body .entry-content .apv-contact__infos h3.apv-coord__titre::after {
  content: none;
}

body .entry-content .apv-coord .apv-coord__item p {
  margin: 0 0 0.25rem;
  line-height: 1.55;
}

body .entry-content .apv-coord .apv-coord__item a[href^="tel:"] {
  font-weight: 700;
  color: var(--bleu-fonce);
}

/* « Suivez-nous » en bas du panneau, sous le plan : titre et boutons centrés */
body .entry-content .apv-contact__infos .apv-coord__suivre {
  margin: 1.5rem 0 0;
  text-align: center;
}

body .entry-content .apv-contact__infos .apv-coord__suivre h3.apv-coord__titre {
  margin: 0 0 0.75rem;
}

body .entry-content .apv-contact__infos .apv-coord__suivre .apv-coord__reseaux {
  justify-content: center;
}

body .entry-content .apv-contact__infos .apv-coord__reseaux {
  display: flex;
  flex-wrap: wrap;
  gap: 0.625rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

body .entry-content .apv-contact__infos .apv-coord__reseaux li {
  margin: 0;
  padding: 0;
}

body .entry-content .apv-contact__infos .apv-coord__reseau {
  display: grid;
  place-items: center;
  width: 2.75rem;
  height: 2.75rem;
  border-radius: 50%;
  background-color: var(--bleu);
  color: var(--blanc);
  text-decoration: none;
  transition: background-color 0.2s ease, color 0.2s ease;
}

body .entry-content .apv-contact__infos .apv-coord__reseau:hover {
  background-color: var(--jaune);
  color: var(--bleu-fonce);
}

body .entry-content .apv-contact__infos .apv-coord__reseau:focus-visible {
  outline: 3px solid var(--bleu-fonce);
  outline-offset: 2px;
}

body .entry-content .apv-contact__infos .apv-coord__reseau svg {
  width: 1.375rem;
  height: 1.375rem;
}

/* Plan de la page Contact : carte blanche, bordure fine et ombre, comme les autres cartes */
body .entry-content .apv-contact__infos .apv-plan {
  border: var(--apv-carte-bordure, 1px solid var(--bordure));
  border-radius: var(--apv-rayon-carte, 14px);
  background-color: var(--blanc);
  box-shadow: var(--apv-carte-ombre, none);
}

/* Formulaire de la page Contact : libellés en gras, champs à bord net, bouton jaune de la charte */
body .entry-content .apv-contact__formulaire .wpforms-container .wpforms-field-label {
  font-weight: 700;
  color: var(--noir);
}

body .entry-content .apv-contact__formulaire .wpforms-container :is(input[type="text"], input[type="email"], input[type="tel"], textarea) {
  border: 1px solid var(--bordure-champ);
  border-radius: var(--apv-rayon);
  background-color: var(--blanc);
}

body .entry-content .apv-contact__formulaire .wpforms-container :is(input, textarea):focus {
  border-color: var(--bleu);
  box-shadow: 0 0 0 3px color-mix(in srgb, var(--bleu) 25%, transparent);
  outline: none;
}

body .entry-content .apv-contact__formulaire .wpforms-container button[type="submit"] {
  min-height: 3rem;
  padding: 0.75rem 1.75rem;
  border: 0;
  border-radius: var(--apv-rayon);
  background-color: var(--jaune);
  color: var(--bleu-fonce);
  font-family: var(--apv-police-titre);
  font-weight: 800;
}

body .entry-content .apv-contact__formulaire .wpforms-container button[type="submit"]:hover {
  background-color: var(--apv-jaune-survol);
}
