/*
Theme Name: Ski Fun Manigod
Theme URI: https://www.skifun-manigod.fr/
Author: EPNB
Description: Thème bloc (FSE) pour Ski Fun Manigod — vitrine + accueil du moteur de réservation. Charte : fond #F2EDE6, encre #2C2C2C, matière #5A3A26, action #C97F2E. Police Montserrat.
Version: 0.13.3
Requires at least: 6.5
Tested up to: 6.7
Requires PHP: 8.1
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: skifun-manigod
*/

/* ================= Pied de page enrichi v0.5.0 (21/09/2026) =================
   Trois demandes traitées ensemble (voir
   proposition-demo-footer-mon-compte-2026-09-21.md pour l'arbitrage client
   qui a précédé ce développement) :
   1. Récapitulatif de contenu (.sfm-footer-recap dans parts/footer.html) :
      dernières sections substantielles de Location de ski/Entretien
      skis/Location Snowscoot + 3 premières sections d'Accès & Contact,
      contenu curaté à la main (pas extrait dynamiquement), masqué sur
      l'accueil et la page de réservation via un filtre `render_block` dans
      functions.php plutôt qu'un doublon de template part.
   2. Menu de pied de page paramétrable (.sfm-footer-nav) : bloc Navigation
      natif WordPress, éditable directement dans Apparence > Éditeur —
      aucun champ de réglages dédié, choix client du 21/09. Liens de
      placeholder (mentions légales/CGV/confidentialité) à remplacer par de
      vraies URLs dès que ces pages existeront (reste-à-faire #13 de
      CLAUDE.md, toujours ouvert).
   Voir aussi wp_plugandrent v0.6.0 (même jour) pour les deux demandes
   admin associées (masquage du menu Démo, création de pages en brouillon)
   — sans lien de code avec ce lot thème, traitées ensemble côté suivi
   projet uniquement.

   ⚠️ Point 1 (récapitulatif) RETIRÉ en v0.6.0 (22/09/2026), voir le bloc de
   commentaire juste au-dessus de `.sfm-footer-top` plus bas pour le détail
   du remplacement (fusionné dans le pied de page + 3 cartes de bas de page
   sur templates/page.html). Paragraphe ci-dessus conservé tel quel par
   convention de journal chronologique (voir CLAUDE.md), jamais réécrit
   après coup. Le point 2 (menu de pied de page) reste d'actualité, avec un
   correctif supplémentaire — voir le commentaire de `.sfm-footer-nav`. */

/* ================= Correctifs v0.4.9 (21/09/2026) =================
   Habillage du formulaire de contact (Contact Form 7, page "Accès &
   Contact") à la charte du thème — demandé par le client, itéré en 3
   temps le même jour : (1) style de base (couleurs/typo/radius alignés
   sur theme.json, cf. règles `.sfm-page-main .wpcf7-form` plus bas),
   (2) `box-sizing: border-box` sur les champs — sans ça, `width:100%` +
   le `padding`/la bordure du champ s'ajoutaient EN PLUS des 100%
   (comportement par défaut `content-box`), donc le champ débordait
   légèrement à droite de la carte, symptôme remonté par le client comme
   "pas de marge à droite", (3) bouton "Envoyer" aligné à droite via
   `:has()` plutôt qu'une classe dédiée — CF7 ne distingue pas par
   classe le `<p>` qui contient le bouton submit des autres champs, et
   `:has()` est désormais largement supporté (Chrome/Edge/Safari de
   longue date, Firefox depuis fin 2023) ; pas de solution de repli
   `float` ajoutée, non nécessaire une fois validé par le client. Le
   bouton lui-même n'a pas besoin d'être recoloré : il hérite déjà du
   style `button` global de `theme.json` (WordPress applique le style
   "bouton" des styles globaux aux `input[type=submit]` en plus des
   blocs Bouton). Voir DECISIONS.md pour le détail complet. */

/* ================= Correctifs v0.4.8 (21/09/2026) =================
   1. `page-templates/reservation.php` : ajout d'un bandeau `.sfm-page-hero`
      (éditorial identique aux 4 autres pages de contenu — cf. v0.4.7) — ce
      template étant un gabarit PHP classique et non un template FSE, le
      titre `<h1>` est écrit à la main plutôt que via le bloc `wp:post-title`
      ; il hérite néanmoins automatiquement de la typographie H1 globale
      (`theme.json` > `styles.elements.h1`), qui s'applique à toute balise
      `<h1>` du site, pas seulement au bloc — aucun CSS de police
      supplémentaire n'a donc été nécessaire, seulement un reset de marge
      (`.sfm-page-hero h1 { margin: 0; }`).
   2. `page-templates/reservation.php` : ajout d'une photo de boutique
      (`.sfm-reservation-photo`), au-dessus du tunnel, réutilisant l'image
      réelle déjà en place sur l'accueil (`assets/images/boutique-facade.jpg`)
      et le même habillage "badge sur photo" que `.sfm-shop-photo` (v0.4.2/
      v0.4.5) plutôt qu'un nouveau composant.
   3. `content/skifun-pages.xml` : correction de la logique de décalage J+7
      du sélecteur de dates du widget d'accueil, pour appliquer exactement
      la règle validée côté client (cf. `wp_plugandrent` v0.5.0) — décalage
      de la date de fin à J+7 uniquement si elle n'était pas déjà définie,
      ou si la nouvelle date de début la dépasse. Ajout d'un appel best-effort
      à `GET /wp-json/plugandrent/v1/booking-window` pour borner les champs
      date (min/max) sur les dates d'ouverture/fermeture de saison réglées
      côté plugin, avec repli silencieux (`.catch()`) si le plugin est
      absent/inactif ou la requête échoue — le widget reste fonctionnel dans
      tous les cas, sans dépendance dure au plugin.
*/

/* ================= Compatibilité avec le plugin wp_plugandrent =================
   "Requires PHP" aligné sur celui du plugin (8.1, cf. wp-plugandrent.php) plutôt
   que laissé à 7.4 : le thème lui-même n'a pas besoin de 8.1 pour son propre code,
   mais un hébergement en 7.4 ferait tourner le site normalement tout en désactivant
   silencieusement le plugin (simple notice admin, pas d'erreur visible) — la
   réservation en ligne semblerait "juste absente" sans explication. Déclarer la
   même exigence ici rend le problème visible dès l'activation du thème plutôt
   qu'après coup. Le thème ne DÉPEND pas du plugin pour autant : voir
   functions.php (jeton {lien_reservation}) et page-templates/reservation.php,
   tous deux avec repli si le plugin est absent/inactif.
*/

/* ================= Correctifs v0.4.1 (20/09/2026) =================
   1. `screenshot.png` ajouté à la racine du thème (absent jusqu'ici) —
      mockup illustratif (pas une capture d'un site réellement déployé,
      aucune instance n'étant encore en ligne), avec le vrai logo client.
   2. Ce fichier `style.css` est désormais aussi chargé côté site public
      (`wp_enqueue_style` dans functions.php, hook `wp_enqueue_scripts`) —
      jusqu'ici seul `add_editor_style()` le chargeait, UNIQUEMENT dans
      l'éditeur de blocs. Sans ce chargement front, tout ce qui suit dans ce
      fichier (topbar, cartes de réassurance, footer, newsletter) restait
      sans effet pour les visiteurs : arrière-plan du menu resté à la
      couleur par défaut, cartes de réassurance et pied de page sans leur
      habillage. Voir le commentaire dans functions.php pour le détail.
   3. Logo par défaut ajouté (`assets/images/skifun-logo-icon.png`, réglé
      automatiquement à l'activation si aucun logo n'est déjà choisi) — le
      bloc Logo du site (header + footer) affichait un espace vide tant
      qu'aucun logo n'avait été téléversé manuellement.
*/

/* ================= Contenu v0.4.4 (20/09/2026) =================
   Fichier `content/skifun-pages.xml` (import WXR des 4 pages vitrine
   secondaires) revérifié et mis à jour par rapport au contenu alors
   réellement visible sur skifun-manigod.fr (le fichier d'origine, du
   14/09, datait déjà de 6 jours) :
   - Location de ski : nouveau bloc de 4 questions/réponses ("Où louer des
     skis à Manigod ?", etc.) ajouté sur le site depuis la première capture,
     absent du fichier — ajouté. Bloc "Pourquoi louer votre ski..." retiré
     de cette page (repris tel quel du widget d'accueil Jimdo, déjà
     entièrement couvert par les cartes de la page d'accueil du thème —
     redondant plutôt que du contenu propre à cette page).
   - Location Snowscoot : réponses de la FAQ alignées mot pour mot sur le
     texte actuellement en ligne (légèrement reformulées côté Jimdo depuis
     la première capture) + paragraphe de conclusion ajouté sur le site
     depuis, absent du fichier.
   - Accès & Contact : bloc "Accès routier" restructuré en liste à puces
     (3 lignes), comme actuellement présenté sur le site en ligne, au lieu
     d'un unique paragraphe.
   - Entretien skis : vérifié, aucun écart avec le site en ligne.
   Contenu uniquement (texte) : aucune couleur, police ou classe issue du
   site Jimdo d'origine — les blocs restent des blocs Gutenberg génériques
   (paragraphe/titre/liste/tableau) qui héritent uniquement de la charte du
   thème `skifun-manigod` (theme.json) à l'import, comme pour la première
   version de ce fichier.
*/

/* ================= Correctifs v0.4.5 (20/09/2026) =================
   Écarts graphiques maquette ↔ thème relevés le 20/09/2026 :
   1. Pied de page : logo complet (icône + "SKIFUN" + "MANIGOD") au lieu du
      pictogramme seul (absent du réglage "Logo du site", propre à cette
      zone — voir parts/footer.html) ; libellés de colonne ("Nous trouver",
      "Contact") passés en blanc gras (étaient en cuivre clair, non gras).
   2. Accueil et pages de contenu élargis (1180px → 1240px pour les
      sections de l'accueil, 780px → 1240px pour le conteneur des pages de
      contenu, cf. templates/page.html et theme.json) — restait sensiblement
      plus étroit que la maquette sans passer en pleine largeur.
   3. Carte "La boutique" : vraie photo de façade (bloc Image) à la place
      de l'encart "photo à venir" — voir images-extraites-maquette/.
   4. Textes du bandeau récapitulatif alignés mot pour mot sur la maquette
      ("Chaussures confortables" au lieu de "Chaussures" + "confortables,
      ..." ; "Conseils" → "Conseils personnalisés" ; texte du bas repris
      tel quel) — voir templates/front-page.html.
   5. Cartes "Nos services" (Location de ski / Entretien skis / Snowscoot) :
      support de l'image mise en avant de la page liée, avec repli sur une
      photo repère extraite de la maquette puis sur l'encart "photo à
      venir" — voir le shortcode [sfm_page_thumbnail] dans functions.php.
   6. Le bouton "Réserver en ligne" de l'accueil pouvait renvoyer vers
      l'ancien site externe même une fois le plugin actif (détection trop
      stricte, cf. fonction skifun_reservation_target() dans functions.php) —
      cherche maintenant en priorité une page publiée au slug /reserver/.
   7. header.php/footer.php ajoutés (absents jusqu'ici) : les gabarits PHP
      classiques du thème (page-templates/reservation.php) utilisant
      get_header()/get_footer() retombaient sur l'habillage minimal du
      cœur WordPress plutôt que le vrai header/footer du thème.
*/

/* ================= Correctif v0.4.3 (20/09/2026) =================
   Menu principal invisible tant qu'on ne le survole pas (signalé sur
   demo64.epnb.net). Cause : le bloc Navigation natif de WordPress applique
   `.wp-block-navigation .wp-block-navigation-item__content.wp-block-navigation-item__content { color: inherit; }`
   — la classe y est répétée deux fois par WordPress pour gonfler
   artificiellement sa spécificité CSS à (0,3,0). Notre règle
   `.sfm-nav a.wp-block-navigation-item__content` n'avait qu'une spécificité
   de (0,2,1) : plus faible, elle perdait face à cette règle du cœur, et le
   lien héritait donc la couleur de texte globale (encre, très sombre) au
   lieu de la couleur claire prévue ici — quasi invisible sur le fond sombre
   du menu. Seule la variante `:hover` (spécificité 0,3,1) suffisait déjà à
   l'emporter, d'où le symptôme "visible seulement au survol". Corrigé en
   reprenant la même technique que le cœur (classe répétée deux fois) sur
   nos propres règles — voir `.sfm-nav a.wp-block-navigation-item__content.wp-block-navigation-item__content`
   plus bas. Reproduit et vérifié directement sur le site en ligne
   (spécificité confirmée par inspection des règles CSS correspondantes),
   avant et après correctif.
*/

