@charset "UTF-8";
/* ==========================================================================
   Gîte Le Murger — feuille de style unique.

   Parti pris : la pierre calcaire et le chardonnay. Fonds crème, texte brun
   très foncé, un or discret pour les accents, un vert de vigne pour les
   actions. Titres en Cormorant Garamond, tout le reste en Inter.

   Aucune ressource distante : les deux polices sont servies depuis ce
   serveur, les icônes sont des SVG en ligne. La CSP n'autorise rien d'autre.
   ========================================================================== */

/* ── Polices ─────────────────────────────────────────────────────────────
   Inter est une police VARIABLE : un seul fichier couvre 100 à 900. En
   déclarer une par graisse téléchargerait trois fois le même octet. */
@font-face {
  font-family: 'Cormorant';
  src: url('/assets/fonts/cormorant.woff2?v=1.0.0') format('woff2');
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
                 U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,
                 U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}
@font-face {
  font-family: 'InterVar';
  src: url('/assets/fonts/inter.woff2?v=1.0.0') format('woff2');
  font-weight: 100 900;
  font-style: normal;
  font-display: swap;
  unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA,
                 U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122,
                 U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;
}

/* ── Jetons de design ──────────────────────────────────────────────────── */
:root {
  /* Couleurs */
  --craie:      #fcfaf6;
  --craie-2:    #f7f3ec;
  --pierre:     #f2ece1;
  --pierre-2:   #e7ddcb;
  --bord:       #e0d5c1;
  --bord-fort:  #cdbfa5;

  --encre:      #221f1c;
  --encre-2:    #5b5349;
  --encre-3:    #857c6e;

  --or:         #9c722a;
  --or-clair:   #c8a45e;
  --or-pale:    #f6ecd7;

  --vigne:      #3c5137;
  --vigne-2:    #4c6645;
  --vigne-pale: #eaf0e6;

  --blanc:      #ffffff;
  --nuit:       #1b1917;

  /* Typographie */
  --f-titre: 'Cormorant', 'Iowan Old Style', 'Palatino Linotype', Palatino, Georgia, serif;
  --f-texte: 'InterVar', -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto,
             'Helvetica Neue', Arial, sans-serif;

  /* Échelle fluide : de la taille mobile à la taille bureau, sans palier */
  --t-xs:   0.8125rem;
  --t-s:    0.9375rem;
  --t-base: 1.0625rem;
  --t-m:    clamp(1.125rem, 0.4vw + 1.03rem, 1.25rem);
  --t-l:    clamp(1.375rem, 1vw + 1.1rem, 1.75rem);
  --t-xl:   clamp(1.75rem, 2vw + 1.2rem, 2.5rem);
  --t-2xl:  clamp(2.125rem, 3.2vw + 1.2rem, 3.5rem);
  --t-3xl:  clamp(2.5rem, 5vw + 1rem, 4.75rem);

  /* Rythme */
  --sp-1: .25rem;  --sp-2: .5rem;   --sp-3: .75rem;  --sp-4: 1rem;
  --sp-5: 1.5rem;  --sp-6: 2rem;    --sp-7: 3rem;    --sp-8: 4rem;
  --sp-9: 6rem;    --sp-10: 8rem;
  /* Rythme resserre : le contenu doit tenir en peu de defilements. */
  --section: clamp(2.5rem, 4.4vw, 4.5rem);

  /* Formes */
  --r-s:  4px;
  --r-m:  8px;
  --r-l:  14px;
  --r-xl: 22px;
  --ombre-s: 0 1px 2px rgba(34,31,28,.05), 0 2px 8px rgba(34,31,28,.04);
  --ombre-m: 0 2px 6px rgba(34,31,28,.06), 0 12px 32px rgba(34,31,28,.07);
  --ombre-l: 0 8px 24px rgba(34,31,28,.09), 0 32px 64px rgba(34,31,28,.09);

  --largeur:  1200px;
  --etroit:   860px;
  --prose:    68ch;   /* au-delà de ~78ch, élargir ne fait plus rien gagner */

  --tr: 180ms cubic-bezier(.4,0,.2,1);
}

/* ── Remise à zéro ─────────────────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; }

html {
  -webkit-text-size-adjust: 100%;
  scroll-behavior: smooth;
  scroll-padding-top: 6rem;   /* l'en-tête collant ne doit pas masquer l'ancre */
}
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after {
    animation-duration: .01ms !important; animation-iteration-count: 1 !important;
    transition-duration: .01ms !important; scroll-behavior: auto !important;
  }
}

body {
  font-family: var(--f-texte);
  font-size: var(--t-base);
  line-height: 1.65;
  color: var(--encre);
  background: var(--craie);
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  font-synthesis-weight: none;
  text-rendering: optimizeLegibility;
}

img, picture, svg, video { display: block; max-width: 100%; }
img { height: auto; }
/* Le fond d'attente se pose sur le CONTENEUR, jamais sur l'<img> : appliqué à
   l'image, il transparaît dans les zones transparentes et dessine un
   rectangle clair derrière un logo détouré. */
.duo__media, .hero__media, .appel__media { background: var(--pierre); border-radius: inherit; }
input, button, textarea, select { font: inherit; color: inherit; }
button { background: none; border: 0; cursor: pointer; }
ul, ol { list-style: none; padding: 0; }

/* ── Typographie ───────────────────────────────────────────────────────── */
h1, h2, h3, h4 {
  font-family: var(--f-titre);
  font-weight: 600;
  line-height: 1.1;
  letter-spacing: -.01em;
  text-wrap: balance;
}

/* Cormorant dessine des chiffres elzéviriens : le 3, le 4, le 5, le 7 et le 9
   descendent sous la ligne de base. À côté d'un « € », qui est de hauteur
   capitale, un prix paraît remonter — très visible sur le total de
   l'estimateur, affiché à 60 px. On force la hauteur capitale partout où
   cette police porte un nombre. */
h1, h2, h3, h4,
.marque__nom, .tarif__prix, .prix-vedette__val, .pdj__prix,
.esti__total, .hote__nom {
  font-variant-numeric: lining-nums;
}
h1 { font-size: var(--t-3xl); }
h2 { font-size: var(--t-2xl); }
h3 { font-size: var(--t-l); }
h4 { font-size: var(--t-m); }

p { text-wrap: pretty; }

a { color: inherit; text-decoration-color: var(--or-clair); text-underline-offset: .18em; }
a:hover { text-decoration-color: var(--or); }

:focus-visible {
  outline: 2.5px solid var(--vigne);
  outline-offset: 3px;
  border-radius: var(--r-s);
}

::selection { background: var(--or-pale); color: var(--encre); }

/* ── Structures ────────────────────────────────────────────────────────── */
.conteneur { width: min(100% - 2.5rem, var(--largeur)); margin-inline: auto; }
@media (min-width: 700px) { .conteneur { width: min(100% - 4rem, var(--largeur)); } }

.etroit { width: min(100%, var(--etroit)); margin-inline: auto; }
.prose  { max-width: var(--prose); }
.prose p + p { margin-top: 1em; }

.section { padding-block: var(--section); }
.section--pierre { background: var(--pierre); }
.section--craie2 { background: var(--craie-2); }
.section--nuit   { background: var(--nuit); color: #ece7de; }
.section--nuit h2, .section--nuit h3 { color: var(--blanc); }

/* Le contenu sous la ligne de flottaison n'est peint qu'à l'approche.
   contain-intrinsic-size évite que la barre de défilement saute. */
.differe { content-visibility: auto; contain-intrinsic-size: auto 700px; }

/* ── Sur-titre + titre de section ──────────────────────────────────────── */
.sur {
  display: inline-flex; align-items: center; gap: .6rem;
  font-size: var(--t-xs); font-weight: 600;
  letter-spacing: .13em; text-transform: uppercase;
  color: var(--or);
  margin-bottom: var(--sp-3);
}
.sur::before {
  content: ''; width: 1.9rem; height: 1px; background: var(--or-clair);
}
.tete { margin-bottom: var(--sp-5); }
.tete--centre { text-align: center; }
.tete--centre .sur, .sur--centre { justify-content: center; }
.tete p { color: var(--encre-2); font-size: var(--t-m); margin-top: var(--sp-4); max-width: var(--prose); }
.tete--centre p { margin-inline: auto; }

/* ── Boutons ───────────────────────────────────────────────────────────── */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: .55rem;
  padding: .85rem 1.6rem;
  font-size: var(--t-s); font-weight: 600; letter-spacing: .01em;
  border-radius: 100px;
  text-decoration: none;
  border: 1.5px solid transparent;
  transition: background var(--tr), color var(--tr), border-color var(--tr),
              transform var(--tr), box-shadow var(--tr);
  white-space: nowrap;
}
.btn:hover { transform: translateY(-1px); }
.btn:active { transform: translateY(0); }

