/**
 * Overrides iso-front du périmètre vente — lot CSS 2026-07-08.
 *
 * Correctifs CIBLÉS par-dessus le bundle scopé (vam-vente.scoped.css), chargés
 * APRÈS lui (dep vam-vente-css). Chaque bloc référence le diagnostic comparatif
 * prod site 2 ↔ staging (agent css-diag-n2, notes NEXT-SESSION lot CSS).
 * Étalon = prod site 2. NE PAS fusionner dans le bundle généré (il est compilé
 * par tools/css-bundle/ — ce fichier est maintenu À LA MAIN).
 */

/* ------------------------------------------------------------------ *
 * 1. Gap 24px au-dessus du menu (retour Pierre 2026-07-08).
 *    Cause : le wrapper chrome D24 `wp:group` (layout default) est classé
 *    `is-layout-flow` par WP → block-gap global du thème site 1 (1.5rem)
 *    sur `> * + *`. Prod : header = template-part, aucun gap.
 *    Neutralisé sur les DEUX wrappers chrome (header + footer).
 * ------------------------------------------------------------------ */
.vam-vente header.site-header > * + *,
.vam-vente footer.site-footer > * + *,
.vam-vente header.site-header .wp-block-acf-menu-vanaway-shop,
.vam-vente footer.site-footer .wp-block-acf-footer-vanaway-shop {
	margin-block-start: 0;
	margin-top: 0;
}

/* ------------------------------------------------------------------ *
 * 2. Facettes soulignées (retour Pierre — cause exacte : le scoping du
 *    bundle a REMPLACÉ `body` par `.vam-vente` au lieu de le préfixer →
 *    la règle miroir `body .wpc-filters-widget-content label a
 *    { text-decoration-line:none !important }` a perdu 1 point de
 *    spécificité et passe DERRIÈRE `label:not([class]) a { underline
 *    !important }` (égalité (0,2,2), ordre source défavorable).
 *    Ici : (0,2,3) → regagne la bataille quel que soit l'ordre.
 * ------------------------------------------------------------------ */
.vam-vente .wpc-filters-widget-content label a,
.vam-vente .wpc-filters-section label a {
	text-decoration-line: none !important;
}

/* ------------------------------------------------------------------ *
 * 3. Couleur d'accent Filter Everything (réglage GLOBAL en base :
 *    #188780 teal site 1 — intouchable, partagé avec les filtres loc).
 *    Prod site 2 : #6361b1. FE la sert via un CSS généré
 *    (uploads/cache/filter-everything/<hash>.css, 17 déclarations —
 *    diff complet des 2 fichiers générés, retour Pierre listing
 *    2026-07-08 nuit).
 *    ⚠️ RÈGLE DU BLOC (leçon chips teal) : le CSS généré charge APRÈS ce
 *    fichier → l'ordre ne nous sauve jamais, il faut une spécificité
 *    STRICTEMENT supérieure. On réplique donc le SÉLECTEUR EXACT de la
 *    règle générée en insérant `.vam-vente` après `body` — jamais de
 *    forme raccourcie (le premier jet à (0,4,3) perdait contre la règle
 *    générée (0,4,4) : chips restés teal).
 *    (Datepicker FE non couvert : aucun filtre date sur le périmètre.)
 * ------------------------------------------------------------------ */
.vam-vente .wpc-filters-range-inputs .ui-slider-horizontal .ui-slider-range {
	background-color: #6361b1;
}

.vam-vente .wpc-spinner::after {
	border-top-color: #6361b1;
}

.vam-vente .star-rating span,
.vam-vente .star-rating span::before {
	color: #6361b1;
}

/* Chip sélectionné (fond + bord) — miroir exact du généré (0,4,4)/(0,3,3). */
body.vam-vente .wpc-filters-main-wrap input.wpc-label-input:checked + label span.wpc-filter-label-wrapper {
	background-color: #6361b1;
}

body.vam-vente .wpc-filters-main-wrap input.wpc-label-input:checked + label {
	border-color: #6361b1;
}

/* Chip hover — manquait au premier jet (états relevés au diff généré). */
body.vam-vente .wpc-filters-main-wrap input.wpc-label-input + label:hover span.wpc-filter-label-wrapper {
	color: #f5f5f5;
	background-color: #6361b1;
}

body.vam-vente .wpc-filters-main-wrap input.wpc-label-input + label:hover {
	border-color: #6361b1;
}

body.vam-vente .wpc-filter-chips-list li.wpc-filter-chip:not(.wpc-chip-reset-all) a {
	border-color: #6361b1;
}

body.vam-vente .wpc-filters-main-wrap .wpc-filters-widget-controls-container a.wpc-filters-apply-button,
body.vam-vente .wpc-filters-main-wrap a.wpc-filters-submit-button {
	border-color: #6361b1;
	background-color: #6361b1;
}

body.vam-vente a.wpc-filters-open-widget:active {
	border-color: #6361b1;
	background-color: #6361b1;
	color: #fff;
}

.vam-vente .flrt-star-label svg {
	stroke: #6361b1;
}

.vam-vente .flrt-star-label-hover svg,
.vam-vente .wpc-chip-stars svg {
	fill: #6361b1;
}

/* ------------------------------------------------------------------ *
 * 4. Chips de facettes EN LIGNE (retour Pierre listing 2026-07-08 nuit :
 *    staging = chips empilés verticalement, prod = flux en ligne).
 *    Cause : règle GÉNÉRIQUE du thème SITE 1 (main.css, spécificité
 *    (0,8,2)) qui force `flex-direction:column; gap:.5rem` sur toute
 *    liste de labels FE non-dropdown/non-hiérarchique — elle style les
 *    filtres LOC et fuit dans le périmètre vente. Le site 2 n'a PAS
 *    cette règle : ses chips suivent le défaut du plugin FE (row/wrap,
 *    gap normal — computed vérifié sur prod). Miroir exact + .vam-vente
 *    (0,9,2) → gagne quel que soit l'ordre.
 * ------------------------------------------------------------------ */
body.vam-vente .wpc-filters-section:not(.wpc-filter-more-less):not(.wpc-filter-post_meta_num):not(.wpc-filter-tax_numeric):not(.wpc-filter-layout-dropdown) .wpc-filter-content:not(.wpc-filter-has-hierarchy) ul.wpc-filters-ul-list {
	flex-direction: row;
	gap: normal;
}

