/* theme.css — Les Couvreurs Compagnons
   Bloc 1 : CSS de maquette-reference.html, repris INTÉGRALEMENT et sans retouche.
   Bloc 2 : adaptations WordPress / WPBakery (voir le séparateur en bas de fichier).
   Les polices sont déclarées à part dans fonts.css (auto-hébergées). */

:root{
  --rouge:#DE1D25;
  --rouge-fonce:#A9151B;
  --jaune:#FBD117;
  --ardoise:#1B2028;
  --ardoise-2:#262D38;
  --zinc:#8894A6;
  --craie:#F7F6F3;
  --craie-2:#EDEAE4;
  --encre:#14181E;
  --ligne:#DFDBD3;
  --pente:56px;
  --display:'Archivo',system-ui,sans-serif;
  --texte:'Karla',system-ui,sans-serif;

  /* --- Sections claires « pierre jaune » : devis --- */
  --fA:#EAE0C9;
  --fA-txt:#1B2028;
  --fA-txt2:#5E5744;
  --fA-accent:#A9151B;
  --fA-trame:rgba(0,0,0,.032);
  --fA-ombre:rgba(70,58,30,.22);
  /* --- Section « L'entreprise » : rouge de marque --- */
  --fB:#A9151B;
  --fB-txt:#FFFFFF;
  --fB-txt2:#F2CFD1;
  --fB-accent:#FBD117;
  --fB-ligne:rgba(255,255,255,.24);
  --fB-trame:rgba(255,255,255,.06);
  /* --- Bande de toit sous le hero --- */
  --bande:#DE1D25;

  /* --- FOND DU HERO — traitement A : photo en filigrane (par défaut) --- */
  --h-bg:#EAE0C9;
  --h-txt:#1B2028;
  --h-txt2:#463F2F;
  --h-accent:#A9151B;
  --h-ombre:rgba(70,58,30,.26);
  --h-photo-op:1;
  --h-photo-filtre:grayscale(.28) sepia(.16) contrast(.94) brightness(1.03);
  --h-voile:linear-gradient(100deg,rgba(238,229,208,.88) 0%,rgba(238,229,208,.74) 34%,rgba(238,229,208,.50) 68%,rgba(238,229,208,.40) 100%);
  --h-trame:transparent;
}
/* --- THÈME « ARDOISE » : version initiale --- */
html[data-theme="ardoise"]{
  --fA:#1B2028;--fA-txt:#fff;--fA-txt2:#C3CCD8;--fA-accent:#FBD117;
  --fA-trame:rgba(255,255,255,.05);--fA-ombre:rgba(0,0,0,.34);
  --fB:#1B2028;--fB-txt:#fff;--fB-txt2:#B7C1CE;--fB-accent:#FBD117;
  --fB-ligne:rgba(255,255,255,.13);--fB-trame:rgba(255,255,255,.05);
  --bande:transparent;--bande-h:0;
}
*{box-sizing:border-box}
html{scroll-behavior:smooth}
body{
  margin:0;background:var(--craie);color:var(--encre);
  font-family:var(--texte);font-size:17px;line-height:1.65;-webkit-font-smoothing:antialiased;
}
img{max-width:100%;display:block}
a{color:inherit}
.wrap{max-width:1180px;margin:0 auto;padding:0 24px}
.sec{padding:104px 0}
.sec--serre{padding:72px 0}