.btn--plein { background: var(--vigne); color: #f6f2e9; box-shadow: var(--ombre-s); }
.btn--plein:hover { background: var(--vigne-2); box-shadow: var(--ombre-m); }

.btn--or { background: var(--or); color: #fffdf7; }
.btn--or:hover { background: #86611f; }

.btn--ligne { border-color: var(--bord-fort); color: var(--encre); background: transparent; }
.btn--ligne:hover { border-color: var(--encre); background: var(--blanc); }

.btn--clair { border-color: rgba(255,255,255,.42); color: #fff; }
.btn--clair:hover { background: rgba(255,255,255,.13); border-color: #fff; }

.btn--sm { padding: .6rem 1.15rem; font-size: var(--t-xs); }
.btn .ic { width: 1.15em; height: 1.15em; flex: none; }

.btns { display: flex; flex-wrap: wrap; gap: var(--sp-3); }
.btns--centre { justify-content: center; }

/* ── Icônes ────────────────────────────────────────────────────────────── */
.ic   { width: 1.5rem; height: 1.5rem; flex: none; }
.ic-s { width: 1.15rem; height: 1.15rem; }
.ic-l { width: 1.85rem; height: 1.85rem; }

/* ── Lien d'évitement ──────────────────────────────────────────────────── */
.evitement {
  position: absolute; left: -9999px; top: 0; z-index: 200;
  background: var(--vigne); color: #fff; padding: .8rem 1.3rem;
  border-radius: 0 0 var(--r-m) 0; font-weight: 600;
}
.evitement:focus { left: 0; }

/* ══════════════════════════════════════════════════════ En-tête ═══════ */
.entete {
  position: sticky; top: 0; z-index: 100;
  background: rgba(252,250,246,.86);
  backdrop-filter: saturate(1.6) blur(14px);
  -webkit-backdrop-filter: saturate(1.6) blur(14px);
  border-bottom: 1px solid transparent;
  transition: border-color var(--tr), background var(--tr), box-shadow var(--tr);
}
.entete[data-defile='1'] {
  border-bottom-color: var(--bord);
  box-shadow: 0 1px 12px rgba(34,31,28,.05);
}
.entete__in {
  display: flex; align-items: center; gap: var(--sp-5);
  min-height: 5.4rem;
}

.marque { display: flex; align-items: center; gap: .7rem; text-decoration: none; flex: none; }
.marque__nom {
  font-family: var(--f-titre); font-size: 1.42rem; font-weight: 600;
  line-height: 1.05; letter-spacing: -.005em;
}
.marque__sous {
  display: block; font-family: var(--f-texte);
  font-size: .625rem; letter-spacing: .17em; text-transform: uppercase;
  color: var(--or); font-weight: 600; margin-top: .15rem;
}
/* La hauteur est fixée, la largeur suit : le bloc horizontal et le badge
   carré partagent la même ligne de base dans l'en-tête. */
.marque__logo { height: 3.6rem; width: auto; flex: none; display: block; }
@media (max-width: 1080px) { .marque__logo { height: 3.2rem; } }
@media (max-width: 559px)  { .marque__logo { height: 2.8rem; } }
.marque { line-height: 0; }

/* La barre d actions est poussee a droite par elle-meme : sur mobile la
   navigation est masquee, donc son margin-left:auto ne s applique plus
   et le hamburger venait se coller au logo. */
.nav { margin-left: auto; }
.entete__actions { margin-left: auto; }
.nav__liste { display: flex; align-items: center; gap: .35rem; }
.nav__lien {
  display: block; padding: .55rem .78rem;
  font-size: var(--t-s); font-weight: 500; text-decoration: none;
  border-radius: var(--r-m); color: var(--encre-2);
  transition: color var(--tr), background var(--tr);
}
.nav__lien:hover { color: var(--encre); background: var(--pierre); }
.nav__lien[aria-current='page'] { color: var(--encre); font-weight: 600; }
.nav__lien[aria-current='page']::after {
  content: ''; display: block; height: 2px; margin-top: .18rem;
  background: var(--or-clair); border-radius: 2px;
}

.entete__actions { display: flex; align-items: center; gap: .35rem; flex: none; }

/* Sélecteur de langue */
.langue { position: relative; }
.langue__btn {
  display: flex; align-items: center; gap: .3rem;
  padding: .5rem .6rem; border-radius: var(--r-m);
  font-size: var(--t-xs); font-weight: 600; color: var(--encre-2);
  text-transform: uppercase; letter-spacing: .06em;
}
.langue__btn:hover { background: var(--pierre); color: var(--encre); }
.langue__menu {
  position: absolute; right: 0; top: calc(100% + .4rem);
  background: var(--blanc); border: 1px solid var(--bord);
  border-radius: var(--r-m); box-shadow: var(--ombre-m);
  padding: .3rem; min-width: 9rem;
}
.langue__menu[hidden] { display: none; }
.langue__menu a {
  display: block; padding: .5rem .7rem; border-radius: var(--r-s);
  font-size: var(--t-s); text-decoration: none;
}
.langue__menu a:hover { background: var(--pierre); }
.langue__menu a[aria-current='true'] { font-weight: 600; color: var(--or); }

/* Bascule du menu mobile */
.burger {
  display: none; border-radius: var(--r-m); color: var(--encre);
  /* 44 px minimum : cible tactile confortable. */
  width: 2.75rem; height: 2.75rem; place-items: center;
}
.burger:hover { background: var(--pierre); }

@media (max-width: 1080px) {
  .burger { display: grid; }
  .nav {
    position: fixed; inset: 5.4rem 0 auto; margin: 0;
    background: var(--craie); border-bottom: 1px solid var(--bord);
    box-shadow: var(--ombre-l);
    padding: var(--sp-4) 0 var(--sp-5);
    max-height: calc(100dvh - 5.4rem); overflow-y: auto;
  }
  .nav[hidden] { display: none; }
  .nav__liste { flex-direction: column; align-items: stretch; gap: 0; }
  .nav__lien {
    padding: .95rem 1.25rem; border-radius: 0; font-size: var(--t-m);
    border-bottom: 1px solid var(--pierre-2);
  }
  .nav__lien[aria-current='page']::after { display: none; }
  .nav__lien[aria-current='page'] { color: var(--or); }
  .entete__cta { display: none; }
}
@media (max-width: 420px) {
  .marque__nom { font-size: 1.2rem; }
}

/* ══════════════════════════════════════════════════════ Bandeau ═══════ */
.hero { position: relative; isolation: isolate; overflow: hidden; }
.hero__media { position: absolute; inset: 0; z-index: 0; }
.hero__media picture, .diapo__vue picture { display: block; width: 100%; height: 100%; }
.hero__media img, .diapo__vue img {
  width: 100%; height: 100%; object-fit: cover;
  /* glm_img() pose un aspect-ratio en ligne pour eviter les sauts de
     mise en page ; sur une image de fond il doit ceder, sinon la photo
     garde son ratio et laisse un vide sous le bandeau. */
  aspect-ratio: auto !important;
}
.hero::after {
  content: ''; position: absolute; inset: 0; z-index: 1;
  /* Deux voiles superposés plutôt qu'un seul.
     Un dégradé vertical uniforme ne suffit pas : mesuré sur la vue aérienne,
     20 à 34 % de la zone du titre tombait sous 4,5:1, avec des taches à
     1,04:1 — du blanc sur un toit clair. La moyenne, elle, semblait bonne :
     c'est le pire cas local qui rend un mot illisible, pas la moyenne.
     Le voile HORIZONTAL assombrit la gauche, où le texte est aligné, et
     libère la droite pour que la photo reste visible. */
  /* Dosage : un voile plus léger, compensé par une ombre de texte plus
     franche. L'ombre n'assombrit que le pourtour des lettres ; le voile,
     lui, éteint toute la photo. Mieux vaut donc charger l'ombre et alléger
     le voile que l'inverse. */
  /* Les arrêts horizontaux suivent la largeur du texte : elle est passée de
     580 à ~840 px, la zone sombre devait s'étirer avec elle, sinon les
     derniers mots retombent sur la photo nue. */
  background:
    linear-gradient(to right,
      rgba(16,14,12,.34) 0%, rgba(16,14,12,.20) 34%,
      rgba(16,14,12,.06) 62%, rgba(16,14,12,0) 84%),
    linear-gradient(to bottom,
      rgba(16,14,12,.22) 0%, rgba(16,14,12,.06) 34%, rgba(16,14,12,.34) 100%);
}
.hero__in {
  position: relative;
  z-index: 2;                       /* au-dessus du média (0) et du voile (1) */
  min-height: min(72vh, 36rem);
  /* « flex-end » collait le bloc en bas : mesuré sur l'accueil en 1810 px,
     159 px de vide au-dessus du texte contre 48 en dessous. On centre, puis
     on rend au bas un léger surplus de padding — un titre posé exactement au
     milieu paraît tomber, l'œil attend le centre OPTIQUE, un peu plus haut. */
  display: flex; flex-direction: column; justify-content: center;
  padding-block: var(--sp-7) var(--sp-8);
  color: #fff;
}
.hero__sur { color: #f0dfb8; }
.hero__sur::before { background: #c8a45e; }
/* Ombre portée en deux temps : une ombre serrée qui détache la lettre de ce
   qui est juste derrière, et une ombre large qui assombrit son halo. */
/* Largeur : le titre plafonnait à 580 px dans un conteneur de 1200 — moins de
   la moitié de la place. On desserre jusqu'à environ 70 % de la colonne, ce
   qui reste sous la limite de lisibilité et laisse la photo respirer à
   droite. Le voile horizontal a été étiré d'autant, sans quoi les derniers
   mots sortiraient de la zone assombrie. */
.hero h1 {
  color: #fff; max-width: 24ch;
  /* Trois ombres, du plus serre au plus large. C'est ce qui permet au voile
     de rester leger : l'ombre n'assombrit que le pourtour immediat des
     lettres, alors que le voile eteint toute la photo. Mesure a l'appui,
     renforcer l'ombre a fait remonter le fond sous l'encre de 3,5 a 5,4:1
     sans changer d'un point la luminosite de la bande. */
  text-shadow: 0 1px 2px rgba(0,0,0,.85), 0 2px 8px rgba(0,0,0,.78),
               0 4px 22px rgba(0,0,0,.68), 0 8px 46px rgba(0,0,0,.5);
}
.hero__texte {
  margin-top: var(--sp-4); font-size: var(--t-m);
  max-width: 58ch; color: #f7f4ee;
  text-shadow: 0 1px 2px rgba(0,0,0,.88), 0 2px 8px rgba(0,0,0,.75),
               0 4px 24px rgba(0,0,0,.6);
  /* « pretty » (hérité des paragraphes) ne soigne que la DERNIÈRE ligne.
     Sur une accroche de deux lignes, ça laisse 570 px puis 210 px. « balance »
     les égalise, ce qui est le bon compromis sur un texte court — et les
     navigateurs l'ignorent d'eux-mêmes au-delà de quelques lignes. */
  text-wrap: balance;
}
.hero__sur { text-shadow: 0 1px 3px rgba(0,0,0,.9), 0 0 10px rgba(0,0,0,.75), 0 0 26px rgba(0,0,0,.55); }
.hero .btns { margin-top: var(--sp-6); }

/* Prix dans le bandeau. Le montant est en police d'affichage et en chiffres
   de hauteur capitale, le libellé en petit — on lit le nombre d'abord.
   Chaque groupe porte son propre fond translucide plutôt qu'un bandeau plein :
   la photo reste visible entre les pastilles. */
.hero__prix {
  margin-top: var(--sp-5);
  display: flex; flex-wrap: wrap; align-items: center; gap: .5rem .7rem;
}
.hero__prix-i {
  display: inline-flex; align-items: baseline; gap: .4rem;
  padding: .34rem .78rem;
  background: rgba(16,14,12,.42);
  border: 1px solid rgba(255,255,255,.2);
  border-radius: 999px;
  backdrop-filter: blur(3px);
}
.hero__prix-i strong {
  font-family: var(--f-titre); font-variant-numeric: lining-nums;
  font-size: 1.55rem; font-weight: 600; line-height: 1; color: #fff;
}
.hero__prix-i > span { font-size: var(--t-s); color: rgba(255,255,255,.9); }
.hero__prix-tout {
  font-size: var(--t-xs); font-weight: 600; letter-spacing: .1em;
  text-transform: uppercase; color: var(--or-clair);
}

/* Bandeau court des pages intérieures */
.hero--page .hero__in { min-height: min(44vh, 23rem); }
.hero--page h1 { max-width: 30ch; }

/* Bandeau sans photo */
.hero--sobre {
  background: var(--pierre);
  border-bottom: 1px solid var(--bord);
  padding-block: var(--sp-8) var(--sp-7);
}
.hero--sobre h1 { color: var(--encre); text-shadow: none; }
.hero--sobre .hero__texte { color: var(--encre-2); text-shadow: none; }

/* Fil d'Ariane */
.fil { font-size: var(--t-xs); color: var(--encre-3); padding-top: var(--sp-5); }
.fil ol { display: flex; flex-wrap: wrap; gap: .4rem; align-items: center; }
.fil a { text-decoration: none; color: inherit; }
.fil a:hover { color: var(--encre); text-decoration: underline; }
.fil li + li::before { content: '›'; margin-right: .4rem; color: var(--bord-fort); }
.hero .fil { color: rgba(255,255,255,.78); }
.hero .fil a:hover { color: #fff; }
.hero .fil li + li::before { color: rgba(255,255,255,.5); }

/* ══════════════════════════════════════════ Bande de chiffres ═════════ */
.chiffres {
  display: grid; grid-template-columns: repeat(2, 1fr);
  border-top: 1px solid var(--bord);
  background: var(--craie);
}
@media (min-width: 760px) { .chiffres { grid-template-columns: repeat(4, 1fr); } }
.chiffre {
  display: flex; align-items: center; gap: .8rem;
  padding: var(--sp-5) var(--sp-4);
  border-right: 1px solid var(--bord); border-bottom: 1px solid var(--bord);
  font-size: var(--t-s); font-weight: 500;
}
.chiffre:last-child { border-right: 0; }
@media (min-width: 760px) { .chiffre { border-bottom: 0; justify-content: center; } }
@media (max-width: 759px) { .chiffre:nth-child(2n) { border-right: 0; } }
.chiffre .ic { color: var(--or); }

/* ══════════════════════════════════════════════════════ Grilles ═══════ */
.grille { display: grid; gap: var(--sp-5); }
.grille--2 { grid-template-columns: repeat(auto-fit, minmax(min(100%, 22rem), 1fr)); }
.grille--3 { grid-template-columns: repeat(auto-fit, minmax(min(100%, 17rem), 1fr)); }
.grille--4 { grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr)); }
/* Les atouts portent deux à trois lignes de texte : à quatre colonnes les
   lignes tombent à ~22 caractères et le texte devient haché. Trois maximum. */
.grille--atouts { grid-template-columns: repeat(auto-fit, minmax(min(100%, 20rem), 1fr)); }
@media (min-width: 1100px) { .grille--atouts { grid-template-columns: repeat(3, 1fr); } }
/* minmax(0,1fr) : sans lui une cellule au contenu long élargit toute la grille
   et fait déborder la page — y compris en français. */
.grille > * { min-width: 0; }

/* Alternance texte / image */
.duo {
  display: grid; gap: var(--sp-6); align-items: center;
  grid-template-columns: 1fr;
}
@media (min-width: 860px) {
  .duo { grid-template-columns: 1fr 1fr; gap: clamp(2rem, 5vw, 5rem); }
  .duo--inverse .duo__media { order: -1; }
}
.duo__media img { border-radius: var(--r-l); box-shadow: var(--ombre-m); width: 100%; }
.duo__texte h2 { margin-bottom: var(--sp-4); }
.duo__texte p { color: var(--encre-2); }
.duo__texte p + p { margin-top: var(--sp-4); }
.duo + .duo { margin-top: clamp(2.25rem, 3.6vw, 3.5rem); }

/* ══════════════════════════════════════════════════════ Cartes ═══════ */
.carte {
  background: var(--blanc);
  border: 1px solid var(--bord);
  border-radius: var(--r-l);
  overflow: hidden;
  display: flex; flex-direction: column;
  transition: border-color var(--tr), box-shadow var(--tr), transform var(--tr);
}
.carte--lien:hover { border-color: var(--bord-fort); box-shadow: var(--ombre-m); transform: translateY(-2px); }
.carte__media img { width: 100%; object-fit: cover; }
.carte__corps { padding: var(--sp-5); display: flex; flex-direction: column; gap: var(--sp-2); flex: 1; }
.carte__titre { font-size: var(--t-m); }
.carte__titre a { text-decoration: none; }
.carte__titre a::after { content: ''; position: absolute; inset: 0; }
.carte__texte { font-size: var(--t-s); color: var(--encre-2); }
.carte__pied { margin-top: auto; padding-top: var(--sp-3); }
.carte { position: relative; }

/* Atouts */
.atout {
  display: flex; gap: var(--sp-4);
  padding: var(--sp-5);
  background: var(--blanc); border: 1px solid var(--bord); border-radius: var(--r-l);
}
.atout__ic {
  flex: none; width: 3rem; height: 3rem; border-radius: 50%;
  display: grid; place-items: center;
  background: var(--or-pale); color: var(--or);
}
.atout h3 { font-size: var(--t-m); margin-bottom: .3rem; }
.atout p { font-size: var(--t-s); color: var(--encre-2); }

/* ══════════════════════════════════════════════════════ Tarifs ═══════ */
.tarif {
  background: var(--blanc); border: 1px solid var(--bord);
  border-radius: var(--r-xl); overflow: hidden; box-shadow: var(--ombre-m);
}
.tarif__tete {
  padding: var(--sp-6) var(--sp-6) var(--sp-5);
  background: linear-gradient(160deg, var(--vigne) 0%, #2f402b 100%);
  color: #f4f0e6; text-align: center;
}
.tarif__tete h2, .tarif__tete h3 { color: #fff; }
.tarif__periode {
  display: inline-block; margin-top: var(--sp-3);
  padding: .3rem .85rem; border-radius: 100px;
  background: rgba(255,255,255,.14); border: 1px solid rgba(255,255,255,.24);
  font-size: var(--t-xs); font-weight: 600; letter-spacing: .06em; text-transform: uppercase;
}
.tarif__lignes { padding: var(--sp-5) var(--sp-6); }
.tarif__ligne {
  display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-4);
  padding-block: var(--sp-4);
  border-bottom: 1px dashed var(--bord);
}
.tarif__ligne:last-child { border-bottom: 0; }
.tarif__label { font-weight: 500; }
.tarif__prix { font-family: var(--f-titre); font-size: var(--t-xl); font-weight: 600; white-space: nowrap; }
.tarif__prix small { font-family: var(--f-texte); font-size: var(--t-s); font-weight: 500; color: var(--encre-3); }
.tarif__pied { padding: var(--sp-5) var(--sp-6) var(--sp-6); border-top: 1px solid var(--bord); background: var(--craie-2); }

.inclus { display: grid; gap: var(--sp-2); }
.inclus li { display: flex; gap: .6rem; align-items: flex-start; font-size: var(--t-s); }
.inclus .ic { color: var(--vigne-2); margin-top: .12em; }

/* Prix mis en avant sur l'accueil */
.prix-vedette { display: flex; align-items: baseline; gap: .5rem; flex-wrap: wrap; }
.prix-vedette__eyebrow { font-size: var(--t-s); color: var(--encre-3); }
.prix-vedette__val { font-family: var(--f-titre); font-size: var(--t-3xl); font-weight: 600; line-height: 1; }
.prix-vedette__unite { font-size: var(--t-m); color: var(--encre-2); }

/* Petit-déjeuner */
.pdj { display: grid; gap: var(--sp-4); }
@media (min-width: 720px) { .pdj { grid-template-columns: 1fr 1fr; } }
.pdj__carte {
  padding: var(--sp-5); border: 1px solid var(--bord); border-radius: var(--r-l);
  background: var(--blanc);
}
.pdj__prix { font-family: var(--f-titre); font-size: var(--t-xl); font-weight: 600; color: var(--or); }
.pdj__prix small { font-family: var(--f-texte); font-size: var(--t-xs); color: var(--encre-3); font-weight: 500; }

/* ══════════════════════════════════════════════════ Équipements ══════ */
.equip-groupe + .equip-groupe { margin-top: var(--sp-6); }
.equip-groupe__tete { display: flex; align-items: center; gap: .7rem; margin-bottom: var(--sp-4); }
.equip-groupe__tete .ic { color: var(--or); }
.equip-groupe__tete h3 { font-size: var(--t-m); }
.equip-liste { display: grid; grid-template-columns: repeat(auto-fill, minmax(min(100%, 15rem), 1fr)); gap: var(--sp-2) var(--sp-5); }
.equip-liste li { display: flex; gap: .55rem; align-items: center; font-size: var(--t-s); color: var(--encre-2); }
.equip-liste .ic { color: var(--vigne-2); }

/* Règles de la maison */
.regle {
  display: flex; gap: var(--sp-4); padding: var(--sp-4) 0;
  border-bottom: 1px solid var(--bord);
}
.regle:last-child { border-bottom: 0; }
.regle__ic { flex: none; color: var(--or); }
.regle strong { display: block; font-weight: 600; }
.regle span { font-size: var(--t-s); color: var(--encre-2); }

/* ══════════════════════════════════════════════════════ Galerie ══════ */
.filtres { display: flex; flex-wrap: wrap; gap: .5rem; margin-bottom: var(--sp-6); }
.filtre {
  padding: .5rem 1rem; border-radius: 100px;
  border: 1.5px solid var(--bord); background: var(--blanc);
  font-size: var(--t-s); font-weight: 500; color: var(--encre-2);
  transition: all var(--tr);
}
.filtre:hover { border-color: var(--bord-fort); color: var(--encre); }
.filtre[aria-pressed='true'] { background: var(--encre); border-color: var(--encre); color: var(--craie); }

.galerie {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(min(100%, 15rem), 1fr));
  gap: var(--sp-3);
}
@media (min-width: 900px) { .galerie { grid-template-columns: repeat(4, 1fr); } }
.galerie__item { position: relative; border-radius: var(--r-m); overflow: hidden; background: var(--pierre); }
.galerie__item[hidden] { display: none; }
.galerie__btn { display: block; width: 100%; padding: 0; cursor: zoom-in; }
.galerie__btn img { width: 100%; height: 100%; object-fit: cover; aspect-ratio: 4/3; transition: transform 420ms cubic-bezier(.2,.6,.2,1); }
.galerie__btn:hover img { transform: scale(1.045); }
.galerie__legende {
  position: absolute; inset: auto 0 0 0;
  padding: 2.2rem .8rem .7rem;
  background: linear-gradient(to top, rgba(20,18,16,.78), transparent);
  color: #fff; font-size: var(--t-xs); line-height: 1.35;
  opacity: 0; transition: opacity var(--tr);
  pointer-events: none;
}
.galerie__btn:hover .galerie__legende,
.galerie__btn:focus-visible .galerie__legende { opacity: 1; }
/* Une seule grande image en tête de galerie */
@media (min-width: 900px) {
  .galerie__item--large { grid-column: span 2; grid-row: span 2; }
  .galerie__item--large .galerie__btn img { aspect-ratio: 1/1; }
}

/* Visionneuse */
.visio {
  position: fixed; inset: 0; z-index: 300;
  background: rgba(18,16,14,.94);
  display: grid; grid-template-rows: auto 1fr auto;
  padding: var(--sp-4);
}
.visio[hidden] { display: none; }
.visio__barre { display: flex; justify-content: space-between; align-items: center; color: #cfc7bb; font-size: var(--t-s); }
.visio__fig { display: grid; place-items: center; min-height: 0; position: relative; }
.visio__fig img { max-width: 100%; max-height: 100%; width: auto; height: auto; object-fit: contain; border-radius: var(--r-m); }
.visio__legende { text-align: center; color: #ded7cb; font-size: var(--t-s); padding-top: var(--sp-3); min-height: 2.4rem; }
.visio__nav {
  position: absolute; top: 50%; transform: translateY(-50%);
  width: 3rem; height: 3rem; border-radius: 50%;
  display: grid; place-items: center;
  background: rgba(255,255,255,.1); color: #fff;
  transition: background var(--tr);
}
.visio__nav:hover { background: rgba(255,255,255,.22); }
.visio__nav--prec { left: 0; }
.visio__nav--suiv { right: 0; }
.visio__nav--prec .ic { transform: rotate(180deg); }
.visio__fermer { color: #fff; padding: .5rem; border-radius: 50%; }
.visio__fermer:hover { background: rgba(255,255,255,.15); }

/* ══════════════════════════════════════════════════════ Accordéon ════ */
.accordeon { border-top: 1px solid var(--bord); }
.accordeon__item { border-bottom: 1px solid var(--bord); }
.accordeon__btn {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-4);
  width: 100%; text-align: left;
  padding: var(--sp-5) 0;
  font-size: var(--t-m); font-weight: 500; font-family: var(--f-texte);
}
.accordeon__btn:hover { color: var(--or); }
.accordeon__btn .ic { color: var(--or); transition: transform var(--tr); flex: none; }
.accordeon__btn[aria-expanded='true'] .ic { transform: rotate(180deg); }
.accordeon__corps { padding-bottom: var(--sp-5); color: var(--encre-2); max-width: var(--prose); }
.accordeon__corps[hidden] { display: none; }

/* ══════════════════════════════════════════════════ Restaurants ══════ */
.ville-tete {
  display: flex; align-items: baseline; gap: var(--sp-3); flex-wrap: wrap;
  margin-bottom: var(--sp-5); padding-bottom: var(--sp-3);
  border-bottom: 1px solid var(--bord);
}
.ville-tete h2 { font-size: var(--t-xl); }
.ville-tete span { font-size: var(--t-s); color: var(--encre-3); }
.ville + .ville { margin-top: var(--sp-8); }

.table-carte { position: relative; }
.table-carte__media { aspect-ratio: 3/2; background: var(--pierre); }
.table-carte__media img { width: 100%; height: 100%; object-fit: cover; }
.table-carte__media--vide {
  display: grid; place-items: center;
  background: linear-gradient(150deg, var(--pierre) 0%, var(--pierre-2) 100%);
  color: var(--bord-fort);
}
.table-carte__media--vide .ic { width: 2.6rem; height: 2.6rem; }
.etiquette {
  display: inline-flex; align-items: center; gap: .35rem;
  padding: .22rem .6rem; border-radius: 100px;
  background: var(--or-pale); color: var(--or);
  font-size: .7rem; font-weight: 700; letter-spacing: .06em; text-transform: uppercase;
}
.coord { display: grid; gap: .4rem; font-size: var(--t-s); margin-top: var(--sp-3); }
.coord li { display: flex; gap: .55rem; align-items: flex-start; color: var(--encre-2); }
.coord .ic { color: var(--or); margin-top: .1em; }
.coord a { text-decoration: none; }
.coord a:hover { text-decoration: underline; }

/* ══════════════════════════════════════════════════════ Contact ═════ */
/* Le formulaire passe en PREMIER et prend la plus grande part : c'est
   l'action de la page. Les coordonnées l'accompagnent, elles ne le
   précèdent plus. */
.contact-grille { display: grid; gap: var(--sp-7); }
@media (min-width: 940px) {
  .contact-grille { grid-template-columns: 1.45fr 1fr; gap: var(--sp-8); align-items: start; }
  /* La colonne d'appui suit le défilement : le numéro de téléphone et
     l'adresse restent à portée pendant toute la saisie, qui est longue.
     `top` dégage la hauteur de l'en-tête, lui-même collant. */
  .contact-cote { position: sticky; top: calc(5.4rem + var(--sp-5)); }
}

.hote {
  display: flex; gap: var(--sp-4); align-items: center;
  padding-bottom: var(--sp-5); margin-bottom: var(--sp-5);
  border-bottom: 1px solid var(--bord);
}
.hote img { width: 5.5rem; height: 5.5rem; border-radius: 50%; object-fit: cover; flex: none; }
.hote__nom { font-family: var(--f-titre); font-size: var(--t-l); font-weight: 600; }
.hote__role { font-size: var(--t-xs); letter-spacing: .11em; text-transform: uppercase; color: var(--or); font-weight: 600; }

.contact-bloc + .contact-bloc { margin-top: var(--sp-6); }
.contact-liste { display: grid; gap: var(--sp-4); }
.contact-item { display: flex; gap: var(--sp-4); align-items: flex-start; }
.contact-item__ic {
  flex: none; width: 2.6rem; height: 2.6rem; border-radius: 50%;
  display: grid; place-items: center; background: var(--pierre); color: var(--or);
}
.contact-item dt { font-size: var(--t-xs); letter-spacing: .09em; text-transform: uppercase; color: var(--encre-3); font-weight: 600; }
.contact-item dd { margin: .15rem 0 0; font-size: var(--t-m); font-weight: 500; }
.contact-item dd a { text-decoration: none; }
.contact-item dd a:hover { text-decoration: underline; }
.contact-item small { display: block; font-size: var(--t-xs); color: var(--encre-3); font-weight: 400; margin-top: .15rem; }

/* Formulaire */
.form {
  background: var(--blanc); border: 1px solid var(--bord);
  border-radius: var(--r-xl); padding: clamp(1.4rem, 3vw, 2.4rem);
  box-shadow: var(--ombre-s);
}
.champs { display: grid; gap: var(--sp-4); }
.champs--2 { grid-template-columns: 1fr; }
@media (min-width: 560px) { .champs--2 { grid-template-columns: 1fr 1fr; } }
.champ { display: flex; flex-direction: column; gap: .4rem; }
.champ label { font-size: var(--t-s); font-weight: 600; }
.champ label .opt { font-weight: 400; color: var(--encre-3); }
.champ input, .champ textarea, .champ select {
  width: 100%; padding: .78rem .9rem;
  background: var(--craie); border: 1.5px solid var(--bord); border-radius: var(--r-m);
  transition: border-color var(--tr), background var(--tr), box-shadow var(--tr);
  font-size: var(--t-base);
}
.champ input:hover, .champ textarea:hover, .champ select:hover { border-color: var(--bord-fort); }
.champ input:focus, .champ textarea:focus, .champ select:focus {
  outline: none; background-color: var(--blanc);
  border-color: var(--vigne); box-shadow: 0 0 0 3px rgba(60,81,55,.14);
}

/* La flèche native d'un <select> est dessinée par le navigateur : elle ignore
   le padding et se colle au bord droit. On la remplace par le même chevron
   que partout ailleurs sur le site, posé à .9rem du bord — la même respiration
   que le texte à gauche — et on réserve la place à sa droite pour qu'une
   option longue ne passe pas dessous. Le SVG est en ligne : une requête de
   moins, et rien à autoriser dans la CSP.
   ⚠ Cette règle doit rester APRÈS :hover/:focus. Ces états employaient le
   raccourci `background`, qui remet `background-image` à none et effaçait donc
   le chevron dès qu'on touchait le champ ; ils sont passés à
   `background-color`, mais l'ordre reste le filet de sécurité. */
.champ select {
  appearance: none; -webkit-appearance: none;
  padding-right: 2.6rem;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235d5750' stroke-width='1.8' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m5 9 7 7 7-7'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right .9rem center;
  background-size: 1.15rem 1.15rem;
}
.champ textarea { resize: vertical; min-height: 8rem; line-height: 1.6; }
.champ[data-erreur='1'] input, .champ[data-erreur='1'] textarea, .champ[data-erreur='1'] select {
  /* `background-color` et non `background` : le raccourci effacerait le
     chevron du <select> au moment précis où le champ est en erreur. */
  border-color: #a33c2c; background-color: #fdf5f3;
}
.champ__err { font-size: var(--t-xs); color: #a33c2c; font-weight: 500; }
.champ__err:empty { display: none; }

.case { display: flex; gap: .7rem; align-items: flex-start; font-size: var(--t-s); color: var(--encre-2); }
.case input { width: 1.15rem; height: 1.15rem; margin-top: .18rem; flex: none; accent-color: var(--vigne); }

/* Le pot de miel doit rester invisible ET hors du parcours clavier. */
.miel { position: absolute; left: -9999px; width: 1px; height: 1px; overflow: hidden; }

.message {
  display: flex; gap: var(--sp-3); align-items: flex-start;
  padding: var(--sp-4) var(--sp-5); border-radius: var(--r-l);
  font-size: var(--t-s); margin-bottom: var(--sp-5);
}
.message .ic { flex: none; margin-top: .1em; }
.message strong { display: block; font-size: var(--t-base); margin-bottom: .2rem; }
.message--ok  { background: var(--vigne-pale); color: #26361f; border: 1px solid #c8d8c0; }
.message--ko  { background: #fdf2ef; color: #7d2c1e; border: 1px solid #f0cfc6; }

/* ══════════════════════════════════════════════════ Appel à l'action ═ */
.appel {
  position: relative; isolation: isolate; overflow: hidden;
  border-radius: var(--r-xl);
  padding: clamp(2.2rem, 5vw, 4.5rem);
  text-align: center; color: #fff;
}
.appel__media { position: absolute; inset: 0; z-index: 0; }
.appel__media img { width: 100%; height: 100%; object-fit: cover; }
.appel::after {
  content: ''; position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(150deg, rgba(30,40,26,.86), rgba(20,18,16,.78));
}
.appel > :not(.appel__media) { position: relative; z-index: 2; }
.appel h2 { color: #fff; }
.appel p { color: #ece7dd; margin-top: var(--sp-3); max-width: 50ch; margin-inline: auto; }
.appel .btns { margin-top: var(--sp-6); }

/* ══════════════════════════════════════════════════════ Pied ════════ */
.pied { background: var(--nuit); color: #b8b0a4; padding-block: var(--sp-8) var(--sp-6); margin-top: var(--section); }
.pied a { color: #d8d1c6; text-decoration: none; }
.pied a:hover { color: #fff; text-decoration: underline; text-decoration-color: var(--or-clair); }
.pied__grille { display: grid; gap: var(--sp-6); grid-template-columns: repeat(auto-fit, minmax(min(100%, 13rem), 1fr)); }
.pied__marque { max-width: 22rem; }
.pied__marque .marque__nom { color: #fff; font-size: 1.55rem; display: block; }
.pied__logo { height: 3.1rem; width: auto; margin-bottom: var(--sp-4); }
.pied__baseline { margin-top: var(--sp-3); font-size: var(--t-s); line-height: 1.6; }
.pied h3 { font-family: var(--f-texte); font-size: var(--t-xs); letter-spacing: .12em; text-transform: uppercase; color: #8d8578; font-weight: 600; margin-bottom: var(--sp-4); }
.pied__liste { display: grid; gap: .55rem; font-size: var(--t-s); }
.pied__bas {
  margin-top: var(--sp-7); padding-top: var(--sp-5);
  border-top: 1px solid #322e2a;
  display: flex; flex-wrap: wrap; gap: var(--sp-3) var(--sp-5);
  align-items: center; justify-content: space-between;
  font-size: var(--t-xs);
}
.pied__legal { display: flex; flex-wrap: wrap; gap: var(--sp-4); }
.pied__social { display: flex; gap: .6rem; }
.pied__social a {
  width: 2.4rem; height: 2.4rem; border-radius: 50%;
  display: grid; place-items: center;
  border: 1px solid #3a3530; color: #d8d1c6;
  transition: background var(--tr), border-color var(--tr), color var(--tr);
}
.pied__social a:hover { background: var(--or); border-color: var(--or); color: #fff; }

/* ══════════════════════════════════════════════ Barre mobile ════════ */
/* Sur petit écran, appeler et réserver restent toujours à portée de pouce. */
.barre-mobile {
  position: fixed; inset: auto 0 0 0; z-index: 90;
  display: none; gap: .6rem;
  padding: .6rem .8rem calc(.6rem + env(safe-area-inset-bottom));
  background: rgba(252,250,246,.94);
  backdrop-filter: blur(12px); -webkit-backdrop-filter: blur(12px);
  border-top: 1px solid var(--bord);
}
.barre-mobile .btn { flex: 1; }
@media (max-width: 720px) {
  .barre-mobile { display: flex; }
  body { padding-bottom: 4.5rem; }
}

/* ══════════════════════════════════════════════════ Utilitaires ════ */
.sr {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
.centre { text-align: center; }
.intro-centre { color: var(--encre-2); max-width: 52ch; margin-inline: auto; }
.portrait-rond {
  width: 8.5rem; height: 8.5rem; border-radius: 50%;
  object-fit: cover; margin: 0 auto var(--sp-5);
}
.mt-4 { margin-top: var(--sp-4); }
.mt-5 { margin-top: var(--sp-5); }
.mt-6 { margin-top: var(--sp-6); }
.mt-7 { margin-top: var(--sp-7); }
.note { font-size: var(--t-s); color: var(--encre-3); }

/* Le reset passe les <svg> en display:block ; une icône posée dans un
   paragraphe tomberait donc seule sur sa ligne, au-dessus du texte. On
   repasse le paragraphe en rangée dès qu'il en contient une, et on cale
   l'icône sur la PREMIÈRE ligne plutôt qu'au milieu du bloc — sinon un
   texte sur trois lignes la fait flotter au centre. */
.note:has(> .ic) { display: flex; align-items: flex-start; gap: .45rem; }
.note:has(> .ic) > .ic { margin-top: .15em; }
.note.centre:has(> .ic) { justify-content: center; }
.lien-ext { display: inline-flex; align-items: center; gap: .3rem; }
.lien-ext .ic { width: .9em; height: .9em; opacity: .6; }

/* Contenu rédigé (articles, pages légales) */
.texte { max-width: var(--prose); }
.texte h2 { font-size: var(--t-xl); margin: var(--sp-7) 0 var(--sp-4); }
.texte h2:first-child { margin-top: 0; }
.texte h3 { margin: var(--sp-6) 0 var(--sp-3); }
.texte p { margin-bottom: var(--sp-4); color: var(--encre-2); }
.texte strong { color: var(--encre); font-weight: 600; }
.texte ul { display: grid; gap: .5rem; margin-bottom: var(--sp-4); }
.texte ul li { display: flex; gap: .6rem; color: var(--encre-2); }
.texte ul li::before { content: '—'; color: var(--or-clair); flex: none; }
.texte a { font-weight: 500; }

/* Liste d'articles */
.article-carte__date { font-size: var(--t-xs); letter-spacing: .08em; text-transform: uppercase; color: var(--or); font-weight: 600; }


/* ═══════════════════════════════════════════════ Diaporama du bandeau ═══
   Fondu enchaîné : toutes les vues sont superposées, seule l'active est
   opaque. Sans JavaScript la première reste visible — la page ne défile
   simplement pas, elle n'est jamais vide. */
.diapo { position: absolute; inset: 0; z-index: 0; }
/* visibility, en plus de l'opacité : sans elle les cinq vues restent des
   couches de composition vivantes en permanence, ce qui donne un bandeau
   gris sur certains moteurs de rendu alors que le DOM est correct (constaté
   sur Chrome). Le délai sur visibility est calé sur la durée du fondu, pour
   qu'une vue ne disparaîsse qu'une fois devenue transparente. */
.diapo__vue {
  position: absolute; inset: 0;
  opacity: 0; visibility: hidden;
  transition: opacity 1100ms ease-in-out, visibility 0s linear 1100ms;
}
.diapo__vue.est-actif {
  opacity: 1; visibility: visible;
  transition: opacity 1100ms ease-in-out, visibility 0s linear 0s;
}

.diapo__points {
  position: absolute; z-index: 3;
  right: max(1.25rem, calc((100vw - var(--largeur)) / 2 + 1.25rem));
  bottom: 1.5rem;
  display: flex; gap: .45rem;
}
.diapo__point {
  width: 2rem; height: .26rem; border-radius: 100px;
  background: rgba(255,255,255,.42);
  transition: background var(--tr);
}
.diapo__point:hover { background: rgba(255,255,255,.72); }
.diapo__point.est-actif { background: #fff; }

/* ═══════════════════════════════════════════════════════ Carrousel ═════
   Repose sur le défilement natif avec accroche : glissement au doigt,
   molette horizontale et clavier fonctionnent sans une ligne de script.
   Le JavaScript n'ajoute que l'avance automatique et les flèches. */
.carrousel { position: relative; border-radius: var(--r-l); overflow: hidden; background: var(--pierre); }
.carrousel__piste {
  display: flex;
  overflow-x: auto;
  scroll-snap-type: x mandatory;
  scroll-behavior: smooth;
  scrollbar-width: none;
  -ms-overflow-style: none;
}
.carrousel__piste::-webkit-scrollbar { display: none; }
.carrousel__piste:focus-visible { outline: 2.5px solid var(--vigne); outline-offset: -4px; }
.carrousel__vue {
  flex: 0 0 100%; margin: 0; position: relative;
  scroll-snap-align: center; scroll-snap-stop: always;
}
.carrousel__vue img { width: 100%; aspect-ratio: 3/2; object-fit: cover; }
.carrousel__legende {
  position: absolute; inset: auto 0 0 0;
  padding: 2.4rem .95rem .8rem;
  background: linear-gradient(to top, rgba(20,18,16,.76), transparent);
  color: #fff; font-size: var(--t-xs); line-height: 1.35;
}
.carrousel__nav {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 2;
  width: 2.5rem; height: 2.5rem; border-radius: 50%;
  place-items: center;
  background: rgba(252,250,246,.92); color: var(--encre);
  box-shadow: var(--ombre-s);
  transition: background var(--tr);
}
.carrousel__nav:hover { background: #fff; }
.carrousel__nav--prec { left: .6rem; }
.carrousel__nav--suiv { right: .6rem; }
.carrousel__nav--prec .ic { transform: rotate(180deg); }
.carrousel__points {
  position: absolute; z-index: 2; left: 0; right: 0; bottom: .65rem;
  gap: .35rem; justify-content: center;
}
.carrousel__point {
  width: .45rem; height: .45rem; border-radius: 50%;
  background: rgba(255,255,255,.55);
  transition: background var(--tr), width var(--tr);
}
.carrousel__point.est-actif { background: #fff; width: 1.3rem; border-radius: 100px; }
/* Flèches et pastilles n'ont de sens qu'avec le script : c'est lui qui pose
   .est-pilote et les révèle. Sans JavaScript, seul le défilement natif reste. */
.carrousel__nav, .carrousel__points { display: none; }
.carrousel.est-pilote .carrousel__nav   { display: grid; }
.carrousel.est-pilote .carrousel__points { display: flex; }

/* ══════════════════════════════════════════════════ Petits écrans ══════
   Reprise complète : sur téléphone le bandeau doit rester lisible, les
   cibles tactiles atteindre 44 px, et le texte ne jamais dépasser trois
   niveaux de taille. */
@media (max-width: 640px) {

  /* svh plutôt que vh : la barre d'URL des navigateurs mobiles fait varier
     vh et provoque un saut de mise en page au premier défilement. */
  .hero__in {
    min-height: 30rem;
    min-height: min(70svh, 32rem);
    padding-block: var(--sp-7) var(--sp-6);
  }
  .hero h1 { font-size: clamp(2.05rem, 9.5vw, 2.75rem); max-width: 14ch; }
  .hero__texte { font-size: var(--t-base); max-width: 34ch; }
  .hero .btns { margin-top: var(--sp-5); gap: .6rem; }
  .hero .btns .btn { flex: 1 1 100%; }
  .hero--page .hero__in { min-height: 17rem; min-height: min(42svh, 20rem); }

  /* Sur téléphone le texte occupe toute la largeur : un voile directionnel
     n'a plus de sens, il faut assombrir uniformément. */
  .hero::after {
    background:
      linear-gradient(to bottom,
        rgba(16,14,12,.42) 0%, rgba(16,14,12,.32) 30%,
        rgba(16,14,12,.56) 62%, rgba(16,14,12,.66) 100%);
  }

  .diapo__points { right: 1.25rem; bottom: 1.1rem; }
  .diapo__point  { width: 1.4rem; }

  /* Bande de chiffres : deux colonnes, texte court, pas de retour à la ligne
     disgracieux au milieu d'un libellé. */
  .chiffre {
    padding: .85rem .75rem; font-size: var(--t-xs); gap: .55rem;
    justify-content: flex-start;
  }
  .chiffre .ic { width: 1.15rem; height: 1.15rem; }

  /* Titres : une seule échelle de moins, sinon le h2 talonne le h1. */
  h2 { font-size: clamp(1.7rem, 7.5vw, 2.15rem); }
  h3 { font-size: 1.2rem; }

  .duo { gap: var(--sp-5); }
  .duo__media img { border-radius: var(--r-m); }

  .atout { padding: var(--sp-4); gap: var(--sp-3); }
  .atout__ic { width: 2.5rem; height: 2.5rem; }
  .atout__ic .ic { width: 1.4rem; height: 1.4rem; }

  .grille { gap: var(--sp-4); }
  .galerie { grid-template-columns: repeat(2, 1fr); gap: var(--sp-2); }
  .galerie__item--large { grid-column: span 2; }
  .galerie__btn img { aspect-ratio: 4/3; }
  .galerie__legende { opacity: 1; font-size: .7rem; padding: 1.6rem .55rem .5rem; }

  .tarif__lignes, .tarif__pied { padding-inline: var(--sp-4); }
  .tarif__tete { padding: var(--sp-5) var(--sp-4) var(--sp-4); }
  .tarif__ligne { flex-direction: column; align-items: flex-start; gap: .2rem; }

  .appel { padding: var(--sp-6) var(--sp-4); border-radius: var(--r-l); }
  .appel .btns .btn { flex: 1 1 100%; }

  .accordeon__btn { padding-block: var(--sp-4); font-size: var(--t-base); }

  .filtres { gap: .4rem; }
  .filtre { padding: .45rem .8rem; font-size: var(--t-xs); }

  .contact-grille { gap: var(--sp-6); }
  .form { padding: var(--sp-5) var(--sp-4); }
  .hote img { width: 4.25rem; height: 4.25rem; }

  .pied { padding-block: var(--sp-7) var(--sp-6); }
  .pied__grille { gap: var(--sp-5); }
  .pied__bas { flex-direction: column; align-items: flex-start; gap: var(--sp-4); }

  /* La barre d'action collante masque le bas de page : on lui réserve la
     place, en tenant compte de l'encoche. */
  body { padding-bottom: calc(4.6rem + env(safe-area-inset-bottom)); }
}

/* Très petits écrans : on protège la lisibilité avant l'esthétique. */
@media (max-width: 380px) {
  .hero h1 { font-size: 1.9rem; }
  .marque__logo { height: 2.5rem; }
  .btn { padding: .78rem 1.15rem; }
  .chiffre { font-size: .78rem; }
}


/* ══════════════════════════════════════════════ Page « Où manger » ═════
   Liste dense : on choisit une table en comparant nom, style, distance et
   téléphone. La vignette n'est qu'un repère — format carré constant, ce qui
   masque les écarts de qualité entre des photos d'origines très diverses. */
.mot-hote {
  display: flex; gap: var(--sp-5); align-items: flex-start;
  padding: var(--sp-5); border: 1px solid var(--bord); border-radius: var(--r-l);
  background: var(--blanc);
}
.mot-hote img {
  width: 5rem; height: 5rem; border-radius: 50%; object-fit: cover; flex: none;
}
.mot-hote__texte { color: var(--encre-2); max-width: 62ch; margin-top: .25rem; }
@media (max-width: 560px) {
  .mot-hote { flex-direction: column; gap: var(--sp-4); }
  .mot-hote img { width: 4rem; height: 4rem; }
}

/* Barre de filtres qui reste sous la main pendant le défilement. */
.filtres--collant {
  position: sticky; top: 5.4rem; z-index: 40;
  padding-block: var(--sp-3);
  background: linear-gradient(var(--craie) 78%, transparent);
  margin-bottom: var(--sp-5);
}
.filtre__n {
  display: inline-block; margin-left: .35rem;
  font-size: .72em; font-variant-numeric: tabular-nums; opacity: .6;
}
.filtre[aria-pressed='true'] .filtre__n { opacity: .75; }

.ville[hidden] { display: none; }
.ville + .ville { margin-top: var(--sp-7); }

.tables { display: grid; gap: var(--sp-3); }
@media (min-width: 900px) { .tables { grid-template-columns: 1fr 1fr; gap: var(--sp-4); } }

.table-item {
  display: flex; gap: var(--sp-4);
  padding: var(--sp-4);
  background: var(--blanc);
  border: 1px solid var(--bord); border-radius: var(--r-l);
  transition: border-color var(--tr), box-shadow var(--tr);
}
.table-item:hover { border-color: var(--bord-fort); box-shadow: var(--ombre-s); }

.table-item__vignette {
  flex: none; width: 6.5rem; height: 6.5rem;
  border-radius: var(--r-m); overflow: hidden;
  background: var(--pierre);
  display: grid; place-items: center;
}
.table-item__vignette img { width: 100%; height: 100%; object-fit: cover; }
/* Repli : le motif de la maison, réduit et posé sur la pierre — lisible comme
   un choix, pas comme une image manquante. */
.table-item__repli {
  width: 62% !important; height: auto !important; object-fit: contain !important;
  opacity: .5;
}

.table-item__corps { min-width: 0; display: flex; flex-direction: column; gap: .3rem; }
.table-item__tete { display: flex; align-items: center; gap: .5rem; flex-wrap: wrap; }
.table-item__nom { font-size: var(--t-m); line-height: 1.2; }
.table-item__desc { font-size: var(--t-s); color: var(--encre-2); }
.table-item__adr {
  display: flex; gap: .4rem; align-items: flex-start;
  font-size: var(--t-xs); color: var(--encre-3);
}
.table-item__adr .ic { color: var(--or); flex: none; margin-top: .1em; }
.table-item__actions { display: flex; flex-wrap: wrap; gap: .4rem; margin-top: auto; padding-top: var(--sp-3); }
.table-item__actions .btn { padding: .42rem .8rem; font-size: .78rem; }

@media (max-width: 480px) {
  .table-item { gap: var(--sp-3); padding: var(--sp-3); }
  .table-item__vignette { width: 4.75rem; height: 4.75rem; }
  .table-item__actions .btn { padding: .4rem .7rem; font-size: .74rem; }
  .filtres--collant { top: 5rem; }
}

/* ══════════════════════════════════════════════════════ Impression ══ */
@media print {
  .entete, .pied__social, .barre-mobile, .filtres, .visio, .appel, .evitement { display: none !important; }
  body { background: #fff; color: #000; font-size: 11pt; }
  .hero::after, .hero__media { display: none; }
  .hero h1, .hero__texte { color: #000; text-shadow: none; }
  .hero__in { min-height: 0; padding-block: 1rem; }
  a[href^="http"]::after { content: ' (' attr(href) ')'; font-size: 9pt; color: #555; }
  .section { padding-block: 1rem; }
  .differe { content-visibility: visible; }
}

/* ══════════════════════════════════════════════ Bloc de dates ═════════
   Les dates des Trois Glorieuses sont l'information que le visiteur vient
   chercher : elles passent avant tout le reste, en gros et sans décoration. */
.dates-bloc {
  text-align: center;
  padding: var(--sp-6) var(--sp-5);
  background: var(--or-pale);
  border: 1px solid var(--or-clair);
  border-radius: var(--r-l);
}
.dates-bloc .sur { justify-content: center; }
.dates-bloc__val {
  font-family: var(--f-titre); font-weight: 600;
  font-size: var(--t-2xl); line-height: 1.1;
  color: var(--encre); margin-block: var(--sp-2) var(--sp-4);
}
.dates-bloc .note { max-width: 62ch; margin-inline: auto; }

/* ══════════════════════════════════════════════ Calendrier ════════════ */
.calendrier { display: grid; gap: 0; border-top: 1px solid var(--bord); }
.calendrier__item {
  display: grid; gap: var(--sp-2) var(--sp-5);
  grid-template-columns: 1fr;
  padding-block: var(--sp-5);
  border-bottom: 1px solid var(--bord);
}
@media (min-width: 640px) {
  .calendrier__item { grid-template-columns: 12rem 1fr; align-items: baseline; }
}
.calendrier__quand {
  font-size: var(--t-xs); font-weight: 600; letter-spacing: .09em;
  text-transform: uppercase; color: var(--or);
}
.calendrier__item strong { display: block; font-size: var(--t-m); font-weight: 600; }
.calendrier__item p { font-size: var(--t-s); color: var(--encre-2); margin-top: .2rem; }

/* Durée minimale : mise en avant sur la page Tarifs. */
.duree-mini {
  display: flex; gap: .6rem; align-items: flex-start;
  padding: var(--sp-4);
  background: var(--vigne-pale);
  border: 1px solid #c8d8c0; border-radius: var(--r-m);
  font-size: var(--t-s); color: #2c3d25;
}
.duree-mini .ic { color: var(--vigne); flex: none; margin-top: .15em; }
.duree-mini strong { display: block; color: var(--vigne); margin-bottom: .15rem; }

/* ══════════════════════════════════════════ Estimateur de séjour ══════
   La question « combien pour MES dates ? » se répond avant tout le reste :
   le bloc occupe donc le haut de la page, et le résultat s'affiche à côté
   de la saisie, jamais plus bas — pour qu'on voie le total changer. */
.esti {
  display: grid; gap: 0;
  border: 1px solid var(--bord); border-radius: var(--r-xl);
  overflow: hidden; background: var(--blanc); box-shadow: var(--ombre-m);
}
@media (min-width: 820px) {
  .esti { grid-template-columns: 1fr 1fr; }
  /* La hauteur plancher n'a de sens qu'en deux colonnes, où elle équilibre le
     panneau vert avec la saisie. Empilée sur mobile, elle réservait 240 px de
     vert pour une seule phrase d'attente. */
  .esti__resultat { min-height: 15rem; }
}

.esti__saisie { padding: clamp(1.25rem, 3vw, 2.25rem); }
.esti__resultat {
  padding: clamp(1.25rem, 3vw, 2.25rem);
  background: linear-gradient(160deg, var(--vigne) 0%, #2f402b 100%);
  color: #eef2ea;
  display: flex; flex-direction: column; justify-content: center;
}
.esti__vide { color: rgba(255,255,255,.66); font-size: var(--t-s); text-align: center; }
.esti__err  { color: #ffd9d2; font-size: var(--t-s); text-align: center; }

.esti__nuits {
  font-size: var(--t-xs); font-weight: 600; letter-spacing: .11em;
  text-transform: uppercase; color: var(--or-clair);
}
.esti__total {
  font-family: var(--f-titre); font-weight: 600; line-height: 1;
  font-size: clamp(2.5rem, 6vw, 3.75rem); color: #fff;
  margin: .35rem 0 .1rem;
}
.esti__detail { font-size: var(--t-s); color: rgba(255,255,255,.78); }
.esti__lignes {
  margin-top: var(--sp-5); padding-top: var(--sp-4);
  border-top: 1px solid rgba(255,255,255,.18);
  display: grid; gap: .5rem; font-size: var(--t-s);
}
.esti__lignes div { display: flex; justify-content: space-between; gap: var(--sp-4); }
.esti__lignes strong { font-weight: 600; color: #fff; }
.esti .btn { margin-top: var(--sp-5); }
.esti__resultat .btn--or { width: 100%; }

/* ══════════════════════════════════════════════ Étapes numérotées ═════ */
.etapes { counter-reset: e; display: grid; gap: var(--sp-4); }
@media (min-width: 900px) { .etapes { grid-template-columns: repeat(4, 1fr); gap: var(--sp-5); } }
.etape {
  display: flex; gap: var(--sp-4); align-items: flex-start;
  padding: var(--sp-5); background: var(--blanc);
  border: 1px solid var(--bord); border-radius: var(--r-l);
}
@media (min-width: 900px) { .etape { flex-direction: column; gap: var(--sp-3); } }
.etape__n {
  flex: none; width: 2.4rem; height: 2.4rem; border-radius: 50%;
  display: grid; place-items: center;
  background: var(--vigne); color: #f4f0e6;
  font-family: var(--f-titre); font-size: 1.3rem; font-weight: 600;
}
.etape h3 { font-size: var(--t-m); margin-bottom: .3rem; }
.etape p  { font-size: var(--t-s); color: var(--encre-2); }

/* Moyens de paiement, en ligne */
.paiements {
  display: flex; flex-wrap: wrap; gap: .6rem var(--sp-5);
  align-items: center; justify-content: center;
  padding: var(--sp-4); border-top: 1px solid var(--bord);
  border-bottom: 1px solid var(--bord);
}
.paiements__t { font-size: var(--t-xs); letter-spacing: .1em; text-transform: uppercase;
                color: var(--encre-3); font-weight: 600; }
.paiements__m { display: inline-flex; align-items: center; gap: .4rem; font-size: var(--t-s); }
.paiements__m .ic { color: var(--vigne-2); }

/* ══════════════════════════════════════════ Page Contact — refonte ═════ */

/* Trois voies d'entrée, côte à côte. Le formulaire n'est pas imposé :
   quelqu'un qui préfère téléphoner doit trouver le numéro sans défiler. */
.voies { display: grid; gap: var(--sp-4); }
@media (min-width: 760px) { .voies { grid-template-columns: repeat(3, 1fr); } }

.voie {
  display: flex; flex-direction: column; gap: .3rem;
  padding: var(--sp-5);
  background: var(--blanc); border: 1px solid var(--bord);
  border-radius: var(--r-l); text-decoration: none; color: inherit;
  transition: border-color var(--tr), box-shadow var(--tr), transform var(--tr);
}
.voie:hover { border-color: var(--vigne); box-shadow: var(--ombre-m); transform: translateY(-2px); }
.voie__ic { color: var(--or); margin-bottom: .3rem; }
.voie__t  { font-family: var(--f-titre); font-size: 1.32rem; font-weight: 600;
            font-variant-numeric: lining-nums; line-height: 1.15; }
.voie__d  { font-size: var(--t-s); color: var(--encre-2); }
.voie__a  { margin-top: .5rem; font-size: var(--t-xs); font-weight: 600;
            letter-spacing: .08em; text-transform: uppercase; color: var(--vigne); }

/* La voie principale se distingue sans crier : un fond, pas une couleur vive. */
.voie--phare { background: var(--vigne); border-color: var(--vigne); }
.voie--phare .voie__t { color: #fff; }
.voie--phare .voie__d { color: rgba(255,255,255,.82); }
.voie--phare .voie__a { color: var(--or-clair); }
.voie--phare .voie__ic { color: var(--or-clair); }
.voie--phare:hover { border-color: var(--or); }

/* Le formulaire en trois groupes numérotés. Huit champs d'affilée sont un
   mur ; trois étapes courtes se traversent. */
.bloc-champs { border: 0; padding: 0; margin: 0 0 var(--sp-6); }
.bloc-champs:last-of-type { margin-bottom: 0; }
.bloc-champs > legend {
  display: flex; align-items: center; gap: .6rem;
  font-family: var(--f-titre); font-size: 1.24rem; font-weight: 600;
  margin-bottom: var(--sp-4); padding: 0;
}
.bloc-champs__n {
  display: grid; place-items: center; flex: none;
  width: 1.65rem; height: 1.65rem; border-radius: 50%;
  background: var(--vigne); color: #fff;
  font-family: var(--f-texte); font-size: .78rem; font-weight: 700;
}

/* Total vivant, rempli par site.js. Reste masqué tant que les deux dates ne
   sont pas saisies : une case vide serait pire que pas de case.
   ⚠ `display: flex` ci-dessous écrase le `[hidden] { display: none }` du
   navigateur — sans la règle qui suit, le bloc s'affiche VIDE, avec sa
   bordure en pointillés, et ressemble à un défaut. */
.devis[hidden] { display: none; }
.devis {
  margin-top: var(--sp-4); padding: .8rem 1rem;
  background: var(--craie); border: 1px dashed var(--bord-fort);
  border-radius: var(--r-m);
  display: flex; align-items: baseline; justify-content: space-between;
  gap: var(--sp-4); flex-wrap: wrap;
  font-size: var(--t-s); color: var(--encre-2);
}
.devis strong {
  font-family: var(--f-titre); font-variant-numeric: lining-nums;
  font-size: 1.5rem; font-weight: 600; color: var(--vigne);
}

/* Turnstile. Hauteur réservée : le widget arrive en différé et, sans place
   gardée, il pousse le bouton d'envoi vers le bas au moment précis où le
   visiteur va cliquer. */
.turnstile { margin-top: var(--sp-5); min-height: 68px; }

/* Les trois craintes du moment d'envoyer, traitées là où elles se posent. */
.rassure { list-style: none; display: grid; gap: .45rem; }
.rassure li {
  display: flex; align-items: flex-start; gap: .5rem;
  font-size: var(--t-s); color: var(--encre-2);
}
.rassure .ic { color: var(--vigne); flex: none; margin-top: .12em; }

.contact-bloc__t { font-size: var(--t-l); }
.contact-bloc--hote { background: var(--craie); border-radius: var(--r-l); padding: var(--sp-5); }
.contact-item .dd--fin { font-size: var(--t-s); font-weight: 400; }

.section--serree { padding-block: var(--sp-7); }
.section--haut   { padding-top: 0; }