/* ------------------------------------------------------------------ *
 * 5. Pictos `fill-secondary-600` (retour Pierre réseau 2026-07-08 nuit :
 *    pictos adresse/téléphone VERTS sur staging, violet foncé prod).
 *    Cause : le site 2 N'ÉMET PAS cette classe Tailwind (JIT) — en prod
 *    le `fill` SVG HÉRITE simplement (computed #212048, pictos map) ;
 *    le main.css SITE 1 la définit VERTE (#6a9a2a) globalement + sa
 *    variante hover menu. Markup concerné sur le périmètre vente :
 *    map-agences (adresse/tél), circle-info des cartes véhicules,
 *    hover des icônes du mega-menu. `fill: inherit` = neutralisation
 *    fidèle au mécanisme source (« pas de règle » → héritage SVG),
 *    le reste de la cascade venant du bundle scopé.
 * ------------------------------------------------------------------ */
.vam-vente .fill-secondary-600 {
	fill: inherit;
}

/* Variante hover du menu — la règle site 1 est à (0,3,0), on passe au-dessus. */
.vam-vente .group\/link:hover .group-hover\/link\:fill-secondary-600 {
	fill: inherit;
}

/* ------------------------------------------------------------------ *
 * 7. CLS bandeau promo (chantier webperf 2026-07-22, volet C — diag
 *    tools/recette/diag-cls-header.js). Avant l'init Splide, les slides du
 *    bandeau s'empilent (.top-menu 40px → 60px) puis se replient : la hauteur
 *    transite dans --pib-menu-height (saveHeight) et re-décale tout le
 *    contenu (~0.04 CLS résiduel). On n'affiche que la 1re slide tant que
 *    Splide n'a pas posé .is-initialized — rendu identique au post-init,
 *    le texte long peut toujours wrapper (pas de clamp de hauteur).
 */
.vam-vente .top-menu .splide:not([class*="splide--"]) .splide__slide:not(:first-child) {
	display: none;
}

/* Complément volet C : pendant le mount Splide (clones du mode loop), le
 * bandeau passe transitoirement sous sa hauteur nominale (~20px au lieu de
 * 40px) et l'oscillation transite encore dans --pib-menu-height. min-height
 * = hauteur nominale une slide ; un message long peut toujours wrapper. */
.vam-vente .top-menu {
	min-height: 40px;
}

/* ------------------------------------------------------------------ *
 * 8. Couleur du burger mobile (retour Pierre 2026-07-22). La règle thème
 *    site 1 `body:not(:has(section[data-transparent])) .menu-grid button`
 *    (spécificité 0,2,3) peint le burger en teal #11978f par-dessus le
 *    `.vam-vente .bg-primary` (0,2,0) du bundle. Étalon site 2 = violet
 *    #6361b1 (cf. oldshop). Le menu vente n'a qu'un seul <button> (burger).
 */
.vam-vente .menu-grid [data-menu-burger-button] {
	background-color: #6361b1;
}

/* ------------------------------------------------------------------ *
 * 9. Galerie à image unique (review P1-5, 2026-08-10). Cas « featured
 *    image sans galerie WC » (produit 14110) : render.php sort désormais
 *    l'image principale seule, mais son `col-span-2` sur `lg:grid-cols-4`
 *    laisserait la moitié droite de la grille vide en desktop. Le bundle
 *    scopé n'a pas de col-span-4 → pleine largeur posée ici. Le sélecteur
 *    ne peut matcher qu'une grille à enfant unique (aucun effet sur les
 *    galeries normales).
 */
@media (min-width: 1024px) {
	.vam-vente .gallery:not(:has(> :nth-child(2))) > .thumbnail {
		grid-column: 1 / -1;
	}
}

/* ------------------------------------------------------------------ *
 * 10. Lightbox galerie fermée hors viewport (chantier webperf P1-5,
 *     2026-08-10). `.main-carousel` (position:fixed, opacity:0, h-0/w-0)
 *     n'a pas de top/left tant que `data-open` vaut sa valeur initiale
 *     "open" (neutre, ni "true" ni "false" — volontaire dans render.php
 *     pour ne pas déclencher l'animation closePopup au chargement) : le
 *     bundle scopé ne pose top/left que pour [data-open=true|false]
 *     (specificité (0,4,0), cf. assets/css/vam-vente.scoped.css). Sans
 *     règle dédiée, `position:fixed` sans top/left garde sa position
 *     statique dans le flux → dans le viewport. Un rect d'aire nulle
 *     situé dans les bornes du root est rapporté isIntersecting:true par
 *     IntersectionObserver, donc Perfmatters lazy-load chargeait les
 *     images de la lightbox dès l'init au lieu de l'ouverture.
 *     Spécificité (0,3,0) < (0,4,0) des règles [data-open=...] : le
 *     toggle et son animation reprennent la main dès le premier clic,
 *     comportement inchangé, le saut de position est invisible
 *     (opacity:0 à ce stade).
 * ------------------------------------------------------------------ */
.vam-vente .wp-block-acf-gallery-vanaway-shop .main-carousel {
	left: -9999px;
	/* transition-property SANS left (P1-5 bis) : le markup pose `duration-l`
	   (transition-duration: .5s) sans transition-property → `all`, or les
	   transitions priment sur les keyframes dans la cascade. Chrome ne
	   démarre pas de transition sur les propriétés couvertes par l'animation
	   lancée au même changement d'état (vérifié staging 2026-08-13), mais on
	   fige pour les autres moteurs : `left` reste aux seuls keyframes (zoom
	   depuis la vignette, left statiques appliqués sans transition),
	   opacity/visibility/width/height/top gardent le comportement actuel.
	   NB : `visibility` vient d'une déclaration Splide (.splide →
	   .is-initialized), pas de ce bloc ; toute NOUVELLE propriété animée sur
	   cet élément doit être ajoutée à cette liste (sauf `left`), sinon elle
	   cessera de transitionner. */
	transition-property: opacity, visibility, width, height, top;
}