/* ================= Rapprochement maquette v0.4.2 (20/09/2026) =================
   Suite à la liste de directives issue de la comparaison avec la maquette
   (demo64.epnb.net). Uniquement les écarts "à construire" (habillage/contenu) ;
   les réglages "sans code" (réglages du site, menus, widgets Gutenberg) ont été
   traités directement en admin par le client.
   1. Héro : remplacement du simple bouton par un widget "Réservez votre
      matériel" (dates arrivée/départ, formulaire GET simple sans JS, soumis
      vers {lien_reservation}) + illustration de fond (montagnes, SVG de
      marque original — voir assets/images/hero-mountains.svg). Pas de photo
      en fond : aucune photo du magasin/site n'a été fournie pour ce lot, et
      une photo de banque d'images aurait été trompeuse pour ce commerce
      précis ; illustration vectorielle de marque à la place.
   2. Cartes "Pourquoi choisir Ski Fun" : icône ligne ajoutée à chacune
      (SVG originaux, cohérents avec la charte) + nouveau bandeau
      récapitulatif brun sous les 4 cartes, reprenant leur contenu.
   3. Nouveau bloc "La boutique" (adresse/téléphone/email/horaires) juste
      après le bandeau récapitulatif, avec emplacement "photo à venir"
      (façade) plutôt qu'une photo non fournie. L'ancienne section "Infos
      pratiques" (doublon d'adresse/horaires, plus bas dans la page) a été
      retirée en conséquence.
   4. Cartes "Nos services" (Location de ski / Entretien skis / Snowscoot) :
      emplacement "photo à venir" ajouté en tête de chaque carte, même
      logique que le bloc boutique.
   Voir `.sfm-photo-pending` ci-dessous pour le composant de placeholder
   partagé par ces deux derniers points.
*/

/* ================= Habillage complémentaire non couvert par theme.json =================
   Tout ce qui est ici reproduit fidèlement l'artefact de maquette "Ski Fun Manigod"
   (canvas de design, version 18 du 14/09) pour le header/footer et les composants
   partagés. Les couleurs/typo de base sont pilotées par theme.json (presets),
   ce fichier ne fait que les assembler en composants visuels (topbar, footer, cartes, CTA).
*/

::selection { background: var(--wp--preset--color--accent-tint); }

/* ---------- Topbar (header) ---------- */
.sfm-topbar {
	position: sticky;
	top: 0;
	z-index: 40;
	background: var(--wp--preset--color--chrome);
	border-bottom: 1px solid rgba(0,0,0,.15);
	padding-top: 0;
	padding-bottom: 0;
}
.sfm-topbar-inner {
	padding: 14px 28px;
	gap: 16px;
	row-gap: 8px;
}
.sfm-brand { gap: 10px; }
.sfm-brand .wp-block-site-logo { margin: 0; }
.sfm-brand img { height: 26px; width: auto; }
.sfm-brand-title,
.sfm-brand-title a {
	color: var(--wp--preset--color--white) !important;
	font-weight: 600; /* v0.13.1 : 800 → 600, graisse jugée trop forte */
	font-size: 15px !important;
	text-decoration: none !important;
	text-transform: uppercase;
	letter-spacing: .02em;
}

.sfm-nav { flex-grow: 1; }
/* Correctif v0.4.3 (20/09/2026) : le bloc navigation natif de WordPress
   embarque sa propre règle `.wp-block-navigation .wp-block-navigation-item__content.wp-block-navigation-item__content { color: inherit; }`
   — la classe y est délibérément répétée deux fois par WordPress pour
   gonfler artificiellement sa spécificité CSS (0,3,0). Notre règle d'origine
   `.sfm-nav a.wp-block-navigation-item__content` n'avait qu'une spécificité
   de (0,2,1), donc plus faible : elle perdait face à cette règle du cœur,
   qui appliquait `color: inherit` sur chaque lien — le lien héritait alors
   la couleur de texte globale (encre, très sombre) au lieu de la couleur
   claire prévue ici, le rendant quasi invisible sur le fond sombre du menu.
   Seule la variante `:hover` (spécificité 0,3,1, un pseudo-classe comptant
   comme une classe) suffisait déjà à gagner — d'où le symptôme observé :
   menu invisible sauf au survol. Corrigé en répétant nous aussi la classe
   `.wp-block-navigation-item__content`, même technique que le cœur, pour
   atteindre une spécificité (0,3,1) qui l'emporte dans tous les cas. */
.sfm-nav a.wp-block-navigation-item__content.wp-block-navigation-item__content {
	color: #cdbfa9;
	font-weight: 600;
	font-size: 12.5px;
	text-transform: uppercase;
	letter-spacing: .03em;
	padding: 9px;
	border-radius: 8px;
}
.sfm-nav a.wp-block-navigation-item__content.wp-block-navigation-item__content:hover {
	background: rgba(255,255,255,.09);
	color: var(--wp--preset--color--white);
}
.sfm-nav .wp-block-navigation__responsive-container-open svg,
.sfm-nav .wp-block-navigation__responsive-container-close svg { fill: var(--wp--preset--color--white); }
.sfm-nav .wp-block-navigation__responsive-dialog {
	background: var(--wp--preset--color--chrome);
}

/* Charte des boutons du brief tunnel du 24/09/2026 (§B), primaire :
   #A5661F / blanc ≈ 4,6:1, survol #8A5419 ≈ 6,2:1 — valeurs identiques à
   `--par-accent-dark`/`--par-accent-hover` du plugin (tunnel.css), codées en
   dur ici (le thème ne dépend pas du plugin). */
