/* =====================================================================
   RC Signature — Direction artistique « Encre & Laiton » (refonte 2026, ISO 8 planches).
   Fond quasi-noir chaud + laiton/cuivré + respirations crème.
   Titres : Playfair Display (serif). Accents manuscrits : Great Vibes.
   Corps / labels : Inter (sans, auto-hébergée). reduced-motion respecté.
   Palette et composants alignés sur les maquettes graphiques transmises.
   ===================================================================== */

:root{
  --encre:#141210;        /* fond profond, quasi-noir chaud */
  --encre-2:#1b1815;      /* blocs / cartes */
  --sureleve:#232019;     /* blocs surélevés (tarif, badges, encarts) */
  --encre-3:#100e0c;      /* bandeaux très sombres (confiance, footer) */
  --papier:#f3ecdf;       /* crème chaud (sections claires, encart e-mail) */
  --papier-2:#FBF9F4;     /* carte crème claire */
  --laiton:#c89b5e;       /* accent métal principal */
  --laiton-clair:#e3bd80; /* laiton clair : titres accent, hover */
  --laiton-papier:#a37b41;/* laiton appuyé / sur fond clair */
  --craie:#ece5d8;        /* texte principal sur sombre */
  --sourdine:#b5ac9d;     /* texte secondaire sur sombre */
  --encre-texte:#22201E;  /* texte sur crème */
  --encre-texte-2:#5C574F;
  --ligne:rgba(200,155,94,.22);      /* bordure dorée translucide */
  --ligne-forte:rgba(200,155,94,.38);/* bordure dorée appuyée */
  --ligne-claire:rgba(236,231,221,.10);
  --or-degrade:linear-gradient(135deg,#e3bd80 0%,#c89b5e 52%,#a37b41 100%);
  --display:'Playfair Display','Georgia',serif;
  --script:'Great Vibes','Snell Roundhand',cursive;
  --texte:'Inter',system-ui,-apple-system,sans-serif;
  --mono:'Inter',system-ui,-apple-system,sans-serif;
  --rayon:4px;
  --rayon-carte:16px;
  --max:1240px;
}

*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth}
/* font-variant-numeric : Playfair Display sert par défaut des chiffres
   ELZÉVIRIENS (le 7 et le 0 descendent sous la ligne de base, le 1 est court).
   Mis à côté de libellés en Inter, un « +70 » ou un « 18K » semble alors écrit
   dans une troisième police — c'est ce qui sautait aux yeux sur /a-propos, qui
   est la page la plus chargée en nombres. On impose les chiffres alignés sur
   TOUT le document : la propriété est héritée, une seule déclaration suffit. */
body{font-family:var(--texte);background:var(--encre);color:var(--craie);font-size:17px;line-height:1.6;-webkit-font-smoothing:antialiased;
  font-variant-numeric:lining-nums;font-feature-settings:"lnum" 1}
img{max-width:100%;display:block}
a{color:inherit;text-decoration:none}
/* ⚠️ RÈGLE DE SURVIE (corrigée le 2026-08-09) : toute classe posée SUR un
   élément `.wrap` doit écrire `padding-top` / `padding-bottom` en toutes
   lettres, JAMAIS le raccourci `padding: 40px 0 20px`. Le raccourci remet la
   gouttière horizontale à zéro et, comme ces règles arrivent plus loin dans le
   fichier, elles gagnent sur `.wrap` à spécificité égale.
   Sur grand écran le max-width masquait le problème ; sur téléphone tout le
   contenu se collait au bord de l'écran — 17 sections étaient concernées. */
.wrap{max-width:var(--max);margin:0 auto;padding:0 32px}
.eyebrow{display:inline-flex;align-items:center;gap:13px;font-family:var(--texte);font-weight:600;font-size:13px;letter-spacing:.16em;text-transform:uppercase;color:var(--laiton)}
.eyebrow::before{content:"";width:30px;height:1px;background:currentColor;opacity:.6}
.sr-only{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}

h1,h2,h3{font-family:var(--display);font-weight:600;letter-spacing:-.01em}
h1{font-size:clamp(46px,5.4vw,72px);line-height:1.04}
h2{font-size:clamp(34px,3.8vw,50px);line-height:1.08}
h3{font-size:23px}
.italique-signe{font-style:italic;color:var(--laiton)}

/* ---------- Header ---------- */
header.site{position:sticky;top:0;z-index:50;background:rgba(18,16,13,.9);backdrop-filter:blur(14px);border-bottom:1px solid var(--ligne-claire)}
.nav{display:flex;align-items:center;justify-content:space-between;gap:24px;height:84px}
.marque{display:inline-flex;flex-direction:column;line-height:.86;flex:none}
/* Le PNG est de l'encre noire sur fond transparent : il sert de masque et la teinte
   vient de `background` — couleur exacte de la DA sans second fichier à maintenir. */
.marque-logo{display:block;height:64px;aspect-ratio:1164/736;background:var(--craie);
  -webkit-mask:url('../img/logo-rc-signature.png') center/contain no-repeat;
          mask:url('../img/logo-rc-signature.png') center/contain no-repeat;
  transition:background .2s}
.marque:hover .marque-logo{background:var(--laiton-clair)}
/* ⚠️ AUCUN RETOUR À LA LIGNE dans le menu sur ordinateur (exigence Thomas,
   2026-08-09). Les intitulés se sont allongés (« Locations courte durée »,
   « Services courte durée », « Locations mensuelles ») et, à 13px avec .14em
   d'interlettrage, la barre dépassait les 1240px du conteneur : le dernier lien
   passait à la ligne et la hauteur du header sautait.

   Trois leviers, dans cet ordre :
   1. `white-space:nowrap` sur chaque lien — un intitulé ne se coupe JAMAIS en
      deux, quoi qu'il arrive ensuite ;
   2. corps réduit à 11.5px et interlettrage à .07em — c'est l'interlettrage qui
      coûtait le plus cher, .14em ajoutait ~1,8px par caractère ;
   3. gouttière ramenée de 34 à 22px.
   Un palier supplémentaire à 1150px resserre encore avant le passage au burger
   (960px), pour couvrir les portables 13 pouces et les fenêtres réduites. */
nav.liens{display:flex;align-items:center;gap:22px;font-size:11.5px;font-weight:600;letter-spacing:.07em;text-transform:uppercase;margin-left:auto;flex-wrap:nowrap}
nav.liens a{color:var(--craie);opacity:.78;transition:opacity .2s,color .2s;position:relative;padding:6px 0;white-space:nowrap}
nav.liens a:hover,nav.liens a.actif{opacity:1;color:var(--laiton)}
/* Lien de menu sur deux lignes : intitulé Switzer capitales + sous-titre Playfair
   italique. `color:inherit` laisse le survol/actif repeindre les deux lignes. */
nav.liens a.lien-2l{display:flex;flex-direction:column;gap:1px}
nav.liens a.lien-2l .sous{font-family:var(--display);font-size:11px;font-style:italic;font-weight:400;letter-spacing:.02em;text-transform:none;line-height:1.25;color:inherit;opacity:.72}
.nav-droite{display:flex;align-items:center;gap:18px}

/* Sélecteur de langue à drapeaux */
.drapeau{width:22px;height:15px;border-radius:2px;flex:none;box-shadow:0 0 0 1px rgba(236,231,221,.22);object-fit:cover}
.langue-select{position:relative}
.langue{display:flex;align-items:center;gap:8px;font-family:var(--texte);font-size:13px;font-weight:600;letter-spacing:.08em;color:var(--craie);background:none;border:none;cursor:pointer;padding:6px 4px;opacity:.9}
.langue:hover{opacity:1}
.langue .chevron{width:10px;height:6px;opacity:.7;transition:transform .2s}
.langue[aria-expanded="true"] .chevron{transform:rotate(180deg)}
.langue-menu{position:absolute;top:150%;right:0;background:var(--encre-2);border:1px solid var(--ligne-claire);border-radius:var(--rayon);padding:6px;min-width:172px;display:none;flex-direction:column;z-index:60;box-shadow:0 24px 48px rgba(0,0,0,.5)}
.langue-menu.ouvert{display:flex}
.langue-menu a{display:flex;align-items:center;gap:11px;font-size:14px;font-weight:500;padding:9px 12px;border-radius:var(--rayon);opacity:.82;transition:background .18s,opacity .18s}
.langue-menu a:hover,.langue-menu a.actif{background:rgba(200,155,94,.14);opacity:1;color:var(--laiton)}
/* Réplique du CTA, révélée dans le menu sous 960px. Doit battre `.btn{display:inline-flex}`
   défini plus bas : à spécificité égale l'ordre trancherait en faveur de `.btn`. */
nav.liens > .cta-menu{display:none}
.burger{display:none;flex-direction:column;justify-content:center;gap:5px;width:38px;height:38px;background:none;border:none;cursor:pointer}
.burger span{display:block;height:1.5px;width:22px;background:var(--craie);transition:.25s}

/* ---------- Boutons ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:15px 30px;border-radius:var(--rayon);font-weight:600;font-size:13px;letter-spacing:.1em;text-transform:uppercase;font-family:var(--texte);cursor:pointer;transition:transform .15s ease,background .2s,border-color .2s,color .2s;border:none;white-space:nowrap}
.btn:active{transform:scale(.98)}
.btn-plein{background:var(--or-degrade);color:#1c1913;box-shadow:0 10px 26px rgba(200,155,94,.22)}
.btn-plein:hover{filter:brightness(1.06);box-shadow:0 14px 32px rgba(200,155,94,.3)}
.btn-ligne{border:1px solid rgba(236,231,221,.32);color:var(--craie);background:transparent}
.btn-ligne:hover{border-color:var(--laiton);color:var(--laiton)}
.btn-large{width:100%;padding:17px}
/* pointer-events:none car le CTA « Réserver » est un <a> : l'attribut `disabled` que
   pose front.js n'y a aucun effet natif, le lien restait cliquable malgré le grisé. */
.btn[disabled]{opacity:.5;cursor:not-allowed;pointer-events:none}
.btn-papier{background:var(--laiton-papier);color:var(--papier)}
.btn-papier:hover{background:var(--laiton)}

/* ---------- Hero (plein cadre photo) ---------- */
.hero{position:relative;min-height:86vh;display:flex;align-items:center;overflow:hidden;background:var(--encre)}
.hero-media{position:absolute;inset:0;z-index:0}
.hero-media img{width:100%;height:100%;object-fit:cover}
.hero-media::after{content:"";position:absolute;inset:0;
  background:linear-gradient(96deg,rgba(18,16,13,.94) 0%,rgba(18,16,13,.78) 34%,rgba(18,16,13,.42) 62%,rgba(18,16,13,.18) 100%),
             linear-gradient(0deg,rgba(18,16,13,.55) 0%,rgba(18,16,13,0) 40%)}
