/*
Theme Name: Hello Elementor Child — Montana Parc
Theme URI: https://montanaparc.example
Description: Thème enfant Hello Elementor pour Montana Parc. Polices self-hosted + fondations Elementor v4.
Author: Peppermint
Template: hello-elementor
Version: 1.0.0
Text Domain: hello-elementor-child
*/

/* Fondations — TOKENS DESIGN maquette exposés en variables CSS (:root).
   Les fondations avaient tokenisé couleurs/polices/dimensions en globals Elementor uniquement ;
   le CSS des blocs home s'en sortait via `var(--token, fallback)`. Les templates portés depuis
   la maquette (region/activite/single…) utilisent `var(--token)` NU → il FAUT que ces variables
   existent. On les définit ici, valeurs verbatim maquette (styles.css:1-40). Additif : mêmes
   valeurs que les fallbacks home → aucune régression, et robustesse pour tout futur port. */
:root {
	/* couleurs */
	--petrole: #2C4A52; --petrole-2: #22383F; --petrole-brume: #5B7B82; --encre: var(--petrole-2);
	--corail: #FB6F52; --corail-deep: #EA5638; --corail-pale: #FFC6AC;
	--sable: #E7D5C0; --sable-hover: #ECE3D4; --sable-pale: #F3EFE7;
	--lumiere: #FBFAF6; --lagune: #2E9BB8; --olivier: #9DB89A; --olivier-deep: #5D7A59;
	/* typo */
	--body: 'Hanken Grotesk', system-ui, -apple-system, sans-serif;
	--display: 'Bricolage Grotesque', system-ui, -apple-system, sans-serif;
	--fs-display: clamp(48px,7vw,86px); --fs-h1: clamp(36px,5vw,62px); --fs-h2: clamp(28px,3.6vw,44px);
	--fs-h3: clamp(22px,2.4vw,30px); --fs-h4: clamp(19px,2vw,23px); --fs-lead: clamp(16px,1.7vw,18px);
	--fs-body: 16px; --fs-label: 14.5px; --fs-eyebrow: 13px; --fs-meta: 13.5px; --fs-micro: 12px;
	/* dimensions / effets */
	--maxw: 1220px; --gap-grid: 20px; --r-card: 24px; --r-img: 18px;
	--shadow-soft: 0 16px 40px -26px rgba(34,56,63,.5); --shadow-card: 0 30px 70px -30px rgba(34,56,63,.6);
	--hair: 0 0 0 1px rgba(34,56,63,.06);
	--ease: cubic-bezier(.2,.7,.2,1);
}

/* Fondations — POLICE DE CORPS globale (lacune corrigée). Le reset du thème parent
   (hello-elementor/assets/css/reset.css) impose `body{font-family:-apple-system,…}` (spécificité
   0,0,1). Le corps du site (Hanken Grotesk = var --font-body) n'était appliqué que par les widgets
   Elementor qui posent une font-family explicite → tout TEXTE NU atomique (footer, futurs blocs)
   tombait sur la police système. On impose ici la police de corps sur `html body` (spécificité 0,0,2)
   pour battre le reset quel que soit l'ordre de chargement. Correction valable pour tous les blocs. */
html body { font-family: var(--font-body, "Hanken Grotesk"), system-ui, -apple-system, sans-serif; }

/* Fondations — LINE-HEIGHT DE CORPS global (lacune corrigée, même piège). La maquette a
   `body{line-height:1.6}` (styles.css:37) ; le reset Hello impose `body{line-height:1.5}` → tout texte
   HÉRITANT (leads de base, chips, paragraphes sans règle propre) était à 1.5 sur toutes les pages ;
   les composants déclarant 1.6 localement masquaient l'écart. Les line-height explicites restent gagnants. */
html body { line-height: 1.6; }

/* Fondations — COULEUR DE CORPS globale (lacune corrigée, même piège). Maquette `body{color:var(--encre)}`
   (styles.css:37) ; le reset Hello impose #333 → textes hérités légèrement faux partout. */