.sfm-cta .wp-block-button__link.sfm-btn-resa {
	background: #A5661F;
	color: #fff !important;
	font-weight: 700;
	font-size: 13.5px;
	text-transform: uppercase;
	letter-spacing: .03em;
	padding: 11px 16px;
	border-radius: 10px;
	box-shadow: 0 4px 14px -6px rgba(201,127,46,.6);
}
.sfm-cta .wp-block-button__link.sfm-btn-resa:hover {
	background: #8A5419;
	box-shadow: 0 8px 20px -6px rgba(201,127,46,.7);
}
.sfm-cta .wp-block-button__link.sfm-btn-resa:focus-visible { outline: 2px solid #A5661F; outline-offset: 2px; }

/* Tunnel de réservation (plugin) : retour en haut à chaque changement
   d'étape sous l'en-tête collant `.sfm-topbar` (brief du 24/09/2026, §D2). */
/* v0.12.0 : valeurs publiées par assets/js/sticky-header.js (hauteur réelle
   de l'en-tête collant + barre d'admin) ; 88px en repli sans JS. */
.par-tunnel {
	--par-scroll-offset: var(--sfm-scroll-offset, 88px);
	--par-sticky-top: var(--sfm-sticky-offset, 0px);
}

@media (max-width: 480px) {
	.sfm-topbar-inner { padding: 10px 16px; }
	.sfm-brand-title { display: none; }
}

/* ---------- Hero (accueil) ----------
   Correctif v0.4.2 (20/09/2026), rapprochement de la maquette :
   - Fond illustré (assets/images/hero-mountains.svg, montagnes vectorielles
     dans les tons de marque) ancré en bas à droite, à la place d'un fond
     uni. PAS de photo : aucune photo du magasin, des lieux ou de skieurs
     n'a été fournie pour ce lot, et une photo générique de banque d'images
     donnerait l'impression trompeuse qu'il s'agit du vrai magasin/lieu —
     contrairement au pictogramme de marque, qui n'induit personne en
     erreur. Dès qu'une vraie photo client est disponible, elle peut
     remplacer/compléter ce fond (`background` ci-dessous).
   - `.sfm-hero-grid` : mise en page à deux colonnes (texte + widget de
     réservation), la section `.sfm-hero` ne portant plus que le fond.
*/
/* Correctif v0.6.0 (22/09/2026), demande client ("le héro de l'accueil
   devrait ressembler davantage à la maquette et à la page Réservation") :
   l'illustration vectorielle de montagnes (hero-mountains.svg, cf. le bloc
   de commentaire "Rapprochement maquette v0.4.2" plus haut) est retirée du
   fond du héro, remplacée par une vraie photo du magasin — voir
   `.sfm-hero-photo` ci-dessous, même bande photo + badge que
   `.sfm-reservation-photo` (page de réservation) et même image que le bloc
   "La boutique" (`.sfm-shop-photo`). Pas la photo pleine largeur en arrière-
   plan de la maquette (un skieur en action, explicitement documenté comme
   un placeholder Unsplash, pas une photo client, cf. CLAUDE.md §2/§8 — donc
   volontairement jamais repris ici) : `boutique-facade.jpg` est en 540×275,
   une résolution qui se prêterait mal à un fond plein cadre étiré sur toute
   la largeur du héro (flou d'agrandissement) ; une bande photo contenue,
   à l'échelle déjà utilisée ailleurs sur ce thème pour cette même image,
   rapproche le héro à la fois de l'esprit "photo" de la maquette et du
   traitement déjà en place sur la page Réservation, sans dégrader le rendu
   ni réintroduire une photo de banque d'images trompeuse. Le dégradé de
   fond est conservé (repère visuel commun avec `.sfm-page-hero`). */
.sfm-hero {
	position: relative;
	/* v0.11.0 : `overflow: hidden` coupait le calendrier du widget de dates
	   (panneau absolu qui descend sous la section). Il datait du décor de
	   montagnes (v0.4.2, retiré en v0.6.0) : plus rien ne déborde. `clip`
	   sur l'axe horizontal seulement garde la protection contre un débordement
	   latéral, sans masquer ce qui dépasse verticalement. Contexte
	   d'empilement explicite : le panneau passe au-dessus de la section
	   suivante (.sfm-why). */
	overflow: visible;
	overflow-x: clip;
	/* flow-root : garde le contexte de formatage que créait `hidden` (les
	   marges des enfants ne « traversent » pas la section — hauteur
	   inchangée), sans rien masquer. */
	display: flow-root;
	z-index: 2;
	background:
		radial-gradient(1100px 480px at 82% -10%, var(--wp--preset--color--accent-tint), transparent 60%),
		var(--wp--preset--color--surface);
	border-bottom: 1px solid var(--wp--preset--color--line);
}
.sfm-hero-grid {
	position: relative;
	z-index: 1;
	display: flex;
	align-items: flex-start;
	flex-wrap: wrap;
	gap: 40px;
	padding: 40px 28px 56px;
}
.sfm-hero-content { flex: 1 1 480px; max-width: 620px; }
.sfm-hero-eyebrow {
	display: flex;
	align-items: center;
	gap: 10px;
	text-transform: uppercase;
	letter-spacing: .05em;
	font-size: 12.5px !important;
	font-weight: 700;
	color: var(--wp--preset--color--accent-dark);
	margin-bottom: 4px !important;
}
.sfm-hero-eyebrow::before {
	content: "";
	display: inline-block;
	width: 22px;
	height: 2px;
	background: var(--wp--preset--color--accent);
	flex: none;
}
.sfm-hero h1 { max-width: 720px; }
.sfm-hero-meta {
	display: inline-flex;
	align-items: center;
	gap: 8px;
	/* v0.8.0 (24/09/2026, revue graphique §1) : plus d'effet "pilule"
	   (fond blanc + bordure + arrondi 999px) qui la faisait passer pour un
	   bouton ou un champ — simple ligne d'information précédée d'une horloge. */
	background: none;
	border: 0;
	border-radius: 0;
	padding: 0;
	font-size: 13px;
	color: var(--wp--preset--color--ink-soft);
	margin-top: 18px;
}
.sfm-hero-meta::before {
	content: "";
	flex: none;
	width: 16px;
	height: 16px;
	background-color: var(--wp--preset--color--accent-dark);
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 7v5l3.5 2'/%3E%3C/svg%3E") center / contain no-repeat;
	mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 7v5l3.5 2'/%3E%3C/svg%3E") center / contain no-repeat;
}

/* ---------- Widget de réservation (héro) ---------- */
.sfm-hero-widget {
	flex: 0 1 380px;
	min-width: 290px;
	background: var(--wp--preset--color--material);
	color: var(--wp--preset--color--white);
	border-radius: 16px;
	padding: 28px;
	box-shadow: 0 20px 45px -22px rgba(90, 58, 38, .55);
}
.sfm-hero-widget-title {
	margin: 0 0 6px !important;
	text-transform: uppercase;
	letter-spacing: .04em;
	font-size: 12.5px !important;
	font-weight: 700;
	color: var(--wp--preset--color--accent-tint);
}
.sfm-hero-widget-sub {
	margin: 0 0 18px !important;
	font-size: 13px;
	line-height: 1.5;
	color: #d9c7b3;
}
.sfm-hero-widget-form { display: block; }
.sfm-hero-widget-dates {
	display: flex;
	gap: 12px;
	margin-bottom: 16px;
}
.sfm-hero-widget-dates label {
	flex: 1;
	display: flex;
	flex-direction: column;
	gap: 5px;
	font-size: 10.5px;
	text-transform: uppercase;
	letter-spacing: .05em;
	color: #d9c7b3;
}
.sfm-hero-widget-dates input[type="date"] {
	font: inherit;
	font-size: 13.5px;
	color-scheme: dark;
	color: var(--wp--preset--color--white);
	background: rgba(255, 255, 255, .08);
	border: 1px solid rgba(255, 255, 255, .25);
	border-radius: 8px;
	padding: 9px 10px;
}
.sfm-hero-widget-days {
	margin: -6px 0 14px;
	font-size: 12.5px;
	font-weight: 600;
	color: var(--wp--preset--color--white);
	min-height: 1.4em; /* évite un saut de mise en page quand le texte apparaît/disparaît */
}
.sfm-hero-widget-days:empty { margin: 0 0 8px; }
.sfm-hero-widget-days-error { color: #ffb4b4; font-weight: 400; }
.sfm-hero-widget-submit {
	width: 100%;
	background: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--ink);
	font-weight: 700;
	font-size: 13px;
	text-transform: uppercase;
	letter-spacing: .03em;
	border: 0;
	border-radius: 10px;
	padding: 13px 16px;
	cursor: pointer;
	font-family: inherit;
}
.sfm-hero-widget-submit:hover { background: var(--wp--preset--color--accent-dark); color: var(--wp--preset--color--white); }

@media (max-width: 782px) {
	.sfm-hero-widget { flex-basis: 100%; }
}

/* ---------- Cartes atouts / services ---------- */
.sfm-card {
	background: var(--wp--preset--color--white);
	border: 1px solid var(--wp--preset--color--line);
	border-radius: 14px;
	padding: 24px;
}
.sfm-card-material {
	background: var(--wp--preset--color--material);
	color: var(--wp--preset--color--white);
	border-radius: 14px;
	padding: 24px;
}
.sfm-card h3 { font-size: 15px; margin-bottom: 8px !important; }

/* Icônes de carte, ajoutées v0.4.2 (rapprochement maquette) */
.sfm-card-icon {
	display: flex;
	align-items: center;
	justify-content: center;
	width: 40px;
	height: 40px;
	margin-bottom: 14px;
	border-radius: 10px;
	background: var(--wp--preset--color--accent-tint);
	color: var(--wp--preset--color--accent-dark);
}
.sfm-card-icon svg { width: 22px; height: 22px; }

/* Bandeau récapitulatif brun, ajouté v0.4.2 (rapprochement maquette) */
.sfm-recap {
	background: var(--wp--preset--color--material);
	color: var(--wp--preset--color--white);
	border-radius: 16px;
	padding: 28px 32px;
	margin-top: 40px; /* v0.8.0 : 8px -> 40px (revue graphique §3) */
}
.sfm-recap-title {
	margin: 0 0 16px !important;
	text-transform: uppercase;
	letter-spacing: .04em;
	font-size: 12.5px !important;
	font-weight: 700;
	color: var(--wp--preset--color--accent-tint);
}
.sfm-recap-list { margin: 0; }
.sfm-recap-row {
	display: flex;
	justify-content: space-between;
	gap: 24px;
	padding: 11px 0;
	border-bottom: 1px dashed rgba(255, 255, 255, .18);
	font-size: 13.5px;
}
.sfm-recap-row:last-child { border-bottom: 0; }
.sfm-recap-row dt { margin: 0; color: #d9c7b3; }
.sfm-recap-row dd { margin: 0; font-weight: 700; color: var(--wp--preset--color--white); text-align: right; }
.sfm-recap-foot {
	margin: 14px 0 0 !important;
	padding-top: 14px;
	border-top: 1px dashed rgba(255, 255, 255, .18);
	font-size: 13px !important;
	color: #d9c7b3 !important;
}

@media (max-width: 600px) {
	.sfm-recap-row { flex-direction: column; gap: 2px; }
	.sfm-recap-row dd { text-align: left; }
}

/* ---------- Placeholder "photo à venir" (v0.4.2) ----------
   Utilisé partout où la maquette prévoit une photo (boutique, cartes
   "Nos services") mais où aucune photo réelle n'a été fournie pour ce
   lot. Volontairement identifiable comme un emplacement réservé plutôt
   qu'une vraie photo — voir les commentaires dans front-page.html. À
   remplacer directement par un bloc Image WordPress classique dès que
   les photos seront disponibles ; aucun code ne dépend de ce marqueur. */
.sfm-photo-pending {
	display: flex;
	flex-direction: column;
	align-items: center;
	justify-content: center;
	gap: 10px;
	height: 100%;
	min-height: 180px;
	border: 1.5px dashed var(--wp--preset--color--line);
	border-radius: 14px;
	background: var(--wp--preset--color--surface-2);
	color: var(--wp--preset--color--ink-soft);
	text-align: center;
	padding: 24px;
}
.sfm-photo-pending svg { width: 30px; height: 30px; opacity: .6; }
.sfm-photo-pending span { font-size: 12.5px; font-style: italic; }

/* ---------- Bloc "La boutique" (v0.4.2, photo réelle en v0.4.5) ----------
   Retiré v0.7.0 (23/09/2026) : la section qui utilisait ces classes
   (liste Adresse/Téléphone/Email/Horaires + photo, 2 colonnes) a été
   remplacée sur l'accueil par les mêmes cartes à badge que le reste du site
   (voir content/skifun-pages.xml, item "Accueil", et `.sfm-home-cards`
   plus bas) — demande client explicite. `.sfm-shop-photo`/`.sfm-shop-info`/
   `.sfm-shop-list`/`.sfm-shop-row`/`.sfm-shop` (colonnes) n'ont plus aucun
   usage dans `content/skifun-pages.xml` ni aucun template : retirées plutôt
   que laissées mortes dans la feuille de style. Ne pas confondre avec
   `.sfm-reservation-photo`/`.sfm-hero-photo`, un sélecteur distinct
   toujours utilisé (page de réservation + hero de l'accueil, voir plus
   bas) — malgré le nom proche, ce n'était pas le même bloc. */

/* Cartes "Nos services" avec photo en tête, ajouté v0.4.2 */
.sfm-card--with-photo { display: flex; flex-direction: column; }
.sfm-card--with-photo .sfm-photo-pending { min-height: 140px; }
/* v0.8.0 : `margin-bottom: 16px` retiré ci-dessus — il s'ajoutait à celui
   de .sfm-card-photo-wrap (marge comptée deux fois, revue graphique §6b). */

/* ---------- Photos de carte réelles, [sfm_page_thumbnail] (v0.4.5) ----------
   Remplace le placeholder "photo à venir" dès qu'une image mise en avant ou
   une photo repère est disponible (voir functions.php). border-radius +
   overflow:hidden sur le conteneur : absorbe proprement les quelques pixels
   d'angle arrondi déjà "cuits" dans les photos extraites de la maquette
   (voir images-extraites-maquette/) plutôt que de les laisser dépasser en
   carré sur un fond différent. */
.sfm-card-photo-wrap {
	margin-bottom: 16px;
	border-radius: 14px;
	overflow: hidden;
}
.sfm-card-photo-wrap .sfm-card-photo {
	display: block;
	width: 100%;
	height: 140px;
	object-fit: cover;
}
.sfm-card-photo-wrap .sfm-photo-pending { min-height: 140px; }

/* ---------- Footer ---------- */
/* Mise en page du pied de page : voir la section v0.13.0 en fin de fichier. */

/* Étiquette + liste "titre/valeur" du footer (v0.5.0, 21/09/2026) —
   initialement le style du récapitulatif 4 colonnes (.sfm-footer-recap,
   retiré en v0.6.0, voir le commentaire tout en haut du fichier), réduit
   depuis à la seule liste réutilisée par la colonne "Location de ski" du
   pied de page fusionné (parts/footer.html). Même famille visuelle que
   .sfm-shop-row (titre/valeur) mais adaptée au fond sombre du footer. */

/* Correctif 20/09/2026 : les libellés de colonne ("Nous trouver", "Contact")
   sont blancs et gras dans la maquette, pas cuivre clair — repris
   fidèlement (couleur ET graisse, `font-weight` manquait aussi). */
.sfm-footer-bottom {
	padding: 0 !important;
	margin: 0 !important;
	font-size: 12px !important;
	color: #b8ac9a !important; /* v0.13.0 : #8b8072 → 3,6:1 seulement sur « chrome » ; #b8ac9a = 6,3:1 (AA) */
}
.sfm-footer a { color: inherit; }

/* Menu de pied de page paramétrable (v0.5.0, 21/09/2026) — bloc Navigation
   natif WordPress, style volontairement discret pour rester en retrait par
   rapport au menu principal du header (.sfm-nav).

   Correctif v0.6.0 (22/09/2026) : le bloc a perdu son attribut `layout`
   (justifyContent centré) en même temps que le correctif de l'artefact
   visuel signalé par le client — voir le commentaire du bloc `wp:navigation`
   dans parts/footer.html pour le détail complet. Le centrage, assuré
   jusqu'ici par cet attribut, est repris ici en CSS pure. */
/* v0.8.0 (24/09/2026, revue graphique §7) : plus aucune bordure ici — la
   classe perso du bloc Navigation est recopiée par WordPress sur son <ul>
   interne, cette règle s'appliquait donc deux fois (2 des 3 traits visibles). */
.sfm-footer-nav,
.sfm-footer-nav .wp-block-navigation__container {
	padding: 0;
	border-top: 0;
}
.sfm-footer-nav .wp-block-navigation__container {
	justify-content: center;
	gap: 6px 22px !important;
}
.sfm-footer-nav a.wp-block-navigation-item__content.wp-block-navigation-item__content {
	font-size: 12px;
	color: #b8ac9a;
	text-decoration: none;
	padding: 0;
}
.sfm-footer-nav a.wp-block-navigation-item__content.wp-block-navigation-item__content:hover {
	color: var(--wp--preset--color--white);
	text-decoration: underline;
}

/* Newsletter (footer, bloc Shortcode MC4WP) — retirée en v0.6.0 (22/09/2026)
   avec toute sa dépendance (voir functions.php et parts/footer.html) ; ce
   bloc de règles .sfm-footer-newsletter est retiré en conséquence. */

/* ---------- Page de contenu générique ---------- */
/* Étoffé le 21/09/2026 : ces pages (contenu repris de l'ancien site Jimdo,
   voir content/skifun-pages.xml) n'avaient jusqu'ici que ce padding et un
   habillage de tableau minimal — plates comparées à l'accueil, qui a ses
   cartes/icônes/couleurs d'accent (retour client du 20-21/09). Tout ce qui
   suit est un habillage purement visuel des blocs Gutenberg génériques déjà
   présents (titre, liste, tableau, paragraphe) — aucun contenu/texte n'est
   modifié ni reformulé, conformément à la consigne du projet (reprise à
   l'identique pour l'instant, retravail éditorial plus tard).
   Repère de rythme utilisé partout ci-dessous : la même barre d'accent que
   .sfm-hero-eyebrow (22px x 2px, couleur --accent) et les mêmes
   rayons/ombres que .sfm-card sur l'accueil, pour que ces pages restent
   visiblement du même site que la page d'accueil. */
.sfm-page-main { padding: 40px 28px 72px; }

/* ---------- Bandeau de titre des pages de contenu (v0.4.7, 21/09/2026) ----------
   Même famille visuelle que .sfm-hero (dégradé de fond, eyebrow à barre
   d'accent, séparation nette en bas) mais volontairement plus sobre : une
   seule colonne, pas d'illustration de montagnes ni de widget de réservation
   — un simple bandeau de titre, pas une redite du hero de l'accueil. */
.sfm-page-hero {
	position: relative;
	overflow: hidden;
	background:
		radial-gradient(900px 320px at 88% -30%, var(--wp--preset--color--accent-tint), transparent 60%),
		var(--wp--preset--color--surface);
	border-bottom: 1px solid var(--wp--preset--color--line);
}
.sfm-page-hero-inner {
	position: relative;
	max-width: 1240px;
	margin: 0 auto;
	padding: 38px 28px 32px;
}
.sfm-page-hero-eyebrow {
	display: flex;
	align-items: center;
	gap: 10px;
	text-transform: uppercase;
	letter-spacing: .05em;
	font-size: 12.5px;
	font-weight: 700;
	color: var(--wp--preset--color--accent-dark);
	margin: 0 0 10px !important;
}
.sfm-page-hero-eyebrow::before {
	content: "";
	display: inline-block;
	width: 22px;
	height: 2px;
	background: var(--wp--preset--color--accent);
	flex: none;
}
.sfm-page-hero .wp-block-post-title { margin: 0 !important; }
/* page-templates/reservation.php (v0.4.7) réutilise .sfm-page-hero mais avec
   un <h1> écrit à la main (gabarit PHP classique, pas un template FSE avec
   wp:post-title) — même remise à zéro de marge, sélecteur différent. */
.sfm-page-hero h1 { margin: 0; }

/* Bandeau photo boutique de la page de réservation (v0.4.7) — même image et
   même traitement "badge" que .sfm-shop-photo (bloc "La boutique" de
   l'accueil), décliné en bandeau pleine largeur plutôt qu'en vignette.

   Correctif v0.6.0 (22/09/2026) : .sfm-hero-photo (héro de l'accueil,
   content/skifun-pages.xml) rejoint ce même jeu de règles — demande client
   ("le héro de l'accueil devrait ressembler... à la page Réservation"),
   voir le commentaire de `.sfm-hero` plus haut pour le détail. Centré et
   borné à 1240px (`.sfm-hero-photo` uniquement) pour s'aligner sur le
   contentSize du héro plutôt que de courir pleine largeur du site comme sur
   la page Réservation, dont le conteneur est déjà plus étroit (1180px). */
.sfm-reservation-photo,
.sfm-hero-photo {
	position: relative;
	border-radius: 16px;
	overflow: hidden;
	margin-bottom: 28px;
	box-shadow: 0 20px 45px -24px rgba(44,44,44,.45);
}
/* .sfm-hero-photo est un enfant de .sfm-hero-grid (flex-wrap), pas de
   .sfm-hero directement : flex-basis 100% le fait occuper toute la largeur
   sur sa propre ligne, avant le texte/widget qui repassent dessous — même
   boîte de contenu (padding 28px), donc mêmes bords gauche/droite que le
   reste du héro, sans calcul de marge séparé. Marge de 0 en bas : le gap
   de .sfm-hero-grid (40px) espace déjà de la ligne suivante. */
.sfm-hero-photo { flex: 1 0 100%; margin-bottom: 0; }
.sfm-hero-photo img { border-radius: 16px; }
.sfm-reservation-photo img,
.sfm-hero-photo img {
	display: block;
	width: 100%;
	height: 220px;
	object-fit: cover;
}
.sfm-reservation-photo-tag,
.sfm-hero-photo-tag {
	position: absolute;
	left: 20px;
	bottom: 20px;
	background: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--ink);
	font-weight: 700;
	font-size: 13px;
	padding: 8px 16px;
	border-radius: 8px;
	max-width: calc(100% - 40px);
}
@media (max-width: 600px) {
	.sfm-reservation-photo img,
	.sfm-hero-photo img { height: 150px; }
	.sfm-reservation-photo-tag,
	.sfm-hero-photo-tag { font-size: 12px; padding: 6px 12px; }
}

/* Photo de contenu (v0.4.7) — bloc HTML statique [theme_uri]/assets/images/…
   inséré dans le contenu importé (content/skifun-pages.xml), même logique de
   jeton que {lien_reservation}/{annee} (voir functions.php). Même traitement
   visuel (coins arrondis, ombre) que .sfm-card, pour rester cohérent avec le
   reste du site plutôt qu'une image brute sans habillage. */
.sfm-page-main .sfm-page-photo {
	margin: 24px 0 32px;
	border-radius: 16px;
	overflow: hidden;
	box-shadow: 0 20px 45px -24px rgba(44,44,44,.45);
}
.sfm-page-main .sfm-page-photo img {
	display: block;
	width: 100%;
	height: auto;
	max-height: 420px;
	object-fit: cover;
}

/* ---------- Cartes de bas de page (Réservation / Adresse / Horaires) ----------
   Ajoutées v0.6.0 (22/09/2026), restylées v0.7.0 (23/09/2026, "Option B" de
   `maquette-cartes-bas-de-page-2026-09-22.html`, retenue par le client) : un
   badge accent + une étiquette ("chip") sur les 3 cartes, plus seulement sur
   celle qui a une photo — corrige l'asymétrie relevée par la revue UX du
   22/09 ("photo seulement dans la carte centrale"). Remplacent le
   récapitulatif de pied de page retiré en v0.6.0 (voir tout en haut du
   fichier + parts/footer.html) : demande client explicite — "sur
   l'arrière-plan de la page et non du footer", avec des encarts plus
   construits que de simples liens. Écrites directement dans
   `templates/page.html` (pas dans un template part partagé) : elles
   n'apparaissent que sur les pages qui utilisent ce gabarit — les pages de
   contenu secondaires — jamais sur l'accueil (`front-page.html`, qui a sa
   propre intégration, voir plus bas) ni sur la page de réservation
   (`page-templates/reservation.php`, un gabarit PHP distinct). Depuis
   v0.7.0, ce bloc est en plus neutralisé spécifiquement sur la page Accès &
   Contact (filtre `render_block` sur `skifun_is_contact_page()`,
   `functions.php`) : cette page affiche désormais sa propre version "en
   grand" de ces mêmes 3 blocs dans son propre contenu plutôt que la carte
   condensée — évite à la fois la redondance et les liens "Voir l'accès"/
   "Voir le détail" qui s'auto-référençaient sur cette page précise (bug
   confirmé par la revue UX du 22/09). Style directement inspiré de la carte
   du formulaire de contact (`.sfm-page-main .wpcf7-form` plus bas — même
   fond/rayon/ombre) plutôt que du `.sfm-card` plus sobre de l'accueil,
   comme demandé à l'origine. Contenu curaté à la main à partir des blocs
   "Adresse"/"Horaires"/"Réservation" retirés de la fin de chaque page
   importée (voir le commentaire en tête de `content/skifun-pages.xml`) —
   même principe de contenu curaté, jamais extrait dynamiquement, que
   l'ancien récapitulatif de pied de page, à l'exception des dates de saison
   (shortcode `[plugandrent_season_dates]` depuis v0.7.0, voir plus bas). */
.sfm-bottom-cards { margin-top: 12px; }
.sfm-bottom-cards h2 { margin-bottom: 28px !important; }
.wp-block-columns.sfm-bottom-cards-grid { align-items: stretch; }
.sfm-bottom-card {
	position: relative;
	height: 100%;
	background: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--line);
	border-radius: 16px;
	padding: 36px 24px 28px;
	box-shadow: 0 20px 45px -24px rgba(44, 44, 44, .35);
}
.sfm-bottom-card h3 { font-size: 16px; margin: 0 0 8px !important; }
.sfm-bottom-card p { margin: 0 0 6px; font-size: 13.5px; line-height: 1.6; }
.sfm-bottom-card p:last-child { margin-bottom: 0; }