/* ---------- typo ---------- */
h1,h2,h3,h4{font-family:var(--display);margin:0;letter-spacing:-.022em;line-height:1.08;font-weight:800}
h1{font-size:clamp(27px,3.6vw,44px)}
h2{font-size:clamp(28px,3.7vw,44px)}
h3{font-size:20px;letter-spacing:-.01em;font-weight:700}
p{margin:0 0 16px}
.eyebrow{
  font-family:var(--display);font-weight:700;font-size:12px;letter-spacing:.19em;
  text-transform:uppercase;color:var(--rouge);margin:0 0 16px;display:flex;align-items:center;gap:12px
}
.eyebrow::before{content:"";width:26px;height:3px;background:var(--rouge);display:block}
.eyebrow--clair{color:var(--jaune)}
.eyebrow--clair::before{background:var(--jaune)}
.lead{font-size:19px;color:#4A5260;max-width:62ch}
.mute{color:#5B6472}

/* ---------- boutons ---------- */
.btn{
  display:inline-flex;align-items:center;gap:10px;font-family:var(--display);font-weight:700;
  font-size:15px;letter-spacing:.01em;padding:15px 26px;border-radius:2px;text-decoration:none;
  border:2px solid transparent;transition:transform .15s ease,background .15s ease,color .15s ease;
}
.btn:hover{transform:translateY(-2px)}
.btn--rouge{background:var(--rouge);color:#fff}
.btn--rouge:hover{background:var(--rouge-fonce)}
.btn--fant{border-color:currentColor;background:transparent}
.btn--fant:hover{background:var(--encre);color:var(--craie);border-color:var(--encre)}
.btn--fant-clair:hover{background:#fff;color:var(--encre);border-color:#fff}
.btn--jaune{background:var(--jaune);color:var(--encre)}
.btn--sm{padding:11px 18px;font-size:14px}

/* ---------- barre utilitaire + header ---------- */
.util{background:var(--encre);color:#9AA5B4;font-size:13.5px}
.util .wrap{display:flex;justify-content:space-between;align-items:center;gap:20px;padding-top:9px;padding-bottom:9px}
.util strong{color:#fff;font-weight:500}
.util-drt{display:flex;gap:26px;align-items:center}
.util a{text-decoration:none}
.util a:hover{color:#fff}

.hdr{position:sticky;top:0;z-index:60;background:#fff;border-bottom:1px solid var(--ligne)}
.hdr .wrap{display:flex;align-items:center;gap:32px;padding-top:12px;padding-bottom:12px}
.marque{display:flex;align-items:center;gap:13px;text-decoration:none;flex-shrink:0}
.marque img{width:50px;height:50px;object-fit:contain}
.marque b{font-family:var(--display);font-weight:800;font-size:21px;letter-spacing:-.02em;display:block;line-height:1}
.marque span{font-size:11px;letter-spacing:.13em;text-transform:uppercase;color:#78818F;font-weight:500}
.nav{display:flex;gap:28px;margin-left:auto;font-family:var(--display);font-weight:600;font-size:15px}
.nav a{text-decoration:none;padding:4px 0;border-bottom:2px solid transparent}
.nav a:hover{border-color:var(--rouge)}
.hdr-cta{display:flex;gap:10px;align-items:center}
.tel-hdr{font-family:var(--display);font-weight:800;font-size:17px;text-decoration:none;white-space:nowrap;display:flex;align-items:center;gap:8px}
.tel-hdr svg{color:var(--rouge)}
.burger{display:none;background:none;border:1px solid var(--ligne);border-radius:2px;padding:9px 11px;margin-left:auto}
.burger span{display:block;width:20px;height:2px;background:var(--encre);margin:4px 0}

/* ---------- hero ---------- */
.hero{
  position:relative;background:var(--h-bg);color:var(--h-txt);overflow:hidden;
  padding:96px 0 calc(96px + var(--pente));
}
/* calque photo + voile (filigrane) */
.hero-photo{
  position:absolute;inset:0;z-index:0;
  background-image:url("assets/hero-neuchatel.webp");
  background-size:cover;background-position:center 48%;
  opacity:var(--h-photo-op);filter:var(--h-photo-filtre);
}
.hero::before{ /* voile de lisibilité + trame */
  content:"";position:absolute;inset:0;z-index:1;
  background:var(--h-voile),repeating-linear-gradient(115deg,var(--h-trame) 0 1px,transparent 1px 13px);
}
/* pente de toit : bande rouge + liseré jaune, tracée en SVG pour rester nette
   quelle que soit la largeur de l'écran */
.pente{position:absolute;left:0;right:0;bottom:-1px;width:100%;height:calc(var(--pente) + 1px);z-index:3;display:block}
.hero .wrap{position:relative;z-index:2}
.hero .eyebrow--clair{color:var(--h-accent)}
.hero .eyebrow--clair::before{background:var(--h-accent)}
.hero-grid{display:grid;grid-template-columns:1.15fr .85fr;gap:56px;align-items:center}
.hero h1{max-width:24ch;line-height:1.14}
.hero h1 em{font-style:normal;color:var(--h-accent)}
.hero p.lead{color:var(--h-txt2);margin-top:22px}
.hero-actions{display:flex;flex-wrap:wrap;gap:14px;margin-top:32px}
.hero-note{margin-top:20px;font-size:14px;color:var(--h-txt2)}
.hero .btn--fant{color:var(--h-txt)}
.hero .btn--fant:hover{background:var(--h-txt);color:var(--h-bg);border-color:var(--h-txt)}

/* carte avis dans le hero */
.carte-avis{
  background:#fff;color:var(--encre);border-radius:3px;padding:26px 26px 22px;
  box-shadow:0 26px 60px var(--h-ombre);border-top:5px solid var(--rouge)
}
.avis-tete{display:flex;align-items:center;gap:12px;margin-bottom:6px}
.avis-note{font-family:var(--display);font-weight:800;font-size:42px;line-height:1}
.etoiles{color:#F5A623;font-size:17px;letter-spacing:2px}
.carte-avis .src{font-size:13px;color:#6C7583;margin:0}
.carte-avis blockquote{margin:18px 0 0;padding-top:18px;border-top:1px solid var(--craie-2);font-size:15.5px;line-height:1.6}
.carte-avis cite{display:block;margin-top:10px;font-style:normal;font-size:13px;color:#6C7583}

/* ---------- bandeau réassurance ---------- */
.reass{background:#fff;border-bottom:1px solid var(--ligne)}
.reass-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:0}
.reass-item{padding:30px 26px;border-right:1px solid var(--ligne);display:flex;gap:14px;align-items:flex-start}
.reass-item:last-child{border-right:0}
.reass-item svg{flex-shrink:0;color:var(--rouge);margin-top:2px}
.reass-item b{font-family:var(--display);font-weight:700;font-size:15.5px;display:block;line-height:1.3}
.reass-item span{font-size:14px;color:#6C7583;line-height:1.5}

/* ---------- urgence ---------- */
.urgence{background:var(--encre);color:#fff;position:relative;overflow:hidden}
.hazard{height:12px;background:repeating-linear-gradient(-45deg,var(--jaune) 0 18px,var(--encre) 18px 36px)}
.urgence .wrap{display:flex;align-items:center;justify-content:space-between;gap:32px;padding-top:38px;padding-bottom:38px;flex-wrap:wrap}
.urgence h2{font-size:clamp(24px,3vw,34px)}
.urgence p{color:#A9B3C1;margin:8px 0 0;max-width:56ch;font-size:16px}
.puce-live{display:inline-flex;align-items:center;gap:9px;font-family:var(--display);font-weight:700;font-size:12px;letter-spacing:.17em;text-transform:uppercase;color:var(--jaune);margin-bottom:12px}
.puce-live i{width:9px;height:9px;border-radius:50%;background:var(--jaune);box-shadow:0 0 0 0 rgba(251,209,23,.7);animation:pulse 2s infinite}
@keyframes pulse{70%{box-shadow:0 0 0 12px rgba(251,209,23,0)}100%{box-shadow:0 0 0 0 rgba(251,209,23,0)}}
.tel-gros{font-family:var(--display);font-weight:800;font-size:clamp(28px,3.4vw,40px);text-decoration:none;letter-spacing:-.02em;display:block}
.tel-gros:hover{color:var(--jaune)}

/* ---------- prestations ---------- */
.tete-sec{max-width:64ch;margin-bottom:52px}
.presta-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:26px}
.presta{
  background:#fff;border:1px solid var(--ligne);border-radius:3px;overflow:hidden;
  display:flex;flex-direction:column;transition:transform .2s ease,box-shadow .2s ease
}
.presta:hover{transform:translateY(-5px);box-shadow:0 18px 44px rgba(20,24,30,.11)}
.presta-visuel{
  height:190px;position:relative;background:var(--ardoise-2);
  background-image:repeating-linear-gradient(115deg,rgba(255,255,255,.05) 0 1px,transparent 1px 12px);
  display:flex;align-items:flex-end;padding:16px
}
.presta-visuel span{font-size:11.5px;letter-spacing:.14em;text-transform:uppercase;color:#8F9AAA;font-family:var(--display);font-weight:600}
.presta-corps{padding:26px 26px 28px;display:flex;flex-direction:column;flex:1}
.presta h3{margin-bottom:10px}
.presta p{font-size:15.5px;color:#5B6472}
.presta ul{list-style:none;padding:0;margin:0 0 22px;font-size:15px}
.presta li{padding:7px 0 7px 24px;position:relative;border-top:1px solid var(--craie-2)}
.presta li::before{content:"";position:absolute;left:0;top:15px;width:9px;height:9px;background:var(--rouge);clip-path:polygon(50% 0,100% 100%,0 100%)}
.presta .lien{margin-top:auto;font-family:var(--display);font-weight:700;font-size:14.5px;color:var(--rouge);text-decoration:none;display:inline-flex;gap:8px;align-items:center}
.presta .lien:hover{gap:14px}
.presta--urgence{border-color:var(--rouge);border-width:2px}
.badge-24{position:absolute;top:0;right:0;background:var(--rouge);color:#fff;font-family:var(--display);font-weight:800;font-size:12px;letter-spacing:.12em;padding:8px 14px}

.sous-presta{display:flex;flex-wrap:wrap;gap:10px;margin-top:34px;align-items:center}
.sous-presta b{font-family:var(--display);font-size:14px;margin-right:6px}
.pill{background:#fff;border:1px solid var(--ligne);border-radius:100px;padding:8px 16px;font-size:14.5px}

/* ---------- pourquoi / réassurance longue ---------- */
.pourquoi{background:var(--fB);color:var(--fB-txt);position:relative;overflow:hidden}
.pourquoi::before{content:"";position:absolute;inset:0;
  background:repeating-linear-gradient(115deg,var(--fB-trame) 0 1px,transparent 1px 13px)}
.pourquoi .wrap{position:relative;z-index:2}
.pourquoi .eyebrow--clair{color:var(--fB-accent)}
.pourquoi .eyebrow--clair::before{background:var(--fB-accent)}
.pourquoi-grid{display:grid;grid-template-columns:.9fr 1.1fr;gap:64px;align-items:start}
.pourquoi h2{max-width:16ch}
.pourquoi .lead{color:var(--fB-txt2)}
.preuves{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:var(--fB-ligne)}
.preuve{background:var(--fB);padding:26px 24px}
.preuve b{font-family:var(--display);font-weight:800;font-size:16px;display:block;margin-bottom:7px}
.preuve span{font-size:14.5px;color:var(--fB-txt2);line-height:1.55}
.chiffres{display:flex;gap:44px;margin-top:36px;flex-wrap:wrap}
.chiffre b{font-family:var(--display);font-weight:800;font-size:40px;color:var(--fB-accent);display:block;line-height:1}
.chiffre span{font-size:14px;color:var(--fB-txt2)}

/* ---------- processus ---------- */
.etapes{display:grid;grid-template-columns:repeat(4,1fr);gap:0;border-top:2px solid var(--encre)}
.etape{padding:30px 26px 30px 0;border-right:1px solid var(--ligne);position:relative}
.etape:last-child{border-right:0;padding-right:0}
.etape:not(:first-child){padding-left:26px}
.etape .num{font-family:var(--display);font-weight:800;font-size:13px;letter-spacing:.14em;color:var(--rouge);display:block;margin-bottom:14px}
.etape h3{font-size:18px;margin-bottom:8px}
.etape p{font-size:15px;color:#5B6472;margin:0}

/* ---------- réalisations (pose en tuiles) ---------- */
.real-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}
.real{position:relative;border-radius:3px;overflow:hidden;background:var(--ardoise-2)}
.real-grid .real:nth-child(2){transform:translateY(34px)}
.real-grid .real:nth-child(5){transform:translateY(34px)}
.real-visuel{
  aspect-ratio:4/3;
  background-image:repeating-linear-gradient(115deg,rgba(255,255,255,.05) 0 1px,transparent 1px 12px),
                   linear-gradient(160deg,#2E3644,#1B2028);
}
.real-info{position:absolute;left:0;right:0;bottom:0;padding:18px 20px;background:linear-gradient(transparent,rgba(15,18,23,.92) 55%);color:#fff}
.real-info b{font-family:var(--display);font-weight:700;font-size:16px;display:block}
.real-info span{font-size:13.5px;color:#B9C3D0;display:flex;align-items:center;gap:6px;margin-top:3px}
.real-grid+.centre{margin-top:70px}
.centre{text-align:center}

/* ---------- avis ---------- */
.avis{background:#fff}
.avis-entete{display:flex;align-items:center;gap:24px;flex-wrap:wrap;margin-bottom:44px;
  border:1px solid var(--ligne);border-left:5px solid var(--rouge);padding:22px 26px;border-radius:3px}
.avis-entete .g{font-family:var(--display);font-weight:800;font-size:34px;line-height:1}
.avis-cols{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}
.avis-carte{border:1px solid var(--ligne);border-radius:3px;padding:26px;background:var(--craie)}
.avis-carte .etoiles{margin-bottom:12px;display:block}
.avis-carte p{font-size:15.5px;line-height:1.62}
.avis-carte cite{font-style:normal;font-size:13.5px;color:#6C7583;display:block;margin-top:14px;padding-top:14px;border-top:1px solid var(--ligne)}

/* ---------- zones ---------- */
.zones{background:var(--craie-2)}
.zones-grid{display:grid;grid-template-columns:1fr 1.1fr;gap:56px;align-items:center}
.zones-liste{display:grid;grid-template-columns:repeat(2,1fr);gap:26px}
.zone b{font-family:var(--display);font-weight:800;font-size:15px;display:block;margin-bottom:8px;padding-bottom:8px;border-bottom:2px solid var(--rouge)}
.zone span{font-size:15px;color:#5B6472;line-height:1.8}

/* ---------- faq ---------- */
.faq details{border-bottom:1px solid var(--ligne);padding:22px 0}
.faq summary{font-family:var(--display);font-weight:700;font-size:18px;cursor:pointer;list-style:none;display:flex;justify-content:space-between;gap:20px;align-items:center}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";font-size:26px;color:var(--rouge);line-height:1;flex-shrink:0}
.faq details[open] summary::after{content:"–"}
.faq p{margin:14px 0 0;color:#5B6472;font-size:16px;max-width:76ch}

/* ---------- devis ---------- */
.devis{background:var(--fA);color:var(--fA-txt);position:relative;overflow:hidden}
.devis::before{content:"";position:absolute;inset:0;
  background:repeating-linear-gradient(115deg,var(--fA-trame) 0 1px,transparent 1px 13px)}
.devis .wrap{position:relative;z-index:2}
.devis .eyebrow--clair{color:var(--fA-accent)}
.devis .eyebrow--clair::before{background:var(--fA-accent)}
.devis-grid{display:grid;grid-template-columns:.85fr 1.15fr;gap:64px;align-items:start}
.devis .lead{color:var(--fA-txt2)}
.contact-bloc{margin-top:28px;display:grid;gap:16px}
.contact-item{display:flex;gap:13px;align-items:flex-start;font-size:15.5px;color:var(--fA-txt2)}
.contact-item svg{color:var(--fA-accent);flex-shrink:0;margin-top:3px}
.contact-item b{color:var(--fA-txt);font-family:var(--display);display:block;font-weight:700}
.form{background:#fff;color:var(--encre);padding:34px;border-radius:3px;border-top:5px solid var(--fA-accent);box-shadow:0 20px 50px var(--fA-ombre)}
.form-row{display:grid;grid-template-columns:1fr 1fr;gap:16px}
.champ{margin-bottom:16px}
.champ label{display:block;font-family:var(--display);font-weight:600;font-size:13px;letter-spacing:.04em;margin-bottom:6px}
.champ input,.champ select,.champ textarea{
  width:100%;padding:12px 14px;border:1px solid var(--ligne);border-radius:2px;font-family:var(--texte);
  font-size:16px;background:var(--craie);color:var(--encre)
}
.champ input:focus,.champ select:focus,.champ textarea:focus{outline:3px solid rgba(222,29,37,.28);border-color:var(--rouge)}
.champ textarea{min-height:110px;resize:vertical}
.form .btn{width:100%;justify-content:center;margin-top:6px}
.form small{display:block;margin-top:14px;font-size:13px;color:#6C7583;text-align:center}
/* Sous le bouton d envoi, 14 px de marge s ajoutaient à une ligne de <br> :
   l ensemble faisait plus de 40 px de vide. */
.form form > p small{margin-top:8px}

/* ---------- footer ---------- */
.pied{background:var(--encre);color:#8894A6;font-size:15px}
.pied-grid{display:grid;grid-template-columns:1.4fr 1fr 1fr 1fr;gap:40px;padding:64px 0 44px}
.pied h4{color:#fff;font-size:14px;letter-spacing:.13em;text-transform:uppercase;margin-bottom:16px;font-weight:700}
.pied a{text-decoration:none}
.pied a:hover{color:#fff}
.pied ul{list-style:none;padding:0;margin:0}
.pied li{padding:5px 0}
.pied .marque b{color:#fff}
.pied .marque span{color:#77808E}
.pied-bas{border-top:1px solid rgba(255,255,255,.1);padding:20px 0;display:flex;justify-content:space-between;gap:20px;flex-wrap:wrap;font-size:13.5px}

/* barre mobile collante */
.barre-mobile{display:none}

@media(max-width:1000px){
  .hero-grid,.pourquoi-grid,.zones-grid,.devis-grid{grid-template-columns:1fr;gap:44px}
  .reass-grid{grid-template-columns:1fr 1fr}
  .reass-item:nth-child(2){border-right:0}
  .reass-item:nth-child(1),.reass-item:nth-child(2){border-bottom:1px solid var(--ligne)}
  .presta-grid,.avis-cols,.real-grid{grid-template-columns:1fr 1fr}
  .etapes{grid-template-columns:1fr 1fr}
  .etape{padding:26px 22px 26px 0!important;border-bottom:1px solid var(--ligne)}
  .etape:nth-child(2n){border-right:0;padding-left:22px!important}
  .pied-grid{grid-template-columns:1fr 1fr}
}
@media(max-width:720px){
  body{font-size:16px}
  .sec{padding:68px 0}
  .util .wrap{display:none}
  .nav,.hdr-cta{display:none}
  .burger{display:block}
  .presta-grid,.avis-cols,.real-grid,.reass-grid,.zones-liste,.form-row,.preuves,.etapes{grid-template-columns:1fr}
  .reass-item{border-right:0;border-bottom:1px solid var(--ligne)}
  .real-grid .real:nth-child(2),.real-grid .real:nth-child(5){transform:none}
  .pied-grid{grid-template-columns:1fr}
  .barre-mobile{
    display:flex;position:fixed;left:0;right:0;bottom:0;z-index:80;border-top:1px solid rgba(0,0,0,.1)
  }
  .barre-mobile a{
    flex:1;padding:15px 8px;text-align:center;font-family:var(--display);font-weight:800;font-size:14.5px;
    text-decoration:none;display:flex;align-items:center;justify-content:center;gap:8px
  }
  .barre-mobile .m-tel{background:var(--rouge);color:#fff}
  .barre-mobile .m-devis{background:var(--jaune);color:var(--encre)}
  body{padding-bottom:56px}
}
@media(prefers-reduced-motion:reduce){
  *{animation:none!important;transition:none!important;scroll-behavior:auto!important}
}

/* ==========================================================================
   ADAPTATIONS WORDPRESS
   Tout ce qui précède est le CSS de maquette-reference.html, repris sans
   modification. Ce bloc contient les seuls ajouts nécessaires au passage sous
   WordPress + WPBakery. Ne rien changer au-dessus : la maquette est la référence.
   ========================================================================== */

/* --- Hero : la maquette pose la photo en background-image, mais le §11 du
   cahier des charges impose un <picture> (variante mobile, fetchpriority,
   preload) — impossible en CSS. On neutralise donc le background et on
   applique le même rendu à l'<img>, filtre et voile inchangés. --- */
.hero-photo{background-image:none}
.hero-photo img{
  position:absolute;inset:0;width:100%;height:100%;
  object-fit:cover;object-position:center 48%;
}

/* --- Neutralisation des conteneurs WPBakery ---
   Chaque section du thème sort son propre <section> pleine largeur à fond
   coloré. WPBakery l'enveloppe dans .vc_row > .vc_column_container, dont les
   marges négatives et le padding casseraient les fonds. On les remet à plat
   plutôt que d'obliger le client à cocher « row stretch » sur chaque bloc :
   le rendu reste correct même s'il déplace une section. --- */
.couvcompagnons-page .vc_row,
.couvcompagnons-page .vc_row .vc_column_container,
.couvcompagnons-page .vc_row .vc_column_container>.vc_column-inner,
.couvcompagnons-page .wpb_wrapper{margin:0;padding:0;width:100%}
.couvcompagnons-page .wpb_content_element{margin-bottom:0}
.couvcompagnons-page .vc_row{display:block}

/* --- Menu mobile ---
   La maquette montre le bouton burger mais pas le panneau déplié : il est
   décrit ici. Le panneau réutilise les couleurs du header. --- */
.nav-mobile{display:none}
@media(max-width:720px){
  .nav-mobile[data-ouvert="1"]{
    display:block;position:absolute;left:0;right:0;top:100%;
    background:#fff;border-bottom:1px solid var(--ligne);
    box-shadow:0 18px 40px rgba(20,24,30,.13);padding:8px 24px 20px
  }
  .nav-mobile a{
    display:block;padding:13px 0;text-decoration:none;
    font-family:var(--display);font-weight:600;font-size:16px;
    border-bottom:1px solid var(--craie-2)
  }
  .nav-mobile a:last-child{border-bottom:0}
  .nav-mobile .btn{width:100%;justify-content:center;margin-top:14px}
  .hdr{position:sticky}
  .hdr .wrap{position:relative}
}

/* --- Hero sans carte d'avis ---
   Tant que la note Google n'est pas vérifiée, la carte ne s'affiche pas (§2).
   Le hero repasse alors sur une seule colonne, sinon 40 % de la largeur
   resterait vide à droite du titre. --- */
.hero-grid--seul{grid-template-columns:1fr}
.hero-grid--seul h1{max-width:20ch}

/* --- Photo de prestation ---
   La maquette montre un aplat d'ardoise avec une légende. Dès qu'une vraie
   photo est choisie, elle remplit le cadre et la légende passe au-dessus. --- */
.presta-visuel img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.presta-visuel span{position:relative;z-index:1}
.presta-visuel .badge-24{position:absolute;z-index:2}

/* --- Photo de réalisation ---
   Les cartes de la maquette ont un visuel en dégradé d'ardoise ; dès qu'une
   image mise en avant existe, elle prend toute la place du cadre 4/3. --- */
.real-visuel{position:relative}
.real-visuel img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover}
.real a:hover .real-info b{text-decoration:underline}

/* --- Avant / après sur la fiche chantier --- */
.avant-apres{display:grid;grid-template-columns:1fr 1fr;gap:22px}
.avant-apres figure{margin:0}
.avant-apres img{border-radius:3px;width:100%}
.avant-apres figcaption{
  font-family:var(--display);font-weight:700;font-size:13px;letter-spacing:.14em;
  text-transform:uppercase;color:var(--rouge);margin-top:10px
}
@media(max-width:720px){.avant-apres{grid-template-columns:1fr}}

/* --- Pagination des archives --- */
.pagination{margin-top:50px;display:flex;justify-content:center}
.pagination .page-numbers{
  font-family:var(--display);font-weight:700;padding:10px 15px;text-decoration:none;
  border:1px solid var(--ligne);margin:0 4px;border-radius:2px;background:#fff
}
.pagination .page-numbers.current{background:var(--rouge);color:#fff;border-color:var(--rouge)}

/* --- Contact Form 7 ---
   Le balisage du formulaire reprend déjà les classes .form-row / .champ de la
   maquette (voir inc/form-devis.php) : il reste à neutraliser les conteneurs
   propres à CF7 et à styler ses messages. --- */
.form .wpcf7-form-control-wrap{display:block}
.form .wpcf7-form-control:not(.btn){
  width:100%;padding:12px 14px;border:1px solid var(--ligne);border-radius:2px;
  font-family:var(--texte);font-size:16px;background:var(--craie);color:var(--encre)
}
.form .wpcf7-form-control:not(.btn):focus{outline:3px solid rgba(222,29,37,.28);border-color:var(--rouge)}
.form textarea.wpcf7-form-control{min-height:110px;resize:vertical}
.form input[type="file"].wpcf7-form-control{padding:10px 12px;background:#fff}
.form .wpcf7-submit{width:100%;justify-content:center;margin-top:6px;cursor:pointer}
.form .wpcf7-not-valid-tip{color:var(--rouge-fonce);font-size:13.5px;margin-top:6px}
.form .wpcf7-response-output{
  margin:18px 0 0;padding:14px 16px;border:2px solid var(--ligne);border-radius:2px;font-size:15px
}
.form form.sent .wpcf7-response-output{border-color:#2E7D32;background:#F1F8F2}
.form form.invalid .wpcf7-response-output,
.form form.failed .wpcf7-response-output,
.form form.spam .wpcf7-response-output{border-color:var(--rouge);background:#FDF2F2}
.form .wpcf7-spinner{margin:10px auto 0;display:block}
/* Champ-piège anti-robot : invisible à l'œil, ignoré des lecteurs d'écran. */
.couvcompagnons-pot{position:absolute!important;left:-9999px;width:1px;height:1px;overflow:hidden}

/* --- Séparateur des liens légaux du pied de page ---
   La maquette écrit « Mentions légales · Protection des données ». Le point
   médian est tracé en bordure plutôt qu'en ::before : il ne doit pas devenir
   cliquable ni être lu par un lecteur d'écran. --- */
.pied-bas>span:last-child a+a{
  margin-left:12px;padding-left:12px;border-left:1px solid rgba(255,255,255,.18)
}

/* --- Accessibilité : lien d'évitement et texte réservé aux lecteurs d'écran --- */
.screen-reader-text{
  position:absolute!important;width:1px;height:1px;overflow:hidden;
  clip:rect(1px,1px,1px,1px);clip-path:inset(50%);white-space:nowrap
}
.lien-evitement{
  position:absolute;left:-9999px;z-index:999;padding:12px 20px;
  background:var(--rouge);color:#fff;font-family:var(--display);font-weight:700;text-decoration:none
}
.lien-evitement:focus{left:8px;top:8px}
:focus-visible{outline:3px solid rgba(222,29,37,.55);outline-offset:2px}

/* --- Barre d'admin WordPress : décale le header collant --- */
body.admin-bar .hdr{top:32px}
@media(max-width:782px){body.admin-bar .hdr{top:46px}}

/* --- Contenu éditorial classique (pages légales, articles) --- */
.contenu{max-width:76ch}
.contenu h2{font-size:clamp(24px,3vw,32px);margin:38px 0 14px}
.contenu h3{margin:28px 0 10px}
.contenu ul,.contenu ol{margin:0 0 18px;padding-left:22px}
.contenu li{padding:3px 0}
.contenu a{color:var(--rouge-fonce);text-decoration:underline}
.contenu img{margin:22px 0;border-radius:3px}
.contenu blockquote{
  margin:24px 0;padding:4px 0 4px 22px;border-left:4px solid var(--rouge);
  font-size:18px;color:#4A5260
}
.alignleft{float:left;margin:6px 26px 18px 0}
.alignright{float:right;margin:6px 0 18px 26px}
.aligncenter{margin-left:auto;margin-right:auto}
.wp-caption-text{font-size:14px;color:#6C7583;margin-top:8px}

/* Pages de communes : rupture de fond entre deux sections claires. */
.sec--blanc{background:#fff}
.zones-liste .zone a{color:inherit;text-decoration:underline;text-underline-offset:2px}
.zones-liste .zone a:hover{color:var(--rouge-fonce)}

.fil{font-size:14px;color:#6C7583;margin:0 0 18px}
.fil a{color:inherit;text-decoration:none;border-bottom:1px solid var(--ligne)}
.fil a:hover{color:var(--rouge-fonce)}
.fil [aria-current]{color:var(--encre)}

/* --- Avis Google : en-tête de carte (initiales, auteur, date, logo) --------- */
.avis-auteur{display:flex;align-items:center;gap:12px;margin-bottom:14px}
.avis-pastille{
  flex:0 0 auto;width:38px;height:38px;border-radius:50%;
  display:flex;align-items:center;justify-content:center;
  background:var(--rouge-fonce);color:#fff;
  font-family:Archivo,system-ui,sans-serif;font-weight:600;font-size:14px;letter-spacing:.5px
}
.avis-identite{display:flex;flex-direction:column;min-width:0;line-height:1.35}
.avis-identite b{font-size:15px}
.avis-date{font-size:13px;color:#6C7583}
.avis-marque{margin-left:auto;display:flex;align-items:center}
.avis-source{display:flex;align-items:center;gap:7px;font-size:14.5px;color:#5B6472}
.logo-g{display:block;flex:0 0 auto}

/* Carte d'avis du hero : logo Google et bloc auteur, compacts. */
.carte-avis .src{display:flex;align-items:center;gap:6px}
.avis-auteur--hero{margin-top:14px;gap:10px}
.avis-auteur--hero .avis-pastille{width:32px;height:32px;font-size:12.5px}
.avis-auteur--hero .avis-identite b{font-size:14px}
.avis-auteur--hero .avis-date{font-size:12.5px}

/* ==========================================================================
   Contenu éditorial — habillage typographique
   Les idiomes sont repris de la maquette, aucun n'est inventé :
   le triangle rouge vient des listes de prestation (.presta li::before),
   les numéros 01/02 de la section processus (.etape .num), le chapeau des
   .lead. S'applique partout où .contenu est employé — pages de prestation,
   texte local des communes, pages légales — pour que le site n'ait qu'une
   seule écriture typographique.
   ========================================================================== */

/* Chapeau : le premier paragraphe du bloc porte l'accroche. */
.contenu > p:first-child{font-size:18.5px;line-height:1.65;color:#3C444F}

.contenu h3{
  font-family:var(--display);font-weight:700;
  margin:40px 0 12px;padding-top:18px;border-top:1px solid var(--craie-2)
}
.contenu h3:first-child{margin-top:0;padding-top:0;border-top:0}

/* Listes à puces : triangle rouge et filet, comme les cartes de prestation. */
.contenu ul{list-style:none;padding:0;margin:0 0 22px}
.contenu ul li{padding:9px 0 9px 26px;position:relative;border-top:1px solid var(--craie-2)}
.contenu ul li::before{
  content:"";position:absolute;left:0;top:17px;width:9px;height:9px;
  background:var(--rouge);clip-path:polygon(50% 0,100% 100%,0 100%)
}
.contenu ul li > strong:first-child{font-family:var(--display);font-weight:700}

/* Listes ordonnées : numérotation 01, 02… en Archivo rouge. */
.contenu ol{list-style:none;padding:0;margin:0 0 22px;counter-reset:pas}
.contenu ol li{
  counter-increment:pas;padding:9px 0 9px 42px;position:relative;
  border-top:1px solid var(--craie-2)
}
.contenu ol li::before{
  content:counter(pas,decimal-leading-zero);position:absolute;left:0;top:11px;
  font-family:var(--display);font-weight:800;font-size:13px;letter-spacing:.14em;
  color:var(--rouge)
}

/* Les listes imbriquées reprennent la même écriture, sans le filet. */
.contenu li ul,.contenu li ol{margin:6px 0 0}
.contenu li li{border-top:0;padding-top:5px;padding-bottom:5px}

/* --------------------------------------------------------------------------
   Section « Texte de page » — mise en page à deux colonnes.
   Grille reprise de .pourquoi-grid : le titre tient la colonne de gauche et
   le texte respire à droite, ce qui casse le mur de texte des pages longues.
   -------------------------------------------------------------------------- */
.texte-cols{display:grid;grid-template-columns:.9fr 1.1fr;gap:64px;align-items:start}
/* 100px = header collant (logo 50 + 2×12 de marge + filet) et une respiration. */
.texte-cols .tete-sec{margin-bottom:0;position:sticky;top:100px}
.texte-cols .contenu{max-width:none}

@media(max-width:1000px){
  .texte-cols{grid-template-columns:1fr;gap:32px}
  .texte-cols .tete-sec{position:static}
}
@media(prefers-reduced-motion:reduce){
  .texte-cols .tete-sec{position:static}
}

/* --------------------------------------------------------------------------
   Grille de réalisations : cartes alignées en haut (04/08/2026).
   La maquette décalait la colonne du milieu de 34 px (cartes 2 et 5) pour
   rythmer une grille de six. Le décalage a d'abord été restreint aux rangées
   complètes — il ne subsistait donc que là où il était « juste » : accueil,
   page canton, archive. C'est précisément là qu'il se lisait comme un défaut
   d'alignement, rien dans le contenu ne justifiant qu'une carte sur trois
   descende. Abandonné à la demande de l'utilisateur.
   Le bloc 1 du fichier reste intact : le décalage y est toujours déclaré, il
   est neutralisé ici. Pour le rétablir, supprimer cette règle et faire
   ressortir `real-grid--decale` de couvcompagnons_classe_grille().
   -------------------------------------------------------------------------- */
.real-grid .real:nth-child(2),
.real-grid .real:nth-child(5){transform:none}

/* Deux colonnes : le chapeau accompagne le titre dans la colonne de gauche,
   qui paraissait vide avec un titre seul.

   ⚠️ ENFERMÉ DANS UNE MEDIA QUERY, ET C'EST INDISPENSABLE (11/08/2026).
   Écrite au niveau racine, cette règle arrivait APRÈS le `@media(max-width:1000px)`
   qui empile `.texte-cols` en une colonne. À spécificité égale, la dernière gagne :
   l'empilement était annulé à toutes les largeurs et les deux colonnes restaient
   côte à côte sur téléphone, sur les trois pages de prestation.
   Règle générale pour ce fichier : toute redéclaration d'une propriété déjà posée
   dans une media query plus haut doit elle-même être bornée, sinon elle la casse. */
@media(min-width:1001px){
  .texte-cols{grid-template-columns:.85fr 1.15fr}
}
.texte-cols .tete-sec .lead{font-size:17px;margin-top:18px;max-width:none}

/* Ligne de liens territoriaux (pied de la section zones, archive des chantiers).
   Reprend le corps et la couleur des listes .zone : aucune valeur nouvelle. */
.zones-cantons{
  margin-top:30px;padding-top:22px;border-top:1px solid var(--ligne);
  font-size:15px;color:#5B6472;line-height:2
}
.zones-cantons a{color:var(--rouge-fonce);text-decoration:none;border-bottom:1px solid var(--ligne)}
.zones-cantons a:hover{border-bottom-color:var(--rouge)}

/* --------------------------------------------------------------------------
   Processus : étapes alignées à gauche en colonne unique (04/08/2026).
   Sous 1000 px la grille passe à deux colonnes et les étapes paires prennent
   un retrait de 22 px — correct, elles sont alors dans la colonne de droite.
   Mais à 720 px la grille repasse à UNE colonne sans que ce retrait soit
   annulé : « 02 Visite et diagnostic » et « 04 » se retrouvaient décalés de
   22 px par rapport à 01 et 03. Même cause pour le filet vertical, qui restait
   accroché aux étapes impaires alors qu'il n'y a plus de colonne à séparer.
   Le !important est nécessaire : il neutralise celui du bloc 1, resté intact.
   -------------------------------------------------------------------------- */
@media(max-width:720px){
  .etape:nth-child(2n){padding-left:0!important}
  .etape{border-right:0}
}

/* --------------------------------------------------------------------------
   Menu burger : les boutons ne sont pas des entrées de menu (04/08/2026).
   `.nav-mobile a` impose padding:13px 0 et un filet bas à TOUS les liens du
   panneau — donc aussi aux deux boutons. Trois conséquences visibles :
   le rembourrage latéral des boutons était écrasé (texte collé au bord
   gauche), et sur le bouton fantôme du téléphone le filet bas de 1 px en
   craie remplaçait le bord de 2 px, donnant un contour à trois côtés.
   On rétablit ici les bordures et le rembourrage propres au bouton.
   -------------------------------------------------------------------------- */
@media(max-width:720px){
  .nav-mobile a.btn{
    padding:15px 26px;
    border-width:2px;border-style:solid;border-color:transparent
  }
  .nav-mobile a.btn--fant{border-color:currentColor}
  /* L'icône du téléphone reprend la couleur d'accent du header. */
  .nav-mobile a.btn--fant svg{color:var(--rouge)}
  .nav-mobile a.btn--fant:hover svg{color:inherit}
}

/* Bloc d'avis sur fond craie (04/08/2026). Les pages de commune ont vu leur
   ordre de sections changer : les avis suivent désormais les chantiers, qui
   sont passés en blanc. Sans ce modificateur, deux sections blanches se
   toucheraient et la page perdrait son alternance. `.avis` reste blanc partout
   ailleurs — accueil compris. */
.avis--craie{background:var(--craie)}

/* Signature de l'agence, à droite du pied de page (04/08/2026). Le conteneur
   est déjà aligné à droite par le space-between de .pied-bas ; on ne gère ici
   que la cohabitation avec le menu légal quand il existera, et le repli à la
   ligne sur mobile où .pied-bas passe en colonne. */
.pied-credit{display:flex;gap:20px;align-items:center;flex-wrap:wrap;justify-content:flex-end}
.pied-agence a{border-bottom:1px solid rgba(255,255,255,.28)}
.pied-agence a:hover{border-bottom-color:#fff}
@media(max-width:720px){
  .pied-credit{justify-content:flex-start}
}

/* ------------------------------------------------------------------ *
 * Page de commune — hero à deux colonnes, bandeau d'urgence, rappel
 * (10/08/2026). Surcharges de fin de fichier : le bloc 1 reste intact.
 * ------------------------------------------------------------------ */

/* Texte à gauche, formulaire à droite. La colonne de texte est la plus
   large : c'est le contenu propre à la commune, celui qui porte la page.
   Grille reprise de .devis-grid, proportions inversées. */
.ville-hero{display:grid;grid-template-columns:1.15fr .85fr;gap:56px;align-items:start}
.ville-hero .tete-sec{margin-bottom:28px}
.ville-hero .contenu{max-width:none}

/* La carte du formulaire vit d'ordinaire sur le fond pierre de la section
   d'offre, où --fA-ombre est une ombre chaude et soutenue. Sur le fond craie
   du hero elle écraserait le texte voisin : ombre reprise, et filet ajouté
   pour que la carte garde ses limites sans elle. */
.ville-offre .form{
  box-shadow:0 10px 34px rgba(20,24,30,.10);
  border:1px solid var(--ligne);
  border-top:5px solid var(--jaune);
}
.ville-offre-titre{font-size:clamp(21px,2.2vw,26px);margin:6px 0 10px}
.ville-offre-accroche{margin:0 0 22px}

/* Le formulaire suit la lecture du texte local, qui est plus long que lui. */
@media(min-width:1001px){
  .ville-offre{position:sticky;top:104px}
}
@media(prefers-reduced-motion:reduce){
  .ville-offre{position:static}
}

/* Sous 1000 px, une seule colonne : le texte d'abord, le formulaire ensuite.
   L'inverse enterrerait 240 mots de contenu unique sous sept champs, et la
   page donnerait l'impression de n'avoir rien à dire. L'appel immédiat est
   déjà couvert par la barre d'action fixe. */
@media(max-width:1000px){
  .ville-hero{grid-template-columns:1fr;gap:40px}
  .ville-offre{position:static}
}

/* Bande de rappel de fin de page.
   Trame diagonale et surtitre repris à l'identique de la section d'offre
   (.devis) : c'est le même fond pierre, il doit se lire comme la même famille
   de bloc. Aucun motif ni couleur nouvelle. */
.rappel{background:var(--fA);color:var(--fA-txt);position:relative;overflow:hidden}
.rappel::before{content:"";position:absolute;inset:0;
  background:repeating-linear-gradient(115deg,var(--fA-trame) 0 1px,transparent 1px 13px)}
.rappel .wrap{position:relative;z-index:2}
.rappel .eyebrow--clair{color:var(--fA-accent)}
.rappel .eyebrow--clair::before{background:var(--fA-accent)}
.rappel h2{margin:0;font-size:clamp(23px,2.6vw,32px)}
.rappel p{margin:0;color:var(--fA-txt2);max-width:46ch}

/* Filet court sous le titre — même idiome que les H3 de .contenu. */
.rappel-filet{display:block;width:56px;height:3px;background:var(--rouge);margin:16px 0 14px}

.rappel-grid{display:flex;flex-wrap:wrap;gap:36px;align-items:center;justify-content:space-between}
.rappel-actions{display:flex;flex-direction:column;align-items:flex-start;gap:16px}
.rappel-coord{display:flex;flex-wrap:wrap;align-items:center;gap:10px 26px}
.rappel .tel-gros{display:inline-flex;align-items:center;gap:11px;line-height:1.1}
.rappel .tel-gros svg,.rappel-mail svg{flex:0 0 auto}
.rappel-mail{display:inline-flex;align-items:center;gap:9px;font-weight:500;
  color:var(--fA-txt);text-decoration:none;border-bottom:1px solid var(--fA-accent)}
.rappel-mail:hover{color:var(--fA-accent)}

@media(max-width:720px){
  .rappel-grid{flex-direction:column;align-items:flex-start;gap:26px}
  .rappel-actions{width:100%}
  .rappel-actions .btn{width:100%;justify-content:center}
  /* L'adresse e-mail complète déborde d'un écran étroit. */
  .rappel-mail{font-size:14px;word-break:break-all}
}

/* ------------------------------------------------------------------ *
 * Formulaire — espace sous les libellés (10/08/2026)
 *
 * Contact Form 7 « autop » le formulaire au rendu : il enveloppe chaque
 * ligne dans un <p> et insère un <br> entre le libellé et le champ. Sous
 * chaque libellé s'ajoutaient donc une marge de 6 px ET une hauteur de
 * ligne entière — près de 30 px de vide. Le balisage .champ du thème
 * porte déjà la structure, ces deux ajouts ne servent à rien.
 *
 * Traité en CSS et non par le filtre wpcf7_autop_or_not : celui-ci vaut
 * pour TOUS les formulaires du site, y compris ceux que le client
 * ajouterait plus tard sans ce balisage — ils s'effondreraient.
 * ------------------------------------------------------------------ */
.form .champ p{margin:0}
.form .champ br{display:none}

/* Dernière ligne du formulaire : bouton d'envoi + mention.
   Ce <p>-là n'est pas dans un .champ, il gardait donc ses marges par défaut ;
   s'y ajoutaient un <br> entre le bouton et la mention, et le cadre de réponse
   de CF7 — vide et invisible, mais pas sans marges. */
.form form > p{margin:0}
/* ⚠️ Cibler le <br> par le parent, PAS par la fratrie du bouton.
   Contact Form 7 insère en JavaScript un <span class="wpcf7-spinner"> juste
   après le bouton : le sélecteur « .wpcf7-submit + br » cesse alors de
   correspondre une fois la page vivante, et la ligne de vide réapparaît —
   invisible dans le HTML servi, visible à l écran. */
.form form > p br{display:none}
/* ⚠️ Masquer le cadre de réponse UNIQUEMENT quand il est vide.
   Ne PAS cibler [aria-hidden="true"] : Contact Form 7 ne modifie cet attribut
   que sur les bulles de validation des champs (.wpcf7-not-valid-tip), jamais sur
   ce cadre — qui garde donc aria-hidden="true" même lorsqu il affiche le message
   de confirmation. La règle précédente rendait ce message invisible en permanence,
   alors que le mail partait : le visiteur croyait son envoi perdu. Constaté le
   11/08/2026, introduit la veille en resserrant le formulaire. */
.form .wpcf7-response-output:empty{display:none}

/* Cartes d'avis sur fond craie (pages de commune).
   La maquette pose des cartes craie sur une section blanche : le contraste
   s'inverse dès que la section elle-même est en craie, et les cartes se
   fondaient dans le fond. L'accueil, lui, garde le traitement d'origine. */
.avis--craie .avis-carte{background:#fff}

/* Fil d'Ariane des pages de commune, au-dessus de la bannière (10/08/2026).
   Bandeau mince : il reste le premier élément après le header, sans peser. */
.fil-bande{background:var(--craie);border-bottom:1px solid var(--ligne)}
.fil-bande .wrap{padding-top:11px;padding-bottom:11px}
.fil-bande .fil{margin:0}

/* Formulaire de la page de commune — hauteur resserrée (10/08/2026).
   C'est le formulaire, et non le texte, qui commandait la hauteur de la
   section : environ 840 px contre 700 px. Ces quatre réglages en retirent
   une petite deux cents, sans toucher au NOMBRE de champs — la photo du
   toit reste, c'est elle qui permet de chiffrer sans se déplacer. */
.ville-offre .form{padding:28px}
.ville-offre .champ{margin-bottom:12px}
.ville-offre .form-row{gap:12px}
.ville-offre .champ textarea{min-height:84px}
.ville-offre .ville-offre-accroche{margin:0 0 18px;font-size:14.5px}

/* Pied de page — colonne « Zones » en deux sous-colonnes (10/08/2026).
   Les cantons à gauche, les villes à droite : deux niveaux territoriaux
   différents, qui en liste unique se lisaient comme une seule énumération
   de neuf entrées sans hiérarchie apparente. */
.pied-zones{display:grid;grid-template-columns:1fr 1fr;gap:22px}
.pied-zones h5{
  color:#8C97A6;font-family:var(--display);font-size:11.5px;font-weight:700;
  letter-spacing:.12em;text-transform:uppercase;margin:0 0 8px
}

/* ------------------------------------------------------------------ *
 * Bannière — les deux boutons tiennent sur une ligne (11/08/2026)
 *
 * Le numéro de téléphone passait sous « Demandez une offre » sur écran
 * étroit : côte à côte, les deux boutons demandent plus large qu'un
 * téléphone, et le `flex-wrap:wrap` de .hero-actions renvoyait le second
 * à la ligne. Le numéro se retrouvait repoussé alors que c'est le geste
 * le plus direct de la page.
 *
 * Le balisage est le même sur l'accueil et sur les pages de commune —
 * vérifié au caractère près — donc la correction vaut pour les deux.
 *
 * On passe en `nowrap` et on laisse les deux boutons se partager la
 * largeur : ils s'alignent alors comme une paire, ce qui se lit comme un
 * choix et non comme un débordement. Le rembourrage et le corps sont
 * réduits d'un cran pour que le texte tienne sans se casser.
 * ------------------------------------------------------------------ */
@media(max-width:720px){
  .hero-actions{flex-wrap:nowrap;gap:10px}
  .hero-actions .btn{
    flex:1 1 auto;min-width:0;justify-content:center;
    white-space:nowrap;font-size:14px;padding:14px 12px
  }
}

/* Sous 360 px (iPhone SE et assimilés), le texte des deux boutons ne tient
   plus au corps précédent : on retire l'interlettrage et on resserre encore
   le rembourrage plutôt que de laisser un bouton déborder de l'écran. */
@media(max-width:360px){
  .hero-actions{gap:8px}
  .hero-actions .btn{font-size:13px;padding:13px 8px;letter-spacing:0}
}
