/* =====================================================================
   EDK Menuiseries — feuille de style globale
   ---------------------------------------------------------------------
   Un seul système : variables, boutons, sections, cartes. Avant de créer
   une classe, vérifier qu'aucune de celles d'ici ne convient déjà.
   ===================================================================== */

:root{
  /* Couleurs de la marque, reprises du site edkmenuiseries.fr :
     rouge-corail = identité (toiture du logo, titres, liens) ;
     doré = appel à l'action, il doit trancher sur le rouge ;
     crème = fonds de sections claires. Les anciens noms --bleu et --ambre
     restent définis comme alias : les briques WPBakery déjà montées
     s'appuient dessus (fond="bleu"), ne pas les supprimer. */
  /* Un seul rouge sur tout le site. Les deux nuances qui suivent ne sont
     pas des variantes de charte : ce sont les deux cas où #DC4E4B devient
     illisible — le survol, qui doit se distinguer du repos, et le texte
     posé sur le doré, où le rouge de marque tombe à 2,1:1 de contraste. */
  --rouge:#DC4E4B;
  --rouge-fonce:#DC4E4B;
  --rouge-profond:#DC4E4B;
  --rouge-survol:#C33E3B;
  --rouge-sur-dore:#7C1F1D;
  --rouge-clair:#E4726F;
  --rouge-pale:#FDF3F2;
  /* Le jaune a été retiré de la charte : rouge et gris foncé seulement.
     Les noms --dore et --ambre restent définis, en rouge, pour ne pas
     casser une brique WPBakery qui s'y référerait ; le code du thème,
     lui, utilise --gris-fonce et les nuances de rouge ci-dessous. */
  --gris-fonce:#333333;
  --gris-fonce-survol:#1F1F1F;
  --rouge-marque:#F7D2D1;
  --dore:var(--rouge);
  --dore-fonce:var(--rouge-survol);
  --dore-pale:var(--rouge-pale);
  --creme:#FAF7F7;
  --creme-fonce:#F2EAEA;
  /* Tons clairs posés sur les fonds rouges. */
  --sur-rouge:#FFFFFF;
  --sur-rouge-doux:#F0E7E7;

  /* Alias historiques — même valeur que ci-dessus. */
  --bleu:var(--rouge);
  --bleu-fonce:var(--rouge-fonce);
  --bleu-clair:var(--rouge-clair);
  --bleu-pale:var(--rouge-pale);
  --ambre:var(--dore);
  --ambre-fonce:var(--dore-fonce);

  /* --nuit servait de fond sombre et de couleur de titre : c'est
     désormais le rouge profond qui tient ce rôle, plus aucun gris ni noir
     dans la charte. Les deux noms restent, les gabarits s'y réfèrent. */
  --nuit:var(--rouge-profond);
  --nuit-doux:#932A27;
  --blanc:#FFFFFF;
  --coquille:#FAF7F7;
  --bord:#E7E0E0;
  /* Ex-gris de texte secondaire, réchauffé en brun-rouge : 5,0:1 sur blanc. */
  --gris:#96625C;
  /* Ex-gris de texte courant, réchauffé de même : 11,6:1 sur blanc. */
  --texte:#5B2A28;
  /* Les titres : un brun chaud, presque rouge, qui laisse le rouge vif aux
     accents. Tout mettre en rouge profond saturait la page. */
  --titre-couleur:#333333;
  --succes:#1F7A4C;

  --titre:'Manrope',system-ui,-apple-system,Segoe UI,sans-serif;
  --corps:'Source Sans 3',system-ui,-apple-system,Segoe UI,sans-serif;

  /* Voile de la bannière. Le fond doit rester sur le rouge de la charte
     tout en laissant deviner la photo : celle-ci est donc à peine
     assombrie, et c'est un aplat de #DC4E4B posé par-dessus qui donne la
     teinte. Un multiply trop appuyé la faisait virer au brun sombre.
       --voile-lumiere : luminosité de la photo, 1 = intacte, 0 = noire
       --voile         : teinte rouge fondue dans la photo (multiply)
       --voile-1/2/3   : aplat de rouge posé par-dessus — gauche (sous le
                         titre), milieu, droite (derrière le formulaire) */
  --voile-lumiere:.92;
  --voile:.45;
  --voile-teinte:#DC4E4B;
  --voile-ombre:220,78,75;
  --voile-1:.86;
  --voile-2:.76;
  --voile-3:.62;

  --angle:6px;
  --angle-lg:12px;
  --ombre:0 1px 2px rgba(124,31,29,.06),0 4px 16px rgba(124,31,29,.07);
  --ombre-fort:0 8px 32px rgba(124,31,29,.14);
  --large:1200px;
  --gout:.2s ease;
}