/* Badge accent — remplace l'icône posée à même le fond de carte (v0.6.0) :
   un carré arrondi qui déborde légèrement en haut de la carte, identique
   sur les 3 cartes (photo ou non), pour qu'aucune ne paraisse "moins
   soignée" que les autres. */
.sfm-bottom-card-badge {
	position: absolute;
	top: -16px;
	left: 24px;
	width: 44px;
	height: 44px;
	border-radius: 12px;
	background: var(--wp--preset--color--accent);
	color: var(--wp--preset--color--white);
	display: flex;
	align-items: center;
	justify-content: center;
	box-shadow: 0 10px 20px -8px rgba(201, 127, 46, .6);
}
.sfm-bottom-card-badge svg { width: 22px; height: 22px; }

.sfm-bottom-card-chip {
	display: block;
	font-size: 10.5px;
	font-weight: 700;
	letter-spacing: .06em;
	text-transform: uppercase;
	color: var(--wp--preset--color--accent-dark);
	margin: 0 0 6px;
}

/* Photo réemployée de la boutique — désormais contenue dans le padding de
   la carte (coins arrondis sur les 4 côtés) plutôt qu'à cheval dessus
   (marges négatives, v0.6.0) : sur cette version, le badge occupe déjà le
   rôle de repère visuel commun aux 3 cartes, la photo n'a donc plus besoin
   de "compenser" en s'étalant jusqu'aux bords. */
.sfm-bottom-card-photo {
	margin: 10px 0 14px;
	border-radius: 12px;
	overflow: hidden;
}
.sfm-bottom-card-photo img {
	display: block;
	width: 100%;
	height: 120px;
	object-fit: cover;
}

/* Pied de carte — remplace le lien unique en fin de paragraphe (v0.6.0) par
   une zone dédiée, toujours en bas de carte quelle que soit la hauteur du
   texte au-dessus (`margin-top: auto` sur un parent flex). */
.sfm-bottom-card { display: flex; flex-direction: column; }
.sfm-bottom-card-foot {
	margin-top: auto;
	padding-top: 14px;
	border-top: 1px solid var(--wp--preset--color--line);
	display: flex;
	flex-wrap: wrap;
	gap: 10px 16px;
}
.sfm-bottom-card-foot a {
	font-size: 12.5px;
	font-weight: 700;
	color: var(--wp--preset--color--accent-dark);
	text-decoration: none;
}
.sfm-bottom-card-foot a.sfm-bottom-card-foot-secondary {
	color: var(--wp--preset--color--ink-soft);
	font-weight: 600;
}
.sfm-bottom-card .wp-block-buttons { margin: 0; }
.sfm-bottom-card .wp-block-buttons .wp-block-button__link { font-size: 12.5px; padding: 10px 18px; }

/* Repli du shortcode [plugandrent_season_dates] quand la saison n'est pas
   paramétrée (voir functions.php et Frontend\SeasonDatesShortcode du
   plugin) — même style minimal des deux côtés (thème/plugin), pas de classe
   dupliquée entre les deux car jamais actives en même temps sur une même
   page (l'un ou l'autre s'enregistre, jamais les deux). */
.sfm-season-dates-unset,
.par-season-dates-unset { font-style: italic; opacity: .75; }

/* "En grand" — page Accès & Contact, v0.7.0 (23/09/2026) : mêmes cartes,
   affichées en pleine taille dans le contenu de la page elle-même plutôt
   qu'en bas de page condensées (voir content/skifun-pages.xml, item "Accès
   & Contact"). Réutilise le composant `.sfm-bottom-card` (carte
   individuelle, inchangé) mais SANS la classe `.sfm-bottom-cards` sur la
   section/la grille (`.sfm-contact-cards`/`.sfm-contact-cards-grid`,
   volontairement distinctes) : le filtre `render_block` qui neutralise la
   version condensée sur cette page (`skifun_is_contact_page()`,
   functions.php) détecte `sfm-bottom-cards` par sous-chaîne, la porter ici
   aurait donc aussi masqué cette version "en grand". Les 3 règles de mise
   en page ci-dessous dupliquent donc volontairement celles de
   `.sfm-bottom-cards`/`.sfm-bottom-cards-grid` plus haut (même valeurs sauf
   marges, légèrement différentes) ; le reste (padding, badge, titres,
   photo, pied de carte) ajuste seulement la taille pour ce contexte "en
   grand", sans redéfinir la structure. */
.sfm-contact-cards { margin-top: 8px; margin-bottom: 32px; }
.sfm-contact-cards h2 { margin-bottom: 32px !important; }
.wp-block-columns.sfm-contact-cards-grid { align-items: stretch; }
.sfm-contact-cards-grid .sfm-bottom-card { padding: 44px 32px 32px; }
.sfm-contact-cards-grid .sfm-bottom-card-badge { width: 52px; height: 52px; top: -18px; left: 32px; }
.sfm-contact-cards-grid .sfm-bottom-card-badge svg { width: 26px; height: 26px; }
.sfm-contact-cards-grid .sfm-bottom-card h3 { font-size: 19px; }
.sfm-contact-cards-grid .sfm-bottom-card p { font-size: 14.5px; }
.sfm-contact-cards-grid .sfm-bottom-card-photo img { height: 150px; }
.sfm-contact-cards-grid .sfm-bottom-card-foot a { font-size: 13.5px; }

/* Accueil — v0.7.0 (23/09/2026) : mêmes 3 cartes (Réservation/Adresse/
   Horaires) en remplacement du bloc "La boutique" (colonnes texte + photo,
   retiré plus haut — voir le commentaire "Bloc 'La boutique'... Retiré
   v0.7.0"), demande client explicite ("les blocs de bas de page pourraient
   être réintégrés et remplacer/compléter des blocs Gutenberg"). Contrairement
   à `.sfm-contact-cards` ci-dessus, pas de version "en grand" ici : ces
   cartes gardent la même taille que la version condensée de bas de page
   (`.sfm-bottom-card`, inchangé) — seules les 3 règles de mise en page
   ci-dessous sont dupliquées (même valeurs que `.sfm-bottom-cards`/
   `.sfm-bottom-cards-grid`), pour la même raison qu'au-dessus : le filtre
   `render_block` de neutralisation (page Accès & Contact uniquement,
   `skifun_is_contact_page()`) détecte `sfm-bottom-cards` par sous-chaîne, et
   l'accueil n'a de toute façon pas besoin d'être neutralisé nulle part —
   classes distinctes par cohérence avec le reste du système de cartes. */