.hero-media.vide{background:linear-gradient(150deg,#26221b,#141210 60%)}
.hero-inner{position:relative;z-index:2;width:100%}
.hero-contenu{max-width:600px}
.hero .eyebrow{margin-bottom:22px}
.hero h1{margin:0 0 26px}
.hero h1 em{display:block;font-style:italic;color:var(--laiton);font-weight:500}
.hero p.chapo{font-size:19px;line-height:1.55;color:#D9D5CC;max-width:520px;margin-bottom:38px}
.hero p.chapo b{color:var(--craie);font-weight:600}
.hero-actions{display:flex;align-items:center;gap:22px;flex-wrap:wrap}
.lien-video{display:inline-flex;align-items:center;gap:14px;font-size:13px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--craie);cursor:pointer;transition:color .2s}
.lien-video:hover{color:var(--laiton)}
.lien-video .play{width:46px;height:46px;border-radius:50%;border:1px solid var(--ligne);display:grid;place-items:center;color:var(--laiton);transition:background .2s,border-color .2s;flex:none}
.lien-video:hover .play{background:rgba(200,155,94,.14);border-color:var(--laiton)}
.lien-video .play svg{width:14px;height:14px;margin-left:2px}

/* ---------- Bandeau confiance (4 piliers) ---------- */
.confiance{background:var(--encre-3);border-top:1px solid var(--ligne-claire)}
.confiance .wrap{display:grid;grid-template-columns:repeat(4,1fr);gap:26px;padding:34px 32px}
.confiance-item{display:flex;align-items:center;gap:16px}
.confiance-item .ico{color:var(--laiton);flex:none}
.confiance-item .ico svg{width:34px;height:34px}
.confiance-item .t{font-family:var(--texte);font-weight:600;font-size:13.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--craie)}
.confiance-item .s{font-size:13px;color:var(--sourdine);margin-top:3px}

/* ---------- Section « coups de cœur » (papier) ---------- */
/* 56px et non 100 : sous le bandeau « confiance », 100px de crème vide avant
   « Nos coups de cœur » faisaient un trou au milieu de la page d'accueil. */
.coeur{background:var(--papier);color:var(--encre-texte);padding:56px 0 90px}
/* Deux sections « coups de cœur » se suivent sur l'accueil (courte durée puis
   mensuelles) : 100px de bas + 100px de haut + la marge du CTA faisaient ~250px
   de crème vide entre le bouton et le titre suivant. Elles partagent le même
   fond, la césure n'a donc pas besoin d'être payée deux fois. */
.coeur + .coeur{padding-top:0}
.coeur .eyebrow{color:var(--laiton-papier)}
.coeur .entete{display:flex;align-items:flex-end;justify-content:space-between;gap:32px;margin-bottom:46px}
/* Pas de retour à la ligne dans les titres de section (consigne Thomas) : les
   intitulés sont volontairement courts, `nowrap` garantit qu'ils le restent
   même à 50px de corps. Sous 640px on rend la coupure possible, sinon un titre
   déborderait de l'écran. */
.coeur .entete h2{margin-top:14px;color:var(--encre-texte);white-space:nowrap}
/* Sur /collection sans filtre, le titre du bloc « courte durée » est le <h1>
   de la page (elle n'en avait aucun). Il doit rester VISUELLEMENT identique au
   <h2> du bloc mensuel juste en dessous : on lui rend le corps du h2. */
.section-papier > .wrap > h2,
.section-papier > .wrap > h1.titre-bloc{white-space:nowrap}
.section-papier > .wrap > h1.titre-bloc{font-size:clamp(34px,3.8vw,50px);line-height:1.08}
@media(max-width:640px){
  .coeur .entete h2,
  .section-papier > .wrap > h2,
  .section-papier > .wrap > h1.titre-bloc{white-space:normal}
}
.fleches{display:flex;gap:12px;flex:none}
.fleche{width:52px;height:52px;border-radius:50%;border:1px solid rgba(34,32,30,.22);background:transparent;color:var(--encre-texte);display:grid;place-items:center;cursor:pointer;transition:background .2s,border-color .2s,color .2s,opacity .2s}
.fleche:hover{border-color:var(--laiton-papier);color:var(--laiton-papier)}
.fleche svg{width:20px;height:20px}
.fleche[disabled]{opacity:.35;cursor:not-allowed}
/* ⚠️ `overflow-y:hidden` est OBLIGATOIRE, pas décoratif : quand un seul axe
   est `auto`, l'autre passe de `visible` à `auto` tout seul. La piste devenait
   donc défilable verticalement, et il suffisait d'un doigt pour soulever une
   carte et la faire passer derrière — le bug signalé sur téléphone.
   Le fondu d'apparition n'utilise plus translateY() ici non plus (front.js) :
   un décalage vertical alimentait cette zone défilable.
   Les paddings verticaux laissent respirer l'ombre portée et le survol
   (`.carte:hover` monte de 5px), qui seraient sinon rognés. */
.coeur-piste{display:grid;grid-auto-flow:column;grid-auto-columns:calc((100% - 2*28px)/3);gap:28px;overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;scroll-behavior:smooth;padding:8px 0 16px;scrollbar-width:none}
.coeur-piste::-webkit-scrollbar{display:none}
.coeur-piste > *{scroll-snap-align:start}
.coeur-cta{display:flex;justify-content:center;margin-top:38px}

/* ---------- Cartes logement (photo sombre, texte incrusté) ---------- */
.carte{position:relative;display:block;aspect-ratio:4/5;border-radius:var(--rayon-carte);overflow:hidden;background:var(--encre-2);
  box-shadow:0 18px 40px rgba(34,32,30,.14);transition:transform .3s ease,box-shadow .3s ease}
.carte:hover{transform:translateY(-5px);box-shadow:0 30px 60px rgba(34,32,30,.24)}
.carte .visuel{position:absolute;inset:0}
.carte .visuel img{width:100%;height:100%;object-fit:cover;transition:transform .6s ease}
.carte:hover .visuel img{transform:scale(1.05)}
.carte .visuel::after{content:"";position:absolute;inset:0;background:linear-gradient(0deg,rgba(16,14,11,.9) 0%,rgba(16,14,11,.45) 34%,rgba(16,14,11,.05) 58%,rgba(16,14,11,.18) 100%)}
.carte .plaque-carte{position:absolute;top:18px;left:18px;z-index:2;background:rgba(18,16,13,.72);backdrop-filter:blur(4px);color:var(--craie);
  font-family:var(--mono);font-size:11px;font-weight:600;letter-spacing:.18em;padding:8px 12px;border-radius:3px;border:1px solid var(--ligne-claire)}
/* Pastille « favori ». ⚠️ Ne pas la rétrécir ni la déplacer en croyant corriger
   un « cœur coupé » : mesuré au 2026-08-10, la pastille (38px à 18px du bord) ne
   mord PAS sur l'arrondi de 16px du cadre, et le SVG (18px dans une boîte 24×24,
   tracé haut de 15,4 unités) n'est clippé par rien. Le défaut venait du TRACÉ
   lui-même, malformé — il a été refait dans carte_logement.php. Cette géométrie-ci
   est la bonne, elle a juste été changée une fois pour un mauvais motif. */
.carte .coeur-ic{position:absolute;top:18px;right:18px;z-index:3;width:38px;height:38px;border-radius:50%;background:rgba(255,255,255,.94);display:grid;place-items:center;color:var(--laiton-papier);box-shadow:0 2px 10px rgba(16,14,11,.25)}
.carte .coeur-ic svg{width:18px;height:18px}
.carte .infos{position:absolute;left:0;right:0;bottom:0;z-index:2;padding:26px 26px 28px}
.carte .infos h3{font-family:var(--display);font-size:27px;font-weight:600;color:#fff;margin:0}
.carte .infos .sous{font-size:15px;color:#DCD7CD;margin-top:5px;display:-webkit-box;-webkit-line-clamp:1;line-clamp:1;-webkit-box-orient:vertical;overflow:hidden}
.carte .infos .lieu{display:flex;align-items:center;gap:7px;margin-top:14px;font-size:13px;letter-spacing:.02em;color:var(--laiton-clair)}
.carte .infos .lieu svg{width:14px;height:14px;flex:none}

/* Grille (page collection) */
.grille-logements{display:grid;grid-template-columns:repeat(3,1fr);gap:30px}
.grille-2{grid-template-columns:1fr 1fr}
/* ⚠️ Le passage en piste horizontale sous 960px est plus bas, dans le bloc
   responsive : sur tactile, les logements se parcourent TOUJOURS de droite à
   gauche, jamais en pile verticale (cf. « Défilement des logements »). */

/* ---------- Flèches de piste : une à GAUCHE, une à DROITE des annonces ----------
   Demande Thomas 2026-08-14. TOUTE liste d'annonces (carrousels de l'accueil et
   listings /collection) porte ses flèches sur les bords mêmes de la piste, contre
   les cartes. Plus jamais en haut, groupées dans un coin d'entête : le geste doit
   partir de là où sont les cartes.

   Fond plein et ombre portée, PAS le rond détouré de `.fleche` : ces flèches-là
   passent au-dessus des photos des cartes, où un simple filet disparaîtrait.

   `sans-fleches` est posée dans le HTML et retirée par front.js quand la piste
   déborde vraiment : sans JS le clic ne ferait rien, et sur la grille de bureau
   il n'y a rien à faire défiler. Aux extrémités, le bouton s'efface (opacity:0)
   au lieu de se griser : sur une photo, un rond à 35% reste une tache. */
.piste-nav{position:relative}
.piste-nav.sans-fleches .fleche-piste{display:none}
.fleche-piste{position:absolute;top:50%;transform:translateY(-50%);z-index:4;
  width:46px;height:46px;background:rgba(255,255,255,.94);border-color:transparent;
  color:var(--encre);box-shadow:0 3px 14px rgba(16,14,11,.22)}
.fleche-piste:hover{background:#fff;border-color:transparent;color:var(--laiton-papier)}
.fleche-prec{left:6px}
.fleche-suiv{right:6px}
.fleche-piste[disabled]{opacity:0;pointer-events:none}

/* ---------- Section « L'exigence comme signature » (stats) ---------- */
.exigence{background:var(--encre);padding:104px 0;position:relative;border-top:1px solid var(--ligne-claire)}
.exigence .wrap{display:grid;grid-template-columns:.95fr 1.05fr;gap:70px;align-items:center}
.exigence h2{margin:16px 0 24px}
.exigence h2 span{display:block}
.exigence h2 .accent{color:var(--laiton);font-style:italic}
.exigence p{color:var(--sourdine);max-width:420px;margin-bottom:32px;font-size:16.5px}
.stats{display:grid;grid-template-columns:repeat(4,1fr);gap:20px}
.stat{padding:6px 4px}
.stat .ico{color:var(--laiton);margin-bottom:16px}
.stat .ico svg{width:34px;height:34px}
.stat .v{font-family:var(--display);font-size:38px;font-weight:600;color:var(--craie);line-height:1}
.stat .l{font-size:12px;letter-spacing:.08em;text-transform:uppercase;color:var(--sourdine);margin-top:10px;line-height:1.4}

/* ---------- Sections papier / sombre génériques (pages internes) ---------- */
.section-papier{background:var(--papier);color:var(--encre-texte);padding:100px 0}
.section-papier .eyebrow{color:var(--laiton-papier)}
.section-papier h2 em{font-style:italic;color:var(--laiton-papier)}
.section-sombre{padding:100px 0}
.entete-section{display:flex;align-items:flex-end;justify-content:space-between;gap:40px;margin-bottom:52px}
.entete-section h2{margin-top:14px}
.tout-voir{font-weight:600;font-size:14px;letter-spacing:.02em;border-bottom:1.5px solid var(--laiton-papier);padding-bottom:3px;color:var(--encre-texte);white-space:nowrap}

/* ---------- Grille de cartes « éditoriales » (services / expériences) ---------- */
.cartes-edito{display:grid;grid-template-columns:repeat(3,1fr);gap:26px;margin-top:14px}
.cartes-edito.cartes-2{grid-template-columns:repeat(2,1fr);max-width:960px;margin-left:auto;margin-right:auto}
.carte-edito{border:1px solid var(--ligne-claire);border-radius:var(--rayon-carte);padding:34px 30px;background:rgba(236,231,221,.02);transition:border-color .25s,background .25s,transform .25s}
.carte-edito:hover{border-color:var(--ligne);background:rgba(200,155,94,.05);transform:translateY(-4px)}
/* Variante illustrée : la photo remplace le picto, à fond perdu en haut de carte.
   Les cartes SANS photo gardent leur picto — la grille accepte les deux, il suffit
   de renseigner `img` dans front-nos-services.php le jour où le visuel existe. */
.carte-edito.avec-photo{display:flex;flex-direction:column;padding:0;overflow:hidden}
.carte-edito-photo{display:block;position:relative;aspect-ratio:16/10;overflow:hidden;
  background:linear-gradient(150deg,#26221b,#2b271f)}
.carte-edito-photo img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform .5s ease}
.carte-edito.avec-photo:hover .carte-edito-photo img{transform:scale(1.05)}
.carte-edito-corps{display:block;padding:26px 28px 30px}
/* La carte au picto conserve son ancien gabarit : le corps n'y ajoute pas de marge. */
.carte-edito:not(.avec-photo) .carte-edito-corps{padding:0}
.carte-edito .ico{width:48px;height:48px;border:1px solid var(--ligne);border-radius:50%;display:grid;place-items:center;color:var(--laiton);margin-bottom:22px}
.carte-edito .ico svg{width:24px;height:24px}
.carte-edito h3{font-size:21px;color:var(--craie);margin-bottom:10px}
.carte-edito p{color:var(--sourdine);font-size:15px}
.section-papier .carte-edito{border-color:rgba(34,32,30,.12);background:var(--papier-2)}
.section-papier .carte-edito:hover{border-color:var(--laiton-papier);background:#fff}
.section-papier .carte-edito .ico{border-color:rgba(34,32,30,.18);color:var(--laiton-papier)}
.section-papier .carte-edito h3{color:var(--encre-texte)}
.section-papier .carte-edito p{color:var(--encre-texte-2)}

/* En-tête de page interne (bandeau titre) */
.page-entete{padding-top:70px;padding-bottom:10px;text-align:center}
.page-entete .eyebrow{justify-content:center}
.page-entete h1{margin:18px 0 20px}
.page-entete .intro{max-width:620px;margin:0 auto;color:var(--sourdine);font-size:18px}

/* ---------- Arguments direct (générique) ---------- */
.direct-grille{display:grid;grid-template-columns:repeat(3,1fr);gap:26px;margin-top:52px}
.argument{border:1px solid var(--ligne-claire);border-radius:var(--rayon-carte);padding:34px 30px;background:rgba(236,231,221,.02)}
.argument .marque{display:block;width:34px;height:1.5px;background:var(--laiton);margin-bottom:22px}
.argument h3{margin:0 0 10px}
.argument p{color:var(--sourdine);font-size:15.5px}

/* ---------- Avis ---------- */
.avis-grille{display:grid;grid-template-columns:repeat(3,1fr);gap:26px;margin-top:52px}
.temoin{background:var(--papier-2);border:1px solid rgba(34,32,30,.1);padding:30px;border-radius:var(--rayon-carte)}
.etoiles{color:var(--laiton-papier);letter-spacing:3px;font-size:14px}
.temoin blockquote{font-family:var(--display);font-size:19px;line-height:1.5;margin:16px 0 20px;font-weight:400;color:var(--encre-texte)}
.temoin .qui{font-family:var(--mono);font-size:12px;letter-spacing:.04em;color:var(--encre-texte-2)}
.temoin .source{display:inline-block;margin-left:8px;padding:2px 8px;border:1px solid rgba(34,32,30,.18);border-radius:99px;font-size:10px;text-transform:uppercase}

/* ---------- CTA final ---------- */
.final{padding:110px 0;border-top:1px solid var(--ligne-claire)}
.final .wrap{display:grid;grid-template-columns:1.15fr .85fr;gap:56px;align-items:end}
.final h2{max-width:15ch;margin:0}
.final .final-aparte{padding-bottom:6px}
.final p{color:var(--sourdine);max-width:460px;margin:0 0 26px}

/* ---------- Footer ---------- */
footer.site{background:var(--encre-3);border-top:1px solid var(--ligne-claire);padding:64px 0 40px;color:var(--sourdine)}
.footer-haut{display:flex;justify-content:space-between;gap:40px;flex-wrap:wrap;padding-bottom:40px;border-bottom:1px solid var(--ligne-claire)}
.footer-marque .marque-logo{height:58px}
.footer-marque p{margin-top:14px;font-size:14px;max-width:280px}
.footer-cols{display:flex;gap:64px;flex-wrap:wrap}
.footer-col h4{font-family:var(--texte);font-size:12px;letter-spacing:.14em;text-transform:uppercase;color:var(--craie);margin-bottom:16px;font-weight:600}
.footer-col a{display:block;font-size:14.5px;margin-bottom:10px;color:var(--sourdine);transition:color .2s}
.footer-col a:hover{color:var(--laiton)}
.footer-bas{display:flex;justify-content:space-between;align-items:center;flex-wrap:wrap;gap:12px;padding-top:26px;font-size:13px}
.footer-bas a:hover{color:var(--craie)}
.footer-langues{display:flex;gap:10px;align-items:center}
.footer-langues a{display:inline-flex;opacity:.72;transition:opacity .2s}
.footer-langues a:hover{opacity:1}

/* ---------- Fil d'ariane / retour ---------- */
.fil{padding-top:28px;padding-bottom:0;font-family:var(--mono);font-size:12px;letter-spacing:.06em;color:var(--sourdine)}
.fil a:hover{color:var(--laiton)}

/* ---------- Fiche logement ---------- */
.fiche-hero{padding-top:40px;padding-bottom:20px}
.fiche-plaque{font-family:var(--mono);font-size:12px;letter-spacing:.2em;color:var(--laiton);margin-bottom:14px}
.fiche-titre-ligne{display:flex;justify-content:space-between;align-items:flex-end;gap:32px;flex-wrap:wrap}
.fiche-meta{display:flex;gap:26px;font-family:var(--mono);font-size:13px;color:var(--sourdine);margin-top:16px;flex-wrap:wrap}
.fiche-meta span{display:inline-flex;align-items:center;gap:8px}
.fiche-meta svg{width:16px;height:16px;flex:none;color:var(--laiton)}
.fiche-meta b{color:var(--craie);font-family:var(--display);font-weight:500}
.galerie{display:grid;grid-template-columns:2fr 1fr 1fr;grid-auto-rows:200px;gap:12px;margin:30px 0 0;position:relative}
/* .g-item est un <button> depuis l'ajout de la visionneuse : on annule le style natif. */
.galerie .g-item{border-radius:var(--rayon);overflow:hidden;position:relative;background:linear-gradient(158deg,#26221b,#2b271f);
  border:0;padding:0;font:inherit;color:inherit;display:block;width:100%;height:100%;cursor:zoom-in}
.galerie .g-item:focus-visible{outline:2px solid var(--laiton);outline-offset:3px}
.galerie .g-item:first-child{grid-row:span 2;grid-column:span 1}
.galerie .g-item img{width:100%;height:100%;object-fit:cover}
.fiche-corps{display:grid;grid-template-columns:1.5fr .9fr;gap:56px;padding-top:34px;padding-bottom:54px;align-items:start}
/* min-width:0 sur les deux colonnes : sans ça `min-width:auto` laisse un contenu large
   (calendrier, tableau, mot long) élargir sa colonne au-delà de sa part de fr. */
.fiche-corps > *{min-width:0}
.fiche-recit p{color:var(--craie);margin-bottom:18px;font-size:17px}
.signature-hote{display:flex;align-items:center;gap:16px;margin:28px 0 0;padding:22px;border:1px solid var(--ligne);border-radius:var(--rayon);background:rgba(200,155,94,.05)}
.signature-hote .avatar{width:56px;height:56px;border-radius:50%;background:var(--encre-2);flex:none;overflow:hidden;border:1px solid var(--ligne)}
.signature-hote .avatar img{width:100%;height:100%;object-fit:cover}
.signature-hote .qui{font-family:var(--mono);font-size:11px;letter-spacing:.14em;color:var(--laiton);text-transform:uppercase}
.signature-hote .nom{font-family:var(--display);font-size:22px;font-style:italic;color:var(--craie)}
.equip-grille{display:grid;grid-template-columns:repeat(2,1fr);gap:14px 24px;margin-top:20px}
.equip{display:flex;gap:12px;align-items:center;color:var(--craie);font-size:15px}
.equip .ico{width:34px;height:34px;border:1px solid var(--ligne);border-radius:var(--rayon);display:grid;place-items:center;color:var(--laiton);flex:none;font-size:15px}
.equip .ico svg{width:16px;height:16px}
.bloc-titre{font-family:var(--texte);font-weight:600;font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--laiton);margin:36px 0 16px}

/* Panneau de réservation (sticky) */
.panneau-resa{position:sticky;top:104px;border:1px solid var(--ligne);border-radius:var(--rayon);padding:28px;background:var(--encre-2)}
.panneau-resa .prix-ligne{display:flex;align-items:baseline;gap:8px;margin-bottom:6px}
.panneau-resa .prix-des{font-family:var(--mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:var(--sourdine)}
.panneau-resa .prix-ligne b{font-family:var(--display);font-size:32px;font-weight:500}
.panneau-resa .prix-ligne span{font-family:var(--mono);font-size:13px;color:var(--sourdine)}
.rarete{font-family:var(--mono);font-size:12px;color:var(--laiton);letter-spacing:.04em;margin:14px 0 22px;display:flex;gap:8px;align-items:center}
.champ{margin-bottom:16px}
.champ label{display:block;font-family:var(--mono);font-size:11px;letter-spacing:.1em;text-transform:uppercase;color:var(--sourdine);margin-bottom:7px}
.champ input,.champ select,.champ textarea{width:100%;padding:13px 14px;background:var(--encre);border:1px solid var(--ligne-claire);border-radius:var(--rayon);color:var(--craie);font-family:var(--texte);font-size:15px}
.champ input:focus,.champ select:focus,.champ textarea:focus{outline:none;border-color:var(--laiton)}
.champ-2{display:grid;grid-template-columns:1fr 1fr;gap:12px}
/* ---------- Calendrier de réservation (maison, aucune lib) ---------- */
.date-champ{width:100%;padding:13px 14px;background:var(--encre);border:1px solid var(--ligne-claire);border-radius:var(--rayon);color:var(--craie);font-family:var(--texte);font-size:15px;text-align:left;cursor:pointer;transition:border-color .2s}
.date-champ:hover{border-color:var(--ligne)}
.date-champ.actif{border-color:var(--laiton)}
.date-champ span{opacity:.45}
.date-champ.rempli span{opacity:1}
.cal{margin:-2px 0 16px;padding:14px;background:var(--encre);border:1px solid var(--ligne);border-radius:var(--rayon)}
.cal[hidden]{display:none}
.cal-tete{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px}
.cal-tete b{font-family:var(--display);font-size:16px;font-weight:500;color:var(--craie);text-transform:capitalize}
.cal-nav{width:28px;height:28px;border:1px solid var(--ligne-claire);border-radius:var(--rayon);background:none;color:var(--craie);display:grid;place-items:center;cursor:pointer;transition:border-color .2s,color .2s}
.cal-nav:hover:not([disabled]){border-color:var(--laiton);color:var(--laiton)}
.cal-nav[disabled]{opacity:.3;cursor:not-allowed}
.cal-nav svg{width:12px;height:12px}
.cal-grille{display:grid;grid-template-columns:repeat(7,1fr);gap:2px}
.cal-nom{font-family:var(--mono);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--sourdine);text-align:center;padding:2px 0 6px}
/* height fixe et NON aspect-ratio : dans une colonne de grille dimensionnable par son
   contenu, aspect-ratio gonfle la largeur intrinsèque des cases — le panneau enflait
   et faisait déborder la page entière. */
.cal-jour{height:34px;padding:0;border:none;background:none;color:var(--craie);font-family:var(--texte);font-size:13px;border-radius:var(--rayon);cursor:pointer;transition:background .15s,color .15s}
.cal-jour:hover:not(:disabled){background:rgba(200,155,94,.2)}
/* Nuit prise (blocage manuel, iCal plateforme, ou résa) ou hors plage. */
.cal-jour:disabled{color:var(--sourdine);opacity:.35;cursor:not-allowed;text-decoration:line-through}
/* Case de décalage avant le 1er du mois. Nom PROPRE au calendrier : `.vide` est le
   style des messages d'état vide (80 px de padding), et une case qui le portait
   étirait sa rangée à 160 px — le mois s'affichait coupé en deux. */
.cal-jour.cal-vide{visibility:hidden}
.cal-jour.entre{background:rgba(200,155,94,.16)}
/* L'arrivée est PLEINE (nuit dormie, donc facturée), le départ seulement CERCLÉ :
   on ne dort pas la nuit du départ. Les peindre pareil laissait croire que deux
   jours sélectionnés = deux nuits. */
.cal-jour.debut{background:var(--laiton);color:#1c1913;font-weight:600}
.cal-jour.fin{background:rgba(200,155,94,.16);box-shadow:inset 0 0 0 1.5px var(--laiton);color:var(--craie);font-weight:600}
.cal-jour.debut:disabled,.cal-jour.fin:disabled{opacity:1;text-decoration:none}
.cal-jour.debut:disabled{color:#1c1913}

.calcul-resu{margin:18px 0;padding:16px 0;border-top:1px solid var(--ligne-claire);border-bottom:1px solid var(--ligne-claire);font-size:14px}
.calcul-resu .ligne{display:flex;justify-content:space-between;margin:6px 0;color:var(--sourdine)}
.calcul-resu .ligne.total{color:var(--craie);font-family:var(--display);font-size:20px;margin-top:12px}
.mini-note{font-family:var(--mono);font-size:11px;color:var(--sourdine);margin-top:14px;text-align:center;letter-spacing:.04em}

/* ---------- Ruban de services (fiche logement, pleine largeur) ---------- */
/* La section vit HORS de .fiche-corps : enfermé dans la colonne de récit, le ruban
   n'avait que ~600 px et tranchait ses cartes en deux. Ici il prend toute la fenêtre. */
.fiche-services{padding:4px 0 40px}
.fiche-services-intro{color:var(--sourdine);font-size:15px;max-width:620px}
/* Le fondu des bords doit être LARGE : à 5 % on lisait encore le texte d'une carte
   coupée net par le cadre, ce qui donnait un rendu cassé plutôt qu'un glissement. */
.services-ruban{position:relative;margin-top:30px;overflow:hidden;padding:5px 0;
  -webkit-mask-image:linear-gradient(90deg,transparent 0,#000 9%,#000 91%,transparent 100%);
          mask-image:linear-gradient(90deg,transparent 0,#000 9%,#000 91%,transparent 100%)}
.ruban-piste{display:flex;width:max-content;animation:ruban-defile 130s linear infinite;will-change:transform}
/* Souris dessus, doigt dessus, ou tabulation dans une carte → le ruban s'arrête. */
.services-ruban:hover .ruban-piste,
.services-ruban:focus-within .ruban-piste,
.services-ruban.fige .ruban-piste{animation-play-state:paused}
@keyframes ruban-defile{from{transform:translate3d(0,0,0)}to{transform:translate3d(-50%,0,0)}}

/* L'écart est porté par margin-right et PAS par gap : la largeur totale reste ainsi
   un multiple exact de (carte + écart), sinon -50% tombe à un demi-écart près et le
   ruban saute visiblement à chaque tour. Hauteur fixe = toutes les cartes alignées. */
.service-carte{flex:0 0 300px;margin-right:22px;height:358px;display:flex;flex-direction:column;
  border:1px solid var(--ligne-claire);border-radius:var(--rayon-carte);overflow:hidden;
  background:var(--encre-2);transition:border-color .25s,transform .25s,box-shadow .25s}
.service-carte:hover{border-color:var(--ligne);transform:translateY(-4px);box-shadow:0 18px 38px rgba(0,0,0,.4)}
.service-carte .v{position:relative;flex:none;aspect-ratio:16/10;overflow:hidden;
  background:linear-gradient(150deg,#231f19,#2e2a21)}
.service-carte .v img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform .6s ease}
.service-carte:hover .v img{transform:scale(1.05)}
/* Service sans visuel dédié : initiale en laiton. Le repli générique de service_photo()
   répétait la MÊME photo sur toutes les cartes sans mot-clé — trois fois de suite, ça
   se lit comme un bug d'affichage, pas comme une illustration. */
.service-carte.sans-photo .v{display:grid;place-items:center;background:linear-gradient(150deg,#241f18,#191612)}
.service-carte .v-monogramme{font-family:var(--display);font-size:62px;line-height:1;font-weight:600;
  color:var(--laiton);opacity:.3}
.service-carte .c{padding:18px 20px 20px;display:flex;flex-direction:column;flex:1;min-height:0}
/* line-clamp plutôt qu'une coupe PHP : mb_strimwidth tranchait au milieu d'un mot
   (« en fin de sé… »). Ici la coupure tombe proprement, avec « … » automatique. */
/* min-height = 2 lignes pleines : un titre court et un titre long réservent la même
   place, donc les prix tombent au même niveau d'une carte à l'autre. */
.service-carte .n{font-family:var(--display);font-size:19px;font-weight:500;line-height:1.28;color:var(--craie);
  min-height:calc(2 * 1.28em);
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.service-carte p{color:var(--sourdine);font-size:13.5px;line-height:1.5;margin-top:8px;
  display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
/* PAS de margin-top:auto : il collait le prix au bas de la carte et laissait un grand
   vide sous les services sans description. Le prix suit immédiatement le texte.
   white-space:nowrap : « 85 » et « € » ne se séparent jamais. */
.service-carte-prix{margin-top:12px;font-family:var(--mono);font-size:15.5px;font-weight:600;
  color:var(--laiton);white-space:nowrap;letter-spacing:.02em}

/* Carte de situation */
.carte-map{position:relative;aspect-ratio:21/8;border-radius:var(--rayon);overflow:hidden;border:1px solid var(--ligne);margin-top:20px;background:var(--encre-2)}
/* Fond de carte passé en sombre (invert sur une carte claire) : possible seulement
   parce que le marqueur d'OSM est désactivé — sinon l'inversion le virait au cyan.
   Le repère laiton est posé PAR-DESSUS l'iframe, donc épargné par ce filtre. */
.carte-map iframe{width:100%;height:100%;border:0;filter:grayscale(1) invert(.92) contrast(.86) brightness(1.04)}
/* Le pin est ancré par sa pointe : translate(-50%,-100%) depuis le centre du cadre,
   qui correspond au centre de la bbox, donc au logement. */
.carte-pin{position:absolute;left:50%;top:50%;transform:translate(-50%,-100%);pointer-events:none;z-index:2;filter:drop-shadow(0 6px 16px rgba(0,0,0,.6))}
.carte-pin svg{display:block;width:30px;height:41px}
.carte-pin::after{content:'';position:absolute;left:50%;bottom:-5px;width:12px;height:12px;margin-left:-6px;border-radius:50%;background:var(--laiton);opacity:.5;animation:pin-onde 2.6s ease-out infinite}
@keyframes pin-onde{0%{transform:scale(.4);opacity:.55}70%{transform:scale(3);opacity:0}100%{transform:scale(3);opacity:0}}

/* ---------- Tunnel de réservation ---------- */
.tunnel{padding-top:50px;padding-bottom:90px}
.etapes{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:40px;font-family:var(--mono);font-size:12px;letter-spacing:.1em;text-transform:uppercase}
.etape-pastille{display:flex;align-items:center;gap:10px;color:var(--sourdine)}
.etape-pastille .n{width:26px;height:26px;border-radius:50%;border:1px solid var(--ligne);display:grid;place-items:center;font-size:12px}
.etape-pastille.active{color:var(--laiton)}
.etape-pastille.active .n{border-color:var(--laiton);background:rgba(200,155,94,.12)}
.tunnel-grille{display:grid;grid-template-columns:1.4fr 1fr;gap:48px;align-items:start}
.recap-resa{border:1px solid var(--ligne);border-radius:var(--rayon);padding:28px;background:var(--encre-2);position:sticky;top:104px}
.recap-resa h3{font-size:20px;margin-bottom:6px}
.recap-resa .r-logement{font-family:var(--mono);font-size:12px;color:var(--laiton);letter-spacing:.1em;margin-bottom:20px}
.recap-resa .r-ligne{display:flex;justify-content:space-between;margin:10px 0;font-size:14.5px;color:var(--sourdine)}
.recap-resa .r-ligne b{color:var(--craie);font-weight:500}
.recap-resa .r-total{display:flex;justify-content:space-between;margin-top:18px;padding-top:16px;border-top:1px solid var(--ligne-claire);font-family:var(--display);font-size:22px;color:var(--craie)}
/* Intertitre de catégorie dans la liste des options (Boisson, Pack, Ménage…). */
.service-cat{display:flex;align-items:center;gap:10px;margin:26px 0 2px;font-family:var(--mono);font-size:11px;
  font-weight:600;letter-spacing:.16em;text-transform:uppercase;color:var(--laiton)}
.service-cat::after{content:'';flex:1;height:1px;background:var(--ligne-claire)}
.service-cat span{order:1;font-size:10px;color:var(--sourdine);letter-spacing:0}
.service-cat:first-child{margin-top:8px}
.service-choix{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:14px 0;border-bottom:1px solid var(--ligne-claire)}
.service-choix .info{flex:1;min-width:0}
.service-photo{width:52px;height:52px;flex:none;border-radius:var(--rayon);object-fit:cover;border:1px solid var(--ligne-claire)}
.service-choix .info h4{font-family:var(--display);font-size:17px;font-weight:500}
.service-choix .info p{font-size:13px;color:var(--sourdine)}
.service-choix .prix-add{font-family:var(--mono);font-size:14px;color:var(--laiton);white-space:nowrap}
.qte{display:flex;align-items:center;gap:10px}
.qte button{width:30px;height:30px;border:1px solid var(--ligne);background:transparent;color:var(--craie);border-radius:var(--rayon);cursor:pointer;font-size:16px}
.qte input{width:44px;text-align:center;background:var(--encre);border:1px solid var(--ligne-claire);color:var(--craie);border-radius:var(--rayon);padding:6px}

/* Bloc paiement */
.paiement-zone{border:1px solid var(--ligne-claire);border-radius:var(--rayon);padding:24px;margin-top:20px;background:rgba(236,231,221,.02)}
.badge-demo{display:inline-block;font-family:var(--mono);font-size:11px;letter-spacing:.08em;color:var(--laiton);border:1px dashed var(--ligne);padding:4px 10px;border-radius:99px;margin-bottom:14px}
#stripe-card{padding:14px;background:var(--encre);border:1px solid var(--ligne-claire);border-radius:var(--rayon);min-height:44px}

/* ---------- Confirmation ---------- */
.confirmation{text-align:center;padding:90px 0}
.sceau{width:96px;height:96px;margin:0 auto 30px;border:1px solid var(--laiton);border-radius:50%;display:grid;place-items:center;color:var(--laiton);font-family:var(--display);font-style:italic;font-size:38px;position:relative}
.sceau::after{content:"";position:absolute;inset:8px;border:1px solid var(--ligne);border-radius:50%}

/* ---------- Messages / états vides ---------- */
/* Restreint à `p.vide` À DESSEIN. Sans le `p`, cette règle s'appliquait à tout ce qui
   porte `vide` comme MODIFICATEUR — `.hero-media.vide`, `.sp-hero.vide`, et surtout
   les cases de décalage du calendrier — qui n'attendent qu'un fond, jamais 80 px de
   padding ni de l'italique. Le message d'état vide est toujours un <p> ; un futur
   état vide dans un autre élément doit reprendre ces déclarations, pas la classe. */
p.vide{text-align:center;color:var(--sourdine);padding:80px 20px;font-family:var(--display);font-style:italic;font-size:20px}
.encart-info{border-left:2px solid var(--laiton);padding:14px 20px;background:rgba(200,155,94,.06);margin:20px 0;font-size:14.5px;color:var(--craie)}

/* ---------- Toasts ---------- */
#toasts{position:fixed;bottom:24px;left:50%;transform:translateX(-50%);z-index:200;display:flex;flex-direction:column;gap:10px;width:min(92vw,420px)}
.toast{background:var(--encre-2);border:1px solid var(--ligne);border-left:3px solid var(--laiton);border-radius:var(--rayon);padding:14px 18px;color:var(--craie);font-size:14.5px;box-shadow:0 20px 40px rgba(0,0,0,.4);animation:toastIn .25s ease}
.toast.err{border-left-color:#c96a5a}
@keyframes toastIn{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}

/* ---------- Modale média (lightbox photo / vidéo) ---------- */
.modale-media{position:fixed;inset:0;z-index:300;display:none;align-items:center;justify-content:center;padding:40px;background:rgba(12,12,14,.92);backdrop-filter:blur(6px);animation:fondu .25s ease}
.modale-media.ouvert{display:flex}
.modale-media figure{position:relative;max-width:1080px;width:100%}
.modale-media img{width:100%;height:auto;max-height:84vh;object-fit:contain;border-radius:var(--rayon-carte);box-shadow:0 40px 90px rgba(0,0,0,.6)}
.modale-fermer{position:absolute;top:-16px;right:-16px;width:46px;height:46px;border-radius:50%;border:1px solid var(--ligne);background:var(--encre-2);color:var(--craie);cursor:pointer;display:grid;place-items:center;transition:color .2s,border-color .2s}
.modale-fermer:hover{color:var(--laiton);border-color:var(--laiton)}
.modale-fermer svg{width:20px;height:20px}
@keyframes fondu{from{opacity:0}to{opacity:1}}
@media(max-width:640px){.modale-media{padding:20px}.modale-fermer{top:6px;right:6px}}

/* ---------- Pages légales / contenu ---------- */
.contenu-texte{max-width:760px;margin:0 auto;padding-top:60px;padding-bottom:90px}
.contenu-texte h1{font-size:clamp(34px,4vw,52px);margin-bottom:8px}
.contenu-texte h2{font-size:26px;margin:40px 0 14px}
.contenu-texte p,.contenu-texte li{color:var(--craie);margin-bottom:14px;font-size:16px}
.contenu-texte ul{padding-left:22px}
.contenu-texte a{color:var(--laiton);border-bottom:1px solid var(--ligne)}

/* =====================================================================
   COMPOSANTS PARTAGÉS — planches détail (services, éditorial, marchés…)
   Réutilisables : préfixe neutre, hérités de la DA globale.
   ===================================================================== */

/* Accent manuscrit doré (« Votre séjour », « À très bientôt », signature) */
.script{font-family:var(--script);font-weight:400;color:var(--laiton-clair);line-height:1}
/* Mot-clé en italique doré dans un titre : <h1>… <em>inoubliable</em></h1> */
.detail em,.detail h1 em,.detail h2 em{font-style:italic;color:var(--laiton-clair);font-weight:500}

/* Hero de page détail (2 colonnes : texte + visuel à cartouche superposée) */
.dhero{padding:52px 0 20px}
.dhero .wrap{display:grid;grid-template-columns:1.02fr 1.18fr;gap:56px;align-items:center}
.dhero h1{margin:18px 0 22px}
.dhero .chapo{color:var(--sourdine);font-size:18px;max-width:520px;margin-bottom:26px}
.dhero-visuel{position:relative}
.dhero-photo{position:relative;aspect-ratio:16/12;border-radius:var(--rayon-carte);overflow:hidden;border:1px solid var(--ligne);box-shadow:0 34px 70px rgba(0,0,0,.5)}
.dhero-photo img{width:100%;height:100%;object-fit:cover}
.dhero-cartouche{position:absolute;right:20px;bottom:20px;max-width:280px;display:flex;gap:14px;align-items:flex-start;
  background:rgba(20,18,15,.82);backdrop-filter:blur(8px);border:1px solid var(--ligne);border-radius:14px;padding:16px 18px}
.dhero-cartouche .ico{width:34px;height:34px;flex:none;color:var(--laiton);display:grid;place-items:center}
.dhero-cartouche .ico svg{width:26px;height:26px}
.dhero-cartouche b{display:block;font-family:var(--display);font-size:16px;font-weight:600;color:var(--craie);margin-bottom:3px}
.dhero-cartouche p{font-size:13px;color:var(--sourdine);line-height:1.45}

/* Liste à coches dorées */
.check-liste{list-style:none;display:grid;gap:12px;margin:0}
.check-liste li{position:relative;padding-left:32px;color:var(--craie);font-size:15.5px;line-height:1.5}
.check-liste li::before{content:"";position:absolute;left:0;top:1px;width:21px;height:21px;border-radius:50%;
  border:1px solid var(--ligne-forte);background:rgba(200,155,94,.1)}
.check-liste li::after{content:"";position:absolute;left:7px;top:6px;width:7px;height:4px;
  border-left:1.6px solid var(--laiton-clair);border-bottom:1.6px solid var(--laiton-clair);transform:rotate(-45deg)}

/* Bandeau d'atouts séparés par filets verticaux dorés */
.bandeau-atouts{display:grid;grid-template-columns:repeat(4,1fr);border:1px solid var(--ligne-claire);border-radius:var(--rayon-carte);
  background:var(--encre-2);overflow:hidden}
.bandeau-atouts.cols-3{grid-template-columns:repeat(3,1fr)}
.atout{padding:26px 24px;border-left:1px solid var(--ligne-claire)}
.atout:first-child{border-left:none}
.atout .ico{color:var(--laiton);margin-bottom:12px}
.atout .ico svg{width:28px;height:28px}
.atout h4{font-family:var(--texte);font-weight:600;font-size:12.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--craie);margin-bottom:7px}
.atout p{font-size:13.5px;color:var(--sourdine);line-height:1.5}

/* Carte dorée générique (bord arrondi 16px, bordure dorée fine) */
.carte-or{border:1px solid var(--ligne);border-radius:var(--rayon-carte);background:var(--encre-2);padding:30px}
.carte-or.sureleve{background:var(--sureleve)}

/* Bloc tarif surélevé (gros prix) */
.tarif-bloc{background:var(--sureleve);border:1px solid var(--ligne);border-radius:14px;padding:26px 28px;text-align:center}
.tarif-bloc .st{font-family:var(--texte);font-size:11px;letter-spacing:.18em;text-transform:uppercase;color:var(--laiton);margin-bottom:10px}
.tarif-bloc .prix{font-family:var(--display);font-size:46px;font-weight:600;color:var(--craie);line-height:1}
.tarif-bloc .detail-prix{font-size:13.5px;color:var(--sourdine);margin-top:8px}
.tarif-bloc .note{margin-top:16px;padding-top:14px;border-top:1px solid var(--ligne-claire);font-size:12.5px;color:var(--sourdine);display:flex;gap:8px;align-items:center;justify-content:center}
.tarif-bloc .note svg{width:15px;height:15px;color:var(--laiton);flex:none}

/* Prix compact (badge chiffre doré) */
.prix-tag{font-family:var(--display);font-size:20px;font-weight:600;color:var(--laiton-clair);white-space:nowrap}

/* Encart crème clair (bloc « espace séjour ») */
.encart-creme{background:var(--papier);color:var(--encre-texte);border-radius:20px;padding:44px}
.encart-creme .eyebrow,.encart-creme .st{color:var(--laiton-papier)}
.encart-creme h2,.encart-creme h3{color:var(--encre-texte)}
.encart-creme p{color:var(--encre-texte-2)}
.encart-creme .check-liste li{color:var(--encre-texte)}
.encart-creme .check-liste li::before{border-color:var(--laiton-papier);background:rgba(163,123,65,.12)}
.encart-creme .check-liste li::after{border-color:var(--laiton-papier)}

/* Badges & pastilles */
.badge-or{display:inline-flex;align-items:center;gap:7px;font-family:var(--texte);font-size:11px;font-weight:700;letter-spacing:.14em;
  text-transform:uppercase;color:#1c1913;background:var(--or-degrade);padding:6px 13px;border-radius:99px}
.pastille{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:500;color:var(--laiton-clair);
  border:1px solid var(--ligne);border-radius:99px;padding:5px 12px}
.pastille svg{width:13px;height:13px;flex:none}

/* Sceau rond « Un lieu unique » (superposé au hero) */
.sceau-rond{width:118px;height:118px;border-radius:50%;background:rgba(20,18,15,.72);backdrop-filter:blur(6px);
  border:1px solid var(--ligne-forte);display:grid;place-items:center;text-align:center;padding:14px}
.sceau-rond span{font-family:var(--texte);font-size:9.5px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--laiton-clair);line-height:1.5}
.sceau-rond .coeur{display:block;color:var(--laiton);font-size:15px;margin:2px 0}

/* Bandeau citation doré */
.citation-or{border:1px solid var(--ligne);border-radius:var(--rayon-carte);background:rgba(200,155,94,.06);
  padding:26px 34px;display:flex;gap:18px;align-items:center;color:var(--craie);font-family:var(--display);font-size:20px;font-style:italic}
.citation-or .ico{color:var(--laiton);flex:none}
.citation-or .ico svg{width:30px;height:30px}

/* Bande de réassurance (icône + titre + texte, 3–4 colonnes) */
.mini-reassurance{display:grid;grid-template-columns:repeat(3,1fr);gap:20px;border-top:1px solid var(--ligne-claire);padding-top:34px}
.mini-reassurance.cols-4{grid-template-columns:repeat(4,1fr)}
.reassure{display:flex;gap:14px;align-items:flex-start}
.reassure .ico{color:var(--laiton);flex:none}
.reassure .ico svg{width:26px;height:26px}
.reassure h4{font-family:var(--texte);font-weight:600;font-size:12.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--craie);margin-bottom:5px}
.reassure p{font-size:13px;color:var(--sourdine);line-height:1.5}

/* Bloc contact hôte (avatar rond + coordonnées) — détouré, aucun fond ajouté */
.bloc-contact{display:flex;gap:22px;align-items:center;flex-wrap:wrap;border:1px solid var(--ligne);border-radius:var(--rayon-carte);
  background:var(--encre-2);padding:26px 30px}
.bloc-contact .avatar{width:74px;height:74px;border-radius:50%;overflow:hidden;flex:none;background:var(--sureleve)}
.bloc-contact .avatar img{width:100%;height:100%;object-fit:cover}
.bloc-contact .coord{display:grid;gap:8px;font-size:14.5px}
.bloc-contact .coord a{display:inline-flex;align-items:center;gap:9px;color:var(--craie)}
.bloc-contact .coord a:hover{color:var(--laiton)}
.bloc-contact .coord svg{width:16px;height:16px;color:var(--laiton);flex:none}

/* Grille de vignettes carrées (services / catégories) */
.vignettes{display:grid;grid-template-columns:repeat(5,1fr);gap:18px}
.vignette{display:block;border-radius:14px;overflow:hidden;border:1px solid var(--ligne-claire);background:var(--encre-2);transition:transform .25s,border-color .25s}
.vignette:hover{transform:translateY(-4px);border-color:var(--ligne)}
.vignette .v{aspect-ratio:1/1;background:linear-gradient(150deg,#26221b,#2b271f);position:relative;overflow:hidden}
.vignette .v img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.vignette .lg{padding:12px 14px;font-family:var(--texte);font-size:12px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;color:var(--craie);text-align:center}

@media(max-width:960px){
  .dhero .wrap{grid-template-columns:1fr;gap:32px}
  .bandeau-atouts{grid-template-columns:repeat(2,1fr)}
  .bandeau-atouts .atout:nth-child(3){border-left:none}
  .mini-reassurance,.mini-reassurance.cols-4{grid-template-columns:1fr 1fr}
  .vignettes{grid-template-columns:repeat(3,1fr)}
}
@media(max-width:640px){
  .bandeau-atouts{grid-template-columns:1fr}
  .bandeau-atouts .atout{border-left:none;border-top:1px solid var(--ligne-claire)}
  .bandeau-atouts .atout:first-child{border-top:none}
  .mini-reassurance,.mini-reassurance.cols-4{grid-template-columns:1fr}
  .vignettes{grid-template-columns:1fr 1fr}
  .encart-creme{padding:28px 22px}
}

/* =====================================================================
   PAGES SERVICE DÉTAIL — Massage (.svc-*) & Apéro/Planches (.apero-*)
   ===================================================================== */

/* Prestation : photo | descriptif | tarif */
.svc-prestation{display:grid;grid-template-columns:.9fr 1.1fr .8fr;gap:0;border:1px solid var(--ligne);border-radius:var(--rayon-carte);
  background:var(--encre-2);overflow:hidden;align-items:stretch}
.svc-presta-photo{position:relative;min-height:260px}
.svc-presta-photo img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.svc-presta-corps{padding:30px}
.svc-presta-corps h2{font-size:28px;margin-bottom:2px}
.svc-presta-corps .svc-accroche{color:var(--laiton-clair)}
.svc-presta-tarif{padding:26px;background:var(--sureleve);display:flex;flex-direction:column;justify-content:center;border-left:1px solid var(--ligne-claire)}
.svc-presta-tarif .tarif-bloc{background:transparent;border:none;padding:0}

/* Bloc professionnel (masseuse) : photo | bio+stats | choix */
.svc-pro{display:grid;grid-template-columns:.8fr 1.3fr .9fr;gap:0;border:1px solid var(--ligne);border-radius:var(--rayon-carte);
  background:var(--encre-2);overflow:hidden}
.svc-pro-photo{position:relative;min-height:240px}
.svc-pro-photo img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.svc-pro-bio{padding:30px}
.svc-pro-bio h3{font-family:var(--display);font-size:30px;font-weight:600;color:var(--craie)}
.svc-pro-role{font-family:var(--texte);font-size:12px;letter-spacing:.12em;text-transform:uppercase;color:var(--laiton);margin:6px 0 14px}
.svc-pro-bio p{color:var(--sourdine);font-size:15px;margin-bottom:20px}
.svc-stats{display:flex;gap:26px;flex-wrap:wrap}
.svc-stat b{display:block;font-family:var(--display);font-size:24px;color:var(--laiton-clair);line-height:1}
.svc-stat b i{font-style:normal;font-size:16px}
.svc-stat span{font-size:12px;color:var(--sourdine)}
.svc-pro-choix{padding:26px;background:var(--sureleve);border-left:1px solid var(--ligne-claire);display:flex;flex-direction:column;justify-content:center}
.svc-choix-prix{text-align:center;font-family:var(--mono);font-size:13px;color:var(--laiton);margin-top:12px}

/* Cartes finales : pourquoi + infos pratiques */
.svc-final{display:grid;grid-template-columns:1fr 1fr;gap:26px}
.svc-benefices{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
.svc-benef{text-align:center}
.svc-benef .ico{width:44px;height:44px;margin:0 auto 10px;border:1px solid var(--ligne);border-radius:50%;display:grid;place-items:center;color:var(--laiton)}
.svc-benef .ico svg{width:22px;height:22px}
.svc-benef b{font-family:var(--texte);font-weight:500;font-size:12.5px;color:var(--craie);line-height:1.35;display:block}

/* Apéro — planches (cartes horizontales) */
.apero-planches{display:grid;grid-template-columns:1fr 1fr;gap:22px}
.apero-planche{display:grid;grid-template-columns:.8fr 1.2fr;border:1px solid var(--ligne);border-radius:var(--rayon-carte);background:var(--encre-2);overflow:hidden}
.apero-planche-photo{position:relative;min-height:200px}
.apero-planche-photo img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.apero-planche-corps{padding:24px;display:flex;flex-direction:column}
.apero-planche-corps h3{font-size:24px;color:var(--craie);margin-bottom:8px}
.apero-planche-corps p{color:var(--sourdine);font-size:14.5px;margin-bottom:16px}
.apero-planche-bas{margin-top:auto;display:flex;align-items:center;justify-content:space-between;gap:14px}
.apero-planche-bas .prix-tag{font-size:26px}

/* Apéro — boissons (brasserie + familles) */
.apero-boissons{display:grid;grid-template-columns:repeat(4,1fr);gap:20px;align-items:start}
.apero-brasserie h3{font-family:var(--display);font-size:22px;color:var(--laiton-clair);margin-bottom:12px}
.apero-brasserie p{color:var(--sourdine);font-size:14px;margin-bottom:16px}
.apero-famille{display:flex;flex-direction:column}
.apero-famille-titre{font-family:var(--texte);font-size:12px;font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--laiton);text-align:center;margin-bottom:16px}
.apero-bouteilles{display:flex;gap:10px;justify-content:center;margin-bottom:18px;flex:1}
.apero-bouteille{flex:1;text-align:center;min-width:0}
.apero-bouteille-photo{aspect-ratio:1/1.7;border-radius:8px;overflow:hidden;background:var(--sureleve);margin-bottom:8px}
.apero-bouteille-photo img{width:100%;height:100%;object-fit:cover}
.apero-bouteille-nom{font-size:11.5px;color:var(--craie);line-height:1.3}
.apero-bouteille-prix{font-family:var(--mono);font-size:12.5px;color:var(--laiton);margin-top:3px}

@media(max-width:960px){
  .svc-prestation,.svc-pro{grid-template-columns:1fr}
  .svc-presta-photo,.svc-pro-photo{min-height:220px}
  .svc-presta-tarif,.svc-pro-choix{border-left:none;border-top:1px solid var(--ligne-claire)}
  .apero-boissons{grid-template-columns:1fr 1fr}
  .apero-planches{grid-template-columns:1fr}
}
@media(max-width:640px){
  .svc-final{grid-template-columns:1fr}
  .svc-benefices{grid-template-columns:1fr 1fr}
  .apero-boissons{grid-template-columns:1fr}
  .apero-planche{grid-template-columns:1fr}
  .apero-planche-photo{min-height:180px}
}

/* =====================================================================
   PAGE À PROPOS (.apropos-*)
   ===================================================================== */
.apropos-stats-flottant{position:absolute;right:18px;bottom:18px;left:18px;max-width:none;background:rgba(20,18,15,.82);backdrop-filter:blur(8px);
  border:1px solid var(--ligne);border-radius:14px;padding:16px 20px;display:grid;gap:10px}
.asf-ligne{display:flex;align-items:center;gap:12px;font-size:14px;color:var(--craie)}
.asf-ligne .ico{color:var(--laiton);flex:none}
.asf-ligne .ico svg{width:20px;height:20px}
/* Valeur chiffrée courte dans une carte de données : Inter, comme `.merci-case .val`.
   Le Playfair est réservé aux titres et aux grands nombres d'apparat (.stat .v) ;
   à 20px au milieu de libellés Inter, il passait pour une police étrangère. */
.asf-ligne b{font-family:var(--texte);font-size:19px;color:var(--laiton-clair);font-weight:700;letter-spacing:.01em}
.apropos-pourquoi{display:grid;grid-template-columns:.9fr 1.5fr;gap:56px;align-items:start}
.apropos-piliers{display:grid;grid-template-columns:repeat(3,1fr);gap:28px}
.apropos-pilier .ico{width:52px;height:52px;border:1px solid var(--ligne);border-radius:50%;display:grid;place-items:center;color:var(--laiton);margin-bottom:16px}
.apropos-pilier .ico svg{width:26px;height:26px}
.apropos-pilier h4{font-family:var(--texte);font-weight:600;font-size:13.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--craie);margin-bottom:10px;line-height:1.4}
.apropos-pilier p{color:var(--sourdine);font-size:15px}
.apropos-offres{display:grid;grid-template-columns:1fr 1fr;gap:26px;margin-top:20px}
.apropos-offre{border:1px solid var(--ligne);border-radius:var(--rayon-carte);overflow:hidden;background:var(--encre-2);display:grid;grid-template-columns:.85fr 1.15fr}
.apropos-offre-photo{position:relative;min-height:230px}
.apropos-offre-photo img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.apropos-offre-corps{padding:28px}
.apropos-offre-corps h3{font-size:24px;color:var(--craie);margin-bottom:12px}
.apropos-offre-corps p{color:var(--sourdine);font-size:15px;margin-bottom:12px}
.apropos-offre-note{color:var(--craie)!important;border-top:1px solid var(--ligne-claire);padding-top:12px}
.apropos-citation{max-width:760px;margin:0 auto}
.apropos-citation .guill{font-family:var(--display);font-size:80px;color:var(--laiton);line-height:.4;display:block}
.apropos-citation blockquote{font-family:var(--display);font-size:clamp(24px,3vw,34px);font-style:italic;color:var(--craie);line-height:1.35;margin:10px 0 22px}
@media(max-width:960px){
  .apropos-pourquoi{grid-template-columns:1fr;gap:34px}
  .apropos-piliers{grid-template-columns:1fr;gap:22px}
  .apropos-offres{grid-template-columns:1fr}
}
@media(max-width:640px){
  .apropos-offre{grid-template-columns:1fr}
  .apropos-offre-photo{min-height:190px}
}

/* =====================================================================
   PAGE MARCHÉS LOCAUX (.marche-*)
   ===================================================================== */
.marches-liste{display:grid;gap:18px}
.marche-carte{display:grid;grid-template-columns:230px 1.4fr 1fr;gap:0;border:1px solid var(--ligne-claire);border-radius:var(--rayon-carte);
  background:var(--encre-2);overflow:hidden;transition:border-color .25s}
.marche-carte:hover{border-color:var(--ligne)}
.marche-photo{position:relative;min-height:180px}
.marche-photo img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.marche-corps{padding:26px 28px;border-left:1px solid var(--ligne-claire)}
.marche-corps h3{font-size:26px;color:var(--craie);margin-bottom:10px}
.marche-corps p{color:var(--sourdine);font-size:14.5px;margin-bottom:16px}
.marche-infos{padding:26px 28px;border-left:1px solid var(--ligne-claire);display:flex;flex-direction:column;gap:10px}
.marche-info{display:flex;align-items:center;gap:10px;font-size:14px;color:var(--craie)}
.marche-info svg{width:17px;height:17px;color:var(--laiton);flex:none}
.marche-accroche{display:flex;align-items:center;gap:8px;margin-top:6px;font-family:var(--texte);font-size:13px;font-weight:600;color:var(--laiton-clair)}
.marche-accroche svg{width:16px;height:16px;flex:none}
.marche-note{color:var(--sourdine);font-size:13px;line-height:1.5}
.marches-final{display:grid;grid-template-columns:1fr 1fr;gap:26px}
@media(max-width:960px){
  .marche-carte{grid-template-columns:1fr 1fr}
  .marche-photo{grid-column:1 / -1;min-height:200px}
  .marche-corps{border-left:none}
  .marches-final{grid-template-columns:1fr}
}
@media(max-width:640px){
  .marche-carte{grid-template-columns:1fr}
  .marche-infos{border-left:none;border-top:1px solid var(--ligne-claire)}
}

/* =====================================================================
   PAGE MERCI / CONFIRMATION (.merci-*)
   ===================================================================== */
.merci{max-width:820px;margin:0 auto;text-align:center;padding-top:52px;padding-bottom:90px}
.merci-check{width:74px;height:74px;margin:0 auto 24px;border-radius:50%;background:var(--or-degrade);display:grid;place-items:center;color:#1c1913;box-shadow:0 14px 34px rgba(200,155,94,.3)}
.merci-check svg{width:34px;height:34px}
.merci-titre{font-size:clamp(32px,4.4vw,52px);line-height:1.06;color:var(--craie)}
.merci-titre em{font-style:italic;color:var(--laiton-clair);font-weight:500}
.merci-chapo{color:var(--sourdine);font-size:17px;max-width:480px;margin:16px auto 0}
.merci-hero{position:relative;margin-top:32px;border-radius:var(--rayon-carte);overflow:hidden;border:1px solid var(--ligne)}
.merci-hero img{width:100%;aspect-ratio:16/8;object-fit:cover}
.merci-hero .sceau-rond{position:absolute;right:22px;top:50%;transform:translateY(-50%)}
.merci-sejour-titre{font-family:var(--display);font-size:14px;letter-spacing:.1em;text-transform:uppercase;color:var(--laiton);text-align:center;margin-bottom:8px}
.merci-sejour-titre span{display:block;font-size:24px;font-style:italic;text-transform:none;letter-spacing:0;color:var(--craie);margin-top:4px}
.merci-recap{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:14px}
.merci-case{padding:12px 10px;text-align:center}
.merci-case .lbl{font-family:var(--texte);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--laiton);margin-bottom:6px}
.merci-case .val{font-family:var(--texte);font-size:15px;font-weight:600;color:var(--craie);line-height:1.3}
.merci-case .sub{font-size:11px;color:var(--sourdine);margin-top:3px}
.merci-espace{display:flex;gap:20px;align-items:center;text-align:left}
.merci-espace-ico{width:56px;height:56px;flex:none;border:1px solid var(--ligne);border-radius:50%;display:grid;place-items:center;color:var(--laiton)}
.merci-espace-ico svg{width:28px;height:28px}
.merci-espace-txt h3{font-family:var(--display);font-size:18px;color:var(--craie);margin-bottom:4px}
.merci-espace-txt p{color:var(--sourdine);font-size:14px;margin-bottom:10px}
.merci-espace-mail{display:inline-flex;align-items:center;gap:9px;font-size:13.5px;color:var(--craie);background:var(--sureleve);border:1px solid var(--ligne-claire);border-radius:99px;padding:8px 14px}
.merci-espace-mail svg{width:16px;height:16px;color:var(--laiton);flex:none}
.merci-rubriques{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-top:24px;text-align:left}
.merci-rub .ico{color:var(--laiton);margin-bottom:12px}
.merci-rub .ico svg{width:28px;height:28px}
.merci-rub b{display:block;font-family:var(--texte);font-weight:600;font-size:12.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--craie);margin-bottom:6px}
.merci-rub p{color:var(--sourdine);font-size:13px;line-height:1.5}
/* ---------- Note « arrivée et accès » (carnet + page merci) ----------
   Le voyageur doit savoir PAR QUEL CANAL les instructions et les codes lui
   arrivent, qu'ils soient déjà renseignés ou non. Posée par acces_note_html()
   dans _models/home.php : une seule source de vérité pour les deux pages.
   Définie ici et pas dans sejour.css : le carnet charge front.css AVANT
   sejour.css, la page merci ne charge que front.css. */
.acces-note{display:flex;gap:10px;align-items:flex-start;margin-top:14px;padding:12px 15px;border-left:2px solid var(--laiton);border-radius:0 var(--rayon) var(--rayon) 0;background:rgba(234,229,219,.035);color:var(--sourdine);font-size:13.5px;line-height:1.55;text-align:left}
.acces-note svg{width:17px;height:17px;flex:none;color:var(--laiton);margin-top:2px}
.merci-signature{margin-top:36px}
.merci-signature p{color:var(--sourdine);font-size:14.5px;margin-top:8px}
@media(max-width:640px){
  .merci-recap{grid-template-columns:1fr 1fr}
  .merci-espace{flex-direction:column;text-align:center}
  .merci-rubriques{grid-template-columns:1fr 1fr}
  .merci-hero .sceau-rond{right:12px;transform:translateY(-50%) scale(.82)}
}

/* ---------- Fiche : galerie « +N » & tuiles « À découvrir » ---------- */
.galerie-plus{position:absolute;inset:0;display:grid;place-items:center;background:rgba(16,14,11,.6);
  color:var(--craie);font-family:var(--display);font-size:30px;font-weight:600;letter-spacing:.02em}
.fiche-decouvrir{display:grid;grid-template-columns:repeat(3,1fr);gap:16px}
/* Tuiles illustrées : photo à fond perdu en tête, texte dessous. flex-direction
   column + le corps en flex:1 → les trois tuiles gardent la même hauteur et leur
   lien « Découvrir » s'aligne, quelle que soit la longueur du texte. */
.decouvrir-tuile{display:flex;flex-direction:column;border:1px solid var(--ligne-claire);
  border-radius:var(--rayon-carte);overflow:hidden;background:var(--encre-2);
  transition:border-color .25s,transform .25s,box-shadow .25s}
.decouvrir-tuile:hover{border-color:var(--ligne);transform:translateY(-3px);box-shadow:0 16px 34px rgba(0,0,0,.34)}
.decouvrir-photo{display:block;position:relative;aspect-ratio:16/9;overflow:hidden;
  background:linear-gradient(150deg,#26221b,#2b271f)}
.decouvrir-photo img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform .5s ease}
.decouvrir-tuile:hover .decouvrir-photo img{transform:scale(1.06)}
.decouvrir-corps{display:flex;flex-direction:column;flex:1;padding:20px 22px 22px}
.decouvrir-tuile b{font-family:var(--display);font-size:18px;font-weight:500;color:var(--craie);line-height:1.3}
.decouvrir-tuile p{font-size:13.5px;color:var(--sourdine);margin-top:6px;line-height:1.5}
.decouvrir-lien{margin-top:auto;padding-top:16px;font-family:var(--texte);font-size:11.5px;font-weight:700;
  letter-spacing:.12em;text-transform:uppercase;color:var(--laiton);display:inline-flex;align-items:center;gap:8px}
.decouvrir-lien .fleche{transition:transform .25s}
.decouvrir-tuile:hover .decouvrir-lien .fleche{transform:translateX(5px)}
@media(max-width:760px){.fiche-decouvrir{grid-template-columns:1fr}}

/* ---------- Responsive ---------- */
/* Palier propre au header : entre 1150 et 960px la barre est à l'étroit mais le
   menu burger n'a pas encore pris le relais. On resserre plutôt que de laisser
   quoi que ce soit se replier. */
@media(max-width:1150px){
  nav.liens{gap:15px;font-size:10.5px;letter-spacing:.05em}
  .nav-droite{gap:12px}
  .nav-droite > .btn-plein{padding:13px 20px;font-size:11.5px}
  .marque-logo{height:54px}
  .nav{gap:16px}
}
@media(max-width:1080px){
  .confiance .wrap{grid-template-columns:repeat(2,1fr);gap:24px 30px}
  .grille-logements,.cartes-edito{grid-template-columns:1fr 1fr}
  .coeur-piste{grid-auto-columns:calc((100% - 28px)/2)}
}

/* ---------- Défilement des logements : DROITE-GAUCHE, jamais haut-bas ----------
   Arbitrage Thomas 2026-08-09. Sur tout écran tactile, une liste de logements se
   parcourt au doigt, horizontalement — jamais en pile verticale qu'il faut
   dérouler. La grille des pages /collection devient donc la MÊME piste à ancrage
   que les carrousels de l'accueil, et hérite du même geste.

   Volontairement PAS de `touch-action:pan-x` : cela confisquerait le défilement
   vertical de la page dès que le doigt se pose sur une carte, et le visiteur se
   retrouverait bloqué au milieu du listing. Le navigateur décide déjà très bien
   selon la direction du geste ; l'ancrage (scroll-snap) fait le reste.

   Au-delà de 960px on garde la grille : à la souris, une grille se lit mieux
   qu'une piste, et il n'y a pas de geste de balayage. */
@media(max-width:960px){
  .grille-logements{
    display:grid;grid-auto-flow:column;grid-template-columns:none;
    grid-auto-columns:76%;gap:20px;
    /* overflow-y:hidden explicite — sans lui l'axe vertical passe en `auto`
       tout seul et la piste devient soulevable au doigt (bug signalé). */
    overflow-x:auto;overflow-y:hidden;scroll-snap-type:x mandatory;scroll-behavior:smooth;
    scrollbar-width:none;-webkit-overflow-scrolling:touch;
    /* Les cartes doivent pouvoir toucher les bords de l'écran en fin de course :
       on annule la gouttière de .wrap ici et on la rend en padding, sinon la
       dernière carte reste coincée à 22px du bord. */
    margin:0 -22px;padding:8px 22px 16px;
  }
  .grille-logements::-webkit-scrollbar{display:none}
  .grille-logements > *{scroll-snap-align:start}
}
@media(max-width:960px){
  nav.liens{display:none}
  .burger{display:flex}
  .fiche-corps,.tunnel-grille,.exigence .wrap{grid-template-columns:1fr;gap:44px}
  .exigence .wrap{gap:48px}
  .stats{grid-template-columns:repeat(4,1fr)}
  .final .wrap{grid-template-columns:1fr;gap:28px;align-items:start}
  .galerie{grid-template-columns:1fr 1fr}
  .galerie .g-item:first-child{grid-column:span 2}
  .panneau-resa,.recap-resa{position:static}
  .wrap{padding:0 22px}
  /* La gouttière est portée par `.confiance .wrap` (0,2,0), qui gagne sur `.wrap` :
     sans ce rappel le bandeau garde 32px quand tout le reste passe à 22px. */
  .confiance .wrap{padding-left:22px;padding-right:22px}
  /* Le CTA « Réserver en direct » ne tient pas dans la barre : il passe dans le menu. */
  .nav-droite > .btn-plein{display:none}
  .nav{gap:12px}
  /* Safari iOS zoome de force sur tout champ sous 16px, et ne dézoome jamais. */
  .champ input,.champ select,.champ textarea,.qte input{font-size:16px}
  /* Menu mobile déroulant */
  /* align-items:stretch annule le `center` de la barre (posé pour le lien à deux
     lignes) : en colonne il recentrerait les liens et raccourcirait leurs filets. */
  nav.liens.ouvert{display:flex;align-items:stretch;position:absolute;top:84px;left:0;right:0;flex-direction:column;gap:4px;background:var(--encre-2);border-bottom:1px solid var(--ligne-claire);padding:16px 22px 22px}
  nav.liens.ouvert a{padding:12px 0;font-size:14px;border-bottom:1px solid var(--ligne-claire)}
  /* opacity/color explicites : `nav.liens a` fadeait le bouton et son survol le
     repeignait en laiton sur fond laiton. */
  nav.liens.ouvert .cta-menu{display:inline-flex;margin-top:16px;padding:15px 30px;border-bottom:none;opacity:1;color:#1c1913}
  nav.liens.ouvert .cta-menu:hover{color:#1c1913}
}
@media(max-width:640px){
  .confiance .wrap{grid-template-columns:1fr}
  /* ⚠️ `.grille-logements` n'est PLUS listée ici : sous 960px c'est une piste
     horizontale (voir « Défilement des logements »), et lui réimposer
     `grid-template-columns:1fr` remettrait la première carte en pleine largeur
     avec les suivantes en colonnes implicites — une piste bancale. */
  .cartes-edito,.cartes-edito.cartes-2,.direct-grille,.avis-grille{grid-template-columns:1fr}
  .grille-logements{grid-auto-columns:86%;gap:16px}
  .coeur-piste{grid-auto-columns:88%}
  .stats{grid-template-columns:1fr 1fr;gap:24px}
  .equip-grille,.champ-2{grid-template-columns:1fr}
  .entete-section,.coeur .entete{flex-direction:column;align-items:flex-start}
  .galerie{grid-template-columns:1fr}
  .galerie .g-item:first-child{grid-column:span 1}
  .hero{min-height:auto;padding:130px 0 70px}
  .nav{height:72px}
  nav.liens.ouvert{top:72px}
  .marque-logo{height:48px}
  /* Le plancher de 46px du clamp global ne descend jamais : trop gros sous 400px. */
  h1{font-size:clamp(32px,9vw,46px)}
  /* 21/8 donnerait une fente de ~140px de haut sur un téléphone. */
  .carte-map{aspect-ratio:4/3}
  .footer-cols{gap:28px 40px}
}
@media(prefers-reduced-motion:reduce){
  .carte,.btn,.toast,.carte .visuel img,.coeur-piste{transition:none;animation:none;scroll-behavior:auto}
  .carte-pin::after{animation:none;opacity:.4}
  html{scroll-behavior:auto}
}

/* =====================================================================
   AJOUTS 2026-07-29
   Prix « dès … / nuit », visionneuse photos, ruban de services, hero vidéo
   des locations mensuelles, calendrier des marchés, contact sous la fiche.
   ===================================================================== */

/* ---------- Fiche : prix d'entête ---------- */
.fiche-prix-entete{text-align:right}
.fiche-prix-entete .fpe-des{font-family:var(--mono);font-size:12px;color:var(--sourdine)}
/* white-space:nowrap : « dès 79 € / nuit » ne doit pas se briser entre le montant
   et son unité — sinon le visiteur lit un prix sans savoir de quoi il parle. */
.fiche-prix-entete .fpe-valeur{font-family:var(--display);font-size:30px;color:var(--laiton);line-height:1.15;white-space:nowrap}
.fiche-prix-entete .fpe-valeur span{font-family:var(--mono);font-size:13px;color:var(--sourdine);margin-left:6px}

/* ---------- Galerie : bouton « voir les N photos » ---------- */
.galerie-toutes{position:absolute;right:16px;bottom:16px;z-index:2;display:inline-flex;align-items:center;gap:9px;
  padding:10px 16px;border-radius:99px;border:1px solid var(--ligne-forte);background:rgba(16,14,11,.82);backdrop-filter:blur(6px);
  color:var(--craie);font-family:var(--texte);font-size:13px;font-weight:600;cursor:pointer;transition:border-color .2s,color .2s}
.galerie-toutes:hover{border-color:var(--laiton);color:var(--laiton-clair)}
.galerie-toutes svg{width:15px;height:15px;color:var(--laiton);flex:none}

/* ---------- Visionneuse photos ---------- */
/* ⚠️ `grid-template-rows:minmax(0,1fr)` est INDISPENSABLE (corrigé le
   2026-08-10). Sans ligne explicite, la rangée était en `auto` : elle grandissait
   jusqu'à la taille naturelle de la photo, et le `max-height:100%` de l'image
   n'avait plus de hauteur de référence définie — donc il était ignoré. Résultat
   mesuré sur /bien/229 : une photo de 1200×1600 s'affichait en 1104×1472 dans un
   cadre de 687px, tronquée de 785px en bas. C'est la circularité classique
   « pourcentage contre rangée auto ».

   `.vis-scene` passe en flex plutôt qu'en grid pour la même raison : avec une
   hauteur de parent définie, `max-height:100%` sur l'image redevient calculable.
   `overflow:hidden` est la ceinture : même si une future règle rouvrait la
   brèche, rien ne déborderait par-dessus les flèches. */
.visionneuse{position:fixed;inset:0;z-index:140;background:rgba(10,9,7,.95);backdrop-filter:blur(8px);
  display:grid;grid-template-columns:72px minmax(0,1fr) 72px;grid-template-rows:minmax(0,1fr);
  align-items:center;padding:60px 16px 66px}
.visionneuse[hidden]{display:none}
.vis-scene{grid-column:2;display:flex;align-items:center;justify-content:center;
  width:100%;height:100%;min-height:0;min-width:0;overflow:hidden;margin:0}
.vis-scene img{max-width:100%;max-height:100%;width:auto;height:auto;object-fit:contain;
  display:block;border-radius:var(--rayon);box-shadow:0 30px 90px rgba(0,0,0,.65)}
.vis-nav,.vis-fermer{border:1px solid var(--ligne-claire);background:rgba(35,32,25,.7);color:var(--craie);
  border-radius:50%;display:grid;place-items:center;cursor:pointer;transition:border-color .2s,color .2s,background .2s}
.vis-nav:hover,.vis-fermer:hover{border-color:var(--laiton);color:var(--laiton-clair);background:rgba(35,32,25,.95)}
.vis-nav{width:46px;height:46px;justify-self:center}
.vis-nav svg{width:20px;height:20px}
.vis-prec{grid-column:1}
.vis-suiv{grid-column:3}
.vis-fermer{position:absolute;top:16px;right:18px;width:42px;height:42px}
.vis-fermer svg{width:18px;height:18px}
.vis-compteur{position:absolute;left:0;right:0;bottom:24px;text-align:center;font-family:var(--mono);
  font-size:12.5px;letter-spacing:.1em;color:var(--sourdine)}
/* Une seule photo : les flèches et le compteur n'ont plus de sens. */
.visionneuse.solo .vis-nav,.visionneuse.solo .vis-compteur{display:none}

/* ---------- Hero PHOTO des sous-collections ----------
   Le nom « hero-video » est un héritage : le fond a été une vidéo jusqu'au
   2026-08-09, c'est désormais TOUJOURS une photo (`img.hero-video-media`).
   La vidéo se regarde à la demande dans `.modale-video`. Les classes sont
   conservées pour ne pas dupliquer un composant déjà réglé. */
.hero-video{position:relative;min-height:min(74vh,640px);display:grid;align-items:end;overflow:hidden;isolation:isolate;background:var(--encre)}
.hero-video-media{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-2}
/* Voile dégradé : le texte reste lisible quelle que soit la photo, et le bas fond
   dans l'encre pour raccorder la section crème qui suit. */
.hero-video-voile{position:absolute;inset:0;z-index:-1;
  background:linear-gradient(180deg,rgba(20,18,16,.62) 0%,rgba(20,18,16,.28) 38%,rgba(20,18,16,.94) 100%)}
.hero-video-contenu{padding-top:140px;padding-bottom:58px;max-width:var(--max);width:100%}
.hero-video-contenu h1{margin:16px 0 16px}
.hero-video-contenu .chapo{color:var(--craie);font-size:18px;max-width:540px}
/* 34px et pas moins : collé au chapô, le bouton se lit comme une ligne de texte
   et on ne comprend plus que c'est une action. */
.hero-video-actions{display:flex;gap:16px;flex-wrap:wrap;margin-top:34px}

/* ---------- Bouton « Voir la vidéo » + fenêtre de lecture ----------
   Une vidéo ne se lance plus toute seule : elle s'ouvre ici, avec ses contrôles
   et son son. `preload="none"` côté HTML — rien ne descend avant le clic. */
.btn-video svg{width:19px;height:19px;flex:none}

/* Affiche vidéo d'une fiche logement : la photo de couverture + un Play franc.
   Toute la surface est cliquable — viser une pastille au doigt est pénible —
   mais la pastille reste le repère qui dit « ceci est une vidéo ». */
.fiche-video-affiche{position:relative;margin:30px 0 0;border-radius:14px;overflow:hidden;
  border:1px solid var(--ligne);box-shadow:0 26px 60px rgba(0,0,0,.34);background:#0f0d0b}
.fiche-video-affiche img{display:block;width:100%;height:auto;aspect-ratio:16/9;object-fit:cover}
.fiche-video-play{position:absolute;inset:0;width:100%;border:none;cursor:pointer;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:16px;
  background:linear-gradient(180deg,rgba(10,9,8,.28),rgba(10,9,8,.58));
  color:var(--craie);transition:background .25s ease}
.fiche-video-play:hover{background:linear-gradient(180deg,rgba(10,9,8,.18),rgba(10,9,8,.5))}
.fvp-pastille{width:74px;height:74px;border-radius:50%;display:grid;place-items:center;
  border:1px solid var(--ligne-forte);background:rgba(20,18,16,.55);backdrop-filter:blur(6px);
  color:var(--laiton-clair);transition:transform .25s ease,border-color .25s ease}
.fvp-pastille svg{width:30px;height:30px;margin-left:4px}
.fiche-video-play:hover .fvp-pastille{transform:scale(1.06);border-color:var(--laiton)}
.fvp-texte{font-family:var(--texte);font-weight:600;font-size:12.5px;letter-spacing:.14em;text-transform:uppercase}
@media(max-width:760px){
  /* Sur mobile la vidéo verticale reprend la main : un 16/9 rogné ne montre plus
     rien. 4/5 plutôt que 9/16 — assez haut pour exister, assez court pour ne pas
     repousser la galerie sous la ligne de flottaison. */
  .fiche-video-affiche{margin-top:22px;border-radius:12px}
  .fiche-video-affiche img{aspect-ratio:4/5}
  .fvp-pastille{width:64px;height:64px}
  .fvp-pastille svg{width:26px;height:26px}
}
.modale-video{position:fixed;inset:0;z-index:320;display:none;align-items:center;justify-content:center;
  padding:40px;background:rgba(10,9,7,.94);backdrop-filter:blur(8px);animation:fondu .25s ease}
.modale-video.ouvert{display:flex}
.modale-video figure{position:relative;width:100%;max-width:1100px}
.modale-video video{width:100%;height:auto;max-height:82vh;display:block;background:#000;
  border-radius:var(--rayon-carte);box-shadow:0 40px 90px rgba(0,0,0,.6)}
@media(max-width:640px){
  .modale-video{padding:16px}
  /* Le bouton de fermeture repasse À L'INTÉRIEUR du cadre : en dehors, il sortait
     de l'écran sur les petites largeurs et devenait inatteignable. */
  .modale-video .modale-fermer{top:8px;right:8px}
}

/* ---------- Calendrier complet des marchés ---------- */
.marches-calendrier{padding-top:54px;padding-bottom:10px}
.marches-cal-entete{max-width:660px;margin-bottom:34px}
.marches-cal-entete h2{margin:14px 0 14px}
.marches-cal-entete h2 em{font-style:italic;color:var(--laiton-clair);font-weight:500}
.marches-cal-entete .chapo{color:var(--sourdine);font-size:16px}
/* ⚠️ Aucune classe .cal-jour / .cal-nom ici : elles appartiennent DÉJÀ au calendrier
   de réservation (plus haut dans ce fichier). Les redéfinir plus bas les écrasait et
   transformait chaque case de date en carte bordée. Tout est préfixé .cal-bande-*. */

/* Puces de navigation : 54 marchés, le visiteur cherche un jour précis. Simples
   ancres, pas de JS — html{scroll-behavior:smooth} fait déjà le défilement. */
.cal-jours-nav{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:28px}
.cal-jours-nav a{display:inline-flex;align-items:center;gap:8px;padding:9px 16px;border-radius:99px;
  border:1px solid var(--ligne-claire);background:var(--encre-2);color:var(--craie);
  font-family:var(--texte);font-size:13px;font-weight:600;transition:border-color .2s,color .2s,background .2s}
.cal-jours-nav a:hover{border-color:var(--laiton);color:var(--laiton-clair);background:var(--sureleve)}
.cal-jours-nav a span{font-family:var(--mono);font-size:11px;color:var(--laiton);
  background:rgba(200,155,94,.14);border-radius:99px;padding:2px 7px;line-height:1.5}

/* Une bande pleine largeur PAR JOUR : entre 5 et 12 marchés selon les jours, des
   colonnes côte à côte donnaient des hauteurs du simple au double. */
.cal-bandes{display:grid;gap:14px}
.cal-bande{border:1px solid var(--ligne-claire);border-radius:var(--rayon-carte);
  background:var(--encre-2);overflow:hidden;scroll-margin-top:96px;transition:border-color .25s}
.cal-bande:hover{border-color:var(--ligne)}
.cal-bande-tete{display:flex;align-items:baseline;justify-content:space-between;gap:16px;flex-wrap:wrap;
  padding:18px 26px;background:var(--sureleve);border-bottom:1px solid var(--ligne-claire)}
.cal-bande-tete h3{font-family:var(--display);font-size:22px;font-weight:500;color:var(--craie)}
.cal-bande-freq{display:inline-flex;align-items:center;gap:8px;font-family:var(--mono);font-size:11.5px;
  letter-spacing:.1em;text-transform:uppercase;color:var(--laiton)}
.cal-bande-freq svg{width:14px;height:14px;flex:none}
/* auto-fill et non auto-fit : les 5 marchés du lundi gardent la même largeur de
   colonne que les 12 du samedi, au lieu de s'étirer sur toute la bande. */
.cal-bande-liste{list-style:none;display:grid;grid-template-columns:repeat(auto-fill,minmax(215px,1fr));
  gap:2px;padding:0}
.cal-bande-liste li{display:grid;gap:3px;padding:14px 26px;border-radius:var(--rayon);transition:background .2s}
.cal-bande-liste li:hover{background:rgba(200,155,94,.06)}
.cal-item-ville{font-family:var(--display);font-size:17px;font-weight:500;color:var(--craie);line-height:1.3}
.cal-item-lieu{font-family:var(--mono);font-size:12px;color:var(--sourdine);letter-spacing:.03em}
.marches-cal-note{margin-top:26px;font-size:13px;color:var(--sourdine);max-width:680px}

/* ---------- Composition d'un bien mensuel (données RC IMMO) ----------
   Trois registres, du plus lisible au plus détaillé : les chiffres qui se
   retiennent, les atouts qu'on coche, les détails qu'on lit. Chaque bloc est
   absent quand la donnée l'est — il n'y a jamais de case vide. */
.bien-compo{padding-top:34px;padding-bottom:6px}
.bien-chiffres{display:grid;grid-template-columns:repeat(auto-fit,minmax(132px,1fr));gap:14px}
.bien-chiffre{border:1px solid var(--ligne-claire);border-radius:var(--rayon-carte);background:var(--encre-2);
  padding:20px 18px;text-align:center}
.bien-chiffre b{display:block;font-family:var(--display);font-size:27px;font-weight:600;color:var(--craie);line-height:1.1}
.bien-chiffre span{display:block;margin-top:6px;font-family:var(--texte);font-size:11.5px;font-weight:600;
  letter-spacing:.12em;text-transform:uppercase;color:var(--sourdine)}
.bien-atouts{list-style:none;display:flex;flex-wrap:wrap;gap:10px;padding:0;margin-top:20px}
.bien-atouts li{display:inline-flex;align-items:center;gap:9px;padding:9px 16px;border-radius:99px;
  border:1px solid var(--ligne);background:var(--sureleve);color:var(--craie);font-size:14px}
.bien-atouts svg{width:15px;height:15px;flex:none;color:var(--laiton)}
.bien-details{display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:0 34px;margin-top:26px}
.bien-details > div{display:flex;align-items:baseline;justify-content:space-between;gap:16px;
  padding:13px 0;border-bottom:1px solid var(--ligne-claire)}
.bien-details dt{font-size:14px;color:var(--sourdine)}
.bien-details dd{font-family:var(--display);font-size:16px;color:var(--craie);text-align:right}
/* Accroche du récit : une phrase, plus grande que le corps, jamais un titre —
   un h3 de plus ferait trois niveaux de titre dans la même section. */
.bien-accroche{font-family:var(--display)!important;font-size:21px!important;color:var(--craie)!important;
  line-height:1.45;margin-bottom:16px}
@media(max-width:640px){
  .bien-chiffres{grid-template-columns:1fr 1fr;gap:10px}
  .bien-chiffre{padding:16px 12px}
  .bien-chiffre b{font-size:23px}
  .bien-details{grid-template-columns:1fr}
}

/* ---------- Contact sous la fiche d'un bien ---------- */
.fiche-contact{padding-top:6px;padding-bottom:86px}
/* « (facultatif) » collé au libellé : le visiteur doit le voir AVANT de se
   demander s'il doit rédiger un roman. */
.champ-facultatif{font-weight:400;text-transform:none;letter-spacing:0;color:var(--sourdine);font-size:12px}
.fiche-contact-corps{display:grid;grid-template-columns:.85fr 1.15fr;gap:48px;align-items:start;
  border-top:1px solid var(--ligne-claire);padding-top:44px}
.fiche-contact-corps > *{min-width:0}
.fiche-contact-texte h2{margin:14px 0 16px;font-size:clamp(26px,3vw,36px)}
.fiche-contact-texte p{color:var(--sourdine);font-size:15.5px}
.fiche-contact-delai{margin-top:16px;font-family:var(--mono);font-size:12.5px;letter-spacing:.04em;color:var(--laiton)}
.fiche-contact-form{border:1px solid var(--ligne);border-radius:var(--rayon-carte);background:var(--encre-2);padding:28px 28px 32px;position:relative}
.fiche-contact-form textarea{min-height:130px;resize:vertical}
/* Rappel du bien concerné : lecture seule, il n'est là que pour rassurer sur le contexte. */
.fiche-contact-form input[readonly]{color:var(--sourdine);cursor:default;background:var(--encre-3)}

@media(max-width:960px){
  .fiche-contact-corps{grid-template-columns:1fr;gap:30px}
  .ruban-piste .service-carte{flex-basis:272px;height:340px}
}
@media(max-width:640px){
  .fiche-prix-entete{text-align:left}
  .galerie-toutes{right:12px;bottom:12px;padding:9px 13px;font-size:12px}
  .visionneuse{grid-template-columns:1fr;padding:56px 12px 96px}
  .vis-scene{grid-column:1}
  /* Sous 640px les flèches passent en bas, côte à côte : les bords latéraux sont
     trop étroits pour les loger sans mordre sur la photo. */
  .vis-nav{position:absolute;bottom:52px;width:42px;height:42px}
  .vis-prec{left:calc(50% - 56px)}
  .vis-suiv{right:calc(50% - 56px)}
  .vis-compteur{bottom:16px}
  .hero-video{min-height:min(66vh,520px)}
  .hero-video-contenu{padding-top:118px;padding-bottom:42px}
  .ruban-piste .service-carte{flex-basis:244px;height:324px}
  .cal-bande-tete{padding:16px 20px}
  .cal-bande-liste{grid-template-columns:1fr 1fr;gap:0}
  .cal-bande-liste li{padding:12px 20px}
}
@media(prefers-reduced-motion:reduce){
  /* Ruban figé et rendu défilable à la main. La vidéo n'est PAS masquée : front.js
     la met en pause, elle reste affichée comme une photo (son 1er cadre). */
  .ruban-piste{animation:none}
  .services-ruban{overflow-x:auto;-webkit-overflow-scrolling:touch;
    -webkit-mask-image:none;mask-image:none}
}

/* =====================================================================
   PAGE BOISSONS (/boissons) — bières, vins, crémants & champagnes
   Réemploie les composants existants (dhero, bandeau-atouts, carte-or,
   check-liste, apero-*) : seules les compositions propres à la page sont ici.
   ===================================================================== */
.boissons-familles{display:grid;gap:22px;margin-top:22px}
.boisson-famille{display:grid;grid-template-columns:1fr 1.25fr;gap:0;
  border:1px solid var(--ligne-claire);border-radius:var(--rayon-carte);overflow:hidden;
  background:var(--encre-2);transition:border-color .25s}
.boisson-famille:hover{border-color:var(--ligne)}
/* Quinconce : une famille sur deux met la photo à droite. On inverse l'ORDRE des
   colonnes, pas leur contenu — l'ordre du DOM reste celui de la lecture. */
.boisson-famille.inversee .boisson-famille-photo{order:2}
/* object-fit:CONTAIN et non cover : ce sont des photos produit (bouteilles debout,
   étiquettes lisibles). Un `cover` dans une colonne haute et étroite leur coupait
   le goulot et le bas de l'étiquette. On montre la bouteille entière, posée sur un
   fond dégradé qui absorbe l'écart de format d'une photo à l'autre. */
.boisson-famille-photo{position:relative;min-height:300px;padding:26px;
  background:radial-gradient(120% 90% at 50% 25%,#2b2620 0%,#1a1713 100%)}
.boisson-famille-photo img{position:absolute;inset:26px;width:calc(100% - 52px);height:calc(100% - 52px);
  object-fit:contain}
.boisson-famille-corps{padding:34px 36px 36px;display:flex;flex-direction:column;justify-content:center}
.boisson-famille-corps h2{display:flex;align-items:center;gap:14px;font-size:28px;color:var(--craie);margin:14px 0 14px}
.boisson-famille-corps h2 .ico{width:44px;height:44px;flex:none;border:1px solid var(--ligne);border-radius:50%;
  display:grid;place-items:center;color:var(--laiton)}
.boisson-famille-corps h2 .ico svg{width:24px;height:24px}
.boisson-famille-corps > p{color:var(--sourdine);font-size:15.5px;line-height:1.7;margin-bottom:22px}
.boisson-famille-corps .check-liste li{font-size:14.5px}

/* Accord planche × bouteille : le pont commercial entre les deux pages. */
.boissons-accord{display:grid;grid-template-columns:1.05fr 1fr;gap:40px;align-items:center;padding:38px}
.boissons-accord-texte h2{font-size:clamp(26px,3vw,36px);line-height:1.15;margin:14px 0 16px;color:var(--craie)}
.boissons-accord-texte h2 em{font-style:italic;color:var(--laiton-clair);font-weight:500}
.boissons-accord-texte > p{color:var(--sourdine);font-size:15.5px;line-height:1.7;margin-bottom:24px}
.boissons-accord-photo{border-radius:var(--rayon);overflow:hidden;border:1px solid var(--ligne-claire);
  aspect-ratio:16/9;margin-bottom:22px}
.boissons-accord-photo img{width:100%;height:100%;object-fit:cover}
.boissons-accord-liste .check-liste li{font-size:14.5px}

/* Renvoi vers les boissons, posé en bas de /planches-aperitif.
   Sans visuel : la page enchaîne déjà les planches puis le gâteau, une 3e photo
   noyait le message. Texte à gauche, appel à l'action à droite. */
.renvoi-boissons{display:flex;align-items:center;justify-content:space-between;gap:40px;padding:32px 36px;
  transition:border-color .25s,transform .25s,box-shadow .25s}
.renvoi-boissons:hover{border-color:var(--laiton);transform:translateY(-3px);box-shadow:0 18px 40px rgba(0,0,0,.35)}
.renvoi-boissons-corps{min-width:0}
.renvoi-boissons-corps h3{font-size:26px;color:var(--craie);margin:12px 0 10px}
.renvoi-boissons-corps p{color:var(--sourdine);font-size:15px;line-height:1.65;max-width:620px}
.renvoi-boissons-lien{display:inline-flex;align-items:center;gap:14px;flex:none;
  font-family:var(--texte);font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--laiton)}
.renvoi-boissons-lien .fleche{width:46px;height:46px;flex:none;border-radius:50%;border:1px solid var(--ligne);
  display:grid;place-items:center;transition:transform .25s,background .25s,border-color .25s,color .25s}
.renvoi-boissons-lien .fleche svg{width:19px;height:19px}
.renvoi-boissons:hover .renvoi-boissons-lien .fleche{transform:translateX(4px);background:var(--laiton);
  border-color:var(--laiton);color:#1c1913}

/* Mention alcool — obligatoire dès qu'une page fait la promotion de boissons
   alcoolisées (art. L3323-4 du Code de la santé publique). Discrète, jamais absente. */
.mention-alcool{margin-top:26px;padding-top:18px;border-top:1px solid var(--ligne-claire);
  font-family:var(--mono);font-size:11.5px;letter-spacing:.03em;color:var(--sourdine);text-transform:uppercase;line-height:1.7}

@media(max-width:960px){
  .boisson-famille{grid-template-columns:1fr}
  /* order:2 remettrait la photo SOUS le texte en pile ; on la remonte. */
  .boisson-famille.inversee .boisson-famille-photo{order:0}
  .boisson-famille-photo{min-height:250px;padding:20px}
  .boisson-famille-photo img{inset:20px;width:calc(100% - 40px);height:calc(100% - 40px)}
  .boisson-famille-corps{padding:28px}
  .boissons-accord{grid-template-columns:1fr;gap:28px;padding:30px}
  .renvoi-boissons{flex-direction:column;align-items:flex-start;gap:24px;padding:28px}
}
@media(max-width:640px){
  .boisson-famille-corps h2{font-size:23px;gap:11px}
  .boisson-famille-corps h2 .ico{width:38px;height:38px}
  .boisson-famille-corps h2 .ico svg{width:20px;height:20px}
}

/* ---------- Encart « gâteau d'anniversaire » (/planches-aperitif) ---------- */
/* Photo à DROITE : le bandeau « boissons » juste en dessous l'a à gauche, on évite
   deux cartes au rythme identique qui se lisent comme un doublon. */
.encart-gateau{display:grid;grid-template-columns:1.3fr .7fr;gap:0;padding:0;overflow:hidden;align-items:stretch}
.encart-gateau-corps{padding:32px 34px 30px;display:flex;flex-direction:column;justify-content:center}
.encart-gateau-corps h3{font-size:26px;color:var(--craie);margin:12px 0 10px}
.encart-gateau-corps > p{color:var(--sourdine);font-size:15px;line-height:1.65;margin-bottom:20px;max-width:560px}
.encart-gateau-bas{display:flex;align-items:center;gap:16px;flex-wrap:wrap}
.encart-gateau-delai{font-size:12.5px;color:var(--sourdine);line-height:1.5;max-width:340px}
.encart-gateau-photo{position:relative;min-height:210px;background:linear-gradient(150deg,#1b1815,#2b271f)}
/* object-fit:contain : 08-gateau.png est un détourage, un `cover` en rognerait le haut. */
.encart-gateau-photo img{position:absolute;inset:0;width:100%;height:100%;object-fit:contain;padding:18px}
@media(max-width:760px){
  .encart-gateau{grid-template-columns:1fr}
  .encart-gateau-photo{order:-1;min-height:180px}
  .encart-gateau-corps{padding:26px}
  .encart-gateau-delai{max-width:none}
}

/* =====================================================================
   PAGE ACTIVITÉS & NATURE (/activites-nature)
   Réemploi des composants existants (dhero, bandeau-atouts, carte-or,
   mini-reassurance, renvoi-boissons) : seules les grilles propres sont ici.
   ===================================================================== */
.activites-entete{max-width:680px;margin-bottom:30px}
.activites-entete h2{margin-top:14px}
.activites-entete h2 em{font-style:italic;color:var(--laiton-clair);font-weight:500}
/* 4 colonnes sur grand écran, 2 puis 1 ensuite. Les cartes s'étirent à la même
   hauteur (align-items par défaut sur grid), la saison reste collée en bas. */
.activites-grille{display:grid;grid-template-columns:repeat(auto-fill,minmax(255px,1fr));gap:18px}
.activite-carte{display:flex;flex-direction:column;padding:26px 24px 22px;
  border:1px solid var(--ligne-claire);border-radius:var(--rayon-carte);background:var(--encre-2);
  transition:border-color .25s,transform .25s,box-shadow .25s}
.activite-carte:hover{border-color:var(--ligne);transform:translateY(-4px);box-shadow:0 16px 34px rgba(0,0,0,.34)}
.activite-carte .ico{width:52px;height:52px;flex:none;border:1px solid var(--ligne);border-radius:50%;
  display:grid;place-items:center;color:var(--laiton);margin-bottom:18px}
.activite-carte .ico svg{width:26px;height:26px}
.activite-carte h3{font-family:var(--display);font-size:20px;font-weight:500;color:var(--craie);
  line-height:1.3;margin-bottom:10px}
.activite-carte p{color:var(--sourdine);font-size:14px;line-height:1.6}
/* margin-top:auto : la saison s'aligne d'une carte à l'autre quelle que soit la
   longueur du texte au-dessus. */
.activite-saison{margin-top:auto;padding-top:18px;display:inline-flex;align-items:center;gap:8px;
  font-family:var(--mono);font-size:11.5px;letter-spacing:.08em;text-transform:uppercase;color:var(--laiton)}
.activite-saison svg{width:14px;height:14px;flex:none}

.activites-accomp{display:flex;align-items:center;justify-content:space-between;gap:40px;padding:34px 36px}
.activites-accomp h2{font-size:clamp(24px,2.8vw,32px);color:var(--craie);margin:14px 0 14px}
.activites-accomp p{color:var(--sourdine);font-size:15.5px;line-height:1.7;max-width:640px}
.activites-accomp .btn{flex:none}

@media(max-width:760px){
  .activites-accomp{flex-direction:column;align-items:flex-start;gap:24px;padding:28px}
  .activites-grille{grid-template-columns:1fr 1fr;gap:14px}
  .activite-carte{padding:22px 20px 20px}
}
@media(max-width:520px){
  .activites-grille{grid-template-columns:1fr}
}

/* ---------- Situation : carte pleine largeur, après les services ---------- */
/* Le rapport 21/8 est CONSERVÉ : la bbox de l'iframe est calculée dessus dans
   front-logement.php, le modifier décentrerait le repère laiton. La carte passe
   simplement de ~740 px (colonne de récit) à toute la largeur du contenu. */
.fiche-carte-pleine{padding-top:6px;padding-bottom:46px}
.fiche-carte-pleine .bloc-titre{margin-top:0}

/* ================================================================
   LOT 06/08/2026 — catalogue de services, options de logement,
   Espace Séjour, locations mensuelles.
   Aucune couleur en dur : tout est posé sur les tokens :root de la DA
   « Encre & Laiton », pour que ces composants suivent la charte le jour
   où elle bouge.
   ================================================================ */

/* ---------- Bouton discret (« Demander un devis », « Réserver ») ---------- */
.btn-fin{display:inline-flex;align-items:center;justify-content:center;gap:8px;
  padding:9px 16px;border:1px solid var(--ligne);border-radius:999px;background:none;
  font-family:var(--texte);font-size:12px;font-weight:600;letter-spacing:.1em;
  text-transform:uppercase;color:var(--laiton);cursor:pointer;white-space:nowrap;
  transition:border-color .2s,color .2s,background .2s}
.btn-fin:hover{border-color:var(--laiton);color:var(--laiton-clair);background:rgba(200,155,94,.08)}
.btn-fin.actif{border-color:var(--laiton);background:rgba(200,155,94,.14);color:var(--craie)}

/* ---------- Notes sous un service (sur devis, délai) ---------- */
.delai-note{margin-top:6px;font-family:var(--mono);font-size:12px;letter-spacing:.03em;color:var(--sourdine)}
.delai-note.indispo{color:#c96a5a}
.qte-bloquee{font-family:var(--mono);font-size:12px;letter-spacing:.06em;color:var(--sourdine);white-space:nowrap}

/* Ligne inerte : sur devis ou option déjà prise. Grisée mais LISIBLE — la masquer
   ferait croire que la prestation n'existe pas. */
.service-choix.indispo,.service-item.indispo,.option-choix.indispo{opacity:.62}
.service-choix.indispo .qte input,.service-item.indispo .qte input{opacity:.5}

/* ---------- Options de logement (parking / spa) ---------- */
.option-choix.actif{border-color:var(--laiton);background:rgba(200,155,94,.06)}
.opt-bascule{display:inline-flex;align-items:center;gap:9px;cursor:pointer;
  font-family:var(--texte);font-size:12px;font-weight:600;letter-spacing:.1em;
  text-transform:uppercase;color:var(--laiton);white-space:nowrap}
.opt-bascule input{width:18px;height:18px;accent-color:var(--laiton);cursor:pointer}
.opt-bascule input:disabled{cursor:not-allowed}
.opt-bascule input:disabled + span{color:var(--sourdine)}

/* ---------- Catalogue sur les pages de contenu ---------- */
.catalogue-bloc{padding-top:64px}
.cat-grille{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin-top:18px}
.cat-carte{display:flex;flex-direction:column;border:1px solid var(--ligne-claire);
  border-radius:var(--rayon-carte);overflow:hidden;background:var(--encre-2);
  transition:border-color .25s,transform .25s,box-shadow .25s}
.cat-carte:hover{border-color:var(--ligne);transform:translateY(-4px);box-shadow:0 16px 36px rgba(0,0,0,.32)}
.cat-visuel{position:relative;aspect-ratio:16/11;overflow:hidden;background:var(--encre-3);
  display:flex;align-items:center;justify-content:center}
.cat-visuel img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform .5s ease}
.cat-carte:hover .cat-visuel img{transform:scale(1.05)}
.cat-carte.sans-photo .cat-visuel{background:linear-gradient(140deg,var(--encre-3),var(--encre-2))}
.cat-corps{display:flex;flex-direction:column;flex:1;padding:20px 22px 22px}
.cat-corps h3{font-size:20px;color:var(--craie);margin-bottom:8px}
.cat-corps p{color:var(--sourdine);font-size:14.5px;line-height:1.6;margin-bottom:16px;flex:1}
/* margin-top:auto — la carte n'a de pied que si le service est « sur devis ».
   Sans lui, la ligne remontait coller la description sur les cartes courtes. */
.cat-pied{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;
  margin-top:auto;padding-top:4px}
.cat-prix{font-family:var(--mono);font-size:14px;letter-spacing:.04em;color:var(--laiton)}
/* Sans photo affectée en admin, la carte n'a plus de <div class="cat-visuel"> du
   tout : le titre remonte en haut du cadre. Un peu d'air pour compenser. */
.cat-carte.sans-photo .cat-corps{padding-top:24px}
@media(max-width:960px){.cat-grille{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.cat-grille{grid-template-columns:1fr}}

/* ---------- Familles servies par une page de service ----------
   Ligne de pastilles sous le chapô du hero (/experiences, /planches-aperitif,
   /boissons, /massage, /activites-nature). Les libellés viennent du catalogue
   (clés cat.*, émoji compris) : la vue n'écrit aucun nom de famille. */
.svc-familles{display:flex;flex-wrap:wrap;gap:9px;margin-top:24px}

/* ---------- Filtre par thème (fiche logement) ----------
   Remplace l'ancien ruban à défilement continu : avec 29 prestations en 14 familles,
   un carrousel qui défile tout seul ne laisse rien chercher. */
.svc-themes{display:flex;flex-wrap:wrap;gap:10px;margin:22px 0 30px}
.svc-theme{display:inline-flex;align-items:center;gap:8px;padding:9px 16px;border:1px solid var(--ligne);
  border-radius:999px;background:none;cursor:pointer;color:var(--sourdine);
  font-family:var(--texte);font-size:13px;letter-spacing:.02em;transition:all .2s}
.svc-theme span{font-family:var(--mono);font-size:11px;opacity:.7}
.svc-theme:hover{border-color:var(--ligne-forte);color:var(--craie)}
.svc-theme.actif{border-color:var(--laiton);background:rgba(200,155,94,.12);color:var(--craie)}
.svc-theme.actif span{color:var(--laiton);opacity:1}
/* Repère visuel quand une carte renvoie au panneau de réservation : sans lui, le
   défilement se termine sans qu'on comprenne où l'on vient d'atterrir. */
.panneau-resa.surligne{box-shadow:0 0 0 2px var(--laiton),0 18px 44px rgba(0,0,0,.4);transition:box-shadow .3s}
@media(max-width:600px){.svc-themes{gap:8px}.svc-theme{padding:8px 13px;font-size:12.5px}}

/* ---------- Piste de services à défilement MANUEL (fiche logement) ----------
   L'ancien ruban avançait tout seul et ne s'arrêtait qu'au survol : impossible de
   revenir en arrière ou de lire tranquillement une carte. Ici, rien ne bouge sans
   qu'on le demande — flèches, molette, ou doigt. */
.svc-barre{display:flex;align-items:flex-start;justify-content:space-between;gap:22px;flex-wrap:wrap;margin:22px 0 18px}
.svc-barre .svc-themes{margin:0;flex:1}
.svc-barre .fleches{flex:none;padding-top:2px}
.svc-piste{display:flex;gap:24px;overflow-x:auto;scroll-snap-type:x mandatory;
  padding:4px 2px 18px;scrollbar-width:none;-ms-overflow-style:none}
.svc-piste::-webkit-scrollbar{display:none}
.svc-piste>.cat-carte{flex:0 0 320px;scroll-snap-align:start}
.svc-piste>.cat-carte[hidden]{display:none}
@media(max-width:600px){
  .svc-piste>.cat-carte{flex:0 0 78vw}
  .svc-barre{gap:14px}
  /* Sous 600px les flèches passent sous les thèmes plutôt que de les comprimer. */
  .svc-barre .fleches{width:100%;display:flex;justify-content:flex-end}
}

/* =====================================================================
   PAGES DE SERVICE (.sp-*) — Petit-déjeuner, Apéro & boissons, Massage,
   Activités, Marchés. Refonte du 2026-08-09 : contenu 100 % éditorial,
   écrit en dur dans _models/home.php, plus aucune dépendance au catalogue.
   Un seul jeu de composants pour les cinq pages : elles doivent se
   ressembler, c'est ce qui fait qu'on comprend qu'on est chez le même
   prestataire. Tout est bâti sur les tokens de la DA « Encre & Laiton ».
   ===================================================================== */

/* ---- Hero ---- */
.sp-hero{position:relative;min-height:min(68vh,560px);display:grid;align-items:end;overflow:hidden;isolation:isolate;background:var(--encre)}
.sp-hero-media{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:-2}
.sp-hero-voile{position:absolute;inset:0;z-index:-1;
  background:linear-gradient(180deg,rgba(20,18,16,.60) 0%,rgba(20,18,16,.24) 36%,rgba(20,18,16,.95) 100%)}
.sp-hero-contenu{padding-top:132px;padding-bottom:56px;max-width:var(--max);width:100%}
.sp-hero-contenu h1{margin:16px 0 18px;max-width:16ch}
.sp-hero-contenu .chapo{color:var(--craie);font-size:18px;line-height:1.6;max-width:620px}
.sp-hero-actions{display:flex;gap:16px;flex-wrap:wrap;margin-top:32px}
/* Le hero sans photo ne doit pas être un rectangle noir : on garde un dégradé
   chaud, comme `.hero-media.vide` sur l'accueil. */
.sp-hero.vide{background:linear-gradient(150deg,#26221b,#141210 62%)}

/* ---- Intro éditoriale ---- */
.sp-intro{padding-top:64px;padding-bottom:10px}
.sp-intro-grille{display:grid;grid-template-columns:1fr 1.1fr;gap:52px;align-items:start}
.sp-intro-grille > *{min-width:0}
.sp-intro h2{margin:14px 0 0}
.sp-intro p{color:var(--sourdine);font-size:16.5px;line-height:1.7}

/* ---- Cartes d'offre (formules, soins, planches, bouteilles) ---- */
.sp-section{padding-top:52px;padding-bottom:6px}
.sp-section-tete{max-width:680px;margin-bottom:30px}
.sp-cartes{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.sp-cartes.cols-2{grid-template-columns:repeat(2,1fr)}
.sp-carte{border:1px solid var(--ligne-claire);border-radius:var(--rayon-carte);background:var(--encre-2);
  padding:26px 24px 28px;display:flex;flex-direction:column;transition:border-color .25s,transform .25s,box-shadow .25s}
.sp-carte:hover{border-color:var(--ligne);transform:translateY(-4px);box-shadow:0 18px 40px rgba(0,0,0,.32)}
.sp-carte-num{font-family:var(--mono);font-size:11px;font-weight:600;letter-spacing:.2em;color:var(--laiton);margin-bottom:12px}
.sp-carte h3{font-size:21px;color:var(--craie);margin-bottom:10px;line-height:1.25}
.sp-carte p{color:var(--sourdine);font-size:15px;line-height:1.65}

/* ---- Les trois étapes ---- */
.sp-etapes{display:grid;grid-template-columns:repeat(3,1fr);gap:26px;counter-reset:etape}
.sp-etape{position:relative;padding-top:22px;border-top:1px solid var(--ligne)}
.sp-etape::before{counter-increment:etape;content:counter(etape,decimal-leading-zero);
  position:absolute;top:-13px;left:0;background:var(--encre);padding-right:12px;
  font-family:var(--mono);font-size:12px;font-weight:700;letter-spacing:.18em;color:var(--laiton)}
.sp-etape h3{font-family:var(--display);font-size:20px;font-weight:600;color:var(--craie);margin-bottom:9px}
.sp-etape p{color:var(--sourdine);font-size:15px;line-height:1.65}

/* ---- « Ce qui est compris » ---- */
.sp-inclus{display:grid;grid-template-columns:1fr 1fr;gap:14px 34px;list-style:none;padding:0}
.sp-inclus li{position:relative;padding-left:32px;color:var(--craie);font-size:15.5px;line-height:1.55}
.sp-inclus li::before{content:"";position:absolute;left:0;top:2px;width:20px;height:20px;border-radius:50%;
  border:1px solid var(--ligne-forte);
  background:no-repeat center/11px 11px
    url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23c89b5e' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 12.5l5 5L20 6.5'/%3E%3C/svg%3E")}

/* ---- Bandeau « bon à savoir » ---- */
.sp-savoir{margin-top:30px;border:1px solid var(--ligne);border-left:3px solid var(--laiton);
  border-radius:var(--rayon);background:rgba(200,155,94,.06);padding:20px 24px;
  color:var(--craie);font-size:15px;line-height:1.65}

/* ---- Appel à l'action de fin de page ---- */
.sp-cta{padding-top:56px;padding-bottom:20px}
.sp-cta-bloc{border:1px solid var(--ligne);border-radius:var(--rayon-carte);background:var(--sureleve);
  padding:44px 44px 46px;text-align:center}
.sp-cta-bloc h2{margin-bottom:14px}
.sp-cta-bloc p{color:var(--sourdine);font-size:16px;max-width:620px;margin:0 auto 26px}
.sp-cta-actions{display:flex;gap:16px;justify-content:center;flex-wrap:wrap}

/* ---- Renvoi vers les quatre autres services ---- */
.sp-autres{padding-top:44px;padding-bottom:84px}
.sp-autres-liste{display:grid;grid-template-columns:repeat(4,1fr);gap:18px;margin-top:24px}
.sp-autre{display:block;border:1px solid var(--ligne-claire);border-radius:var(--rayon-carte);overflow:hidden;
  background:var(--encre-2);transition:border-color .25s,transform .25s}
.sp-autre:hover{border-color:var(--laiton);transform:translateY(-4px)}
.sp-autre-photo{position:relative;aspect-ratio:16/10;overflow:hidden;background:linear-gradient(150deg,#26221b,#141210)}
.sp-autre-photo img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.sp-autre b{display:block;padding:16px 18px 18px;font-family:var(--display);font-size:17px;font-weight:600;color:var(--craie)}

/* ---- Activités : familles et sorties ---- */
.act-famille{padding-top:40px;padding-bottom:0}
.act-famille h2{font-size:clamp(26px,2.6vw,34px);margin-bottom:6px}
.act-liste{display:grid;grid-template-columns:repeat(2,1fr);gap:0 40px;margin-top:18px}
.act-item{display:grid;grid-template-columns:1fr auto;gap:6px 18px;align-items:baseline;
  padding:18px 0;border-bottom:1px solid var(--ligne-claire)}
.act-item h3{font-family:var(--display);font-size:19px;font-weight:600;color:var(--craie);line-height:1.3}
.act-item p{grid-column:1/-1;color:var(--sourdine);font-size:14.5px;line-height:1.6;margin-top:-2px}
.act-duree{font-family:var(--mono);font-size:11.5px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;
  color:var(--laiton);white-space:nowrap;border:1px solid var(--ligne);border-radius:99px;padding:4px 11px}
.act-duree.pied{color:var(--laiton-clair);border-color:var(--ligne-forte)}
.act-note{margin-top:26px;font-family:var(--mono);font-size:12px;letter-spacing:.04em;color:var(--sourdine)}

/* ---- Encadré « visuel à fournir » ----
   Ne s'affiche QUE si le fichier attendu est absent du serveur (photo_existe()).
   Le jour où Thomas dépose l'image, l'encadré disparaît tout seul : aucune ligne
   de code à retoucher, donc aucun risque d'oublier un cadre pointillé en prod. */
.photo-attente{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:8px;
  min-height:180px;height:100%;padding:24px;text-align:center;
  border:1px dashed var(--ligne-forte);border-radius:var(--rayon-carte);background:rgba(200,155,94,.05)}
.photo-attente svg{width:26px;height:26px;color:var(--laiton);opacity:.8}
.photo-attente b{font-family:var(--texte);font-size:11px;font-weight:700;letter-spacing:.16em;text-transform:uppercase;color:var(--laiton)}
.photo-attente code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11.5px;color:var(--sourdine);word-break:break-all}
/* Dans un hero, l'encadré occupe tout le fond : il remplace la photo absente. */
.sp-hero .photo-attente{position:absolute;inset:0;z-index:-2;border:none;border-radius:0;background:linear-gradient(150deg,#26221b,#141210 62%)}

@media(max-width:960px){
  .sp-intro-grille{grid-template-columns:1fr;gap:26px}
  .sp-cartes,.sp-cartes.cols-2{grid-template-columns:1fr 1fr}
  .sp-etapes{grid-template-columns:1fr;gap:22px}
  .sp-autres-liste{grid-template-columns:1fr 1fr}
  .act-liste{grid-template-columns:1fr;gap:0}
}
@media(max-width:640px){
  .sp-hero{min-height:min(62vh,460px)}
  .sp-hero-contenu{padding-top:112px;padding-bottom:40px}
  .sp-cartes,.sp-cartes.cols-2{grid-template-columns:1fr}
  .sp-inclus{grid-template-columns:1fr}
  .sp-cta-bloc{padding:32px 22px 34px}
  .sp-autres-liste{grid-template-columns:1fr 1fr;gap:12px}
  .sp-autre b{font-size:15px;padding:12px 14px 14px}
}

/* ---- Hub /nos-services : les cinq encarts ----
   Ces règles vivaient dans un <style> de la vue jusqu'au 2026-08-09. Elles sont
   remontées ici parce que la même carte sert désormais aussi de renvoi croisé en
   bas des pages de service : deux copies du même CSS auraient divergé. */
.svc-cartes{display:grid;grid-template-columns:repeat(3,1fr);gap:26px;margin-top:40px}
.svc-carte{display:flex;flex-direction:column;border:1px solid var(--ligne-claire);border-radius:var(--rayon-carte);
  overflow:hidden;background:var(--encre-2);text-decoration:none;transition:border-color .25s,transform .25s,box-shadow .25s}
.svc-carte:hover{border-color:var(--ligne);transform:translateY(-5px);box-shadow:0 18px 40px rgba(0,0,0,.35)}
.svc-carte-photo{position:relative;display:block;aspect-ratio:16/11;overflow:hidden}
.svc-carte-photo img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;transition:transform .5s ease}
.svc-carte:hover .svc-carte-photo img{transform:scale(1.06)}
/* L'encadré « visuel à fournir » remplit la vignette au lieu de la laisser vide. */
.svc-carte-photo .photo-attente{position:absolute;inset:0;min-height:0;border:none;border-radius:0}
.svc-carte-corps{padding:24px 24px 26px;display:flex;flex-direction:column;flex:1}
.svc-carte-corps h3{font-size:22px;color:var(--craie);margin-bottom:8px}
.svc-carte-corps p{color:var(--sourdine);font-size:15px;line-height:1.6;margin-bottom:18px;flex:1}
.svc-carte-nb{align-self:flex-start;margin-bottom:12px}
.svc-carte-lien{font-family:var(--texte);font-size:12px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;
  color:var(--laiton);display:inline-flex;align-items:center;gap:8px}
.svc-carte-lien .fleche{transition:transform .25s}
.svc-carte:hover .svc-carte-lien .fleche{transform:translateX(5px)}
@media(max-width:960px){.svc-cartes{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.svc-cartes{grid-template-columns:1fr}}

/* ---- Pages de service : bande de visuels et prestations (2026-08-09, 2e passe) ----
   Pages COURTES et illustrées : la bande d'images remplace les longs blocs de
   texte qu'il y avait avant. Chaque case est soit une photo, soit un cadre
   cliquable qui donne le prompt de génération. */
.sp-galerie-sec{padding-top:44px;padding-bottom:6px}
.sp-galerie{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
.sp-visuel{position:relative;margin:0;border-radius:var(--rayon-carte);overflow:hidden;
  border:1px solid var(--ligne-claire);background:var(--encre-2);aspect-ratio:3/2}
.sp-visuel img{width:100%;height:100%;object-fit:cover;transition:transform .5s ease}
.sp-visuel:hover img{transform:scale(1.05)}
.sp-visuel figcaption{position:absolute;left:0;right:0;bottom:0;padding:26px 16px 13px;
  font-family:var(--texte);font-size:12px;font-weight:600;letter-spacing:.1em;text-transform:uppercase;
  color:var(--craie);background:linear-gradient(to top,rgba(10,9,8,.78),transparent)}
/* Cadre « visuel à fournir » : c'est un <button>, on annule le style natif. */
button.sp-visuel{cursor:pointer;font:inherit;color:inherit;text-align:center;width:100%;
  display:flex;flex-direction:column;align-items:center;justify-content:center;gap:7px;padding:20px}
button.sp-visuel:hover{border-color:var(--laiton)}
button.sp-visuel .pa-cta{margin-top:4px;font-family:var(--texte);font-size:11px;font-weight:700;
  letter-spacing:.12em;text-transform:uppercase;color:var(--laiton-clair)}

.sp-prestations{display:grid;grid-template-columns:repeat(2,1fr);gap:2px 40px}
.sp-presta{padding:18px 0;border-bottom:1px solid var(--ligne-claire)}
.sp-presta h3{font-family:var(--display);font-size:19px;font-weight:600;color:var(--craie);line-height:1.3;margin-bottom:5px}
.sp-presta p{color:var(--sourdine);font-size:14.5px;line-height:1.6}

/* ---- Fenêtre « prompt de génération d'image » ----
   Outil d'auteur : elle n'existe dans la page que tant qu'il manque un visuel.
   Volontairement sobre — ce n'est pas du contenu, c'est un presse-papier. */
.modale-prompt{position:fixed;inset:0;z-index:330;display:none;align-items:center;justify-content:center;
  padding:32px;background:rgba(10,9,7,.94);backdrop-filter:blur(8px);animation:fondu .25s ease}
.modale-prompt.ouvert{display:flex}
.mp-boite{position:relative;width:100%;max-width:760px;background:var(--encre-2);
  border:1px solid var(--ligne);border-radius:var(--rayon-carte);padding:30px 30px 28px;
  box-shadow:0 40px 90px rgba(0,0,0,.6)}
.mp-fichier{display:flex;flex-wrap:wrap;align-items:baseline;gap:10px;margin:14px 0 16px}
.mp-fichier span{font-family:var(--texte);font-size:11.5px;font-weight:700;letter-spacing:.12em;
  text-transform:uppercase;color:var(--sourdine)}
.mp-fichier code{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;
  color:var(--laiton-clair);word-break:break-all}
.mp-texte{width:100%;background:var(--encre);border:1px solid var(--ligne-claire);border-radius:var(--rayon);
  color:var(--craie);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:13px;line-height:1.6;
  padding:16px;resize:vertical;margin-bottom:16px}
.mp-boite .btn{width:100%}
@media(max-width:960px){
  .sp-galerie{grid-template-columns:1fr 1fr}
  .sp-prestations{grid-template-columns:1fr;gap:0}
}
@media(max-width:640px){
  .sp-galerie{grid-template-columns:1fr;gap:14px}
  .modale-prompt{padding:14px}
  .mp-boite{padding:22px 18px 20px}
}

/* ---- Grande respiration visuelle au milieu d'une page de service ----
   Un visuel pleine largeur entre l'intro et le corps : il coupe le texte, donne
   de l'air, et c'est ce qui fait qu'une page de service se lit au lieu de se
   parcourir. 21/9 sur grand écran, 3/2 sur téléphone (un 21/9 y devient une
   fente de 120px de haut). */
.sp-visuel-large-sec{padding-top:34px;padding-bottom:6px}
.sp-visuel-large{aspect-ratio:21/9}
.sp-visuel-large figcaption{padding:34px 24px 18px;font-size:12.5px}
/* Paragraphe courant d'une colonne éditoriale (accords, « on organise pour vous »). */
.sp-para{color:var(--sourdine);font-size:16.5px;line-height:1.7}
@media(max-width:760px){
  .sp-visuel-large{aspect-ratio:3/2}
  .sp-visuel-large figcaption{padding:26px 16px 13px;font-size:12px}
}

/* ================================================================
   FORMULAIRES DE CONTACT — captcha et bouton en cours d'envoi
   ================================================================ */

/* Le widget hCaptcha respire au-dessus du bouton. Largeur non forcée : l'iframe
   a sa propre taille et se réduit d'elle-même sous 400 px. */
.champ-captcha { margin: 18px 0 20px; }
.champ-captcha .h-captcha { display: inline-block; max-width: 100%; }

/* Bouton verrouillé le temps de la soumission. Verrou VISUEL et de pointeur
   uniquement — surtout pas `disabled`, qui ferait annuler l'envoi (le blocage
   réel du double clic est fait dans front.js). */
.btn.is-envoi {
  pointer-events: none;
  opacity: .62;
  cursor: progress;
}
