/* ── fonts.css ── */
/* Polices auto-hebergees - generees depuis Google Fonts le 09/09/2026.
   Pourquoi : le <link> vers fonts.googleapis.com etait une requete bloquante vers
   un tiers en tete de rendu, seul point technique jamais traite de l'audit.

   Deux choix qui divisent le poids :
   - POLICES VARIABLES (wght@300..600 plutot que 300;400;500;600) : Inter passe de
     141 Ko en 3 fichiers a 47 Ko en un seul, pour les memes graisses.
   - Sous-ensembles latin et latin-ext uniquement (le site est en francais).

   Pour regenerer : reprendre l'URL css2 ci-dessous, filtrer latin/latin-ext,
   telecharger les .woff2 et reecrire les src en ../assets/fonts/.
   family=Fraunces:ital,opsz,wght@0,9..144,400..800;1,9..144,400..600
   family=Inter:wght@300..600 family=Bebas+Neue family=Oswald:wght@500..600 */

@font-face {
  font-family: 'Bebas Neue';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/bebasneue-400-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Bebas Neue';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url(../assets/fonts/bebasneue-400-normal-latin.woff2) format('woff2');
  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: 'Fraunces';
  font-style: italic;
  font-weight: 400 600;
  font-display: swap;
  src: url(../assets/fonts/fraunces-400-600-italic-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Fraunces';
  font-style: italic;
  font-weight: 400 600;
  font-display: swap;
  src: url(../assets/fonts/fraunces-400-600-italic-latin.woff2) format('woff2');
  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: 'Fraunces';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url(../assets/fonts/fraunces-400-800-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Fraunces';
  font-style: normal;
  font-weight: 400 800;
  font-display: swap;
  src: url(../assets/fonts/fraunces-400-800-normal-latin.woff2) format('woff2');
  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: 'Inter';
  font-style: normal;
  font-weight: 300 600;
  font-display: swap;
  src: url(../assets/fonts/inter-300-600-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Inter';
  font-style: normal;
  font-weight: 300 600;
  font-display: swap;
  src: url(../assets/fonts/inter-300-600-normal-latin.woff2) format('woff2');
  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: 'Oswald';
  font-style: normal;
  font-weight: 500 600;
  font-display: swap;
  src: url(../assets/fonts/oswald-500-600-normal-latin-ext.woff2) format('woff2');
  unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;
}
@font-face {
  font-family: 'Oswald';
  font-style: normal;
  font-weight: 500 600;
  font-display: swap;
  src: url(../assets/fonts/oswald-500-600-normal-latin.woff2) format('woff2');
  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;
}

/* ── style.css ── */
/* ==========================================================================
   La Coquille de Massiac — feuille de style principale
   Palette : crème / oxblood / doré — Fraunces + Inter + Bebas Neue
   ========================================================================== */

:root{
  --cream:#e6d9bd;
  --cream-2:#f0e4c8;
  --cream-3:#f7efdd;
  --taupe:#bfb8ac;
  --ink:#191714;
  --muted:#54524d;
  --ox:#511c14;         /* oxblood — sections sombres */
  --ox-d:#341009;       /* presque noir chaud — footer */
  --gold:#c79a3e;
  --gold-d:#a87f2c;
  --red:#da2916;
  --line:rgba(25,23,20,.14);
  --maxw:1180px;
  --narrow:820px;
  --r:2px;
  --shadow:0 10px 30px rgba(52,16,9,.10);
  --shadow-lg:0 22px 60px rgba(52,16,9,.16);
}

*{margin:0;padding:0;box-sizing:border-box}
html{scroll-behavior:smooth;scroll-padding-top:90px}
body{
  font-family:'Inter',system-ui,-apple-system,sans-serif;
  color:var(--ink);background:var(--cream-2);
  line-height:1.65;overflow-x:hidden;-webkit-font-smoothing:antialiased;
}
img{display:block;max-width:100%;height:auto}
a{color:inherit;text-decoration:none}
button{font:inherit;cursor:pointer;border:0;background:none;color:inherit}
h1,h2,h3,h4{font-family:'Fraunces',Georgia,serif;line-height:1.08;font-weight:800;letter-spacing:-.015em}
h1{font-size:clamp(2.1rem,5.2vw,4rem)}
h2{font-size:clamp(1.6rem,3.2vw,2.5rem)}
h3{font-size:clamp(1.1rem,1.8vw,1.35rem)}
p{margin-bottom:1rem}
p:last-child{margin-bottom:0}
/* Sans cela les titres collent au paragraphe suivant. Les composants qui définissent
   leur propre marge (.lf-cell-start h2, .products-text h2…) restent prioritaires,
   editorial.css étant chargée après cette feuille. */
h2:not(:last-child){margin-bottom:1.1rem}
h3:not(:last-child){margin-bottom:.65rem}
.eyebrow + h1,.eyebrow + h2,.eyebrow + h3{margin-top:.1rem}
:focus-visible{outline:3px solid var(--gold);outline-offset:3px}

.skip{
  position:absolute;left:-9999px;top:0;z-index:999;
  background:var(--ox);color:var(--cream);padding:.8rem 1.4rem;
}
.skip:focus{left:0}

.wrap{width:min(100% - 2.4rem,var(--maxw));margin-inline:auto}
.wrap-narrow{width:min(100% - 2.4rem,var(--narrow))}
.center{text-align:center}
.h-sm{font-size:clamp(1.35rem,2.4vw,1.9rem)}
.lede{font-size:1.08rem;color:var(--muted);max-width:60ch;margin-inline:auto}
.lede-sm{font-size:.95rem;color:var(--muted)}
.note{font-size:.9rem;color:var(--muted)}
.highlight{
  border-left:3px solid var(--gold);padding:.85rem 0 .85rem 1.1rem;
  background:rgba(199,154,62,.08);
}

.eyebrow{
  font-family:'Bebas Neue',sans-serif;letter-spacing:.22em;font-size:.95rem;
  color:var(--gold);text-transform:uppercase;display:inline-block;margin-bottom:.8rem;
}
.eyebrow.center{display:block}

/* ---------------------------------------------------------------- boutons */
.btn{
  display:inline-block;padding:.9rem 1.8rem;border-radius:var(--r);
  font-weight:600;font-size:.92rem;letter-spacing:.02em;
  transition:background .25s,color .25s,border-color .25s,transform .25s;
  border:1.5px solid transparent;text-align:center;
}
.btn:hover{transform:translateY(-2px)}
.btn-gold{background:var(--gold);color:#fff}
.btn-gold:hover{background:var(--gold-d)}
.btn-dark{background:var(--ox);color:var(--cream-2)}
.btn-dark:hover{background:var(--ox-d)}
.btn-ghost{border-color:rgba(255,255,255,.65);color:#fff}
.btn-ghost:hover{background:rgba(255,255,255,.16)}
.btn-outline{border-color:var(--ox);color:var(--ox)}
.btn-outline:hover{background:var(--ox);color:var(--cream-2)}
.btn-row{display:flex;flex-wrap:wrap;gap:.85rem;margin-top:1.6rem}
.btn-row.center-row{justify-content:center}

/* ---------------------------------------------------------------- header */
#topbar{
  position:fixed;top:0;left:0;right:0;z-index:100;
  display:grid;grid-template-columns:1fr auto 1fr;align-items:center;
  padding:1rem clamp(1.2rem,4vw,3rem);
  transition:background .35s,box-shadow .35s,padding .35s;
}
#topbar.compact{
  background:var(--cream-2);box-shadow:0 6px 24px rgba(52,16,9,.10);
  padding:.4rem clamp(1.2rem,4vw,3rem);
}
.brand{justify-self:center;line-height:0}
.brand-logo{height:62px;width:auto;transition:height .35s}
#topbar.compact .brand-logo{height:44px}
.logo-dark{display:none}
#topbar.compact .logo-cream{display:none}
#topbar.compact .logo-dark{display:block}

.nav-side{display:flex;align-items:center;gap:clamp(.9rem,2vw,1.9rem)}
.nav-left{justify-self:start}
.nav-right{justify-self:end}
.nav-side a{
  color:#fff;font-size:.78rem;font-weight:500;letter-spacing:.12em;text-transform:uppercase;
  position:relative;transition:color .2s;white-space:nowrap;
}
.nav-side a:not(.btn-shop)::after{
  content:"";position:absolute;left:0;bottom:-6px;width:0;height:2px;
  background:var(--gold);transition:width .25s;
}
.nav-side a:not(.btn-shop):hover::after,
.nav-side a[aria-current="page"]::after{width:100%}
#topbar.compact .nav-side a{color:var(--ink)}
.btn-shop{
  border:1.5px solid rgba(255,255,255,.55);color:#fff !important;
  padding:.45rem 1rem;letter-spacing:.12em;transition:.25s;
}
.btn-shop:hover{background:var(--gold);border-color:var(--gold)}
#topbar.compact .btn-shop{border-color:var(--gold);color:var(--gold) !important}
#topbar.compact .btn-shop:hover{color:#fff !important}

.burger{display:none;flex-direction:column;gap:5px;padding:.5rem;justify-self:end}
.burger span{display:block;width:26px;height:2px;background:#fff;transition:.3s}
#topbar.compact .burger span{background:var(--ink)}
.burger[aria-expanded="true"] span:nth-child(1){transform:translateY(7px) rotate(45deg)}
.burger[aria-expanded="true"] span:nth-child(2){opacity:0}
.burger[aria-expanded="true"] span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}

/* Menu plein ecran. Il n'etait qu'une pile de liens centres : meme typo, meme
   taille, aucune hierarchie, et une arrivee instantanee. On garde le parti pris
   centre, qui va bien a la marque, mais on ajoute ce qui manquait — une cascade
   a l'ouverture, la page courante marquee, et un pied qui donne le telephone et
   l'adresse sans avoir a fermer le menu. */
.mobile-menu{
  position:fixed;inset:0;z-index:99;background:var(--ox-d);
  display:flex;flex-direction:column;justify-content:center;align-items:center;
  gap:2.2rem;padding:5.5rem 1.4rem 2.2rem;overflow-y:auto;
}
.mobile-menu[hidden]{display:none}
.mobile-menu::before{
  /* filigrane discret, meme geste que le rideau d'arrivee */
  content:"";position:absolute;inset:auto -12% -18% auto;width:min(70vw,340px);aspect-ratio:1;
  background:url("../assets/spiral.webp") no-repeat center/contain;opacity:.06;pointer-events:none;
}
.mm-nav{display:flex;flex-direction:column;align-items:center;gap:.15rem;width:100%;max-width:340px}
.mobile-menu a{
  color:var(--cream);font-family:'Fraunces',serif;font-size:1.45rem;font-weight:600;
}
.mm-nav a{
  display:block;width:100%;text-align:center;padding:.62rem 0;
  border-bottom:1px solid rgba(240,228,200,.1);
  opacity:0;transform:translateY(12px);
  animation:mmEntree .42s cubic-bezier(.2,.8,.3,1) forwards;
}
.mm-nav a:last-child{border-bottom:0;color:var(--gold)}
.mm-nav a[aria-current="page"]{color:var(--gold)}
.mm-nav a[aria-current="page"]::after{
  content:"";display:block;width:26px;height:2px;background:var(--gold);margin:.45rem auto 0;
}
@keyframes mmEntree{to{opacity:1;transform:none}}
.mm-nav a:nth-child(1){animation-delay:.04s}
.mm-nav a:nth-child(2){animation-delay:.08s}
.mm-nav a:nth-child(3){animation-delay:.12s}
.mm-nav a:nth-child(4){animation-delay:.16s}
.mm-nav a:nth-child(5){animation-delay:.2s}
.mm-nav a:nth-child(6){animation-delay:.24s}
.mm-nav a:nth-child(7){animation-delay:.28s}
.mobile-menu a:hover{color:var(--gold)}

.mm-pied{
  display:flex;flex-direction:column;align-items:center;gap:.9rem;text-align:center;
  opacity:0;animation:mmEntree .42s .34s ease forwards;
}
.mm-tel{
  display:inline-flex;align-items:center;gap:.5rem;
  font-family:'Inter',sans-serif !important;font-size:.98rem !important;
  color:var(--gold) !important;letter-spacing:.08em;
  border:1px solid rgba(199,154,62,.5);padding:.6rem 1.3rem;border-radius:var(--r);
}
.mm-tel svg{width:17px;height:17px}
.mm-tel:hover{background:var(--gold);color:var(--ox-d) !important;border-color:var(--gold)}
.mm-adresse{font-size:.8rem;color:rgba(240,228,200,.55);line-height:1.6}
.mm-adresse span{display:block;color:rgba(240,228,200,.4);margin-top:.15rem}

@media (prefers-reduced-motion:reduce){
  .mm-nav a,.mm-pied{animation:none;opacity:1;transform:none}
}

/* ---------------------------------------------------------------- hero */
.hero{
  position:relative;display:grid;place-items:center;text-align:center;
  min-height:min(88vh,760px);padding:8rem 1.2rem 4rem;color:#fff;overflow:hidden;
}
.hero-page{min-height:min(62vh,560px)}
.hero-short{min-height:min(48vh,440px)}
.hero-page{background-image:var(--hero-img);background-size:cover;background-position:center}
.hero-video{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
/* La vidéo de fond d'un hero. La règle vivait dans accueil.css, donc n'existait
   que sur l'accueil : toutes les autres pages n'avaient qu'une image de fond.
   L'image reste posée en background-image et sert de secours — elle s'affiche
   tant que la vidéo n'est pas chargée, et pour de bon quand le visiteur est en
   économie de données ou a demandé moins d'animations. */
.hero-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0}
.hero-veil{
  position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(52,16,9,.62),rgba(52,16,9,.42) 45%,rgba(52,16,9,.78));
}
.hero-inner{position:relative;max-width:820px}
.hero-inner h1{color:#fff;text-shadow:0 4px 30px rgba(0,0,0,.35)}
.hero-sub{margin-top:1.1rem;font-size:clamp(1rem,1.6vw,1.2rem);color:rgba(255,255,255,.9)}
.hero-scroll{
  position:absolute;bottom:2rem;left:50%;transform:translateX(-50%);
  color:#fff;font-size:1.5rem;opacity:.8;animation:bob 2.2s ease-in-out infinite;
}
@keyframes bob{0%,100%{transform:translate(-50%,0)}50%{transform:translate(-50%,10px)}}

/* ---------------------------------------------------------------- sections */
.section{padding:clamp(3.5rem,7vw,6rem) 0}
.section.alt{background:var(--cream-3)}
.crumb{background:var(--cream-3);border-bottom:1px solid var(--line);padding:.7rem 0;font-size:.82rem}
.crumb ol{list-style:none;display:flex;flex-wrap:wrap;gap:.45rem;color:var(--muted)}
.crumb li+li::before{content:"›";margin-right:.45rem;opacity:.6}
.crumb a:hover{color:var(--gold-d);text-decoration:underline}

.intro-band{padding:clamp(3.5rem,7vw,6rem) 0}
.intro-grid,.quali-grid,.visite-grid,.gamme-split,.camping-grid,.infos-grid{
  display:grid;grid-template-columns:1fr 1fr;gap:clamp(2rem,4vw,4rem);align-items:center;
}
.gamme-split.reverse figure{order:2}
.intro-media img,.quali-grid figure img,.visite-media img,.gamme-split figure img,.infos-media img{
  border-radius:var(--r);box-shadow:var(--shadow-lg);
}
.two-col{display:grid;grid-template-columns:1fr 1fr;gap:clamp(2rem,4vw,3.5rem)}

/* ---------------------------------------------------------------- piliers */
.piliers{background:var(--ox);color:var(--cream-2);padding:clamp(3.5rem,7vw,6rem) 0}
.piliers h2{color:#fff}
.piliers-grid{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));
  gap:1.6rem;margin-top:2.6rem;
}
.piliers-grid article{
  border:1px solid rgba(230,217,189,.22);padding:1.8rem 1.4rem;border-radius:var(--r);
  transition:background .3s,border-color .3s;
}
.piliers-grid article:hover{background:rgba(199,154,62,.12);border-color:var(--gold)}
.piliers-grid h3{color:var(--gold);margin-bottom:.6rem}
.piliers-grid p{font-size:.95rem;color:rgba(240,228,200,.85)}

/* ---------------------------------------------------------------- produits */
.p-grid{
  display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));
  gap:1.6rem;margin-top:2.4rem;
}
.p-card{
  background:#fff;border:1px solid var(--line);border-radius:var(--r);
  overflow:hidden;display:flex;flex-direction:column;
  transition:transform .3s,box-shadow .3s;
}
.p-card:hover{transform:translateY(-5px);box-shadow:var(--shadow-lg)}
.p-media{display:block;background:var(--cream-3);aspect-ratio:1;overflow:hidden}
.p-media img{width:100%;height:100%;object-fit:contain;padding:1.1rem;transition:transform .4s}
.p-card:hover .p-media img{transform:scale(1.05)}
.p-body{padding:1.2rem 1.3rem 1.4rem;display:flex;flex-direction:column;flex:1}
.p-body h3{font-size:1.06rem;margin-bottom:.5rem}
.p-body h3 a:hover{color:var(--gold-d)}
.p-desc{font-size:.88rem;color:var(--muted);flex:1}
.p-foot{
  display:flex;justify-content:space-between;align-items:baseline;gap:.8rem;
  margin-top:1rem;padding-top:.9rem;border-top:1px solid var(--line);
}
.p-price{font-family:'Fraunces',serif;font-weight:800;font-size:1.15rem;color:var(--ox)}
.p-price small{font-size:.68rem;font-weight:400;color:var(--muted);display:block;font-family:'Inter',sans-serif}
.p-link{
  font-size:.82rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;
  color:var(--gold-d);border-bottom:1px solid currentColor;padding-bottom:1px;
}
.p-link:hover{color:var(--ox)}