/* ------------------------------------------------------------------ *
 * 10 bis. Idem à l'état FERMÉ post-interaction (P1-5 bis, 2026-08-13).
 *     `data-open` ne revaut jamais "open" après le premier clic : la
 *     règle 10 (0,3,0) est alors battue par le [data-open=false] du
 *     bundle (0,4,0) qui replace le conteneur 0×0 dans le viewport →
 *     la garantie anti-préchargement (cf. règle 10) ne tenait que
 *     jusqu'à la première ouverture. Même sélecteur/spécificité
 *     (0,4,0) que le bundle, chargé après lui (dépendance
 *     vam-vente-css) → il gagne. Timing : closePopup (500 ms) n'a pas
 *     d'animation-fill-mode (défaut none) et son keyframe `to` pose
 *     left:var(--left-gallery) — pendant l'animation les keyframes
 *     priment sur toute déclaration normale (cascade : transition >
 *     important > animation > normal ; les transitions sont écartées
 *     pour `left` par le transition-property de la règle 10), donc ce
 *     left ne s'applique qu'à la FIN de la fermeture : l'animation ne
 *     saute pas. Ne JAMAIS mettre !important ici (il primerait sur les
 *     keyframes et casserait l'animation), ni réintroduire `left` dans
 *     le transition-property de la règle 10. openPopup repart de son
 *     keyframe `from` (left:var(--left-gallery)), jamais de -9999px
 *     visible à l'ouverture.
 * ------------------------------------------------------------------ */
.vam-vente .wp-block-acf-gallery-vanaway-shop .main-carousel[data-open="false"] {
	left: -9999px;
}

/* -------------------------------------------------------------------------
 * Règle 11 — Hub `/amenagement` : bloc `map-ateliers-vanaway-shop`.
 *
 * Ce bloc porte AUSSI la classe `wp-block-acf-map-agences-vanaway-shop` : tout
 * le style carte (marker, scroller, grid-map, accordéon) lui vient donc du
 * bundle vente, sans une ligne recopiée. Ne restent ici que les utilitaires du
 * bloc THÈME `/agences` réellement ABSENTS du build Tailwind figé — vérifiés un
 * par un : `aspect-[3/4]`, `group-hover/card:scale-125`, `from-55%`,
 * `to-transparent`, `md:!grid-cols-2`, les variantes `data-[active]/button:*` et
 * `border-b-2` / `border-transparent`.
 *
 * Plutôt que d'inventer des noms d'utilitaires Tailwind que le bundle ne
 * connaîtra jamais, on nomme explicitement (`vam-card-media`, `vam-card-scrim`)
 * et on SCOPE tout sous la classe du bloc : aucune fuite possible vers les
 * ~200 pages vente existantes.
 * ---------------------------------------------------------------------- */

/* Vignette de carte : ratio 3/4 et zoom au survol (thème : `aspect-[3/4]`
   + `group-hover/card:scale-125`). */
.wp-block-acf-map-ateliers-vanaway-shop .vam-card-media {
	aspect-ratio: 3 / 4;
}

@media (max-width: 1023.98px) {
	.wp-block-acf-map-ateliers-vanaway-shop .vam-card-media {
		max-height: 24rem; /* thème : max-lg:max-h-96 */
	}
}

.wp-block-acf-map-ateliers-vanaway-shop .group\/card:hover .vam-card-media {
	transform: scale(1.25);
}

/* Voile de lisibilité sous le titre (thème : bg-gradient-to-t from-black/55
   from-55% to-transparent). */
.wp-block-acf-map-ateliers-vanaway-shop .vam-card-scrim {
	background-image: linear-gradient(to top, rgba(0, 0, 0, 0.55) 55%, transparent 100%);
}

/* Grille : 1 colonne, 2 à partir de md, 3 à partir de lg (le bundle n'a que
   `lg:grid-cols-3`). Lignes de hauteur égale comme sur /agences. */
@media (min-width: 768px) {
	.wp-block-acf-map-ateliers-vanaway-shop .vam-ateliers-grid {
		grid-template-columns: repeat(2, minmax(0, 1fr));
	}
}

@media (min-width: 1024px) {
	.wp-block-acf-map-ateliers-vanaway-shop .vam-ateliers-grid {
		grid-auto-rows: 1fr;
		grid-template-columns: repeat(3, minmax(0, 1fr));
	}
}

/* Carte SANS image d'agence : le voile dégradé n'a rien à assombrir et le titre
   blanc passerait sur fond transparent. Fond plein de repli. */