*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{
  margin:0;font-family:var(--corps);font-size:17px;line-height:1.65;
  color:var(--texte);background:var(--blanc);
  -webkit-font-smoothing:antialiased;
}
img{max-width:100%;height:auto;display:block}
a{color:var(--rouge-fonce);text-decoration-thickness:1px;text-underline-offset:2px}
h1,h2,h3,h4{font-family:var(--titre);color:var(--titre-couleur);line-height:1.18;margin:0 0 .5em;font-weight:700}
h1{font-size:clamp(2rem,1.3rem + 2.6vw,3.1rem);letter-spacing:-.02em}
h2{font-size:clamp(1.55rem,1.15rem + 1.6vw,2.3rem);letter-spacing:-.015em}
h3{font-size:clamp(1.15rem,1.02rem + .5vw,1.4rem)}
p{margin:0 0 1em}
ul{padding-left:1.15em}

/* Accessibilité : le focus doit rester visible, y compris sur fond sombre. */
:focus-visible{outline:3px solid var(--rouge);outline-offset:2px;border-radius:3px}
.skip-link{
  position:absolute;left:-9999px;top:0;z-index:999;
  background:var(--nuit);color:#fff;padding:12px 20px;border-radius:0 0 var(--angle) 0;
}
.skip-link:focus{left:0}