.sfm-home-cards { margin-top: 12px; }
.sfm-home-cards h2 { margin-bottom: 28px !important; }
.wp-block-columns.sfm-home-cards-grid { align-items: stretch; }

/* Titres de section (H2) : barre d'accent + espacement généreux entre
   sections plutôt qu'un simple <h2> nu à même la page — même logique que
   .sfm-hero-eyebrow (barre de 22px), déclinée en repère de section.
   :first-of-type (pas de sélecteur d'enfant direct, volontairement : que
   wp:post-content ajoute ou non un conteneur autour du contenu importé
   selon la version de WordPress ne doit rien changer ici) évite un espace
   excessif si une page démarre directement par un titre de section, sans
   paragraphe d'intro avant. */
.sfm-page-main h2.wp-block-heading:not(.sfm-bottom-cards-title) {
	display: flex;
	align-items: center;
	gap: 12px;
	margin-top: 56px !important;
	padding-bottom: 10px;
	border-bottom: 1px solid var(--wp--preset--color--line);
}
.sfm-page-main h2.wp-block-heading:first-of-type { margin-top: 0 !important; }
.sfm-page-main h2.wp-block-heading:not(.sfm-bottom-cards-title)::before {
	content: "";
	display: inline-block;
	width: 22px;
	height: 3px;
	border-radius: 2px;
	background: var(--wp--preset--color--accent);
	flex: none;
}

/* Listes : puce générique remplacée par un repère check couleur accent,
   plus d'air entre les lignes — les listes de la maquette (matériel,
   horaires, conditions...) restent la forme la plus "flat" en l'état. */
.sfm-page-main ul.wp-block-list {
	list-style: none;
	margin: 0 0 8px;
	padding: 0;
	display: grid;
	gap: 10px;
}
.sfm-page-main ul.wp-block-list li {
	position: relative;
	padding-left: 30px;
	line-height: 1.5;
}
.sfm-page-main ul.wp-block-list li::before {
	content: "";
	position: absolute;
	left: 0;
	top: 5px;
	width: 18px;
	height: 18px;
	border-radius: 6px;
	background: var(--wp--preset--color--accent-tint);
	box-shadow: inset 0 0 0 1px var(--wp--preset--color--accent);
}
.sfm-page-main ul.wp-block-list li::after {
	content: "";
	position: absolute;
	left: 5px;
	top: 9px;
	width: 8px;
	height: 4px;
	border-left: 2px solid var(--wp--preset--color--accent-dark);
	border-bottom: 2px solid var(--wp--preset--color--accent-dark);
	transform: rotate(-45deg);
}

/* Tableau de tarifs : coins arrondis + ombre légère (comme .sfm-card),
   en-tête en couleur matière, lignes zébrées pour la lisibilité d'une
   grille de tarifs à plusieurs colonnes. */
.sfm-page-main .wp-block-table {
	border-radius: 14px;
	overflow: hidden;
	border: 1px solid var(--wp--preset--color--line);
	box-shadow: 0 10px 30px -18px rgba(44,44,44,.35);
	margin: 0 0 8px;
}
.sfm-page-main table { width: 100%; border-collapse: collapse; }
.sfm-page-main table th,
.sfm-page-main table td {
	border: 0;
	border-bottom: 1px solid var(--wp--preset--color--line);
	padding: 12px 16px;
	text-align: left;
}
.sfm-page-main table th {
	background: var(--wp--preset--color--material);
	color: var(--wp--preset--color--white);
	font-weight: 700;
	font-size: 13.5px;
	text-transform: uppercase;
	letter-spacing: .02em;
}
.sfm-page-main table tbody tr:last-child td { border-bottom: 0; }
.sfm-page-main table tbody tr:nth-child(even) { background: var(--wp--preset--color--surface-2); }
.sfm-page-main table tbody tr:hover { background: var(--wp--preset--color--accent-tint); }

/* "Cartes" question/réponse et point/explication (H3 immédiatement suivi
   d'un paragraphe, cf. FAQ des pages Location de ski / Location Snowscoot
   et "Pourquoi faire entretenir ses skis" de la page Entretien skis) —
   habillage par sélecteurs de frères adjacents, sans toucher au balisage
   du contenu importé : un <h3> suivi directement d'un <p> devient une
   carte à deux parties (question en tête accentuée, réponse en corps),
   au lieu d'un texte brut sans repère visuel. */
/* v0.11.0 : jamais dans une carte (.sfm-card, .sfm-bottom-card), qui a son propre style. */
.sfm-page-main h3.wp-block-heading:not(:is(.sfm-card, .sfm-bottom-card) *) {
	margin: 20px 0 0 !important;
	padding: 14px 18px;
	background: var(--wp--preset--color--surface-2);
	border-left: 3px solid var(--wp--preset--color--accent);
	border-radius: 10px 10px 0 0;
	font-size: 15.5px !important;
}
.sfm-page-main h3.wp-block-heading:not(:is(.sfm-card, .sfm-bottom-card) *) + p {
	margin: 0 0 8px !important;
	padding: 14px 18px 16px;
	background: var(--wp--preset--color--white);
	border: 1px solid var(--wp--preset--color--line);
	border-top: 0;
	border-left: 3px solid var(--wp--preset--color--accent);
	border-radius: 0 0 10px 10px;
}

/* ---------- Formulaire de contact (Contact Form 7), v0.4.9 (21/09/2026) ----------
   Page "Accès & Contact" (`/contact/`). Cible les classes standards CF7
   (`wpcf7-*`), indépendantes du contenu exact des champs — voir le
   commentaire de version en tête de fichier pour le détail des 3 itérations
   (base, box-sizing, alignement bouton). Le bouton "Envoyer" hérite déjà des
   couleurs du bouton global (theme.json > styles.elements.button, appliqué
   aux input[type=submit]) : seuls le gabarit et l'alignement sont réglés ici. */
.sfm-page-main .wpcf7-form {
	max-width: 640px;
	margin: 0 auto;
	padding: 32px 28px;
	background: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--line);
	border-radius: 16px;
	box-shadow: 0 20px 45px -24px rgba(44, 44, 44, .35);
}

.sfm-page-main .wpcf7-form p,
.sfm-page-main .wpcf7-form .wpcf7-form-control-wrap {
	display: block;
	margin: 0 0 18px;
}

.sfm-page-main .wpcf7-form label {
	display: block;
	margin-bottom: 6px;
	font-size: 13px;
	font-weight: 600;
	letter-spacing: .02em;
	color: var(--wp--preset--color--ink-soft);
}

.sfm-page-main .wpcf7-form input[type="text"],
.sfm-page-main .wpcf7-form input[type="email"],
.sfm-page-main .wpcf7-form input[type="tel"],
.sfm-page-main .wpcf7-form input[type="url"],
.sfm-page-main .wpcf7-form input[type="number"],
.sfm-page-main .wpcf7-form select,
.sfm-page-main .wpcf7-form textarea {
	box-sizing: border-box; /* évite que padding + bordure débordent des 100% (content-box par défaut) */
	width: 100%;
	font: inherit;
	font-size: 14px;
	color: var(--wp--preset--color--ink);
	background: var(--wp--preset--color--ground);
	border: 1.5px solid var(--wp--preset--color--line);
	border-radius: 9px;
	padding: 12px 14px;
	transition: border-color .15s ease, box-shadow .15s ease;
}

.sfm-page-main .wpcf7-form textarea {
	min-height: 140px;
	resize: vertical;
}

.sfm-page-main .wpcf7-form input::placeholder,
.sfm-page-main .wpcf7-form textarea::placeholder {
	color: var(--wp--preset--color--ink-soft);
	opacity: .7;
}

.sfm-page-main .wpcf7-form input:focus,
.sfm-page-main .wpcf7-form select:focus,
.sfm-page-main .wpcf7-form textarea:focus {
	outline: none;
	border-color: var(--wp--preset--color--accent);
	box-shadow: 0 0 0 3px var(--wp--preset--color--accent-tint);
}

.sfm-page-main .wpcf7-form .wpcf7-not-valid {
	border-color: #c0392b !important;
}
.sfm-page-main .wpcf7-form .wpcf7-not-valid-tip {
	display: block;
	margin-top: 5px;
	font-size: 12.5px;
	color: #c0392b;
}

.sfm-page-main .wpcf7-form .wpcf7-checkbox,
.sfm-page-main .wpcf7-form .wpcf7-acceptance {
	display: flex;
	align-items: flex-start;
	gap: 8px;
	font-size: 13.5px;
	color: var(--wp--preset--color--ink-soft);
}

/* Bouton "Envoyer" aligné à droite (demande client 21/09) — CF7 ne donne
   pas de classe dédiée au <p> qui le contient, d'où :has(). */
.sfm-page-main .wpcf7-form p:has(> input[type="submit"]),
.sfm-page-main .wpcf7-form .wpcf7-form-control-wrap:has(> input[type="submit"]) {
	display: flex;
	justify-content: flex-end;
}

.sfm-page-main .wpcf7-form input[type="submit"] {
	margin-top: 6px;
	padding: 13px 28px;
	font-size: 14px;
	cursor: pointer;
	border: 0;
}

.sfm-page-main .wpcf7-form input[type="submit"]:disabled {
	opacity: .6;
	cursor: not-allowed;
}

.sfm-page-main .wpcf7-form .wpcf7-spinner {
	margin-left: 10px;
}

.sfm-page-main .wpcf7-form .wpcf7-response-output {
	margin-top: 18px !important;
	padding: 13px 16px;
	border-radius: 10px;
	font-size: 13.5px;
	border-width: 1.5px;
}

.sfm-page-main .wpcf7-form.sent .wpcf7-response-output {
	background: #eaf6ec;
	border-color: #2e7d32;
	color: #1e5c25;
}

.sfm-page-main .wpcf7-form.failed .wpcf7-response-output,
.sfm-page-main .wpcf7-form.aborted .wpcf7-response-output,
.sfm-page-main .wpcf7-form.spam .wpcf7-response-output {
	background: #fbeae8;
	border-color: #c0392b;
	color: #8f2c20;
}

/* ================= Revue graphique de l'accueil — v0.8.0 (24/09/2026) =================
   Brief "Revue graphique : page d'accueil Ski Fun Manigod (demo64.epnb.net)",
   mesures relevées à 1150px. Les retouches de règles existantes sont faites
   en place (repérées "v0.8.0" : .sfm-hero-meta, .sfm-recap, pied de page) ;
   les règles nouvelles sont regroupées ci-dessous, dans l'ordre du brief.
   Détail et arbitrages : DECISIONS.md, entrée du 24/09/2026. */

/* ---------- Héro : widget de dates [plugandrent_date_range] ----------
   Formulaire rendu par le plugin (Frontend\DateRangeShortcode, même
   composant de calendrier que le tunnel, assets/daterange.css) ; seul son
   habillage sur la carte marron du héro est défini ici. */