.wp-block-acf-map-ateliers-vanaway-shop .vam-card--noimage {
	background-color: var(--wp--preset--color--primary-900, #1f2933);
}

.wp-block-acf-map-ateliers-vanaway-shop .vam-card--noimage .vam-card-scrim {
	background-image: none;
}

/* État de la bascule Carte / Liste.

   L'état PAR DÉFAUT vient des classes du markup (`hidden lg:grid` sur la carte,
   `lg:hidden` sur la liste) : rien n'est décidé en JavaScript, donc ni flash ni
   saut de mise en page au chargement. Le JS ne pose que `data-view` sur la
   section quand l'utilisateur clique, et ces règles-ci prennent alors le relais.

   Spécificité (0,3,1) — une classe, deux attributs, un type : au-dessus des
   utilitaires `.hidden` / `.lg\:grid` (0,1,0) qu'elles doivent pouvoir contredire. Cantonnées au breakpoint lg,
   puisque la bascule elle-même est masquée en dessous. */
@media (min-width: 1024px) {
	.wp-block-acf-map-ateliers-vanaway-shop[data-view="map"] div[data-target="map"] {
		display: grid;
	}

	.wp-block-acf-map-ateliers-vanaway-shop[data-view="map"] div[data-target="list"] {
		display: none;
	}

	.wp-block-acf-map-ateliers-vanaway-shop[data-view="list"] div[data-target="map"] {
		display: none;
	}

	.wp-block-acf-map-ateliers-vanaway-shop[data-view="list"] div[data-target="list"] {
		display: flex;
	}
}

/* Couleurs de la section — pilotées par `data-view`, comme sur /agences.

   Vue Carte  = fond foncé, fil d'Ariane / H1 / onglets en BLANC.
   Vue Liste  = fond clair #f1f4ff (primary-100 vente), texte foncé.
   TOUTE la section bascule : c'est le comportement du bloc thème.

   ⚠️ Pourquoi ces règles n'utilisent PAS `:has(button[…][data-active])`, alors
   que le bundle vente en contient déjà une : justement parce qu'elle existe.
   `.vam-vente .wp-block-acf-map-agences-vanaway-shop:has(button[data-target=map][data-active])`
   pèse (0,4,1) et force fond violet + texte blanc — impossible à défaire pour la
   vue Liste sans `!important`. Le render du bloc et son view.js ne posent donc
   JAMAIS `data-active` sur ces boutons : la règle du bundle ne matche pas, et
   l'état vit dans `data-view` sur la section. Ne pas réintroduire `data-active`.

   Spécificité : (0,2,0), soit celle de la règle de base du bundle
   (`.vam-vente .wp-block-acf-map-agences-vanaway-shop`). C'est l'ordre de
   chargement qui tranche — cette feuille est enqueuée APRÈS le bundle (handles
   `vam-vente-css` puis `vam-vente-overrides` — ce dernier DÉPEND du premier
   (`wp_enqueue_style( 'vam-vente-overrides', …, array( 'vam-vente-css' ) )`,
   helpers.php), donc l'ordre est garanti, pas seulement constaté). */
.wp-block-acf-map-ateliers-vanaway-shop.wp-block-acf-map-agences-vanaway-shop {
	background-color: var(--wp--preset--color--primary-100, #f1f4ff);
	color: var(--wp--preset--color--primary-900, #212048);
	fill: var(--wp--preset--color--primary-900, #212048);
}

/* Vue Carte : uniquement à partir de lg, seul palier où la carte s'affiche et
   où la bascule existe. En dessous, la section ne montre que la grille de
   cartes : elle reste claire, comme /agences en mobile. */
@media (min-width: 1024px) {
	.wp-block-acf-map-ateliers-vanaway-shop.wp-block-acf-map-agences-vanaway-shop[data-view="map"] {
		background-color: var(--wp--preset--color--primary-800, #3b3a73);
		color: #fff;
		fill: #fff;
	}
}

/* Le H1 et les liens du fil d'Ariane suivent la couleur de la section.

   `color: inherit` n'est pas décoratif : le main.css du thème pose
   `body h1, body h2, body .has-title-4-xl-font-size { color: #042828 }` — une
   déclaration explicite, qui bat l'héritage quelle que soit la couleur de la
   section. C'est exactement ce qui rendait le titre illisible sur le violet.
   Sur les liens, la seule règle de couleur en place est le preflight Tailwind
   (`a { color: inherit }`), neutre par construction : la déclaration ci-dessous
   est donc défensive, pour qu'un futur `a { color: … }` global ne vienne pas
   casser le contraste dans l'une des deux vues. */
.wp-block-acf-map-ateliers-vanaway-shop .vam-hub-title,
.wp-block-acf-map-ateliers-vanaway-shop .breadcrumb,
.wp-block-acf-map-ateliers-vanaway-shop .breadcrumb li,
.wp-block-acf-map-ateliers-vanaway-shop .breadcrumb a,
.wp-block-acf-map-ateliers-vanaway-shop .breadcrumb .breadcrumb-item.active {
	color: inherit;
}

/* Typographie du H1 — alignée sur le titre de /agences.

   Mesure au navigateur (2026-08-23, viewport 1280 px) : les deux titres sortent
   à 40,834 px, mais /agences est en `line-height: normal` quand le hub était à
   `1`. La taille venait déjà de `has-title-4-xl-font-size`, que WordPress émet
   dans ses global styles AVEC `!important` — voir le commentaire du render : ce
   n'est PAS une classe morte, la retirer renverrait le H1 en title-5-xl
   (clamp 48→80 px).

   `font-size` est donc redéclarée ici en FILET, pas en correctif : tant que la
   classe est là, le `!important` des global styles prime et cette ligne ne sert
   à rien ; le jour où quelqu'un la retire, l'intention reste écrite dans notre
   propre CSS au lieu de dépendre d'un preset WordPress.

   `line-height`, lui, est le vrai correctif : il bat
   `.vam-vente h1 { line-height: 1 }` du bundle (0,1,1) par la spécificité
   (0,2,0), là où le `line-height: normal` du thème perdait l'égalité sur
   l'ordre de chargement. Sur un titre qui passe à la ligne — c'est le cas en
   mobile — l'interlignage redevient celui de /agences. */
.wp-block-acf-map-ateliers-vanaway-shop .vam-hub-title {
	font-size: var(--wp--preset--font-size--title-4-xl);
	line-height: normal;
}

/* Chevrons « > » du fil d'Ariane en vue Carte.

   Ils ne suivent PAS `color`, et c'est ce qui les laissait NOIRS sur le fond
   foncé pendant que les libellés passaient au blanc : le bundle les pose en
   `content: url("data:image/svg+xml,…")`, donc en IMAGE, dont la couleur est
   celle du `fill` écrit DANS le SVG — absent, donc noir par défaut (2,0:1 sur
   #3B3A73). Ni `color`, ni `fill`, ni `currentColor` n'ont prise sur un contenu
   remplacé.

   La parade est celle du site lui-même : le bundle porte déjà une variante
   BLANCHE du même chevron, servie sous `.wp-block-acf-hero-image-vanaway-shop`
   et `.blog-bg-image` — ses deux autres contextes à fond sombre. C'est
   d'ailleurs le hero qui la fournissait au hub jusqu'à ce que le fil d'Ariane
   déménage dans ce bloc. Ce `content` en est la copie exacte (Font Awesome Free
   6.7.2, attribution conservée dans le SVG). Le bloc thème `/agences` résout le
   même problème avec une classe `changeSvgColor` posée en JS ; ici `data-view`
   suffit, sans JS.

   Rien d'autre n'est redéclaré : largeur, marges et alignement viennent de la
   règle de base, et `li:last-child::after { display:none }` continue de masquer
   le chevron final.

   Cantonné à `min-width:1024px` comme le fond foncé : en dessous la section est
   claire, et le chevron sombre du bundle est le bon. La vue Liste n'a donc
   aucune règle ici — elle retombe volontairement sur ce même chevron sombre.

   Spécificité (0,3,2) contre (0,2,2) pour la règle du bundle. */
@media (min-width: 1024px) {
	.wp-block-acf-map-ateliers-vanaway-shop[data-view="map"] .breadcrumb li::after {
		content: url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns=%27http://www.w3.org/2000/svg%27 fill=%27%23fff%27 viewBox=%270 0 320 512%27%3E%3C%21--%21Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--%3E%3Cpath d=%27M310.6 233.4c12.5 12.5 12.5 32.8 0 45.3l-192 192c-12.5 12.5-32.8 12.5-45.3 0s-12.5-32.8 0-45.3L242.7 256 73.4 86.6c-12.5-12.5-12.5-32.8 0-45.3s32.8-12.5 45.3 0l192 192z%27/%3E%3C/svg%3E");
	}
}

/* Bascule Carte / Liste. Le bundle n'a ni `border-b-2`, ni `border-transparent`,
   ni les variantes `data-[active]/button:*` : on les écrit en CSS explicite.
   L'onglet inactif hérite de la couleur de la section (blanc sur fond foncé,
   primary-900 sur fond clair) ; l'actif prend un ton d'accent lisible dans
   l'état où il est visible — primary-200 sur le fond foncé de la vue Carte,
   primary sur le fond clair de la vue Liste.

   `fill: inherit` est redondant — `fill` est une propriété héritée — et gardé
   volontairement en symétrie de `color`, pour que la règle se lise comme un
   bloc « l'onglet inactif prend la couleur de la section ». Ne pas le
   « corriger » en croyant qu'il fait quelque chose. */
.wp-block-acf-map-ateliers-vanaway-shop .view-switcher button {
	border-bottom-width: 2px;
	border-bottom-style: solid;
	border-bottom-color: transparent;
	color: inherit;
	fill: inherit;
}

/* Focus clavier. Aucune feuille ne tue l'outline UA ici, mais sur le violet de
   la vue Carte c'est le SEUL repère au clavier : on le rend explicite et on le
   fait suivre la vue via `currentColor`. */
.wp-block-acf-map-ateliers-vanaway-shop .view-switcher button:focus-visible {
	outline: 2px solid currentColor;
	outline-offset: 2px;
}

.wp-block-acf-map-ateliers-vanaway-shop[data-view="list"] .view-switcher button[data-target="list"] {
	border-bottom-color: var(--wp--preset--color--primary, #6361b1);
	color: var(--wp--preset--color--primary, #6361b1);
	fill: var(--wp--preset--color--primary, #6361b1);
}

.wp-block-acf-map-ateliers-vanaway-shop[data-view="map"] .view-switcher button[data-target="map"] {
	border-bottom-color: var(--wp--preset--color--primary-200, #cdcdec);
	color: var(--wp--preset--color--primary-200, #cdcdec);
	fill: var(--wp--preset--color--primary-200, #cdcdec);
}

/* -------------------------------------------------------------------------
 * Règle 12 — Bloc FAQ du THÈME (`acf/feat-faq-vanaway`) sur une page vente.
 *
 * Le hub aménagement réutilise le bloc FAQ du thème et le CPT `faq`, comme
 * `/agences` : ni bloc ni accordéon dupliqués côté plugin. Le seul écart est la
 * palette — le panneau du thème est peint en `secondary-*`, le vert de marque du
 * site LOCATION. Sans ces 2 règles, la FAQ arriverait en vert pâle au milieu
 * d'une page violette.
 *
 * ⚠️ Le mécanisme n'est PAS une histoire de variables CSS : les utilitaires du
 * thème sont compilés en hexadécimal littéral (`.bg-secondary-100{…#f4f9ec}`,
 * `.divide-secondary-300{…#cfdfb9}`), pas en `var()`. Que le bundle vente mette
 * les `--wp--preset--color--secondary-*` à `initial` n'y change donc rien, et
 * redéfinir ces variables ne corrigerait rien non plus. Le vert vient de
 * `main.css`, chargé sur tout le site, et il faut le battre en spécificité.
 *
 * Transposition littérale : secondary-100 → primary-100 (fond du panneau),
 * secondary-300 → primary-200 (filets de séparation). Scopé au bloc ET à
 * `.vam-vente` : /agences et toutes les pages location gardent leur vert.
 * ---------------------------------------------------------------------- */
.vam-vente .wp-block-acf-feat-faq-vanaway .faq > div {
	background-color: var(--wp--preset--color--primary-100, #f1f4ff);
}

.vam-vente .wp-block-acf-feat-faq-vanaway .faq > div > :not([hidden]) ~ :not([hidden]) {
	border-color: var(--wp--preset--color--primary-200, #cdcdec);
}

/* -------------------------------------------------------------------------
 * Règle 13 — Pages atelier : respiration hero → première section (retour
 * Pierre 2026-08-23, capture Toulouse « la carte est collée au hero »).
 *
 * MESURE. Étalon charte vente ET page agence LOCATION : les sections sont
 * JOINTIVES (boxGap = 0) et toute la respiration vient de leur padding interne
 * — 80px ≥ 1024px, 40px en dessous. Relevé staging 1440×900 sur
 * `/agences/41-agences/1-location-van-toulouse-pyrenees` : bas du hero 630 →
 * haut de la carte 710 = **80px**. Sur `/amenagement/toulouse` le
 * même relevé donnait **−3px** : la carte démarrait 3px AU-DESSUS du bas
 * visible du hero.
 *
 * CAUSE (et non « padding manquant » : le damier-map a bien ses 80px). Le hero
 * porte `lg:hu-[50svh]`, soit une hauteur FIXE (`height: calc(50svh - …)`,
 * ≥ 1024px). Le fil d'Ariane + un H1 de ville sur 3 lignes + le chapô + les
 * `py-20` du `.container` font 533px de contenu pour une boîte de 450px : le
 * contenu DÉBORDE de 83px vers le bas (le hero n'a pas l'`overflow-clip` du
 * hero location) et mange les 80px de padding de la section suivante. Le
 * débordement dépend de la longueur du H1 — un padding fixe compensatoire
 * serait donc faux d'une ville à l'autre.
 *
 * CORRECTIF. La hauteur redevient un PLANCHER : `min-height` reprend le calc
 * du bundle à l'identique, `height: auto` laisse la boîte suivre son contenu.
 * `.background` passe en absolu pour ne plus peser dans le calibrage des
 * lignes de grille — sans quoi son `<img>` (hauteur naturelle 1073px, bornée
 * par `max-h-svh`) tirerait le hero à 100svh. Le cadrage de l'image est
 * inchangé : `.background` gardait déjà exactement cette hauteur, et son
 * `overflow-hidden` recadre comme avant. Le `.container` reste `position:
 * relative` et se peint donc toujours par-dessus (ordre DOM).
 *
 * NO-OP quand le contenu tient dans le plancher — vérifié 1440×1400 (hero
 * 700px, gap 80px, à l'identique avec et sans la règle).
 *
 * SCOPE. `.single-atelier-amenagement` = la classe du `<main>` de
 * `templates/single-atelier-amenagement.php`. `hero-image-vanaway-shop` est un
 * bloc PARTAGÉ (fiches product, `single-guide-vente.php`) : le scoping garantit
 * l'iso D25 — aucune autre page n'a ce couple `<main>` + bloc. Le hub
 * `/amenagement` n'a plus de hero depuis la V3 : rien à corriger.
 * < 1024px : hauteur déjà auto, gap déjà à 40px comme l'agence — hors média.
 * ---------------------------------------------------------------------- */
@media (min-width: 1024px) {

	.vam-vente .single-atelier-amenagement .wp-block-acf-hero-image-vanaway-shop {
		position: relative;
		height: auto;
		min-height: calc(50svh - var(--pib-menu-height--flow, 0px) - var(--wp-admin--admin-bar--height, 0px));
	}

	.vam-vente .single-atelier-amenagement .wp-block-acf-hero-image-vanaway-shop > .background {
		position: absolute;
		inset: 0;
		max-height: none;
	}
}

/* -------------------------------------------------------------------------
 * Règle 14 — « Lire plus » sur les cartes du damier (`nested-slider-damier-
 * vanaway-shop`), clamp 5 lignes + fondu sur les DEUX formes de rendu (`2col`
 * et `slide`). Décision Pierre 2026-08-24 : évolution VOLONTAIRE du DOM front
 * — le témoin D25 est re-gelé après ce chantier (tools/recette/iso-cards-base.txt).
 *
 * Progressive enhancement : `.vam-card-fade` et `.vam-card-toggle` restent
 * `display:none` tant que `view.js` n'a pas constaté un DÉBORDEMENT réel du
 * texte (classe `.vam-has-overflow`, posée avant le mount Splide — cf.
 * nested-slider-damier-vanaway-shop/view.js). Sans JS, sans support de
 * l'unité `lh`, OU sans `:has()` (Firefox < 121 a `lh` mais pas `:has()` —
 * fix review IMPORTANT 2, 2026-08-25 : sans ce second garde-fou le texte
 * restait clampé en PERMANENCE avec un bouton inerte, pire que pas de
 * fonctionnalité du tout), le texte s'affiche intégralement, sans aucun
 * chrome — dégradation propre. `@supports … and selector(:has(*))` couvre
 * les deux ; JS applique le même double test (view.js).
 *
 * Alignement du fondu : `.vam-card-fade` est un SIBLING du texte clampé
 * (`.vam-card-clamp` en 2col, 1er `.wp-block-group` en slide), pas un enfant
 * — son positionnement ne peut donc pas se caler sur un simple `bottom:0` du
 * wrapper `position:relative` (`.vam-card-more`), qui inclut aussi le bouton
 * toggle EN DESSOUS (`bottom:0` tomberait sous le bouton, pas sous le texte).
 * On calcule `top` à la place : le texte clampé est le PREMIER enfant du
 * wrapper (offset 0), donc son bord bas = exactement la valeur de son propre
 * `max-height` — `top` du fondu = cette valeur moins la hauteur du fondu
 * (2.5lh), pour un bord bas de fondu parfaitement aligné sur le bord bas du
 * clamp quelle que soit la hauteur du bouton en dessous.
 *
 * ⚠️ Cet alignement suppose que `1lh` résout à LA MÊME valeur sur le clamp
 * et sur le fondu — or `lh` se calcule sur la line-height de CHAQUE élément,
 * pas une constante globale. `.vam-card-clamp` porte aussi `.prose` (2col) :
 * si ce plugin typographique lui donnait un jour sa propre line-height,
 * `1lh` y résoudrait DIFFÉREMMENT que sur `.vam-card-fade`/`.vam-card-more`
 * (siblings, hors `.prose`) et l'alignement `top` calculé plus bas casserait.
 * Load-bearing AUJOURD'HUI parce que `.prose` est un nom de classe SANS
 * aucune règle dans le bundle compilé (vérifié : 0 occurrence de `.prose`
 * dans assets/css/vam-vente.scoped.css) — à revérifier si `.prose` reçoit
 * un jour un style. Scope d'origine : .wp-block-acf-nested-slider-damier-
 * vanaway-shop (fix review #12, garde ce chapitre inerte partout ailleurs,
 * y compris dans l'editor-styles-wrapper) — ÉTENDU le 2026-08-26 (demande
 * client « Lire plus » sur la Description des fiches véhicule) : chaque
 * sélecteur accepte AUSSI l'ancêtre générique `.vam-more-scope` via `:is()`
 * (même spécificité, deux classes). Tout wrapper `.vam-more-scope >
 * .vam-card-more > .vam-card-clamp` + fade + toggle hérite du dispositif
 * complet (clamp 5 lignes mobile / 8.5 desktop, fondu, états :has). La
 * DÉTECTION de débordement reste à la charge du view.js du bloc hôte
 * (cf. single-vehicule-vanaway-shop/view.js).
 * ---------------------------------------------------------------------- */

/* Cible de la remontée « Lire moins » de la Description (single-vehicule) :
   dégager le menu fixe, même logique que la slider-damier plus bas. */
.vam-more-scope {
	scroll-margin-top: calc(var(--pib-menu-height, 0px) + 1rem);
}

/* Le fondu des cartes est calibré pour LEUR fond (#f1f4ff, bg-primary-100).
   La Description des fiches véhicule est sur fond BLANC : le même gradient y
   dessinait une bande violacée sous la dernière ligne (retour client
   2026-08-26). Dans le scope générique, le fondu tire vers le blanc. */
/* 4 classes : bat la règle de base du chapitre 14 (3 classes, plus bas dans
   le fichier — à spécificité égale elle regagnerait, étant déclarée après). */
.vam-more-scope .vam-card-more.vam-has-overflow .vam-card-fade {
	background: linear-gradient(180deg, rgba(255, 255, 255, 0), rgb(255, 255, 255) 90%);
}
:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-more {
	position: relative;
}

:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-fade,
:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-toggle {
	display: none;
}

/* Défaut : « Lire moins » n'apparaît qu'en état déplié (règle :has() plus
   bas). Hors de tout @supports : `.vam-card-toggle` lui-même reste caché tant
   qu'il n'y a pas de dépassement, cette règle est donc sans effet visible
   avant ce moment-là, mais elle documente l'état par défaut demandé. */
:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-toggle .vam-less {
	display: none;
}

/* « Lire moins » : cible de la remontée (scrollIntoView smooth — view.js).
   scroll-margin dégage le haut de carte du menu fixe qui réapparaît au
   scroll vers le haut (menu-vanaway-shop). Hors @supports : inoffensif seul. */
.wp-block-acf-slider-damier-vanaway-shop {
	/* 2rem seulement : la section porte déjà son padding interne (py-10/20) —
	   5rem faisait réapparaître la fin de la section précédente au-dessus
	   (retour Pierre 2026-08-26 « on remonte un peu trop »). */
	scroll-margin-top: 2rem;
}

/* Mobile : marges des cartes damier réduites (retour Pierre 2026-08-25 —
   « plus de mots par ligne ») : le p-12 (48px) du wrapper de carte mange
   ~100px de largeur utile sur un écran de 393px ; le gap-16 (64px) entre
   texte et image, empilés en mobile, devient un trou vertical. */
@media (max-width: 1023px) {
	.wp-block-acf-slider-damier-vanaway-shop .splide__slide > .grid {
		padding: 1.5rem;
		gap: 2rem;
	}

	/* « Caractéristiques principales » (single-vehicule / single-accessoires,
	   encart arrondi icône + libellé) : une caractéristique PAR LIGNE en
	   mobile (retour Pierre 2026-08-25) — la grille 2 colonnes coupait les
	   libellés à 2-3 mots par ligne. gap vertical resserré en conséquence. */
	.vam-vente .grid.grid-cols-2.gap-x-6.gap-y-10,
	.vam-vente .grid.grid-cols-2.lg\:grid-cols-4.gap-6 {
		grid-template-columns: minmax(0, 1fr);
		row-gap: 1.5rem;
	}

	/* « Caractéristiques détaillées » (accordéons Données techniques /
	   Équipements des singles vente, aménagement, marque) : le pl-12 (48px)
	   s'ajoute au p-8 du cadre → liste « trop au milieu » en mobile
	   (retour Pierre 2026-08-25). Retrait supprimé sous 1024px. */
	.vam-vente details .grid.gap-4.pl-12 {
		padding-left: 0;
	}
}

@supports (height: 1lh) and selector(:has(*)) {
	:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-more.vam-has-overflow .vam-card-clamp {
		overflow: hidden;
		max-height: calc(5 * 1lh);
		/* Défensif — cf. flex-wrap:nowrap de la variante slide ci-dessous
		   (Tailwind `flex-col` ne wrappe pas aujourd'hui, on fige). */
		flex-wrap: nowrap;
	}

	/* Forme slide : le contenu carte (do_blocks()) n'a pas de classe dédiée
	   pour son groupe texte — c'est le 1er `.wp-block-group` émis (titre +
	   paragraphes), le 2e portant l'image (cf. vam_cards_slide_html(),
	   includes/helpers.php) — JAMAIS clampé, et depuis le fix review CRITICAL 1
	   (2026-08-25) plus jamais nesté ici du tout : il vit HORS `vam-card-more`,
	   enfant direct de la grille, pour garder `grid lg:grid-cols-2` à 2 colonnes.
	   `max-height: var(--vam-clamp-max, …)` (fix visuel 2026-08-25, retour
	   Pierre staging) : le repli `calc(5 * 1lh + 2.75em)` sous-estimait un vrai
	   h3 sur 2 lignes en title-3xl + son blockGap (24px) — le budget était
	   épuisé AVANT le premier paragraphe (0 ligne de corps visible, replié).
	   `--vam-clamp-max` est posée PAR CARTE en JS (view.js, markCardOverflow())
	   à partir de la géométrie RÉELLE mesurée (hauteur du h3 + gap + 5 lignes de
	   corps) ; le `calc()` ne sert plus que de filet de sécurité (JS absent, ou
	   carte sans h3/paragraphe détectable). */
	:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-more--slide.vam-has-overflow > .wp-block-group:first-child {
		overflow: hidden;
		max-height: var(--vam-clamp-max, calc(5 * 1lh + 2.75em));
		/* flex-wrap:nowrap — la base Gutenberg `.is-layout-flex{flex-wrap:wrap}`
		   fait REFLOWER une colonne flexible contrainte en hauteur vers des
		   colonnes latérales (clippées par overflow:hidden) au lieu de déborder
		   verticalement : paragraphes « disparus » sous le h3 et scrollHeight
		   aveugle (diagnostic CDP live staging 2026-08-25). */
		flex-wrap: nowrap;
	}

	/* flex-shrink:0 — sans lui, un conteneur flex sous max-height compresse
	   ses enfants au lieu de déborder (clip + scrollHeight faussés). Diagnostic
	   live staging (2026-08-25) : le groupe texte slide EST un
	   `wp-block-group is-vertical is-layout-flex` (colonne flex Gutenberg), et
	   `.vam-card-clamp` (2col) porte aussi `flex flex-col`. Sous `max-height`,
	   leurs enfants (`flex-shrink:1` par défaut du navigateur) se COMPRIMENT
	   pour tenir dans la boîte au lieu de déborder — les paragraphes s'écrasent
	   visuellement à (quasi) rien, ET `scrollHeight` ne dépasse plus jamais
	   `clientHeight` : la détection JS de débordement devient AVEUGLE (mesurée
	   sur staging : `clientHeight === scrollHeight === 168` avec un
	   `--vam-clamp-max` correct de 203px et ~450px de contenu déplié). Ces deux
	   règles forcent les enfants à garder leur taille naturelle : ils débordent
	   alors réellement, sont clippés proprement par `overflow:hidden`, et
	   `scrollHeight` redevient un signal fiable. */
	:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-more.vam-has-overflow .vam-card-clamp > * {
		flex-shrink: 0;
	}

	:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-more--slide.vam-has-overflow > .wp-block-group:first-child > * {
		flex-shrink: 0;
	}

	:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-has-overflow .vam-card-fade {
		display: block;
		position: absolute;
		left: 0;
		right: 0;
		height: 2.5lh;
		pointer-events: none;
		/* cf. commentaire d'alignement ci-dessus : top = max-height du clamp
		   2col (calc(5 * 1lh)) moins la hauteur du fondu (2.5lh). */
		top: calc(2.5 * 1lh);
		/* rgb source : classe compilée `.bg-primary-100` du bundle scopé
		   (assets/css/vam-vente.scoped.css) → #f1f4ff / rgb(241,244,255). */
		background: linear-gradient(180deg, rgba(241, 244, 255, 0), rgb(241, 244, 255) 90%);
	}

	/* Idem, formule slide : top = max-height du clamp slide (juste au-dessus)
	   moins la hauteur du fondu (2.5lh) — MÊME variable ET MÊME repli que le
	   `max-height` ci-dessus, pour que le fondu reste calé sur le bord bas RÉEL
	   du clamp que sa valeur soit mesurée (JS) ou repliée (calc() fixe). */
	:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-more--slide.vam-has-overflow .vam-card-fade {
		top: calc(var(--vam-clamp-max, calc(5 * 1lh + 2.75em)) - 2.5lh);
	}

	/* Toggle = LIEN TEXTE SOULIGNÉ (décision Pierre 2026-08-26 — reprendre le
	   design « Plus d'info » des archives location : underline offset 4,
	   semibold, primary → primary-600 au survol ; hex du bundle vente
	   .text-primary/#6361b1 et .text-primary-600/#46458b). Plus de pilule
	   pib_bouton : les règles de géométrie bouton ci-dessous ont été purgées. */
	:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-has-overflow .vam-card-toggle {
		display: inline-flex;
		position: relative;
		margin-top: 0.5rem;
		width: fit-content;
		cursor: pointer;
		font-weight: 600;
		color: #6361b1; /* .text-primary du bundle vente */
		text-decoration: underline;
		text-underline-offset: 4px;
		transition: color 0.15s ease;
	}

	:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-has-overflow .vam-card-toggle:hover {
		color: #46458b; /* .text-primary-600 */
	}

	/* Focus clavier — la case est visuellement masquée (opacity-0, même
	   technique que content-vanaway-shop) : le repère visible doit donc venir
	   du LABEL. Précédent house : map-ateliers-vanaway-shop, règle 11. */
	:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-toggle:has(input:focus-visible) {
		outline: 2px solid currentColor;
		outline-offset: 2px;
	}

	/* État déplié : la case du toggle est cochée. */
	:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-more:has(.vam-card-toggle input:checked) .vam-card-clamp,
	:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-more--slide:has(.vam-card-toggle input:checked) > .wp-block-group:first-child {
		max-height: none;
	}

	:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-more:has(.vam-card-toggle input:checked) .vam-card-fade {
		display: none;
	}

	:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-more:has(.vam-card-toggle input:checked) .vam-more {
		display: none;
	}

	:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-more:has(.vam-card-toggle input:checked) .vam-less {
		display: inline;
	}

	/* Desktop : clamp à 8.5 lignes de corps (deux fois +30 %, retours client 2026-08-26 —
	   les textes calibrés pour desktop tombaient trop court à 5 puis à 6.5). Mobile
	   inchangé. MÊME valeur que `bodyLines` dans view.js (markCardOverflow) :
	   la variable --vam-clamp-max posée en JS prime toujours, ces replis ne
	   servent qu'en son absence. Le fondu suit : 2col top = 8.5 − 2.5 = 6lh ;
	   slide, seul le REPLI du var() change (le top suit la variable tout seul).
	   Ordre/spécificité : ce bloc vient APRÈS les règles de base — à même
	   spécificité, il gagne en desktop ; la règle slide (classe en plus) garde
	   sa priorité sur la générique, ici comme au-dessus. */
	@media (min-width: 1024px) {
		:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-more.vam-has-overflow .vam-card-clamp {
			max-height: calc(8.5 * 1lh);
		}

		:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-more--slide.vam-has-overflow > .wp-block-group:first-child {
			max-height: var(--vam-clamp-max, calc(8.5 * 1lh + 2.75em));
		}

		:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-has-overflow .vam-card-fade {
			top: calc(6 * 1lh);
		}

		:is(.wp-block-acf-nested-slider-damier-vanaway-shop, .vam-more-scope) .vam-card-more--slide.vam-has-overflow .vam-card-fade {
			top: calc(var(--vam-clamp-max, calc(8.5 * 1lh + 2.75em)) - 2.5lh);
		}
	}
}

/* -------------------------------------------------------------------------
 * Barre sticky bottom des fiches vente (mobile) — CTA rétréci par flexbox.
 *
 * La rangée de la barre (`flex flex-row … gap-4`) contient le bloc prix en
 * `max-lg:w-full` (width:100 %) et le bouton pib en `w-fit` MAIS avec le
 * `flex-shrink:1` par défaut : la négociation flex n'a AUCUNE marge (à
 * 375 px : 223 + 16 + 86 = 325/326). À la moindre variation de métriques
 * (polices Android, densité), le bouton est compressé sous sa largeur
 * naturelle et son texte — sous `overflow:hidden` (pill + .text de
 * l'animation data-text) — est tronqué : « Contact » → « Conta ».
 * Constaté prod mobile 2026-08-26 (fiche kit Nord) ; PAS une régression de
 * la release (templates et CSS de la barre identiques à l'ancien main —
 * review Codex sol, transcript en session).
 *
 * Correctif : le bouton ne rétrécit jamais (shrink 0 + nowrap), le prix
 * abandonne sa base 100 % (auto + min-width:0), et la rangée peut passer le
 * CTA à la ligne en dernier recours (« Contacter le vendeur » des fiches
 * véhicule à ~320 px). `@media not all and (min-width:1024px)` = la
 * sémantique EXACTE du `max-lg:` compilé (max-width:1023px laisserait la
 * plage fractionnaire 1023→1024 sans correctif). Desktop lg intact.
 * ---------------------------------------------------------------------- */
@media not all and (min-width: 1024px) {
	.vam-vente :is(
		.wp-block-acf-single-accessoires-vanaway-shop,
		.wp-block-acf-single-amenagement-vanaway-shop,
		.wp-block-acf-single-vehicule-vanaway-shop
	) [class~="max-lg:z-[2200000000]"] > .flex.flex-row {
		flex-wrap: wrap;
	}

	.vam-vente :is(
		.wp-block-acf-single-accessoires-vanaway-shop,
		.wp-block-acf-single-amenagement-vanaway-shop,
		.wp-block-acf-single-vehicule-vanaway-shop
	) [class~="max-lg:z-[2200000000]"] > .flex.flex-row > [class~="max-lg:w-full"] {
		width: auto;
		min-width: 0;
		flex: 1 1 auto;
	}

	.vam-vente :is(
		.wp-block-acf-single-accessoires-vanaway-shop,
		.wp-block-acf-single-amenagement-vanaway-shop,
		.wp-block-acf-single-vehicule-vanaway-shop
	) [class~="max-lg:z-[2200000000]"] > .flex.flex-row > a.pib_bouton {
		flex-shrink: 0;
		white-space: nowrap;
	}
}