.wrap{width:min(100% - 40px,var(--large));margin-inline:auto}
.section{padding:clamp(48px,6vw,88px) 0}
.section--pale{background:var(--coquille)}
.section--bleu{background:var(--bleu-pale)}
.section--sombre{background:var(--nuit);color:#fff}
.section--sombre h2,.section--sombre h3{color:#fff}

.sec-head{max-width:62ch;margin:0 0 36px}
.sec-head--centre{margin-inline:auto;text-align:center}
.eyebrow{
  display:inline-block;font-family:var(--titre);font-weight:700;font-size:1rem;
  letter-spacing:.13em;text-transform:uppercase;color:var(--rouge);
  margin:0 0 10px;
}
.sec-head p{color:var(--gris);font-size:1.06rem;margin:0}
.section--sombre .sec-head p{color:#fff}

/* ---------- Boutons ------------------------------------------------- */
.btn{
  display:inline-flex;align-items:center;gap:9px;
  font-family:var(--titre);font-weight:700;font-size:1rem;line-height:1;
  padding:15px 26px;border-radius:var(--angle);border:2px solid transparent;
  text-decoration:none;cursor:pointer;transition:var(--gout);
  background:var(--rouge-fonce);color:#fff;white-space:nowrap;
}
.btn:hover{background:var(--rouge-survol);color:#fff}
.btn-ambre{background:#fff;color:var(--rouge);border-color:#fff}
.btn-ambre:hover{background:var(--rouge-pale);color:var(--rouge-survol);border-color:var(--rouge-pale)}
.btn-ghost{background:transparent;color:var(--rouge);border-color:var(--gris-fonce)}
.btn-ghost:hover{background:var(--rouge-pale);color:var(--rouge-survol);border-color:var(--rouge)}
.section--sombre .btn-ghost{color:#fff;border-color:rgba(255,255,255,.35)}
.section--sombre .btn-ghost:hover{background:rgba(255,255,255,.1);color:#fff}
.btn-tel{background:var(--gris-fonce);color:#fff;white-space:nowrap}
.btn-tel:hover{background:var(--gris-fonce-survol);color:#fff}
/* Dans l'en-tête, le numéro est le seul appel à l'action : il passe en rouge.
   Celui de la barre d'appel mobile reste gris, pour se distinguer du bouton
   de devis rouge posé juste à côté. */
.site-header .btn-tel{background:var(--rouge)}
.site-header .btn-tel:hover{background:var(--rouge-survol)}
.btn-lg{padding:18px 32px;font-size:1.08rem}
.ico{width:20px;height:20px;flex:0 0 auto}

/* ---------- Barre haute --------------------------------------------- */
.topbar{background:#333;color:#fff;font-size:.86rem}
.topbar .wrap{display:flex;align-items:center;justify-content:space-between;gap:20px;min-height:40px;white-space:nowrap}
/* Pas de flex-wrap : la barre haute tient sur une ligne. Si la place
   manque vraiment, c'est la mention la moins utile (la zone) qui s'efface,
   plutôt que la barre qui double de hauteur. */
.tb-info{display:flex;align-items:center;gap:18px;min-width:0}
.tb-info b{flex:0 0 auto}
.tb-info span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tb-info b{color:#fff;font-family:var(--titre);font-weight:600}
.tb-nav ul{display:flex;gap:20px;list-style:none;margin:0;padding:0;flex:0 0 auto}
.tb-nav a{color:#fff;text-decoration:none}
.tb-nav a:hover{color:#fff;text-decoration:underline}

/* ---------- En-tête -------------------------------------------------- */
.site-header{
  background:#fff;border-bottom:1px solid var(--bord);
  position:sticky;top:0;z-index:80;
}
/* L'espacement se resserre avec la fenêtre au lieu de pousser un élément
   à la ligne suivante. En dessous de 1080px, c'est le menu déroulant qui
   prend le relais (voir Responsive). */
.site-header .nav{display:flex;align-items:center;gap:clamp(14px,2vw,30px);min-height:82px;flex-wrap:nowrap}
.logo{flex:0 0 auto;display:block}
.logo-img{max-height:52px;width:auto}
.logo-txt{font-family:var(--titre);font-weight:800;font-size:1.35rem;color:var(--nuit);text-decoration:none;letter-spacing:-.02em}
.logo-txt span{color:var(--bleu)}

.site-header nav{margin-left:auto}
.menu-principal{display:flex;gap:clamp(14px,1.9vw,26px);list-style:none;margin:0;padding:0;align-items:center;flex-wrap:nowrap}
.menu-principal > li{position:relative}
.menu-principal > li{flex:0 0 auto}
.menu-principal a{
  font-family:var(--titre);font-weight:600;font-size:.97rem;color:#111;
  text-decoration:none;padding:10px 0;display:block;transition:var(--gout);
  white-space:nowrap;
}
.menu-principal a:hover,.menu-principal .current-menu-item > a{color:var(--rouge)}

/* Sous-menu « Nos produits » */
.menu-principal .sub-menu{
  position:absolute;top:100%;left:-16px;min-width:250px;
  background:#fff;border:1px solid var(--bord);border-radius:var(--angle);
  box-shadow:var(--ombre-fort);padding:8px;margin:0;list-style:none;
  opacity:0;visibility:hidden;transform:translateY(6px);transition:var(--gout);z-index:90;
}
.menu-principal li:hover > .sub-menu,
.menu-principal li:focus-within > .sub-menu{opacity:1;visibility:visible;transform:none}
.menu-principal .sub-menu a{padding:9px 14px;border-radius:4px;font-weight:500;white-space:nowrap}
.menu-principal .sub-menu a:hover{background:var(--bleu-pale)}

.menu-toggle{
  display:none;background:none;border:0;cursor:pointer;padding:10px;margin-left:auto;
}
.menu-toggle span{display:block;width:26px;height:2px;background:var(--nuit);border-radius:2px}
.menu-toggle span + span{margin-top:6px}

/* ---------- Hero ----------------------------------------------------- */
/* Bord bas droit et net, fermé par un filet gris foncé. Il répond à la barre
   haute, de la même couleur : l'en-tête du site se lit comme un bloc cadré,
   sans découpe décorative. */
.hero-socle{background:var(--coquille)}
.hero{
  position:relative;background:var(--rouge-profond);color:#fff;overflow:hidden;
  border-bottom:6px solid var(--gris-fonce);
}
/* En-tête sobre des pages intérieures : aplat clair, une seule colonne,
   ni photo ni formulaire. Le filet gris du bas et le socle ne servent plus. */
.hero--sobre{
  background:var(--coquille);color:var(--texte);
  border-bottom:1px solid var(--bord);
}
.hero--sobre .wrap{padding:clamp(34px,4vw,58px) 0}
/* Deux colonnes déséquilibrées : le discours à gauche, les repères à droite,
   dans une carte qui rappelle celles du reste du site. */
.hero-grid--sobre{grid-template-columns:minmax(0,1.3fr) minmax(0,.7fr);gap:40px;align-items:center}
.hero-reperes{list-style:none;margin:0;padding:22px 24px;display:grid;gap:14px;
  background:#fff;border:1px solid var(--bord);border-radius:var(--angle-lg);box-shadow:var(--ombre)}
.hero-reperes li{display:flex;gap:13px;align-items:center;
  font-family:var(--titre);font-weight:600;font-size:.97rem;line-height:1.4;color:var(--texte)}
@media (max-width:1024px){
  .hero-grid--sobre{grid-template-columns:1fr;gap:26px}
}

/* isolation:isolate enferme le mélange ci-dessous dans la seule photo :
   sans lui, il déborderait sur le fond rouge de la bannière. */
.hero-media{position:absolute;inset:0;isolation:isolate}
.hero-media img{width:100%;height:100%;object-fit:cover;filter:saturate(.6) brightness(var(--voile-lumiere))}

/* La teinte rouge est appliquée à la photo en multiply : contrairement à un
   aplat posé par-dessus, le mélange conserve les reliefs et les contours, si
   bien que la photo reste lisible tout en étant franchement rouge. */
.hero-media::before{
  content:"";position:absolute;inset:0;background:var(--voile-teinte);
  mix-blend-mode:multiply;opacity:var(--voile);
}
/* Second voile, en dégradé : il fonce le côté du titre, où le texte blanc
   doit rester lisible, et s'efface vers la droite où la photo se donne à
   voir derrière la carte du formulaire. */
.hero-media::after{
  content:"";position:absolute;inset:0;
  background:linear-gradient(105deg,
    rgba(var(--voile-ombre),var(--voile-1)) 0%,
    rgba(var(--voile-ombre),var(--voile-2)) 45%,
    rgba(var(--voile-ombre),var(--voile-3)) 100%);
}
.hero .wrap{position:relative;z-index:2;padding:clamp(56px,7vw,104px) 0}
.hero-grid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,.85fr);gap:48px;align-items:center}
/* Le fond de bannière étant maintenant le rouge de charte, clair, le texte
   blanc n'y tient que 3,6:1. Une ombre portée discrète détache les lettres
   de l'aplat sans avoir à réassombrir le fond. */
.hero h1{color:#fff;margin-bottom:.35em;text-shadow:0 2px 10px rgba(90,20,19,.55)}
/* La ligne mise en valeur du titre est posée sur une étiquette gris foncé :
   sur l'aplat rouge, c'est la seule couleur de la charte qui tranche
   vraiment, et elle rappelle la barre haute et le bouton du numéro juste
   en dessous.
   display:block assure le passage à la ligne, width:fit-content limite
   l'étiquette à la largeur du texte. Un saut de ligne injecté en ::before
   se serait retrouvé À L'INTÉRIEUR de l'étiquette, qui aurait alors gagné
   une ligne vide et débordé sur l'accroche. */
.hero h1 .titre-relief{
  display:block;width:fit-content;max-width:100%;
  color:#fff;font-style:italic;font-weight:800;
  background:var(--gris-fonce);border-radius:5px;
  padding:.06em .32em .12em;margin-top:.22em;
  box-shadow:0 6px 20px rgba(31,31,31,.35);text-shadow:none;
}

/* En-tête sobre : le surlignage est conservé, mais dans le fil du texte —
   display:inline au lieu de block, et box-decoration-break pour que le fond
   suive proprement le mot si la ligne venait à se couper.
   Cette règle doit rester APRÈS la précédente : à spécificité égale, c'est
   la dernière déclarée qui l'emporte. */
.hero--sobre h1 .titre-relief{
  display:inline;width:auto;max-width:none;
  padding:.02em .26em .1em;margin:0;
  box-shadow:none;
  -webkit-box-decoration-break:clone;box-decoration-break:clone;
}
.hero-accroche{font-size:1.13rem;color:#fff;max-width:56ch;margin-bottom:26px;text-shadow:0 1px 8px rgba(90,20,19,.6)}
.hero-cta{display:flex;gap:14px;flex-wrap:wrap;margin-bottom:26px}
/* Le bouton du numéro, dans la bannière seulement : un aplat sombre plutôt
   que le contour translucide, pour qu'il tienne tête au bouton doré à côté. */
.hero-cta .btn-ghost{background:#333;color:#fff;border-color:#333}
.hero-cta .btn-ghost:hover{background:#1F1F1F;color:#fff;border-color:#1F1F1F}
.hero-points{list-style:none;padding:0;margin:0;display:flex;gap:10px 26px;flex-wrap:wrap}
.hero-points li{display:flex;align-items:center;gap:8px;font-weight:600;font-size:.97rem;color:#fff;text-shadow:0 1px 8px rgba(90,20,19,.6)}

/* Format sobre : ces règles doivent rester APRÈS les règles générales du
   hero ci-dessus. Elles ont la même spécificité, donc à égalité c'est la
   dernière déclarée qui gagne — placées avant, le texte blanc du bandeau
   plein l'emportait et le titre devenait blanc sur fond clair. */
.hero--sobre h1{color:var(--titre-couleur);text-shadow:none}
.hero--sobre .hero-accroche{color:var(--gris);text-shadow:none;margin-bottom:20px}
.hero--sobre .hero-points li{color:var(--texte);text-shadow:none}
.hero--sobre .hero-points .ico{color:var(--rouge)}
.hero--sobre .btn-ambre{background:var(--rouge);color:#fff;border-color:var(--rouge)}
.hero--sobre .btn-ambre:hover{background:var(--rouge-survol);border-color:var(--rouge-survol)}
.hero-points .ico{color:#fff}

/* Carte formulaire dans le hero */
.hero-form{
  background:#fff;color:var(--texte);border-radius:var(--angle-lg);
  padding:26px 32px 22px;box-shadow:var(--ombre-fort);
  border-top:5px solid var(--gris-fonce);
}
/* Titre d'appel à l'action : grande taille, interlignage serré, et le mot
   clé surligné au marqueur doré — un trait posé sur le bas des lettres,
   qui reste lisible là où une couleur pleine perdrait en contraste. */
.hero-form h2{
  font-size:clamp(1.55rem,2.4vw,2rem);
  font-weight:800;letter-spacing:-.025em;line-height:1.12;margin-bottom:6px;
}
.hero-form h2 .mot-marque{
  position:relative;display:inline-block;z-index:0;
}
.hero-form h2 .mot-marque::after{
  content:"";position:absolute;left:-.06em;right:-.06em;bottom:.04em;
  height:.34em;background:var(--rouge-marque);opacity:1;border-radius:2px;z-index:-1;
}
.hero-form .form-note{font-size:.86rem;color:var(--gris);margin-bottom:12px}

/* ---------- Grilles / cartes ---------------------------------------- */
.grille{display:grid;gap:24px}
.grille-2{grid-template-columns:repeat(auto-fit,minmax(300px,1fr))}
.grille-3{grid-template-columns:repeat(auto-fit,minmax(280px,1fr))}
.grille-4{grid-template-columns:repeat(auto-fit,minmax(220px,1fr))}

.card{
  background:#fff;border:1px solid var(--bord);border-radius:var(--angle-lg);
  padding:26px;transition:var(--gout);height:100%;
  display:flex;flex-direction:column;
}
.card:hover{box-shadow:var(--ombre-fort);border-color:var(--rouge-clair);transform:translateY(-3px)}
.card h3{margin-bottom:8px}
.card p{color:var(--gris);font-size:.98rem;margin-bottom:14px}
.card .card-lien{margin-top:auto;font-family:var(--titre);font-weight:700;font-size:.94rem;text-decoration:none;display:inline-flex;gap:6px;align-items:center}
.card-ico{
  width:52px;height:52px;border-radius:var(--angle);background:var(--rouge-pale);
  color:var(--rouge);display:grid;place-items:center;margin-bottom:16px;
}
.card-ico .ico{width:26px;height:26px}

/* Carte produit avec photo */
.card-produit{padding:0;overflow:hidden}
.card-produit .card-photo{aspect-ratio:4/3;background:var(--coquille);display:block;overflow:hidden}
.card-produit .card-photo img{width:100%;height:100%;object-fit:cover;transition:transform .4s ease}
.card-produit:hover .card-photo img{transform:scale(1.04)}
.card-produit .card-corps{padding:22px 24px 26px;display:flex;flex-direction:column;flex:1}

/* En attendant la photo : un aplat nu, qui réserve simplement la place. */
.card-photo--vide{background:var(--rouge-pale)}

/* Deux prestations mises en avant : format large, titre et texte agrandis,
   et un vrai bouton à la place du lien discret. */
.produits-phares{gap:30px}
.produits-phares .card-produit .card-photo{aspect-ratio:3/2}
.produits-phares .card-produit .card-corps{padding:28px 32px 32px}
.produits-phares .card h3{font-size:1.55rem;letter-spacing:-.02em;margin-bottom:10px}
.produits-phares .card p{font-size:1.06rem;color:var(--texte);margin-bottom:20px}
.produits-phares .card .card-lien{
  margin-top:auto;align-self:flex-start;background:var(--rouge);color:#fff;
  padding:13px 24px;border-radius:var(--angle);font-size:1rem;
}
.produits-phares .card .card-lien:hover{background:var(--rouge-survol);color:#fff}
@media (max-width:700px){
  .produits-phares .card h3{font-size:1.3rem}
  .produits-phares .card-produit .card-corps{padding:22px 22px 26px}
}

/* ---------- Chantiers + formulaire côte à côte ------------------------- */
.chantiers-duo{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(0,.85fr);gap:32px;align-items:start}
.chantiers-form{
  background:#fff;border:1px solid var(--bord);border-top:5px solid var(--gris-fonce);
  border-radius:var(--angle-lg);padding:24px 26px;box-shadow:var(--ombre-fort);
  position:sticky;top:100px;
}
.chantiers-form h3{font-size:1.35rem;letter-spacing:-.02em;margin-bottom:4px}
.chantiers-form .form-note{font-size:.88rem;color:var(--gris);margin-bottom:14px}
@media (max-width:980px){
  .chantiers-duo{grid-template-columns:1fr;gap:26px}
  .chantiers-form{position:static}
}

/* ---------- Fil d'Ariane ---------------------------------------------- */
.fil{background:var(--coquille);border-bottom:1px solid var(--bord);font-size:.88rem}
.fil ol{display:flex;flex-wrap:wrap;gap:6px;list-style:none;margin:0;padding:12px 0}
.fil li{display:flex;align-items:center;gap:6px;color:var(--gris)}
.fil li + li::before{content:"›";color:var(--gris)}
.fil a{color:var(--gris);text-decoration:none}
.fil a:hover{color:var(--rouge);text-decoration:underline}
.fil [aria-current]{color:var(--titre-couleur);font-weight:600}

/* ---------- Renvoi discret vers une prestation ------------------------ */
.produits-bande{display:grid;gap:12px}
.pb-item{
  display:flex;align-items:center;gap:18px;text-decoration:none;color:var(--texte);
  background:#fff;border:1px solid var(--bord);border-radius:var(--angle-lg);
  padding:14px 20px;transition:var(--gout);
}
.pb-item:hover{border-color:var(--rouge);box-shadow:var(--ombre);transform:translateX(3px)}
.pb-photo{flex:0 0 auto;width:64px;height:64px;border-radius:var(--angle);overflow:hidden}
.pb-photo img{width:100%;height:100%;object-fit:cover;display:block}
.pb-corps{display:flex;flex-direction:column;gap:2px;min-width:0}
.pb-corps strong{font-family:var(--titre);font-size:1.08rem;color:var(--titre-couleur)}
.pb-texte{font-size:.95rem;color:var(--gris)}
.pb-fleche{margin-left:auto;font-size:1.3rem;color:var(--rouge);flex:0 0 auto}
@media (max-width:560px){
  .pb-texte{display:none}
}

/* ---------- En-tête de fiche prestation ------------------------------- */
.produit-tete{background:var(--coquille)}
.produit-tete h1{margin-bottom:.3em}
.produit-chapo{font-size:1.16rem;line-height:1.6;color:var(--texte);margin-bottom:26px}
.produit-photo img{
  width:100%;height:auto;display:block;
  border-radius:var(--angle-lg);box-shadow:var(--ombre-fort);
}
@media (max-width:700px){
  .produit-photo{order:-1;margin-bottom:22px}
}

/* ---------- Section « à propos » -------------------------------------- */
/* Colonne de texte : premier paragraphe en chapô, et un filet rouge le long
   du bloc qui ancre la section dans la charte sans rien ajouter de décoratif. */
.apropos-texte{border-left:3px solid var(--rouge);padding-left:26px}
.apropos-texte > p:first-child{font-size:1.16rem;line-height:1.6;color:var(--titre-couleur)}
.apropos-texte > p{margin-top:0}

/* Colonne des atouts : une carte par argument, coche dans une pastille. */
.apropos-atouts{list-style:none;margin:0;padding:0;display:grid;gap:12px}
.apropos-atouts li{
  display:flex;gap:14px;align-items:flex-start;
  background:#fff;border:1px solid var(--bord);border-radius:var(--angle-lg);
  padding:18px 20px;font-family:var(--titre);font-weight:600;font-size:1rem;
  line-height:1.45;box-shadow:var(--ombre);transition:var(--gout);
}
.apropos-atouts li:hover{border-color:var(--rouge-clair);transform:translateX(3px)}
.atout-puce{
  flex:0 0 auto;width:30px;height:30px;border-radius:50%;
  background:var(--rouge);color:#fff;display:grid;place-items:center;
}
.atout-puce .ico{width:17px;height:17px}

@media (max-width:700px){
  .apropos-texte{padding-left:18px}
  .apropos-atouts li{padding:15px 16px;font-size:.97rem}
}

/* ---------- Étapes (process) ----------------------------------------- */
.etapes{counter-reset:etape;display:grid;gap:20px;grid-template-columns:repeat(auto-fit,minmax(230px,1fr))}
.etape{position:relative;padding:26px 22px 22px;background:#fff;border:1px solid var(--bord);border-radius:var(--angle-lg)}
.etape::before{
  counter-increment:etape;content:counter(etape,decimal-leading-zero);
  font-family:var(--titre);font-weight:800;font-size:1.05rem;
  color:var(--bleu);background:var(--bleu-pale);
  width:44px;height:44px;border-radius:50%;display:grid;place-items:center;margin-bottom:14px;
}
.etape h3{font-size:1.08rem;margin-bottom:6px}
.etape p{color:var(--gris);font-size:.95rem;margin:0}

/* ---------- Aides financières ---------------------------------------- */
.aide{
  background:#fff;border:1px solid var(--bord);border-left:4px solid var(--rouge);
  border-radius:var(--angle);padding:22px 24px;
}
.aide h3{font-size:1.06rem;margin-bottom:6px}
.aide p{margin:0;color:var(--gris);font-size:.95rem}

/* ---------- Réassurance / partenaires -------------------------------- */
.reassurance{display:grid;gap:22px;grid-template-columns:repeat(auto-fit,minmax(210px,1fr))}
.rea{display:flex;gap:14px;align-items:flex-start}
.rea .ico{width:30px;height:30px;color:#fff;flex:0 0 auto;margin-top:2px}
.rea b{display:block;font-family:var(--titre);font-size:1.02rem;color:inherit;margin-bottom:2px}
.rea span{font-size:.94rem;opacity:.85}

.marques{display:flex;flex-wrap:wrap;gap:14px;align-items:center;justify-content:center;margin-top:30px}
.marque{
  font-family:var(--titre);font-weight:700;letter-spacing:.04em;
  background:#fff;border:1px solid var(--bord);border-radius:var(--angle);
  padding:12px 22px;color:var(--nuit);font-size:.95rem;
}

/* ---------- Zones d'intervention ------------------------------------- */
.zones{display:flex;flex-wrap:wrap;gap:12px}
.zone-lien{
  display:inline-flex;align-items:center;gap:8px;
  background:#fff;border:1px solid var(--bord);border-radius:100px;
  padding:11px 20px;text-decoration:none;color:var(--nuit);
  font-family:var(--titre);font-weight:600;font-size:.96rem;transition:var(--gout);
}
.zone-lien:hover{background:var(--bleu);border-color:var(--bleu);color:#fff}
.zone-lien .ico{width:17px;height:17px;color:var(--bleu)}
.zone-lien:hover .ico{color:#fff}
/* Retour vers la page qui rassemble les secteurs : signalé comme tel. */
.zone-lien--parent{background:var(--rouge-pale);border-color:var(--rouge);color:var(--rouge)}
.zone-lien--parent:hover{background:var(--rouge);color:#fff}

/* ---------- Réalisations --------------------------------------------- */
.realisation{border-radius:var(--angle-lg);overflow:hidden;border:1px solid var(--bord);background:#fff}
/* display:block est indispensable : sans lui, ce lien reste en ligne, où
   aspect-ratio n'a aucun effet — la photo gardait alors sa hauteur d'origine,
   c'est-à-dire toute la hauteur d'un portrait pris au téléphone. */
.realisation .r-photo{display:block;aspect-ratio:3/2;background:var(--coquille);overflow:hidden}
.realisation .r-photo img{width:100%;height:100%;object-fit:cover;transition:transform .4s ease}
.realisation:hover .r-photo img{transform:scale(1.04)}
.realisation .r-corps{padding:18px 20px 22px}
.realisation h3{font-size:1.05rem;margin-bottom:4px}
.r-meta{font-size:.88rem;color:var(--gris);display:flex;gap:10px;flex-wrap:wrap}
.r-meta .tag{background:var(--bleu-pale);color:var(--bleu-fonce);border-radius:100px;padding:2px 11px;font-weight:600}

/* ---------- FAQ ------------------------------------------------------- */
.faq{max-width:820px;margin-inline:auto}
.faq details{background:#fff;border:1px solid var(--bord);border-radius:var(--angle);margin-bottom:12px}
.faq summary{
  cursor:pointer;padding:18px 22px;font-family:var(--titre);font-weight:700;
  font-size:1.03rem;color:var(--nuit);list-style:none;display:flex;justify-content:space-between;gap:16px;
}
.faq summary::-webkit-details-marker{display:none}
.faq summary::after{content:"+";color:var(--bleu);font-size:1.5rem;line-height:1;flex:0 0 auto}
.faq details[open] summary::after{content:"–"}
.faq .faq-rep{padding:0 22px 20px;color:var(--gris)}
.faq .faq-rep p:last-child{margin-bottom:0}

/* ---------- Bandeau devis --------------------------------------------- */
.bandeau-devis{
  background:linear-gradient(120deg,var(--gris-fonce),var(--gris-fonce-survol));
  color:#fff;border-radius:var(--angle-lg);padding:clamp(30px,4vw,52px);
  display:grid;grid-template-columns:minmax(0,1fr) auto;gap:30px;align-items:center;
}
.bandeau-devis h2{color:#fff;margin-bottom:6px}
.bandeau-devis p{color:#E8E4E3;margin:0;max-width:58ch}
/* Sur ce fond doré, les boutons dorés disparaîtraient. */
.bandeau-devis .btn-ambre{background:var(--rouge);color:#fff;border-color:var(--rouge)}
.bandeau-devis .btn-ambre:hover{background:var(--rouge-survol);color:#fff;border-color:var(--rouge-survol)}
.bandeau-devis .btn-ghost{background:transparent;color:#fff;border-color:rgba(255,255,255,.5)}
.bandeau-devis .btn-ghost:hover{background:rgba(255,255,255,.12);color:#fff;border-color:#fff}
.bandeau-actions{display:flex;gap:14px;flex-wrap:wrap}

/* ---------- Formulaires (CF7) ----------------------------------------- */
.edk-form .champs{display:grid;gap:10px;grid-template-columns:repeat(auto-fit,minmax(190px,1fr))}
.edk-form .plein{grid-column:1/-1}
.edk-form .champ{margin:0}
/* Contact Form 7 insère un <br> entre l'étiquette et le champ : l'étiquette
   étant déjà en display:block, ce saut n'ajoutait qu'une ligne vide, soit
   une vingtaine de pixels perdus par champ. */
.edk-form .champ br{display:none}
/* Le paragraphe que Contact Form 7 pose autour du bouton. */
.edk-form > p{margin:12px 0 0}
.edk-form label{display:block;font-family:var(--titre);font-weight:600;font-size:.86rem;margin-bottom:3px;color:var(--nuit)}
.edk-form input[type=text],
.edk-form input[type=email],
.edk-form input[type=tel],
.edk-form select,
.edk-form textarea{
  width:100%;padding:10px 13px;border:1px solid var(--bord);border-radius:var(--angle);
  font-family:var(--corps);font-size:1rem;color:var(--texte);background:#fff;transition:var(--gout);
}
.edk-form textarea{min-height:54px;resize:vertical}
.edk-form :is(input,select,textarea):focus{border-color:var(--bleu);outline:none;box-shadow:0 0 0 3px rgba(220,78,75,.18)}
.edk-form .wpcf7-submit{
  width:100%;background:var(--rouge);color:#fff;border:0;border-radius:var(--angle);
  text-shadow:0 1px 3px rgba(124,31,29,.45);
  padding:13px 22px;font-family:var(--titre);font-weight:700;font-size:1.02rem;cursor:pointer;transition:var(--gout);
}
.edk-form .wpcf7-submit:hover{background:var(--rouge-survol)}
.edk-form .rgpd{font-size:.78rem;color:var(--gris);margin-top:8px;line-height:1.45}
.wpcf7 form .wpcf7-response-output{border-radius:var(--angle);margin:16px 0 0;padding:12px 16px;font-size:.95rem}
/* Toute la charte étant rouge, un message d'erreur simplement rouge ne se
   remarquait plus : il est mis en gras et le champ fautif prend une bordure
   épaisse, pour rester repérable. */
.wpcf7-not-valid-tip{color:#B3261E;font-size:.85rem;margin-top:4px;font-weight:700}
.edk-form :is(input,select,textarea).wpcf7-not-valid{border:2px solid #B3261E;background:#FEF6F5}

/* ---------- Pied de page ---------------------------------------------- */
.site-footer{background:var(--creme);color:var(--texte);border-top:3px solid var(--rouge);padding:clamp(44px,5vw,68px) 0 0;font-size:.96rem}
.footer-grid{display:grid;gap:36px;grid-template-columns:minmax(0,1.4fr) repeat(auto-fit,minmax(170px,1fr))}
.site-footer h3{color:var(--rouge-fonce);font-size:1.02rem;margin-bottom:14px}
.site-footer a{color:var(--texte);text-decoration:none}
.site-footer a:hover{color:var(--rouge-fonce);text-decoration:underline}
.site-footer ul{list-style:none;padding:0;margin:0}
.site-footer li{margin-bottom:9px}
.f-logo{max-height:54px;margin-bottom:16px}
.f-contact li{display:flex;gap:10px;align-items:flex-start}
.f-contact .ico{color:var(--rouge);margin-top:3px}
.f-bas{
  border-top:1px solid var(--bord);margin-top:40px;padding:20px 0;
  display:flex;justify-content:space-between;gap:16px;flex-wrap:wrap;font-size:.88rem;
}
/* Bloc de droite du bas de page : signature de l'agence, puis les réseaux
   quand ils sont renseignés. */
.f-bas-droite{display:flex;align-items:center;gap:18px;flex-wrap:wrap;justify-content:flex-end}
.f-credit{font-size:.88rem}
.f-social{display:flex;gap:12px}
.f-social a{
  width:38px;height:38px;border-radius:50%;background:var(--rouge-pale);
  display:grid;place-items:center;color:var(--rouge-fonce);
}
.f-social a:hover{background:var(--gris-fonce);color:#fff}

/* ---------- Barre d'appel mobile --------------------------------------- */
.callbar{
  position:fixed;left:0;right:0;bottom:0;z-index:95;display:none;
  background:#fff;border-top:1px solid var(--bord);padding:9px 12px;
  gap:10px;box-shadow:0 -4px 18px rgba(124,31,29,.12);
}
.callbar .btn{flex:1;justify-content:center;padding:14px 12px;font-size:.98rem}


/* ---------- Responsive -------------------------------------------------- */
@media (max-width:1024px){
  .hero-grid{grid-template-columns:1fr;gap:34px}
  .bandeau-devis{grid-template-columns:1fr}
}

@media (max-width:1080px){
  body{font-size:16px}
  .topbar{display:none}
  .site-header .nav{min-height:66px;gap:12px}
  .site-header .btn-tel{display:none}
  .menu-toggle{display:block}
  .site-header nav{
    position:fixed;inset:66px 0 0;background:#fff;z-index:70;
    overflow-y:auto;padding:20px;margin:0;
    transform:translateX(100%);transition:transform .25s ease;
  }
  .site-header nav.ouvert{transform:none}
  .menu-principal{flex-direction:column;align-items:stretch;gap:0}
  .menu-principal > li{border-bottom:1px solid var(--bord)}
  .menu-principal a{padding:15px 4px;font-size:1.05rem;white-space:normal}
  .menu-principal .sub-menu{
    position:static;opacity:1;visibility:visible;transform:none;
    box-shadow:none;border:0;padding:0 0 8px 14px;min-width:0;
  }
  .menu-principal .sub-menu a{font-size:.98rem;padding:9px 4px}

  :root{--voile-1:.88;--voile-2:.82;--voile-3:.74}
  .hero-media::after{
    background:linear-gradient(180deg,
      rgba(var(--voile-ombre),var(--voile-1)) 0%,
      rgba(var(--voile-ombre),var(--voile-2)) 60%,
      rgba(var(--voile-ombre),var(--voile-3)) 100%);
  }

  /* Les 32px de côté du bloc de devis mangeraient trop de largeur utile
     sur un petit écran. */
  .hero-form{padding:20px}

  /* La barre d'appel occupe le bas de l'écran : on libère la place. */
  .callbar{display:flex}
  body{padding-bottom:74px}
  .site-footer .f-bas{padding-bottom:24px}
}

@media (prefers-reduced-motion:reduce){
  *{animation-duration:.01ms !important;transition-duration:.01ms !important}
  .card:hover{transform:none}
  .realisation:hover .r-photo img{transform:none}
}

/* Impression : le client imprime parfois une page produit pour un client. */
@media print{
  .topbar,.callbar,.menu-toggle,.site-header nav,.bandeau-devis,.edk-form{display:none !important}
  body{font-size:12pt;color:#000}
}