/* fiche produit */
.pd-grid{display:grid;grid-template-columns:1fr 1fr;gap:clamp(2rem,4vw,4rem);align-items:start}
.product-detail{padding-top:clamp(2.5rem,5vw,4rem)}
.pd-media{background:var(--cream-3);border-radius:var(--r);padding:2rem;box-shadow:var(--shadow)}
.pd-media img{width:100%;object-fit:contain}
.pd-price{font-family:'Fraunces',serif;font-size:2rem;font-weight:800;color:var(--ox);margin:.6rem 0 1.2rem}
.pd-price small{font-size:.8rem;font-weight:400;color:var(--muted);font-family:'Inter',sans-serif}
.pd-desc{font-size:1.03rem}
.pd-formats{margin-top:1rem;font-size:.94rem}
.pd-points{list-style:none;margin:1.4rem 0;display:grid;gap:.55rem}
.pd-points li{position:relative;padding-left:1.6rem;font-size:.93rem;color:var(--muted)}
.pd-points li::before{content:"✓";position:absolute;left:0;color:var(--gold);font-weight:700}

/* ---------------------------------------------------------------- listes */
.check-list{list-style:none;display:grid;gap:.6rem;margin:1.2rem 0}
.check-list li{position:relative;padding-left:1.7rem}
.check-list li::before{
  content:"";position:absolute;left:0;top:.62em;width:8px;height:8px;
  background:var(--gold);border-radius:50%;
}

/* ---------------------------------------------------------------- ancres / filtres */
.anchors{background:var(--ox);position:sticky;top:0;z-index:50;padding:.75rem 0}
.anchors .wrap{display:flex;flex-wrap:wrap;gap:.5rem;justify-content:center}
.anchors a,.filter{
  color:var(--cream-2);font-size:.78rem;letter-spacing:.1em;text-transform:uppercase;
  padding:.42rem .95rem;border:1px solid rgba(230,217,189,.3);border-radius:var(--r);
  transition:.25s;
}
.anchors a:hover,.filter:hover{background:rgba(199,154,62,.25);border-color:var(--gold)}
.filter.is-active{background:var(--gold);border-color:var(--gold);color:#fff}

/* ---------------------------------------------------------------- avis */
.avis{background:var(--ox-d);color:var(--cream-2);padding:clamp(3.5rem,7vw,6rem) 0}
.avis h2{color:#fff}
.avis-grid{
  display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));
  gap:1.6rem;margin-top:2.4rem;
}
.avis-card{
  border:1px solid rgba(230,217,189,.2);padding:1.8rem;border-radius:var(--r);
  background:rgba(230,217,189,.04);
}
.avis-card p{font-size:.95rem;color:rgba(240,228,200,.9);font-style:italic}
.avis-card cite{
  display:block;margin-top:1.1rem;font-style:normal;font-weight:600;
  color:var(--gold);font-size:.92rem;
}
.avis-card cite span{color:rgba(240,228,200,.55);font-weight:400;font-size:.82rem}
.stars{color:var(--gold);letter-spacing:.15em;margin-bottom:.8rem}