html body { color: var(--encre, #22383F); }

/* Fondations — TAILLES DE TITRES : retour aux valeurs UA (lacune corrigée, même piège). La maquette
   n'a AUCUNE taille globale de titres (styles.css:39 : famille/couleur/graisse seulement) → un titre
   sans règle de composant rend à la taille UA (ex. h2 = 1.5em = 24px, cas `.why h2`). Le reset Hello
   impose h1 2.5rem…h6 1rem → tout titre non dimensionné était trop grand (latent partout, révélé sur
   oasis-aquatique). `revert` = valeur UA contextuelle ; les composants qui déclarent leur taille
   (var(--fs-h2)…) restent gagnants. */
html h1, html h2, html h3, html h4, html h5, html h6 { font-size: revert; }

/* Fondations — RESET MARGES des pages intérieures (`body.vpage`, toutes les pages maquette sauf
   l'accueil — chantier vpage 2026-07-27). Mime le `*{margin:0}` de la maquette : le reset hello
   (h1..h4 margin-block .5/1rem, p margin-block-end .9rem) fuyait sur tout titre/paragraphe sans
   règle de composant. `body:where(.vpage)` = spécificité (0,0,1) : bat le reset hello (0,0,1, chargé
   avant) par ordre source, mais PERD face à toute règle de composant — y compris à classe nue
   (0,1,0, ex. `.dintro{margin-top:16px}`) et où qu'elle soit dans le fichier. (V1 `body.vpage` à
   (0,1,1), placée dans le bloc landing, écrasait .art-body h2 et .dintro — constaté au chantier.) */
body:where(.vpage) :where(h1,h2,h3,h4,p) { margin: 0; }

/* Fondations — TITRES GLOBAUX (lacune corrigée — GÉNÉRALISATION). La maquette pose h1..h4 GLOBALEMENT
   (styles.css:39 verbatim : display/petrole/balance) ; le portage l'avait scopée `.dpage` → chaque bloc de
   la landing village (et toute future page non-.dpage) retombait sur le `color:inherit` (#333) du reset
   Hello, corrigé à la main 4 fois (esprit/gallery/feature/activités). Spécificité (0,0,1), chargée après le
   reset (source order gagne) ; les composants à titres blancs (.rtile h4, .hinfo h3, .crossv-txt h2,
   .cg-cap h4, .hb-cta h3, .groups h2… = 0,1,1) et les widgets home atomic (classes) restent gagnants —
   même mécanique que la maquette. Marges gérées par les resets scopés (.dpage / body.single-mp_village). */
h1, h2, h3, h4 { font-family: var(--display); letter-spacing: -.025em; line-height: 1.04; color: var(--petrole); font-weight: 700; text-wrap: balance; }

/* Fondations — FOND DE PAGE teinté (lacune corrigée, même piège que la police). La maquette a
   `body{background:var(--lumiere)}` (#FBFAF6, crème). Le reset Hello Elementor impose `body{background:#fff}`
   (blanc pur, 0,0,1). On impose la teinte lumière sur `html body` (0,0,2) pour battre le reset. `--lumiere`
   existe déjà (global Elementor e-gv-1891a07). Affecte toutes les pages. */
html body { background: var(--lumiere, #FBFAF6); }

/* Fondations — TYPOGRAPHIE DES TITRES globale (fidélité maquette styles.css:39 :
   h1..h4 { font-family:var(--display); font-weight:700; letter-spacing:-.025em; line-height:1.04;
   text-wrap:balance }). Comme la police de corps (§7.16 body), les titres NUS tombaient sur la police
   système/corps → imposée ici globalement (spécificité élément 0,0,1 : les blocs à font-family explicite
   gagnent). La COULEUR reste par bloc (hero blanc, etc.). Non exposé par le Style Schema Elementor v4. */
h1, h2, h3, h4 { font-family: var(--font-display, "Bricolage Grotesque"), sans-serif; font-weight: 700; letter-spacing: -.025em; line-height: 1.04; text-wrap: balance; }

/* Fondations — filet corail du sur-titre (fidélité maquette styles.css:43 :
   .eyebrow::before { content:""; width:26px; height:2px; background:var(--corail) }).
   Un pseudo-élément ne peut pas être porté par une classe globale v4, donc porté ici.
   Solution provisoire ; convertible en e-div-block Elementor si édition builder requise. */
/* Base `.eyebrow` (texte) — maquette styles.css:42. Les fondations n'avaient posé que `::before`
   (le tiret) ; le texte des eyebrows home venait des classes bespoke `.s-*-eyebrow`. Les templates
   portés (region/activite/single) utilisent `.eyebrow` nu → il faut la base. Les eyebrows home
   qui portent aussi `.eyebrow` sont surchargés par leur classe `.s-*-eyebrow` (plus tard) → OK. */
.eyebrow { display: inline-flex; align-items: center; gap: 10px; font-size: var(--fs-eyebrow); font-weight: 700; letter-spacing: .2em; text-transform: uppercase; color: var(--corail-deep); }
.eyebrow::before { content: ""; width: 26px; height: 2px; background: var(--corail); flex: 0 0 auto; }

/* Base `.lead` — maquette styles.css:44. Jamais portée globalement : les composants region/hébergement
   la re-déclaraient localement, mais les usages qui s'appuyaient sur la BASE (feature aquatique,
   sl-head/sl-right village…) tombaient sur le style body par défaut. Les overrides scopés
   (.art-body .lead etc., 0,2,0) restent gagnants. */
.lead { font-size: var(--fs-lead); color: var(--petrole-brume); max-width: 54ch; }

/* Bloc final-cta — icônes SVG en CONTOUR (fidélité maquette). Elementor e-svg réécrit
   le <svg> avec fill="currentColor" au rendu, ce qui remplit le path fermé du téléphone
   (silhouette pleine). `fill` n'est pas exposé par le Style Schema v4 → forcé ici en contour.
   Les 3 icônes du bloc (flèches + téléphone) sont des tracés stroke, comme dans la maquette. */
.s-final-cta-card .e-svg-base svg { fill: none; }

/* Boutons .btn / .btn--primary — transitions + états :hover repris de la maquette (styles.css:52-62).
   Portée GLOBALE comme la maquette (`.btn`/`.btn-primary`) → réutilisés par le CTA final ET le header
   (bouton Réserver = mêmes classes globales), aucune duplication. Les :hover ne sont pas portables par
   une classe globale v4 (§7.2). `.ico`/pastille = e-div-block (.e-div-block-base) ; flèche = e-svg.
   --ease = cubic-bezier(.2,.7,.2,1). */
.btn { transition: transform .25s var(--ease), box-shadow .25s, background .25s, color .25s; }
.btn .e-div-block-base { transition: background .35s var(--ease); }
.btn .e-svg-base svg { transition: transform .4s var(--ease); }
/* flèche : rotation -45° au survol */
.btn:hover .e-svg-base svg { transform: rotate(-45deg); }
/* bouton primaire : lévitation + ombre + pastille blanche + flèche corail */
.btn--primary:hover { transform: translateY(-2px); box-shadow: 0 22px 42px -12px rgba(234,86,56,.85); }
.btn--primary:hover .e-div-block-base { background: var(--blanc); }
.btn--primary:hover .e-svg-base svg { color: var(--corail-deep); }
/* bouton OUTLINE — variante réutilisable (maquette .btn-outline styles.css:59-60). Base pill/padding =
   classe globale `btn` ; ici les COULEURS du variant + hover (non portables par une classe globale v4, §7.2).
   Repos : transparent + filet pétrole + texte/flèche pétrole. Survol : fond pétrole, texte/flèche blancs. */
/* spécificité `.btn.btn--outline` (0,2,0) : bat les défauts atomiques (`.e-con`) qui neutralisaient
   le box-shadow. L'outline est toujours `class="btn btn--outline"`, donc ce sélecteur est correct. */
.btn.btn--outline { background: transparent; color: var(--petrole); box-shadow: inset 0 0 0 1.5px rgba(44,74,82,.5); }
.btn.btn--outline .e-svg-base svg { color: var(--petrole); }
.btn.btn--outline:hover { transform: translateY(-2px); background: var(--petrole); color: #fff; }
.btn.btn--outline:hover .e-div-block-base { background: rgba(255,255,255,.22); }
.btn.btn--outline:hover .e-svg-base svg { color: #fff; }
/* bouton ghost sur média (variante sombre autonome) — spécifique au CTA final */
.s-final-cta-card .btn--ghost--on-media:hover { transform: translateY(-2px); background-color: rgba(14,24,28,.5); }
.s-final-cta-card .btn--ghost--on-media:hover .e-div-block-base { background: rgba(255,255,255,.3); }

/* Bloc hero — icônes SVG en contour (pin de localisation ; e-svg force fill=currentColor, cf. §7.3). */
.s-hero .e-svg-base svg { fill: none; }
/* Bloc hero — highlight du H1 « en Côte d'Azur » (maquette .heroD h1 .hl). Le titre e-heading ne
   prend que du texte/inline ; le mot est balisé <strong> et coloré ici (poids inchangé). */
.s-hero-h1 strong { color: var(--corail-pale); font-weight: inherit; }
/* Bloc hero — filet dégradé du dock-hint (maquette .dock-hint::after). Pseudo-élément → thème. */
.s-hero-dock-hint::after { content: ""; flex: 1; height: 1px; background: linear-gradient(90deg, rgba(255,255,255,.4), transparent); }
/* Bloc hero — ombre portée sur le nom des villages (maquette .dbody .nm : text-shadow 0 1px 10px rgba(0,0,0,.4)).
   text-shadow ∉ Style Schema v4 → porté ici, scopé aux 2 cartes. */
.s-hero-card-oasis-nm, .s-hero-card-gassin-nm { text-shadow: 0 1px 10px rgba(0, 0, 0, .4); }

/* ===================== Bloc site/header-main ===================== */
/* Icônes SVG en contour (chevron, flèche ; e-svg force fill=currentColor, §7.3).
   display:block : les e-svg atomiques rendent en inline (vertical-align baseline) → le glyphe tombe
   ~3px sous le centre du texte ; block le recale (la maquette a ses SVG en block). */
.s-hdr .e-svg-base svg { fill: none; display: block; }
/* Liens : héritent la couleur du conteneur (sinon le `a{color}` du thème — corail — l'emporte sur
   l'héritage), sans soulignement. La couleur vient de .s-hdr-links (petrole) / body.home (blanc). */
.s-hdr a { text-decoration: none; }
.s-hdr-links > a { color: inherit; } /* liens DIRECTS de nav (pas les items du sous-menu, qui gardent leur couleur) */
.s-hdr-links > a, .s-hdr-drop-btn, .s-hdr-drop-menu a { white-space: nowrap; }
/* Menu mobile (overlay masqué ; toggle + finition visuelle = passe interactions) : liens en couleur héritée. */
.s-hdr-mobile a { color: inherit; }
/* Placement dans la grille 1fr auto 1fr (le prop justify-self v4 ne s'applique pas → porté ici) :
   identité à gauche, liens centrés, actions à droite. Enfants à largeur naturelle (sinon les items
   sont étirés à largeur égale → « Golfe de St-Tropez » déborde, « Résidentiel » flotte). */
.s-hdr-brand { justify-self: start; }
.s-hdr-links { justify-self: center; justify-content: center; }
/* .e-con force width:100% → justify-self:end sans effet ; on pousse le contenu à droite en interne. */
.s-hdr-right { justify-self: end; justify-content: flex-end; }
.s-hdr-links > *, .s-hdr-right > * { width: auto; flex: 0 0 auto; }
/* Crossfade logo — état SOLIDE (défaut) : logo sombre visible, blanc masqué (maquette .logo .dark/.white). */
.s-hdr-logo-white { opacity: 0; transition: opacity .4s; }
.s-hdr-logo-dark  { opacity: 1; transition: opacity .4s; }
/* Burger : 3 barres via box-shadow (l'e-div-block n'a pas d'enfant ; maquette .burger span). Toggle différé. */
.s-hdr-burger { color: var(--petrole, #2C4A52); background: rgba(44,74,82,.1); position: relative; }
/* Le ::before atomique est en position:absolute (Elementor l'utilise pour une couche overlay) → le
   centrage flex du cercle ne l'affecte pas. On le centre explicitement (les 3 barres = ::before + box-shadow). */
.s-hdr-burger::before { content: ""; position: absolute; inset: 50% auto auto 50%; transform: translate(-50%, -50%); width: 18px; height: 2px; margin: 0; background: currentColor; box-shadow: 0 -6px 0 currentColor, 0 6px 0 currentColor; }
/* Sur-titre mobile & liste : cf. menu mobile (2e temps). */

/* --- État TRANSPARENT (accueil, en HAUT de page) : scopé front-page + `:not(.scrolled)`.
   Au scroll, js/header.js ajoute `.scrolled` sur .s-hdr → ces règles ne s'appliquent plus → retour à
   l'état SOLIDE de base (non redéfini ici). Sur les pages intérieures (non body.home) ces règles ne
   s'appliquent jamais → le scroll n'a aucun effet (reste solide). Transitions : voir plus bas. --- */
body.home .s-hdr:not(.scrolled), body.front-page .s-hdr:not(.scrolled) {
  background: transparent; backdrop-filter: none; -webkit-backdrop-filter: none; box-shadow: none;
  padding-top: 24px; padding-bottom: 24px;
}
/* État SOLIDE (pages intérieures + accueil au scroll + village) aligné maquette `.nav--solid` :
   LIGNE 1px (0 flou) au lieu d'une ombre portée, padding 15px, fond .95 ; gap nav = clamp maquette
   (≈21px, ≠ 30px). Doublé `.s-hdr.s-hdr` (0,2,0) pour battre les styles inline atomiques du template #13 ;
   l'override transparent accueil ci-dessus (spécificité sup.) reste prioritaire en haut de page. */
.s-hdr.s-hdr { background: rgba(251,250,246,.95); box-shadow: 0 1px 0 rgba(34,56,63,.07); padding-top: 15px; padding-bottom: 15px; }
.s-hdr .s-hdr-links { gap: clamp(16px,1.4vw,28px); }
body.home .s-hdr:not(.scrolled) .s-hdr-brand-name, body.home .s-hdr:not(.scrolled) .s-hdr-links,
body.front-page .s-hdr:not(.scrolled) .s-hdr-brand-name, body.front-page .s-hdr:not(.scrolled) .s-hdr-links { color: #fff; }
body.home .s-hdr:not(.scrolled) .s-hdr-logo-white, body.front-page .s-hdr:not(.scrolled) .s-hdr-logo-white { opacity: 1; }
body.home .s-hdr:not(.scrolled) .s-hdr-logo-dark,  body.front-page .s-hdr:not(.scrolled) .s-hdr-logo-dark  { opacity: 0; }
body.home .s-hdr:not(.scrolled) .s-hdr-burger, body.front-page .s-hdr:not(.scrolled) .s-hdr-burger { color: #fff; background: rgba(255,255,255,.16); }

/* Transitions de la bascule transparent↔solide (timing maquette : nav .4s, texte .25s, logo .4s). */
.s-hdr { transition: background .4s, box-shadow .4s, padding .4s; }
.s-hdr-brand-name { transition: color .25s; }
.s-hdr-burger { transition: background .4s, color .4s; }

/* ===== LOT 1 — hovers CSS (repris maquette styles.css:80-86) ===== */
/* Liens : souligné corail qui s'étend au survol (0→100%) + opacité .92→1. Corail dans les 2 états. */
/* `> a` : liens DIRECTS de nav uniquement — pas les items du sous-menu (descendants), qui ne
   doivent avoir NI le souligné corail NI l'opacité .92 (juste le fond sable au survol). */
.s-hdr-links > a { padding: 4px 0; opacity: .92; transition: opacity .25s, color .25s; }
.s-hdr-links > a:hover { opacity: 1; }
.s-hdr-links > a::after { content: ""; position: absolute; left: 0; bottom: -2px; width: 0; height: 2px; background: var(--corail, #FB6F52); transition: width .3s var(--ease); }
.s-hdr-links > a:hover::after { width: 100%; }
/* état ACTIF (page courante, aria-current posé par header.js) — trait plein, comme la maquette
   `.nav-links a[aria-current="page"]::after{width:100%}`. */
.s-hdr-links > a[aria-current="page"]::after { width: 100%; }
.s-hdr-links > a[aria-current="page"] { opacity: 1; }
.s-hdr-mobile a[aria-current="page"] { color: var(--corail-deep); } /* maquette .mm-group a[aria-current]{color:corail-deep} */
/* Pastille langue : ombre douce au repos, lévitation + ombre carte au survol (styles.css:85-86). */
.s-hdr-lang { box-shadow: 0 16px 40px -26px rgba(34,56,63,.5); transition: transform .25s var(--ease), box-shadow .25s; }
.s-hdr-lang:hover { transform: translateY(-1px); box-shadow: 0 30px 70px -30px rgba(34,56,63,.6); }
/* Dropdown langue desktop (V28) — repris maquette `.langdrop` (styles.css:1154-1164). Wrapper + menu
   construits par js/header.js autour de `.s-hdr-lang`. Placeholder (pas de traduction réelle). Masqué
   ≤900 (la langue passe dans le menu burger, cf. `.s-hdr-mm-langs`). Classes scopées `.s-hdr`. */
.s-hdr .s-hdr-langdrop { position: relative; display: inline-flex; }
.s-hdr .s-hdr-langdrop .s-hdr-lang { cursor: pointer; }  /* maquette .langdrop .lang{cursor:pointer} */
.s-hdr .s-hdr-langdrop .s-hdr-lang-chev { transition: transform .3s var(--ease); }
.s-hdr .s-hdr-langdrop.open .s-hdr-lang-chev { transform: rotate(180deg); }
.s-hdr .s-hdr-langdrop-menu { position: absolute; top: calc(100% + 12px); right: 0; min-width: 134px; background: #fff; border-radius: 14px; box-shadow: 0 30px 70px -30px rgba(34,56,63,.6); padding: 7px; opacity: 0; visibility: hidden; transform: translateY(-6px); transition: opacity .22s var(--ease), transform .22s var(--ease), visibility .22s; z-index: 60; }
.s-hdr .s-hdr-langdrop.open .s-hdr-langdrop-menu { opacity: 1; visibility: visible; transform: none; }
.s-hdr .s-hdr-langdrop-item { display: flex; width: 100%; align-items: center; justify-content: space-between; gap: 10px; padding: 9px 13px; border-radius: 9px; background: none; border: 0; cursor: pointer; font-family: var(--font-body, "Hanken Grotesk"), sans-serif; font-weight: 600; font-size: 14px; color: var(--petrole, #2C4A52); text-align: left; transition: background .2s, color .2s; text-decoration: none; } /* text-decoration : items devenus <a> au câblage Linguise */
.s-hdr .s-hdr-langdrop-item:hover { background: var(--sable-pale, #F3EFE7); }
.s-hdr .s-hdr-langdrop-item.cur { background: var(--sable-pale, #F3EFE7); color: var(--corail-deep, #EA5638); }
.s-hdr .s-hdr-langdrop-item.cur::after { content: "✓"; font-size: 12px; font-weight: 700; }
@media (max-width: 900px) { .s-hdr .s-hdr-langdrop, .s-hdr .s-hdr-lang { display: none; } }

/* ===== LOT 2b — dropdown « Groupes & CSE » (clic ; maquette styles.css:453-462) ===== */
/* Bouton : opacité comme les liens ; chevron pivote à l'ouverture. */
.s-hdr-drop-btn { opacity: .92; transition: opacity .25s; }
.s-hdr-drop-btn:hover, .s-hdr-drop.open .s-hdr-drop-btn { opacity: 1; }
.s-hdr-drop-chev svg { transition: transform .3s var(--ease); }
.s-hdr-drop.open .s-hdr-drop-chev svg { transform: rotate(180deg); }
/* Sous-menu : carte blanche centrée sous le bouton, fade + slide (override du display:none Elementor via
   opacity/visibility pour permettre la transition). Spécificité `.s-hdr …` pour battre le display:none. */
.s-hdr .s-hdr-drop-menu {
  display: block; position: absolute; inset-block-start: calc(100% + 16px); inset-inline-start: 50%; inset-inline-end: auto;
  min-width: 252px; background: #fff; border-radius: 16px; box-shadow: 0 30px 70px -30px rgba(34,56,63,.6);
  padding: 8px; opacity: 0; visibility: hidden; transform: translate(-50%, -6px);
  transition: opacity .25s var(--ease), transform .25s var(--ease), visibility .25s; z-index: 60;
}
.s-hdr-drop.open .s-hdr-drop-menu { opacity: 1; visibility: visible; transform: translate(-50%, 0); }
/* Items : padding, couleur petrole, sous-titre plus clair, survol sable (maquette .navdrop-menu a / .d). */
/* spécificité `.s-hdr …` pour battre le padding:0 de base (§7.5) sur les items. */
.s-hdr .s-hdr-drop-menu a { padding: 12px 13px; border-radius: 11px; color: var(--petrole, #2C4A52); transition: background .2s; }
.s-hdr .s-hdr-drop-menu a:hover { background: var(--sable-pale, #F3EFE7); }
.s-hdr .s-hdr-drop-menu a > *:last-child { color: var(--petrole-brume, #5B7B82); font-weight: 600; }

/* ===== Responsive barre mobile (maquette media queries ≤900 / ≤560) ===== */
/* ≤900 : liens masqués (variante Elementor). La grille passe de `1fr auto 1fr` à `1fr auto` (maquette
   `.nav-in{grid-template-columns:1fr auto}`) → logo (col1, gauche) | actions (col2, largeur naturelle,
   collées à droite). Sinon la piste centrale vide laisse un `1fr` fantôme qui décale Réserver+burger. */
@media (max-width: 900px) {
  .s-hdr .s-hdr-in { grid-template-columns: 1fr auto; }
}
/* ≤560 : bouton Réserver compacté (maquette `.nav .nav-right .btn-primary{padding:11px 14px 11px 18px;
   font-size:var(--fs-label)}` + ico 22×22, svg 14×14). */
@media (max-width: 560px) {
  /* spécificité .s-hdr … pour battre la classe globale .btn / la valeur de base (chargées après le thème). */
  .s-hdr .s-hdr-cta { padding: 11px 14px 11px 18px; font-size: 14.5px; }
  .s-hdr .s-hdr-cta-ico { width: 22px; min-width: 22px; height: 22px; }
  .s-hdr .s-hdr-cta-ico svg { width: 14px; height: 14px; }
  .s-hdr .s-hdr-right { gap: 10px; } /* maquette .nav-right{gap:10px} (desktop 16) */
}

/* ===== LOT 2c — overlay menu mobile ===== */
/* L'overlay est un frère de .s-hdr (sorti du header, dont le backdrop-filter piégeait le fixed) ;
   position:fixed inset:0 z-80 (Elementor) → couvre le viewport. `display:flex` toujours ; masqué via
   opacity/visibility (fade), révélé par `.open` (JS). pointer-events pour ne rien bloquer au repos. */
.s-hdr-mobile { opacity: 0; visibility: hidden; pointer-events: none; backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); transition: opacity .22s var(--ease), visibility .22s; }
.s-hdr-mobile.open { opacity: 1; visibility: visible; pointer-events: auto; }
/* zone centrale scrollable (maquette .mm-scroll{flex:1;overflow-y:auto}) → head en haut, barre en bas. */
.s-hdr-mobile .s-hdr-mm-scroll { flex: 1; overflow-y: auto; -webkit-overflow-scrolling: touch; }

/* ---- Style du contenu (maquette .mm-* ; scopé .s-hdr-mobile pour battre les valeurs de base) ---- */
/* icônes en contour (overlay hors .s-hdr, donc la règle .s-hdr … ne l'atteint pas). */
.s-hdr-mobile .e-svg-base svg { fill: none; }
/* centrage largeur (maquette max-width 560) + espacements par marges (pas de gap uniforme). */
.s-hdr-mobile .s-hdr-mm-scroll { width: 100%; max-width: 560px; margin: 0 auto; gap: 0; }
.s-hdr-mobile .s-hdr-mm-util { margin-top: 18px; }
/* en-tête : nom marque (maquette .mm-brand) + croix ronde. */
.s-hdr-mobile .s-hdr-mm-brand-t { font-family: "Bricolage Grotesque", sans-serif; font-weight: 700; font-size: 19px; letter-spacing: -.02em; color: var(--petrole,#2C4A52); }
.s-hdr-mobile .s-hdr-mm-close { width: 44px; height: 44px; border-radius: 50%; background: rgba(44,74,82,.08); color: var(--petrole,#2C4A52); }
/* sur-titre : filet corail + corail-deep (maquette .mm-eyebrow). */
.s-hdr-mobile .s-hdr-mm-eyebrow { display: flex; align-items: center; gap: 10px; color: var(--corail-deep,#EA5638); margin: 6px 0 12px; }
.s-hdr-mobile .s-hdr-mm-eyebrow::before { content: ""; width: 26px; height: 2px; background: var(--corail,#FB6F52); flex: none; }
/* cartes village : blanc + ombre + radius (maquette .mm-card). */
.s-hdr-mobile .s-hdr-mm-oasis, .s-hdr-mobile .s-hdr-mm-golfe { background: #fff; border-radius: 24px; box-shadow: 0 16px 40px -26px rgba(34,56,63,.5), 0 0 0 1px rgba(34,56,63,.06); padding: 15px 17px; gap: 14px; margin-bottom: 10px; align-items: center; transition: transform .35s var(--ease), box-shadow .35s; }
.s-hdr-mobile .s-hdr-mm-oasis:hover, .s-hdr-mobile .s-hdr-mm-golfe:hover { transform: translateY(-3px); box-shadow: 0 30px 70px -30px rgba(34,56,63,.6); }
.s-hdr-mobile .s-hdr-mm-oasis-nm, .s-hdr-mobile .s-hdr-mm-golfe-nm { font-family: "Bricolage Grotesque", sans-serif; font-weight: 600; font-size: clamp(19px,2vw,23px); color: var(--petrole,#2C4A52); line-height: 1.15; }
.s-hdr-mobile .s-hdr-mm-oasis-nm em, .s-hdr-mobile .s-hdr-mm-golfe-nm em { color: var(--corail,#FB6F52); font-weight: 700; font-size: 13.5px; letter-spacing: 1px; font-style: italic; }
.s-hdr-mobile .s-hdr-mm-oasis-meta, .s-hdr-mobile .s-hdr-mm-golfe-meta { font-size: 13.5px; color: var(--petrole-brume,#5B7B82); }
/* pastille flèche (l'e-svg `go` stylé en rond corail clair). */
.s-hdr-mobile .s-hdr-mm-oasis-go, .s-hdr-mobile .s-hdr-mm-golfe-go { width: 34px; height: 34px; flex: none; border-radius: 50%; background: var(--sable-pale,#F3EFE7); color: var(--corail-deep,#EA5638); display: flex; align-items: center; justify-content: center; }
/* flèche DANS la pastille : 18px (l'e-svg force width:100% → la flèche remplissait le rond 34px ;
   !important + min-width pour battre ce défaut / le min-width parasite §7.5). */
.s-hdr-mobile .s-hdr-mm-oasis-go svg, .s-hdr-mobile .s-hdr-mm-golfe-go svg { width: 18px !important; min-width: 18px; height: 18px !important; }
/* liens : grande police display + séparateurs + chevron (maquette .mm-group a). */
.s-hdr-mobile .s-hdr-mm-links > a { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 13px 0; border-bottom: 1px solid rgba(34,56,63,.08); }
.s-hdr-mobile .s-hdr-mm-links > a:last-child { border-bottom: 0; }
.s-hdr-mobile .s-hdr-mm-links > a > * { font-family: "Bricolage Grotesque", sans-serif; font-weight: 700; font-size: clamp(21px,5.4vw,26px); color: var(--petrole,#2C4A52); }
.s-hdr-mobile .s-hdr-mm-links > a::after { content: ""; width: 22px; height: 22px; flex: none; opacity: .32; background: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%232C4A52'%20stroke-width='2.2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='m9%2018%206-6-6-6'/%3E%3C/svg%3E") center/contain no-repeat; }
/* langue : label + pills (maquette .mm-langs). */
.s-hdr-mobile .s-hdr-mm-langs { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-top: 16px; }
.s-hdr-mobile .s-hdr-mm-lang-lab { font-size: 12px; font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: var(--petrole-brume,#5B7B82); margin-right: 4px; }
.s-hdr-mobile .s-hdr-mm-langs > *:not(.s-hdr-mm-lang-lab) { font-size: 14.5px; font-weight: 700; min-height: 40px; padding: 8px 16px; display: inline-flex; align-items: center; border-radius: 999px; background: var(--sable-pale,#F3EFE7); color: var(--petrole,#2C4A52); cursor: pointer; }
/* état actif = classe générique -on posée par header.js selon le préfixe d'URL (câblage Linguise) —
   plus la classe d'identité -fr : le menu mobile n'existe qu'avec JS, pas de fallback à couvrir */
.s-hdr-mobile .s-hdr-mm-lang-on { background: var(--corail-deep,#EA5638); color: #fff; }
.s-hdr-mobile .s-hdr-mm-note { font-size: 12px; color: var(--petrole-brume,#5B7B82); margin-top: 14px; }
/* barre bas : sable + sticky, Réserver large + Nous contacter pill blanche (maquette .mm-bar / .mm-contact-btn). */
.s-hdr-mobile .s-hdr-mm-bar { position: sticky; bottom: 0; display: flex; gap: 10px; padding: 14px max(20px, calc((100% - 560px)/2)); background: var(--sable-pale,#F3EFE7); box-shadow: 0 -1px 0 rgba(34,56,63,.1); }
.s-hdr-mobile .s-hdr-mm-cta { flex: 1.35; justify-content: center; min-height: 54px; }
.s-hdr-mobile .s-hdr-mm-contact { flex: 1; min-height: 54px; padding: 0; display: inline-flex; align-items: center; justify-content: center; border-radius: 999px; font-weight: 700; font-size: 14.5px; color: var(--petrole,#2C4A52); background: #fff; box-shadow: 0 0 0 1px rgba(34,56,63,.06); }


/* ===================== Variante VILLAGE du header (maquette nav--v / .vswitch) ===================== */
/* Liens village : plus petits + serrés (maquette .nav--v .nav-links{gap:16;font-size:13.5}). */
.s-hdr-village .s-hdr-links { gap: 16px; }
.s-hdr-village .s-hdr-links > a, .s-hdr-village .s-hdr-links > a > * { font-size: 13.5px; }
/* vswitch — bouton + chevron dans un rond (maquette .vswitch-btn / .chev). Village = toujours solide. */
.s-hdr-vsw-btn { opacity: .92; transition: opacity .25s; }
.s-hdr-vsw-btn:hover, .s-hdr-vsw.open .s-hdr-vsw-btn { opacity: 1; }
.s-hdr-vsw-chev { box-sizing: border-box; width: 26px; height: 26px; padding: 5px; border-radius: 50%; background: rgba(44,74,82,.07); box-shadow: inset 0 0 0 1px rgba(44,74,82,.14); color: var(--petrole,#2C4A52); transition: transform .3s var(--ease); }
.s-hdr-vsw.open .s-hdr-vsw-chev { transform: rotate(180deg); }
.s-hdr-vsw .e-svg-base svg { fill: none; }
/* menu vswitch (maquette .vswitch-menu) : override du display:none Elementor pour la transition. */
.s-hdr-village .s-hdr-vsw-menu { display: block; position: absolute; inset-block-start: calc(100% + 14px); inset-inline-start: 0; min-width: 248px; background: #fff; border-radius: 16px; box-shadow: 0 30px 70px -30px rgba(34,56,63,.6); padding: 8px; opacity: 0; visibility: hidden; transform: translateY(-6px); transition: opacity .25s var(--ease), transform .25s var(--ease), visibility .25s; z-index: 60; }
.s-hdr-vsw.open .s-hdr-vsw-menu { opacity: 1; visibility: visible; transform: none; }
/* items du menu vswitch (maquette .vswitch-menu a) : hover corail-pale, étoile corail à droite, courant sable. */
.s-hdr-village .s-hdr-vsw-menu a { display: flex; align-items: center; justify-content: space-between; gap: 10px; padding: 12px 13px; border-radius: 11px; color: var(--petrole,#2C4A52); font-weight: 600; font-size: 14.5px; transition: background .2s, color .2s; }
.s-hdr-village .s-hdr-vsw-menu a:hover { background: var(--corail-pale,#FFC6AC); color: var(--corail-deep,#EA5638); }
.s-hdr-vsw-cur { background: var(--sable-pale,#F3EFE7); }
.s-hdr-vsw-1-st, .s-hdr-vsw-2-st { margin-left: auto; color: var(--corail,#FB6F52); font-size: 12px; letter-spacing: 1px; }
.s-hdr-vsw-sep { height: 1px; background: rgba(34,56,63,.1); margin: 7px 6px; }
/* vswitch : label sur une ligne ; en mobile village, on masque le logo (maquette .nav--v .logo-link{display:none}). */
.s-hdr-vsw-lbl { white-space: nowrap; }
@media (max-width: 560px) { .s-hdr-village .s-hdr-logo { display: none; } }
/* Ombre du header village : filet discret (maquette .nav--solid{box-shadow:0 1px 0 rgba(34,56,63,.07)}),
   pas la grosse ombre du scrolled marque. Spécificité .s-hdr.s-hdr-village pour battre la base. */
.s-hdr.s-hdr-village { box-shadow: 0 1px 0 rgba(34,56,63,.07); }
/* Dropdown « Groupes & CSE » du header village : 13.5px comme les autres liens village (défaut 16). */
.s-hdr-village .s-hdr-drop-btn, .s-hdr-village .s-hdr-drop-lbl { font-size: 13.5px; }
/* Logo village : forcer 48×48 (enfant flex direct de hdr-brand → comprimé sinon, §7.11). */
.s-hdr-village .s-hdr-logo { flex: 0 0 auto; width: 48px; min-width: 48px; height: 48px; }
/* Item COURANT du vswitch : fond sable (déjà) + texte corail-deep (maquette .vswitch-menu a.cur{color:corail-deep}).
   Spécificité …a.s-hdr-vsw-cur pour battre la couleur petrole des items. */
.s-hdr-village .s-hdr-vsw-menu a.s-hdr-vsw-cur { color: var(--corail-deep, #EA5638); }
/* Padding vertical du header village : 15px (maquette .nav--solid{padding:15px 0}), scopé village
   uniquement — le marque reste à 12px (solide) / 24px (transparent). */
.s-hdr.s-hdr-village { padding-top: 15px; padding-bottom: 15px; }

/* ============================================================
   FOOTER — bloc site/footer-main (Theme Builder, doc #72)
   Maquette : index.html:425 `.footer` / styles.css:294-317 + MQ 343 (≤900) / 354 (≤560).
   Atomique v4 : styles portés ici, scopés `.s-ftr`.
   Leçons : §7.5 padding parasite neutralisé sur les conteneurs (`.e-con`/e-flexbox/e-div-block),
   §7.11 grille + width:auto sur enfants, §7.14 SVG sizing width+min-width+height + display:block,
   scope descendant, fidélité valeurs maquette (13.5/14/12.5 conservées).
   ============================================================ */
/* IMPORTANT (§7.5/§7.11) : les bases atomiques (.e-con / .e-div-block-base / .e-flexbox-base)
   posent padding + display AVEC une spécificité (0,1,0) chargée APRÈS le thème enfant → toutes
   les règles de layout du footer sont préfixées `.s-ftr ` (0,2,0) pour gagner, racine en `.s-ftr.s-ftr`.
   Les <svg> e-svg ont un style INLINE `width/height:100%` → dimensionner via le wrapper .e-svg-base
   + `!important` sur le svg. Le logo `s-ftr-logo` est porté par le <img> lui-même. */
/* neutralise le padding 10px parasite des conteneurs atomiques (§7.5, via .e-con) */
.s-ftr .e-con { padding: 0; }
/* racine (double classe pour battre le padding parasite du .e-con racine) */
.s-ftr.s-ftr { background: var(--petrole-2, #22383F); color: rgba(255,255,255,.78); padding: 64px 0 28px; display: block; }
.s-ftr .s-ftr-wrap { width: 100%; max-width: var(--maxw, 1220px); margin-inline: auto; padding: 0 24px; box-sizing: border-box; }
/* grille 5 colonnes (§7.11 : la grille porte le layout, pas les enfants) */
.s-ftr .s-ftr-top { display: grid; grid-template-columns: 1.4fr 1fr 1fr 1fr 1.2fr; gap: 34px; }
/* colonne marque — s-ftr-logo est sur le <img> lui-même */
.s-ftr .s-ftr-brand { display: block; }
.s-ftr .s-ftr-logo { display: block; width: 64px; height: 64px; margin-bottom: 16px; }
.s-ftr .s-ftr-tagline { font-size: 13.5px; max-width: 30ch; line-height: 1.6; }
/* colonnes de liens */
.s-ftr .s-ftr-col { display: block; }
.s-ftr .s-ftr-h { display: block; color: #fff; font-family: var(--font-display, "Bricolage Grotesque"), sans-serif; font-weight: 700; font-size: var(--fs-eyebrow); letter-spacing: .08em; text-transform: uppercase; margin-bottom: 16px; }
.s-ftr .s-ftr-list { display: flex; flex-direction: column; gap: 10px; align-items: flex-start; }
/* line-height 25.6px : reproduit la hauteur de ligne des <li> maquette (25.6px) → avec gap 10 du
   .s-ftr-list = 36px centre-à-centre entre liens (fidèle maquette, WP était trop serré à 21+10). */
.s-ftr .s-ftr-link { display: inline-flex; font-size: 14px; line-height: 25.6px; color: rgba(255,255,255,.78); text-decoration: none; transition: color .25s; }
.s-ftr .s-ftr-link:hover { color: var(--corail-pale, #FFC6AC); }
.s-ftr .s-ftr-link-t { font-size: 14px; color: inherit; }
/* réseaux sociaux */
.s-ftr .s-ftr-socials { display: flex; gap: 10px; margin-top: 18px; }
.s-ftr .s-ftr-social { position: relative; display: block; flex: 0 0 auto; width: 38px; }
.s-ftr .s-ftr-social-btn { flex: 0 0 auto; width: 38px; height: 38px; min-width: 38px; border-radius: 50%; background: rgba(255,255,255,.08); display: flex; align-items: center; justify-content: center; border: 0; padding: 0; cursor: pointer; color: #fff; transition: background .25s; }
.s-ftr .s-ftr-social-btn:hover, .s-ftr .s-ftr-social.open .s-ftr-social-btn { background: var(--corail-deep, #EA5638); }
/* icônes : wrapper .e-svg-base dimensionné + svg forcé (§7.14 : e-svg impose width/height:100% inline) */
.s-ftr .s-ftr-ic { width: 17px; height: 17px; flex: 0 0 auto; display: block; color: #fff; }
.s-ftr .s-ftr-ic svg { width: 17px !important; height: 17px !important; min-width: 17px; display: block; }
.s-ftr .s-ftr-cic { width: 15px; height: 15px; flex: 0 0 auto; margin-top: 3px; display: block; color: var(--corail-pale, #FFC6AC); }
.s-ftr .s-ftr-cic svg { width: 15px !important; height: 15px !important; min-width: 15px; display: block; }
/* fill (§7.3/§7.14) : contour par défaut (map/phone/mail/Instagram = stroke), pleins pour FB/YT */
.s-ftr .e-svg-base svg { fill: none; }
.s-ftr .s-ftr-ic-fb svg, .s-ftr .s-ftr-ic-yt svg { fill: currentColor; }
/* popover social : masqué via opacity/visibility (transition), ouvre vers le HAUT */
.s-ftr .s-ftr-social-pop { position: absolute; bottom: calc(100% + 12px); left: 0; min-width: 178px; background: #fff; border-radius: 14px; padding: 7px; box-shadow: 0 20px 44px -16px rgba(0,0,0,.45); display: flex; flex-direction: column; gap: 1px; opacity: 0; visibility: hidden; transform: translateY(8px); transition: opacity .22s var(--ease), transform .22s var(--ease), visibility .22s; z-index: 30; }
.s-ftr .s-ftr-social.open .s-ftr-social-pop { opacity: 1; visibility: visible; transform: none; }
.s-ftr .s-ftr-pop-h { display: block; font-size: var(--fs-micro); font-weight: 700; letter-spacing: .14em; text-transform: uppercase; color: var(--petrole-brume); padding: 7px 12px 5px; }
.s-ftr .s-ftr-pop-link { display: block; padding: 9px 13px; border-radius: 9px; font-size: 14px; font-weight: 600; color: var(--petrole); white-space: nowrap; text-decoration: none; transition: background .2s, color .2s; }
.s-ftr .s-ftr-pop-link:hover { background: var(--sable-pale, #F3EFE7); color: var(--corail-deep, #EA5638); }
.s-ftr .s-ftr-pop-t { color: inherit; font-size: 14px; font-weight: 600; }
/* contact */
.s-ftr .s-ftr-contact { display: flex; flex-direction: column; gap: 10px; }
.s-ftr .s-ftr-cline { display: flex; align-items: flex-start; gap: 9px; line-height: 1.5; font-size: 14px; }
.s-ftr .s-ftr-ctext { font-size: 14px; line-height: 1.5; }
/* langues (placeholder) */
.s-ftr .s-ftr-langs { display: flex; gap: 8px; margin-top: 18px; flex-wrap: wrap; }
.s-ftr .s-ftr-lang { display: inline-block; font-size: 12px; font-weight: 700; padding: 5px 11px; border-radius: 999px; background: rgba(255,255,255,.08); cursor: pointer; }
.s-ftr .s-ftr-lang-on { background: var(--corail-deep, #EA5638); color: #fff; }
/* bas de footer */
.s-ftr .s-ftr-bot { margin-top: 48px; padding-top: 22px; border-top: 1px solid rgba(255,255,255,.12); display: flex; justify-content: space-between; gap: 18px; flex-wrap: wrap; font-size: 12.5px; color: rgba(255,255,255,.6); }
/* responsive maquette : 5 → 2 col (≤900) → 1 col (≤560) */
@media (max-width: 900px) { .s-ftr .s-ftr-top { grid-template-columns: 1fr 1fr; } }
@media (max-width: 560px) { .s-ftr .s-ftr-top { grid-template-columns: 1fr; } }

/* ============================================================
   HERO — animations (bloc home/hero-selector, doc #47 + inline page 65)
   Maquette : index.html:126 `.heroD` / styles.css:102-140,321-322,424-428 + script.js:203-220,245.
   Scopé `.s-hero`, spécificité `.s-hero .X` (bat les bases atomiques Elementor).
   LOT H1 = entrées au chargement · H2 = ken burns fond défaut. (H3 hover / H4 swap / H5 parallaxe suivent.)
   ============================================================ */
/* H1 — entrées au chargement (maquette `.load` + `@keyframes rise`, délais l1..l4). */
@keyframes s-hero-rise { to { opacity: 1; transform: none; } }
.s-hero .s-hero-eyebrow, .s-hero .s-hero-h1, .s-hero .s-hero-sub,
.s-hero .s-hero-dock-hint {
  opacity: 0; transform: translateY(22px);
  animation: s-hero-rise 1s var(--ease, cubic-bezier(.2,.7,.2,1)) forwards;
}
.s-hero .s-hero-eyebrow   { animation-delay: .15s; }  /* l1 */
.s-hero .s-hero-h1        { animation-delay: .35s; }  /* l2 */
.s-hero .s-hero-sub,
.s-hero .s-hero-dock-hint { animation-delay: .55s; }  /* l3 */
/* .s-hero-cards (l4) : entrée SANS transform résiduel — c'est un ANCÊTRE des cartes verre, et un
   transform (même la matrice identité laissée par `animation … forwards → transform:none`) casse le
   backdrop-filter des descendants. On anime DEPUIS l'état décalé vers l'état de base (`backwards`, pas
   `forwards`) : après l'animation, l'élément reprend sa base = AUCUN transform → le verre s'affiche. */
@keyframes s-hero-rise-cards { from { opacity: 0; transform: translateY(22px); } }
.s-hero .s-hero-cards { animation: s-hero-rise-cards 1s var(--ease, cubic-bezier(.2,.7,.2,1)) .78s backwards; }

/* H2/H4 — ken burns + zoom des fonds, GATÉS par `.is-active` (toggle par js/hero.js au swap).
   Deux comportements distincts, fidèles maquette (styles.css:107-109) :
   - fond DÉFAUT : kenburns = zoom OUT scale 1.12 -> 1 (16s), rejoué à chaque (ré)activation
     (le sélecteur .is-active retire/ré-applique l'animation → relance au retour sur défaut) ;
   - fonds VILLAGE : zoom IN doux scale 1 -> 1.04 en 6s à l'activation (transition). */
@keyframes s-hero-kenburns { from { transform: scale(1.12); } to { transform: scale(1); } }
.s-hero .s-hero-bg-default.is-active .s-hero-bg-default-img { animation: s-hero-kenburns 16s ease-out forwards; }
.s-hero .s-hero-bg-oasis-img, .s-hero .s-hero-bg-gassin-img { transform: scale(1); transition: transform 6s ease-out; }
.s-hero .s-hero-bg-oasis.is-active .s-hero-bg-oasis-img,
.s-hero .s-hero-bg-gassin.is-active .s-hero-bg-gassin-img { transform: scale(1.04); }

/* H3 — hover des cartes (maquette .dcard:hover, .dgo, .cta ; styles.css:121-140).
   `.s-hero-dgo` = CTA « Voir le village » ajouté au markup (masqué au repos, révélé au survol).
   Classe partagée `.s-hero-card` (oasis+gassin). Spécificité `.s-hero .X` pour battre les styles d'élément. */
.s-hero .s-hero-card { transition: background .4s, opacity .4s, box-shadow .4s, transform .4s; cursor: pointer; }
/* #2 verre dépoli : la base atomique ne posait que blur(22px) ; ajout de saturate(1.4) (maquette .dcard). */
.s-hero .s-hero-card { -webkit-backdrop-filter: blur(22px) saturate(1.4); backdrop-filter: blur(22px) saturate(1.4); }
.s-hero .s-hero-card [class$="-thumb-img"] { transition: transform .9s var(--ease); }
.s-hero .s-hero-card:hover [class$="-thumb-img"] { transform: scale(1.05); }
.s-hero .s-hero-card:hover { background: rgba(255,255,255,.22); box-shadow: 0 32px 64px -26px rgba(0,0,0,.8); transform: translateY(-3px); }
/* atténuation de l'autre carte au survol (maquette .cards:hover .dcard:not(:hover)) */
.s-hero .s-hero-cards:hover .s-hero-card:not(:hover) { opacity: .58; }
/* CTA révélé (maquette .dgo : max-height 0 -> 60 + opacity + margin-top) */
/* padding:0 : neutralise le padding parasite §7.5 du conteneur atomique — sinon le dgo garde ~20px de
   hauteur même replié (décale le CTA à droite + fausse le centrage vertical du bloc texte, cf. #1/#4a). */
.s-hero .s-hero-dgo { max-height: 0; opacity: 0; overflow: hidden; padding: 0; transition: max-height .5s var(--ease), opacity .4s var(--ease), margin-top .45s var(--ease); }
/* #4b : étoiles en line-height 1 (maquette .dbody .st{line-height:1}) — sinon 24px ajoutait ~6px sous
   les étoiles, gonflant l'espace étoiles↔CTA. */
.s-hero .s-hero-card-oasis-st, .s-hero .s-hero-card-gassin-st { line-height: 1; }
.s-hero .s-hero-card:hover .s-hero-dgo { max-height: 60px; opacity: 1; margin-top: 14px; }
/* pastille CTA corail (maquette .dock .cta) */
/* width:auto : `.e-con` atomique impose width:100% (§7.5) → le CTA s'étirait ; auto = il épouse le texte.
   white-space:nowrap : « Voir le village » sur une ligne (sinon le label s'enroule dans la carte étroite en mobile). */
.s-hero .s-hero-dgo-cta { display: inline-flex; width: auto; align-items: center; gap: 10px; white-space: nowrap; font-weight: 700; font-size: 14px; border-radius: 999px; padding: 11px 12px 11px 20px; background: var(--corail-deep, #EA5638); color: #fff; }
.s-hero .s-hero-dgo-label { color: #fff; font-weight: 700; font-size: 14px; white-space: nowrap; }
.s-hero .s-hero-dgo-ic { flex: 0 0 auto; width: 26px; height: 26px; border-radius: 50%; background: rgba(255,255,255,.22); display: flex; align-items: center; justify-content: center; transition: background .35s var(--ease); color: #fff; }
/* dimensionner le WRAPPER e-svg (.e-svg-base) et non seulement le <svg> : sinon le wrapper garde une
   hauteur ~65px et la flèche se place en haut, hors du cercle (même piège §7.14 que les icônes footer). */
.s-hero .s-hero-dgo-svg { width: 15px; height: 15px; flex: 0 0 auto; display: flex; align-items: center; justify-content: center; }
.s-hero .s-hero-dgo-svg svg { width: 15px !important; height: 15px !important; min-width: 15px; display: block; fill: none; stroke: currentColor; transition: transform .4s var(--ease); }
.s-hero .s-hero-card:hover .s-hero-dgo-ic { background: #fff; color: var(--corail-deep, #EA5638); }
.s-hero .s-hero-card:hover .s-hero-dgo-svg svg { transform: rotate(-45deg); }
/* mobile ≤900 : pas de hover tactile → CTA visible en permanence (maquette styles.css:333,348). */
@media (max-width: 900px) { .s-hero .s-hero-dgo { max-height: 80px; opacity: 1; margin-top: 12px; } }

/* H4 — swap du fond : crossfade opacity (maquette .bg{transition:opacity 1s}). Le toggle d'opacité
   est piloté par js/hero.js (inline style) ; la transition vit ici. */
.s-hero .s-hero-bgs > * { transition: opacity 1s var(--ease); }
/* H5 — parallaxe : le scale du conteneur des fonds est piloté par js/hero.js. On garantit le clip. */
.s-hero { overflow: hidden; }
.s-hero .s-hero-bgs { will-change: transform; }

/* Accessibilité — respect de prefers-reduced-motion (maquette styles.css:426-428). */
@media (prefers-reduced-motion: reduce) {
  .s-hero .s-hero-eyebrow, .s-hero .s-hero-h1, .s-hero .s-hero-sub,
  .s-hero .s-hero-dock-hint, .s-hero .s-hero-cards {
    opacity: 1 !important; transform: none !important; animation: none !important;
  }
  .s-hero .s-hero-bg-default.is-active .s-hero-bg-default-img,
  .s-hero .s-hero-bg-oasis-img, .s-hero .s-hero-bg-gassin-img,
  .s-hero .s-hero-bg-oasis.is-active .s-hero-bg-oasis-img,
  .s-hero .s-hero-bg-gassin.is-active .s-hero-bg-gassin-img { animation: none !important; transform: none !important; transition: none !important; }
}

/* ============================================================
   MENU MOBILE — visage VILLAGE (doc 64, overlay .s-hdr-mobile.s-hdr-mm-v)
   Maquette V28 : script.js isVillage + styles.css:367-424. Construit EN DUR (dette dynamique).
   Scopé `.s-hdr-mm-v` (marqueur sur le conteneur) → n'affecte pas l'overlay marque. Infra
   open/close/scroll-lock/focus-trap = LOT 2c (partagé). Nouveau : logo head, carte « Vous êtes
   ici » + accordéon (grid-template-rows), badge, chevron, liens village.
   ============================================================ */
/* §7.5 : neutralise le padding parasite (10px) des conteneurs atomiques qui ne doivent PAS en avoir
   (audit getComputedStyle). Les conteneurs à padding voulu (head/scroll/card/switch/link/bar/cta) le
   redéclarent avec la même spécificité ci-dessous → ils gagnent (ordre source). */
.s-hdr-mm-v .s-hdr-mm-logo, .s-hdr-mm-v .s-hdr-mm-ct, .s-hdr-mm-v .s-hdr-mm-nm,
.s-hdr-mm-v .s-hdr-mm-go, .s-hdr-mm-v .s-hdr-mm-chev, .s-hdr-mm-v .s-hdr-mm-links,
.s-hdr-mm-v .s-hdr-mm-util, .s-hdr-mm-v .s-hdr-mm-langs, .s-hdr-mm-v .s-hdr-mm-cta-ico { padding: 0; }
.s-hdr-mm-v .s-hdr-mm-head { position: sticky; top: 0; z-index: 2; display: flex; align-items: center; justify-content: space-between; gap: 16px; padding: 16px max(20px, calc((100% - 560px)/2)); background: rgba(251,250,246,.985); transition: box-shadow .25s; }
.s-hdr-mm-v .s-hdr-mm-head.scrolled { box-shadow: 0 1px 0 rgba(34,56,63,.1); }
.s-hdr-mm-v .s-hdr-mm-logo { display: flex; }
.s-hdr-mm-v .s-hdr-mm-logo-img { width: 46px; height: 46px; object-fit: contain; }
.s-hdr-mm-v .s-hdr-mm-close { width: 44px; height: 44px; flex: 0 0 auto; border-radius: 50%; border: 0; background: rgba(44,74,82,.08); color: var(--petrole,#2C4A52); display: flex; align-items: center; justify-content: center; cursor: pointer; transition: background .25s; padding: 0; }
.s-hdr-mm-v .s-hdr-mm-close:hover { background: rgba(44,74,82,.16); }
.s-hdr-mm-v .s-hdr-mm-close-svg { width: 20px; height: 20px; flex: 0 0 auto; display: flex; }
.s-hdr-mm-v .s-hdr-mm-close-svg svg { width: 20px !important; height: 20px !important; stroke: currentColor; fill: none; }
.s-hdr-mm-v .s-hdr-mm-scroll { flex: 1; overflow-y: auto; -webkit-overflow-scrolling: touch; padding: 6px 22px 28px; display: flex; flex-direction: column; width: 100%; max-width: 560px; margin: 0 auto; }
/* cartes (switch + destinations) */
.s-hdr-mm-v .s-hdr-mm-card { display: flex; align-items: center; gap: 14px; background: #fff; border-radius: var(--r-card,24px); box-shadow: 0 16px 40px -26px rgba(34,56,63,.5), 0 0 0 1px rgba(34,56,63,.06); padding: 15px 17px; margin-bottom: 10px; text-decoration: none; width: 100%; text-align: left; border: 0; cursor: pointer; transition: transform .35s var(--ease), box-shadow .35s var(--ease); }
.s-hdr-mm-v a.s-hdr-mm-card:hover { transform: translateY(-3px); box-shadow: 0 30px 70px -30px rgba(34,56,63,.6); }
.s-hdr-mm-v .s-hdr-mm-ct { flex: 1; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.s-hdr-mm-v .s-hdr-mm-nm { display: flex; align-items: center; gap: 9px; flex-wrap: wrap; font-family: var(--font-display,"Bricolage Grotesque"),sans-serif; font-weight: 600; font-size: var(--fs-h4); color: var(--petrole,#2C4A52); line-height: 1.15; }
.s-hdr-mm-v .s-hdr-mm-nm-t { font-family: var(--font-display,"Bricolage Grotesque"),sans-serif; font-weight: 600; }
.s-hdr-mm-v .s-hdr-mm-st { font-size: var(--fs-meta); color: var(--corail,#FB6F52); letter-spacing: 1px; font-weight: 700; }
.s-hdr-mm-v .s-hdr-mm-meta { font-size: var(--fs-meta); color: var(--petrole-brume,#5B7B82); }
.s-hdr-mm-v .s-hdr-mm-go { width: 34px; height: 34px; flex: 0 0 auto; border-radius: 50%; background: var(--sable-pale,#F3EFE7); color: var(--corail-deep,#EA5638); display: flex; align-items: center; justify-content: center; transition: background .3s var(--ease), color .3s var(--ease); }
.s-hdr-mm-v .s-hdr-mm-go-svg { width: 18px; height: 18px; flex: 0 0 auto; display: flex; }
.s-hdr-mm-v .s-hdr-mm-go-svg svg { width: 18px !important; height: 18px !important; stroke: currentColor; stroke-width: 2.2; fill: none; }
.s-hdr-mm-v a.s-hdr-mm-card:hover .s-hdr-mm-go { background: var(--corail-deep,#EA5638); color: #fff; }
/* badge « Vous êtes ici » + chevron du switch */
.s-hdr-mm-v .s-hdr-mm-badge { font-size: var(--fs-micro); font-weight: 700; letter-spacing: .02em; padding: 4px 10px; border-radius: 999px; background: var(--petrole-brume,#5B7B82); color: #fff; white-space: nowrap; }
.s-hdr-mm-v .s-hdr-mm-badge.here { background: var(--corail-deep,#EA5638); }
.s-hdr-mm-v .s-hdr-mm-chev { width: 30px; height: 30px; flex: 0 0 auto; border-radius: 50%; background: var(--sable-pale,#F3EFE7); color: var(--petrole,#2C4A52); display: flex; align-items: center; justify-content: center; transition: transform .3s var(--ease); }
.s-hdr-mm-v .s-hdr-mm-chev-svg { width: 17px; height: 17px; flex: 0 0 auto; display: flex; }
.s-hdr-mm-v .s-hdr-mm-chev-svg svg { width: 17px !important; height: 17px !important; stroke: currentColor; stroke-width: 2.4; fill: none; }
.s-hdr-mm-v .s-hdr-mm-switch-btn[aria-expanded="true"] .s-hdr-mm-chev { transform: rotate(180deg); }
/* accordéon « changer de village » (grid-template-rows 0fr→1fr) */
/* padding:0 (§7.5) sur les 2 conteneurs de l'accordéon : sinon le padding parasite (10px ×2 ×2 = 40px)
   empêche le repli à 0 (la technique grid-rows exige un conteneur interne sans padding/marge/bordure). */
.s-hdr-mm-v .s-hdr-mm-disclose { display: grid; grid-template-rows: 0fr; padding: 0; transition: grid-template-rows .35s var(--ease); }
.s-hdr-mm-v .s-hdr-mm-disclose.open { grid-template-rows: 1fr; }
.s-hdr-mm-v .s-hdr-mm-disclose-in { overflow: hidden; min-height: 0; padding: 0; }
/* liens village à plat (chevron ::after) */
.s-hdr-mm-v .s-hdr-mm-links { display: flex; flex-direction: column; }
.s-hdr-mm-v .s-hdr-mm-link { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 13px 0; border-bottom: 1px solid rgba(34,56,63,.08); text-decoration: none; transition: color .2s, padding-left .25s var(--ease); }
.s-hdr-mm-v .s-hdr-mm-link:last-child { border-bottom: 0; }
.s-hdr-mm-v .s-hdr-mm-link-t { font-family: var(--font-display,"Bricolage Grotesque"),sans-serif; font-weight: 700; font-size: clamp(21px,5.4vw,26px); color: var(--petrole,#2C4A52); }
.s-hdr-mm-v .s-hdr-mm-link::after { content: ""; width: 22px; height: 22px; flex: 0 0 auto; background: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232C4A52' stroke-width='2.2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m9 18 6-6-6-6'/%3E%3C/svg%3E") center/contain no-repeat; opacity: .32; transition: opacity .2s, transform .25s var(--ease); }
.s-hdr-mm-v .s-hdr-mm-link:hover { padding-left: 6px; }
.s-hdr-mm-v .s-hdr-mm-link:hover .s-hdr-mm-link-t { color: var(--corail-deep,#EA5638); }
.s-hdr-mm-v .s-hdr-mm-link:hover::after { opacity: .7; transform: translateX(3px); }
/* utilitaires : langue + mention */
.s-hdr-mm-v .s-hdr-mm-util { margin-top: 18px; }
.s-hdr-mm-v .s-hdr-mm-langs { display: flex; align-items: center; gap: 8px; margin-top: 16px; flex-wrap: wrap; }
.s-hdr-mm-v .s-hdr-mm-lang-lab { font-size: var(--fs-micro); font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: var(--petrole-brume,#5B7B82); margin-right: 4px; }
.s-hdr-mm-v .s-hdr-mm-lang { font-size: var(--fs-label); font-weight: 700; min-height: 40px; padding: 8px 16px; display: inline-flex; align-items: center; border-radius: 999px; background: var(--sable-pale,#F3EFE7); color: var(--petrole,#2C4A52); cursor: pointer; transition: background .2s, color .2s; }
.s-hdr-mm-v .s-hdr-mm-lang.on { background: var(--corail-deep,#EA5638); color: #fff; }
.s-hdr-mm-v .s-hdr-mm-disclaimer { font-size: var(--fs-micro); color: var(--petrole-brume,#5B7B82); margin-top: 14px; }
/* barre bas : Réserver (classes globales btn) + Nous contacter */
.s-hdr-mm-v .s-hdr-mm-bar { position: sticky; bottom: 0; z-index: 2; display: flex; gap: 10px; padding: 14px max(20px, calc((100% - 560px)/2)) calc(14px + env(safe-area-inset-bottom)); background: var(--sable-pale,#F3EFE7); box-shadow: 0 -1px 0 rgba(34,56,63,.1); }
.s-hdr-mm-v .s-hdr-mm-cta { flex: 1.35; justify-content: center; min-height: 54px; }
/* flèche Réserver : fond TRANSPARENT au repos (maquette .btn .ico{background:transparent}), pastille
   blanche seulement au survol. (Corrige la confusion avec le style .dock .cta .ic du hero qui a un fond.) */
.s-hdr-mm-v .s-hdr-mm-cta-ico { width: 26px; height: 26px; flex: 0 0 auto; border-radius: 50%; background: transparent; color: #fff; display: flex; align-items: center; justify-content: center; transition: background .35s var(--ease), color .35s var(--ease); }
.s-hdr-mm-v .s-hdr-mm-cta:hover .s-hdr-mm-cta-ico { background: #fff; color: var(--corail-deep, #EA5638); }
.s-hdr-mm-v .s-hdr-mm-cta-arrow { width: 15px; height: 15px; flex: 0 0 auto; display: flex; }
.s-hdr-mm-v .s-hdr-mm-cta-arrow svg { width: 15px !important; height: 15px !important; stroke: currentColor; fill: none; }
.s-hdr-mm-v .s-hdr-mm-contact { flex: 1; min-height: 54px; display: inline-flex; align-items: center; justify-content: center; border-radius: 999px; font-weight: 700; font-size: var(--fs-label); color: var(--petrole,#2C4A52); background: #fff; box-shadow: 0 0 0 1px rgba(34,56,63,.06); text-decoration: none; transition: transform .25s var(--ease), box-shadow .25s, background .25s, color .25s; }
.s-hdr-mm-v .s-hdr-mm-contact:hover { transform: translateY(-2px); box-shadow: 0 16px 40px -26px rgba(34,56,63,.5); background: var(--petrole,#2C4A52); color: #fff; }

/* ============================================================
   EXPERIENCE — bloc home/experience (page 65 ; collage « scatter »)
   Maquette : index.html:164 / styles.css:197-210 + responsive 337-341.
   Collage absolu = CSS thème custom (§7.2). Tout scopé `.s-exp` (spécificité 0,2,0 pour battre les
   défauts atomiques : width:100%, position, min-width). §7.5 préventif en tête.
   ============================================================ */
/* §7.5 préventif : padding parasite neutralisé d'emblée sur TOUS les conteneurs du bloc (0,2,0).
   ⚠️ NE PAS utiliser `:not(.btn)` : `:not()` ajoute la spécificité de son argument → le reset passe à
   (0,3,0) et écrase les règles (0,2,0) qui reposent un padding voulu (wrap, fllab). On garde le blanket
   et on RÉ-AJOUTE explicitement le padding du bouton plus bas (même spécificité, après → gagne). */
.s-exp .e-con { padding: 0; }
/* section + wrap */
/* section : padding vertical maquette (.section{padding:clamp(64,9vw,120) 0} + override bas de l'inline
   style=padding-bottom:clamp(24,3vw,48)). Double classe pour battre le padding parasite du .e-con racine. */
.s-exp.s-exp { display: block; padding: clamp(64px,9vw,120px) 0 clamp(24px,3vw,48px); }
.s-exp .s-exp-wrap { width: 100%; max-width: var(--maxw,1220px); margin-inline: auto; padding: 0 24px; box-sizing: border-box; }
/* canevas collage (position:relative, hauteur fixe maquette 840px) */
.s-exp .s-exp-scatter { position: relative; height: 840px; max-width: 1080px; margin: 0 auto; }
/* bloc texte centré au milieu du collage */
.s-exp .s-exp-ctext { position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%); width: min(450px,82%); text-align: center; z-index: 5; }
.s-exp .s-exp-eyebrow { display: inline-flex; align-items: center; justify-content: center; gap: 10px; font-size: var(--fs-eyebrow); font-weight: 700; letter-spacing: .2em; text-transform: uppercase; color: var(--corail-deep); }
.s-exp .s-exp-eyebrow::before { content: ""; width: 26px; height: 2px; background: var(--corail); flex: 0 0 auto; }
.s-exp .s-exp-h2 { font-size: var(--fs-h2); color: var(--petrole); }
.s-exp .s-exp-p { margin: 14px 0 22px; color: var(--petrole-brume); font-size: 16px; }
/* bouton : ré-ajout du padding (écrasé par le blanket .e-con reset), + ico 26px et flèche 16px
   (wrapper e-svg §7.14 : sinon l'ico grossit à ~65px et la flèche se décale au-dessus du texte). */
.s-exp .s-exp-btn { width: auto; margin: 0 auto; padding: 13px 16px 13px 24px; white-space: nowrap; }
.s-exp .s-exp-btn-t { white-space: nowrap; }
.s-exp .s-exp-btn-ico { width: 26px; height: 26px; min-width: 26px; flex: 0 0 auto; display: flex; align-items: center; justify-content: center; border-radius: 50%; }
.s-exp .s-exp-btn-arrow { width: 16px; height: 16px; flex: 0 0 auto; display: flex; }
/* vignettes — position:absolute, positions/tailles/rotations EN DUR (maquette) */
.s-exp .s-exp-fl { position: absolute; z-index: 2; }
.s-exp .s-exp-fl-1 { left: 0;    top: 44px;  width: 230px; height: 290px; transform: rotate(-3deg); }
.s-exp .s-exp-fl-2 { left: 356px; top: -6px;  width: 182px; height: 120px; transform: rotate(-1.5deg); }
.s-exp .s-exp-fl-3 { left: 600px; top: -12px; width: 166px; height: 124px; transform: rotate(2deg); }
.s-exp .s-exp-fl-4 { left: 862px; top: 18px;  width: 206px; height: 168px; transform: rotate(2.5deg); }
.s-exp .s-exp-fl-5 { left: 22px;  top: 382px; width: 198px; height: 198px; transform: rotate(2deg); }
.s-exp .s-exp-fl-6 { left: 856px; top: 386px; width: 222px; height: 288px; transform: rotate(-2.5deg); }
.s-exp .s-exp-fl-7 { left: 78px;  top: 626px; width: 190px; height: 150px; transform: rotate(-2deg); }
.s-exp .s-exp-fl-8 { left: 430px; top: 660px; width: 206px; height: 152px; transform: rotate(2deg); }
.s-exp .s-exp-fl-9 { left: 704px; top: 644px; width: 188px; height: 150px; transform: rotate(-2deg); }
/* photo : overflow:hidden UNIQUEMENT ici (pas sur .s-exp-fl, qui porte le label débordant, cf. vigilance #3) */
.s-exp .s-exp-ph { position: absolute; inset: 0; border-radius: 18px; overflow: hidden; box-shadow: 0 16px 40px -26px rgba(34,56,63,.5); transition: box-shadow .5s; }
.s-exp .s-exp-ph-img { display: block; width: 100%; height: 100%; object-fit: cover; transition: transform .7s var(--ease); }
.s-exp .s-exp-fl:hover { z-index: 7; }
.s-exp .s-exp-fl:hover .s-exp-ph { box-shadow: 0 30px 70px -30px rgba(34,56,63,.6); }
.s-exp .s-exp-fl:hover .s-exp-ph-img { transform: scale(1.05); }
/* étiquette (pastille + libellé), débordant le coin de la vignette (−13px) */
/* width:fit-content : la base atomique impose width:100% (§7.5) → la pastille s'étirait à la largeur de
   la vignette au lieu d'épouser le texte. fit-content = elle s'arrête après le contenu (fidèle maquette). */
.s-exp .s-exp-fllab { position: absolute; z-index: 8; width: fit-content; background: #fff; border-radius: 999px; box-shadow: 0 30px 70px -30px rgba(34,56,63,.6); padding: 7px 13px; font-size: 11.5px; font-weight: 700; color: var(--petrole); display: inline-flex; align-items: center; gap: 7px; white-space: nowrap; }
.s-exp .s-exp-lab-bl { left: 12px; bottom: -13px; }
.s-exp .s-exp-lab-br { right: 12px; bottom: -13px; }
.s-exp .s-exp-lab-tl { left: 12px; top: -13px; }
.s-exp .s-exp-lab-tr { right: 12px; top: -13px; }
/* min-width:7px : la base atomique impose min-width:30px (§7.5) → sans ça la pastille est un ovale 30×7. */
.s-exp .s-exp-dot { width: 7px; height: 7px; min-width: 7px; border-radius: 50%; flex: 0 0 auto; }
.s-exp .s-exp-dot-lagune { background: var(--lagune); }
.s-exp .s-exp-dot-olivier { background: var(--olivier); }
.s-exp .s-exp-dot-corail { background: var(--corail); }
.s-exp .s-exp-dot-ambre { background: var(--ambre); }
/* flèche du bouton (§7.14) */
.s-exp .s-exp-btn-arrow svg { width: 16px !important; height: 16px !important; fill: none; stroke: currentColor; }
/* responsive ≤900 : le collage absolu s'effondre en grille 2 colonnes (maquette styles.css:337-341) */
@media (max-width: 900px) {
  .s-exp .s-exp-scatter { height: auto; display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
  .s-exp .s-exp-ctext { position: static; transform: none; grid-column: 1 / -1; width: auto; margin: 6px 0; }
  .s-exp .s-exp-fl { position: relative !important; inset: auto !important; width: auto !important; height: 200px !important; transform: none !important; }
  .s-exp .s-exp-fllab { top: auto; bottom: 12px; left: 12px; right: auto; }
}

/* ============================================================
   REASSURANCE — bloc home/reassurance (page 65 ; grille « atouts »)
   Maquette : index.html:187 / styles.css:178-185 + responsive 334 (≤900) / 352 (≤560).
   Scopé `.s-reassur`. §7.5 préventif d'emblée. Cartes #fff sur body --lumiere (crème).
   ============================================================ */
/* §7.5 préventif : padding parasite neutralisé (PAS de :not, piège spécificité 0,3,0). */
.s-reassur .e-con { padding: 0; }
/* section : padding vertical maquette (.section{clamp(64,9vw,120) 0} + inline padding-top clamp(8,2vw,24)).
   Double classe pour battre le padding parasite du .e-con racine. */
.s-reassur.s-reassur { display: block; padding: clamp(8px,2vw,24px) 0 clamp(64px,9vw,120px); }
.s-reassur .s-reassur-wrap { width: 100%; max-width: var(--maxw,1220px); margin-inline: auto; padding: 0 24px; box-sizing: border-box; }
/* grille 3 colonnes */
.s-reassur .s-reassur-grid { display: grid; grid-template-columns: repeat(3,1fr); gap: var(--gap-grid,20px); }
/* carte : blanc, radius 20, ombre douce, lévitation au hover */
.s-reassur .s-reassur-card { background: #fff; border-radius: 20px; padding: 26px 24px; box-shadow: 0 16px 40px -26px rgba(34,56,63,.5); transition: transform .4s var(--ease), box-shadow .4s var(--ease); }
.s-reassur .s-reassur-card:hover { transform: translateY(-5px); box-shadow: 0 30px 70px -30px rgba(34,56,63,.6); }
/* carré d'icône 48px — min-width forcé (§7.5 : base atomique min-width:30px déformerait). Bascule au hover. */
.s-reassur .s-reassur-ic { width: 48px; height: 48px; min-width: 48px; border-radius: 14px; background: var(--sable-pale,#F3EFE7); color: var(--petrole,#2C4A52); display: flex; align-items: center; justify-content: center; margin-bottom: 16px; transition: background .35s var(--ease), color .35s; }
/* wrapper e-svg dimensionné (§7.14) + fill:none (les 6 icônes sont en stroke:currentColor → couleur héritée du parent). */
.s-reassur .s-reassur-ic-svg { width: 24px; height: 24px; flex: 0 0 auto; display: flex; }
.s-reassur .s-reassur-ic-svg svg { width: 24px !important; height: 24px !important; fill: none; stroke: currentColor; display: block; }
.s-reassur .s-reassur-card:hover .s-reassur-ic { background: var(--corail-deep,#EA5638); color: #fff; }
/* titre + texte */
.s-reassur .s-reassur-h4 { color: var(--petrole,#2C4A52); font-size: 16.5px; letter-spacing: -.01em; }
.s-reassur .s-reassur-p { font-size: 13px; color: var(--petrole-brume,#5B7B82); margin-top: 7px; line-height: 1.5; }
/* responsive : 3 → 2 col (≤900) → 1 col (≤560) */
@media (max-width: 900px) { .s-reassur .s-reassur-grid { grid-template-columns: repeat(2,1fr); } }
@media (max-width: 560px) { .s-reassur .s-reassur-grid { grid-template-columns: 1fr; } }

/* ===================== home/hebergements-teaser (s-hbt) + composant carte (s-hcard) ===================== */
/* §7.5 préventif : neutralise padding + width:100% parasites ; ré-ajout explicite ensuite (scopé .s-hbt = spécificité 0,2,0). */
.s-hbt .e-con { padding: 0; width: auto; }
.s-hbt .e-div-block-base { min-width: 0; }
.s-hbt p { margin: 0; }

/* section (fond sable-pale = .section.alt) + wrap. `.s-hbt.s-hbt` (classe doublée = 0,2,0) bat les
   règles atomiques .e-con (padding logique + display:var(--display)) ; display:block pour que le wrap
   remplisse la largeur (pattern éprouvé s-exp). */
.s-hbt.s-hbt { display: block; padding: clamp(64px,9vw,120px) 0; background: var(--sable-pale,#F3EFE7); }
.s-hbt .s-hbt-wrap { width: 100%; max-width: var(--maxw,1220px); margin-inline: auto; padding: 0 24px; box-sizing: border-box; }

/* chapeau */
.s-hbt .s-hbt-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 28px; flex-wrap: wrap; margin-bottom: 42px; }
.s-hbt .s-hbt-head .eyebrow { margin: 0 0 16px; }
.s-hbt .s-hbt-h2 { font-size: var(--fs-h2); max-width: 18ch; }
.s-hbt .s-hbt-lead { font-size: var(--fs-lead); color: var(--petrole-brume,#5B7B82); max-width: 54ch; margin-top: 4px; }

/* grille auto-fit 3 → 2 → 1 (par largeur, comme la maquette) */
.s-hbt .s-hbt-grid { display: grid; grid-template-columns: repeat(auto-fit,minmax(280px,1fr)); gap: var(--gap-grid,20px); }

/* CTA (réutilise .btn .btn--outline global ; ré-ajout padding .btn car neutralisé par le reset) */
.s-hbt .s-hbt-cta { display: flex; justify-content: center; margin-top: clamp(16px,2.2vw,26px); }
.s-hbt .btn { padding: 13px 16px 13px 24px; }
.s-hbt .s-hbt-cta-ico { width: 26px; height: 26px; min-width: 26px; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: transparent; }
.s-hbt .s-hbt-cta-ico-svg { width: 16px; height: 16px; flex: 0 0 auto; display: flex; }
.s-hbt .s-hbt-cta-ico-svg svg { width: 16px !important; height: 16px !important; fill: none; stroke: currentColor; display: block; }

/* ---- carte s-hcard (composant réutilisable : teaser + future archive) ---- */
.s-hbt .s-hcard { position: relative; display: block; width: auto; aspect-ratio: 5/6; border-radius: var(--r-card,24px); overflow: hidden; box-shadow: var(--shadow-soft,0 16px 40px -26px rgba(34,56,63,.5)); isolation: isolate; text-decoration: none; color: #fff; transition: transform .45s var(--ease), box-shadow .45s; }
.s-hbt .s-hcard:hover { transform: translateY(-7px); box-shadow: var(--shadow-card,0 30px 70px -30px rgba(34,56,63,.6)); }

/* image plein cadre + zoom au hover (la classe est sur le <img> lui-même : e-image-base s-hcard-img) */
.s-hbt .s-hcard-img { position: absolute; inset: 0; z-index: 0; width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .8s var(--ease); }
.s-hbt .s-hcard:hover .s-hcard-img { transform: scale(1.06); }

/* scrim dégradé */
.s-hbt .s-hcard-scrim { position: absolute; inset: 0; z-index: 1; background: linear-gradient(180deg, rgba(16,27,32,.30) 0%, rgba(16,27,32,0) 30%, rgba(16,27,32,.06) 50%, rgba(14,24,28,.85) 100%); }

/* pastille village (haut) — ⚠️ §7.13/§7.17 : backdrop-filter retombe pendant le hover (transform ancêtre) ; fidèle maquette, fond blanc 92% reste lisible. */
.s-hbt .s-hcard-top { position: absolute; top: 15px; left: 15px; right: 15px; display: flex; justify-content: flex-end; z-index: 2; }
.s-hbt .s-hcard-vpill { width: fit-content; display: inline-flex; align-items: center; gap: 6px; background: rgba(255,255,255,.92); backdrop-filter: blur(8px); -webkit-backdrop-filter: blur(8px); color: var(--petrole,#2C4A52); font-weight: 700; font-size: 12.5px; padding: 7px 13px; border-radius: 999px; }
.s-hbt .s-hcard-st { color: var(--corail,#FB6F52); letter-spacing: 1px; }

/* infos (bas) */
.s-hbt .s-hcard-info { position: absolute; left: 17px; right: 17px; bottom: 17px; width: auto; z-index: 2; color: #fff; padding-right: 56px; }
.s-hbt .s-hcard-h3 { color: #fff; font-size: var(--fs-h3); line-height: 1.08; text-shadow: 0 1px 12px rgba(0,0,0,.5); }
.s-hbt .s-hcard-specs { display: flex; align-items: center; flex-wrap: wrap; gap: 9px; margin-top: 9px; font-size: 13px; font-weight: 600; color: rgba(255,255,255,.96); text-shadow: 0 1px 8px rgba(0,0,0,.5); }
.s-hbt .s-hcard-mi { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.s-hbt .s-hcard-mi-svg { width: 15px; height: 15px; flex: 0 0 auto; display: flex; }
.s-hbt .s-hcard-mi-svg svg { width: 15px !important; height: 15px !important; fill: none; stroke: currentColor; display: block; }
.s-hbt .s-hcard-dot { width: 3px; height: 3px; min-width: 3px; border-radius: 50%; background: rgba(255,255,255,.65); flex: 0 0 auto; }

/* équipements */
.s-hbt .s-hcard-equip { display: flex; flex-wrap: wrap; gap: 9px; margin-top: 13px; }
.s-hbt .s-hcard-chip { width: 34px; height: 34px; min-width: 34px; border-radius: 50%; background: rgba(255,255,255,.17); backdrop-filter: blur(10px); -webkit-backdrop-filter: blur(10px); box-shadow: inset 0 0 0 1px rgba(255,255,255,.40); display: flex; align-items: center; justify-content: center; color: #fff; }
.s-hbt .s-hcard-chip-svg { width: 17px; height: 17px; flex: 0 0 auto; display: flex; }
.s-hbt .s-hcard-chip-svg svg { width: 17px !important; height: 17px !important; fill: none; stroke: currentColor; display: block; }

/* pastille flèche (décorative, coin bas-droit) + bascule au hover */
.s-hbt .s-hcard-circ { position: absolute; right: 17px; bottom: 17px; z-index: 3; width: 46px; height: 46px; min-width: 46px; border-radius: 50%; background: #fff; color: var(--petrole,#2C4A52); display: flex; align-items: center; justify-content: center; transition: background .35s var(--ease), color .35s; }
.s-hbt .s-hcard-circ-svg { width: 18px; height: 18px; flex: 0 0 auto; display: flex; }
.s-hbt .s-hcard-circ-svg svg { width: 18px !important; height: 18px !important; fill: none; stroke: currentColor; display: block; transition: transform .4s var(--ease); }
.s-hbt .s-hcard:hover .s-hcard-circ { background: var(--corail-deep,#EA5638); color: #fff; }
.s-hbt .s-hcard:hover .s-hcard-circ-svg svg { transform: rotate(-45deg); }

/* ===================== home/region-teaser (s-rgt) + composant tuile (s-rtile) ===================== */
/* §7.5 préventif : reset padding + width parasites ; ré-ajout explicite (scopé 0,2,0). */
.s-rgt .e-con { padding: 0; width: auto; }
.s-rgt .e-div-block-base { min-width: 0; }
.s-rgt p { margin: 0; }

/* section (fond crème = .section sans .alt) : padding-bottom réduit. `.s-rgt.s-rgt` (0,2,0) + block. */
.s-rgt.s-rgt { display: block; padding: clamp(64px,9vw,120px) 0 clamp(24px,3.5vw,48px); }
.s-rgt .s-rgt-wrap { width: 100%; max-width: var(--maxw,1220px); margin-inline: auto; padding: 0 24px; box-sizing: border-box; }

/* chapeau */
.s-rgt .s-rgt-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 28px; flex-wrap: wrap; margin-bottom: 42px; }
.s-rgt .s-rgt-head .eyebrow { margin: 0 0 16px; }
.s-rgt .s-rgt-h2 { font-size: var(--fs-h2); max-width: 18ch; }
.s-rgt .s-rgt-lead { font-size: var(--fs-lead); color: var(--petrole-brume,#5B7B82); max-width: 54ch; margin-top: 4px; }

/* grille 4 → 2 (≤900) → 1 (≤560) */
.s-rgt .s-rgt-grid { display: grid; grid-template-columns: repeat(4,1fr); gap: var(--gap-grid,20px); }

/* CTA (réutilise .btn .btn--outline ; lien e-flexbox → arbre correct ; wrapper e-svg dimensionné §7.14) */
.s-rgt .s-rgt-cta { display: flex; justify-content: center; margin-top: clamp(16px,2.2vw,26px); }
.s-rgt .btn { padding: 13px 16px 13px 24px; }
.s-rgt .s-rgt-cta-ico { width: 26px; height: 26px; min-width: 26px; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: transparent; }
.s-rgt .s-rgt-cta-ico-svg { width: 16px; height: 16px; flex: 0 0 auto; display: flex; }
.s-rgt .s-rgt-cta-ico-svg svg { width: 16px !important; height: 16px !important; fill: none; stroke: currentColor; display: block; }

/* ---- tuile s-rtile (composant réutilisable : teaser + future page région) — NON cliquable (fidèle) ---- */
.s-rgt .s-rtile { position: relative; width: auto; aspect-ratio: 3/4; border-radius: var(--r-card,24px); overflow: hidden; box-shadow: var(--shadow-soft,0 16px 40px -26px rgba(34,56,63,.5)); isolation: isolate; transition: transform .45s var(--ease), box-shadow .45s var(--ease); }
.s-rgt .s-rtile:hover { transform: translateY(-5px); box-shadow: var(--shadow-card,0 30px 70px -30px rgba(34,56,63,.6)); }

/* image plein cadre + zoom hover (classe sur le <img> e-image-base) */
.s-rgt .s-rtile-img { position: absolute; inset: 0; z-index: 0; width: 100%; height: 100%; object-fit: cover; display: block; transition: transform .8s var(--ease); }
.s-rgt .s-rtile:hover .s-rtile-img { transform: scale(1.08); }

/* overlay dégradé */
.s-rgt .s-rtile-ov { position: absolute; inset: 0; z-index: 1; background: linear-gradient(180deg, rgba(16,27,32,.26) 0%, rgba(16,27,32,0) 34%, rgba(16,27,32,.05) 54%, rgba(14,24,28,.86) 100%); }

/* contenu (bas) */
.s-rgt .s-rtile-rc { position: absolute; left: 18px; right: 18px; bottom: 18px; width: auto; z-index: 2; color: #fff; padding-right: 42px; }
.s-rgt .s-rtile-h4 { color: #fff; font-size: var(--fs-h4); line-height: 1.1; text-shadow: 0 1px 12px rgba(0,0,0,.5); }
.s-rgt .s-rtile-rd { display: flex; align-items: center; gap: 6px; margin-top: 7px; font-size: 12.5px; font-weight: 600; color: rgba(255,255,255,.92); text-shadow: 0 1px 8px rgba(0,0,0,.5); }
.s-rgt .s-rtile-rd-svg { width: 14px; height: 14px; flex: 0 0 auto; display: flex; }
.s-rgt .s-rtile-rd-svg svg { width: 14px !important; height: 14px !important; fill: none; stroke: currentColor; display: block; }

/* badge hover décoratif — repris VERBATIM de la maquette (styles.css:243-244), data-URI flèche ↗ */
.s-rgt .s-rtile::after { content: ""; position: absolute; right: 15px; bottom: 15px; z-index: 3; width: 40px; height: 40px; border-radius: 50%; background-color: var(--corail-deep,#EA5638); background-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23fff'%20stroke-width='2.4'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M7%2017%2017%207M9%207h8v8'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: center; background-size: 17px; box-shadow: 0 8px 20px -8px rgba(234,86,56,.7); opacity: 0; transform: translateY(8px) scale(.86); transition: opacity .4s var(--ease), transform .45s var(--ease); }
.s-rgt .s-rtile:hover::after { opacity: 1; transform: none; }

@media (max-width: 900px) { .s-rgt .s-rgt-grid { grid-template-columns: repeat(2,1fr); } }
@media (max-width: 560px) { .s-rgt .s-rgt-grid { grid-template-columns: 1fr; } }

/* ===================== reveal (passe 2 anims) — filet reduced-motion ===================== */
/* Équivalent de la maquette (styles.css:427 `.reveal{opacity:1!important;transform:none!important}`) :
   le JS reveal (js/experience.js) return déjà tôt en reduced-motion ; ce filet CSS garantit l'état
   visible sans transform résiduel. Scopé aux CONTENEURS reveal (chapeaux/CTA + grilles) — PAS aux
   cartes/tuiles, dont le transform:hover (lift) doit rester actif (fidèle maquette). */
@media (prefers-reduced-motion: reduce) {
  .s-hbt-head, .s-hbt-cta, .s-rgt-head, .s-rgt-cta,
  .s-reassur-grid, .s-hbt-grid, .s-rgt-grid,
  .s-grt-banner, .s-tst-head, .s-tst-grid, .s-resid-banner,
  .s-faq-head, .s-faq-list {
    opacity: 1 !important; transform: none !important;
  }
}

/* ===================== home/groupes-teaser (s-grt) — bannière promo unique ===================== */
/* §7.5 préventif : reset padding + width parasites ; ré-ajout explicite (scopé 0,2,0). */
.s-grt .e-con { padding: 0; width: auto; }
.s-grt .e-div-block-base { min-width: 0; }
.s-grt p { margin: 0; }

/* section (.section.alt neutralisé transparent) : padding-top réduit, bottom = base. `.s-grt.s-grt` (0,2,0) + block. */
.s-grt.s-grt { display: block; padding: clamp(8px,1.5vw,20px) 0 clamp(64px,9vw,120px); background: transparent; }
.s-grt .s-grt-wrap { width: 100%; max-width: var(--maxw,1220px); margin-inline: auto; padding: 0 24px; box-sizing: border-box; }

/* bannière : image de fond + overlay + contenu (aucun hover — statique, fidèle maquette) */
.s-grt .s-grt-banner { position: relative; display: flex; min-height: 340px; width: 100%; border-radius: var(--r-card,24px); overflow: hidden; isolation: isolate; }
.s-grt .s-grt-img { position: absolute; inset: 0; z-index: 0; width: 100%; height: 100%; object-fit: cover; display: block; }
.s-grt .s-grt-ov { position: absolute; inset: 0; z-index: 1; background: linear-gradient(100deg, rgba(34,56,63,.94) 0%, rgba(34,56,63,.78) 42%, rgba(34,56,63,.35) 100%); }
.s-grt .s-grt-in { position: relative; z-index: 2; width: auto; max-width: 60ch; padding: clamp(38px,6vw,72px); color: #fff; }

/* eyebrow local (corail-pale) + titre + texte */
.s-grt .eyebrow { color: var(--corail-pale,#FFC6AC); margin: 0; }
.s-grt .s-grt-h2 { color: #fff; font-size: var(--fs-h2); margin: 16px 0 14px; }
.s-grt .s-grt-p { color: rgba(255,255,255,.9); font-size: 16px; margin-bottom: 26px; max-width: 46ch; }

/* CTA btn--primary (lien e-flexbox) — pastille flèche dimensionnée (§7.14) ; hover via .btn--primary thème */
.s-grt .btn { padding: 13px 16px 13px 24px; }
.s-grt .s-grt-cta-ico { width: 26px; height: 26px; min-width: 26px; border-radius: 50%; display: flex; align-items: center; justify-content: center; }
.s-grt .s-grt-cta-ico-svg { width: 16px; height: 16px; flex: 0 0 auto; display: flex; }
.s-grt .s-grt-cta-ico-svg svg { width: 16px !important; height: 16px !important; fill: none; stroke: currentColor; display: block; }

/* ===================== home/testimonials (s-tst) + composant carte avis (s-tcard) ===================== */
/* §7.5 préventif : reset padding + width parasites ; ré-ajout explicite (scopé 0,2,0). */
.s-tst .e-con { padding: 0; width: auto; }
.s-tst .e-div-block-base { min-width: 0; }
.s-tst p { margin: 0; }

/* section (.section.alt = sable-pale). `.s-tst.s-tst` (0,2,0) + block. */
.s-tst.s-tst { display: block; padding: clamp(64px,9vw,120px) 0; background: var(--sable-pale,#F3EFE7); }
.s-tst .s-tst-wrap { width: 100%; max-width: var(--maxw,1220px); margin-inline: auto; padding: 0 24px; box-sizing: border-box; }

/* chapeau : titre à gauche + note agrégée à droite (wrap en étroit) */
.s-tst .s-tst-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 28px; flex-wrap: wrap; margin-bottom: 42px; }
.s-tst .s-tst-head .eyebrow { margin: 0 0 16px; }
.s-tst .s-tst-h2 { font-size: var(--fs-h2); max-width: 18ch; }

/* note agrégée */
.s-tst .s-tst-agg { display: flex; align-items: center; gap: 18px; }
.s-tst .s-tst-agg-score { display: flex; align-items: baseline; font-family: var(--font-display,'Bricolage Grotesque',sans-serif); font-weight: 700; font-size: clamp(46px,5.4vw,62px); color: var(--petrole,#2C4A52); line-height: .85; }
.s-tst .s-tst-agg-unit { font-size: .38em; color: var(--petrole-brume,#5B7B82); font-weight: 600; }
.s-tst .s-tst-agg-stars { color: var(--corail,#FB6F52); letter-spacing: 2px; font-size: 16px; }
.s-tst .s-tst-agg-sub { display: flex; flex-wrap: wrap; gap: 5px; margin-top: 4px; font-size: 13.5px; color: var(--petrole-brume,#5B7B82); }
.s-tst .s-tst-agg-sub-b { color: var(--petrole,#2C4A52); font-weight: 700; }
.s-tst .s-tst-agg-badge { display: inline-flex; align-items: center; gap: 5px; width: fit-content; margin-top: 8px; padding: 4px 10px 4px 8px; border-radius: 999px; font-size: 11px; font-weight: 700; color: var(--olivier-deep,#5D7A59); background: rgba(157,184,154,.16); }
.s-tst .s-tst-agg-badge-svg { width: 13px; height: 13px; flex: 0 0 auto; display: flex; }
.s-tst .s-tst-agg-badge-svg svg { width: 13px !important; height: 13px !important; fill: none; stroke: currentColor; display: block; }

/* grille auto-fit 3 → 2 → 1 */
.s-tst .s-tst-grid { display: grid; grid-template-columns: repeat(auto-fit,minmax(290px,1fr)); gap: var(--gap-grid,20px); }

/* ---- carte avis s-tcard (composant réutilisable — futur répéteur ACF) — NON cliquable ---- */
.s-tst .s-tcard { position: relative; overflow: hidden; background: #fff; border-radius: var(--r-card,24px); padding: 28px 28px 26px; box-shadow: var(--shadow-soft,0 16px 40px -26px rgba(34,56,63,.5)); display: flex; flex-direction: column; gap: 15px; transition: transform .4s var(--ease), box-shadow .4s var(--ease); }
.s-tst .s-tcard:hover { transform: translateY(-5px); box-shadow: var(--shadow-card,0 30px 70px -30px rgba(34,56,63,.6)); }
.s-tst .s-tcard-qmark { position: absolute; top: 6px; right: 20px; z-index: 0; font-family: var(--font-display,'Bricolage Grotesque',sans-serif); font-weight: 700; font-size: 104px; line-height: 1; color: var(--sable,#E7D5C0); opacity: .55; pointer-events: none; }
.s-tst .s-tcard-qtop, .s-tst .s-tcard-quote, .s-tst .s-tcard-who { position: relative; z-index: 1; }
.s-tst .s-tcard-qtop { display: flex; align-items: center; gap: 11px; }
.s-tst .s-tcard-stars { color: var(--corail,#FB6F52); letter-spacing: 2px; font-size: 15px; }
.s-tst .s-tcard-quote { font-size: 17px; color: var(--encre,#22383F); line-height: 1.62; flex: 1; }
.s-tst .s-tcard-who { display: flex; align-items: center; gap: 13px; }
.s-tst .s-tcard-av { width: 46px; height: 46px; min-width: 46px; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-family: var(--font-display,'Bricolage Grotesque',sans-serif); font-size: 17px; }
.s-tst .s-tcard-av--corail { background: var(--corail-deep,#EA5638); }
.s-tst .s-tcard-av--lagune { background: var(--lagune,#2E9BB8); }
.s-tst .s-tcard-av--olivier { background: var(--olivier-deep,#5D7A59); }
.s-tst .s-tcard-nm { font-weight: 700; color: var(--petrole,#2C4A52); font-size: 14.5px; }
.s-tst .s-tcard-ct { font-size: 12.5px; color: var(--petrole-brume,#5B7B82); }

/* ===================== home/residentiel-teaser (s-resid) — bannière split 2 col + parallaxe ===================== */
/* §7.5 préventif : reset padding + width parasites ; ré-ajout explicite (scopé 0,2,0). */
.s-resid .e-con { padding: 0; width: auto; }
.s-resid .e-div-block-base { min-width: 0; }
.s-resid p { margin: 0; }

/* section (.section sans .alt → crème body). `.s-resid.s-resid` (0,2,0) + block. */
.s-resid.s-resid { display: block; padding: clamp(64px,9vw,120px) 0; }
.s-resid .s-resid-wrap { width: 100%; max-width: var(--maxw,1220px); margin-inline: auto; padding: 0 24px; box-sizing: border-box; }

/* bannière split (grille 2 col image/texte) — carte sable-pale, aucun hover (statique) */
.s-resid .s-resid-banner { display: grid; grid-template-columns: 1.08fr 1fr; width: 100%; background: var(--sable-pale,#F3EFE7); border-radius: var(--r-card,24px); overflow: hidden; box-shadow: var(--shadow-soft,0 16px 40px -26px rgba(34,56,63,.5)); }

/* photo (colonne gauche) — image parallaxée (classe sur le <img> e-image-base) */
.s-resid .s-resid-ph { position: relative; min-height: 340px; }
.s-resid .s-resid-img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; display: block; }

/* texte (colonne droite) */
.s-resid .s-resid-txt { padding: clamp(32px,4vw,56px) clamp(40px,5vw,72px); align-self: center; }
.s-resid .s-resid-txt .eyebrow { margin: 0; }
.s-resid .s-resid-h2 { font-size: var(--fs-h2); max-width: 16ch; margin-top: 14px; }
.s-resid .s-resid-p { margin-top: 14px; color: var(--petrole-brume,#5B7B82); font-size: 16px; max-width: 44ch; }

/* CTA btn--primary (lien e-flexbox) — pastille flèche §7.14 ; hover via .btn--primary thème */
.s-resid .btn { margin-top: 24px; padding: 13px 16px 13px 24px; }
.s-resid .s-resid-cta-ico { width: 26px; height: 26px; min-width: 26px; border-radius: 50%; display: flex; align-items: center; justify-content: center; }
.s-resid .s-resid-cta-ico-svg { width: 16px; height: 16px; flex: 0 0 auto; display: flex; }
.s-resid .s-resid-cta-ico-svg svg { width: 16px !important; height: 16px !important; fill: none; stroke: currentColor; display: block; }

/* responsive ≤900 : empilement (image au-dessus, texte dessous), photo min-height 240 */
@media (max-width: 900px) {
  .s-resid .s-resid-banner { grid-template-columns: 1fr; }
  .s-resid .s-resid-ph { min-height: 240px; }
}

/* ===================== shared/faq-accordion (s-faq) — instance accueil ===================== */
/* §7.5 préventif : reset padding + width parasites ; ré-ajout explicite (scopé 0,2,0). */
.s-faq .e-con { padding: 0; width: auto; }
.s-faq .e-div-block-base { min-width: 0; }
.s-faq p { margin: 0; }

/* section (.section.alt = sable-pale). `.s-faq.s-faq` (0,2,0) + block. */
.s-faq.s-faq { display: block; padding: clamp(64px,9vw,120px) 0; background: var(--sable-pale,#F3EFE7); }
.s-faq .s-faq-wrap { width: 100%; max-width: var(--maxw,1220px); margin-inline: auto; padding: 0 24px; box-sizing: border-box; }

/* chapeau centré */
.s-faq .s-faq-head { display: flex; justify-content: center; text-align: center; margin-bottom: 42px; }
.s-faq .s-faq-head-txt { margin: 0 auto; }
.s-faq .s-faq-head .eyebrow { justify-content: center; margin: 0 0 16px; }
.s-faq .s-faq-h2 { font-size: var(--fs-h2); }

/* liste (centrée, max 840) */
.s-faq .s-faq-list { width: auto; max-width: 840px; margin: 0 auto; }
.s-faq .s-faq-item { background: #fff; border-radius: 16px; margin-bottom: 14px; overflow: hidden; box-shadow: var(--shadow-soft,0 16px 40px -26px rgba(34,56,63,.5)); }

/* question (bouton) */
.s-faq .s-faq-q { width: 100%; text-align: left; background: none; border: 0; cursor: pointer; color: var(--petrole,#2C4A52); display: flex; justify-content: space-between; align-items: center; gap: 18px; padding: 23px 26px; white-space: normal; line-height: normal; transition: padding-left .25s var(--ease), color .25s var(--ease); }
.s-faq .s-faq-q-t { font-family: var(--font-display,'Bricolage Grotesque',sans-serif); font-weight: 700; font-size: 18px; color: var(--petrole,#2C4A52); text-align: left; }
.s-faq .s-faq-q:hover { padding-left: 22px; }

/* icône +/− (CSS pur) */
.s-faq .s-faq-pm { flex: none; width: 30px; height: 30px; min-width: 30px; border-radius: 50%; background: var(--sable-pale,#F3EFE7); position: relative; transition: background .3s var(--ease); }
.s-faq .s-faq-pm::before, .s-faq .s-faq-pm::after { content: ""; position: absolute; left: 50%; top: 50%; background: var(--petrole,#2C4A52); border-radius: 2px; transition: opacity .3s var(--ease), background .3s var(--ease); }
.s-faq .s-faq-pm::before { width: 13px; height: 2.4px; transform: translate(-50%,-50%); }
.s-faq .s-faq-pm::after { width: 2.4px; height: 13px; transform: translate(-50%,-50%); }
@media (hover: hover) {
  .s-faq .s-faq-q:hover .s-faq-pm { background: var(--corail-deep,#EA5638); }
  .s-faq .s-faq-q:hover .s-faq-pm::before, .s-faq .s-faq-q:hover .s-faq-pm::after { background: #fff; }
}
.s-faq .s-faq-item.open .s-faq-pm { background: var(--corail-deep,#EA5638); }
.s-faq .s-faq-item.open .s-faq-pm::before { background: #fff; }
.s-faq .s-faq-item.open .s-faq-pm::after { opacity: 0; }

/* réponse — accordéon §7.18 (grid-rows 0fr→1fr ; inner overflow:hidden + padding vertical conditionnel) */
.s-faq .s-faq-a { display: grid; grid-template-rows: 0fr; transition: grid-template-rows .38s var(--ease); }
.s-faq .s-faq-item.open .s-faq-a { grid-template-rows: 1fr; }
.s-faq .s-faq-a-p { overflow: hidden; min-height: 0; padding: 0 26px; color: var(--petrole-brume,#5B7B82); font-size: 15px; line-height: 1.65; max-width: 64ch; }
.s-faq .s-faq-item.open .s-faq-a-p { padding-bottom: 22px; }
.s-faq .s-faq-a-p a { color: var(--corail-deep,#EA5638); font-weight: 700; }

/* ============================================================
   region/listing — Page /la-region/ (listing POI dynamique)
   Port verbatim maquette styles.css. Classes maquette natives réutilisables
   sur les pages intérieures (région, activités, single article). Réf. region.html.
   ============================================================ */

/* Base titres maquette (global `h1,h2,h3,h4` — styles.css) SCOPÉE `.dpage` (n'affecte pas accueil
   atomic ni chrome Theme Builder). Placée AVANT les règles composant : `.rtile h4`/`.hb-cta h3`/… (0,1,1,
   plus bas dans le fichier) regagnent le tie de spécificité → gardent leur couleur (#fff). Fournit
   couleur/police par défaut aux titres non stylés explicitement (ex. `.sec-head h2`). */
.dpage h1, .dpage h2, .dpage h3, .dpage h4 { margin: 0; font-family: var(--display); letter-spacing: -.025em; line-height: 1.04; color: var(--petrole); font-weight: 700; text-wrap: balance; }

/* fil d'ariane */
.bcrumb { font-size: 13px; color: var(--petrole-brume); padding: 6px 0 22px; }
.bcrumb a { color: var(--petrole-brume); }
.bcrumb a:hover { color: var(--corail-deep); }
.bcrumb b { color: var(--petrole); font-weight: 600; }

/* hero listing */
.lac-head { max-width: 760px; margin-bottom: clamp(22px,2.8vw,32px); }
.lac-head .eyebrow { margin-bottom: 14px; }
.lac-head h1 { font-size: var(--fs-h1); color: var(--petrole); line-height: 1.04; letter-spacing: -.03em; }
.lac-head .lead { margin-top: 14px; font-size: var(--fs-lead); color: var(--petrole-brume); line-height: 1.6; max-width: 54ch; }

/* barre onglets + compteur */
.lac-bar { display: flex; align-items: center; justify-content: space-between; gap: 18px; flex-wrap: wrap; margin-bottom: clamp(20px,2.4vw,30px); }
.lac-bar .acts-tabs { margin-bottom: 0; justify-content: flex-start; }
.lac-count { font-size: 14px; font-weight: 600; color: var(--petrole-brume); white-space: nowrap; }
.lac-count b { font-family: var(--display); color: var(--petrole); font-size: 16.5px; }

/* onglets (pills) */
.acts-tabs { display: flex; gap: 11px; flex-wrap: wrap; justify-content: center; margin-bottom: 32px; }
.acts-tab { background: var(--sable-pale); color: var(--petrole); border: 0; cursor: pointer; font-family: var(--body); font-weight: 700; font-size: 12.5px; letter-spacing: .06em; text-transform: uppercase; padding: 12px 22px; border-radius: 999px; transition: .25s var(--ease); will-change: transform; }
.acts-tab:hover { background: var(--sable-hover); color: var(--petrole); }
.acts-tab.active { background: var(--sable); color: var(--petrole); box-shadow: var(--shadow-soft); }
.acts-tab:active { transform: scale(.96); }
@media (max-width: 600px) { .acts-tabs { flex-wrap: nowrap; justify-content: flex-start; overflow-x: auto; scrollbar-width: none; margin-left: -24px; margin-right: -24px; padding: 0 24px 4px; } .acts-tabs::-webkit-scrollbar { display: none; } .acts-tab { flex: 0 0 auto; } }

/* grille + état vide */
.lac-grid { display: grid; grid-template-columns: repeat(4,1fr); gap: var(--gap-grid); }
.lac-empty { display: none; padding: 48px 20px; text-align: center; color: var(--petrole-brume); font-size: 16px; }
@media (max-width: 1080px) { .lac-grid { grid-template-columns: repeat(3,1fr); } }
@media (max-width: 720px) { .lac-grid { grid-template-columns: repeat(2,1fr); gap: 14px; } }

/* carte rtile (base + couche micro-interactions) */
.rtile { position: relative; border-radius: var(--r-card); overflow: hidden; aspect-ratio: 3/4; box-shadow: var(--shadow-soft); isolation: isolate; transition: transform .45s var(--ease), box-shadow .45s var(--ease); }
.rtile:hover { transform: translateY(-5px); box-shadow: var(--shadow-card); }
.rtile > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .8s var(--ease); }
.rtile:hover > img { transform: scale(1.08); }
.rtile .tov { position: absolute; inset: 0; background: linear-gradient(180deg,rgba(16,27,32,.26) 0%,rgba(16,27,32,0) 34%,rgba(16,27,32,.05) 54%,rgba(14,24,28,.86) 100%); }
.rtile .rc { position: absolute; left: 18px; right: 18px; bottom: 18px; z-index: 2; color: #fff; padding-right: 42px; }
.rtile h4 { color: #fff; font-size: var(--fs-h4); line-height: 1.1; text-shadow: 0 1px 12px rgba(0,0,0,.5); }
.rtile .rd { font-size: 12.5px; font-weight: 600; color: rgba(255,255,255,.92); margin-top: 7px; display: flex; align-items: center; gap: 6px; text-shadow: 0 1px 8px rgba(0,0,0,.5); }
.rtile .rd svg { width: 14px; height: 14px; }
.rtile::after { content: ""; position: absolute; right: 15px; bottom: 15px; z-index: 3; width: 40px; height: 40px; border-radius: 50%; background-color: var(--corail-deep); background-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23fff'%20stroke-width='2.4'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M7%2017%2017%207M9%207h8v8'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: center; background-size: 17px; box-shadow: 0 8px 20px -8px rgba(234,86,56,.7); opacity: 0; transform: translateY(8px) scale(.86); transition: opacity .4s var(--ease), transform .45s var(--ease); }
.rtile:hover::after { opacity: 1; transform: none; }

/* article GEO/SEO */
.art-body { max-width: 720px; margin: clamp(34px,4vw,52px) auto 0; }
.art-body > * + * { margin-top: 22px; }
.art-body p { color: var(--petrole-brume); font-size: 16.5px; line-height: 1.78; }
.art-body .lead { font-size: clamp(18px,2vw,21px); color: var(--petrole); font-weight: 500; line-height: 1.6; max-width: 54ch; }
.art-body h2 { font-size: var(--fs-h3); color: var(--petrole); line-height: 1.12; margin-top: clamp(34px,4vw,48px); }
.art-body h3 { font-size: var(--fs-h4); color: var(--petrole); margin-top: 30px; }
.art-body a.ln { color: var(--corail-deep); font-weight: 600; text-decoration: underline; text-underline-offset: 3px; text-decoration-thickness: 1.5px; }
.art-body a.ln:hover { color: var(--corail); }

/* en-tête de section (FAQ centrée) */
.sec-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 28px; flex-wrap: wrap; margin-bottom: 42px; }
.sec-head h2 { font-size: var(--fs-h2); max-width: 18ch; }
.sec-head .eyebrow { margin-bottom: 16px; }

/* FAQ maquette native (.faq / .faq-item / .faq-q / .pm / .faq-a) — composant pages intérieures */
.faq { max-width: 840px; margin: 0 auto; width: 100%; } /* width:100% : `.wrap.wrap` est flex-column → marges auto rétréciraient l'item à son contenu */
.faq-item { background: #fff; border-radius: 16px; margin-bottom: 14px; overflow: hidden; box-shadow: var(--shadow-soft); }
.faq-q { width: 100%; text-align: left; background: none; border: 0; cursor: pointer; display: flex; justify-content: space-between; align-items: center; gap: 18px; padding: 23px 26px; font-family: var(--display); font-weight: 700; font-size: 18px; color: var(--petrole); white-space: normal; line-height: normal; transition: padding-left .25s var(--ease), color .25s var(--ease); }
.faq-q .pm { flex: none; width: 30px; height: 30px; border-radius: 50%; background: var(--sable-pale); position: relative; transition: background .3s var(--ease); }
.faq-q .pm::before, .faq-q .pm::after { content: ""; position: absolute; left: 50%; top: 50%; background: var(--petrole); border-radius: 2px; transition: opacity .3s var(--ease), background .3s var(--ease); }
.faq-q .pm::before { width: 13px; height: 2.4px; transform: translate(-50%,-50%); }
.faq-q .pm::after { width: 2.4px; height: 13px; transform: translate(-50%,-50%); }
.faq-item.open .pm { background: var(--corail-deep); }
.faq-item.open .pm::before { background: #fff; }
.faq-item.open .pm::after { opacity: 0; }
/* `background:none` neutralise le défaut `button:hover/:focus{background:#c36}` (reset Hello/WP)
   qui teintait l'item FAQ (`.faq-q` est un <button>). */
.faq-q:hover { padding-left: 22px; color: var(--petrole); background: none; }
.faq-q:focus { background: none; color: var(--petrole); }
/* coloriage hover de l'icône guardé aux pointeurs réels : sur tactile le `:hover` "colle" après
   un tap → l'icône resterait orange après fermeture. En `@media (hover:hover)` elle ne reflète
   plus que l'état ouvert/fermé sur mobile (desktop = feedback maquette conservé). */
@media (hover: hover) {
  .faq-q:hover .pm { background: var(--corail-deep); }
  .faq-q:hover .pm::before, .faq-q:hover .pm::after { background: #fff; }
}
.faq-a { display: grid; grid-template-rows: 0fr; transition: grid-template-rows .38s var(--ease); }
.faq-item.open .faq-a { grid-template-rows: 1fr; }
.faq-item.open .faq-a p { padding-bottom: 22px; }
.faq-a p { overflow: hidden; min-height: 0; margin: 0; padding: 0 26px; color: var(--petrole-brume); font-size: 15px; line-height: 1.65; max-width: 64ch; }

/* layout pages intérieures — classes doublées pour battre le padding/width var de `.e-con` (atomic) */
.dpage.dpage { padding: clamp(86px,9vw,104px) 0 0; display: flex; flex-direction: column; }
.wrap.wrap { width: 100%; max-width: var(--maxw,1220px); margin-inline: auto; padding: 0 24px; box-sizing: border-box; display: flex; flex-direction: column; }
.section.section { padding: clamp(64px,9vw,120px) 0; display: flex; flex-direction: column; }
.section.section.alt { background: var(--sable-pale); }

/* bandeau CTA */
.hb-cta { margin-top: clamp(44px,5vw,68px); margin-bottom: clamp(54px,7vw,88px); background: var(--petrole); border-radius: var(--r-card); overflow: hidden; padding: clamp(30px,4vw,50px); display: flex; align-items: center; justify-content: space-between; gap: 26px; flex-wrap: wrap; color: #fff; isolation: isolate; }
.hb-cta .eyebrow { color: var(--corail-pale); }
.hb-cta .eyebrow::before { background: var(--corail); }
.hb-cta h3 { color: #fff; font-size: var(--fs-h3); margin-top: 12px; line-height: 1.05; }
.hb-cta p { color: rgba(255,255,255,.82); margin-top: 10px; font-size: 15.5px; max-width: 50ch; line-height: 1.6; }

/* ============================================================
   region/single (single POI mp_point_interet) — port maquette
   region-detail.html / oasis-activite.html. Base .art-body/.art-list
   déjà portées (region/listing). Réutilisable par le single activité.
   ============================================================ */
.art-head { max-width: 780px; }
.art-head .eyebrow { margin-bottom: 14px; }
.art-head h1 { font-size: var(--fs-h1); color: var(--petrole); line-height: 1.05; letter-spacing: -.03em; }
.art-sub { margin-top: 14px; font-size: var(--fs-lead); color: var(--petrole-brume); line-height: 1.6; }
.facts { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 28px; padding-bottom: 30px; border-bottom: 1px solid rgba(34,56,63,.1); }
.fact { display: flex; align-items: center; gap: 12px; }
.fact .ic { width: 46px; height: 46px; border-radius: 13px; background: var(--sable-pale); color: var(--petrole); display: flex; align-items: center; justify-content: center; flex: none; }
.fact .ic svg { width: 22px; height: 22px; }
.fact .k { font-size: 12px; color: var(--petrole-brume); font-weight: 600; }
.fact .v { font-size: 15.5px; color: var(--petrole); font-weight: 700; font-family: var(--display); }
.art-cover { margin-top: clamp(22px,3vw,32px); border-radius: var(--r-card); overflow: hidden; aspect-ratio: 16/8; box-shadow: var(--shadow-soft); }
.art-cover img { width: 100%; height: 100%; object-fit: cover; }
.art-fig { margin: clamp(28px,3.5vw,40px) 0; }
.art-fig img { width: 100%; border-radius: var(--r-card); box-shadow: var(--shadow-soft); display: block; }
.art-fig figcaption { margin-top: 12px; font-size: 13.5px; color: var(--petrole-brume); text-align: center; font-style: italic; }
.art-duo { margin: clamp(28px,3.5vw,40px) 0; display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.art-duo img { width: 100%; aspect-ratio: 4/3; object-fit: cover; border-radius: 18px; box-shadow: var(--shadow-soft); }
.art-quote { margin: clamp(30px,4vw,46px) 0; padding-left: 26px; border-left: 4px solid var(--corail); }
.art-quote p { font-family: var(--display); font-size: clamp(20px,2.4vw,27px); color: var(--petrole); line-height: 1.3; font-weight: 600; }
.art-quote cite { display: block; margin-top: 14px; font-style: normal; font-family: var(--body); font-size: 14px; line-height: 1.6; font-weight: 600; color: var(--petrole-brume); }
/* RÈGLE GÉNÉRALE — reset du padding/marge UA des listes dans le contenu de page intérieure (`.dpage`).
   La maquette l'annule globalement via `*{margin:0;padding:0}` (styles.css:35) ; on le fait scopé à
   `.dpage` (jamais header/footer TB, hors `<main>`) pour éviter le récurrent `padding-inline-start:40px`
   sur les listes custom (`.cgrp ul`, `.art-list`, `.art-steps`, futures). Les puces/indentations voulues
   sont re-posées par les composants (`::before`, `padding-left`). */
.dpage ul, .dpage ol { margin: 0; padding: 0; }

/* Liste à puces CORAIL — composant partagé `.art-list` (À voir, infobox, etc. ; se répète sur tout
   le site). Reset du défaut UA (`padding-inline-start:40px` + puces `disc`) que la maquette annule,
   puce corail via `::before`. Maquette styles.css:899-901. */
.art-list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 11px; }
.art-list li { position: relative; padding-left: 30px; color: var(--petrole-brume); font-size: 16px; line-height: 1.6; }
.art-list li::before { content: ""; position: absolute; left: 3px; top: 8px; width: 9px; height: 9px; border-radius: 50%; background: var(--corail); }
.art-steps { list-style: none; counter-reset: s; margin: 0; padding: 0; display: flex; flex-direction: column; gap: 18px; }
.art-steps li { position: relative; padding-left: 54px; color: var(--petrole-brume); font-size: 16px; line-height: 1.6; min-height: 36px; }
.art-steps li::before { counter-increment: s; content: counter(s); position: absolute; left: 0; top: -3px; width: 36px; height: 36px; border-radius: 50%; background: var(--sable-pale); color: var(--petrole); font-family: var(--display); font-weight: 700; font-size: 16px; display: flex; align-items: center; justify-content: center; }
.art-steps li b { color: var(--petrole); font-weight: 700; }
/* le reset margin:0 (ci-dessus) neutralise le `.art-body > *+*{margin-top:22px}` pour les listes/étapes
   enfant DIRECT de l'article → on le restaure (l'infobox, elle, contient sa liste et reste à 0). */
.art-body > .art-list, .art-body > .art-steps { margin-top: 22px; }
/* margin-top laissé à `.art-body > * + *` (22px) — l'infobox est un enfant direct de l'article,
   comme la maquette (le `.infobox{margin-top:14px}` maquette ne s'applique qu'hors flux art-body). */
.infobox { background: var(--sable-pale); border-radius: 20px; padding: clamp(22px,3vw,32px); }
.infobox h3 { margin-bottom: 18px; }
.art-cta { margin-top: clamp(34px,4vw,46px); background: var(--petrole); border-radius: var(--r-card); padding: clamp(26px,3.4vw,40px); color: #fff; display: flex; align-items: center; justify-content: space-between; gap: 22px; flex-wrap: wrap; }
.art-cta h3 { color: #fff; font-size: var(--fs-h3); line-height: 1.1; }
.art-cta p { color: rgba(255,255,255,.82); margin-top: 8px; font-size: 15px; }
/* ---------- boutons markup MAQUETTE (.btn + <span class="ico">) ----------
   Le thème porte la variante ATOMIC (.btn--primary, .e-svg-base) via styles inline ; les boutons
   au markup MAQUETTE (span.ico — CTA .hb-cta / .art-cta / futurs blocs) ont besoin de la géométrie
   de base + des variantes maquette. Base scopée `:has(.ico)` → n'affecte PAS les boutons atomic
   (qui n'ont pas de `.ico`). Variantes single-dash (btn-primary/ghost/outline/sm) = maquette-only. */
.btn:has(.ico) { font-family: var(--body); font-weight: 700; font-size: 15px; border: 0; cursor: pointer; border-radius: 999px; padding: 13px 16px 13px 24px; display: inline-flex; align-items: center; gap: 11px; white-space: nowrap; }
.btn .ico { width: 26px; height: 26px; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: transparent; transition: background .35s var(--ease); }
.btn .ico svg { width: 16px; height: 16px; stroke: currentColor; transition: transform .4s var(--ease); }
.btn:hover .ico svg { transform: rotate(-45deg); }
/* Variantes doublées `.btn.btn-X` (0,2,0) : battent le reset `.elementor a { box-shadow:none }`
   (0,1,1) qui neutralise l'ombre des boutons markup maquette SUR LES PAGES ELEMENTOR (le single
   PHP, hors `.elementor`, n'était pas affecté). Cf. QA CTA région. */
.btn.btn-primary { background: var(--corail-deep); color: #fff; box-shadow: 0 14px 30px -12px rgba(234,86,56,.7); }
.btn.btn-primary .ico { color: #fff; }
.btn.btn-primary:hover { transform: translateY(-2px); color: #fff; box-shadow: 0 22px 42px -12px rgba(234,86,56,.85); }
.btn.btn-primary:hover .ico { background: #fff; color: var(--corail-deep); }
.btn.btn-outline { background: transparent; color: var(--petrole); box-shadow: inset 0 0 0 1.5px rgba(44,74,82,.5); }
.btn.btn-outline .ico { color: var(--petrole); }
.btn.btn-outline:hover { background: var(--petrole); color: #fff; }
.btn.btn-outline:hover .ico { background: rgba(255,255,255,.22); color: #fff; }
.btn.btn-ghost { background: rgba(255,255,255,.16); color: #fff; box-shadow: inset 0 0 0 1.5px rgba(255,255,255,.65); backdrop-filter: blur(8px); }
.btn.btn-ghost .ico { color: #fff; }
.btn.btn-ghost:hover { transform: translateY(-2px); color: #fff; }
.btn.btn-ghost:hover .ico { background: rgba(255,255,255,.3); }
/* `.btn.btn-sm` (0,2,0) : bat la géométrie de base `.btn:has(.ico)` (0,2,0) par ordre source —
   `.btn-sm` seul (0,1,0) perdait le padding (constaté au bloc contact-page : 13/24 au lieu de 11/20). */
.btn.btn-sm { padding: 11px 14px 11px 20px; font-size: var(--fs-label); gap: 9px; }
.btn-sm .ico { width: 22px; height: 22px; } .btn-sm .ico svg { width: 14px; height: 14px; } /* complément maquette l.64 (port initial partiel, constaté au bloc contact-page) */
/* width:100% : `.wrap` est un flex column → avec `margin-inline:auto` un item flex rétrécit à son
   contenu (art-nav à 1 lien tombait à ~391px). width:100% le remet à 720 (max-width), centré. */
.art-nav { width: 100%; max-width: 720px; margin: clamp(40px,5vw,58px) auto clamp(50px,7vw,84px); display: grid; grid-template-columns: 1fr 1fr; gap: 16px; border-top: 1px solid rgba(34,56,63,.12); padding-top: 28px; }
/* colonnes explicites : préc. à gauche, suiv. à droite — même quand un seul existe (auto-placement
   les mettrait en col 1). Reproduit la position maquette (suivant à droite). */
.art-navlink.pv { grid-column: 1; }
.art-navlink.nx { grid-column: 2; }
.art-navlink { display: flex; flex-direction: column; gap: 6px; padding: 18px 22px; border-radius: 16px; background: var(--sable-pale); transition: background .25s var(--ease), transform .25s var(--ease); }
.art-navlink:hover { background: var(--sable-hover); transform: translateY(-3px); }
.art-navlink .d { font-size: var(--fs-micro); font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--petrole-brume); display: flex; align-items: center; gap: 7px; }
.art-navlink .t { font-family: var(--display); font-weight: 700; font-size: 17px; color: var(--petrole); line-height: 1.1; }
.art-navlink .d svg { width: 15px; height: 15px; }
.art-navlink.nx { text-align: right; }
.art-navlink.nx .d { flex-direction: row-reverse; }
.disc { display: grid; grid-template-columns: repeat(3,1fr); gap: var(--gap-grid); }
.disc-card { background: #fff; border-radius: var(--r-card); overflow: hidden; box-shadow: var(--shadow-soft); display: flex; flex-direction: column; transition: transform .4s var(--ease), box-shadow .4s var(--ease); }
.disc-card:hover { transform: translateY(-6px); box-shadow: var(--shadow-card); }
.disc-ph { aspect-ratio: 16/11; overflow: hidden; }
.disc-ph img { width: 100%; height: 100%; object-fit: cover; transition: transform .7s var(--ease); }
.disc-card:hover .disc-ph img { transform: scale(1.05); }
.disc-b { padding: 24px 24px 26px; display: flex; flex-direction: column; flex: 1; }
.disc-b h3 { font-size: var(--fs-h3); color: var(--petrole); }
.disc-b p { color: var(--petrole-brume); font-size: 14.5px; line-height: 1.6; margin-top: 10px; flex: 1; }
.disc-b .lk { margin-top: 18px; display: inline-flex; align-items: center; gap: 9px; font-weight: 700; font-size: var(--fs-label); color: var(--corail-deep); }
.disc-b .lk svg { width: 24px; height: 24px; border-radius: 50%; background: var(--sable-pale); padding: 5px; transition: background .3s var(--ease), color .3s var(--ease); }
.disc-card:hover .lk svg { background: var(--corail-deep); color: #fff; }
@media (max-width: 860px) { .disc { grid-template-columns: 1fr; gap: 16px; } }
@media (max-width: 600px) { .art-nav { grid-template-columns: 1fr; } .art-duo { grid-template-columns: 1fr; } }

/* ============================================================
   Bloc hebergement/listing — archive /hebergements/ (Theme Builder)
   Composant carte `.hc`/`.hcard` (maquette styles.css l.151-231) + page listing
   (hero, sidebar filtres, grille, badges, tiroir mobile — l.787-853). `.hb-cta`
   déjà porté (region/single) → non répété. Tokens `:root` (fondations) — aucune valeur en dur.
   Overrides Elementor : `.hc` est un <a> → bat `.elementor a{box-shadow:none}` (0,1,1) via
   `.hcard .hc` (0,2,0) ; `.fchip/.fperiod/.freset` sont des <button> → bat
   `button:hover/:focus{background:#c36}` via scope `.hb-side …` (0,2,1).
   ============================================================ */

/* pastille village (nom + étoiles) */
.vpill { background: rgba(255,255,255,.92); backdrop-filter: blur(8px); color: var(--petrole); font-weight: 700; font-size: 12.5px; padding: 7px 13px; border-radius: 999px; display: inline-flex; align-items: center; gap: 6px; }
.vpill .st { color: var(--corail); letter-spacing: 1px; }

/* bouton circulaire (flèche carte) */
.circ { flex: none; width: 46px; height: 46px; border-radius: 50%; background: #fff; color: var(--petrole); border: 0; display: flex; align-items: center; justify-content: center; cursor: pointer; transition: background .35s var(--ease), color .35s; }
.circ svg { width: 18px; height: 18px; stroke: currentColor; transition: transform .4s var(--ease); }

/* carte hébergement plein-visuel (.hcard > a.hc) */
.hc { position: relative; display: block; border-radius: var(--r-card); overflow: hidden; aspect-ratio: 5/6; box-shadow: var(--shadow-soft); isolation: isolate; transition: transform .45s var(--ease), box-shadow .45s; }
.hcard .hc { box-shadow: var(--shadow-soft); }
.hc:hover { transform: translateY(-7px); box-shadow: var(--shadow-card); }
.hcard .hc:hover { box-shadow: var(--shadow-card); }
.hc > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .8s var(--ease); }
.hc:hover > img { transform: scale(1.06); }
.hscrim { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(16,27,32,.30) 0%, rgba(16,27,32,0) 30%, rgba(16,27,32,.06) 50%, rgba(14,24,28,.85) 100%); }
.htop { position: absolute; top: 15px; left: 15px; right: 15px; display: flex; justify-content: flex-end; z-index: 2; }
.hinfo { position: absolute; left: 17px; right: 17px; bottom: 17px; z-index: 2; color: #fff; padding-right: 56px; }
.hinfo h3 { color: #fff; font-size: var(--fs-h3); line-height: 1.08; text-shadow: 0 1px 12px rgba(0,0,0,.5); }
.hspecs { display: flex; align-items: center; flex-wrap: wrap; gap: 9px; margin-top: 9px; font-size: 13px; font-weight: 600; color: rgba(255,255,255,.96); text-shadow: 0 1px 8px rgba(0,0,0,.5); }
.hspecs .hmi { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
.hspecs svg { width: 15px; height: 15px; flex: none; stroke: currentColor; }
.hdot { width: 3px; height: 3px; border-radius: 50%; background: rgba(255,255,255,.65); flex: none; }
.hequip { display: flex; flex-wrap: wrap; gap: 9px; margin-top: 13px; }
.hchip { width: 34px; height: 34px; border-radius: 50%; background: rgba(255,255,255,.17); backdrop-filter: blur(10px); box-shadow: inset 0 0 0 1px rgba(255,255,255,.40); display: flex; align-items: center; justify-content: center; color: #fff; }
.hchip svg { width: 17px; height: 17px; stroke: currentColor; }
.hc .circ { position: absolute; right: 17px; bottom: 17px; z-index: 3; }
.hc:hover .circ { background: var(--corail-deep); color: #fff; }
.hc:hover .circ svg { transform: rotate(-45deg); }

/* hero listing */
.hb-head { max-width: 720px; margin-bottom: clamp(24px,3vw,34px); }
.hb-head .eyebrow { margin-bottom: 14px; }
.hb-head h1 { font-size: var(--fs-h1); color: var(--petrole); line-height: 1.02; letter-spacing: -.03em; }
.hb-head .lead { margin-top: 14px; font-size: var(--fs-lead); color: var(--petrole-brume); line-height: 1.6; max-width: 54ch; } /* base .lead{max-width:54ch} maquette (héritée par hb-head) */

/* layout : sidebar filtres + grille */
.hb-layout { display: grid; grid-template-columns: 268px minmax(0,1fr); gap: clamp(26px,3.2vw,46px); align-items: start; }
.hb-side { position: sticky; top: clamp(94px,10vw,108px); display: flex; flex-direction: column; gap: 22px; }
.fgroup { padding-bottom: 20px; border-bottom: 1px solid rgba(34,56,63,.1); }
.fgroup:last-of-type { border-bottom: 0; padding-bottom: 0; }
.flabel { font-size: var(--fs-micro); font-weight: 700; letter-spacing: .12em; text-transform: uppercase; color: var(--petrole-brume); margin-bottom: 13px; }
.fchips { display: flex; flex-wrap: wrap; gap: 8px; }
.fchip { background: var(--sable-pale); color: var(--petrole); border: 0; cursor: pointer; font-family: var(--body); font-weight: 600; font-size: 13px; padding: 9px 15px; border-radius: 999px; transition: background .2s, color .2s, transform .2s; }
.hb-side .fchip:not(.active):focus { background: var(--sable-pale); } /* beat button:focus{#c36} — focus = repos maquette */
.hb-side .fchip:not(.active):hover { background: var(--sable-hover); }
.fchip.active { background: var(--petrole); color: #fff; }
.hb-side .fchip.active:hover { background: var(--petrole); }
.fperiod { display: flex; flex-direction: column; gap: 3px; width: 100%; text-align: left; background: var(--sable-pale); border: 0; cursor: pointer; border-radius: 14px; padding: 12px 16px; font-family: var(--body); transition: background .2s; }
.hb-side .fperiod:focus { background: var(--sable-pale); } /* beat button:focus{#c36} */
.hb-side .fperiod:hover { background: var(--sable-hover); }
.fperiod .pv { display: flex; align-items: center; gap: 9px; font-size: 15px; font-weight: 700; color: var(--petrole); }
.fperiod .pv svg { width: 16px; height: 16px; color: var(--corail-deep); flex: none; }
.fperiod .ps { font-size: 12px; color: var(--petrole-brume); padding-left: 25px; }
.freset { align-self: flex-start; background: none; border: 0; cursor: pointer; font-family: var(--body); font-weight: 700; font-size: 13px; color: var(--corail-deep); padding: 2px 0; display: inline-flex; align-items: center; gap: 7px; }
.hb-side .freset:hover, .hb-side .freset:focus { background: none; }
.freset svg { width: 14px; height: 14px; }

/* barre résultats + grille */
.hb-resbar { display: flex; align-items: center; justify-content: space-between; gap: 16px; margin-bottom: 18px; }
.hb-count { font-size: 14px; font-weight: 600; color: var(--petrole-brume); }
.hb-count b { font-family: var(--display); color: var(--petrole); font-size: 16.5px; }
.hb-grid { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: var(--gap-grid); }
.hb-empty { display: none; padding: 50px 20px; text-align: center; color: var(--petrole-brume); font-size: 16px; }

/* mobile : chrome tiroir (masqué desktop, injecté par hebergements.js) */
.hb-filter-btn, .hb-side-head, .hb-side-foot { display: none; }
.hb-backdrop { position: fixed; inset: 0; background: rgba(20,33,38,.45); opacity: 0; visibility: hidden; transition: opacity .3s var(--ease), visibility .3s; z-index: 79; }
.hb-backdrop.open { opacity: 1; visibility: visible; }

/* badges promo / indisponible */
.hpromo { position: absolute; top: 15px; left: 15px; z-index: 3; background: var(--corail-deep); color: #fff; font-weight: 700; font-size: 12px; letter-spacing: .02em; padding: 6px 11px; border-radius: 999px; box-shadow: 0 8px 18px -7px rgba(234,86,56,.6); }
.hcard.is-out .hc > img { filter: saturate(.55) brightness(.82); }
.hsold { position: absolute; inset: 0; z-index: 4; display: flex; align-items: center; justify-content: center; background: rgba(20,33,38,.34); pointer-events: none; }
.hsold span { background: rgba(251,250,246,.96); color: var(--petrole); font-family: var(--body); font-weight: 700; font-size: 13px; padding: 9px 16px; border-radius: 999px; box-shadow: var(--shadow-soft); }

/* responsive */
@media (max-width: 860px) {
  .hb-layout { grid-template-columns: 1fr; gap: 24px; }
  .hb-resbar { align-items: center; gap: 12px; }
  .hb-filter-btn { display: inline-flex; align-items: center; gap: 8px; font-family: var(--body); font-weight: 700; font-size: var(--fs-label); color: var(--petrole); background: #fff; box-shadow: var(--hair); border: 0; cursor: pointer; padding: 11px 18px; border-radius: 999px; transition: background .25s, color .25s; }
  .hb-filter-btn:hover { background: var(--petrole); color: #fff; }
  .hb-filter-btn svg { width: 17px; height: 17px; stroke: currentColor; }
  .hb-side { position: fixed; top: 0; left: 0; bottom: 0; width: min(88%,360px); z-index: 80; background: var(--lumiere); transform: translateX(-100%); transition: transform .35s var(--ease); overflow-y: auto; -webkit-overflow-scrolling: touch; padding: 0 22px; gap: 18px; box-shadow: 0 30px 80px -20px rgba(8,16,20,.55); }
  .hb-side.open { transform: none; }
  .hb-side-head { display: flex; align-items: center; justify-content: space-between; position: sticky; top: 0; background: var(--lumiere); padding: 18px 0 12px; z-index: 3; font-family: var(--display); font-weight: 700; font-size: var(--fs-h4); color: var(--petrole); }
  .hb-side-close { width: 40px; height: 40px; padding: 0; /* idem reset hello (croix écrasée 8px) */ flex: none; border-radius: 50%; border: 0; background: rgba(44,74,82,.08); color: var(--petrole); display: flex; align-items: center; justify-content: center; cursor: pointer; }
  .hb-side-close svg { width: 18px; height: 18px; stroke: currentColor; }
  .hb-side-foot { display: block; position: sticky; bottom: 0; background: var(--lumiere); padding: 14px 0 18px; box-shadow: 0 -1px 0 rgba(34,56,63,.12); }
  .hb-side-foot .btn { width: 100%; justify-content: center; }
  .fchips { flex-wrap: wrap; overflow: visible; margin: 0; padding: 0; }
  .fgroup { padding-bottom: 18px; }
}
@media (max-width: 560px) { .hb-grid { grid-template-columns: 1fr; } }

/* ============================================================
   Bloc hebergement/single — /hebergements/{slug}/ (single-mp_hebergement.php)
   Porté de maquette styles.css l.653-785. Déjà portés (réutilisés) : .dpage/.wrap/.section,
   .bcrumb, .facts/.fact (villa), .infobox, .sec-head, .eyebrow, .btn(-primary/-outline/-ghost), .hc, .faq*.
   ⚠️ Boutons villa (<button>) défendus contre le reset hello `reset.css` `button:hover/:focus{background:#c36}`
   (0,1,1, thème-wide, PHP inclus) : hover ET focus refixés (child après parent → gagne à égalité).
   `.dmain .dtitle` (0,2,0) bat `.dpage h1{margin:0}` (0,1,1). Tokens :root. Aucune valeur en dur.
   ============================================================ */

/* galerie (grande image + vignettes) */
.gal2 { display: grid; grid-template-columns: 1.95fr 1fr; gap: 14px; }
.gal2-main { position: relative; height: clamp(300px,38vw,440px); border-radius: 22px; overflow: hidden; box-shadow: var(--shadow-soft); }
.gal2-main img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: opacity .35s var(--ease); }
.gal2-arrows { position: absolute; left: 16px; bottom: 16px; display: flex; gap: 10px; z-index: 2; }
.gal2-arrows button { width: 44px; height: 44px; padding: 0; /* neutralise le padding .5rem 1rem du reset hello (sinon SVG écrasé 12px) */ border-radius: 50%; border: 0; cursor: pointer; background: rgba(255,255,255,.92); backdrop-filter: blur(6px); color: var(--petrole); display: flex; align-items: center; justify-content: center; box-shadow: var(--shadow-soft); transition: transform .25s var(--ease); }
.gal2-arrows button:hover, .gal2-arrows button:focus { transform: translateY(-2px); background: rgba(255,255,255,.92); color: var(--petrole); }
.gal2-arrows svg { width: 19px; height: 19px; stroke: currentColor; fill: none; }
.gal2-thumbs { display: grid; grid-template-rows: repeat(3,1fr); gap: 14px; height: clamp(300px,38vw,440px); }
.gal2-thumb { position: relative; border-radius: 18px; overflow: hidden; cursor: pointer; }
.gal2-thumb img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .6s var(--ease); }
.gal2-thumb:hover img { transform: scale(1.06); }
.gal2-thumb::after { content: ""; position: absolute; inset: 0; background: rgba(16,27,32,0); transition: background .3s; }
.gal2-thumb:hover::after { background: rgba(16,27,32,.12); }
.gal2-thumb .more { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center; background: rgba(16,27,32,.5); color: #fff; font-weight: 700; font-size: 15px; z-index: 2; }

/* corps : contenu + encart sticky */
.dwrap { display: grid; grid-template-columns: minmax(0,1fr) 384px; gap: clamp(32px,4.5vw,72px); align-items: start; margin-top: clamp(34px,4vw,54px); }
.dloc { display: inline-flex; align-items: center; gap: 8px; font-size: var(--fs-eyebrow); font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--corail-deep); }
.dloc svg { width: 16px; height: 16px; }
.dmain .dtitle { font-size: var(--fs-h1); color: var(--petrole); margin-top: 12px; line-height: 1.02; }
.dintro { font-size: var(--fs-lead); color: var(--petrole-brume); margin-top: 16px; max-width: 60ch; line-height: 1.6; }
.dsec { margin-top: 38px; }
.dsec h3 { font-size: var(--fs-h3); color: var(--petrole); margin-bottom: 16px; }
.ddesc p { color: var(--petrole-brume); font-size: 15.5px; line-height: 1.75; margin-bottom: 14px; max-width: 64ch; }
.infogrid { display: grid; grid-template-columns: 1fr 1fr; gap: 20px 28px; }
.infogrid .k { font-size: 12.5px; color: var(--petrole-brume); font-weight: 600; }
.infogrid .v { font-size: 15px; color: var(--petrole); font-weight: 600; margin-top: 3px; }
.compo { display: grid; grid-template-columns: 1fr 1fr; gap: 26px 44px; }
.cgrp h4 { font-size: 15.5px; color: var(--petrole); margin-bottom: 10px; }
.cgrp ul { list-style: none; }
.cgrp li { position: relative; padding-left: 17px; font-size: 14px; color: var(--petrole-brume); margin-bottom: 7px; line-height: 1.5; }
.cgrp li::before { content: ""; position: absolute; left: 0; top: 8px; width: 6px; height: 6px; border-radius: 50%; background: var(--corail); }

/* encart réservation sticky (MOCK — Thelis différé) */
.dside { position: sticky; top: clamp(96px,10vw,110px); display: flex; flex-direction: column; gap: 18px; }
.bk { background: #fff; border-radius: 22px; box-shadow: var(--shadow-card); padding: 24px; }
.bk h3 { font-size: var(--fs-h4); color: var(--petrole); }
.bk-selects { display: flex; flex-direction: column; gap: 11px; margin-top: 16px; }
.bk-sel-row { display: grid; grid-template-columns: 1fr 1fr; gap: 11px; }
.bk-sel { display: flex; flex-direction: column; gap: 6px; }
.bk-sel .l { font-size: var(--fs-micro); font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--petrole-brume); }
.bk-sel .s { position: relative; }
.bk-sel select { width: 100%; appearance: none; -webkit-appearance: none; background: var(--sable-pale); border: 0; border-radius: 11px; padding: 11px 34px 11px 13px; font-family: var(--display); font-weight: 700; font-size: 14px; color: var(--petrole); cursor: pointer; }
.bk-sel .s svg { position: absolute; right: 11px; top: 50%; transform: translateY(-50%); width: 15px; height: 15px; color: var(--petrole); pointer-events: none; }
.bk-divider { height: 1px; background: rgba(34,56,63,.1); margin-top: 16px; }
.bk-sub { font-size: 12.5px; color: var(--petrole-brume); margin-top: 6px; }
.bk-weeks { display: flex; flex-direction: column; gap: 9px; margin-top: 14px; }
.bk-week { display: flex; align-items: center; justify-content: space-between; gap: 10px; width: 100%; text-align: left; border: 0; background: var(--sable-pale); border-radius: 13px; padding: 12px 14px; cursor: pointer; font-family: var(--body); white-space: normal; transition: background .2s, box-shadow .25s var(--ease); }
.bk-week:hover, .bk-week:focus { background: var(--sable-hover); }
.bk-week .wd { font-size: 13px; font-weight: 600; color: var(--petrole); line-height: 1.3; }
.bk-week .wr { display: flex; align-items: center; gap: 8px; flex: none; }
.bk-week .wp { font-family: var(--display); font-weight: 700; font-size: 15px; color: var(--lagune); white-space: nowrap; }
.bk-week .wp s { font-size: 11.5px; color: var(--petrole-brume); font-weight: 500; margin-right: 5px; }
.bk-week .promo { background: var(--olivier-deep); color: #fff; font-size: 10.5px; font-weight: 700; padding: 3px 7px; border-radius: 7px; }
.bk-week.sel, .bk-week.sel:hover, .bk-week.sel:focus { background: #fff; box-shadow: inset 0 0 0 2px var(--corail-deep); }
.bk-week.off, .bk-week.off:hover, .bk-week.off:focus { cursor: default; opacity: .62; background: var(--sable-pale); }
.bk-week.off .wp { font-size: 12px; color: var(--petrole-brume); font-weight: 600; }
.bk-go { margin-top: 16px; width: 100%; background: var(--corail-deep); color: #fff; border: 0; cursor: pointer; font-family: var(--body); font-weight: 700; font-size: 16px; padding: 16px; border-radius: 14px; display: flex; align-items: center; justify-content: center; gap: 10px; transition: transform .25s var(--ease), box-shadow .25s; }
.bk-go:hover, .bk-go:focus { background: var(--corail-deep); color: #fff; transform: translateY(-2px); box-shadow: 0 18px 36px -16px rgba(234,86,56,.7); }
.bk-go svg { width: 18px; height: 18px; }
.bk-trust { display: flex; align-items: center; justify-content: center; gap: 8px; flex-wrap: wrap; margin-top: 14px; font-size: 12px; color: var(--petrole-brume); text-align: center; }
.bk-trust .dot { width: 3px; height: 3px; border-radius: 50%; background: var(--petrole-brume); }
.help { background: var(--sable-pale); border-radius: 20px; padding: 22px; }
.help h4 { font-size: 16px; color: var(--petrole); }
.help p { font-size: 13.5px; color: var(--petrole-brume); margin-top: 6px; line-height: 1.5; }
.help .btn { margin-top: 14px; width: 100%; justify-content: center; }

/* grille cross-sell « Autres hébergements » (maquette .hgrid l.213) */
.hgrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: var(--gap-grid); }

/* tuiles vidéo + 360 (placeholder statique) */
.media2 { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; }
.mtile { position: relative; border-radius: 20px; overflow: hidden; aspect-ratio: 16/10; cursor: pointer; box-shadow: var(--shadow-soft); }
.mtile > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .6s var(--ease); }
.mtile:hover > img { transform: scale(1.04); }
.mtile .ov { position: absolute; inset: 0; background: linear-gradient(180deg,rgba(16,27,32,.12),rgba(14,24,28,.62)); }
.mtile .ic { position: absolute; left: 50%; top: 40%; transform: translate(-50%,-50%); width: 66px; height: 66px; border-radius: 50%; background: rgba(255,255,255,.94); display: flex; align-items: center; justify-content: center; z-index: 2; transition: transform .25s var(--ease); }
.mtile:hover .ic { transform: translate(-50%,-50%) scale(1.08); }
.mtile .ic svg { width: 26px; height: 26px; color: var(--petrole); }
.mtile .lab { position: absolute; left: 0; right: 0; bottom: 18px; z-index: 2; text-align: center; color: #fff; font-family: var(--display); font-weight: 700; font-size: 18px; text-shadow: 0 1px 10px rgba(0,0,0,.5); }
.mtile .lab small { display: block; font-family: var(--body); font-weight: 600; font-size: 12.5px; color: rgba(255,255,255,.86); margin-top: 3px; }

/* cross-village (autre village) */
.crossv { display: grid; grid-template-columns: 1fr 1fr; background: var(--petrole); border-radius: var(--r-card); overflow: hidden; color: #fff; isolation: isolate; }
.crossv-media { position: relative; min-height: 300px; }
.crossv-media > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.crossv-txt { padding: clamp(30px,4vw,56px); display: flex; flex-direction: column; justify-content: center; }
.crossv-txt .eyebrow { color: var(--corail-pale); }
.crossv-txt .eyebrow::before { background: var(--corail-pale); }
.crossv-txt h2 { color: #fff; font-size: var(--fs-h2); margin-top: 14px; line-height: 1.04; }
.crossv-txt .loc { display: inline-flex; align-items: center; gap: 8px; font-size: 13.5px; font-weight: 600; color: rgba(255,255,255,.85); margin-top: 14px; }
.crossv-txt .loc svg { width: 16px; height: 16px; }
.crossv-txt .loc .st { color: var(--corail-pale); letter-spacing: 1px; }
.crossv-txt p { margin-top: 14px; color: rgba(255,255,255,.82); font-size: 15.5px; line-height: 1.6; max-width: 46ch; }
.crossv-txt .btn { margin-top: 26px; align-self: flex-start; }

/* responsive single hébergement */
@media (max-width: 980px) {
  .dwrap { grid-template-columns: 1fr; }
  .dside { position: static; flex-direction: row; flex-wrap: wrap; }
  .bk, .help { flex: 1 1 300px; }
}
@media (max-width: 760px) {
  .gal2 { grid-template-columns: 1fr; height: auto; }
  .gal2-main { height: 300px; }
  .gal2-thumbs { grid-template-rows: none; grid-template-columns: repeat(3,1fr); height: 110px; }
  .infogrid { grid-template-columns: 1fr; }
  .dside { flex-direction: column; }
  .compo { grid-template-columns: 1fr; }
  .crossv { grid-template-columns: 1fr; }
  .crossv-media { min-height: 220px; }
}
@media (max-width: 600px) { .media2 { grid-template-columns: 1fr; } }

/* ============================================================
   Bloc village/hero — landing village (TB Single mp_village)
   Porté maquette styles.css l.474-500 + responsive (@900/@560) + body.vhead-top.
   `.loc` scopé `.vhero .loc` (maquette). Boutons <button> (.vh-media/.resa-f/.resa-go)
   défendus du reset hello `button:hover/:focus{background:#c36}` (hover ET focus). Tokens :root.
   ============================================================ */
.vcon.vcon { padding: 0; display: flex; flex-direction: column; } /* conteneur Elementor plein cadre du hero (bat padding+row .e-con → hero pleine largeur) */
/* Landing village : reproduction EXACTE maquette (`<body class="vhead-top">` statique). Le header reste
   `position:fixed` (défaut Elementor → reste visible au scroll) ; on RETIRE juste la ligne bottom (maquette
   `body.vhead-top .nav{box-shadow:none}`) et le hero est collé (`body.vhead-top .vhero{margin-top:0}`,
   déjà porté plus bas). `vhead-top` ajouté au body des singles mp_village via functions.php. */
/* Reproduit maquette (l.1097 `body.vhead-top .nav{position:sticky}` + l.1102 box-shadow:none) : header
   EN FLUX au top (hero juste après, pas d'overlap) puis stické au scroll. En WP le `.s-hdr` est enveloppé
   dans `<header.elementor-64>` (enfant de body) ; `position:sticky` sur `.s-hdr` stickerait dans ce wrapper
   court (~82px) → échoue. On rend donc le WRAPPER sticky (contexte = body, comme `.nav`) et le `.s-hdr`
   statique (en flux dedans). Scopé `body.vhead-top` (singles mp_village uniquement). */
body.vhead-top .elementor.elementor-64 { position: sticky; top: 0; z-index: 999; }
body.vhead-top .s-hdr.s-hdr { position: static; box-shadow: none; }
/* léger shrink au scroll (maquette `.nav.scrolled{padding:12px}` — `.s-hdr` base = 15px ; header.js pose
   `.scrolled` >40px). Transition padding .4s déjà sur `.s-hdr`. */
body.vhead-top .s-hdr.s-hdr.scrolled { padding-top: 12px; padding-bottom: 12px; background: rgba(251,250,246,.88); }
.vhero { position: relative; margin: 14px; border-radius: 30px; overflow: hidden; min-height: calc(100svh - 28px); display: flex; align-items: center; justify-content: center; isolation: isolate; }
.vhero > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: -2; transform-origin: center; }
.vhero .vscrim { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(16,27,32,.55), rgba(16,27,32,.26) 36%, rgba(16,27,32,.3) 64%, rgba(14,24,28,.66)); z-index: -1; }
.vhero-in { padding: clamp(76px,12vh,116px) clamp(20px,4vw,40px) clamp(28px,4vw,52px); width: 100%; max-width: 1040px; margin: 0 auto; color: #fff; display: flex; flex-direction: column; align-items: center; text-align: center; gap: clamp(15px,1.9vw,22px); }
.vhero .loc { display: inline-flex; align-items: center; gap: 8px; font-size: 14px; font-weight: 600; color: rgba(255,255,255,.92); }
.vhero .loc svg { width: 17px; height: 17px; }
.vhero h1 { margin: 0; color: #fff; font-size: clamp(48px,9vw,104px); line-height: .95; letter-spacing: -.035em; text-shadow: 0 2px 28px rgba(0,0,0,.42); } /* margin:0 → annule le reset hello h1{margin-block .5rem/1rem} (maquette *{margin:0}) */
.vh-tag { margin: 0; font-size: clamp(16px,1.9vw,21px); color: rgba(255,255,255,.94); max-width: 46ch; line-height: 1.5; text-shadow: 0 1px 12px rgba(0,0,0,.45); } /* margin:0 → annule le reset hello p{margin-block-end:.9rem} */
.vh-media-row { display: flex; gap: 11px; justify-content: center; margin-top: 2px; }
.vh-media { display: inline-flex; align-items: center; gap: 9px; background: rgba(16,27,32,.34); backdrop-filter: blur(12px); box-shadow: inset 0 0 0 1px rgba(255,255,255,.38), 0 10px 24px -12px rgba(8,16,20,.6); color: #fff; border: 0; cursor: pointer; font-family: var(--body); font-weight: 700; font-size: 13.5px; padding: 11px 16px; border-radius: 999px; transition: .25s var(--ease); }
.vh-media:hover, .vh-media:focus { background: rgba(16,27,32,.5); color: #fff; transform: translateY(-1px); }
.vh-media svg { width: 17px; height: 17px; }
.resabar { display: flex; align-items: stretch; background: rgba(255,255,255,.97); border-radius: 20px; box-shadow: 0 26px 64px -26px rgba(8,16,20,.6); padding: 8px; gap: 2px; width: 100%; max-width: 940px; margin: clamp(8px,1.4vw,18px) auto 0; backdrop-filter: blur(6px); text-align: left; }
.resa-f { flex: 1; display: flex; flex-direction: column; justify-content: center; gap: 4px; padding: 13px 20px; border-radius: 14px; cursor: pointer; transition: background .2s; min-width: 0; text-align: left; border: 0; background: none; font-family: var(--body); }
.resa-f:hover, .resa-f:focus { background: var(--sable-pale); }
.resa-f .lab { font-size: var(--fs-micro); font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--petrole-brume); }
.resa-f .val { font-size: 15px; font-weight: 600; color: var(--petrole); white-space: nowrap; overflow: hidden; text-overflow: ellipsis; display: flex; align-items: center; gap: 7px; }
.resa-f .val svg { width: 15px; height: 15px; flex: none; color: var(--corail-deep); }
.resa-div { width: 1px; background: rgba(34,56,63,.12); margin: 11px 0; flex: none; }
.resa-go { flex: none; display: inline-flex; align-items: center; gap: 9px; background: var(--corail-deep); color: #fff; border: 0; cursor: pointer; font-family: var(--body); font-weight: 700; font-size: 15px; padding: 0 26px; border-radius: 14px; transition: transform .25s var(--ease), background .25s; }
.resa-go:hover, .resa-go:focus { background: var(--corail); color: #fff; transform: translateY(-1px); }
.resa-go svg { width: 18px; height: 18px; }
body.vhead-top .vhero { margin-top: 0; }
@media (max-width: 900px) {
  .resabar { flex-wrap: wrap; }
  .resa-f { flex: 1 1 44%; }
  .resa-div { display: none; }
  .resa-go { flex: 1 1 100%; justify-content: center; padding: 15px; }
}
@media (min-width: 901px) {
  body.vhead-top .vhero { min-height: calc(100svh - 96px); }
  body.vhead-top .vhero-in { padding-top: clamp(40px,5vh,64px); }
}
@media (max-width: 560px) {
  .vhero { margin: 6px; border-radius: 20px; min-height: calc(100svh - 12px); }
}

/* Reset marges vpage : DÉPLACÉ dans le bloc fondations (chantier vpage 2026-07-27) — il était ici,
   APRÈS des composants comme .art-body, et écrasait leurs marges à spécificité égale. */

/* section esprit (maquette styles.css l.503-509) */
.esprit { max-width: 760px; margin: 0 auto; text-align: center; }
.esprit .eyebrow { justify-content: center; }
.esprit h2 { font-size: var(--fs-h2); margin-top: 14px; color: var(--petrole); } /* color explicite : landing ≠ .dpage (qui posait petrole sur h1..h4) → sinon #333 du reset hello */
.esprit p { margin-top: 18px; color: var(--petrole-brume); font-size: 17px; line-height: 1.7; }
.esprit-stats { display: flex; justify-content: center; gap: clamp(26px,5vw,62px); margin-top: 38px; flex-wrap: wrap; }
.esprit-stats .n { font-family: var(--display); font-weight: 700; font-size: 32px; color: var(--petrole); display: block; line-height: 1; }
.esprit-stats .l { font-size: 13px; color: var(--petrole-brume); margin-top: 6px; display: block; }

/* section galerie coverflow (maquette styles.css l.512-542, 611-613, 624). `.gal-arrow`/`.sl-head` partagés
   avec le slider hébergements village. `.cg-cap` blanc (sur image). Flèches défendues du reset #c36 via
   `.cgal .gal-arrow.prev/.next` (0,3,0). Layout piloté par js/village.js (items position:absolute). */
.sl-head { display: flex; flex-direction: column; align-items: center; text-align: center; gap: 14px; margin-bottom: clamp(28px,3.4vw,40px); }
.sl-head .eyebrow { justify-content: center; }
.sl-head h2 { font-size: var(--fs-h2); color: var(--petrole); } /* color : landing ≠ .dpage */
.sl-head .lead { margin: 0; max-width: 54ch; }
.cgal { position: relative; overflow: hidden; }
.cgal-stage { position: relative; height: clamp(360px,44vw,500px); }
.cgal-item { position: absolute; top: 0; left: 0; border-radius: 24px; overflow: hidden; box-shadow: var(--shadow-soft); cursor: pointer; will-change: left,top,width,height; transition: transform .4s var(--ease), box-shadow .4s var(--ease); }
.cgal-item > img { width: 100%; height: 100%; object-fit: cover; }
.cgal-item .cg-shade { position: absolute; inset: 0; background: rgba(8,16,20,.3); opacity: .16; transition: opacity .4s var(--ease); pointer-events: none; }
.cgal-item.active .cg-shade { opacity: 0; }
.cgal-item:not(.active) { transition: filter .45s var(--ease); filter: saturate(.9) brightness(.93); }
.cgal-item:not(.active):hover { transform: translateY(-5px); box-shadow: var(--shadow-card); filter: saturate(1) brightness(1.02); }
.cgal-item:not(.active):hover .cg-shade { opacity: 0; }
.cgal-item:not(.active) .cg-shade { opacity: .26; }
.cgal-item .cg-grad { position: absolute; inset: 0; background: linear-gradient(180deg,rgba(16,27,32,.02) 42%,rgba(14,24,28,.84)); opacity: 0; transition: opacity .5s var(--ease); }
.cgal-item.active .cg-grad { opacity: 1; }
.cgal-item .cg-cap { position: absolute; left: 30px; right: 30px; bottom: 28px; z-index: 2; color: #fff; opacity: 0; transform: translateY(14px); transition: opacity .55s var(--ease) .1s, transform .55s var(--ease) .1s; pointer-events: none; }
.cgal-item.active .cg-cap { opacity: 1; transform: none; }
.cg-cap .et { font-size: var(--fs-eyebrow); font-weight: 700; letter-spacing: .16em; text-transform: uppercase; color: var(--corail-pale); }
.cg-cap h4 { color: #fff; font-size: var(--fs-h3); margin-top: 6px; line-height: 1.06; text-shadow: 0 2px 16px rgba(0,0,0,.5); }
.cg-cap p { font-size: 14px; color: rgba(255,255,255,.92); margin-top: 6px; max-width: 42ch; text-shadow: 0 1px 8px rgba(0,0,0,.5); }
.gal-nav { display: flex; gap: 12px; flex: none; }
.gal-arrow { width: 52px; height: 52px; padding: 0; /* idem reset hello */ border-radius: 50%; display: flex; align-items: center; justify-content: center; cursor: pointer; border: 0; transition: .25s var(--ease); }
.gal-arrow svg { width: 21px; height: 21px; stroke: currentColor; fill: none; }
.gal-arrow.prev { background: #fff; box-shadow: var(--shadow-soft); color: var(--petrole); }
.gal-arrow.next { background: var(--petrole); color: #fff; }
.gal-arrow:hover { transform: translateY(-2px); box-shadow: var(--shadow-card); }
.cgal .gal-nav { position: absolute; right: 16px; bottom: 16px; z-index: 6; display: flex; gap: 10px; }
.cgal .gal-arrow.prev { background: rgba(255,255,255,.92); backdrop-filter: blur(8px); }
.cgal .gal-arrow.next { background: var(--corail-deep); color: #fff; }
@media (max-width: 900px) { .cgal-stage { height: clamp(320px,72vw,460px); } }

/* section slider hébergements village (maquette styles.css l.533, 543-547, 146). Réutilise .sl-head,
   .gal-nav/.gal-arrow (prev blanc / next petrole hors .cgal), carte .hc + enfants, .btn-outline.
   L'overflow-x du slider est interne (snap) — pas un débordement de page. */
.sl-right { display: flex; flex-direction: column; align-items: center; gap: 18px; max-width: 520px; }
.hslider { display: flex; gap: 20px; overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth; padding: 14px 4px 38px; scrollbar-width: none; margin: 0 -4px; }
.hslider::-webkit-scrollbar { display: none; }
.hslider .hcard { flex: 0 0 clamp(280px,30vw,338px); scroll-snap-align: start; }
.hslider .hc:hover { box-shadow: 0 22px 50px -28px rgba(34,56,63,.55); }
.sec-cta { margin-top: clamp(16px,2.2vw,26px); display: flex; justify-content: center; }

/* reveal — état par défaut VISIBLE (maquette l.320) : l'apparition est 100 % GSAP (gsap.from, village.js) ;
   sans GSAP/JS rien ne touche l'élément. Filet reduced-motion = maquette l.427 (aucun résidu invisible). */
.reveal { opacity: 1; }
@media (prefers-reduced-motion: reduce) { .reveal { opacity: 1 !important; transform: none !important; } }

/* section teaser aquatique — composant « feature » (maquette l.550-570 + @900 l.625-626 ; `.feature.rev`
   servira la section #infos). `.feature h2` color explicite (landing ≠ .dpage). */
.feature { display: grid; grid-template-columns: 1.08fr 1fr; gap: clamp(28px,4vw,56px); align-items: center; }
.feature.rev .feat-media { order: 2; }
.feat-mosaic { display: grid; grid-template-columns: 1fr 1fr; grid-template-rows: 1fr 1fr; gap: 14px; aspect-ratio: 1/0.92; }
.feat-mosaic .m { position: relative; border-radius: 20px; overflow: hidden; box-shadow: var(--shadow-soft); }
.feat-mosaic .m > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; transition: transform .7s var(--ease); }
.feat-mosaic .m:hover > img { transform: scale(1.05); }
.feat-mosaic .m.tall { grid-row: span 2; }
/* média du feature (section infos — maquette l.552-559 + @min-901 stretch l.555-557) */
.feat-media { position: relative; border-radius: var(--r-card); overflow: hidden; aspect-ratio: 4/3; box-shadow: var(--shadow-soft); }
.feat-media > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
@media (min-width: 901px) {
  .feature > .feat-media { align-self: stretch; aspect-ratio: auto; min-height: clamp(320px,34vw,460px); }
}
.feat-media .pin { position: absolute; left: 16px; top: 16px; z-index: 2; display: inline-flex; align-items: center; gap: 7px; background: rgba(255,255,255,.9); backdrop-filter: blur(6px); border-radius: 999px; padding: 7px 13px; font-size: 12.5px; font-weight: 700; color: var(--petrole); }
.feat-media .pin svg { width: 15px; height: 15px; color: var(--corail-deep); }
/* liste infos pratiques (maquette l.571-577) */
.infos-list { list-style: none; margin-top: 8px; padding: 0; }
.infos-list li { display: flex; gap: 13px; padding: 14px 0; border-bottom: 1px solid rgba(34,56,63,.08); }
.infos-list li:last-child { border-bottom: 0; }
.infos-list .ic { flex: none; width: 40px; height: 40px; border-radius: 12px; background: var(--sable-pale); color: var(--corail-deep); display: flex; align-items: center; justify-content: center; }
.infos-list .ic svg { width: 20px; height: 20px; stroke: currentColor; }
.infos-list h4 { font-size: 15px; color: var(--petrole); }
.infos-list p { font-size: 13.5px; color: var(--petrole-brume); margin-top: 2px; }
.feature h2 { font-size: var(--fs-h2); margin-top: 14px; color: var(--petrole); }
.feature .lead { margin-top: 14px; }
.feat-list { display: flex; flex-wrap: wrap; gap: 10px 12px; margin-top: 22px; }
.feat-list .chip { display: inline-flex; align-items: center; gap: 8px; background: var(--sable-pale); border-radius: 999px; padding: 9px 14px; font-size: 13px; font-weight: 600; color: var(--petrole); }
.feat-list .chip svg { width: 16px; height: 16px; stroke: currentColor; color: var(--corail-deep); }
.feature .btn { margin-top: 26px; }
@media (max-width: 900px) {
  .feature { grid-template-columns: 1fr; gap: 30px; }
  .feature.rev .feat-media { order: 0; }
}

/* section activités à onglets (maquette l.585-587 + @900 l.627 + @560 l.629 + carrousel village @600
   l.630-633). `.acts-tabs`/`.acts-tab`/`.rtile`/`.sec-head`/`.sec-cta` déjà portés. Le carrousel `.vpage`
   (body des singles mp_village) override le 1 col @560 (source order) — fidèle maquette. */
.acts-panel { display: none; }
.acts-panel.show { display: block; }
.acts-grid { display: grid; grid-template-columns: repeat(4,1fr); gap: var(--gap-grid); }
/* section avis — composant témoignages générique (maquette l.256-269, sous-ensemble du markup landing ;
   la variante home `.s-tst-*` reste intacte). `blockquote{margin:0}` = équivalent du `*{margin:0}` maquette
   (l'UA pose 1em/40px). Avatars : fond posé par token inline dans le markup (var(--corail-deep)…). */
.tgrid { display: grid; grid-template-columns: repeat(auto-fit, minmax(290px, 1fr)); gap: var(--gap-grid); }
.tcard { position: relative; overflow: hidden; background: #fff; border-radius: var(--r-card); padding: 28px 28px 26px; box-shadow: var(--shadow-soft); display: flex; flex-direction: column; gap: 15px; transition: transform .4s var(--ease), box-shadow .4s var(--ease); }
.tcard:hover { transform: translateY(-5px); box-shadow: var(--shadow-card); }
.tcard .qstars { color: var(--corail); letter-spacing: 2px; font-size: 15px; }
.tcard blockquote { margin: 0; font-size: 17px; color: var(--encre); line-height: 1.62; flex: 1; }
.tcard .who { display: flex; align-items: center; gap: 13px; }
.tcard .av { width: 46px; height: 46px; border-radius: 50%; display: flex; align-items: center; justify-content: center; color: #fff; font-weight: 700; font-family: var(--display); font-size: 17px; }
.tcard .who .nm { font-weight: 700; color: var(--petrole); font-size: 14.5px; }
.tcard .who .ct { font-size: 12.5px; color: var(--petrole-brume); }

/* bandeau Groupes & CSE (maquette l.247-253 ; instance landing : min-height/display flex inline).
   `.groups h2/p` (0,1,1) battent les globaux (blanc sur overlay sombre). Parallaxe img = couche wow. */
.groups { position: relative; border-radius: var(--r-card); overflow: hidden; isolation: isolate; }
.groups > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; }
.groups .gov { position: absolute; inset: 0; background: linear-gradient(100deg, rgba(34,56,63,.94) 0%, rgba(34,56,63,.78) 42%, rgba(34,56,63,.35) 100%); }
.groups .gin { position: relative; z-index: 2; padding: clamp(38px,6vw,72px); max-width: 60ch; color: #fff; }
.groups .eyebrow { color: var(--corail-pale); }
.groups .eyebrow::before { background: var(--corail); }
.groups h2 { color: #fff; font-size: var(--fs-h2); margin: 16px 0 14px; }
.groups p { color: rgba(255,255,255,.9); font-size: 16px; margin-bottom: 26px; max-width: 46ch; }

/* CTA final (maquette l.281-291 ; instance village = widget HTML, home = template atomic #37 .s-fin distinct).
   `.final h2/p` (0,1,1, source après le reset village) battent les globaux (blanc sur overlay). Parallaxe img = couche wow. */
.final { position: relative; border-radius: var(--r-card); overflow: hidden; isolation: isolate; text-align: center; }
.final > img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; object-position: center 60%; }
.final .fov { position: absolute; inset: 0; background: linear-gradient(180deg, rgba(14,24,28,.5), rgba(14,24,28,.72)); }
.final .fin { position: relative; z-index: 2; padding: clamp(56px,9vw,110px) 24px; color: #fff; }
.final h2 { color: #fff; font-size: var(--fs-h1); max-width: 18ch; margin: 0 auto 16px; text-shadow: 0 2px 24px rgba(8,16,20,.5); }
.final p { color: rgba(255,255,255,.92); font-size: 18px; max-width: 44ch; margin: 0 auto 30px; text-shadow: 0 1px 14px rgba(8,16,20,.5); }
.final .frow { display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; }
.final .btn-ghost { background: rgba(14,24,28,.34); box-shadow: inset 0 0 0 1.5px rgba(255,255,255,.82); }
.final .btn-ghost:hover { background: rgba(14,24,28,.5); }
.final .phone { margin-top: 24px; font-size: 14px; color: rgba(255,255,255,.85); display: flex; align-items: center; gap: 8px; justify-content: center; }
.final .phone svg { width: 16px; height: 16px; }

/* grille région (teaser village — maquette l.234, @900 l.342, @560 l.353 ; carrousel .vpage @600 ci-dessous) */
.rgrid { display: grid; grid-template-columns: repeat(4,1fr); gap: var(--gap-grid); }
@media (max-width: 900px) { .acts-grid { grid-template-columns: 1fr 1fr; } .rgrid { grid-template-columns: repeat(2,1fr); } }
@media (max-width: 560px) { .acts-grid { grid-template-columns: 1fr; } .rgrid { grid-template-columns: 1fr; } }
@media (max-width: 600px) {
  .vpage .rgrid, .vpage .acts-grid { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; scrollbar-width: none; gap: 14px; margin: 0 -24px; padding: 10px 24px 30px; }
  .vpage .rgrid::-webkit-scrollbar, .vpage .acts-grid::-webkit-scrollbar { display: none; }
  .vpage .rgrid > *, .vpage .acts-grid > * { flex: 0 0 72%; scroll-snap-align: start; }
}

/* ============================================================
   Page oasis-aquatique (village/aquatique-page — maquette styles.css l.857-880).
   Composants propres : en-tête .aqhead, tête de galerie .aqgal-head, cartes « à découvrir » .disc,
   bloc centré .why. Le reste (dpage/cgal/feature/chips/faq…) est déjà porté. Tokens :root.
   ============================================================ */
.aqhead { max-width: 760px; margin-bottom: clamp(22px,2.8vw,34px); }
.aqhead .eyebrow { margin-bottom: 14px; }
.aqhead h1 { font-size: var(--fs-h1); color: var(--petrole); line-height: 1.04; letter-spacing: -.03em; }
.aqhead .lead { margin-top: 14px; font-size: var(--fs-lead); color: var(--petrole-brume); line-height: 1.6; max-width: 64ch; }
.aqgal-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 18px; margin-bottom: 18px; }
.dpage .cgal { margin-bottom: clamp(54px,7vw,88px); }
/* NB : .disc* et sa MQ @860 étaient déjà portés (single activité, plus haut) — doublon retiré. */
.why { max-width: 880px; margin: 0 auto; text-align: center; }
.why .eyebrow { justify-content: center; margin-bottom: 16px; }
.why p { color: var(--petrole-brume); font-size: var(--fs-lead); line-height: 1.7; margin-top: 14px; }
.why .feat-list { justify-content: center; margin-top: 26px; }

/* ============================================================
   Page oasis-groupes (village/groupes-page — maquette styles.css l.953-956 + l.986-997).
   En-tête .gp-head + formulaire de devis .devis (mock démo). Focus des champs défendu du reset
   Hello (border #333) par la règle :focus maquette (corail-deep). Le reste (facts/disc/infobox/
   art-list/faq…) est déjà porté. Tokens :root.
   ============================================================ */
.gp-head { max-width: 780px; margin-bottom: clamp(22px,2.6vw,32px); }
.gp-head .eyebrow { margin-bottom: 14px; }
.gp-head h1 { font-size: var(--fs-h1); color: var(--petrole); line-height: 1.04; letter-spacing: -.03em; }
.gp-head .lead { margin-top: 14px; font-size: var(--fs-lead); color: var(--petrole-brume); line-height: 1.6; }
/* formulaire de devis */
.devis { background: var(--sable-pale); border-radius: var(--r-card); padding: clamp(26px,4vw,48px); }
.devis h2 { font-size: var(--fs-h2); color: var(--petrole); }
.devis .lead { margin-top: 12px; color: var(--petrole-brume); font-size: 16px; max-width: 60ch; }
.devis-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-top: 26px; }
.df { display: flex; flex-direction: column; gap: 7px; }
.df.full { grid-column: 1 / -1; }
.df label { font-size: 12.5px; font-weight: 700; color: var(--petrole-brume); letter-spacing: .02em; }
.df input, .df select, .df textarea { font-family: var(--body); font-size: 15px; color: var(--petrole); background: #fff; border: 1.5px solid rgba(34,56,63,.12); border-radius: 12px; padding: 13px 15px; width: 100%; transition: border-color .2s; }
.df input:focus, .df select:focus, .df textarea:focus { outline: none; border-color: var(--corail-deep); }
.df textarea { min-height: 120px; resize: vertical; }
.devis-go { margin-top: 20px; display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.devis-ok { display: none; color: var(--olivier-deep); font-weight: 700; font-size: 14.5px; }
@media (max-width: 760px) { .devis-grid { grid-template-columns: 1fr; } }

/* ============================================================
   Page oasis-cse (village/cse-page — maquette styles.css l.970-984).
   Bandeau linéaires .cse-deal (fond pétrole, -52 % corail-pale) + exemple concret .cse-calc.
   Le reste (gp-head/facts/feature/art-list/devis/faq) est déjà porté. Tokens :root.
   ============================================================ */
.cse-deal { display: grid; grid-template-columns: auto 1fr; gap: clamp(22px,3vw,40px); align-items: center; background: var(--petrole); border-radius: var(--r-card); overflow: hidden; color: #fff; padding: clamp(26px,3.4vw,44px); margin-top: 8px; }
.cse-pct { font-family: var(--display); font-weight: 700; font-size: clamp(48px,7vw,86px); line-height: .9; color: var(--corail-pale); white-space: nowrap; }
.cse-pct small { display: block; font-size: 14px; font-weight: 600; color: rgba(255,255,255,.82); letter-spacing: .04em; margin-top: 8px; }
.cse-per { display: flex; flex-direction: column; gap: 12px; }
.cse-per .row { display: flex; align-items: baseline; gap: 12px; padding-bottom: 12px; border-bottom: 1px solid rgba(255,255,255,.16); }
.cse-per .row:last-child { border-bottom: 0; padding-bottom: 0; }
.cse-per .d { font-family: var(--display); font-weight: 700; font-size: 18px; color: #fff; white-space: nowrap; }
.cse-per .t { font-size: 13.5px; color: rgba(255,255,255,.82); }
.cse-calc { display: grid; grid-template-columns: 1.1fr 1fr; gap: clamp(24px,3vw,44px); align-items: center; }
.cse-calc .box { background: #fff; border-radius: var(--r-card); padding: clamp(26px,3.4vw,40px); box-shadow: var(--shadow-soft); }
.cse-calc .lbl { font-size: var(--fs-eyebrow); font-weight: 700; letter-spacing: .04em; text-transform: uppercase; color: var(--petrole-brume); }
.cse-calc .new { font-family: var(--display); font-weight: 700; font-size: clamp(34px,4.4vw,52px); color: var(--petrole); line-height: 1; margin-top: 10px; display: flex; align-items: center; gap: 14px; flex-wrap: wrap; }
.cse-calc .pct { font-family: var(--body); font-size: 14px; font-weight: 700; color: #fff; background: var(--corail-deep); padding: 6px 12px; border-radius: 999px; }
.cse-calc .old { font-size: 16px; color: var(--petrole-brume); text-decoration: line-through; margin-top: 10px; }
.cse-calc .note { font-size: 13.5px; color: var(--petrole-brume); line-height: 1.6; margin-top: 14px; }
@media (max-width: 760px) { .cse-deal { grid-template-columns: 1fr; gap: 24px; text-align: center; } .cse-pct { text-align: center; } .cse-calc { grid-template-columns: 1fr; } }

/* ============================================================
   Page oasis-residentiel (village/residentiel-page — maquette styles.css l.1068-1078 + l.1022-1030).
   En-tête .rs-head, grille .rs-villages (disc-cards + vpill), formulaire contact .cform (mock démo,
   consent RGPD accent corail), astérisque .req. Le reste (facts/feature/disc/df/faq) déjà porté.
   ============================================================ */
.rs-head { max-width: 780px; margin-bottom: clamp(6px,1.2vw,16px); }
.rs-head .eyebrow { margin-bottom: 14px; }
.rs-head h1 { font-size: var(--fs-h1); color: var(--petrole); line-height: 1.04; letter-spacing: -.03em; }
.rs-head .lead { margin-top: 14px; font-size: var(--fs-lead); color: var(--petrole-brume); line-height: 1.6; }
.rs-villages { display: grid; grid-template-columns: 1fr 1fr; gap: var(--gap-grid); }
.rs-villages .disc-ph { position: relative; }
.rs-villages .disc-ph .vpill { position: absolute; left: 14px; bottom: 14px; }
.req { color: var(--corail-deep); font-weight: 700; }
/* formulaire contact (résidentiel — puis /contact/, /residentiel/ marque) */
.cform { background: var(--sable-pale); border-radius: var(--r-card); padding: clamp(26px,3.4vw,44px); }
.cform h2 { font-size: var(--fs-h3); color: var(--petrole); line-height: 1.08; }
.cform .lead { margin-top: 10px; font-size: 15px; color: var(--petrole-brume); max-width: 52ch; }
.cform-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-top: 24px; }
.cform .df.full { grid-column: 1 / -1; }
.cform .consent { grid-column: 1 / -1; display: flex; gap: 11px; align-items: flex-start; font-size: 13px; color: var(--petrole-brume); line-height: 1.5; }
.cform .consent input { flex: none; width: 17px; height: 17px; margin-top: 1px; accent-color: var(--corail-deep); }
.cform-go { margin-top: 22px; display: flex; align-items: center; gap: 16px; flex-wrap: wrap; }
.cform-ok { display: none; color: var(--olivier-deep); font-weight: 700; font-size: 14.5px; }
@media (max-width: 760px) { .rs-villages { grid-template-columns: 1fr; } .cform-grid { grid-template-columns: 1fr; } }

/* ============================================================
   Page oasis-contact (village/contact-page — maquette styles.css l.1004-1007, 1020, 1032-1052).
   En-tête .ct-head, grille formulaire/carte .contact-grid, carte coordonnées .cdest, FAQ centrée
   .ct-faq. Le formulaire réutilise .cform (résidentiel). `.cchan` = composant marque, non porté.
   ============================================================ */
.ct-head { max-width: 760px; margin-bottom: clamp(22px,2.8vw,34px); }
.ct-head .eyebrow { margin-bottom: 14px; }
.ct-head h1 { font-size: var(--fs-h1); color: var(--petrole); line-height: 1.04; letter-spacing: -.03em; }
.ct-head .lead { margin-top: 14px; font-size: var(--fs-lead); color: var(--petrole-brume); line-height: 1.6; }
.contact-grid { display: grid; grid-template-columns: 1.12fr .88fr; gap: clamp(20px,2.6vw,34px); align-items: start; margin-top: clamp(26px,3.4vw,46px); }
.cdest-col { display: flex; flex-direction: column; gap: clamp(16px,2vw,22px); }
.cdest { background: #fff; border-radius: var(--r-card); overflow: hidden; box-shadow: var(--shadow-soft); transition: transform .4s var(--ease), box-shadow .4s var(--ease); }
.cdest:hover { transform: translateY(-5px); box-shadow: var(--shadow-card); }
.cdest-ph { position: relative; aspect-ratio: 16/7; overflow: hidden; }
.cdest-ph img { width: 100%; height: 100%; object-fit: cover; transition: transform .7s var(--ease); }
.cdest:hover .cdest-ph img { transform: scale(1.05); }
.cdest-ph .vpill { position: absolute; left: 14px; bottom: 14px; }
.cdest-b { padding: clamp(18px,2.2vw,26px); }
.cdest-b h3 { font-family: var(--display); font-weight: 700; font-size: var(--fs-h4); color: var(--petrole); line-height: 1.1; }
.cdest-list { margin-top: 14px; display: flex; flex-direction: column; gap: 11px; }
.cdest-list .li { display: flex; gap: 11px; align-items: flex-start; font-size: 14px; color: var(--petrole-brume); line-height: 1.45; }
.cdest-list .li svg { flex: none; width: 18px; height: 18px; color: var(--corail-deep); margin-top: 1px; }
.cdest-list .li a { color: var(--petrole-brume); transition: color .25s var(--ease); }
.cdest-list .li a:hover { color: var(--corail-deep); }
.cdest-cta { margin-top: 20px; display: flex; gap: 18px; flex-wrap: wrap; align-items: center; }
.cdest-map { display: inline-flex; align-items: center; gap: 8px; font-weight: 700; font-size: 13.5px; color: var(--corail-deep); transition: gap .25s var(--ease); }
.cdest-map svg { width: 17px; height: 17px; }
.cdest-map:hover { gap: 11px; }
/* FAQ centrée (réutilise .faq global) */
.ct-faq .sec-head { justify-content: center; text-align: center; margin-bottom: 34px; }
.ct-faq .sec-head .eyebrow { justify-content: center; }
/* Centrage RÉEL du bloc titre (demande dev 2026-07-24 — la maquette laisse le h2 18ch et l'encart
   calés à gauche malgré text-align:center : écart volontaire vs maquette, WP centre vraiment). */
.ct-faq .sec-head { display: block; }
.ct-faq .sec-head h2, .ct-faq .sec-head p { margin-inline: auto; }

/* ÉQUIVALENT GÉNÉRAL de `.dpage>.wrap+section.alt{margin-top:clamp(36px,4.5vw,64px)}` (maquette
   l.645 — jamais porté). 1er sélecteur = pages PHP (adjacence DOM réelle) ; 2e = pages Elementor
   (l'adjacence traverse les conteneurs : .vcon directement après le conteneur .wrap). Corrige le
   FAQ contact collé + les marges latentes cse/residentiel ; aquatique S1 garde son style inline
   identique (même valeur). */
.dpage > .wrap + section.alt,
.dpage > .wrap + .vcon section.alt { margin-top: clamp(36px,4.5vw,64px); }

/* .faq-wrap rétrécissait dans le `.wrap` flex column (margin:auto → shrink-to-fit : 678px au lieu
   de 840) — même piège que .faq/.art-nav (maquette : .wrap n'est pas flex). */
.faq-wrap { width: 100%; }
@media (max-width: 980px) { .contact-grid { grid-template-columns: 1fr; } .cdest-col { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; } }
@media (max-width: 620px) { .cdest-col { grid-template-columns: 1fr; } }

/* ============================================================
   Page recrutement (recrutement/page — maquette styles.css l.1111-1151).
   Intro RH, avantages 4 col, offres dépliables .job* (accordéon max-height), candidature
   .cform--white + champ fichier. Les sélecteurs `.job-ul, .job-body-in ul` sont DOUBLÉS : le corps
   des offres vient du post_content CPT dont les <ul> n'ont pas de classe (équivalent documenté).
   ============================================================ */
.rec-intro { margin-top: clamp(26px,3.4vw,42px); }
.rec-count { margin: clamp(16px,1.8vw,22px) 0 clamp(18px,2vw,26px); font-size: var(--fs-label); font-weight: 600; color: var(--petrole); }
.rec-count b { font-family: var(--display); }
.rec-illus { opacity: .6; font-weight: 600; }
/* composant atouts (maquette l.178-185 + MQ @900/@560 — JAMAIS porté : première utilisation ici,
   le bloc home réassurance a ses propres classes s-*) */
.atouts { display: grid; grid-template-columns: repeat(3,1fr); gap: var(--gap-grid); }
.atout { background: #fff; border-radius: 20px; padding: 26px 24px; box-shadow: var(--shadow-soft); transition: transform .4s var(--ease), box-shadow .4s var(--ease); }
.atout:hover { transform: translateY(-5px); box-shadow: var(--shadow-card); }
.atout .ic { width: 48px; height: 48px; border-radius: 14px; background: var(--sable-pale); color: var(--petrole); display: flex; align-items: center; justify-content: center; margin-bottom: 16px; transition: background .35s var(--ease), color .35s; }
.atout .ic svg { width: 24px; height: 24px; stroke: currentColor; }
.atout:hover .ic { background: var(--corail-deep); color: #fff; }
.atout h4 { color: var(--petrole); font-size: 16.5px; letter-spacing: -.01em; }
.atout p { font-size: 13px; color: var(--petrole-brume); margin-top: 7px; line-height: 1.5; }
@media (max-width: 900px) { .atouts { grid-template-columns: repeat(2,1fr); } }
@media (max-width: 560px) { .atouts { grid-template-columns: 1fr; } }
/* avantages : 4 cartes sur une ligne en desktop (au lieu du 3+1 hérité de .atouts) */
.atouts.rec-av { grid-template-columns: repeat(4,minmax(0,1fr)); }
@media (max-width: 1040px) { .atouts.rec-av { grid-template-columns: repeat(2,1fr); } }
@media (max-width: 560px) { .atouts.rec-av { grid-template-columns: 1fr; } }
/* offres : filtres alignés à gauche */
#jobTabs { justify-content: flex-start; }
/* offres — cartes dépliables */
.job-list { display: flex; flex-direction: column; gap: 14px; }
.job { background: #fff; border-radius: 18px; box-shadow: var(--shadow-soft); overflow: hidden; transition: box-shadow .3s var(--ease); }
.job:hover { box-shadow: var(--shadow-card); }
.job-head { width: 100%; display: flex; align-items: center; justify-content: space-between; gap: 18px; padding: clamp(18px,2vw,24px) clamp(18px,2.2vw,26px); background: none; border: 0; cursor: pointer; text-align: left; font-family: var(--body); }
.job-ct { min-width: 0; }
.job-title { display: block; font-family: var(--display); font-weight: 700; font-size: clamp(18px,1.9vw,22px); color: var(--petrole); letter-spacing: -.01em; line-height: 1.12; }
.job-meta { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin-top: 9px; }
.job-meta .jm { font-size: var(--fs-meta); color: var(--petrole-brume); font-weight: 600; }
.job-meta .jsep { width: 1px; height: 12px; background: rgba(34,56,63,.2); }
.job-cat { background: var(--sable-pale); color: var(--petrole); font-weight: 700; font-size: 11px; letter-spacing: .05em; text-transform: uppercase; padding: 4px 11px; border-radius: 999px; }
.job-x { flex: none; display: inline-flex; align-items: center; gap: 8px; font-weight: 700; font-size: var(--fs-label); color: var(--corail-deep); white-space: nowrap; }
.job-x .jchev { width: 18px; height: 18px; transition: transform .35s var(--ease); }
.job.open .job-x .jchev { transform: rotate(180deg); }
.job-body { max-height: 0; overflow: hidden; transition: max-height .45s var(--ease); }
.job.open .job-body { max-height: 720px; }
.job-body-in { padding: 2px clamp(18px,2.2vw,26px) clamp(20px,2.4vw,26px); }
.job-body-in p { color: var(--petrole-brume); line-height: 1.6; }
.job-body-in h4 { font-family: var(--display); font-weight: 700; color: var(--petrole); margin: 15px 0 9px; font-size: 16px; }
.job-ul, .job-body-in ul { list-style: none; display: flex; flex-direction: column; gap: 9px; margin-bottom: 20px; }
.job-ul li, .job-body-in ul li { position: relative; padding-left: 28px; color: var(--petrole-brume); line-height: 1.5; }
.job-ul li b, .job-body-in ul li b { color: var(--petrole); font-weight: 700; }
.job-ul li::before, .job-body-in ul li::before { content: ""; position: absolute; left: 0; top: 2px; width: 17px; height: 17px; border-radius: 50%; background: var(--corail-pale); }
.job-ul li::after, .job-body-in ul li::after { content: ""; position: absolute; left: 6px; top: 5px; width: 4px; height: 8px; border-right: 2px solid var(--corail-deep); border-bottom: 2px solid var(--corail-deep); transform: rotate(42deg); }
/* candidature — panneau blanc sur section sable + champ fichier */
.cform--white { background: #fff; box-shadow: var(--shadow-card); }
.rec-file input[type=file] { width: 100%; font-family: var(--body); font-size: 14px; color: var(--petrole-brume); background: #fff; border: 1.5px solid rgba(34,56,63,.12); border-radius: 12px; padding: 10px 12px; cursor: pointer; transition: border-color .2s; }
.rec-file input[type=file]:hover { border-color: rgba(34,56,63,.28); }
.rec-file input[type=file]::file-selector-button { font-family: var(--body); font-weight: 700; font-size: 13px; color: #fff; background: var(--corail-deep); border: 0; border-radius: 999px; padding: 9px 16px; margin-right: 14px; cursor: pointer; transition: background .25s; }
.rec-file input[type=file]::file-selector-button:hover { background: var(--corail); }
.rec-file-hint { display: block; font-size: var(--fs-micro); color: var(--petrole-brume); opacity: .8; margin-top: 4px; }

/* ============================================================
   Page 404 (maquette styles.css l.1083-1092 — template 404.php du thème enfant).
   ============================================================ */
.nf { max-width: 700px; margin: 0 auto; text-align: center; padding: clamp(24px,7vw,90px) 0 clamp(40px,8vw,110px); }
.nf-num { font-family: var(--display); font-weight: 700; font-size: clamp(110px,22vw,220px); line-height: .86; letter-spacing: -.04em; background: linear-gradient(160deg,var(--sable) 0%,var(--corail-pale) 120%); -webkit-background-clip: text; background-clip: text; color: transparent; }
.nf h1 { font-size: var(--fs-h2); color: var(--petrole); line-height: 1.06; margin-top: 4px; }
.nf p { color: var(--petrole-brume); font-size: var(--fs-lead); line-height: 1.65; margin: 16px auto 0; max-width: 46ch; }
.nf-cta { margin-top: 32px; display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; }
.nf-links { margin-top: 30px; font-size: 13.5px; color: var(--petrole-brume); display: flex; gap: 14px; justify-content: center; flex-wrap: wrap; align-items: center; }
.nf-links .lbl { font-weight: 700; letter-spacing: .04em; text-transform: uppercase; font-size: var(--fs-eyebrow); }
.nf-links a { color: var(--corail-deep); font-weight: 700; position: relative; }
.nf-links a::after { content: ""; position: absolute; left: 0; right: 0; bottom: -3px; height: 1.5px; background: currentColor; transform: scaleX(0); transform-origin: left; transition: transform .3s var(--ease); }
.nf-links a:hover::after { transform: scaleX(1); }

/* ============================================================
   SKIN THELIS SIMPLEBLOCK — sélecteur de semaines réel (thelis-integration.spec.md, passe skin)
   Reskin CSS du web component <thr-simpleblock> aux tokens Montana Parc (esprit mock .bk-week).
   Périmètre : UNIQUEMENT sous `.bk` (single hébergement à paire complète) — zéro fuite.
   Méthode : chaînes Thelis reprises VERBATIM + préfixe `.bk` (+1 classe → gagne sur leur feuille
   1448.style.min.css chargée après la nôtre). AUCUN !important sauf le bouton Réserver (contre
   `.thr .btn-primary{...!important}` côté Thelis). Classes stables only (ng-if retire des nœuds,
   jamais de :nth-child). Cible = cohérence forte, pas pixel-perfect (DOM/données ≠ mock).
   ============================================================ */

/* racine : annule le panneau gris Thelis (la carte .bk fournit déjà blanc + r-22 + ombre) */
.bk .thr-simpleblock { padding: 0; background-color: transparent; }

/* barre selects (engine) : à plat, uppercase retiré (remis ciblé sur les labels) */
.bk .thr-simpleblock .thr-simpleblock-engine { padding: 0; background: transparent; text-transform: none; }
.bk .thr-simpleblock .thr-simpleblock-engine .thr-simpleblock-engine-row { padding: 0; min-height: 0; }
/* labels (« Mois du séjour »…) : famille .bk-sel .l */
.bk .thr-simpleblock .thr-simpleblock-engine .thr-simpleblock-engine-row.thr-simpleblock-engine-row-simple .thr-simpleblock-engine-inputs > * > span { font-size: var(--fs-micro); font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--petrole-brume); }
/* selects : famille .bk-sel select — chevron data-URI (stroke = valeur du token --petrole,
   var() impossible dans une data-URI), appearance:none comme le mock, :focus natif préservé */
.bk .thr-simpleblock .thr-simpleblock-engine .thr-simpleblock-engine-row.thr-simpleblock-engine-row-simple .thr-simpleblock-engine-inputs > * select { appearance: none; -webkit-appearance: none; background-color: var(--sable-pale); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232C4A52' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 11px center; background-size: 15px 15px; border: 0; border-radius: 11px; padding: 11px 34px 11px 13px; height: auto; font-family: var(--display); font-weight: 700; font-size: 14px; color: var(--petrole); text-transform: none; cursor: pointer; }

/* onglets mois (composant sans équivalent mock — design validé) : famille .bk-week */
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-months { gap: 6px; margin-top: 16px; }
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-months .thr-simpleblock-month { background-color: var(--sable-pale); color: var(--petrole); font-family: var(--body); font-size: 13px; font-weight: 600; text-transform: none; border-radius: 9px; padding: 8px 0; transition: background .2s; }
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-months .thr-simpleblock-month:hover { background-color: var(--sable-hover); }
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-months .thr-simpleblock-month.thr-simpleblock-month-current, .bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-months .thr-simpleblock-month.thr-simpleblock-month-current:hover { background-color: #fff; color: var(--petrole); box-shadow: inset 0 0 0 2px var(--corail-deep); font-weight: 700; }

/* zone résultats */
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results { padding-top: 14px; }
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays { gap: 9px; }

/* ligne semaine : carte façon .bk-week (bordures tableau Thelis annulées) */
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay { border: 0; background-color: var(--sable-pale); border-radius: 13px; padding: 12px 14px; transition: background .2s; }
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay.unavailable { background-color: var(--sable-pale); opacity: .62; }
/* ligne d'en-tête (du/au) : PAS une carte — à plat */
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row.thr-simpleblock-headers .thr-simpleblock-stay { background-color: transparent; border-radius: 0; padding: 0 14px; }
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row.thr-simpleblock-headers .thr-simpleblock-stay > div > div { color: var(--petrole); font-size: 13px; font-weight: 600; }

/* dates du séjour : famille .bk-week .wd */
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay .thr-simpleblock-stay-period { color: var(--petrole); }
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay .thr-simpleblock-stay-period .label { color: var(--petrole-brume); font-size: 11px; }
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay .thr-simpleblock-stay-period .date { color: var(--petrole); font-size: 13px; font-weight: 600; line-height: 1.3; }

/* prix : famille .bk-week .wp (le taupe gras 120% Thelis → lagune display) */
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay .thr-simpleblock-stay-price { color: var(--petrole-brume); font-size: 12px; }
/* (chaîne Thelis exacte : …-stay-price-container:not(…)>* — leur (0,9,0) exige la reprise verbatim) */
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay .thr-simpleblock-stay-price-container:not(.thr-simpleblock-stay-unavailable) > * .thr-simpleblock-price { font-family: var(--display); font-weight: 700; font-size: 15px; color: var(--lagune); }
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay .thr-simpleblock-stay-price-container:not(.thr-simpleblock-stay-unavailable) > * .thr-simpleblock-striked-price { color: var(--petrole-brume); font-size: 11.5px; font-weight: 500; text-decoration: line-through; }

/* « Complet » (stock 0) : famille .bk-week.off .wp — .text-center est générique bootstrap → scope serré */
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay .thr-simpleblock-stay-price-container > .text-center { color: var(--petrole-brume); font-size: 12px; font-weight: 600; }
/* « Cette période n'est plus disponible » (passé) : italique Thelis retiré */
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay .thr-simpleblock-stay-price.thr-simpleblock-stay-unavailable { color: var(--petrole-brume); font-size: 12px; font-weight: 600; font-style: normal; }

/* badge promo + tooltip (non observés en données réelles — stylés d'après le template, QA forcée) */
.bk .thr-simpleblock .thr-promotion .thr-promotion-block { background-color: var(--olivier-deep); color: #fff; width: auto; height: auto; padding: 4px 8px; border-radius: 7px; font-size: 12px; font-weight: 700; }
.bk .thr-simpleblock .thr-promotion .thr-promotion-description { background-color: #fff; border: 2px solid var(--sable); border-radius: var(--r-img); color: var(--petrole); box-shadow: var(--shadow-soft); }
.bk .thr-simpleblock .thr-promotion .thr-promotion-description .thr-promotion-description-name { color: var(--olivier-deep); }
.bk .thr-simpleblock .thr-promotion .thr-promotion-description .thr-promotion-description-title, .bk .thr-simpleblock .thr-promotion .thr-promotion-description .thr-promotion-description-thumbs { color: var(--petrole-brume); font-size: 14px; }

/* tooltip info prix (icône FA chargée par le loader) */
.bk .thr-simpleblock .thr-informations-price-info { color: var(--petrole-brume); }
.bk .thr-simpleblock .thr-price-information { background-color: #fff; color: var(--petrole); border-radius: var(--r-img); box-shadow: var(--shadow-soft); }

/* états transitoires */
.bk .thr-simpleblock .thr-simpleblock-loading { color: var(--petrole-brume); background-color: var(--sable-pale); border-radius: 13px; }
.bk .thr-simpleblock .thr-simpleblock-error { color: var(--petrole); background-color: var(--corail-pale); border-radius: 13px; }

/* bouton Réserver : cible .bk-go. SEUL !important du skin (contre `.thr .btn-primary{color/background !important}`
   côté Thelis). Le bouton porte `btn btn-primary` → notre .btn/.btn.btn-primary global matche AUSSI :
   toutes les propriétés visuelles sont posées ici pour que les deux jeux ne se chevauchent pas. */
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay button.btn.thr-add-to-cart { background: var(--corail-deep) !important; color: #fff !important; font-family: var(--body) !important; border: 0; border-radius: 14px; padding: 12px 18px; font-weight: 700; font-size: 16px; line-height: 1.2; letter-spacing: normal; text-transform: none; white-space: nowrap; display: inline-flex; align-items: center; justify-content: center; gap: 8px; cursor: pointer; box-shadow: none; transform: none; transition: transform .25s var(--ease), box-shadow .25s; }
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay button.btn.thr-add-to-cart:hover, .bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay button.btn.thr-add-to-cart:focus { background: var(--corail-deep) !important; color: #fff !important; transform: translateY(-2px); box-shadow: 0 18px 36px -16px rgba(234,86,56,.7); }

/* --- Layout : forcer la forme MOBILE de Thelis dans la sidebar (leurs @media regardent le
   VIEWPORT, pas le conteneur → à 1440px ils tassent la table 5 colonnes dans 336px = overflow).
   Nos règles hors MQ + préfixe .bk battent leurs règles MQ (spécificité), tous viewports. --- */
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row { flex-direction: column; }
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays { flex-direction: column; flex-basis: auto; }
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay { flex-direction: row; flex-basis: auto; justify-content: space-between; align-items: center; flex-wrap: nowrap; gap: 10px; }
/* en-têtes colonnes (du/au) : inutiles en layout cartes — masquées (comportement mobile Thelis) */
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row.thr-simpleblock-headers { display: none; }
/* dates dans la carte : compactes (du sam. 04 / au sam. 11), à gauche — famille .bk-week .wd */
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay .thr-simpleblock-stay-period { display: flex; flex-direction: row; flex-basis: auto; flex-grow: 1; gap: 8px; text-align: left; align-items: center; }
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay .thr-simpleblock-stay-period .date { display: inline; }
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay .thr-simpleblock-stay-period .date.mobile { display: none; }
/* prix + bouton : à droite de la carte, empilés serrés */
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay .thr-simpleblock-stay-price-container { display: flex; flex-direction: column; flex-basis: auto; width: auto; align-items: flex-end; justify-content: center; gap: 4px; margin: 0; padding: 0; text-align: right; }
.bk .thr-simpleblock .thr-simpleblock-simple .thr-simpleblock-results .thr-simpleblock-row .thr-simpleblock-stays .thr-simpleblock-stay .thr-simpleblock-stay-period > span { display: flex; gap: 4px; align-items: baseline; white-space: nowrap; }

/* ============================================================
   BLOC village/recherche-thelis (passe 1) — popovers d'édition de la resabar hero.
   État repos = maquette au pixel (l.491-496 portées, intouchées). Ici : uniquement les popovers
   cachés (aucune référence maquette — design tokens validé à l'œil, spec §Structure) + l'ancrage.
   Le popover Période (2 inputs date natifs) est le placeholder passe 1 du picker maison (passe 2).
   ============================================================ */
.resabar { position: relative; } /* ancrage des popovers (aucun effet visuel au repos) */
.resa-pop { position: absolute; top: calc(100% + 10px); left: 8px; z-index: 40; min-width: 280px; background: #fff; border-radius: 14px; box-shadow: var(--shadow-card); padding: 16px; display: flex; flex-direction: column; gap: 12px; text-align: left; }
.resa-pop[hidden] { display: none; }
.rp-field { display: flex; flex-direction: column; gap: 6px; }
.rp-field label, .rp-step .rp-lab { font-size: var(--fs-micro); font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--petrole-brume); }
.rp-field input[type="date"], .rp-field select { width: 100%; appearance: none; -webkit-appearance: none; background: var(--sable-pale); border: 0; border-radius: 11px; padding: 11px 13px; font-family: var(--display); font-weight: 700; font-size: 14px; color: var(--petrole); cursor: pointer; }
/* chevron du select (même data-URI que le skin widget — stroke = valeur du token --petrole) */
.rp-field select { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232C4A52' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 11px center; background-size: 15px 15px; padding-right: 34px; }
.rp-step { display: flex; align-items: center; justify-content: space-between; gap: 14px; }
.rp-ctr { display: flex; align-items: center; gap: 10px; }
.rp-btn { width: 32px; height: 32px; border: 0; border-radius: 50%; background: var(--sable-pale); color: var(--petrole); font-size: 17px; font-weight: 700; line-height: 1; cursor: pointer; display: flex; align-items: center; justify-content: center; transition: background .2s; }
.rp-btn:hover, .rp-btn:focus { background: var(--sable-hover); color: var(--petrole); }
.rp-num { font-family: var(--display); font-weight: 700; font-size: 15px; color: var(--petrole); min-width: 18px; text-align: center; }
@media (max-width: 560px) { .resa-pop { left: 8px; right: 8px; min-width: 0; } }

/* --- Passe 2 : date-range picker maison (popover Période — spec §Passe 2, tokens only) --- */
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.resa-pop-cal { width: 560px; max-width: calc(100vw - 32px); }
.rp-cal { display: flex; flex-direction: column; gap: 10px; }
.rp-cal-head { display: flex; align-items: center; gap: 10px; }
.rp-nav:disabled { opacity: .35; cursor: default; }
.rp-nav:disabled:hover { background: var(--sable-pale); }
.rp-cal-titles { flex: 1; display: flex; justify-content: space-around; font-family: var(--display); font-weight: 700; font-size: 15px; color: var(--petrole); text-transform: capitalize; }
.rp-cal-months { display: flex; gap: 18px; }
.rp-month { flex: 1; min-width: 0; }
.rp-grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 2px; }
.rp-dow { font-size: var(--fs-micro); font-weight: 700; letter-spacing: .05em; text-transform: uppercase; color: var(--petrole-brume); text-align: center; padding: 4px 0; }
.rp-empty { height: 32px; }
.rp-day { height: 32px; border: 0; background: transparent; border-radius: 9px; font-family: var(--body); font-size: 13px; color: var(--petrole); cursor: pointer; display: flex; align-items: center; justify-content: center; padding: 0; transition: background .15s; }
.rp-day:disabled { color: var(--petrole-brume); opacity: .4; cursor: default; }
/* .is-sat supprimé (contrainte samedi = erreur d'interprétation, cf. thelis-search.js) */
.rp-day:not(:disabled):hover, .rp-day:not(:disabled):focus { background: var(--sable-hover); color: var(--petrole); }
.rp-day.in-range, .rp-day.in-range:not(:disabled):hover { background: var(--sable-pale); border-radius: 0; }
.rp-day.is-begin, .rp-day.is-end, .rp-day.is-begin:not(:disabled):hover, .rp-day.is-end:not(:disabled):hover, .rp-day.is-begin:not(:disabled):focus, .rp-day.is-end:not(:disabled):focus { background: var(--corail-deep); color: #fff; font-weight: 700; border-radius: 9px; }
.rp-cal-hint { font-size: var(--fs-micro); color: var(--petrole-brume); margin: 0; }
@media (max-width: 560px) { .resa-pop-cal { width: auto; } }
.rp-day.is-begin:disabled, .rp-day.is-end:disabled { opacity: 1; cursor: default; } /* les ancres arrivée/départ restent pleines même désactivées (mode opposé) */

/* ============================================================
   FORMULAIRE CONTACT — Elementor Pro Form (docs/forms/contact.spec.md v2, mécanisme clé en main)
   Override scopé `.mp-cform` : le markup Elementor (relevé 4.2.1 : .elementor-field-group /
   -field / -field-label / -select-wrapper / -field-subgroup / -message…) reçoit les styles du
   mock .cform/.df (mêmes tokens, mêmes valeurs). Conteneurs : .contact-grid et .cform sont des
   e-flexbox → reset padding préventif (§7.5) + display grid réaffirmé (l'ordre de chargement
   des feuilles Elementor peut battre la règle .contact-grid historique).
   États d'ERREUR : aucune référence maquette (conçus aux tokens — validation à l'œil).
   ============================================================ */
.e-con.contact-grid { display: grid; padding: 0; }
.e-con.cform { display: flex; flex-direction: column; padding: clamp(26px,3.4vw,44px); }
.mp-cform.elementor-widget-form .elementor-form-fields-wrapper { display: grid; grid-template-columns: 1fr 1fr; gap: 15px; margin-top: 24px; padding: 0; }
.mp-cform.elementor-widget-form .elementor-field-group { display: flex; flex-direction: column; flex-wrap: nowrap; align-items: stretch; gap: 7px; margin: 0; padding: 0; max-width: none; width: 100%; } /* width:100% neutralise .elementor-col-50 (width:50% de la cellule) ; nowrap neutralise le flex-wrap:wrap d'Elementor qui, en colonne + hauteur étirée par la grille, fait passer le champ EN COLONNE À CÔTÉ du label */
.mp-cform.elementor-widget-form .elementor-field-group.elementor-col-100, .mp-cform.elementor-widget-form .elementor-field-type-submit { grid-column: 1 / -1; }
.mp-cform.elementor-widget-form .elementor-field-label { font-size: 12.5px; font-weight: 700; color: var(--petrole-brume); letter-spacing: .02em; }
.mp-cform.elementor-widget-form .elementor-field-label.elementor-screen-only { position: absolute; clip: rect(0 0 0 0); } /* label vide acceptance */
.mp-cform.elementor-widget-form .elementor-field-required::after { content: none; } /* pas d'astérisque maquette (novalidate visuel) */
.mp-cform.elementor-widget-form .elementor-field-textual, .mp-cform.elementor-widget-form .elementor-field-textual:focus { font-family: var(--body); font-size: 15px; color: var(--petrole); background: #fff; border: 1.5px solid rgba(34,56,63,.12); border-radius: 12px; padding: 13px 15px; width: 100%; transition: border-color .2s; box-shadow: none; }
.mp-cform.elementor-widget-form .elementor-field-textual:focus { outline: none; border-color: var(--corail-deep); }
.mp-cform.elementor-widget-form textarea.elementor-field-textual { min-height: 120px; resize: vertical; }
.mp-cform.elementor-widget-form .elementor-select-wrapper select { appearance: none; -webkit-appearance: none; -moz-appearance: none; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%232C4A52' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 13px center; background-size: 15px 15px; padding-right: 40px; cursor: pointer; }
.mp-cform.elementor-widget-form .elementor-select-wrapper .select-caret-down-wrapper { display: none; } /* caret SVG propre au widget (élément, pas ::before) : doublait notre chevron data-URI */
/* consentement : famille .cform .consent */
.mp-cform.elementor-widget-form .elementor-field-type-acceptance .elementor-field-subgroup { display: flex; gap: 11px; align-items: flex-start; font-size: 13px; color: var(--petrole-brume); line-height: 1.5; }
.mp-cform.elementor-widget-form .elementor-field-type-acceptance input { flex: none; width: 17px; height: 17px; margin-top: 1px; accent-color: var(--corail-deep); }
.mp-cform.elementor-widget-form .elementor-field-type-acceptance .elementor-field-option label { font-size: 13px; color: var(--petrole-brume); }
/* bouton : famille .btn/.cform-go (pilule corail) */
.mp-cform.elementor-widget-form .elementor-field-type-submit { margin-top: 7px; }
.mp-cform.elementor-widget-form .elementor-button, .mp-cform.elementor-widget-form .elementor-button:hover, .mp-cform.elementor-widget-form .elementor-button:focus { font-family: var(--body); font-weight: 700; font-size: 15px; border: 0; cursor: pointer; border-radius: 999px; padding: 13px 24px; background: var(--corail-deep); color: #fff; box-shadow: 0 14px 30px -12px rgba(234,86,56,.7); transition: transform .25s var(--ease), box-shadow .25s; width: auto; align-self: flex-start; }
.mp-cform.elementor-widget-form .elementor-button:hover, .mp-cform.elementor-widget-form .elementor-button:focus { transform: translateY(-2px); box-shadow: 0 22px 42px -12px rgba(234,86,56,.85); }
/* états — SUCCÈS verbatim mock (olivier), ERREURS conçues aux tokens (aucune réf maquette) */
.mp-cform.elementor-widget-form .elementor-message::before { display: none; } /* icône eicon du widget : le mock n'en a pas (le ✓ du succès est DANS le texte verbatim) */
.mp-cform.elementor-widget-form .elementor-message.elementor-message-success { color: var(--olivier-deep); font-weight: 700; font-size: 14.5px; }
.mp-cform.elementor-widget-form .elementor-message.elementor-message-danger { color: var(--corail-deep); font-weight: 600; font-size: 13px; }
.mp-cform.elementor-widget-form .elementor-error .elementor-field-textual { border-color: var(--corail-deep); }
.mp-cform.elementor-widget-form .elementor-field-group .elementor-message { margin-top: 4px; }
@media (max-width: 760px) { .mp-cform.elementor-widget-form .elementor-form-fields-wrapper { grid-template-columns: 1fr; } }