.sfm-hero-widget .par-datewidget-native { gap: 12px; }
.sfm-hero-widget .par-datewidget-native label { color: #d9c7b3; text-transform: uppercase; letter-spacing: .05em; font-size: 10.5px; }
.sfm-hero-widget .par-datewidget-native input {
	color-scheme: dark;
	color: var(--wp--preset--color--white);
	background: rgba(255, 255, 255, .08);
	border-color: rgba(255, 255, 255, .25);
}
.sfm-hero-widget .par-daterange { margin-bottom: 12px; }
.sfm-hero-widget .par-daterange-field {
	color: var(--wp--preset--color--white);
	background: rgba(255, 255, 255, .08);
	border-color: rgba(255, 255, 255, .25);
	font-size: 13.5px;
	padding: 11px 12px;
}
.sfm-hero-widget .par-daterange-field-count,
.sfm-hero-widget .par-daterange-field-icon { color: #d9c7b3; }
.sfm-hero-widget .par-daterange-field.is-open { outline-color: var(--wp--preset--color--accent-tint); }
/* Panneau 2 mois (~560px) plus large que la carte (380px), qui est à
   droite du héro : ouvert vers la gauche pour ne pas sortir de l'écran. */
.sfm-hero-widget .par-daterange-panel { left: auto; right: 0; color: var(--wp--preset--color--ink); }
@media (max-width: 620px) {
	/* Mobile : panneau centré sur le champ (règle du plugin, daterange.css). */
	.sfm-hero-widget .par-daterange-panel { left: 50%; right: auto; }
}
.sfm-hero-widget .par-datewidget-days {
	margin: 0 0 14px;
	font-size: 12.5px;
	font-weight: 600;
	color: var(--wp--preset--color--white);
}
.sfm-hero-widget .par-datewidget-days:empty { margin: 0 0 8px; min-height: 0; }
.sfm-hero-widget .par-datewidget-submit {
	background: #A5661F; /* primaire, charte du 24/09/2026 */
	color: #fff;
	font-size: 13px;
	text-transform: uppercase;
	letter-spacing: .03em;
	padding: 13px 16px;
}
.sfm-hero-widget .par-datewidget-submit:hover { background: #8A5419; color: var(--wp--preset--color--white); }
/* Repli du thème quand le plugin est inactif (functions.php) : bouton-lien. */
.sfm-date-range-fallback { margin: 0; }
.sfm-date-range-fallback .sfm-hero-widget-submit { display: block; text-align: center; text-decoration: none; }

/* ---------- Cartes en flex colonne : enfants pleine largeur ----------
   La mise en page "constrained" de WordPress pose margin-inline:auto sur les
   enfants d'un groupe. Dans une carte en `display:flex; flex-direction:
   column`, ces marges automatiques CENTRENT et RÉDUISENT chaque enfant à sa
   largeur de contenu (cause racine du placeholder de 132px du §6b). Constaté
   aussi sur demo64 dans les cartes de bas de page des pages libres :
   étiquette et pied de carte centrés, et photo de la carte "Adresse" réduite
   à 0px de large (invisible). Les enfants reprennent toute la largeur ; les
   pictogrammes (.sfm-card-icon, badge absolu) gardent leur placement. */
.sfm-bottom-card > :not(.sfm-bottom-card-badge),
.sfm-card.sfm-card--with-photo > *,
.sfm-why .sfm-card > :not(.sfm-card-icon) {
	align-self: stretch;
	margin-left: 0 !important;
	margin-right: 0 !important;
	max-width: none;
}

/* ---------- §2 « Pourquoi choisir Ski Fun » : cartes de même hauteur ----------
   2 lignes réservées au titre (line-height 1.55 × 15px), 3 à la description
   (1.55 × 14px) : icônes, titres et descriptions démarrent à la même
   hauteur sur les 4 cartes, sans toucher aux textes. */
.sfm-why .wp-block-columns { align-items: stretch; }
.sfm-why .wp-block-column { display: flex; }
.sfm-why .sfm-card { flex: 1; display: flex; flex-direction: column; }
.sfm-why .sfm-card h3 { line-height: 1.55; min-height: calc(2 * 1.55em); }
.sfm-why .sfm-card p { font-size: 14px; line-height: 1.55; min-height: calc(3 * 1.55em); }
/* Tablette (782–1023px) : 4 colonnes de ~180px faisaient passer certains
   titres sur 3 lignes (réserve de 2 dépassée) — grille 2 × 2 à la place. */
@media (min-width: 782px) and (max-width: 1023px) {
	.sfm-why .wp-block-columns { flex-wrap: wrap !important; }
	.sfm-why .wp-block-columns > .wp-block-column { flex-basis: calc(50% - 1em) !important; flex-grow: 0; }
}
@media (max-width: 781px) {
	.sfm-why .sfm-card h3,
	.sfm-why .sfm-card p { min-height: 0; }
}
/* §3 : 40px avant le bloc marron. Spécificité renforcée : le blockGap du
   groupe (24px, margin-block-start généré par WordPress) l'emportait sur
   `.sfm-recap { margin-top }` seul. */
.sfm-why > .sfm-recap { margin-top: 40px !important; }

/* ---------- §4 Bloc marron : pied avec lien ---------- */
.sfm-recap-foot { display: flex; flex-wrap: wrap; align-items: baseline; justify-content: space-between; gap: 6px 16px; }
.sfm-recap-foot a {
	color: var(--wp--preset--color--accent-tint);
	font-weight: 700;
	text-decoration: none;
	white-space: nowrap;
}
.sfm-recap-foot a:hover { color: var(--wp--preset--color--white); text-decoration: underline; }

/* ---------- §5 « La boutique » : carte .sfm-bottom-card + photo seule ----------
   Colonne gauche = composant des cartes de bas des pages libres (badge,
   étiquette, pied de carte), à 50 % et sans photo ; colonne droite = photo
   qui remplit la colonne. Colonnes de même hauteur (flex), badge débordant
   visible (overflow visible + marge haute de section). */
.sfm-shop-section { overflow: visible; }
.wp-block-columns.sfm-shop { align-items: stretch; margin-top: 16px; }
.sfm-shop > .wp-block-column { display: flex; overflow: visible; }
.sfm-shop > .wp-block-column > * { flex: 1; }
.sfm-shop .sfm-shop-info { height: auto; margin: 0; }
/* Titre en bandeau beige à liseré accent — identique aux pages libres
   (.sfm-page-main h3.wp-block-heading), l'accueil n'ayant pas ce conteneur. */
.sfm-shop-info h3.wp-block-heading {
	margin: 4px 0 12px !important;
	padding: 12px 16px;
	background: var(--wp--preset--color--surface-2);
	border-left: 3px solid var(--wp--preset--color--accent);
	border-radius: 10px;
	font-size: 15.5px !important;
}
.sfm-shop-list { margin: 0 0 4px; }
.sfm-shop-row {
	display: grid;
	grid-template-columns: 96px 1fr;
	gap: 12px;
	padding: 10px 0;
	border-bottom: 1px dashed var(--wp--preset--color--line);
	font-size: 13.5px;
	line-height: 1.55;
}
.sfm-shop-row:last-child { border-bottom: 0; }
.sfm-shop-row dt {
	margin: 0;
	font-size: 11px;
	font-weight: 700;
	text-transform: uppercase;
	letter-spacing: .05em;
	color: var(--wp--preset--color--ink-soft);
	padding-top: 2px;
}
.sfm-shop-row dd { margin: 0; }
.sfm-shop-row a { color: var(--wp--preset--color--accent-dark); font-weight: 600; text-decoration: none; }
.sfm-shop-row a:hover { text-decoration: underline; }
.sfm-shop-photo {
	flex: 1;
	border-radius: 16px;
	overflow: hidden;
	box-shadow: 0 20px 45px -24px rgba(44, 44, 44, .35);
}
.sfm-shop-photo img {
	display: block;
	width: 100%;
	height: 100%;
	min-height: 280px;
	object-fit: cover;
}
@media (max-width: 781px) {
	/* Colonnes empilées : espace pour le badge de la carte suivante. */
	.wp-block-columns.sfm-shop { row-gap: 32px; }
}
@media (max-width: 480px) {
	.sfm-shop-row { grid-template-columns: 1fr; gap: 2px; }
}

/* ---------- §6 « Nos services » : visuels 313×140 et titres alignés ---------- */
.sfm-services .wp-block-columns { align-items: stretch; }
.sfm-services .wp-block-column { display: flex; }
.sfm-services .sfm-card { flex: 1; }
/* La mise en page "constrained" du groupe carte pose margin-inline:auto sur
   ses enfants : dans une carte en flex colonne, le conteneur photo se
   réduisait à la largeur de son contenu (132px pour le placeholder). */
.sfm-card--with-photo > .sfm-card-photo-wrap {
	align-self: stretch;
	width: 100%;
	max-width: none;
	height: 140px;
	margin: 0 0 16px !important;
}
.sfm-card-photo-wrap .sfm-photo-pending { height: 100%; min-height: 0; margin: 0; }
.sfm-card--with-photo > p:last-child { margin-top: auto; }
/* §6a Palliatif "Entretien skis" : entretien-skis.jpg ne fait que 313×115
   avec une bande blanche de 16px en haut — le zoom la masque mais l'image
   reste floue. À retirer dès qu'un export 900×333 (ratio 2,7:1, recadré
   serré sans bande blanche) remplace le fichier, ou dès qu'une image mise
   en avant est réglée sur la page Entretien skis (classe posée sur la seule
   photo de repli, cf. [sfm_page_thumbnail fallback_class]). */
.sfm-card-photo-wrap .sfm-card-photo--zoom {
	object-position: 50% 100%;
	transform: scale(1.3);
	transform-origin: 50% 65%;
}

/* ---------- §8 Pied de page : liens légaux + © sur une ligne ---------- */
.sfm-footer-legal {
	display: flex;
	flex-wrap: wrap;
	justify-content: center;
	align-items: center;
	gap: 6px 22px !important;
	margin-top: 24px;
	padding: 16px 0;
	border-top: 1px solid rgba(255, 255, 255, .12); /* le trait unique */
}
.sfm-footer-legal > * { margin-block: 0 !important; }
.sfm-footer-legal .sfm-footer-bottom { padding: 0 !important; margin: 0 !important; }

/* ---------- Pages produit et catalogue (v0.10.0, 24/09/2026) ----------
   Gabarits templates/single-par_product.html, archive-par_product.html et
   taxonomy-par_category.html (CPT `par_product` du plugin devenu public).
   Mêmes ingrédients que les pages intérieures (bandeau .sfm-page-hero,
   cartes à bordure fine + ombre douce des cartes de bas de page). */
.sfm-product-terms a { color: inherit; text-decoration: none; }
.sfm-product-terms a:hover { text-decoration: underline; }
.sfm-product-top { gap: 40px; align-items: flex-start; margin-bottom: 40px; }
.sfm-product-photo img,
.sfm-product-photo { border-radius: 16px; overflow: hidden; }
.sfm-product-photo { background: var(--wp--preset--color--surface); border: 1px solid var(--wp--preset--color--line); }
.sfm-product-photo img { object-fit: cover; width: 100%; height: 100%; }
.sfm-product-excerpt p { font-size: 17px; line-height: 1.6; margin: 0 0 8px; }
.sfm-product-summary .par-product-booking { margin-top: 12px; box-shadow: 0 20px 45px -24px rgba(44, 44, 44, .35); }
.sfm-product-description { max-width: 820px; margin: 0 0 32px; }
.sfm-product-description:empty { display: none; }
.sfm-product-back { font-weight: 600; margin: 0 0 48px; }
.sfm-product-back a { color: var(--wp--preset--color--accent-dark); text-decoration: none; }
.sfm-product-back a:hover { text-decoration: underline; }
@media (max-width: 781px) {
	.sfm-product-top { gap: 20px; }
}

.sfm-page-hero-lead p { margin: 8px 0 0; max-width: 720px; color: var(--wp--preset--color--ink-soft, #6B6660); }
.sfm-catalog-grid { gap: 24px !important; }
.sfm-catalog-card {
	height: 100%;
	display: flex;
	flex-direction: column;
	background: var(--wp--preset--color--surface);
	border: 1px solid var(--wp--preset--color--line);
	border-radius: 16px;
	overflow: hidden;
	box-shadow: 0 20px 45px -24px rgba(44, 44, 44, .35);
}
.sfm-catalog-card > * { width: 100%; }
.sfm-catalog-photo { margin: 0 !important; background: var(--wp--preset--color--ground); }
.sfm-catalog-photo img { object-fit: cover; width: 100%; height: 100%; display: block; }
.sfm-catalog-body { padding: 18px 20px 22px; display: flex; flex-direction: column; gap: 6px; flex: 1; }
.sfm-catalog-terms { font-size: 11.5px; font-weight: 700; text-transform: uppercase; letter-spacing: .05em; color: var(--wp--preset--color--accent-dark); margin: 0; }
.sfm-catalog-terms a { color: inherit; text-decoration: none; }
.sfm-catalog-title { font-size: 18px !important; margin: 0 !important; }
.sfm-catalog-title a { color: var(--wp--preset--color--ink); text-decoration: none; }
.sfm-catalog-title a:hover { color: var(--wp--preset--color--accent-dark); }
.sfm-catalog-excerpt { font-size: 14px; line-height: 1.55; margin: 0; }
.sfm-catalog-excerpt p { margin: 0 0 8px; }
.sfm-catalog-excerpt .wp-block-post-excerpt__more-link { font-weight: 700; color: var(--wp--preset--color--accent-dark); text-decoration: none; }
@media (max-width: 1024px) {
	.sfm-catalog-grid { grid-template-columns: repeat(2, minmax(0, 1fr)) !important; }
}
@media (max-width: 600px) {
	.sfm-catalog-grid { grid-template-columns: minmax(0, 1fr) !important; }
}

/* Bouton « Réserver » des fiches WooCommerce liées (plugin, mode hybride) :
   charte primaire du tunnel. */
.par-woo-book.button,
a.par-woo-book { background: #A5661F !important; color: #fff !important; }
.par-woo-book.button:hover,
a.par-woo-book:hover { background: #8A5419 !important; }
/* Produit sans photo mise en avant : la colonne photo disparaît et
   l'encart « Réserver » prend la largeur (évite une moitié de page vide). */
.sfm-product-top:not(:has(.sfm-product-media img)) .sfm-product-media { display: none; }
.sfm-product-top:not(:has(.sfm-product-media img)) .sfm-product-summary { flex-basis: 100% !important; max-width: 560px; }


/* ================= v0.11.0 (30/09/2026) — modèles de page, cartes, fonds =================
   Tout est scopé sous des classes .sfm-* ; couleurs = presets theme.json
   (--wp--preset--color--*), gouttière et ombres = settings.custom
   (--wp--custom--gutter, --wp--custom--shadow-*). Rien ne touche au pied de
   page (.sfm-footer*). */

/* ---------- §4 Tranche blanche des pages de contenu ----------
   main.sfm-content-slice : pleine largeur, fond « surface » (classe
   has-surface-background-color posée par le modèle). Collée au bandeau de
   titre (même blanc, séparés par le filet du bandeau), elle se termine par
   un filet + une ombre douce qui la détache du fond beige où suivent les
   cartes de bas de page. */
.wp-site-blocks > main.sfm-content-slice { margin-block-start: 0; }
main.sfm-content-slice {
	padding: var(--wp--custom--section-gap) var(--wp--custom--gutter);
	border-bottom: 1px solid var(--wp--preset--color--line);
	box-shadow: var(--wp--custom--shadow-soft);
	position: relative;
	z-index: 1;
}
/* Sur fond blanc, les éléments qui étaient blancs sur beige gardent un
   contraste : cartes et formulaire passent sur le beige clair / un filet. */
.sfm-content-slice .sfm-card { background: var(--wp--preset--color--ground); border-color: var(--wp--preset--color--line); }
.sfm-content-slice .wpcf7-form { box-shadow: var(--wp--custom--shadow-soft); }
.sfm-content-slice .wp-block-table { box-shadow: none; }

/* Modèle « Réservation » : même rendu que la page Réservation actuelle
   (fond beige) ; padding latéral aligné sur la gouttière du thème. */
main.sfm-reservation-main { padding-left: var(--wp--custom--gutter); padding-right: var(--wp--custom--gutter); }

/* ---------- §2/§3 Cartes de bas de page (template part autonome) ----------
   Zone sur le fond beige, entre la tranche blanche et le pied de page. */
.sfm-bottom-cards-part {
	padding: var(--wp--custom--section-gap) var(--wp--custom--gutter) calc(var(--wp--custom--section-gap) + 8px);
}
.wp-site-blocks > .sfm-bottom-cards-part { margin-block-start: 0; }
.sfm-bottom-cards-part .sfm-bottom-cards { margin-top: 0; }
.sfm-bottom-cards .sfm-bottom-cards-title {
	margin: 0 0 40px !important;
	font-size: clamp(22px, 3.2vw, 30px);
	font-weight: 700;
	line-height: 1.2;
	text-align: center;
	border: 0;
	padding: 0;
}
.sfm-bottom-cards .sfm-bottom-cards-title::after {
	content: "";
	display: block;
	width: 44px;
	height: 3px;
	margin: 14px auto 0;
	border-radius: 2px;
	background: var(--wp--preset--color--accent);
}
.sfm-bottom-cards-grid { gap: 28px 24px; }
@media (max-width: 781px) {
	/* Colonnes empilées : place pour le badge qui déborde en haut de carte. */
	.wp-block-columns.sfm-bottom-cards-grid { row-gap: 36px; }
}
/* Titre et texte des cartes : style propre, indépendant des styles
   génériques des titres/paragraphes (theme.json elements, .sfm-page-main). */
.sfm-bottom-card .sfm-bottom-card-title {
	margin: 0 0 8px !important;
	padding: 0;
	background: none;
	border: 0;
	border-radius: 0;
	font-family: var(--wp--preset--font-family--montserrat);
	font-size: 16px !important;
	font-weight: 700;
	line-height: 1.3;
	letter-spacing: .02em;
	text-transform: uppercase;
	color: var(--wp--preset--color--ink);
}
.sfm-bottom-card .sfm-bottom-card-text {
	margin: 0 0 6px !important;
	padding: 0;
	background: none;
	border: 0;
	border-radius: 0;
	font-size: 13.5px;
	line-height: 1.6;
	color: var(--wp--preset--color--ink);
}
.sfm-bottom-card .sfm-bottom-card-photo { margin: 4px 0 16px; }
.sfm-bottom-card .sfm-bottom-card-photo img { height: 130px; }

/* ---------- §5 Accueil : respiration des sections ----------
   Gouttière latérale (≥ 16px) sur les sections sous le héro : le bandeau
   marron (.sfm-recap) et les cartes ne touchent plus les bords quand la
   fenêtre est plus étroite que la largeur de contenu (1240px). */
.sfm-why,
.sfm-shop-section,
.sfm-services {
	padding-left: var(--wp--custom--gutter) !important;
	padding-right: var(--wp--custom--gutter) !important;
}
.sfm-why > .sfm-recap { max-width: 1240px; }
/* « Pourquoi choisir Ski Fun » : cartes blanches à ombre douce (même
   famille que les cartes de bas de page) au lieu d'un simple filet beige
   peu contrasté sur le fond beige. */
.sfm-why .sfm-card {
	border-color: transparent;
	box-shadow: var(--wp--custom--shadow-card);
}
.sfm-why .sfm-card-icon { box-shadow: inset 0 0 0 1px var(--wp--preset--color--accent-tint); }

/* ---------- §6 Page Contact : formulaire + Accès / Coordonnées ----------
   Bloc Colonnes .sfm-contact-layout (composition skifun-manigod/
   contact-layout). Côte à côte à partir de 900px (le seuil par défaut de
   WordPress, 782px, laissait un formulaire trop étroit) ; en dessous,
   empilé : formulaire d'abord, puis Accès et Coordonnées. */
.sfm-contact-intro { margin-bottom: 32px !important; font-size: 15px; }
.wp-block-columns.sfm-contact-layout { gap: 32px 48px; align-items: flex-start; }
.sfm-contact-layout .wpcf7-form { max-width: none; margin: 0; }
.sfm-contact-layout > .sfm-contact-aside { display: flex; flex-direction: column; gap: 20px; align-self: flex-start; }
.sfm-contact-aside > * { margin: 0 !important; }
.sfm-contact-card { padding: 24px 24px 22px; }
.sfm-contact-card .sfm-contact-card-title {
	margin: 0 0 12px !important;
	font-size: 15px !important;
	font-weight: 700;
	letter-spacing: .02em;
	text-transform: uppercase;
}
.sfm-contact-card p { margin: 0; line-height: 1.7; }
.sfm-contact-card a { color: var(--wp--preset--color--accent-dark); font-weight: 600; text-decoration: none; }
.sfm-contact-card a:hover { text-decoration: underline; }
@media (max-width: 899px) {
	.wp-block-columns.sfm-contact-layout { flex-wrap: wrap !important; }
	.wp-block-columns.sfm-contact-layout > .wp-block-column { flex-basis: 100% !important; }
}
@media (min-width: 900px) {
	/* Colonne droite collée en haut à l'écran pendant le défilement d'un
	   long formulaire. */
	.sfm-contact-aside { position: sticky; top: 24px; }
	.admin-bar .sfm-contact-aside { top: 56px; }
}

/* ---------- §7 Calendrier « Choisir mes dates » ----------
   Le panneau (composant du plugin, .par-daterange-panel) n'est plus coupé
   par le héro (voir .sfm-hero plus haut). Sur petit écran, dans le héro de
   l'accueil comme dans le tunnel de la page Réservation : un seul mois
   (la navigation ‹ › avance d'un mois) et jamais plus large que l'écran
   moins 2 × 16px — le panneau reste centré sur le champ (règle du plugin). */
@media (max-width: 620px) {
	.sfm-hero-widget .par-daterange-months > .par-daterange-month:nth-child(n+2),
	.sfm-page-main .par-daterange-months > .par-daterange-month:nth-child(n+2) { display: none; }
	/* Panneau calé sur la largeur du champ (bords gauche et droit), au lieu
	   d'être centré sur lui : un champ décalé par le padding d'une carte ne
	   pousse plus le panneau contre le bord de l'écran. Un mois tient dans
	   ~280px, largeur minimale du champ à 320px d'écran. */
	.sfm-hero-widget .par-daterange-panel,
	.sfm-page-main .par-daterange-panel {
		left: 0 !important;
		right: 0 !important;
		transform: none !important;
		width: auto;
		min-width: 0;
		max-width: calc(100vw - 32px);
		padding: 14px 12px;
	}
	.sfm-hero-widget .par-daterange-day,
	.sfm-page-main .par-daterange-day { width: 100%; max-width: 38px; justify-self: center; }
}
/* Constaté pendant la vérification à 375px (défaut antérieur, présent en
   v0.10.0) : la barre d'étapes du tunnel débordait de 15px (boutons flex
   sans min-width:0, libellés insécables) → défilement horizontal de toute
   la page Réservation. Palliatif scopé au thème ; à reporter dans
   tunnel.css du plugin à sa prochaine version. */
@media (max-width: 480px) {
	.sfm-page-main .par-steps > button { min-width: 0; }
	.sfm-page-main .par-step-label { overflow-wrap: anywhere; hyphens: auto; }
}


/* ================= v0.12.0 (30/09/2026) =================
   En-tête collant, illustrations des cartes de bas de page, carte Accès de
   la page Contact, pied de page plus discret. */

/* ---------- En-tête collant ----------
   `.sfm-topbar` était déjà déclaré `position: sticky` depuis v0.4 mais sans
   effet : il est le seul enfant du conteneur <header> du template part, qui
   fait exactement sa hauteur — un élément collant ne se déplace jamais hors
   de son parent. C'est ce conteneur, enfant direct de .wp-site-blocks, qui
   colle désormais. Barre d'administration : WordPress expose sa hauteur
   (--wp-admin--admin-bar--height) ; elle n'est plus fixe sous 601px. */
.wp-site-blocks > header.wp-block-template-part:has(> .sfm-topbar) {
	position: sticky;
	top: 0;
	z-index: 100;
}
.admin-bar .wp-site-blocks > header.wp-block-template-part:has(> .sfm-topbar) {
	top: var(--wp-admin--admin-bar--height, 32px);
}
@media (max-width: 600px) {
	.admin-bar .wp-site-blocks > header.wp-block-template-part:has(> .sfm-topbar) { top: 0; }
}
.sfm-topbar { position: relative; top: auto; }
.sfm-topbar,
.sfm-topbar-inner,
.sfm-brand img,
.sfm-cta .wp-block-button__link.sfm-btn-resa { transition: padding .2s ease, height .2s ease, box-shadow .2s ease; }
/* Version compacte dès que la page a défilé (classe posée par le script). */
.sfm-is-scrolled .sfm-topbar { box-shadow: 0 8px 22px -12px rgba(0, 0, 0, .55); }
.sfm-is-scrolled .sfm-topbar-inner { padding-top: 8px; padding-bottom: 8px; }
.sfm-is-scrolled .sfm-brand img { height: 22px; }
.sfm-is-scrolled .sfm-cta .wp-block-button__link.sfm-btn-resa { padding-top: 8px; padding-bottom: 8px; }
@media (prefers-reduced-motion: reduce) {
	.sfm-topbar, .sfm-topbar-inner, .sfm-brand img, .sfm-cta .wp-block-button__link.sfm-btn-resa { transition: none; }
}
/* Page Réservation sur mobile : le bandeau récapitulatif du tunnel (prix,
   panier) est déjà collant ; deux bandeaux empilés mangeraient l'écran —
   l'en-tête du site y défile normalement. */
@media (max-width: 781px) {
	.sfm-is-reservation .wp-site-blocks > header.wp-block-template-part:has(> .sfm-topbar) { position: relative; top: auto; }
}
/* Tunnel du plugin antérieur à v0.18.1 (qui ne lit pas --par-sticky-top) :
   même placement sous l'en-tête, forcé depuis le thème. */
.sfm-page-main .par-step1-sticky-bar { top: var(--sfm-sticky-offset, 0px); }
.sfm-page-main .par-cart-sidebar { top: calc(var(--sfm-sticky-offset, 0px) + 16px); }
/* Ancre #acces (pied de page, carte Adresse) : pas masquée par l'en-tête. */
html { scroll-padding-top: calc(var(--sfm-sticky-offset, 0px) + 16px); }

/* ---------- Cartes de bas de page : illustrations (blocs Image) ---------- */
.sfm-bottom-card figure.sfm-bottom-card-photo { margin: 4px 0 16px !important; border-radius: 12px; overflow: hidden; }
.sfm-bottom-card figure.sfm-bottom-card-photo img { display: block; width: 100%; height: 130px; object-fit: cover; border-radius: 0; }
.sfm-bottom-card figure.sfm-bottom-card-photo.is-illustration img { object-position: center bottom; }

/* ---------- Page Contact : carte Accès par provenance ---------- */
.sfm-contact-card .sfm-contact-route-title {
	margin: 18px 0 8px !important;
	font-size: 12.5px !important;
	font-weight: 700;
	letter-spacing: .05em;
	text-transform: uppercase;
	color: var(--wp--preset--color--accent-dark);
}
.sfm-contact-card .sfm-contact-card-title + .sfm-contact-route-title { margin-top: 0 !important; }
.sfm-page-main .sfm-contact-card ul.sfm-contact-route { gap: 6px; margin-bottom: 8px; }
.sfm-contact-card .sfm-contact-maps { margin: 0 0 4px !important; font-size: 13px; }
.sfm-contact-card .sfm-contact-maps a { display: inline-flex; align-items: center; gap: 6px; }
.sfm-contact-card .sfm-contact-maps a::before {
	content: "";
	width: 14px;
	height: 14px;
	flex: none;
	background: currentColor;
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 11l18-8-8 18-2-8z'/%3E%3C/svg%3E") center / contain no-repeat;
	        mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M3 11l18-8-8 18-2-8z'/%3E%3C/svg%3E") center / contain no-repeat;
}

/* ---------- Pied de page : liens discrets ---------- */

/* ---------- En-tête sur une seule ligne à toutes les largeurs ----------
   Collant, l'en-tête doit rester bas : il passait sur 2 à 3 lignes entre
   600 et 1260px (213px de haut à 768px). Menu resserré ; titre du site
   masqué entre 1024 et 1199px (le logo reste) ; menu « hamburger » sous
   1024px (le seuil natif du bloc Navigation est 600px). */
.sfm-nav .wp-block-navigation__container { column-gap: 4px; }
.sfm-nav a.wp-block-navigation-item__content.wp-block-navigation-item__content { padding: 8px; }
.sfm-topbar-inner { flex-wrap: nowrap !important; }
.sfm-topbar-inner > .sfm-nav { min-width: 0; }
@media (max-width: 1199px) {
	.sfm-brand-title { display: none; }
}
@media (min-width: 600px) and (max-width: 1023px) {
	.sfm-nav .wp-block-navigation__responsive-container-open:not(.always-shown) { display: flex; }
	.sfm-nav .wp-block-navigation__responsive-container:not(.hidden-by-default):not(.is-menu-open) { display: none; }
	.sfm-nav { flex-grow: 0; margin-left: auto; }
}
@media (max-width: 599px) {
	.sfm-nav { flex-grow: 0; margin-left: auto; }
}
/* Menu ouvert (hamburger) : tout l'écran sur le fond sombre de l'en-tête —
   seul le panneau intérieur l'avait, le reste de l'écran restait blanc. */
.sfm-nav .wp-block-navigation__responsive-container.is-menu-open {
	background: var(--wp--preset--color--chrome) !important;
	color: var(--wp--preset--color--white) !important;
	padding: 20px var(--wp--custom--gutter) 32px;
}
.sfm-nav .wp-block-navigation__responsive-container.is-menu-open .wp-block-navigation__responsive-container-content { padding-top: 48px; gap: 4px; }
.sfm-nav .wp-block-navigation__responsive-container.is-menu-open a.wp-block-navigation-item__content.wp-block-navigation-item__content {
	font-size: 16px;
	padding: 12px 8px;
}

/* v0.12.1 : liens dans les listes de la carte Accès (SNCF, car, navette). */
.sfm-contact-card .sfm-contact-route a { color: var(--wp--preset--color--accent-dark); font-weight: 600; text-decoration: underline; text-underline-offset: 2px; }
.sfm-contact-card .sfm-contact-route a:hover { text-decoration-thickness: 2px; }


/* ================= v0.13.0 (30/09/2026) — pied de page ================= */
/* Grille à 4 colonnes alignées en haut. Alignement retenu : le HAUT du logo
   et le haut des 4 titres de colonne sur la même ligne (boîtes alignées au
   pixel). Plutôt que de centrer le logo sur « titre + 1re ligne », ce qui
   dépend de la hauteur du texte et casse dès que la police change, on aligne
   les boîtes en haut et on retire ce qui décalait le rendu : le blanc interne
   du SVG (viewBox recadré sur le dessin, assets/images/
   skifun-logo-stacked-light.svg) et l'interlignage au-dessus des titres
   (line-height 1.2). Le haut visible du logo et le haut des capitales des
   titres tombent ainsi à quelques pixels l'un de l'autre. */
.sfm-footer {
	--sfm-footer-text: var(--wp--preset--color--line); /* 9,4:1 sur « chrome » */
	--sfm-footer-lh: 1.6;
	padding: 48px var(--wp--custom--gutter) 0;
}
.sfm-footer .sfm-footer-top {
	display: grid;
	grid-template-columns: 1.3fr 1fr 1fr 1fr;
	align-items: start;
	gap: 36px 40px;
	padding-bottom: 40px;
}
.sfm-footer .sfm-footer-top > * { margin: 0; min-width: 0; max-width: none; }
.sfm-footer .sfm-footer-brand > *,
.sfm-footer .sfm-footer-col > * { margin: 0; }

/* Marque : logo plus présent, légende juste dessous, même corps que les colonnes. */
.sfm-footer .sfm-footer-logo { display: block; height: 88px; width: auto; margin: 0; }
.sfm-footer .sfm-footer-tagline {
	margin-top: 14px;
	max-width: 30ch;
	font-size: inherit; /* 14px, taille de base de theme.json */
	line-height: var(--sfm-footer-lh);
	color: var(--sfm-footer-text);
}

/* Colonnes : un seul jeu de règles typographiques pour les 3. */
.sfm-footer .sfm-footer-label {
	margin: 0 0 12px;
	font-size: 12px;
	font-weight: 700;
	line-height: 1.2;
	letter-spacing: .08em;
	text-transform: uppercase;
	color: var(--wp--preset--color--white);
}
.sfm-footer .sfm-footer-col p,
.sfm-footer .sfm-footer-recap-list {
	font-size: inherit;
	line-height: var(--sfm-footer-lh);
	color: var(--sfm-footer-text);
}
.sfm-footer .sfm-footer-recap-list { list-style: none; margin: 0; padding: 0; }
.sfm-footer .sfm-footer-recap-list li { margin: 0; }
.sfm-footer .sfm-footer-col a { color: inherit; text-decoration: none; }
.sfm-footer .sfm-footer-col a:hover,
.sfm-footer .sfm-footer-col a:focus-visible { color: var(--wp--preset--color--white); text-decoration: underline; }

/* Accès : épingle en position absolue, les deux lignes d'adresse partagent
   le même retrait. */
.sfm-footer .sfm-footer-place a,
.sfm-footer .sfm-footer-icon-line a { position: relative; display: inline-block; padding-left: 22px; }
.sfm-footer .sfm-footer-place a::before,
.sfm-footer .sfm-footer-icon-line a::before {
	content: "";
	position: absolute;
	left: 0;
	top: calc((var(--sfm-footer-lh) * 1em - 15px) / 2);
	width: 15px;
	height: 15px;
	background: var(--wp--preset--color--accent);
	-webkit-mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 21s-7-6.2-7-11a7 7 0 0 1 14 0c0 4.8-7 11-7 11z'/%3E%3Ccircle cx='12' cy='10' r='2.5'/%3E%3C/svg%3E") center / contain no-repeat;
	        mask: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M12 21s-7-6.2-7-11a7 7 0 0 1 14 0c0 4.8-7 11-7 11z'/%3E%3Ccircle cx='12' cy='10' r='2.5'/%3E%3C/svg%3E") center / contain no-repeat;
}

/* Tablette : 2 colonnes (marque + Location de ski / Accès + Contact). */
@media (max-width: 1024px) {
	.sfm-footer .sfm-footer-top { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 36px 32px; }
}
/* Mobile : 1 colonne, tout aligné à gauche. */
@media (max-width: 600px) {
	.sfm-footer { padding-top: 40px; }
	.sfm-footer .sfm-footer-top { grid-template-columns: minmax(0, 1fr); gap: 28px; padding-bottom: 32px; }
	.sfm-footer .sfm-footer-logo { height: 72px; }
}
/* Ligne basse : liens puis copyright, retour à la ligne centré. */
@media (max-width: 600px) {
	.sfm-footer .sfm-footer-legal { flex-direction: column; gap: 10px; }
	.sfm-footer .sfm-footer-nav .wp-block-navigation__container { justify-content: center; flex-wrap: wrap; }
}


/* ================= v0.13.1 (01/10/2026) ================= */
/* Pied de page, colonne Contact : pictogrammes téléphone et enveloppe, même
   format que l'épingle de la colonne Accès (règles communes ci-dessus). */
.sfm-footer .sfm-footer-phone a::before { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.9v3a2 2 0 0 1-2.2 2 19.8 19.8 0 0 1-8.6-3.1 19.5 19.5 0 0 1-6-6 19.8 19.8 0 0 1-3.1-8.7A2 2 0 0 1 4.1 2h3a2 2 0 0 1 2 1.7c.1.9.4 1.8.7 2.7a2 2 0 0 1-.5 2.1L8 9.8a16 16 0 0 0 6 6l1.3-1.3a2 2 0 0 1 2.1-.4c.9.3 1.8.6 2.7.7a2 2 0 0 1 1.7 2z'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M22 16.9v3a2 2 0 0 1-2.2 2 19.8 19.8 0 0 1-8.6-3.1 19.5 19.5 0 0 1-6-6 19.8 19.8 0 0 1-3.1-8.7A2 2 0 0 1 4.1 2h3a2 2 0 0 1 2 1.7c.1.9.4 1.8.7 2.7a2 2 0 0 1-.5 2.1L8 9.8a16 16 0 0 0 6 6l1.3-1.3a2 2 0 0 1 2.1-.4c.9.3 1.8.6 2.7.7a2 2 0 0 1 1.7 2z'/%3E%3C/svg%3E"); }
.sfm-footer .sfm-footer-mail a::before { -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='14' rx='2'/%3E%3Cpath d='m3 7 9 6 9-6'/%3E%3C/svg%3E"); mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Crect x='3' y='5' width='18' height='14' rx='2'/%3E%3Cpath d='m3 7 9 6 9-6'/%3E%3C/svg%3E"); }
.sfm-footer .sfm-footer-phone a { text-decoration: none; }
.sfm-footer .sfm-footer-phone a:hover,
.sfm-footer .sfm-footer-phone a:focus-visible { text-decoration: underline; color: var(--wp--preset--color--white); }


/* Formulaire de contact : bouton « Envoyer » en vrai bouton d'action, même
   charte que « Réserver en ligne » (primaire #A5661F / survol #8A5419,
   contraste AA avec le blanc). */
.sfm-page-main .wpcf7-form input[type="submit"] {
	min-width: 200px;
	padding: 14px 32px;
	border: 0;
	border-radius: 10px;
	background: #A5661F;
	color: var(--wp--preset--color--white);
	font-family: inherit;
	font-size: 14px;
	font-weight: 700;
	letter-spacing: .04em;
	text-transform: uppercase;
	box-shadow: 0 8px 20px -8px rgba(201, 127, 46, .65);
	transition: background-color .15s ease, box-shadow .15s ease, transform .15s ease;
}
.sfm-page-main .wpcf7-form input[type="submit"]:hover:not(:disabled) {
	background: #8A5419;
	box-shadow: 0 10px 24px -8px rgba(201, 127, 46, .75);
	transform: translateY(-1px);
}
.sfm-page-main .wpcf7-form input[type="submit"]:focus-visible { outline: 2px solid #A5661F; outline-offset: 3px; }
@media (max-width: 600px) {
	.sfm-page-main .wpcf7-form input[type="submit"] { width: 100%; }
}
@media (prefers-reduced-motion: reduce) {
	.sfm-page-main .wpcf7-form input[type="submit"] { transition: none; }
	.sfm-page-main .wpcf7-form input[type="submit"]:hover:not(:disabled) { transform: none; }
}

/* ================= v0.13.2 (01/10/2026) ================= */
/* Listes des pages intérieures : puces simples (point accent) partout, comme
   dans la carte Accès de la page Contact depuis v0.13.1 — remplacent les
   cases cochées (.sfm-page-main ul.wp-block-list li::before/::after, v0.4.x),
   trop chargées dès que les listes s'allongent. */
.sfm-page-main ul.wp-block-list li { padding-left: 18px; }
.sfm-page-main ul.wp-block-list li::before {
	top: calc(.75em - 3px);
	width: 6px;
	height: 6px;
	border-radius: 50%;
	background: var(--wp--preset--color--accent);
	box-shadow: none;
}
.sfm-page-main ul.wp-block-list li::after { content: none; }

/* Héro de l'accueil : photo de paysage (Col de Merdassier) à la place de la
   façade agrandie. Recadrage centré sur le chalet quand la bande devient
   étroite (mobile). */
.sfm-hero-photo img { object-position: 72% 55%; }