.fp-avis{display:grid;gap:1rem}
.fp-card{background:#fff;border-left:3px solid var(--gold);padding:1.2rem 1.4rem;border-radius:var(--r);box-shadow:var(--shadow)}
.fp-card p{font-size:.9rem;color:var(--muted)}
.fp-card cite{display:block;margin-top:.7rem;font-style:normal;font-weight:600;font-size:.88rem}
.fp-card cite span{color:var(--muted);font-weight:400}
.camping-home{background:var(--cream-3);padding:clamp(3.5rem,7vw,6rem) 0}

/* ---------------------------------------------------------------- blog */
.blog-home{padding:clamp(3.5rem,7vw,6rem) 0}
.art-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:1.8rem;margin-top:2.4rem}
.art-card{background:#fff;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;transition:transform .3s,box-shadow .3s}
.art-card:hover{transform:translateY(-5px);box-shadow:var(--shadow-lg)}
.art-media{display:block;aspect-ratio:16/10;overflow:hidden}
.art-media img{width:100%;height:100%;object-fit:cover;transition:transform .5s}
.art-card:hover .art-media img{transform:scale(1.06)}
.art-body{padding:1.4rem}
.art-body h2,.art-body h3{font-size:1.12rem;margin-bottom:.6rem;line-height:1.25}
.art-body h2 a:hover,.art-body h3 a:hover{color:var(--gold-d)}
.art-body p{font-size:.9rem;color:var(--muted);margin-bottom:1rem}

.article{padding:clamp(2.5rem,6vw,4.5rem) 0}
.article .chapeau{
  font-size:1.12rem;color:var(--ox);border-left:3px solid var(--gold);
  padding-left:1.2rem;margin-bottom:2.4rem;
}
.article h2{margin:2.4rem 0 .9rem}
.article p{font-size:1.02rem}
.art-cta{display:flex;flex-wrap:wrap;gap:.85rem;margin-top:2.8rem;padding-top:2rem;border-top:1px solid var(--line)}

/* ---------------------------------------------------------------- galerie */
.gal-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:1.2rem}
.gal-item{border-radius:var(--r);overflow:hidden;box-shadow:var(--shadow);background:#fff}
.gal-item img{width:100%;aspect-ratio:4/3;object-fit:cover;transition:transform .5s}
.gal-item:hover img{transform:scale(1.05)}
.gal-item figcaption{padding:.75rem 1rem;font-size:.84rem;color:var(--muted)}
.mini-gal{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:1rem;margin-top:2.2rem}
.mini-gal img{border-radius:var(--r);aspect-ratio:4/3;object-fit:cover;box-shadow:var(--shadow)}
.gal-video{width:100%;border-radius:var(--r);box-shadow:var(--shadow-lg);margin-top:1.8rem}

/* ---------------------------------------------------------------- FAQ */
.faq{padding:clamp(3.5rem,7vw,6rem) 0;background:var(--cream-3)}
.faq-list{margin-top:2.2rem;display:grid;gap:.7rem}
.faq-item{background:#fff;border:1px solid var(--line);border-radius:var(--r)}
.faq-item summary{
  padding:1.1rem 1.4rem;font-weight:600;cursor:pointer;list-style:none;
  display:flex;justify-content:space-between;align-items:center;gap:1rem;
}
.faq-item summary::-webkit-details-marker{display:none}
.faq-item summary::after{content:"+";font-size:1.4rem;color:var(--gold);line-height:1}
.faq-item[open] summary::after{content:"–"}
.faq-a{padding:0 1.4rem 1.3rem;color:var(--muted);font-size:.96rem}

/* ---------------------------------------------------------------- CTA */
.cta-band{
  background:linear-gradient(135deg,var(--ox),var(--ox-d));color:var(--cream-2);
  padding:clamp(3rem,6vw,4.5rem) 0;
}
.cta-band h2{color:#fff;margin-bottom:.8rem}
.cta-band p{color:rgba(240,228,200,.85);max-width:58ch;margin-inline:auto}

/* ---------------------------------------------------------------- infos */
.infos{padding:clamp(3.5rem,7vw,6rem) 0}
.infos-list{list-style:none;display:grid;gap:1.1rem;margin:1.6rem 0}
.infos-list li{display:grid;gap:.15rem;padding-bottom:1rem;border-bottom:1px solid var(--line)}
.infos-list strong{
  font-family:'Bebas Neue',sans-serif;letter-spacing:.16em;font-size:.82rem;
  color:var(--gold-d);text-transform:uppercase;font-weight:400;
}
.infos-list a:hover{color:var(--gold-d);text-decoration:underline}

/* ---------------------------------------------------------------- maillage */
/* Le bloc etait une pile de pastilles identiques, centrees, qui retombaient en
   escalier : des rangees de largeurs differentes, aucune hierarchie entre les
   villes et les pages de fond, et pas la moindre information. C'est devenu une
   grille reguliere ou chaque ville affiche son temps de route — releve sur la
   page correspondante. */
.maillage{background:var(--cream-3);padding:clamp(3rem,6vw,4.5rem) 0;border-top:1px solid var(--line)}
.maillage-head{text-align:center;max-width:58ch;margin:0 auto clamp(1.8rem,3.5vw,2.6rem)}
.maillage-head h2{font-size:clamp(1.5rem,2.8vw,2.15rem);margin:.35rem 0 .6rem}
.maillage-head p{color:var(--muted);font-size:.94rem}

.maillage-list{
  list-style:none;display:grid;gap:.7rem;
  grid-template-columns:repeat(auto-fit,minmax(210px,1fr));
}
.maillage-list a{
  display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;
  column-gap:.8rem;row-gap:.1rem;align-items:center;height:100%;
  padding:.85rem 1rem;border:1px solid var(--line);border-radius:var(--r);
  background:#fff;transition:border-color .25s,transform .25s,box-shadow .25s;
}
.maillage-list a:hover{
  border-color:var(--gold);transform:translateY(-2px);
  box-shadow:0 10px 24px rgba(28,9,4,.08);
}
.ml-ico{
  grid-row:1 / span 2;width:34px;height:34px;display:grid;place-items:center;
  border-radius:50%;background:rgba(199,154,62,.13);color:var(--gold-d);
}
.ml-ico svg{width:16px;height:16px}
.ml-nom{font-family:'Oswald','Inter',sans-serif;font-weight:600;font-size:1rem;color:var(--ink);line-height:1.2}
.ml-sous{font-size:.76rem;color:var(--muted);letter-spacing:.01em}
.maillage-list a:hover .ml-nom{color:var(--gold-d)}

/* Seconde ligne : pages pro et articles. Volontairement plus discrete — ce sont
   des pages connexes, pas la carte du secteur. */
.maillage-plus-t{
  text-align:center;margin:clamp(2rem,4vw,2.8rem) 0 1rem;
  font-family:'Bebas Neue',sans-serif;letter-spacing:.22em;text-transform:uppercase;
  font-size:.82rem;color:var(--gold-d);
}
.maillage-plus{
  list-style:none;display:flex;flex-wrap:wrap;gap:.5rem .6rem;justify-content:center;
}
.maillage-plus a{
  display:inline-block;padding:.45rem 1rem;border:1px solid var(--line);
  border-radius:var(--r);font-size:.86rem;color:var(--muted);transition:.25s;
}
.maillage-plus a:hover{border-color:var(--gold);color:var(--gold-d)}

/* ---------------------------------------------------------------- contact */
.contact-grid{display:grid;grid-template-columns:1.15fr .85fr;gap:clamp(2rem,4vw,3.5rem);align-items:start}
.c-form{display:grid;gap:1.1rem;margin-top:1.6rem}
.c-form label{display:grid;gap:.35rem;font-size:.86rem;font-weight:500}
.f-row{display:grid;grid-template-columns:1fr 1fr;gap:1.1rem}
.c-form input,.c-form textarea,.c-form select{
  font:inherit;font-size:.95rem;padding:.75rem .9rem;border:1px solid var(--line);
  border-radius:var(--r);background:#fff;transition:border-color .2s;color:var(--ink);
}
.c-form select{
  appearance:none;cursor:pointer;padding-right:2.4rem;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%2354524d' stroke-width='2' stroke-linecap='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E");
  background-repeat:no-repeat;background-position:right .8rem center;background-size:16px;
}
.c-form input:focus,.c-form textarea:focus,.c-form select:focus{border-color:var(--gold);outline:none}
/* 16 px MINIMUM sur écran tactile, et ce n'est pas un choix esthétique.
   Safari sur iPhone ZOOME la page dès qu'on touche un champ dont la police fait
   moins de 16 px. Les champs étaient à .95rem, soit 15,2 px : au premier appui
   dans « Nom », la page grossissait et se mettait à glisser latéralement — d'où
   l'impression de pouvoir partir sur la droite. La page ne débordait pourtant
   d'aucun pixel, c'est le navigateur qui changeait d'échelle.
   Le zoom reste possible à deux doigts, on ne bloque rien. */
@media (max-width: 860px) {
  .c-form input, .c-form textarea, .c-form select { font-size: 16px; }
}
.f-check{grid-template-columns:auto 1fr;align-items:start;gap:.6rem !important;font-weight:400;color:var(--muted)}
.f-check input{width:1.05rem;height:1.05rem;margin-top:.2rem}
.hp{position:absolute;left:-9999px}
.c-form button{justify-self:start}
.contact-aside{background:var(--cream-3);padding:1.8rem;border-radius:var(--r)}
.c-map{width:100%;height:280px;border:1px solid var(--line);border-radius:var(--r);margin-bottom:1.2rem}

/* ---------------------------------------------------------------- boutique */
.shop-ways{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:1.4rem}
.shop-ways article{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:1.7rem}
.shop-ways h2{font-size:1.2rem;margin-bottom:.6rem}
.shop-ways p{font-size:.92rem;color:var(--muted);margin-bottom:1rem}

/* ---------------------------------------------------------------- légal / merci */
.legal{padding-top:clamp(7rem,12vw,9rem)}
.legal h1{margin-bottom:2rem}
.legal h2{font-size:1.25rem;margin:2.2rem 0 .7rem}
.legal p{font-size:.96rem;color:var(--muted)}
.legal a{color:var(--gold-d);text-decoration:underline}
.merci{padding-top:clamp(8rem,14vw,11rem)}
.merci a{color:var(--gold-d)}

.gamme-head{max-width:64ch;margin-bottom:.5rem}

/* ---------------------------------------------------------------- footer */
.site-footer{background:var(--ox-d);color:rgba(240,228,200,.8);padding-top:clamp(3rem,6vw,4.5rem)}
.footer-grid{display:grid;grid-template-columns:1.6fr 1fr 1fr 1fr;gap:2.4rem;padding-bottom:3rem}
.f-brand img{height:64px;width:auto;margin-bottom:1.1rem}
.f-brand p{font-size:.9rem;max-width:38ch}
.f-ue{height:auto !important;max-width:280px;margin-top:1.4rem;background:#fff;padding:.5rem;border-radius:var(--r)}
.site-footer h3{
  font-family:'Bebas Neue',sans-serif;font-weight:400;letter-spacing:.18em;
  font-size:.95rem;color:var(--gold);text-transform:uppercase;margin-bottom:1rem;
}
.site-footer ul{list-style:none;display:grid;gap:.55rem;font-size:.88rem}
.site-footer a:hover{color:var(--gold)}
.f-contact li{line-height:1.5}
.footer-bar{border-top:1px solid rgba(230,217,189,.15);padding:1.2rem 0}
.footer-bar .wrap{display:flex;flex-wrap:wrap;justify-content:space-between;gap:.6rem;font-size:.82rem}
.footer-bar a{color:var(--gold)}
.footer-bar a:hover{text-decoration:underline}

/* ---------------------------------------------------------------- reveal */
.reveal{opacity:0;transform:translateY(24px);transition:opacity .7s ease,transform .7s ease}
.reveal.in{opacity:1;transform:none}

/* ---------------------------------------------------------------- responsive */
@media (max-width:980px){
  .footer-grid{grid-template-columns:1fr 1fr}
  .contact-grid{grid-template-columns:1fr}
  .pd-grid{grid-template-columns:1fr}
}
/* En-tete : 8 liens + bouton Boutique + panier, de part et d autre d un logo centre.
   Entre 1100 et 1450 px ca ne tient plus — les liens venaient toucher le logo (ecart
   mesure a 0 px a 1300). On resserre l espacement et le corps de texte dans cette
   plage plutot que de basculer tout le monde sur le menu burger. */
@media (min-width:1101px) and (max-width:1450px){
  .nav-side{gap:.85rem}
  .nav-side a{font-size:.72rem;letter-spacing:.07em}
  .btn-shop{padding:.5rem .9rem}
  .panier-ouvrir{width:36px;height:36px}
  #topbar{padding-left:1.2rem;padding-right:1.2rem}
}
/* Sous 1100 px, meme resserre, l en-tete complet ne tient pas : place au burger.
   (Le seuil etait a 860 px, ce qui laissait une zone de 240 px d en-tete casse.) */
@media (max-width:1100px){
  /* Le menu passe au burger, MAIS le panier doit rester atteignable : c est le seul
     acces au recapitulatif de commande. On garde donc .nav-right en flex et on n y
     masque que les liens. Sans ca, impossible d ouvrir son panier sur telephone. */
  .nav-left{display:none}
  .nav-right{display:flex;justify-self:end;gap:.6rem}
  .nav-right > *:not(.panier-ouvrir){display:none}
  .burger{display:flex}
  #topbar{grid-template-columns:1fr auto auto;column-gap:.6rem}
  .brand{justify-self:start}
  .panier-ouvrir{border-color:rgba(255,255,255,.4)}
  .intro-grid,.quali-grid,.visite-grid,.gamme-split,.camping-grid,.infos-grid,.two-col{
    grid-template-columns:1fr;
  }
  .gamme-split.reverse figure{order:0}
  .hero{min-height:min(80vh,640px);padding-top:6.5rem}
  .anchors{position:static}
}
@media (max-width:560px){
  .footer-grid{grid-template-columns:1fr}
  .f-row{grid-template-columns:1fr}
  .p-grid{grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:1rem}
  .p-body{padding:.9rem 1rem 1.1rem}
  .p-body h3{font-size:.95rem}
  .btn{padding:.8rem 1.4rem;font-size:.88rem}
  .btn-row{gap:.6rem}
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:.01ms !important;transition-duration:.01ms !important}
  html{scroll-behavior:auto}
  .reveal{opacity:1;transform:none}
}

/* Contenu réservé aux lecteurs d'écran et aux robots : présent dans le DOM et
   restitué à la synthèse vocale, mais retiré du rendu visuel. Ne pas remplacer par
   display:none ni visibility:hidden — les deux le rendraient inaccessible. */
.sr-only{
  position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0 0 0 0);clip-path:inset(50%);white-space:nowrap;border:0;
}

/* ------------------------------------------------- maillage sur petit écran */
/* Une colonne : deux cartes côte à côte sur 375 px couperaient les noms de
   ville. La grille auto-fit le ferait d'elle-même, on force pour être sûr. */
@media (max-width: 700px) {
  .maillage-list { grid-template-columns: 1fr; gap: .55rem; }
  .maillage-list a { padding: .8rem .9rem; }
  .maillage-head { text-align: left; }
  .maillage-plus { flex-direction: column; align-items: stretch; gap: 0; border-top: 1px solid var(--line); }
  .maillage-plus li { border-bottom: 1px solid var(--line); }
  .maillage-plus a {
    display: flex; align-items: center; justify-content: space-between; gap: .8rem;
    padding: .8rem .2rem; border: 0; border-radius: 0;
  }
  .maillage-plus a::after { content: "›"; color: var(--gold); font-size: 1.15rem; line-height: 1; }
  .maillage-plus-t { text-align: left; }
}

/* ── editorial.css ── */
/* ==========================================================================
   La Coquille de Massiac — design éditorial
   Reconstruit d'après la structure de l'ancienne page « la ferme »
   (l'ancien style.css ayant été perdu). Sert de gabarit à la page ferme,
   aux 7 pages locales et à la page produits.
   ========================================================================== */

/* ---------------------------------------------------------------- HERO FERME */
.lf-hero{
  position:relative;min-height:min(94vh,820px);display:grid;align-items:end;
  padding:clamp(6rem,12vw,9rem) clamp(1.2rem,5vw,4rem) clamp(3rem,6vw,5rem);
  overflow:hidden;color:#fff;
}
.lf-hero-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0}
.lf-hero-veil{
  position:absolute;inset:0;z-index:1;
  background:linear-gradient(180deg,rgba(52,16,9,.55) 0%,rgba(52,16,9,.30) 40%,rgba(28,9,4,.88) 100%);
}
.lf-hero-inner{
  position:relative;z-index:2;width:min(100%,var(--maxw));margin-inline:auto;
  display:grid;grid-template-columns:1.35fr .65fr;gap:clamp(2rem,5vw,4.5rem);align-items:end;
}
.lf-hero-head h1{
  font-size:clamp(2.6rem,7.5vw,5.6rem);color:#fff;letter-spacing:-.02em;
  text-shadow:0 6px 40px rgba(0,0,0,.4);
}
.lf-hero-rule{display:block;width:74px;height:3px;background:var(--gold);margin:1.5rem 0 1.3rem}
.lf-hero-head p{max-width:46ch;color:rgba(255,255,255,.88);font-size:clamp(.98rem,1.4vw,1.1rem)}

.lf-card{
  background:rgba(20,9,5,.62);backdrop-filter:blur(9px);
  border:1px solid rgba(230,217,189,.22);padding:1.8rem 1.7rem;border-radius:var(--r);
}
.lf-card h2{font-size:1.15rem;color:var(--gold);margin-bottom:1.1rem}
.lf-card dl{display:grid;gap:.9rem;margin-bottom:1.5rem}
.lf-card dt{
  font-family:'Bebas Neue',sans-serif;letter-spacing:.18em;text-transform:uppercase;
  font-size:.76rem;color:rgba(255,255,255,.55);
}
.lf-card dd{font-size:.94rem;color:#fff;line-height:1.45}
.lf-card .btn{width:100%;background:var(--gold);color:#fff;border-color:var(--gold)}
.lf-card .btn:hover{background:var(--gold-d);border-color:var(--gold-d)}

/* ---------------------------------------------------------------- WAYPOINTS (accès) */
/* La bande deborde sur telephone : quatre etapes de trajet ne tiennent pas dans
   375 px. Elle affichait donc une barre de defilement grise en travers du
   bandeau sombre — laide, et rien n'indiquait qu'il y avait quelque chose a
   voir. La barre est masquee, un degrade signale la suite, et main.js fait
   defiler la bande une fois toute seule quand elle entre a l'ecran. */
.lf-way{background:var(--ox-d);color:var(--cream);padding:1.5rem clamp(1.2rem,5vw,4rem);
  overflow-x:auto;overscroll-behavior-x:contain;scrollbar-width:none;-ms-overflow-style:none;scroll-behavior:smooth}
.lf-way::-webkit-scrollbar{display:none}
.lf-way{
  -webkit-mask-image:linear-gradient(90deg,#000 0,#000 86%,rgba(0,0,0,.15) 100%);
  mask-image:linear-gradient(90deg,#000 0,#000 86%,rgba(0,0,0,.15) 100%);
  transition:mask-image .3s ease,-webkit-mask-image .3s ease;
}
/* arrive au bout : plus rien a annoncer, le degrade disparait */
.lf-way.au-bout{-webkit-mask-image:none;mask-image:none}
.lf-way-inner{
  width:min(100%,var(--maxw));margin-inline:auto;
  display:flex;align-items:center;gap:clamp(.6rem,1.6vw,1.4rem);min-width:max-content;
}
.lf-stop{display:flex;flex-direction:column;gap:.15rem;position:relative;padding-left:1.1rem;white-space:nowrap}
.lf-stop-dot{
  position:absolute;left:0;top:.42em;width:8px;height:8px;border-radius:50%;
  background:var(--gold);box-shadow:0 0 0 4px rgba(199,154,62,.18);
}
.lf-stop b{font-family:'Oswald','Inter',sans-serif;font-weight:600;font-size:.94rem;letter-spacing:.02em}
.lf-stop span{font-size:.74rem;color:rgba(230,217,189,.6);letter-spacing:.05em}
.lf-way-line{flex:1;min-width:28px;height:1px;background:linear-gradient(90deg,rgba(199,154,62,.5),rgba(199,154,62,.15))}

/* ---------------------------------------------------------------- COLLAGE (lieu / carte / visite) */
.lf-collage{
  position:relative;background:var(--cream-2);
  padding:0 clamp(1.2rem,5vw,4rem) clamp(3rem,6vw,5rem);
  display:grid;grid-template-columns:1.02fr .98fr;column-gap:clamp(2rem,5vw,4.5rem);
}
/* La bande sombre est un ITEM de grille placé dans la 1re rangée : elle épouse donc
   exactement la hauteur du bloc « Le lieu », quel que soit le texte. Les marges
   négatives la font déborder jusqu'aux bords de l'écran (full-bleed).
   Ne pas la passer en position:absolute — la règle `.lf-collage > *{position:relative}`
   la remettrait dans le flux et le texte blanc se retrouverait sur fond crème. */
.lf-darkband{
  grid-column:1 / -1;grid-row:1;z-index:0;background:var(--ox-d);
  margin-inline:calc(-1 * clamp(1.2rem,5vw,4rem));
}
.lf-collage > *{position:relative}
.lf-cell-start{
  grid-column:1;grid-row:1;z-index:2;color:var(--cream-2);
  padding:clamp(3rem,6vw,4.6rem) 0 clamp(2.4rem,4vw,3.4rem);align-self:start;
}
.lf-cell-start h2{color:#fff;font-size:clamp(2.2rem,5vw,3.6rem);margin:.4rem 0 1rem}
.lf-cell-start p{color:rgba(240,228,200,.82);max-width:44ch}
.lf-pt{
  font-family:'Bebas Neue',sans-serif;letter-spacing:.22em;text-transform:uppercase;
  font-size:.9rem;color:var(--gold);
}
.lf-pt.dark{color:var(--gold-d)}

.lf-photos{
  grid-column:2;grid-row:1 / span 2;z-index:3;
  display:flex;gap:clamp(.8rem,1.6vw,1.4rem);align-items:flex-start;
  padding-top:clamp(3rem,6vw,4.6rem);
}
.lf-photo{flex:1;min-width:0}
.lf-photo img{
  width:100%;aspect-ratio:3/4.4;object-fit:cover;border-radius:var(--r);
  box-shadow:0 26px 60px rgba(28,9,4,.38);
}
.lf-photo figcaption{padding-top:.8rem;display:grid;gap:.1rem}
.lf-photo figcaption b{font-size:.9rem;color:var(--ink)}
.lf-photo figcaption span{font-size:.75rem;color:var(--muted);letter-spacing:.05em}
.lf-photo-peek{flex:.72;padding-top:clamp(2.5rem,6vw,5rem)}
.lf-photo-peek img{aspect-ratio:3/4}

/* Colonne 2, rangee 3 : elle etait vide sur les neuf pages qui utilisent ce
   bloc. Le contenu prolonge la carte « Nous rendre visite » d'a cote plutot que
   de la decorer — ce qu'on voit vraiment en venant. */
.lf-cell-plus{
  grid-column:2;grid-row:3;z-index:2;align-self:center;
  padding:clamp(1.5rem,3vw,2.5rem) 0;
}
.lf-cell-plus h3{font-size:clamp(1.5rem,2.6vw,2rem);margin:.35rem 0 1.4rem;color:var(--ox)}
.lf-plus-liste{list-style:none;display:grid;gap:0}
.lf-plus-liste li{
  display:grid;grid-template-columns:auto 1fr;grid-template-rows:auto auto;
  column-gap:1rem;row-gap:.2rem;align-items:start;
  padding:1rem 0;border-top:1px solid var(--line);
}
.lf-plus-liste li:last-child{border-bottom:1px solid var(--line)}
.lf-plus-ico{
  grid-row:1 / span 2;width:40px;height:40px;display:grid;place-items:center;
  border-radius:50%;border:1px solid rgba(199,154,62,.4);color:var(--gold-d);
}
.lf-plus-ico svg{width:19px;height:19px}
.lf-plus-liste b{font-family:'Oswald','Inter',sans-serif;font-weight:600;font-size:1rem;color:var(--ink)}
.lf-plus-liste li > span:not(.lf-plus-ico){font-size:.88rem;color:var(--muted);line-height:1.55}
.lf-plus-liste a{color:var(--gold-d);border-bottom:1px solid currentColor;white-space:nowrap}
.lf-plus-liste a:hover{color:var(--ox)}

.lf-cell-map{grid-column:1;grid-row:2;z-index:2;align-self:start;padding:clamp(1.8rem,3vw,2.6rem) 0 clamp(1.5rem,3vw,2.5rem)}
.lf-cell-map img{width:min(100%,420px);opacity:.95}

.lf-cell-visite{
  grid-column:1;grid-row:3;z-index:2;background:var(--cream-3);
  border:1px solid var(--line);padding:clamp(1.8rem,3.5vw,2.6rem);border-radius:var(--r);
}
.lf-cell-visite h2{font-size:clamp(1.7rem,3.4vw,2.4rem);margin:.35rem 0 .9rem}
.lf-visite-info{display:grid;grid-template-columns:auto 1fr;gap:.5rem 1.2rem;margin:1.3rem 0 1.6rem}
.lf-visite-info dt{
  font-family:'Bebas Neue',sans-serif;letter-spacing:.16em;text-transform:uppercase;
  font-size:.78rem;color:var(--gold-d);align-self:center;
}
.lf-visite-info dd{font-size:.93rem}
.lf-visite-info a:hover{color:var(--gold-d);text-decoration:underline}

/* ---------------------------------------------------------------- BANDE CITATION */
.lf-band{position:relative;min-height:min(56vh,480px);display:grid;place-items:center;overflow:hidden;padding:clamp(3rem,7vw,6rem) 1.5rem}
.lf-band-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0}
.lf-band-veil{position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,rgba(28,9,4,.72),rgba(28,9,4,.86))}
.lf-band-inner{position:relative;z-index:2;max-width:56ch;text-align:center}
.lf-band blockquote{
  font-family:'Fraunces',Georgia,serif;font-style:italic;font-weight:400;
  font-size:clamp(1.2rem,2.6vw,1.95rem);line-height:1.42;color:var(--cream-2);
}
.lf-band cite{
  display:block;margin-top:1.6rem;font-style:normal;font-family:'Bebas Neue',sans-serif;
  letter-spacing:.2em;text-transform:uppercase;font-size:.85rem;color:var(--gold);
}

/* ---------------------------------------------------------------- FEATURE (carrousel recettes) */
.feature{
  display:grid;grid-template-columns:.9fr 1.1fr 1fr;align-items:stretch;
  background:var(--ox);color:var(--cream-2);min-height:min(72vh,620px);
}
.feature-panel{
  padding:clamp(2.4rem,4vw,3.6rem);display:flex;flex-direction:column;justify-content:center;
  border-right:1px solid rgba(230,217,189,.16);
}
.feature-panel h2{color:#fff;font-size:clamp(1.9rem,3.4vw,2.9rem);margin-bottom:.9rem}
.feature-panel-sub{color:rgba(240,228,200,.78);font-size:.96rem}
.feature-nav{display:flex;gap:.7rem;margin-top:2rem}
.fnav{
  width:52px;height:52px;border:1px solid rgba(230,217,189,.35);border-radius:50%;
  color:var(--cream-2);font-size:1.6rem;line-height:1;display:grid;place-items:center;transition:.25s;
}
.fnav:hover{background:var(--gold);border-color:var(--gold);color:#fff}
.feature-img{
  display:grid;place-items:center;padding:clamp(1.5rem,3vw,2.5rem);
  background:radial-gradient(ellipse at center,rgba(199,154,62,.16),transparent 62%);
}
.feature-img img{
  max-height:min(52vh,440px);width:auto;object-fit:contain;
  filter:drop-shadow(0 30px 46px rgba(20,8,4,.5));transition:opacity .35s ease,transform .5s ease;
}
.feature-img img.fading{opacity:0;transform:translateX(26px)}
.feature-detail{
  background:var(--cream-3);color:var(--ink);
  padding:clamp(2.4rem,4vw,3.6rem);display:flex;flex-direction:column;justify-content:center;
}
.feature-detail h3{font-size:clamp(1.4rem,2.4vw,2rem);margin:.3rem 0 .9rem}
.feature-detail > p{color:var(--muted);font-size:.97rem}
.feature-specs{
  list-style:none;display:flex;flex-wrap:wrap;gap:1rem 1.8rem;
  margin:1.5rem 0;padding:1.2rem 0;border-block:1px solid var(--line);
}
.feature-specs b{font-family:'Fraunces',serif;display:block;font-size:1rem;line-height:1.1}
.feature-specs span{font-size:.68rem;text-transform:uppercase;letter-spacing:.1em;color:var(--muted)}
.feature-actions{display:flex;align-items:center;gap:1.2rem;flex-wrap:wrap;margin-top:.6rem}
.feature-count{font-family:'Bebas Neue',sans-serif;letter-spacing:.12em;color:var(--muted);font-size:.95rem}
.feature-count b{color:var(--ink);font-size:1.35rem}

/* ---------------------------------------------------------------- STORY (manifeste vidéo) */
.story{position:relative;min-height:min(88vh,720px);display:grid;place-items:center;overflow:hidden;padding:clamp(4rem,8vw,7rem) 1.5rem;text-align:center}
.story-bg{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;z-index:0}
.story-veil{position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,rgba(28,9,4,.74),rgba(28,9,4,.62) 50%,rgba(28,9,4,.88))}
.story-inner{position:relative;z-index:2;max-width:60ch;color:var(--cream-2)}
.story-inner h2{color:#fff;font-size:clamp(2.2rem,5.5vw,4.2rem);margin:.5rem 0 1.5rem}
.story-inner p{color:rgba(240,228,200,.88);font-size:clamp(1rem,1.5vw,1.12rem)}
.story-inner strong{color:var(--gold)}
.story-inner .btn{margin-top:1.8rem}

/* ---------------------------------------------------------------- HERO PRODUITS */
.phero{
  position:relative;min-height:min(78vh,660px);display:grid;place-items:center;text-align:center;
  overflow:hidden;padding:clamp(7rem,12vw,9rem) 1.5rem clamp(3rem,6vw,5rem);color:#fff;
}
/* vidéo de fond ; l'attribut poster sert de repli tant qu'elle n'est pas chargée */
.phero-bg{
  position:absolute;inset:0;z-index:0;
  width:100%;height:100%;object-fit:cover;
}
.phero-veil{position:absolute;inset:0;z-index:1;background:linear-gradient(180deg,rgba(52,16,9,.68),rgba(28,9,4,.86))}
.phero-motif{
  position:absolute;right:-4%;bottom:-8%;width:min(38vw,420px);z-index:1;
  opacity:.12;pointer-events:none;
}
.phero-inner{position:relative;z-index:2;max-width:62ch}
.phero-inner h1{font-size:clamp(2.6rem,7vw,5rem);color:#fff}
.phero-rule{display:block;width:74px;height:3px;background:var(--gold);margin:1.4rem auto 1.3rem}
.phero-inner p{color:rgba(255,255,255,.88)}
.phero-inner .btn{margin-top:1.8rem}

/* ---------------------------------------------------------------- BANDEAU LABELS */
.tagband{background:var(--ox-d);color:var(--cream-2);padding:clamp(1.6rem,3vw,2.4rem) clamp(1.2rem,5vw,4rem)}
.tagband-inner{
  width:min(100%,var(--maxw));margin-inline:auto;
  display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:clamp(1.5rem,4vw,3rem);
}
.tagband-feats{display:flex;flex-direction:column;gap:1.1rem}
.feats-l{align-items:flex-end;text-align:right}
.feats-r{align-items:flex-start}
.feat{display:flex;align-items:center;gap:.85rem}
.feat-ico{width:38px;height:38px;flex-shrink:0;display:grid;place-items:center;color:var(--gold);border:1px solid rgba(199,154,62,.4);border-radius:50%}
.feat-ico svg{width:19px;height:19px}
.feat-t b{display:block;font-family:'Oswald','Inter',sans-serif;font-weight:600;font-size:.95rem;letter-spacing:.02em}
.feat-t span{font-size:.75rem;color:rgba(240,228,200,.6)}
.tagband-logo{height:clamp(62px,9vw,96px);width:auto}

/* ---------------------------------------------------------------- OFFRES */
.offers{padding:clamp(3.5rem,7vw,6rem) clamp(1.2rem,5vw,4rem);background:var(--cream-2)}
.offers-head{
  width:min(100%,var(--maxw));margin-inline:auto;
  display:grid;grid-template-columns:1fr 1fr;gap:clamp(2rem,5vw,4rem);align-items:center;
}
.offers-headtext h2{font-size:clamp(1.9rem,4vw,3rem);margin:.35rem 0 1rem}
.offers-intro{color:var(--muted);max-width:48ch}
.offers-show{display:flex;align-items:flex-end;justify-content:center;gap:clamp(.5rem,2vw,1.6rem)}
.offers-show img{
  width:clamp(90px,14vw,175px);height:auto;object-fit:contain;
  filter:drop-shadow(0 20px 32px rgba(52,16,9,.24));
}
.offers-show img:nth-child(2){width:clamp(110px,17vw,215px);z-index:2}
.offers-grid{
  width:min(100%,var(--maxw));margin:clamp(2.5rem,5vw,4rem) auto 0;
  display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:1.5rem;
}
.offer{background:#fff;border:1px solid var(--line);border-radius:var(--r);padding:1.9rem 1.6rem;transition:transform .3s,box-shadow .3s}
.offer:hover{transform:translateY(-5px);box-shadow:var(--shadow-lg)}
.offer-ico{display:grid;place-items:center;width:46px;height:46px;color:var(--gold-d);border:1px solid rgba(199,154,62,.4);border-radius:50%;margin-bottom:1.1rem}
.offer-ico svg{width:22px;height:22px}
.offer h3{font-size:1.15rem;margin-bottom:.55rem}
.offer p{font-size:.9rem;color:var(--muted);margin-bottom:1.1rem}
.offer-link{font-size:.8rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase;color:var(--gold-d);border-bottom:1px solid currentColor}
.offer-link:hover{color:var(--ox)}

/* ---------------------------------------------------------------- FOOTER ÉDITORIAL */
.footer{background:var(--ox-d);color:rgba(240,228,200,.8);padding:clamp(3rem,6vw,4.5rem) clamp(1.2rem,5vw,4rem) 0}
.footer-grid{
  width:min(100%,var(--maxw));margin-inline:auto;
  display:grid;grid-template-columns:1.6fr 1fr 1.15fr 1fr;gap:clamp(1.8rem,4vw,3rem);padding-bottom:2.8rem;
}
.footer-logo{height:66px;width:auto;margin-bottom:1.1rem}
.footer-brand p{font-size:.9rem;max-width:36ch}
.footer h2{
  font-family:'Bebas Neue',sans-serif;font-weight:400;letter-spacing:.18em;
  font-size:.95rem;color:var(--gold);text-transform:uppercase;margin-bottom:1.1rem;
}
.footer-links{display:grid;gap:.55rem;font-size:.89rem}
.footer-links a:hover,.footer-contact a:hover{color:var(--gold)}
.footer-contact{list-style:none;display:grid;gap:.9rem;font-size:.89rem}
.footer-contact li{display:grid;gap:.15rem;line-height:1.45}
.footer-contact span{
  font-family:'Bebas Neue',sans-serif;letter-spacing:.16em;text-transform:uppercase;
  font-size:.74rem;color:rgba(240,228,200,.5);
}
.footer-social{display:flex;gap:.6rem;margin-top:1.3rem}
.footer-social a{
  width:38px;height:38px;border-radius:50%;border:1px solid rgba(240,228,200,.22);
  display:grid;place-items:center;color:var(--cream);transition:.22s;
}
.footer-social svg{width:17px;height:17px}
.footer-social a:hover{background:var(--gold);border-color:var(--gold);color:var(--ox-d);transform:translateY(-2px)}
.footer-badges{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:1.3rem}
.fbadge{
  font-size:.7rem;letter-spacing:.08em;text-transform:uppercase;padding:.35rem .8rem;
  border:1px solid rgba(240,228,200,.24);border-radius:100px;color:rgba(240,228,200,.75);
}
.footer-shopbtn{display:block;text-align:center;margin-bottom:1rem}
.footer-soft{font-size:.84rem;color:rgba(240,228,200,.66);display:inline-block}
.footer-soft:hover{color:var(--gold)}
.footer-eu{width:min(100%,var(--maxw));margin-inline:auto;padding-bottom:2rem}
.footer-ue{max-width:320px;width:100%;height:auto;background:#fff;padding:.5rem;border-radius:var(--r);margin-top:1.2rem}
.footer .footer-bar{
  border-top:1px solid rgba(240,228,200,.15);padding:1.2rem 0;
  display:flex;flex-wrap:wrap;justify-content:space-between;gap:.6rem;font-size:.8rem;
  width:min(100%,var(--maxw));margin-inline:auto;
}
.footer-credit{color:rgba(240,228,200,.55)}
.footer-bar a{color:var(--gold)}
.footer-bar a:hover{text-decoration:underline}

/* ---------------------------------------------------------------- RESPONSIVE */
@media (max-width:980px){
  .feature{grid-template-columns:1fr 1fr}
  .feature-panel{grid-column:1/-1;border-right:0;border-bottom:1px solid rgba(230,217,189,.16)}
  .footer-grid{grid-template-columns:1fr 1fr}
}
@media (max-width:860px){
  .lf-hero-inner{grid-template-columns:1fr;gap:2.2rem}
  .lf-collage{grid-template-columns:1fr;padding-bottom:3rem}
  .lf-darkband{grid-column:1;grid-row:1}
  .lf-cell-start{grid-column:1;grid-row:1}
  .lf-photos{grid-column:1;grid-row:2;padding-top:0;margin-bottom:2.2rem}
  .lf-cell-map{grid-column:1;grid-row:3}
  .lf-cell-visite{grid-column:1;grid-row:4}
  .lf-cell-plus{grid-column:1;grid-row:5;padding-top:2.2rem}
  .lf-photo-peek{padding-top:2rem}
  .offers-head{grid-template-columns:1fr}
  /* Bandeau de labels sur téléphone.
     Les trois premiers labels ont l'icône APRÈS le texte dans le HTML : sur
     grand écran c'est la colonne de gauche, alignée à droite du logo. Une fois
     empilée, ça donnait un zigzag — trois lignes icône à droite, trois icône à
     gauche, et rien qui s'aligne. On remet tout le monde dans le même sens,
     icône à gauche, textes sur une même verticale. */
  .tagband-inner{grid-template-columns:1fr;justify-items:stretch;gap:1.5rem}
  .tagband-logo{order:-1;justify-self:center}
  .tagband-feats{gap:0}
  .feats-l,.feats-r{align-items:stretch;text-align:left}
  .feats-l .feat{flex-direction:row-reverse;justify-content:flex-end}
  .tagband .feat{padding:.75rem 0;border-bottom:1px solid rgba(240,228,200,.12)}
  .feats-r .feat:last-child{border-bottom:0}
  .feats-r{margin-top:0}
  .feats-l .feat:first-child{border-top:1px solid rgba(240,228,200,.12)}
}
@media (max-width:640px){
  .feature{grid-template-columns:1fr}
  .feature-panel{grid-column:1}
  .footer-grid{grid-template-columns:1fr}
  .lf-photos{gap:.7rem}
  .feature-specs{gap:.8rem 1.2rem}
}
@media (prefers-reduced-motion:reduce){
  .feature-img img{transition:none}
}

/* ------------------------------------- carrousel recettes sur petit écran */
/* Empilé, le bloc gardait son `min-height: min(72vh, 620px)` : les trois lignes
   de la grille s'étiraient pour le remplir, ce qui creusait de grands vides
   entre le titre, les flèches et le pot. La hauteur suit désormais le contenu,
   et les flèches se retrouvent juste au-dessus du visuel qu'elles commandent. */
@media (max-width: 640px) {
  .feature { min-height: 0; }
  .feature-panel { padding: 2rem 1.4rem 1.5rem; }
  .feature-panel h2 { font-size: 1.85rem; margin-bottom: .6rem; }
  .feature-panel-sub { font-size: .92rem; }
  .feature-nav { margin-top: 1.3rem; }
  .fnav { width: 46px; height: 46px; font-size: 1.4rem; }
  .feature-img { padding: 1.2rem 1.4rem 1.6rem; }
  .feature-img img { max-height: min(36vh, 290px); }
  .feature-detail { padding: 1.8rem 1.4rem 2.4rem; }
  .feature-specs { margin: 1.1rem 0; padding: .9rem 0; }
  .feature-actions { gap: .9rem; }
}

/* ── ferme.css ── */
/* ==========================================================================
   Sections éditoriales du gabarit « ferme » (page ferme + 7 pages locales)
   Objectif : casser les pavés de texte — hiérarchie, image d'accompagnement,
   chiffres clés, étapes numérotées et panneau d'engagements.
   ========================================================================== */

/* ---------------------------------------------------------------- intro */
.ferme-intro { padding: clamp(3.5rem, 7vw, 6rem) 0 0; }
.ferme-intro-grid {
  display: grid; grid-template-columns: 1.05fr .95fr;
  gap: clamp(2rem, 5vw, 4.5rem); align-items: center;
}
.ferme-intro-text .lead {
  font-family: 'Fraunces', Georgia, serif; font-size: clamp(1.12rem, 1.8vw, 1.42rem);
  line-height: 1.45; color: var(--ox); margin-bottom: 1.2rem;
}
.ferme-intro-text > p:not(.lead) { color: var(--muted); }
.ferme-intro-media { position: relative; }
.ferme-intro-media img {
  width: 100%; aspect-ratio: 4 / 3.4; object-fit: cover;
  border-radius: var(--r); box-shadow: var(--shadow-lg);
}
.ferme-intro-media figcaption {
  position: absolute; left: 0; bottom: 0; transform: translate(-8%, 34%);
  background: var(--ox-d); color: var(--cream-2);
  padding: .9rem 1.2rem; border-radius: var(--r); max-width: 74%;
  box-shadow: var(--shadow-lg);
}
.ferme-intro-media figcaption b {
  display: block; font-family: 'Fraunces', serif; font-size: 1.05rem; color: #fff;
}
.ferme-intro-media figcaption span { font-size: .82rem; color: rgba(240, 228, 200, .7); }

/* ---------------------------------------------------------------- chiffres clés */
.stats {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
  gap: 1px; background: var(--line);
  border: 1px solid var(--line); border-radius: var(--r); overflow: hidden;
  margin-top: clamp(2.5rem, 5vw, 4rem);
}
.stat { background: var(--cream-2); padding: 1.6rem 1.3rem; text-align: center; }
.stat b {
  display: block; font-family: 'Fraunces', Georgia, serif; font-weight: 800;
  font-size: clamp(1.7rem, 3vw, 2.4rem); line-height: 1; color: var(--ox);
}
.stat span {
  display: block; margin-top: .5rem; font-size: .8rem; letter-spacing: .08em;
  text-transform: uppercase; color: var(--muted);
}

/* ---------------------------------------------------------------- savoir-faire (étapes) */
.etapes-band { background: var(--cream-3); padding: clamp(3.5rem, 7vw, 6rem) 0; }
.etapes-head { max-width: 58ch; margin-bottom: clamp(2rem, 4vw, 3rem); }
.etapes-head p { color: var(--muted); }
.etapes { display: grid; grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); gap: clamp(1.2rem, 2.5vw, 2rem); }
.etape {
  background: #fff; border: 1px solid var(--line); border-radius: var(--r);
  padding: 1.8rem 1.6rem; position: relative; transition: transform .3s, box-shadow .3s;
}
.etape:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); }
.etape-num {
  display: block; font-family: 'Bebas Neue', sans-serif; font-size: 2.4rem;
  line-height: 1; color: var(--gold); margin-bottom: .8rem;
}
/* Certaines pages (produits, vente, pro) mettent une ICÔNE dans .etape-num au lieu
   d'un numéro. Un <svg> sans width/height s'étire à la largeur de son conteneur :
   les icônes faisaient plus de 400 px de haut et écrasaient le texte de la carte.
   On les ramène au gabarit d'icône du site, celui de .offer-ico. */
.etape-num svg { width: 22px; height: 22px; display: block; }
.etape-num:has(svg) {
  display: grid; place-items: center; width: 46px; height: 46px;
  color: var(--gold-d); border: 1px solid rgba(199, 154, 62, .4);
  border-radius: 50%; margin-bottom: 1.1rem;
}
.etape h3 { font-size: 1.15rem; margin-bottom: .55rem; }
.etape p { font-size: .96rem; color: var(--ink); }

/* ---------------------------------------------------------------- engagements */
.engagements-grid {
  display: grid; grid-template-columns: .9fr 1.1fr;
  gap: clamp(2rem, 4vw, 3.5rem); align-items: center;
}
.engagements-media img {
  width: 100%; aspect-ratio: 3 / 3.6; object-fit: cover;
  border-radius: var(--r); box-shadow: var(--shadow-lg);
}
.engagements-panel { }
.engagements-panel > p { color: var(--muted); }
.engagements-list { list-style: none; display: grid; gap: .9rem; margin: 1.6rem 0; }
.engagements-list li {
  display: grid; grid-template-columns: auto 1fr; gap: .85rem; align-items: start;
  padding-bottom: .9rem; border-bottom: 1px solid var(--line); font-size: .96rem;
}
.engagements-list li:last-child { border-bottom: 0; padding-bottom: 0; }
.engagements-list .eng-ico {
  width: 26px; height: 26px; flex-shrink: 0; display: grid; place-items: center;
  border-radius: 50%; background: rgba(199, 154, 62, .16); color: var(--gold-d);
}
.engagements-list .eng-ico svg { width: 14px; height: 14px; }

/* ---------------------------------------------------------------- produits maison */
.gamme-band { padding: clamp(3.5rem, 7vw, 6rem) 0; }
.gamme-band-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 1.5rem; flex-wrap: wrap; margin-bottom: 2rem; }
.gamme-band-head p { color: var(--muted); max-width: 46ch; }

/* ---------------------------------------------------------------- responsive */
@media (max-width: 860px) {
  .ferme-intro-grid,
  .engagements-grid { grid-template-columns: 1fr; }
  .ferme-intro-media figcaption { position: static; transform: none; max-width: 100%; margin-top: .8rem; }
  /* La photo passe AVANT le texte : empilée derrière, elle laissait le visiteur
     face à quatre paragraphes d'affilée sans rien pour accrocher l'œil. */
  .ferme-intro-media { order: -1; }
  .ferme-intro-grid { gap: 2rem; }
  .ferme-intro-text .lead { font-size: 1.12rem; line-height: 1.55; }
  .ferme-intro-text > p { margin-bottom: .95rem; line-height: 1.72; }
  .ferme-intro-text > p:last-child { margin-bottom: 0; }
  .engagements-media { order: -1; }
  .engagements-media img { aspect-ratio: 4 / 3; }
}

/* ── pages.css ── */
/* ==========================================================================
   Composants propres aux pages camping-car, contact et blog.
   Même vocabulaire chromatique que la page ferme : crème / oxblood / doré.
   ========================================================================== */

/* ---------------------------------------------------------------- déroulé de la halte
   Frise horizontale numérotée : la ligne dorée relie les étapes entre elles. */
.halte { background: var(--ox); color: var(--cream-2); padding: clamp(3.5rem, 7vw, 6rem) 0; }
.halte h2 { color: #fff; }
.halte-head { max-width: 56ch; margin-bottom: clamp(2.2rem, 4vw, 3.2rem); }
.halte-head p { color: rgba(240, 228, 200, .82); }
.halte-steps {
  display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr));
  gap: clamp(1.4rem, 3vw, 2.4rem); position: relative;
}
.halte-step { position: relative; padding-top: 3.4rem; }
.halte-step::before {                       /* pastille numérotée */
  content: attr(data-n);
  position: absolute; top: 0; left: 0;
  width: 46px; height: 46px; border-radius: 50%;
  display: grid; place-items: center;
  font-family: 'Bebas Neue', sans-serif; font-size: 1.25rem; letter-spacing: .06em;
  color: var(--ox-d); background: var(--gold);
}
.halte-step::after {                        /* filet de liaison */
  content: ""; position: absolute; top: 23px; left: 58px; right: -1.4rem; height: 1px;
  background: linear-gradient(90deg, rgba(199, 154, 62, .55), rgba(199, 154, 62, .1));
}
.halte-step:last-child::after { display: none; }
.halte-step h3 { color: var(--gold); font-size: 1.1rem; }
.halte-step p { color: rgba(240, 228, 200, .8); font-size: .94rem; }

/* ---------------------------------------------------------------- alentours */
.env-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 1.4rem; margin-top: 2.2rem; }
.env-card {
  background: #fff; border: 1px solid var(--line); border-radius: var(--r);
  padding: 1.7rem 1.5rem; transition: transform .3s, box-shadow .3s;
}
.env-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); }
.env-card .env-dist {
  font-family: 'Bebas Neue', sans-serif; letter-spacing: .16em; text-transform: uppercase;
  font-size: .8rem; color: var(--gold-d);
}
.env-card h3 { font-size: 1.12rem; margin: .2rem 0 .55rem; }
.env-card p { font-size: .92rem; color: var(--muted); }

/* ---------------------------------------------------------------- avis France Passion */
.fp-band { background: var(--ox-d); color: var(--cream-2); padding: clamp(3.5rem, 7vw, 6rem) 0; }
.fp-band h2 { color: #fff; }
.fp-band .lede { color: rgba(240, 228, 200, .8); }
.fp-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 1.6rem; margin-top: 2.4rem; }
.fp-quote {
  border: 1px solid rgba(230, 217, 189, .2); background: rgba(230, 217, 189, .04);
  border-radius: var(--r); padding: 1.8rem; position: relative;
}
.fp-quote::before {
  content: "“"; position: absolute; top: -.35rem; left: 1rem;
  font-family: 'Fraunces', Georgia, serif; font-size: 4rem; line-height: 1; color: rgba(199, 154, 62, .4);
}
.fp-quote p { font-size: .95rem; color: rgba(240, 228, 200, .9); font-style: italic; padding-top: 1rem; }
.fp-quote cite { display: block; margin-top: 1.1rem; font-style: normal; font-weight: 600; color: var(--gold); font-size: .92rem; }
.fp-quote cite span { color: rgba(240, 228, 200, .5); font-weight: 400; font-size: .8rem; }

/* ---------------------------------------------------------------- contact : accès rapide */
.contact-cards { display: grid; grid-template-columns: repeat(auto-fit, minmax(230px, 1fr)); gap: 1.3rem; }
.contact-card {
  display: block; background: #fff; border: 1px solid var(--line); border-radius: var(--r);
  padding: 1.7rem 1.5rem; transition: transform .3s, box-shadow .3s, border-color .3s;
}
.contact-card:hover { transform: translateY(-4px); box-shadow: var(--shadow-lg); border-color: var(--gold); }
.contact-card .cc-ico {
  width: 44px; height: 44px; display: grid; place-items: center; border-radius: 50%;
  background: rgba(199, 154, 62, .14); color: var(--gold-d); margin-bottom: 1rem;
}
.contact-card .cc-ico svg { width: 20px; height: 20px; }
.contact-card h3 { font-size: 1.05rem; margin-bottom: .3rem; }
.contact-card .cc-val { font-family: 'Fraunces', serif; font-weight: 600; font-size: 1.05rem; color: var(--ox); display: block; }
.contact-card p { font-size: .87rem; color: var(--muted); margin-top: .45rem; }

.contact-promise {
  display: flex; align-items: center; gap: .8rem; flex-wrap: wrap;
  background: rgba(199, 154, 62, .1); border-left: 3px solid var(--gold);
  padding: .95rem 1.2rem; border-radius: var(--r); margin-bottom: 1.6rem; font-size: .92rem;
}
.contact-promise svg { width: 18px; height: 18px; color: var(--gold-d); flex-shrink: 0; }

/* ---------------------------------------------------------------- blog */
.blog-featured { padding: clamp(2.5rem, 5vw, 4rem) 0 0; }
.featured {
  display: grid; grid-template-columns: 1.15fr .85fr; gap: 0;
  border: 1px solid var(--line); border-radius: var(--r); overflow: hidden;
  background: #fff; box-shadow: var(--shadow);
}
.featured-media { position: relative; min-height: 320px; }
.featured-media img { width: 100%; height: 100%; object-fit: cover; }
.featured-tag {
  position: absolute; top: 1rem; left: 1rem; background: var(--gold); color: #fff;
  font-family: 'Bebas Neue', sans-serif; letter-spacing: .16em; text-transform: uppercase;
  font-size: .78rem; padding: .3rem .85rem; border-radius: 100px;
}
.featured-body { padding: clamp(1.8rem, 3.5vw, 3rem); display: flex; flex-direction: column; justify-content: center; }
.featured-body h2 { font-size: clamp(1.5rem, 2.8vw, 2.2rem); }
.featured-body h2 a:hover { color: var(--gold-d); }
.featured-body p { color: var(--muted); font-size: .98rem; }
.blog-meta {
  display: flex; align-items: center; gap: .6rem; margin-top: 1.4rem;
  font-family: 'Bebas Neue', sans-serif; letter-spacing: .14em; text-transform: uppercase;
  font-size: .78rem; color: var(--muted);
}
.blog-meta .dot { width: 4px; height: 4px; border-radius: 50%; background: var(--gold); }

/* ---------------------------------------------------------------- responsive */
@media (max-width: 860px) {
  .halte-step::after { display: none; }
  .featured { grid-template-columns: 1fr; }
  .featured-media { min-height: 220px; aspect-ratio: 16 / 9; }
}

/* ---------------------------------------------------------------- boutique à venir */
/* Encart affiché tant que site.boutiqueEnLigne est à false (voir data.mjs).
   Il disparaît tout seul le jour où la boutique en ligne existe. */
.notice-boutique {
  max-width: 62ch; margin: 1.6rem auto 2rem; padding: 1rem 1.3rem;
  background: rgba(199, 154, 62, .1); border-left: 3px solid var(--gold);
  border-radius: 0 var(--r) var(--r) 0;
  font-size: .95rem; color: var(--ink); text-align: left;
}
.notice-boutique .nb-titre { display: block; font-weight: 600; margin-bottom: .15rem; }
.notice-boutique a { color: var(--gold-d); border-bottom: 1px solid currentColor; white-space: nowrap; }
.notice-boutique a:hover { color: var(--ox); }

/* ---------------------------------------------------------------- note Google */
/* Affichée dès que site.avisVerifies est à true. Le balisage aggregateRating
   reprend exactement ces valeurs : Google exige que la note marquée soit visible
   sur la page, sinon c'est un motif d'action manuelle. */
.avis-note {
  display: flex; align-items: baseline; justify-content: center;
  gap: .5rem; flex-wrap: wrap; margin: -.4rem 0 1.8rem;
}
.avis-note .an-valeur { font-family: 'Fraunces', Georgia, serif; font-size: 2.1rem; font-weight: 800; line-height: 1; }
.avis-note .an-sur { font-size: 1rem; color: var(--muted); }
.avis-note .an-etoiles { color: var(--gold); letter-spacing: .1em; font-size: 1.05rem; }
.avis-note .an-nb { font-size: .92rem; color: var(--muted); }

/* Seconde ligne du maillage : pages pro et articles de fond. Légèrement en retrait
   de la liste des villes, pour rester une piste de lecture et non une navigation. */
.maillage-plus { margin-top: 1.1rem; opacity: .88; }
.maillage-plus a { font-size: .9rem; }

/* ── panier.css ── */
/* ==========================================================================
   Panier de commande
   Chargé sur toutes les pages : le bouton du panier vit dans l'en-tête, et le
   tiroir doit pouvoir s'ouvrir depuis n'importe où.
   ========================================================================== */

/* ---------------------------------------------------------------- bouton d'ajout */
.btn-panier {
  display: inline-flex; align-items: center; gap: .6rem;
  background: var(--gold); color: #fff; border-color: var(--gold);
}
.btn-panier:hover { background: var(--gold-d); border-color: var(--gold-d); }
.btn-panier svg { width: 18px; height: 18px; flex: none; }
.btn-panier.ajoute { background: var(--ox); border-color: var(--ox); }

/* ---------------------------------------------------------------- accès au panier */
.panier-ouvrir {
  position: relative; display: inline-grid; place-items: center;
  width: 42px; height: 42px; border-radius: 50%; color: inherit;
  border: 1px solid rgba(255, 255, 255, .35); background: none; cursor: pointer;
}
#topbar.compact .panier-ouvrir { border-color: rgba(52, 16, 9, .25); }
.panier-ouvrir svg { width: 19px; height: 19px; }
.panier-compte {
  position: absolute; top: -5px; right: -5px; min-width: 19px; height: 19px;
  display: grid; place-items: center; padding: 0 4px;
  background: var(--red, #da2916); color: #fff; border-radius: 10px;
  font-size: .7rem; font-weight: 700; line-height: 1;
}

/* ---------------------------------------------------------------- tiroir */
#panier-voile {
  position: fixed; inset: 0; z-index: 998; background: rgba(20, 8, 4, .5);
  backdrop-filter: blur(2px);
}
/* `display: flex` ci-dessous bat la regle [hidden] du navigateur : sans cette
   ligne le tiroir s'affiche en permanence, y compris au chargement. */
#panier-tiroir[hidden], #panier-voile[hidden] { display: none; }
#panier-tiroir {
  position: fixed; top: 0; right: 0; bottom: 0; z-index: 999;
  width: min(430px, 100%); background: var(--cream-2);
  display: flex; flex-direction: column;
  box-shadow: -18px 0 50px rgba(20, 8, 4, .3);
  animation: paTiroir .32s cubic-bezier(.2, .8, .3, 1);
}
@keyframes paTiroir { from { transform: translateX(100%); } }
@media (prefers-reduced-motion: reduce) { #panier-tiroir { animation: none; } }

.pa-tete {
  display: flex; align-items: center; justify-content: space-between;
  padding: 1.3rem 1.4rem; border-bottom: 1px solid var(--line);
}
.pa-tete h2 { font-size: 1.3rem; }
.pa-fermer {
  background: none; border: 0; font-size: 1.7rem; line-height: 1;
  cursor: pointer; color: var(--muted); padding: .2rem .5rem;
}
.pa-fermer:hover { color: var(--ink); }

.pa-liste { list-style: none; margin: 0; padding: .6rem 1.4rem; overflow-y: auto; flex: 1; }
.cmd-liste { list-style: none; margin: 0; padding: 0; }
.pa-ligne {
  display: grid; grid-template-columns: 64px 1fr auto auto auto;
  gap: .8rem; align-items: center; padding: .9rem 0;
  border-bottom: 1px solid var(--line);
}
/* Aucun fond derrière la vignette : les visuels produit sont détourés (WebP à canal
   alpha, coins transparents vérifiés). Un `background: #fff` y dessinait un carré
   blanc et annulait tout le bénéfice du détourage. Pas de border-radius non plus —
   il n'y a pas de boîte à arrondir, seulement la silhouette du bocal. */
.pa-ligne img { background: none; object-fit: contain; }
.pa-txt { min-width: 0; }
.pa-nom { display: block; font-weight: 600; font-size: .92rem; line-height: 1.3; }
.pa-pu { display: block; font-size: .8rem; color: var(--muted); }
.pa-qte { display: flex; align-items: center; gap: .1rem; }
.pa-qte button {
  width: 26px; height: 26px; border: 1px solid var(--line); background: #fff;
  cursor: pointer; font-size: 1rem; line-height: 1; color: var(--ink); border-radius: 4px;
}
.pa-qte button:hover { border-color: var(--gold); color: var(--gold-d); }
.pa-qte span { min-width: 26px; text-align: center; font-variant-numeric: tabular-nums; }
.pa-total { font-weight: 700; font-variant-numeric: tabular-nums; white-space: nowrap; }
.pa-suppr {
  background: none; border: 0; cursor: pointer; color: var(--muted);
  font-size: 1.2rem; line-height: 1; padding: 0 .2rem;
}
.pa-suppr:hover { color: var(--red, #da2916); }

.pa-vide { padding: 2.5rem 1.4rem; text-align: center; color: var(--muted); }
.cmd-recap .panier-vide { padding: 1.6rem 0; color: var(--muted); }

.pa-pied { padding: 1.2rem 1.4rem 1.5rem; border-top: 1px solid var(--line); background: var(--cream); }
.pa-somme { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 1rem; }
.pa-somme b { font-size: 1.35rem; font-variant-numeric: tabular-nums; }
.pa-pied .btn { width: 100%; text-align: center; }
.pa-note { font-size: .8rem; color: var(--muted); margin-top: .8rem; line-height: 1.45; }

/* ---------------------------------------------------------------- page commande */
.cmd-grid {
  display: grid; grid-template-columns: 1.05fr .95fr;
  gap: clamp(1.8rem, 4vw, 3.2rem); align-items: start;
}
@media (max-width: 860px) { .cmd-grid { grid-template-columns: 1fr; } }

.cmd-recap { background: #fff; border: 1px solid var(--line); border-radius: var(--r); padding: 1.5rem; }

.cmd-modes { display: grid; gap: .7rem; margin: 1.2rem 0 .4rem; }
.cmd-mode {
  display: flex; gap: .7rem; align-items: flex-start;
  border: 1px solid var(--line); border-radius: var(--r); padding: .9rem 1rem; cursor: pointer;
}
.cmd-mode:has(input:checked) { border-color: var(--gold); background: rgba(199, 154, 62, .07); }
.cmd-mode input { margin-top: .25rem; accent-color: var(--gold); }
.cmd-mode b { display: block; font-size: .96rem; }
.cmd-mode small { color: var(--muted); font-size: .84rem; }
.cmd-mode.desactive { opacity: .6; }
.cmd-mode-detail {
  font-size: .86rem; color: var(--muted); background: var(--cream);
  border-left: 3px solid var(--gold); padding: .7rem .9rem; margin-bottom: 1.2rem;
}

/* Sur téléphone, la grille à 5 colonnes ne tient pas : les boutons de quantité
   passaient par-dessus le nom du produit. On repasse sur deux lignes. */
@media (max-width: 460px) {
  .pa-ligne {
    grid-template-columns: 56px 1fr auto;
    grid-template-areas: "img nom suppr" "img qte total";
    row-gap: .5rem;
  }
  .pa-ligne img { grid-area: img; width: 56px; height: 56px; }
  .pa-txt { grid-area: nom; }
  .pa-qte { grid-area: qte; }
  .pa-total { grid-area: total; text-align: right; }
  .pa-suppr { grid-area: suppr; align-self: start; }
}

/* Ajout direct depuis une carte du catalogue. Discret par défaut pour ne pas
   parasiter la grille, franc au survol — la carte reste d'abord un lien vers la
   fiche produit. Absent des grilles compactes (aperçus) et des produits sans prix. */
.p-panier {
  display: flex; align-items: center; justify-content: center; gap: .5rem;
  width: 100%; margin-top: .9rem; padding: .6rem .8rem;
  border: 1px solid rgba(199, 154, 62, .55); border-radius: var(--r);
  background: none; color: var(--gold-d); cursor: pointer;
  font-size: .82rem; font-weight: 600; letter-spacing: .02em;
  transition: background .2s, color .2s, border-color .2s;
}
.p-panier svg { width: 16px; height: 16px; flex: none; }
.p-panier:hover { background: var(--gold); border-color: var(--gold); color: #fff; }
.p-panier.ajoute { background: var(--ox); border-color: var(--ox); color: #fff; }

/* Alerte panier vide sur /commander, doublée par la désactivation du bouton
   d'envoi (panier.js) : un formulaire valide ne doit pas pouvoir partir sans
   produit. */
.cmd-alerte {
  background: rgba(218, 41, 22, .08); border-left: 3px solid var(--red, #da2916);
  padding: .8rem 1rem; margin-bottom: 1rem; font-size: .9rem;
}
.cmd-alerte a { color: var(--ox); border-bottom: 1px solid currentColor; }
.c-form button[type="submit"]:disabled { opacity: .45; cursor: not-allowed; }

/* ---------------------------------------------------------------- boutique à venir */
/* Les boutons d'achat restent CLIQUABLES tant que `panierActif` est à false
   (data.mjs) : ils ouvrent #modale-bientot, qui renvoie au téléphone et à
   l'e-mail. Un bouton mort (pointer-events:none, comme avant) se lit comme un
   bug et fait repartir le visiteur ; celui-ci amène une commande. */
.btn-bientot {
  background: var(--gold); color: #fff; border-color: var(--gold);
  display: inline-flex; align-items: center; gap: .5rem; cursor: pointer;
}
.btn-bientot:hover { background: var(--gold-d); border-color: var(--gold-d); }
.btn-bientot svg { width: 18px; height: 18px; flex-shrink: 0; }
.bq-btn.bq-bientot { cursor: pointer; }

/* ---------------------------------------------------------------- la fenêtre */
.modale-bientot {
  position: fixed; inset: 0; z-index: 300;
  display: grid; place-items: center; padding: 1.2rem;
  background: rgba(31, 18, 13, .62);
}
/* Indispensable : `display:grid` ci-dessus l'emporte sur l'attribut [hidden],
   et la fenêtre resterait affichée en permanence. */
.modale-bientot[hidden] { display: none; }
body.modale-ouverte { overflow: hidden; }

.mb-boite {
  position: relative; width: 100%; max-width: 470px; text-align: center;
  background: var(--cream-3); color: var(--ink, #341009);
  padding: clamp(1.8rem, 5vw, 2.6rem) clamp(1.3rem, 4vw, 2.4rem) clamp(1.4rem, 4vw, 2rem);
  box-shadow: 0 30px 80px rgba(0, 0, 0, .45);
  border-top: 3px solid var(--gold);
  animation: mb-entree .26s cubic-bezier(.2, .8, .3, 1) both;
}
@keyframes mb-entree { from { opacity: 0; transform: translateY(14px) } to { opacity: 1; transform: none } }

.mb-fermer {
  position: absolute; top: .5rem; right: .5rem; width: 40px; height: 40px;
  background: none; border: 0; cursor: pointer; font-size: 1.6rem; line-height: 1;
  color: var(--muted); transition: color .2s, transform .2s;
}
.mb-fermer:hover { color: var(--ox); transform: rotate(90deg); }

.mb-ico {
  display: grid; place-items: center; width: 56px; height: 56px; margin: 0 auto .9rem;
  border-radius: 50%; background: rgba(199, 154, 62, .16); color: var(--gold-d);
}
.mb-ico svg { width: 26px; height: 26px; }

.mb-boite h2 { font-size: clamp(1.25rem, 3.4vw, 1.55rem); margin-bottom: .6rem; }
.mb-boite p { color: var(--muted); line-height: 1.65; font-size: .95rem; }

.mb-actions { display: flex; flex-wrap: wrap; gap: .7rem; justify-content: center; margin: 1.4rem 0 1.1rem; }
.mb-actions .btn { flex: 1 1 auto; justify-content: center; }
/* .btn-ghost est prévu pour un fond sombre (bordure et texte blancs) : sur le
   crème de la fenêtre il serait invisible. On repasse sur l'oxblood. */
.mb-actions .btn-ghost { border-color: var(--ox); color: var(--ox); }
.mb-actions .btn-ghost:hover { background: var(--ox); color: var(--cream-2); }

.mb-pied { font-size: .84rem; border-top: 1px solid rgba(52, 16, 9, .12); padding-top: .9rem; }

@media (prefers-reduced-motion: reduce) {
  .mb-boite { animation: none; }
  .mb-fermer:hover { transform: none; }
}

/* ── accueil.css ── */
/* ==========================================================================
   La Coquille de Massiac — page d'accueil
   Sections reprises de l'index.html d'origine, récupéré depuis les transcriptions :
   rideau d'intro, hero vidéo drone, bande produits en diagonale, pots à cheval
   sur la couture, bloc piliers centré, carrousel « Meilleures ventes ».
   ========================================================================== */

/* ---------------------------------------------------------------- rideau d'intro */
/* Deroule : la spirale se trace (0 -> .95 s), le logo s'y pose (.45 -> 1.15 s),
   le filet pousse, la ligne arrive, le bloc s'efface, puis le rideau s'ouvre en
   DEUX le long de la meme diagonale que la couture du hero. 2,7 s en tout.
   L'animation est portee par #intro lui-meme uniquement pour que le
   `animationend` attendu par js/main.js continue de se declencher — le
   mouvement visible, lui, est sur les deux moities. */
.intro {
  position: fixed; inset: 0; z-index: 9999;
  animation: introFin 2.7s linear forwards;
}
@keyframes introFin { 0%, 99% { visibility: visible; } 100% { visibility: hidden; } }

/* Saut au clic ou au premier defilement : tout est ramene a 0,45 s. */
.intro.gone { animation: introFin .45s linear forwards; }
.intro.gone .intro-inner { animation: introSortie .2s ease forwards; }
.intro.gone .intro-haut { animation: introHaut .45s cubic-bezier(.76, 0, .24, 1) forwards; }
.intro.gone .intro-bas { animation: introBas .45s cubic-bezier(.76, 0, .24, 1) forwards; }

/* Les deux moities du rideau. La diagonale descend de gauche a droite, comme la
   couture entre le hero et la bande produits. */
.intro-part { position: absolute; inset: 0; background: var(--ox-d); }
/* La moitie haute descend 0,5 % plus bas que la ligne de partage : les deux
   decoupes se chevauchent. Bord a bord, l'anticrenelage laissait passer un
   filet clair en diagonale sur tout l'ecran. */
.intro-haut {
  clip-path: polygon(0 0, 100% 0, 100% 54.5%, 0 46.5%);
  animation: introHaut .7s 2s cubic-bezier(.76, 0, .24, 1) forwards;
}
.intro-bas {
  clip-path: polygon(0 46%, 100% 54%, 100% 100%, 0 100%);
  animation: introBas .7s 2s cubic-bezier(.76, 0, .24, 1) forwards;
}
@keyframes introHaut { to { transform: translate(-6%, -101%); } }
@keyframes introBas { to { transform: translate(6%, 101%); } }

.intro-inner {
  position: absolute; inset: 0;
  display: grid; place-content: center; justify-items: center; gap: 1.1rem;
  animation: introSortie .3s 1.85s ease forwards;
}
@keyframes introSortie { to { opacity: 0; transform: translateY(-10px); } }

/* La spirale se trace, puis recule derriere le logo en halo. */
.intro-spirale {
  grid-area: 1 / 1; width: clamp(150px, 21vw, 230px); height: auto;
  justify-self: center; align-self: center;
  animation: introHalo .5s .55s ease forwards;
}
.intro-spirale path {
  stroke: var(--gold); stroke-width: .9; stroke-linecap: round;
  stroke-dasharray: 1; stroke-dashoffset: 1;
  animation: introTrace .95s cubic-bezier(.5, 0, .3, 1) forwards;
}
@keyframes introTrace { to { stroke-dashoffset: 0; } }
@keyframes introHalo { to { opacity: .22; transform: scale(1.14); } }

/* Le logo occupe la meme cellule de grille que la spirale : il se pose dessus. */
.intro-logo {
  grid-area: 1 / 1; justify-self: center; align-self: center;
  height: clamp(78px, 11.5vw, 132px); width: auto;
  opacity: 0; animation: introLogo .7s .45s cubic-bezier(.2, .8, .3, 1) forwards;
}
@keyframes introLogo {
  from { opacity: 0; transform: scale(.88); }
  to { opacity: 1; transform: none; }
}

.intro-line {
  grid-area: 2 / 1; display: block; width: 0; height: 2px; background: var(--gold);
  animation: introRule .5s .95s cubic-bezier(.7, 0, .2, 1) forwards;
}
@keyframes introRule { to { width: 130px; } }

.intro-tagline {
  grid-area: 3 / 1;
  font-family: 'Bebas Neue', sans-serif; letter-spacing: .28em; text-transform: uppercase;
  font-size: .9rem; color: rgba(240, 228, 200, .75);
  opacity: 0; animation: introLigne .5s 1.2s ease forwards;
}
@keyframes introLigne {
  from { opacity: 0; transform: translateY(9px); }
  to { opacity: 1; transform: none; }
}

/* ---------------------------------------------------------------- hero */
.seam-wrap { position: relative; }
#hero {
  /* --seam = hauteur de la couture oblique. Source unique : le clip-path ci-dessous
     ET le calage des pots en JS la lisent ici. Ne pas remettre la valeur en dur. */
  --seam: 7vw;
  position: relative; min-height: 100svh; display: grid; place-items: center; text-align: center;
  padding: 8rem 1.5rem 12vw; overflow: hidden; color: #fff;
  clip-path: polygon(0 0, 100% 0, 100% 100%, 0 calc(100% - var(--seam)));
}
.hero-bg { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; }
#hero .hero-veil {
  position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(180deg, rgba(28, 9, 4, .62), rgba(28, 9, 4, .38) 45%, rgba(28, 9, 4, .80));
}
.hero-content { position: relative; z-index: 2; max-width: 760px; }
/* Composition d'origine : le texte occupe la moitie DROITE du hero, les pots
   sont poses a gauche, du cote haut de la diagonale. Sous 1000 px il n'y a plus
   de place pour les deux : on revient au texte centre et aux pots sous le bouton. */
@media (min-width: 1001px) {
  #hero { place-items: center end; text-align: right; padding-right: clamp(2rem, 6vw, 6rem); }
  .hero-rule { margin-left: auto; margin-right: 0; }
  .hero-quote { margin-left: auto; margin-right: 0; }
}
.hero-content h1 { font-size: clamp(2.8rem, 8vw, 6rem); color: #fff; text-shadow: 0 6px 40px rgba(0, 0, 0, .42); }
/* Le H1 contient deux lignes : le sujet (petit, doré) puis la marque (grand).
   La petite ligne garde exactement l'allure du surtitre qu'elle était avant. */
.hero-content h1 .eyebrow { display: block; line-height: 1.5; text-shadow: none; }
.hero-content h1 .hero-marque { display: block; }
/* L'affiche du hero : même cadrage que la vidéo, posée juste dessous. */
.hero-affiche { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 0; }
.hero-rule { display: block; width: 88px; height: 3px; background: var(--gold); margin: 1.6rem auto 1.5rem; }
.hero-quote {
  font-family: 'Fraunces', Georgia, serif; font-style: italic;
  font-size: clamp(1.02rem, 1.9vw, 1.35rem); line-height: 1.5;
  color: rgba(255, 255, 255, .9); max-width: 52ch; margin-inline: auto;
}
.hero-quote cite {
  display: block; margin-top: 1rem; font-style: normal; font-family: 'Bebas Neue', sans-serif;
  letter-spacing: .2em; text-transform: uppercase; font-size: .82rem; color: var(--gold);
}
.hero-content .btn { margin-top: 2rem; }

/* ---------------------------------------------------------------- bande produits */
.products { background: var(--cream-2); padding: clamp(5rem, 11vw, 9rem) clamp(1.2rem, 5vw, 4rem) clamp(4.5rem, 9vw, 7.5rem); }
/* La colonne images prend plus de place que le texte : à parts égales, la mosaïque
   était trop petite et toute la section paraissait tassée. */
.products-inner {
  width: min(100%, var(--maxw)); margin-inline: auto;
  display: grid; grid-template-columns: .82fr 1.18fr;
  gap: clamp(2rem, 5vw, 4.5rem); align-items: center;
}
/* Sous 900 px les deux colonnes deviennent illisibles : on empile, texte d'abord. */
@media (max-width: 900px) {
  .products-inner { grid-template-columns: 1fr; gap: 2.4rem; }
  .pp-haute { margin-top: 0; }
}
.products-text h2 { font-size: clamp(2.2rem, 5.5vw, 4rem); margin: .4rem 0 1.1rem; }
.products-text p { color: var(--muted); max-width: 46ch; }
.products-text .btn { margin-top: 1.6rem; }
/* Branches décoratives en fond. Le dessin de vigne vient de la boutique ; posé
   très pâle de part et d'autre, il donne du fond à une section qui n'était qu'un
   texte à côté de trois photos. Purement ornemental : aria-hidden dans le HTML,
   pointer-events: none ici, et masqué sous 860 px où il n'y a plus la place. */
.products { position: relative; overflow: hidden; }
.products-deco {
  position: absolute; z-index: 0; pointer-events: none; user-select: none;
  width: clamp(240px, 26vw, 420px); height: auto; opacity: .13;
}
.products-deco.deco-g { left: -6%; bottom: -8%; transform: rotate(-8deg); }
.products-deco.deco-d { right: -7%; top: -12%; transform: scaleX(-1) rotate(-4deg); }
@media (max-width: 860px) { .products-deco { display: none; } }

.products-inner { position: relative; z-index: 1; }

/* Filet doré sous le titre, comme dans le hero : il pose le rythme typographique
   au lieu de laisser le paragraphe coller au h2. */
.products-rule {
  display: block; width: 68px; height: 3px; background: var(--gold);
  margin: 0 0 1.4rem;
}

/* Mosaïque : une grande photo qui descend plus bas que les deux autres, pour
   casser l'alignement au cordeau qui rendait le bloc plat. */
.products-photos {
  display: grid; grid-template-columns: 1.15fr 1fr;
  gap: clamp(.7rem, 1.4vw, 1.1rem); align-items: start;
}
.products-photos figure { margin: 0; position: relative; }
.products-photos img {
  width: 100%; height: 100%; object-fit: cover;
  border-radius: var(--r); box-shadow: var(--shadow-lg); display: block;
}
.pp-grande { grid-row: 1 / span 2; }
.pp-grande img { aspect-ratio: 3 / 4.6; }
.pp-haute img, .pp-basse img { aspect-ratio: 4 / 3; }
/* décalage vers le bas : les deux petites photos ne démarrent pas au même niveau
   que la grande, ce qui suffit à animer la composition sans rien faire flotter */
.pp-haute { margin-top: clamp(1.4rem, 3vw, 2.6rem); }

/* Légende posée sur la grande photo, dans le dégradé sombre du bas. */
.pp-grande figcaption {
  position: absolute; left: 0; right: 0; bottom: 0;
  padding: 2.4rem 1.1rem .95rem;
  border-radius: 0 0 var(--r) var(--r);
  background: linear-gradient(180deg, rgba(28, 9, 4, 0), rgba(28, 9, 4, .78));
  color: #fff; font-family: 'Bebas Neue', sans-serif;
  letter-spacing: .14em; text-transform: uppercase; font-size: .82rem; line-height: 1.35;
}
.pp-grande figcaption span {
  display: block; color: var(--gold); font-size: .72rem; letter-spacing: .18em;
}

/* Pots posés sur la couture, côté GAUCHE — là où la diagonale remonte, donc là où
   ils mordent le plus sur le hero. Les deux culots sont de NIVEAU ; c'est le groupe
   entier qui suit la couture, via le `top` calculé dans main.js à partir du bord
   DROIT du groupe (le point le plus bas de la diagonale sous les pots). */
.straddle-jars {
  /* --pose : la CSS decide du parti pris, le JS le lit (pas de point de rupture
     duplique dans main.js). --pot-h : hauteur du grand pot, que le JS peut
     reduire si la place a droite du texte du hero ne suffit pas. */
  --pose: droite;
  --pot-h: clamp(150px, 24vw, 350px);
  position: absolute; left: clamp(.7rem, 2.6vw, 3rem); z-index: 5;
  display: flex; align-items: flex-end;
  /* Gouttiere volontairement minuscule : les visuels portent leur ombre incrustee,
     qui ajoute ~13 % de largeur transparente a droite du grand pot. L espace VU
     entre les deux pots (~50 px a 1474) vient de la, pas de ce gap. */
  gap: clamp(0px, .8vw, 12px);
  pointer-events: none;
}
.straddle-jars .jar { position: relative; }
/* AUCUNE ombre CSS ici, volontairement.
   Les visuels du hero sont recadres sur leur contenu VISIBLE : ils portent donc
   deja leur ombre portee, celle de la photo produit. Y ajouter quoi que ce soit
   la dedouble — une ellipse ::after posait une tache detachee sous le bocal, et
   un filter: drop-shadow travaille sur TOUT le canal alpha (ombre incrustee
   comprise) et en dessine une copie decalee. Verifie en rendu compare le
   07/09/2026 : l image seule est nettement plus juste. */
.straddle-jars .jar img {
  display: block; width: auto; height: var(--pot-h); object-fit: contain;
}
.straddle-jars .j-petit img { height: calc(var(--pot-h) * .74); }

/* Pose de repli : les pots reviennent au centre, sous le bouton. Deux declencheurs.
   1. Le point de rupture ci-dessous, pour les petits ecrans.
   2. La classe .pots-centres, posee par le JS quand la citation centree du hero
      mange la place a droite : mieux vaut des pots centres a leur taille normale
      que des pots a droite rapetisses de 30 %. */
/* Pose centrée : le groupe occupe TOUTE la largeur et centre son contenu.
   Avec `left: 50%` seul, la largeur de rétrécissement d'un élément absolu est
   plafonnée à « largeur du conteneur moins left » — soit la moitié de l'écran.
   Les deux pots étaient donc comprimés à 92 px au lieu de 168, et seul
   `object-fit: contain` évitait qu'ils paraissent déformés. */
@media (max-width: 1000px) {
  .straddle-jars {
    --pose: centre;
    left: 0; right: 0; transform: none; justify-content: center;
  }
}
/* Sur téléphone les pots faisaient 150 px, perdus au milieu du hero. On les cale
   sur la largeur de l'écran plutôt que sur une valeur fixe : les deux visuels
   occupent chacun 0,893 × leur hauteur en largeur de boîte, soit 1,79 fois la
   hauteur pour le groupe. À 50vw, le groupe tient dans 90 % de l'écran — assez
   grand pour exister, sans jamais déborder, même sur un 320 px. */
@media (max-width: 900px) {
  /* Réduits : à 50vw les deux boîtes occupaient 338 px sur un écran de 375, avec
     3 px entre elles — elles se touchaient et mangeaient toute la largeur.
     À 40vw le groupe tient dans ~70 % de l'écran et respire. */
  .straddle-jars {
    --pot-h: clamp(128px, 40vw, 220px);
    gap: clamp(10px, 4vw, 26px);
  }
}

/* Le fond devient une vidéo sur téléphone : une image fixe pardonne les zones
   claires, une vidéo qui bouge non. On renforce le voile pour que la citation et
   le bouton restent lisibles quelle que soit l'image à l'écran. */
@media (max-width: 900px) {
  #hero .hero-veil {
    background: linear-gradient(180deg,
      rgba(28, 9, 4, .72), rgba(28, 9, 4, .58) 45%, rgba(28, 9, 4, .86));
  }
}
.straddle-jars.pots-centres {
  --pose: centre;
  left: 0; right: 0; transform: none; justify-content: center;
}

/* ---------------------------------------------------------------- piliers (bloc centré) */
.piliers-block { width: min(100%, var(--narrow)); margin-inline: auto; text-align: center; display: grid; justify-items: center; }
.piliers-icon { width: clamp(48px, 7vw, 74px); height: auto; opacity: .85; margin-bottom: 1.2rem; }
.piliers-block h2 { color: #fff; font-size: clamp(2rem, 4.6vw, 3.2rem); }
.piliers-lead { color: rgba(240, 228, 200, .85); margin-top: 1.2rem; font-size: clamp(1rem, 1.5vw, 1.1rem); }

/* ---------------------------------------------------------------- meilleures ventes */
.bestsell { padding: clamp(3.5rem, 7vw, 6rem) clamp(1.2rem, 5vw, 4rem); background: var(--cream-3); }
.bestsell-inner {
  width: min(100%, var(--maxw)); margin-inline: auto;
  display: grid; grid-template-columns: minmax(250px, .8fr) 2fr; gap: clamp(1.6rem, 3vw, 2.6rem); align-items: stretch;
}
.bs-promo {
  position: relative; overflow: hidden; border-radius: var(--r); color: var(--cream-2);
  background: linear-gradient(150deg, var(--ox), var(--ox-d));
  padding: clamp(1.8rem, 3vw, 2.4rem); display: flex; flex-direction: column;
}
.bs-promo h2 { color: #fff; font-size: clamp(1.6rem, 3vw, 2.3rem); margin: .35rem 0 .9rem; }
.bs-promo-txt { color: rgba(240, 228, 200, .8); font-size: .94rem; }
.bs-promo-btn { align-self: flex-start; margin-top: 1.4rem; background: var(--gold); color: #fff; border-color: var(--gold); position: relative; z-index: 2; }
.bs-promo-btn:hover { background: var(--gold-d); border-color: var(--gold-d); }
.bs-promo-img { margin-top: auto; padding-top: 1.6rem; display: flex; justify-content: center; }
.bs-promo-img img { width: auto; height: clamp(150px, 20vw, 230px); object-fit: contain; filter: drop-shadow(0 22px 34px rgba(12, 5, 2, .5)); }

/* min-width:0 indispensable : par défaut une piste de grille vaut `minmax(auto, …)`,
   donc la colonne s'élargit à la taille de .bs-track (6 cartes ≈ 1470 px) au lieu de
   laisser le défilement horizontal faire son travail — la page débordait de ~500 px. */
.bs-main { min-width: 0; }
.bs-head { display: flex; justify-content: space-between; align-items: flex-end; gap: 1.2rem; margin-bottom: 1.6rem; }
.bs-head h2 { font-size: clamp(1.6rem, 3vw, 2.3rem); }
.bs-arrows { display: flex; gap: .55rem; flex-shrink: 0; }
.bs-arrow {
  width: 46px; height: 46px; border: 1px solid var(--line); border-radius: 50%; background: #fff;
  font-size: 1.5rem; line-height: 1; color: var(--ink); display: grid; place-items: center; transition: .25s;
}
.bs-arrow:hover { background: var(--gold); border-color: var(--gold); color: #fff; }
.bs-track {
  display: flex; gap: 1rem; overflow-x: auto; scroll-behavior: smooth;
  scroll-snap-type: x mandatory; padding-bottom: .6rem;
  /* Le geste horizontal reste DANS la bande. Sans ca, un balayage qui arrive
     au bout se propage au document et au navigateur : la page semble partir
     sur le cote, et sur certains telephones le geste declenche le retour en
     arriere. C'est ce qui donne l'impression d'un debordement alors que la
     page, elle, ne deborde pas d'un pixel. */
  overscroll-behavior-x: contain;
  scrollbar-width: thin; scrollbar-color: var(--taupe) transparent;
}
.bs-track::-webkit-scrollbar { height: 6px; }
.bs-track::-webkit-scrollbar-thumb { background: var(--taupe); border-radius: 3px; }
.bs-card {
  flex: 0 0 clamp(180px, 22vw, 232px); scroll-snap-align: start; background: #fff;
  border: 1px solid var(--line); border-radius: var(--r); overflow: hidden;
  display: flex; flex-direction: column; transition: transform .3s, box-shadow .3s;
}
.bs-card:hover { transform: translateY(-5px); box-shadow: var(--shadow-lg); }
.bs-card-media { position: relative; background: var(--cream-3); aspect-ratio: 1; display: grid; place-items: center; padding: 1rem; }
.bs-card-media img { max-width: 100%; max-height: 100%; width: auto; object-fit: contain; transition: transform .4s; }
.bs-card:hover .bs-card-media img { transform: scale(1.06); }
.bs-card-body { padding: 1rem 1.1rem 1.2rem; display: flex; flex-direction: column; flex: 1; }
.bs-card-cat { font-family: 'Bebas Neue', sans-serif; letter-spacing: .16em; text-transform: uppercase; font-size: .74rem; color: var(--gold-d); }
.bs-card-body h3 { font-size: 1.02rem; margin: .2rem 0 .9rem; line-height: 1.2; }
.bs-card-foot { display: flex; justify-content: space-between; align-items: baseline; gap: .6rem; margin-top: auto; padding-top: .8rem; border-top: 1px solid var(--line); }
.bs-price { font-family: 'Fraunces', serif; font-weight: 800; font-size: 1.08rem; color: var(--ox); }
.bs-price em { display: block; font-style: normal; font-family: 'Inter', sans-serif; font-weight: 400; font-size: .66rem; color: var(--muted); }
.bs-buy { font-size: .78rem; font-weight: 600; letter-spacing: .06em; text-transform: uppercase; color: var(--gold-d); }
.bs-card:hover .bs-buy { color: var(--ox); }

/* ---------------------------------------------------------------- responsive */
@media (max-width: 860px) {
  #hero { clip-path: polygon(0 0, 100% 0, 100% calc(100% - 11vw), 0 100%); padding-bottom: 16vw; }
  .products-inner { grid-template-columns: 1fr; }
  .products-photos img:first-child { grid-row: auto; aspect-ratio: 4 / 3; }
  .bestsell-inner { grid-template-columns: 1fr; }
}

@media (prefers-reduced-motion: reduce) {
  .intro { animation: none; display: none; }
  .bs-track { scroll-behavior: auto; }
}

/* ------------------------------------------------- « Un mets d'exception » */
/* Ancienne version : bloc centré, petite spirale, un pavé de texte, du vide
   autour. Ici le texte tient une colonne, la photo l'autre, et les arguments
   noyés dans le paragraphe deviennent une ligne de faits. Pleine largeur,
   aucune carte flottante — les faits sont séparés par de simples filets. */
.mets { position: relative; overflow: hidden; }

/* La spirale passe de petite icône centrée à filigrane : elle donne de la
   profondeur au fond oxblood sans occuper la place du contenu. */
.mets-filigrane {
  position: absolute; left: -8%; bottom: -18%;
  width: min(42vw, 520px); height: auto;
  opacity: .07; pointer-events: none;
}
/* Sous 900 px le texte et la photo s'empilent et occupent toute la largeur :
   le filigrane passerait derrière le texte au lieu de meubler un vide. */
@media (max-width: 899px) { .mets-filigrane { display: none; } }

.mets-haut {
  position: relative;
  display: grid; grid-template-columns: 1fr;
  gap: clamp(2rem, 5vw, 4.5rem); align-items: center;
}
@media (min-width: 900px) { .mets-haut { grid-template-columns: 1.05fr .95fr; } }

.mets-texte h2 { color: #fff; font-size: clamp(2rem, 4.4vw, 3.1rem); margin-top: .45rem; }
.mets-rule { display: block; width: 62px; height: 2px; background: var(--gold); margin: 1.35rem 0; }
.mets .piliers-lead {
  margin: 0; color: rgba(240, 228, 200, .85);
  font-size: clamp(1rem, 1.5vw, 1.1rem); line-height: 1.7;
}
.mets-signature {
  margin-top: 1.35rem; color: var(--gold);
  font-family: 'Fraunces', Georgia, serif; font-style: italic;
  font-size: clamp(1.05rem, 1.9vw, 1.3rem); line-height: 1.45;
}

.mets-photo { margin: 0; }
.mets-photo img {
  display: block; width: 100%;
  height: clamp(240px, 36vw, 420px); object-fit: cover;
}
.mets-photo figcaption {
  margin-top: .75rem; font-size: .82rem; letter-spacing: .03em;
  color: rgba(240, 228, 200, .6);
}
.mets-photo em { font-style: italic; }

/* Ligne de faits. Les filets sont posés au cas par cas plutôt qu'avec un
   « li + li » : en deux colonnes, la troisième cellule ouvre une rangée et
   hériterait d'un filet à gauche qui ne sépare rien. */
.mets-faits {
  list-style: none; margin: clamp(2.6rem, 5vw, 4rem) auto 0;
  width: min(100% - 2.4rem, var(--maxw));
  display: grid; grid-template-columns: repeat(2, 1fr);
  border-top: 1px solid rgba(240, 228, 200, .16);
}
.mets-faits li {
  padding: clamp(1.3rem, 2.6vw, 1.9rem) clamp(.9rem, 2vw, 1.6rem);
}
.mets-faits li:nth-child(2n) { border-left: 1px solid rgba(240, 228, 200, .16); }
.mets-faits li:nth-child(-n+2) { border-bottom: 1px solid rgba(240, 228, 200, .16); }

@media (min-width: 760px) {
  .mets-faits { grid-template-columns: repeat(4, 1fr); }
  .mets-faits li:nth-child(-n+2) { border-bottom: 0; }
  .mets-faits li + li { border-left: 1px solid rgba(240, 228, 200, .16); }
}

.mets-faits b {
  display: block; margin-bottom: .4rem;
  font-family: 'Bebas Neue', sans-serif; font-weight: 400;
  letter-spacing: .14em; text-transform: uppercase;
  color: var(--gold); font-size: 1rem;
}
.mets-faits span { color: rgba(240, 228, 200, .8); font-size: .92rem; line-height: 1.55; }
