.elementor-kit-691{--e-global-color-primary:#311F15;--e-global-color-secondary:#E5D2AA;--e-global-color-text:#7A7A7A;--e-global-color-accent:#B61315;--e-global-color-61a6aa9:#222222;--e-global-color-eb92deb:#FFFFFF;--e-global-color-4cc472d:#FFF8E8;--e-global-typography-primary-font-family:"Roboto";--e-global-typography-primary-font-weight:600;--e-global-typography-secondary-font-family:"Roboto Slab";--e-global-typography-secondary-font-weight:400;--e-global-typography-text-font-family:"Roboto";--e-global-typography-text-font-weight:400;--e-global-typography-accent-font-family:"Roboto";--e-global-typography-accent-font-weight:500;color:var( --e-global-color-primary );font-family:"Poppins", Sans-serif;font-size:18px;font-weight:normal;font-style:normal;line-height:28px;}.elementor-kit-691 button,.elementor-kit-691 input[type="button"],.elementor-kit-691 input[type="submit"],.elementor-kit-691 .elementor-button{background-color:var( --e-global-color-primary );color:var( --e-global-color-eb92deb );}.elementor-kit-691 button:hover,.elementor-kit-691 button:focus,.elementor-kit-691 input[type="button"]:hover,.elementor-kit-691 input[type="button"]:focus,.elementor-kit-691 input[type="submit"]:hover,.elementor-kit-691 input[type="submit"]:focus,.elementor-kit-691 .elementor-button:hover,.elementor-kit-691 .elementor-button:focus{background-color:var( --e-global-color-secondary );color:var( --e-global-color-primary );}.elementor-kit-691 e-page-transition{background-color:#FFBC7D;}.elementor-kit-691 a{color:var( --e-global-color-accent );}.elementor-kit-691 a:hover{color:var( --e-global-color-secondary );}.elementor-kit-691 h1{color:var( --e-global-color-primary );font-family:"Playfair Display", Sans-serif;font-size:40px;font-weight:700;line-height:48px;}.elementor-kit-691 h2{color:var( --e-global-color-primary );font-family:"Playfair Display", Sans-serif;}.elementor-kit-691 h3{color:var( --e-global-color-primary );font-family:"Playfair Display", Sans-serif;}.elementor-kit-691 h4{color:var( --e-global-color-primary );font-family:"Playfair Display", Sans-serif;}.elementor-kit-691 h5{color:var( --e-global-color-primary );}.elementor-kit-691 h6{color:var( --e-global-color-accent );font-family:"Playfair Display", Sans-serif;}.elementor-section.elementor-section-boxed > .elementor-container{max-width:1140px;}.e-con{--container-max-width:1140px;}.elementor-widget:not(:last-child){margin-block-end:20px;}.elementor-element{--widgets-spacing:20px 20px;--widgets-spacing-row:20px;--widgets-spacing-column:20px;}{}h1.entry-title{display:var(--page-title-display);}.site-header .site-branding{flex-direction:column;align-items:stretch;}.site-header{padding-inline-end:0px;padding-inline-start:0px;}.site-footer .site-branding{flex-direction:column;align-items:stretch;}@media(max-width:1024px){.elementor-section.elementor-section-boxed > .elementor-container{max-width:1024px;}.e-con{--container-max-width:1024px;}}@media(max-width:767px){.elementor-section.elementor-section-boxed > .elementor-container{max-width:767px;}.e-con{--container-max-width:767px;}}/* Start custom CSS *//* =========================================================================
   Café Rogo — feuille signature de la refonte 2026
   Portée : tout est scopé sous .cr-refonte (posé sur le conteneur racine
   des pages/sections refonte). Aucune collision avec le CSS du site live.
   Les 4 couleurs de marque sont branchées sur les variables globales du Kit
   Elementor (#691) : ajuster une couleur globale se répercute ici.
   Source de vérité design : refonte-2026/maquette-src.html
   ========================================================================= */

.cr-refonte {
  /* Couleurs de marque, branchées sur les globales Elementor (fallback = valeur maquette) */
  --brun: var(--e-global-color-primary, #311F15);
  --or: var(--e-global-color-secondary, #E5D2AA);
  --rouge: var(--e-global-color-accent, #B61315);
  --creme: var(--e-global-color-4cc472d, #FFF8E8);
  /* Nuances propres à la refonte (pas de globale dédiée) */
  --brun-fonce: #241710;
  --or-clair: #F0E4C4;
  --texte: #4a3a2e;
  --texte-doux: #7d6a59;
  --kraft: #cfae7e;
  --kraft-fonce: #b8946a;
  /* Assombri le 2026-07-30. L'ancien #d9a441 donnait 2,25 pour 1 sur blanc,
     sous le minimum de 3 exige d'un element graphique porteur d'information :
     les etoiles se distinguaient mal du fond de la carte. Le nouveau ton passe
     a 3,27 sur blanc et 3,09 sur creme, en restant dans la meme famille.
     Le dore decoratif --or n'est PAS touche : sur fond brun il mesure 11,7,
     il n'a jamais pose de probleme. */
  --etoile: #ba8424;
  /* Typos (déjà chargées par le Kit : Roboto + Roboto Slab) */
  --slab: 'Roboto Slab', Georgia, serif;
  --sans: 'Roboto', system-ui, -apple-system, 'Segoe UI', sans-serif;
  /* Tokens d'espacement */
  --pad-section: 72px;
  --gap-grille: 22px;
  --radius: 10px;

  color: var(--texte);
  font: 16px/1.6 var(--sans);
}
.cr-refonte * { box-sizing: border-box; }
.cr-refonte img { max-width: 100%; }
.cr-refonte .wrap { max-width: 1080px; margin: 0 auto; padding: 0 24px; }

.cr-refonte h1, .cr-refonte h2, .cr-refonte h3, .cr-refonte h4 {
  /* Le poids 700 est explicite : dans la maquette il venait du navigateur, mais
     le Kit Elementor impose 500 a tous les titres. D'ou des H2 et H3 mous face
     a un H1 en 700 (constate sur la fiche produit le 2026-07-29). */
  font-family: var(--slab); font-weight: 700; color: var(--brun); margin: 0; text-wrap: balance;
}
.cr-refonte .eyebrow {
  font: 600 0.72rem/1 var(--sans);
  text-transform: uppercase; letter-spacing: 0.18em;
  color: var(--rouge); margin: 0 0 14px;
}
.cr-refonte .dark .eyebrow { color: var(--or); }

.cr-refonte .btn {
  display: inline-block; background: var(--rouge); color: var(--creme);
  font: 600 0.95rem/1 var(--sans); padding: 15px 28px; border-radius: 4px;
  text-decoration: none; border: none; cursor: pointer;
  transition: transform .15s ease, box-shadow .15s ease;
}
.cr-refonte .btn:hover { transform: translateY(-1px); box-shadow: 0 6px 18px rgba(182,19,21,.3); }
.cr-refonte .btn.ghost { background: transparent; color: var(--creme); border: 1.5px solid rgba(255,248,232,.45); }
.cr-refonte .btn.ghost:hover { box-shadow: none; border-color: var(--creme); }

.cr-refonte .stars { color: var(--etoile); letter-spacing: 2px; }

/* ---------- bandeau annonce ---------- */

/* ---------- hero ---------- */
.cr-refonte .hero {
  background:
    radial-gradient(1100px 480px at 82% -10%, rgba(229,210,170,.14), transparent 60%),
    radial-gradient(700px 420px at -8% 110%, rgba(182,19,21,.18), transparent 55%),
    var(--brun-fonce);
  color: var(--creme); overflow: hidden;
}
.cr-refonte .hero .wrap { display: grid; grid-template-columns: 1.1fr 1fr; gap: 48px; align-items: center; padding-top: 72px; padding-bottom: 72px; }
.cr-refonte .hero h1 { color: var(--creme); font-size: clamp(1.9rem, 4vw, 2.7rem); font-weight: 700; line-height: 1.15; letter-spacing: -0.01em; }
.cr-refonte .hero h1 em { font-style: normal; color: var(--or); }
.cr-refonte .hero p.pitch { color: rgba(255,248,232,.78); margin: 18px 0 8px; max-width: 46ch; }
.cr-refonte .hero .preuve { display: flex; align-items: center; gap: 10px; margin: 14px 0 26px; font-size: .92rem; color: rgba(255,248,232,.85); }
.cr-refonte .hero .ctas { display: flex; gap: 14px; flex-wrap: wrap; }

/* ---------- réassurance ---------- */
.cr-refonte .reassurance { background: var(--or); }
.cr-refonte .reassurance .wrap { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; padding-top: 22px; padding-bottom: 22px; }
.cr-refonte .reassurance .item { display: flex; align-items: center; gap: 12px; color: var(--brun); font: 500 0.88rem/1.3 var(--sans); }
.cr-refonte .reassurance svg { flex: none; width: 26px; height: 26px; stroke: var(--rouge); }

/* ---------- sections communes ---------- */
.cr-refonte .section { padding: var(--pad-section) 0; }
.cr-refonte .section-head { max-width: 60ch; margin-bottom: 40px; }
.cr-refonte .section-head h2 { font-size: clamp(1.5rem, 3vw, 2rem); font-weight: 700; }
.cr-refonte .section-head p { color: var(--texte-doux); margin: 10px 0 0; }
.cr-refonte .center { text-align: center; }
.cr-refonte .center .section-head { margin-left: auto; margin-right: auto; }

/* ---------- frise 3 étapes ---------- */
.cr-refonte .frise { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
.cr-refonte .etape { background: #fff; border: 1px solid rgba(49,31,21,.1); border-radius: var(--radius); padding: 28px 26px; position: relative; }
.cr-refonte .etape .num { font: 700 0.8rem/1 var(--slab); color: var(--creme); background: var(--rouge); width: 30px; height: 30px; border-radius: 50%; display: flex; align-items: center; justify-content: center; margin-bottom: 16px; }
.cr-refonte .etape h3 { font-size: 1.05rem; margin-bottom: 8px; }
.cr-refonte .etape p { margin: 0; font-size: .9rem; color: var(--texte-doux); }
.cr-refonte .etape p b { color: var(--brun); }

/* ---------- guidage (sélecteur) ---------- */
.cr-refonte .guidage { background: var(--or-clair); }
.cr-refonte .pills { display: flex; gap: 10px; justify-content: center; flex-wrap: wrap; margin: 8px 0 22px; }
.cr-refonte .pill { font: 500 0.9rem/1 var(--sans); color: var(--brun); background: #fff; border: 1.5px solid rgba(49,31,21,.18); border-radius: 100px; padding: 11px 20px; cursor: pointer; }
.cr-refonte .pill.on { background: var(--brun); color: var(--creme); border-color: var(--brun); }

/* Pastilles du selecteur montees en widgets Bouton natifs : le style va sur le
   .elementor-button, pas sur le wrapper, sinon la pastille est dessinee deux fois. */
.cr-refonte .pills .elementor-button {
  font: 500 0.9rem/1 var(--sans); color: var(--brun); background: #fff;
  border: 1.5px solid rgba(49,31,21,.18); border-radius: 100px;
  padding: 12px 22px; text-decoration: none; display: inline-flex; align-items: center;
}
.cr-refonte .pills .elementor-button:hover,
.cr-refonte .pills .elementor-button:focus {
  background: var(--brun); color: var(--creme); border-color: var(--brun);
}
/* La section porte elle-meme la classe .guidage (elle EST le .cr-refonte) :
   sans le selecteur colle, le fond ne s'appliquait pas. */
.cr-refonte.guidage { background: var(--or-clair); }

/* Pastilles d'information (compatibilite machines) : meme forme que les
   pastilles cliquables mais pleines, et sans curseur main. Elles affirment,
   elles ne filtrent pas : tous les cafes conviennent a toutes les machines. */
.cr-refonte .pills .pill-info .elementor-heading-title {
  display: inline-flex; align-items: center;
  font: 500 0.9rem/1 var(--sans); color: var(--creme);
  background: var(--brun); border: 1.5px solid var(--brun);
  border-radius: 100px; padding: 12px 22px;
}
.cr-refonte .pills-info-note {
  font-size: .82rem; color: var(--texte-doux); margin-top: 4px;
}
.cr-refonte .q { font: 600 0.78rem/1 var(--sans); text-transform: uppercase; letter-spacing: .12em; color: var(--texte-doux); margin: 26px 0 12px; }

/* Espacement du selecteur (2026-07-29).
   Dans la maquette, .q (mb 12) et .pills (mt 8) sont dans un flux normal : leurs
   marges verticales fusionnent. Le conteneur Elementor est en flex, ou la fusion
   n'existe pas : 22 + 26 = 48px se cumulaient entre deux groupes au lieu de 26.
   On porte donc tout l'espacement sur .q et on annule celui des .pills. */
.cr-refonte.guidage .elementor-widget.elementor-widget.q { margin-block-start: 20px; margin-block-end: 8px; }
.cr-refonte.guidage .pills { margin: 0; }

/* ---------- grille produits ---------- */
.cr-refonte .grille { display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--gap-grille); }
.cr-refonte .carte { background: #fff; border: 1px solid rgba(49,31,21,.1); border-radius: var(--radius); overflow: hidden; display: flex; flex-direction: column; transition: transform .15s ease, box-shadow .15s ease; position: relative; }
.cr-refonte .carte:hover { transform: translateY(-3px); box-shadow: 0 12px 28px rgba(49,31,21,.12); }
.cr-refonte .badge-fav { position: absolute; top: 12px; left: 12px; z-index: 2; background: var(--rouge); color: var(--creme); font: 600 0.66rem/1 var(--sans); text-transform: uppercase; letter-spacing: .06em; padding: 6px 10px; border-radius: 3px; }
.cr-refonte .sachet { background: linear-gradient(170deg, var(--or-clair), var(--or)); padding: 26px 0 18px; display: flex; align-items: flex-end; justify-content: center; height: 190px; }
.cr-refonte .sac { width: 96px; height: 128px; background: linear-gradient(165deg, var(--kraft), var(--kraft-fonce)); border-radius: 7px 7px 10px 10px; position: relative; box-shadow: 0 8px 16px rgba(49,31,21,.22); }
.cr-refonte .sac::before { content: ''; position: absolute; top: 0; left: 0; right: 0; height: 14px; background: rgba(49,31,21,.18); border-radius: 7px 7px 0 0; }
.cr-refonte .sac .etiq { position: absolute; left: 12px; right: 12px; top: 34px; bottom: 22px; width: auto; height: auto; background: var(--creme); border-radius: 4px; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 4px; font-family: var(--slab); }
.cr-refonte .sac .etiq .n { font-weight: 700; font-size: .82rem; color: var(--brun); }
.cr-refonte .sac .etiq .r { width: 18px; height: 3px; background: var(--rouge); border-radius: 2px; }
.cr-refonte .sac .etiq .g { font-size: .56rem; color: var(--texte-doux); font-family: var(--sans); text-align: center; padding: 0 4px; }
.cr-refonte .carte .infos { padding: 18px 20px 20px; display: flex; flex-direction: column; gap: 7px; flex: 1; }
.cr-refonte .carte h3 { font-size: 1.1rem; }
.cr-refonte .carte .gout { font-size: .82rem; color: var(--texte-doux); }
.cr-refonte .carte .note { font-size: .8rem; color: var(--texte-doux); }
.cr-refonte .carte .prix { margin-top: auto; font-family: var(--slab); font-weight: 700; color: var(--brun); font-size: 1rem; padding-top: 8px; }
.cr-refonte .carte .prix small { font-family: var(--sans); font-weight: 400; color: var(--texte-doux); font-size: .78rem; display: block; margin-top: 2px; }

/* ---------- abonnement ---------- */
.cr-refonte .abo { background: radial-gradient(800px 400px at 105% 10%, rgba(182,19,21,.22), transparent 55%), var(--brun); border-radius: 14px; color: var(--creme); padding: 52px 56px; display: grid; grid-template-columns: 1.3fr 1fr; gap: 40px; align-items: center; }
.cr-refonte .abo h2 { color: var(--creme); font-size: clamp(1.4rem, 2.6vw, 1.9rem); }
.cr-refonte .abo p { color: rgba(255,248,232,.75); margin: 14px 0 24px; max-width: 48ch; }
.cr-refonte .abo .visuel { border: 1px dashed rgba(229,210,170,.4); border-radius: var(--radius); padding: 26px; text-align: center; color: var(--or); font-size: .85rem; }

/* ---------- bloc Ludo ---------- */
.cr-refonte .ludo { background: var(--or-clair); }
.cr-refonte .ludo .wrap { display: grid; grid-template-columns: 1fr 1.3fr; gap: 52px; align-items: center; padding-top: 72px; padding-bottom: 72px; }
.cr-refonte .portrait { aspect-ratio: 4/5; border-radius: var(--radius); background: linear-gradient(160deg, rgba(74,58,46,.14) 0%, rgba(51,34,21,.28) 100%), var(--or); border: 1px dashed rgba(49,31,21,.3); display: flex; align-items: center; justify-content: center; color: var(--texte-doux); font-size: .82rem; text-transform: uppercase; letter-spacing: .08em; text-align: center; padding: 20px; }
.cr-refonte .ludo blockquote { margin: 22px 0; padding: 0 0 0 18px; border-left: 3px solid var(--rouge); font-family: var(--slab); font-size: 1.05rem; color: var(--brun); }
.cr-refonte .signature { font-family: 'Snell Roundhand', 'Segoe Script', cursive; font-size: 1.7rem; color: var(--brun); }
.cr-refonte .signature small { display: block; font: 600 .7rem/1.4 var(--sans); text-transform: uppercase; letter-spacing: .12em; color: var(--texte-doux); }

/* ---------- avis ---------- */
.cr-refonte .avis-grille { display: grid; grid-template-columns: repeat(3, 1fr); gap: 22px; }
.cr-refonte .avis-carte { background: #fff; border: 1px solid rgba(49,31,21,.1); border-radius: var(--radius); padding: 26px; display: flex; flex-direction: column; gap: 12px; }
.cr-refonte .avis-carte p { margin: 0; font-size: .92rem; color: var(--texte); }
.cr-refonte .avis-carte .qui { font: 600 .82rem/1.4 var(--sans); color: var(--brun); margin-top: auto; }
.cr-refonte .avis-carte .qui small { display: block; font-weight: 400; color: var(--texte-doux); }
.cr-refonte .avis-google { border: 1.5px dashed rgba(49,31,21,.25); background: transparent; align-items: flex-start; justify-content: center; }

/* ---------- bande pro ---------- */
.cr-refonte .pro { background: var(--brun-fonce); color: var(--creme); }
.cr-refonte .pro .wrap { display: flex; align-items: center; gap: 24px; flex-wrap: wrap; padding-top: 30px; padding-bottom: 30px; }
.cr-refonte .pro p { margin: 0; font-size: .95rem; color: rgba(255,248,232,.85); }
.cr-refonte .pro b { color: var(--or); }
.cr-refonte .pro a { margin-left: auto; color: var(--creme); font-weight: 600; font-size: .9rem; }

/* ---------- footer ---------- */

.cr-refonte .news { display: flex; gap: 8px; margin-top: 6px; }
.cr-refonte .news input { flex: 1; min-width: 0; background: rgba(255,248,232,.08); border: 1px solid rgba(255,248,232,.25); border-radius: 4px; color: var(--creme); padding: 11px 14px; font: 400 .88rem/1 var(--sans); }
.cr-refonte .news input::placeholder { color: rgba(255,248,232,.45); }
.cr-refonte .news .btn { padding: 11px 18px; font-size: .85rem; }

/* ---------- liste ---------- */
.cr-refonte .liste-head { padding: 48px 0 8px; }
.cr-refonte .liste-head h1 { font-size: clamp(1.7rem, 3.4vw, 2.3rem); font-weight: 700; color: var(--brun); font-family: var(--slab); }
.cr-refonte .liste-head p { color: var(--texte-doux); max-width: 60ch; margin: 12px 0 0; }
.cr-refonte .filtres { display: flex; gap: 10px; flex-wrap: wrap; padding: 22px 0 34px; }
.cr-refonte .filtres .sep { width: 1px; background: rgba(49,31,21,.15); margin: 4px 6px; }
.cr-refonte .interlude { background: var(--or); border-radius: 8px; margin: 26px 0; padding: 16px 24px; display: flex; align-items: center; justify-content: center; gap: 10px; flex-wrap: wrap; color: var(--brun); font: 500 .92rem/1.4 var(--sans); text-align: center; }
.cr-refonte .interlude b { font-family: var(--slab); }
/* Le reset des marges de widget d'Elementor mange la marge basse : sans ca le
   bandeau restait colle a ce qui le suit. Meme piege que les titres de section,
   propriete logique et specificite (0,4,0) obligatoires. */
.cr-refonte .elementor-widget.elementor-widget.interlude { margin-block-end: 26px; }
.cr-refonte .carte-offre { border-radius: var(--radius); padding: 30px 26px; display: flex; flex-direction: column; gap: 10px; justify-content: center; }
.cr-refonte .carte-offre.sombre { background: var(--brun); color: var(--creme); }
.cr-refonte .carte-offre.sombre h3 { color: var(--creme); }
.cr-refonte .carte-offre.dore { background: var(--or); }
.cr-refonte .carte-offre p { margin: 0; font-size: .88rem; opacity: .85; }
.cr-refonte .carte-offre a { font-weight: 600; font-size: .9rem; color: var(--rouge); text-decoration: none; margin-top: 6px; }
.cr-refonte .carte-offre.sombre a { color: var(--or); }
.cr-refonte .seo-avis { display: grid; grid-template-columns: 1.4fr 1fr; gap: 40px; padding: 20px 0 40px; }
.cr-refonte .seo-avis .seo-txt { font-size: .88rem; color: var(--texte-doux); max-width: 65ch; }
.cr-refonte .seo-avis h3 { font-size: 1rem; margin-bottom: 10px; }

/* ---------- fiche produit ---------- */
.cr-refonte .fil { font-size: .8rem; color: var(--texte-doux); padding: 20px 0 6px; }
.cr-refonte .fil a { color: var(--texte-doux); text-decoration: none; }
.cr-refonte .fil a:hover { color: var(--brun); }
.cr-refonte .achat { display: grid; grid-template-columns: 1fr 1fr; gap: 48px; padding: 22px 0 56px; align-items: start; }
.cr-refonte .galerie .grand { background: linear-gradient(170deg, var(--or-clair), var(--or)); border-radius: 12px; height: 400px; display: flex; align-items: center; justify-content: center; position: relative; }
.cr-refonte .badge-date { position: absolute; top: 16px; left: 16px; background: var(--brun); color: var(--or); font: 600 .74rem/1 var(--sans); padding: 8px 12px; border-radius: 4px; }
.cr-refonte .sac.grand { width: 170px; height: 226px; border-radius: 10px 10px 14px 14px; }
.cr-refonte .sac.grand::before { height: 24px; border-radius: 10px 10px 0 0; }
.cr-refonte .sac.grand .etiq { top: 58px; bottom: 38px; left: 20px; right: 20px; gap: 7px; }
.cr-refonte .sac.grand .etiq .n { font-size: 1.15rem; }
.cr-refonte .sac.grand .etiq .g { font-size: .72rem; }
.cr-refonte .vignettes { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; margin-top: 10px; }
.cr-refonte .vignettes .v { aspect-ratio: 1; border: 1px dashed rgba(49,31,21,.25); border-radius: 8px; display: flex; align-items: center; justify-content: center; font-size: .68rem; color: var(--texte-doux); text-align: center; padding: 8px; background: var(--or-clair); }
.cr-refonte .f-titre h1 { font-family: var(--slab); font-weight: 700; color: var(--brun); font-size: clamp(1.5rem, 3vw, 2.1rem); margin: 0; }
.cr-refonte .f-note { display: flex; align-items: center; gap: 8px; font-size: .88rem; color: var(--texte-doux); margin: 10px 0 14px; }
.cr-refonte .f-note a { color: var(--texte-doux); }
.cr-refonte .badges-gout { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 20px; }
.cr-refonte .badge-gout { font: 500 .78rem/1 var(--sans); background: var(--or-clair); color: var(--brun); border-radius: 100px; padding: 7px 13px; }
.cr-refonte .f-prix { font-family: var(--slab); font-weight: 700; font-size: 1.9rem; color: var(--brun); margin: 6px 0 2px; }
.cr-refonte .f-prix small { font: 400 .85rem/1 var(--sans); color: var(--texte-doux); }
.cr-refonte .opt { margin: 18px 0; }
.cr-refonte .opt .q { margin: 0 0 10px; }
.cr-refonte .opt .pills { justify-content: flex-start; margin: 0; }
.cr-refonte .hint { font-size: .8rem; color: var(--rouge); font-weight: 500; margin: 8px 0 0; }
.cr-refonte .cta-row { display: flex; flex-direction: row; gap: 12px; align-items: center; margin: 26px 0 14px; }
.cr-refonte .cta-row .btn { padding: 17px 34px; font-size: 1rem; }
.cr-refonte .qte { display: flex; align-items: center; gap: 14px; border: 1.5px solid rgba(49,31,21,.2); border-radius: 4px; padding: 13px 16px; font-weight: 600; color: var(--brun); }
.cr-refonte .sous-cta { display: flex; gap: 16px; flex-wrap: wrap; font-size: .78rem; color: var(--texte-doux); }
.cr-refonte .sous-cta span::before { content: '✓ '; color: var(--rouge); font-weight: 700; }
.cr-refonte .mini-frise { background: var(--or); border-radius: 8px; padding: 14px 20px; text-align: center; font-size: .88rem; color: var(--brun); margin-top: 22px; }
.cr-refonte .desc { display: grid; grid-template-columns: 1.3fr 1fr; gap: 44px; padding: 14px 0 30px; }
.cr-refonte .desc h2, .cr-refonte .marie h2, .cr-refonte .avis-prod h2 { font-size: 1.35rem; margin-bottom: 16px; }
.cr-refonte .desc p { max-width: 62ch; }
.cr-refonte .conseil-box { background: #fff; border: 1px solid rgba(49,31,21,.1); border-radius: var(--radius); padding: 24px; }
.cr-refonte .conseil-box h3 { font-size: .95rem; margin-bottom: 10px; }
.cr-refonte .conseil-box ul { margin: 0; padding-left: 18px; font-size: .88rem; color: var(--texte-doux); display: flex; flex-direction: column; gap: 6px; }
.cr-refonte .marie { padding: 26px 0 10px; }
.cr-refonte .marie-grille { display: grid; grid-template-columns: repeat(3, 1fr); gap: 20px; }
/* Le cross-sell de la fiche produit propose deux cafes, pas trois : sans ca, la
   grille gardait une troisieme colonne vide et retrecissait les deux cartes. */
.cr-refonte .marie .marie-grille { grid-template-columns: repeat(auto-fit, minmax(240px, 1fr)); }
.cr-refonte .marie .carte { text-decoration: none; color: inherit; }
.cr-refonte .marie .sachet img { max-height: 150px; width: auto; object-fit: contain; }
.cr-refonte .avis-prod { padding: 40px 0 10px; }
.cr-refonte .avis-layout { display: grid; grid-template-columns: 240px 1fr; gap: 40px; align-items: start; }
/* Un cafe sans avis (la Colombie aujourd'hui) ne produit pas de bloc score : le
   widget shortcode reste present mais vide, et laissait une colonne de 240px
   deserte a gauche des avis. */
.cr-refonte .avis-layout:not(:has(.score)) { grid-template-columns: 1fr; gap: 0; }
.cr-refonte .score { text-align: center; background: #fff; border: 1px solid rgba(49,31,21,.1); border-radius: var(--radius); padding: 26px 20px; }
.cr-refonte .score .g-note { font-family: var(--slab); font-weight: 700; font-size: 2.6rem; color: var(--brun); line-height: 1; }
.cr-refonte .score p { margin: 8px 0 0; font-size: .78rem; color: var(--texte-doux); }
.cr-refonte .barres { display: flex; flex-direction: column; gap: 6px; margin-top: 16px; }
.cr-refonte .barre { display: grid; grid-template-columns: 24px 1fr 20px; gap: 8px; align-items: center; font-size: .7rem; color: var(--texte-doux); }
.cr-refonte .barre .track { height: 6px; border-radius: 3px; background: rgba(49,31,21,.1); overflow: hidden; }
.cr-refonte .barre .fill { height: 100%; background: var(--etoile); border-radius: 3px; }
.cr-refonte .avis-item { border-bottom: 1px solid rgba(49,31,21,.1); padding: 18px 0; }
.cr-refonte .avis-item:first-child { padding-top: 0; }
.cr-refonte .avis-item .qui { font: 600 .85rem/1 var(--sans); color: var(--brun); }
.cr-refonte .avis-item .quand { font-size: .75rem; color: var(--texte-doux); margin-left: 8px; }
.cr-refonte .avis-item p { margin: 8px 0 0; font-size: .9rem; }
.cr-refonte .photo-avis { display: inline-flex; align-items: center; justify-content: center; width: 64px; height: 64px; margin-top: 10px; border: 1px dashed rgba(49,31,21,.25); border-radius: 6px; font-size: .58rem; color: var(--texte-doux); text-align: center; }
.cr-refonte .rappel-ludo { display: flex; align-items: center; gap: 16px; background: var(--or-clair); border-radius: var(--radius); padding: 18px 24px; margin: 36px 0; font-size: .92rem; color: var(--texte); }
.cr-refonte .rappel-ludo .rond { flex: none; width: 52px; height: 52px; border-radius: 50%; background: var(--or); border: 1px dashed rgba(49,31,21,.3); display: flex; align-items: center; justify-content: center; font-size: .5rem; color: var(--texte-doux); text-align: center; }
.cr-refonte .rappel-ludo a { color: var(--rouge); font-weight: 600; }

/* ---------- pages intérieures communes ---------- */
.cr-refonte .page-head { padding: 48px 0 34px; max-width: 62ch; }
.cr-refonte .page-head h1 { font-family: var(--slab); font-weight: 700; color: var(--brun); font-size: clamp(1.7rem, 3.4vw, 2.3rem); margin: 0; }
.cr-refonte .page-head p { color: var(--texte-doux); margin: 14px 0 0; }
.cr-refonte .bientot { display: inline-block; font: 600 .68rem/1 var(--sans); text-transform: uppercase; letter-spacing: .1em; background: var(--or); color: var(--brun); border-radius: 100px; padding: 6px 12px; margin-bottom: 14px; }

/* ---------- formulaires ---------- */
.cr-refonte .form-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
.cr-refonte .champ { display: flex; flex-direction: column; gap: 6px; }
.cr-refonte .champ.large { grid-column: 1 / -1; }
.cr-refonte .champ label { font: 600 .78rem/1 var(--sans); color: var(--brun); }
.cr-refonte .champ input, .cr-refonte .champ select, .cr-refonte .champ textarea { font: 400 .92rem/1.4 var(--sans); color: var(--brun); background: #fff; border: 1.5px solid rgba(49,31,21,.2); border-radius: 5px; padding: 12px 14px; }
.cr-refonte .champ textarea { min-height: 110px; resize: vertical; }
.cr-refonte .champ input:focus, .cr-refonte .champ select:focus, .cr-refonte .champ textarea:focus { outline: 2px solid var(--rouge); outline-offset: 1px; }

/* ---------- panier ---------- */
.cr-refonte .panier-item { display: grid; grid-template-columns: 92px 1fr auto auto; gap: 20px; align-items: center; background: #fff; border: 1px solid rgba(49,31,21,.1); border-radius: var(--radius); padding: 18px 22px; }
.cr-refonte .panier-item .visu { background: var(--or-clair); border-radius: 8px; height: 92px; display: flex; align-items: center; justify-content: center; }
.cr-refonte .panier-item h3 { font-size: 1rem; }
.cr-refonte .panier-item .var { font-size: .8rem; color: var(--texte-doux); }
.cr-refonte .progress-franco { background: #fff; border: 1px solid rgba(49,31,21,.1); border-radius: var(--radius); padding: 18px 22px; margin: 18px 0; font-size: .88rem; color: var(--texte); }
.cr-refonte .progress-franco .track { height: 8px; border-radius: 4px; background: rgba(49,31,21,.1); margin-top: 10px; overflow: hidden; }
.cr-refonte .progress-franco .fill { height: 100%; background: var(--rouge); border-radius: 4px; }
.cr-refonte .totaux { background: #fff; border: 1px solid rgba(49,31,21,.1); border-radius: var(--radius); padding: 26px; display: flex; flex-direction: column; gap: 12px; font-size: .92rem; }
.cr-refonte .totaux .ligne { display: flex; justify-content: space-between; color: var(--texte-doux); }
.cr-refonte .totaux .ligne.total { color: var(--brun); font-family: var(--slab); font-weight: 700; font-size: 1.15rem; border-top: 1px solid rgba(49,31,21,.12); padding-top: 12px; }
.cr-refonte .panier-layout { display: grid; grid-template-columns: 1.6fr 1fr; gap: 28px; align-items: start; padding-bottom: 40px; }

/* ---------- article conseil ---------- */
.cr-refonte .art-layout { display: grid; grid-template-columns: 220px 1fr; gap: 48px; padding: 10px 0 40px; align-items: start; }
.cr-refonte .sommaire { position: sticky; top: 20px; border-left: 2px solid rgba(49,31,21,.12); padding-left: 18px; display: flex; flex-direction: column; gap: 10px; font-size: .84rem; }
.cr-refonte .sommaire a { color: var(--texte-doux); text-decoration: none; }
.cr-refonte .sommaire a:hover { color: var(--rouge); }
.cr-refonte .sommaire .t { font: 600 .7rem/1 var(--sans); text-transform: uppercase; letter-spacing: .12em; color: var(--brun); }
.cr-refonte .art-body { max-width: 65ch; }
.cr-refonte .art-body h2 { font-size: 1.3rem; margin: 34px 0 12px; }
.cr-refonte .art-body p { margin: 0 0 16px; }
.cr-refonte .auteur { display: flex; align-items: center; gap: 14px; padding: 16px 0; margin: 18px 0; border-top: 1px solid rgba(49,31,21,.12); border-bottom: 1px solid rgba(49,31,21,.12); font-size: .85rem; color: var(--texte-doux); }
.cr-refonte .auteur .rond { flex: none; width: 44px; height: 44px; border-radius: 50%; background: var(--or); border: 1px dashed rgba(49,31,21,.3); display: flex; align-items: center; justify-content: center; font-size: .45rem; color: var(--texte-doux); }
.cr-refonte .auteur b { color: var(--brun); }
.cr-refonte .encart-produit { display: flex; gap: 18px; align-items: center; background: var(--or-clair); border-radius: var(--radius); padding: 18px 22px; margin: 26px 0; }
.cr-refonte .encart-produit .visu { flex: none; width: 64px; height: 84px; background: linear-gradient(165deg, var(--kraft), var(--kraft-fonce)); border-radius: 5px; }
.cr-refonte .encart-produit p { margin: 0; font-size: .85rem; color: var(--texte-doux); }
.cr-refonte .encart-produit b { color: var(--brun); display: block; font-size: .95rem; }
.cr-refonte .encart-produit .btn { margin-left: auto; padding: 11px 18px; font-size: .85rem; white-space: nowrap; }
.cr-refonte .placeholder-texte { border: 1.5px dashed rgba(49,31,21,.2); border-radius: 8px; padding: 22px; color: var(--texte-doux); font-size: .85rem; text-align: center; margin: 0 0 16px; }
.cr-refonte details.faq { background: #fff; border: 1px solid rgba(49,31,21,.1); border-radius: 8px; padding: 16px 20px; margin-bottom: 10px; }
.cr-refonte details.faq summary { font: 600 .92rem/1.4 var(--sans); color: var(--brun); cursor: pointer; }
.cr-refonte details.faq p { margin: 12px 0 0; font-size: .88rem; color: var(--texte-doux); }

/* ---------- revendeur / torréfacteur ---------- */
.cr-refonte .bande-sombre { background: radial-gradient(900px 400px at 90% -20%, rgba(229,210,170,.12), transparent 60%), var(--brun-fonce); color: var(--creme); }
.cr-refonte .bande-sombre .wrap { display: grid; grid-template-columns: 1.2fr 1fr; gap: 48px; align-items: center; padding-top: 64px; padding-bottom: 64px; }
.cr-refonte .bande-sombre h1 { font-family: var(--slab); font-weight: 700; color: var(--creme); font-size: clamp(1.6rem, 3.2vw, 2.2rem); margin: 0; }
.cr-refonte .bande-sombre p { color: rgba(255,248,232,.78); }
.cr-refonte .media-ph { border: 1px dashed rgba(229,210,170,.4); border-radius: var(--radius); min-height: 260px; display: flex; align-items: center; justify-content: center; color: var(--or); font-size: .8rem; text-transform: uppercase; letter-spacing: .08em; text-align: center; padding: 20px; }
.cr-refonte .logos-strip { display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px; }
.cr-refonte .logos-strip .l { border: 1.5px dashed rgba(49,31,21,.2); border-radius: 8px; padding: 22px 10px; text-align: center; color: var(--texte-doux); font-size: .75rem; }
.cr-refonte .galerie-atelier { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }
.cr-refonte .galerie-atelier .v { aspect-ratio: 4/3; }

/* ---------- responsive ---------- */
@media (max-width: 900px) {
  .cr-refonte .hero .wrap, .cr-refonte .ludo .wrap, .cr-refonte .abo { grid-template-columns: 1fr; }
  .cr-refonte .grille, .cr-refonte .reassurance .wrap { grid-template-columns: repeat(2, 1fr); }
  .cr-refonte .avis-grille, .cr-refonte .frise { grid-template-columns: 1fr; }
    .cr-refonte .achat, .cr-refonte .desc, .cr-refonte .seo-avis, .cr-refonte .avis-layout { grid-template-columns: 1fr; }
  .cr-refonte .marie-grille { grid-template-columns: 1fr; }
  .cr-refonte .galerie .grand { height: 320px; }
  .cr-refonte .panier-layout, .cr-refonte .bande-sombre .wrap, .cr-refonte .form-grid { grid-template-columns: 1fr; }
  .cr-refonte .art-layout { grid-template-columns: 1fr; }
  .cr-refonte .sommaire { position: static; }
  .cr-refonte .logos-strip { grid-template-columns: repeat(2, 1fr); }
  .cr-refonte .galerie-atelier { grid-template-columns: 1fr; }
  .cr-refonte .panier-item { grid-template-columns: 72px 1fr; }
}
@media (max-width: 560px) {
  .cr-refonte .grille, .cr-refonte .reassurance .wrap { grid-template-columns: 1fr; }
  .cr-refonte .abo { padding: 32px 24px; }
}

/* =========================================================================
   Adaptations widgets Elementor natifs pour header / footer refonte
   (le Nav Menu et le Button produisent un markup .elementor-*, pas .nav/.panier)
   ========================================================================= */

/* bouton panier */

/* bouton rouge plein (CTA) rendu par le widget Button */
.cr-refonte .cr-btn-rouge .elementor-button {
  background: var(--rouge); color: var(--creme); border: none; border-radius: 4px;
  font: 600 0.95rem/1 var(--sans); padding: 15px 28px;
}
.cr-refonte .cr-btn-rouge .elementor-button:hover { box-shadow: 0 6px 18px rgba(182,19,21,.3); transform: translateY(-1px); }

/* champ + bouton newsletter footer rendus par widgets */

/* newsletter footer : formulaire Elementor branché ParPigeon */

/* formulaire pro (revendeur) rendu par le widget Form Elementor */
.cr-refonte .cr-form-pro .elementor-field-group > label { font: 600 .78rem/1 var(--sans); color: var(--brun); margin-bottom: 6px; }
.cr-refonte .cr-form-pro .elementor-field-textual,
.cr-refonte .cr-form-pro select.elementor-field-textual {
  font: 400 .92rem/1.4 var(--sans); color: var(--brun); background: #fff;
  border: 1.5px solid rgba(49,31,21,.2); border-radius: 5px; padding: 12px 14px;
}
.cr-refonte .cr-form-pro textarea.elementor-field-textual { min-height: 110px; }
.cr-refonte .cr-form-pro .elementor-field-type-acceptance .elementor-field-subgroup { font-size: .82rem; color: var(--texte-doux); }
.cr-refonte .cr-form-pro .elementor-button {
  background: var(--rouge); color: var(--creme); border: none; border-radius: 4px;
  font: 600 .95rem/1 var(--sans); padding: 15px 28px;
}
.cr-refonte .cr-form-pro .elementor-button:hover { box-shadow: 0 6px 18px rgba(182,19,21,.3); }

/* vidéo hero (média réel médiathèque) */
.cr-refonte .hero-video {
  display: block; width: 100%; border-radius: 10px;
  border: 1px solid rgba(229,210,170,.25); background: #241710;
  aspect-ratio: 848 / 480; object-fit: cover;
}

/* image du bloc torréfacteur (remplace le placeholder .portrait) */
.cr-refonte .portrait-img { display: block; width: 100%; aspect-ratio: 4/5; object-fit: cover; border-radius: 10px; }

/* =========================================================================
   ADAPTATION WIDGETS NATIFS (2026-07-28)
   Les pages refonte sont montées en widgets Elementor natifs (heading,
   text-editor, button, image) pour que le client puisse editer les textes
   sans toucher au code. Le DOM genere par Elementor differe du markup de la
   maquette : ce bloc reconcilie les deux.
   Regle : tous les resets utilisent :where() pour rester a specificite basse,
   afin que les regles maquette ci-dessus continuent de gagner.
   ========================================================================= */

/* 1. Remise a zero des espacements par defaut des conteneurs Elementor.
      Les espacements sont poses par les classes maquette, pas par le Kit. */
.cr-refonte :where(.e-con),
.cr-refonte:where(.e-con) {
  --padding-top: 0px; --padding-bottom: 0px;
  --padding-left: 0px; --padding-right: 0px;
  --padding-block-start: 0px; --padding-block-end: 0px;
  --padding-inline-start: 0px; --padding-inline-end: 0px;
  --gap: 0px; --row-gap: 0px; --column-gap: 0px;
  --margin-top: 0px; --margin-bottom: 0px;
  --min-height: 0px;
}
/* Ne JAMAIS forcer --width / --content-width ici : les conteneurs "boxed" du
   header et du footer s'en servent pour leur largeur max. Les ecraser collait
   le logo et le footer aux bords de l'ecran. */

/* 2. Les widgets n'apportent aucune marge propre : c'est la maquette qui decide. */
.cr-refonte :where(.elementor-widget) { margin-bottom: 0; }
.cr-refonte :where(.elementor-widget-container) { margin: 0; padding: 0; }
.cr-refonte :where(.elementor-widget-text-editor) > .elementor-widget-container > *:last-child { margin-bottom: 0; }
/* Exception : la citation du bloc torrefacteur est seule dans son widget, donc
   toujours "dernier enfant". Le reset ci-dessus lui retirait sa marge basse et
   le paragraphe suivant venait se coller dessous. */
.cr-refonte .cr-citation > .elementor-widget-container > blockquote:last-child { margin-bottom: 22px; }

/* 3. Widgets dont le style vient integralement du wrapper (classe maquette).
      font:inherit fait redescendre la typo posee sur .elementor-element. */
.cr-refonte .eyebrow .elementor-heading-title,
.cr-refonte .stars .elementor-heading-title,
.cr-refonte .num .elementor-heading-title,
.cr-refonte .cr-inherit .elementor-heading-title,
.cr-refonte .signature .elementor-widget-container > p,
.cr-refonte .qui .elementor-widget-container > p {
  font: inherit; color: inherit; letter-spacing: inherit;
  text-transform: inherit; margin: 0;
}

/* 4. Titres : le Kit cible .elementor-widget-heading .elementor-heading-title
      (specificite 0,2,0) et battrait .cr-refonte h1 (0,1,1). On repasse devant. */
.cr-refonte .cr-h1 .elementor-heading-title { font-family: var(--slab); color: var(--creme); font-size: clamp(1.9rem, 4vw, 2.7rem); font-weight: 700; line-height: 1.15; letter-spacing: -0.01em; margin: 0; }
.cr-refonte .cr-h1 .elementor-heading-title em { font-style: normal; color: var(--or); }
.cr-refonte .cr-h2 .elementor-heading-title { font-family: var(--slab); color: var(--brun); font-size: clamp(1.5rem, 3vw, 2rem); font-weight: 700; line-height: 1.25; margin: 0; }
.cr-refonte .dark .cr-h2 .elementor-heading-title { color: var(--creme); }
.cr-refonte .cr-h3 .elementor-heading-title { font-family: var(--slab); color: var(--brun); font-size: 1.05rem; font-weight: 700; line-height: 1.3; margin: 0 0 8px; }

/* 5. Le numero d'etape : cercle rouge, pose sur le wrapper du widget heading. */
.cr-refonte .etape > .num { flex: none; }
/* Le .elementor-widget-container occupe toute la hauteur du cercle, et le
   chiffre restait cale en haut (9 px trop haut). On centre a l'interieur du
   container, pas seulement le container dans le cercle. */
.cr-refonte .etape > .num > .elementor-widget-container {
  display: flex; align-items: center; justify-content: center;
  width: 100%; height: 100%;
}

/* 6. Boutons natifs : la maquette stylait un <a class="btn">, Elementor rend
      <a class="elementor-button">. On reporte, y compris la variante ghost. */
.cr-refonte .cr-btn .elementor-button {
  display: inline-flex; align-items: center; justify-content: center;
  background: var(--rouge); color: var(--creme); border: none; border-radius: 4px;
  font: 600 .95rem/1 var(--sans); text-decoration: none; padding: 14px 24px;
  transition: transform .15s ease, box-shadow .15s ease;
}
.cr-refonte .cr-btn .elementor-button:hover { transform: translateY(-1px); box-shadow: 0 6px 18px rgba(182,19,21,.3); color: var(--creme); }
.cr-refonte .cr-btn.ghost .elementor-button { background: transparent; color: var(--creme); border: 1.5px solid rgba(255,248,232,.45); }
.cr-refonte .cr-btn.ghost .elementor-button:hover { box-shadow: none; border-color: var(--creme); transform: translateY(-1px); }
.cr-refonte .cr-cta-center { align-items: center; margin-top: 34px; }

/* 7. Paragraphes courants rendus par text-editor. */
.cr-refonte .pitch .elementor-widget-container > p { color: rgba(255,248,232,.78); margin: 0; max-width: 46ch; }
.cr-refonte .pitch { margin: 18px 0 8px; }
.cr-refonte .cr-etape-txt .elementor-widget-container > p { margin: 0; font-size: .9rem; color: var(--texte-doux); }
.cr-refonte .cr-etape-txt .elementor-widget-container > p b { color: var(--brun); }
.cr-refonte .cr-avis-txt .elementor-widget-container > p { margin: 0; font-size: .92rem; color: var(--texte); }
.cr-refonte .cr-avis-appel .elementor-widget-container > p b { color: var(--brun); }
.cr-refonte .cr-avis-lien .elementor-widget-container > p { margin: 0; }
.cr-refonte .cr-avis-lien a { color: var(--rouge); font-weight: 600; font-size: .9rem; text-decoration: none; }
.cr-refonte .cr-ludo-txt .elementor-widget-container > p { color: var(--texte-doux); max-width: 52ch; margin: 0; }
.cr-refonte .cr-citation blockquote {
  margin: 22px 0; padding: 0 0 0 18px; border-left: 3px solid var(--rouge);
  font-family: var(--slab); font-size: 1.05rem; color: var(--brun);
}
.cr-refonte .cr-signature { margin-top: 24px; }
.cr-refonte .cr-signature .elementor-widget-container > p { margin: 0; }
.cr-refonte .cr-qui { margin-top: auto; }

/* 8. Colonnes internes : un conteneur neutre qui empile ses widgets. */
.cr-refonte .cr-col { display: flex; flex-direction: column; align-items: flex-start; }

/* 9. Bande reassurance : chaque item est un conteneur flex (icone + texte). */
.cr-refonte .reassurance .item { flex-direction: row; }
.cr-refonte .reassurance .item .elementor-widget-html { display: flex; flex: none; }

/* 10. Le widget image porte la classe : c'est le <img> interne qu'on stylise. */
.cr-refonte .portrait-img img { display: block; width: 100%; aspect-ratio: 4/5; object-fit: cover; border-radius: 10px; }

/* 11. La preuve d'avis du hero s'aligne en ligne. */
.cr-refonte .hero .preuve { flex-direction: row; }

/* 12. Correctifs post-comparaison pixel avec la maquette (2026-07-28).
       Elementor pose flex-direction:column et align-items:center par defaut
       sur les conteneurs : les deux cassaient la maquette. */
.cr-refonte .hero .ctas { flex-direction: row; }
.cr-refonte .etape { align-items: stretch; }

/* =========================================================================
   13. Pages liste / conseils / revendeur en widgets natifs (2026-07-28)
   ========================================================================= */

/* Fil d'ariane rendu par un text-editor : la classe .fil est sur le wrapper. */
.cr-refonte .cr-fil .elementor-widget-container > p { margin: 0; font: inherit; color: inherit; }

/* Bandeau "interlude" : la classe porte le fond et le centrage, le p n'ajoute rien. */
.cr-refonte .cr-interlude .elementor-widget-container { width: 100%; }
.cr-refonte .cr-interlude .elementor-widget-container > p { margin: 0; font: inherit; color: inherit; text-align: center; }
.cr-refonte .cr-interlude b { font-family: var(--slab); }
.cr-refonte .cr-interlude-bas { margin: 40px 0 10px; }
.cr-refonte .cr-interlude a { color: var(--rouge); font-weight: 600; text-decoration: none; }

/* En-tete de la page liste. */
.cr-refonte .cr-liste-h1 .elementor-heading-title { font-family: var(--slab); font-size: clamp(1.7rem, 3.4vw, 2.3rem); font-weight: 700; color: var(--brun); margin: 0; }
.cr-refonte .cr-liste-chapo .elementor-widget-container > p { color: var(--texte-doux); max-width: 60ch; margin: 12px 0 0; }

/* La grille "Nos origines" tient sur 2 colonnes (5 encarts, pas 3). */
.cr-refonte .cr-grille-2 { grid-template-columns: repeat(2, 1fr); }

/* Encarts d'origine : titre + accroche coloree. */
.cr-refonte .cr-box-h3 .elementor-heading-title { font-family: var(--slab); font-size: .95rem; font-weight: 700; color: var(--brun); margin: 0 0 10px; }
.cr-refonte .cr-box-h3 .elementor-heading-title span { color: var(--rouge); }
.cr-refonte .cr-box-txt .elementor-widget-container > p { margin: 0; color: var(--texte-doux); font-size: .9rem; }

/* En-tete de la page conseils. */
.cr-refonte .cr-page-h1 .elementor-heading-title { font-family: var(--slab); font-weight: 700; color: var(--brun); font-size: clamp(1.7rem, 3.4vw, 2.3rem); margin: 0; }
.cr-refonte .cr-page-chapo .elementor-widget-container > p { color: var(--texte-doux); margin: 14px 0 0; }

/* Page revendeur. */
.cr-refonte .cr-eyebrow-or .elementor-heading-title { color: var(--or); }
/* Le sur-titre a 14px de respiration sous lui dans la maquette. Le reset des
   marges de widget Elementor les avalait : meme piege que les titres de
   section, propriete logique et specificite (0,4,0). */
.cr-refonte .elementor-widget.elementor-widget.eyebrow { margin-block-end: 14px; }
.cr-refonte .bande-sombre .cr-h1 .elementor-heading-title { font-size: clamp(1.6rem, 3.2vw, 2.2rem); letter-spacing: normal; }
.cr-refonte .cr-pro-txt .elementor-widget-container > p { color: rgba(255,248,232,.78); max-width: 52ch; margin: 16px 0 22px; }
.cr-refonte .cr-media-ph .elementor-widget-container { display: flex; align-items: center; justify-content: center; height: 100%; }
.cr-refonte .cr-media-ph .elementor-widget-container > p { margin: 0; font: inherit; color: inherit; }

/* Bloc d'inscription a la lettre, en bas de la page Conseils. Meme formulaire
   et meme action ParPigeon que celui du pied de page, mais sur fond clair : les
   couleurs du pied de page sont pensees pour du brun. Encadre en pointilles
   comme les cartes d'appel de la maquette, pour qu'il se distingue des articles
   sans se prendre pour l'un d'eux. */
.cr-refonte .cr-news-conseils {
  border: 1.5px dashed rgba(49,31,21,.25); border-radius: var(--radius);
  padding: 30px 32px; margin: 34px 0 40px;
  display: flex; flex-direction: column; gap: 10px;
}
.cr-refonte .cr-news-conseils .cr-h2 .elementor-heading-title { font-size: 1.25rem; }
.cr-refonte .cr-news-txt .elementor-widget-container > p {
  margin: 0; font-size: .9rem; color: var(--texte-doux);
  /* Pas de limite a 60ch ici : la phrase tient sur une ligne dans ce bloc, et
     la limite la coupait apres « Un email par », en laissant « trimestre, pas
     plus » seul sur la ligne suivante. text-wrap: balance repartit les lignes
     de facon egale quand l'ecran est trop etroit pour tout tenir. */
  max-width: none;
  text-wrap: balance;
}
.cr-refonte .cr-news-form-clair { margin-top: 8px; max-width: 520px; }

@media (max-width: 600px) {
  .cr-refonte .cr-news-conseils { padding: 24px 20px; }
}

/* =========================================================================
   PAGE « A PROPOS » (2026-07-29)
   Le texte de cette page est celui qui etait deja en ligne, mot pour mot : il
   est ecrit pour le referencement et n'a pas ete retouche. Seule la mise en
   page change. Un texte de cette longueur en colonne unique fait un mur : on
   alterne donc les traitements d'une section a l'autre.
   ========================================================================= */

.cr-refonte .cr-ap-sur .elementor-heading-title {
  font-family: var(--slab); font-weight: 700; font-size: 1.05rem; color: var(--or); margin: 14px 0 0;
}
.cr-refonte .cr-ap-intro .elementor-widget-container > p {
  color: rgba(255,248,232,.8); font-size: .98rem; margin: 0 0 10px; max-width: 46ch;
}
.cr-refonte .cr-ap-intro .elementor-widget-container > p:last-child { margin-bottom: 0; }
.cr-refonte .cr-ap-intro { margin-block-start: 18px; }
.cr-refonte .cr-ap-intro a { color: var(--or); }
.cr-refonte .cr-ap-photo-hero img {
  width: 100%; height: 340px; object-fit: cover; border-radius: var(--radius); display: block;
}

/* Video : remontee juste sous l'en-tete, la ou elle a le plus de chances d'etre
   vue. C'est la seule prise de parole en images de Ludovic sur le site. */
.cr-refonte.cr-ap-video > .e-con-inner { padding-top: 40px; padding-bottom: 0; }
.cr-refonte .cr-ap-video-cadre .elementor-wrapper { border-radius: var(--radius); overflow: hidden; }

.cr-refonte.cr-ap-sec > .e-con-inner { padding-top: 52px; padding-bottom: 0; }
.cr-refonte .cr-ap-h2 .elementor-heading-title { font-size: clamp(1.35rem, 2.4vw, 1.75rem); }
.cr-refonte .elementor-widget.elementor-widget.cr-ap-h2 { margin-block-end: 18px; }
.cr-refonte .cr-ap-corps .elementor-widget-container > p { margin: 0 0 14px; max-width: 60ch; }
.cr-refonte .cr-ap-corps .elementor-widget-container > p:last-child { margin-bottom: 0; }
.cr-refonte .cr-ap-corps .elementor-widget-container > ul { margin: 0 0 14px; padding-left: 20px; }
.cr-refonte .cr-ap-corps li { margin-bottom: 4px; }

/* Deux colonnes : le texte garde une largeur de lecture confortable et la photo
   occupe le reste. C'est ce qui casse le mur sans toucher aux mots. */
.cr-refonte .cr-ap-duo { display: grid; grid-template-columns: 1.15fr 1fr; gap: 46px; align-items: center; }
.cr-refonte .cr-ap-duo-inverse > .cr-ap-photo { order: -1; }
.cr-refonte .cr-ap-photo img { width: 100%; height: 300px; object-fit: cover; border-radius: var(--radius); display: block; }

/* Blocs de texte seul : titre a gauche, texte a droite.
   Sans cette grille, le texte gardait sa largeur de lecture (541px) dans un
   bloc large de 1032px, laissant 411px de vide a droite : on croyait qu'une
   image manquait. Le titre en colonne laterale occupe cette place et sert de
   repere, sans qu'on ait a inventer un visuel. */
.cr-refonte .cr-ap-encadre,
.cr-refonte .cr-ap-contraste,
.cr-refonte.cr-ap-texte-seul > .e-con-inner {
  display: grid; grid-template-columns: 1fr 1.7fr; gap: 44px; align-items: start;
}
.cr-refonte .cr-ap-encadre .cr-ap-corps .elementor-widget-container > p,
.cr-refonte .cr-ap-contraste .cr-ap-corps .elementor-widget-container > p,
.cr-refonte.cr-ap-texte-seul .cr-ap-corps .elementor-widget-container > p { max-width: none; }
/* Le titre ne pousse plus le texte vers le bas : il vit dans sa colonne. */
.cr-refonte .cr-ap-encadre .cr-ap-h2,
.cr-refonte .cr-ap-contraste .cr-ap-h2,
.cr-refonte.cr-ap-texte-seul .cr-ap-h2 { margin-block-end: 0; }

/* La section sur le geste est isolee dans un encadre : elle raconte le metier. */
.cr-refonte .cr-ap-encadre { background: var(--or-clair); border-radius: var(--radius); padding: 38px 40px; }

/* Celle qui prend position face a l'industriel passe sur fond sombre. */
.cr-refonte .cr-ap-contraste {
  background: var(--brun); border-radius: var(--radius); padding: 40px 42px;
}
.cr-refonte .cr-ap-contraste .cr-ap-h2 .elementor-heading-title { color: var(--creme); }
.cr-refonte .cr-ap-contraste .cr-ap-corps .elementor-widget-container > p { color: rgba(255,248,232,.82); }
.cr-refonte .cr-ap-contraste strong { color: var(--or); }

/* La signature ferme la page : elle se lit d'un bloc, centree, plutot qu'en
   colonnes. C'est une conclusion, pas une section d'information. */
.cr-refonte .cr-ap-signature {
  background: var(--brun-fonce); border-radius: var(--radius); padding: 52px 46px;
  text-align: center;
}
.cr-refonte .cr-ap-signature .cr-ap-mots .elementor-widget-container > p {
  max-width: 66ch; margin-left: auto; margin-right: auto;
}
.cr-refonte .cr-ap-mots .elementor-widget-container > p { color: rgba(255,248,232,.78); margin: 0 0 16px; max-width: 62ch; }
.cr-refonte .cr-ap-mots .elementor-widget-container > p:last-child { margin-bottom: 0; }
/* Les trois mots ouvrent le bloc : ils meritent la taille d'un titre. */
.cr-refonte .cr-ap-mots .elementor-widget-container > p:first-child {
  font-family: var(--slab); font-weight: 700; color: var(--creme);
  font-size: clamp(1.5rem, 3vw, 2rem); line-height: 1.25; margin-bottom: 18px;
}
.cr-refonte .cr-ap-mots a { color: var(--or); }
.cr-refonte .cr-ap-mots strong { color: var(--creme); }

.cr-refonte .cr-ap-galerie img { border-radius: var(--radius); }
.cr-refonte.cr-ap-final > .e-con-inner { padding-top: 44px; padding-bottom: 64px; text-align: center; }

@media (max-width: 860px) {
  .cr-refonte .cr-ap-encadre,
  .cr-refonte .cr-ap-contraste,
  .cr-refonte.cr-ap-texte-seul > .e-con-inner { grid-template-columns: 1fr; gap: 18px; }
  .cr-refonte .cr-ap-duo { grid-template-columns: 1fr; gap: 26px; }
  .cr-refonte .cr-ap-duo-inverse > .cr-ap-photo { order: 0; }
  .cr-refonte .cr-ap-encadre,
  .cr-refonte .cr-ap-contraste,
  .cr-refonte .cr-ap-signature { padding: 28px 24px; }
  .cr-refonte .cr-ap-photo-hero img { height: 240px; }
}

/* =========================================================================
   PAGE CONSEILS : article a la une, filtres, cartes (2026-07-29)
   ========================================================================= */

/* L'article a la une reprend le bloc sombre de la maquette. C'est un lien
   entier, pas un titre cliquable : la cible tactile fait tout le bloc. */
.cr-refonte .cr-une {
  display: grid; grid-template-columns: 1.3fr 1fr; gap: 32px; align-items: center;
  background: var(--brun); color: var(--creme);
  border-radius: var(--radius); padding: 30px 32px; margin: 26px 0 30px;
  text-decoration: none;
  transition: transform .15s ease, box-shadow .15s ease;
}
.cr-refonte .cr-une:hover { transform: translateY(-2px); box-shadow: 0 14px 30px rgba(49,31,21,.2); }
.cr-refonte .cr-une .eyebrow { color: var(--or); display: block; margin-bottom: 10px; }
.cr-refonte .cr-une h2 { color: var(--creme); font-size: clamp(1.25rem, 2.4vw, 1.7rem); margin: 0 0 12px; }
.cr-refonte .cr-une p { color: rgba(255,248,232,.78); font-size: .92rem; margin: 0 0 12px; }
.cr-refonte .cr-une-meta { font-size: .8rem; color: rgba(255,248,232,.6); }
.cr-refonte .cr-une-visuel { display: block; border-radius: 8px; overflow: hidden; }
.cr-refonte .cr-une-visuel img { display: block; width: 100%; height: 200px; object-fit: cover; }

/* Filtres : des boutons ici, et non des liens, puisque le tri se fait dans la
   page sans changer d'adresse. */
.cr-refonte .cr-filtres-conseils { padding: 0 0 26px; }
.cr-refonte .cr-filtres-conseils .pill {
  font: 500 0.9rem/1 var(--sans); color: var(--brun); background: #fff;
  border: 1.5px solid rgba(49,31,21,.18); border-radius: 100px;
  padding: 11px 20px; cursor: pointer;
  transition: background .15s ease, border-color .15s ease;
}
.cr-refonte .cr-filtres-conseils .pill:hover { border-color: var(--brun); }
.cr-refonte .cr-filtres-conseils .pill.on { background: var(--brun); color: var(--creme); border-color: var(--brun); }

/* Cartes d'articles : meme cadre que les cartes produit, pour que le site ait
   une seule facon de presenter une carte. */
.cr-refonte .cr-articles .elementor-post__card {
  background: #fff; border: 1px solid rgba(49,31,21,.1);
  border-radius: var(--radius); overflow: hidden; box-shadow: none;
  transition: transform .15s ease, box-shadow .15s ease;
}
.cr-refonte .cr-articles .elementor-post__card:hover { transform: translateY(-3px); box-shadow: 0 12px 28px rgba(49,31,21,.12); }
.cr-refonte .cr-articles .elementor-post__title,
.cr-refonte .cr-articles .elementor-post__title a {
  font-family: var(--slab); font-weight: 700; color: var(--brun); font-size: 1.02rem; line-height: 1.3;
}
.cr-refonte .cr-articles .elementor-post__excerpt p { font-size: .86rem; color: var(--texte-doux); }
.cr-refonte .cr-articles .elementor-post__badge {
  background: var(--brun); color: var(--creme);
  font: 600 .68rem/1 var(--sans); text-transform: uppercase; letter-spacing: .08em;
  border-radius: 100px; padding: 7px 12px;
}
.cr-refonte .cr-articles .elementor-post__meta-data { font-size: .78rem; color: var(--texte-doux); }
.cr-refonte .cr-articles .elementor-post[hidden] { display: none; }

@media (max-width: 860px) {
  .cr-refonte .cr-une { grid-template-columns: 1fr; padding: 24px; }
  .cr-refonte .cr-une-visuel { order: -1; }
}

/* =========================================================================
   ARTICLES DE CONSEILS (2026-07-29)
   Le gabarit d'article n'avait jamais ete repris depuis la refonte : il servait
   encore l'ancien dessin, fil d'ariane sous le titre et corps pleine largeur.
   ========================================================================= */

.cr-refonte.cr-art-entete > .e-con-inner { padding-top: 20px; padding-bottom: 8px; }

/* Fil d'ariane des articles : le dernier maillon repete le titre de l'article,
   qui figure en H1 juste dessous. Avec des titres de cette longueur, le fil
   passait sur deux lignes et venait coller le sur-titre de categorie. On le
   masque a l'affichage seulement : il reste dans le HTML et dans le balisage
   BreadcrumbList que Google lit. */
.cr-refonte .cr-fil .breadcrumb { display: flex; flex-wrap: wrap; align-items: center; gap: 6px; margin: 0; padding: 0; list-style: none; }
.cr-refonte .cr-fil .breadcrumb-item:last-child { display: none; }
/* Le separateur est un ::after pose sur chaque maillon, avec un tiret. On le
   passe au chevron de la maquette, et on retire celui de l'avant-dernier
   maillon : il pendait dans le vide depuis que le dernier est masque. */
.cr-refonte .cr-fil .breadcrumb-item::after { content: '›'; margin-left: 6px; color: var(--texte-doux); }
.cr-refonte .cr-fil .breadcrumb-item:nth-last-child(2)::after { content: none; }
.cr-refonte .cr-art-cat { margin-bottom: 12px; }
.cr-refonte .cr-art-cat .elementor-post-info__item,
.cr-refonte .cr-art-cat a {
  font: 600 0.72rem/1 var(--sans); text-transform: uppercase; letter-spacing: .18em;
  color: var(--rouge); text-decoration: none;
}
/* Le titre respire sous le fil d'ariane, qui n'est plus double par un
   sur-titre de categorie. */
.cr-refonte .cr-art-entete .cr-page-h1 { margin-top: 18px; }
/* 22ch etait bien trop court : le titre de l'article expresso tombait sur trois
   lignes alors qu'il tient en deux. La maquette limite l'en-tete d'article a
   70ch, ce qui laisse respirer le titre sans lui faire traverser toute la page
   (une ligne trop longue se lit mal). */
.cr-refonte .cr-art-entete .cr-page-h1 .elementor-heading-title,
.cr-refonte .cr-art-entete .cr-art-chapo { max-width: 44ch; }
.cr-refonte .cr-art-chapo {
  color: var(--texte-doux); max-width: 70ch; margin: 12px 0 0; font-size: 1.02rem;
}

/* Image a la une : meme arrondi que les photos produit. */
.cr-refonte.cr-art-visuel > .e-con-inner { padding-top: 24px; padding-bottom: 0; }
.cr-refonte .cr-art-image img {
  display: block; width: 100%; max-height: 420px; object-fit: cover;
  border-radius: 12px;
}

/* Deux colonnes : sommaire a gauche, texte a droite. */
.cr-refonte.cr-art-layout > .e-con-inner {
  display: grid; grid-template-columns: 220px 1fr; gap: 48px;
  align-items: start; padding-top: 30px; padding-bottom: 40px;
}
/* La colonne du sommaire n'existe visuellement que si le script y a bien
   depose le sommaire de l'article. Sinon elle disparait et le texte reprend
   toute la largeur, plutot que de laisser une colonne vide. */
.cr-refonte .cr-sommaire { display: none; }
.cr-refonte .cr-sommaire.cr-sommaire-rempli {
  display: flex; flex-direction: column; gap: 10px;
  position: sticky; top: 20px;
  border-left: 2px solid rgba(49,31,21,.12); padding-left: 18px; font-size: .84rem;
}
.cr-refonte .cr-sommaire ol,
.cr-refonte .cr-sommaire ul {
  list-style: none; margin: 0; padding: 0;
  display: flex; flex-direction: column; gap: 10px;
}
.cr-refonte .cr-sommaire a { color: var(--texte-doux); text-decoration: none; }
.cr-refonte .cr-sommaire a:hover { color: var(--rouge); }
.cr-refonte .cr-sommaire .t {
  font: 600 .7rem/1 var(--sans); text-transform: uppercase; letter-spacing: .12em; color: var(--brun);
}

.cr-refonte .cr-art-corps { max-width: 68ch; }
.cr-refonte .cr-art-corps h2 { font-size: 1.3rem; margin: 34px 0 12px; }
.cr-refonte .cr-art-corps h3 { font-size: 1.05rem; margin: 24px 0 10px; }
.cr-refonte .cr-art-corps p { margin: 0 0 16px; }
.cr-refonte .cr-art-corps ul,
.cr-refonte .cr-art-corps ol { margin: 0 0 16px; padding-left: 20px; }
.cr-refonte .cr-art-corps li { margin-bottom: 6px; }
.cr-refonte .cr-art-corps img { max-width: 100%; height: auto; border-radius: 10px; }
.cr-refonte .cr-art-corps table { width: 100%; border-collapse: collapse; margin: 0 0 20px; font-size: .9rem; }
.cr-refonte .cr-art-corps th,
.cr-refonte .cr-art-corps td { border: 1px solid rgba(49,31,21,.12); padding: 10px 12px; text-align: left; }
.cr-refonte .cr-art-corps th { background: var(--or-clair); font-weight: 600; color: var(--brun); }

/* Bloc auteur : le portrait remplace le rond en pointilles de la maquette. */
.cr-refonte .cr-auteur .rond {
  border: none; background: none; overflow: hidden;
  width: 44px; height: 44px; border-radius: 50%;
}
.cr-refonte .cr-auteur .rond img {
  width: 100%; height: 100%; object-fit: cover; display: block; border-radius: 50%;
}

.cr-refonte.cr-art-fin > .e-con-inner { padding-top: 0; padding-bottom: 56px; }

/* Encarts produit et lecture. Le visuel de la maquette etait un aplat degrade
   faute de photo : on y met la vraie image, recadree au meme gabarit. */
.cr-refonte .cr-encart-guide,
.cr-refonte .cr-encart-lecture {
  display: flex; gap: 18px; align-items: center;
  background: var(--or-clair); border-radius: var(--radius);
  padding: 18px 22px; margin: 26px 0;
}
.cr-refonte .cr-encart-guide .visu,
.cr-refonte .cr-encart-lecture .visu {
  flex: none; width: 64px; height: 84px; border-radius: 5px; overflow: hidden;
  background: linear-gradient(165deg, var(--kraft), var(--kraft-fonce));
}
.cr-refonte .cr-encart-guide .visu img,
.cr-refonte .cr-encart-lecture .visu img { width: 100%; height: 100%; object-fit: cover; display: block; }
.cr-refonte .cr-encart-guide p,
.cr-refonte .cr-encart-lecture p { margin: 0; font-size: .85rem; color: var(--texte-doux); }
.cr-refonte .cr-encart-guide b,
.cr-refonte .cr-encart-lecture b { color: var(--brun); display: block; font-size: .95rem; margin-bottom: 2px; }
.cr-refonte .cr-btn-encart {
  margin-left: auto; flex: none;
  background: var(--rouge); color: var(--creme);
  font: 600 .85rem/1 var(--sans); padding: 12px 18px; border-radius: 4px;
  text-decoration: none; white-space: nowrap;
}
.cr-refonte .cr-btn-encart:hover { background: #8F0F11; color: var(--creme); }
.cr-refonte .cr-btn-sombre { background: var(--brun); }
.cr-refonte .cr-btn-sombre:hover { background: #1a100b; }

/* FAQ depliable. Le H3 reste un H3, a l'interieur du summary : le plan de
   titres de l'article, redige pour le referencement, n'est pas modifie. */
.cr-refonte .cr-faq {
  background: #fff; border: 1px solid rgba(49,31,21,.1); border-radius: 8px;
  padding: 4px 20px; margin-bottom: 10px;
}
.cr-refonte .cr-faq summary {
  cursor: pointer; list-style: none; padding: 14px 0;
  display: flex; align-items: center; gap: 12px;
}
.cr-refonte .cr-faq summary::-webkit-details-marker { display: none; }
.cr-refonte .cr-faq summary h3 {
  font: 600 .95rem/1.4 var(--sans); color: var(--brun); margin: 0; flex: 1;
}
.cr-refonte .cr-faq summary::after {
  content: '+'; flex: none; font: 400 1.3rem/1 var(--sans); color: var(--rouge);
  transition: transform .15s ease;
}
.cr-refonte .cr-faq[open] summary::after { content: '−'; }
.cr-refonte .cr-faq > *:not(summary) { font-size: .9rem; color: var(--texte-doux); margin: 0 0 14px; }
.cr-refonte .cr-faq-titre { margin-bottom: 18px; }
.cr-refonte .cr-encart-produit .elementor-widget-container > p { margin: 0; font-size: .85rem; color: var(--texte-doux); }
.cr-refonte .cr-encart-produit b { color: var(--brun); display: block; font-size: .95rem; }
.cr-refonte .cr-encart-produit .cr-btn { margin-left: auto; }

@media (max-width: 860px) {
  .cr-refonte.cr-art-layout > .e-con-inner { grid-template-columns: 1fr; gap: 24px; }
  .cr-refonte .cr-sommaire.cr-sommaire-rempli { position: static; }
}

/* Espacements des sections de la page revendeur, valeurs de la maquette : la
   premiere entre sur 72px, les suivantes s'enchainent en 16 / 30, la derniere
   se termine sur 72. La classe .section appliquait 72 des deux cotes partout,
   ce qui etirait la page.

   POURQUOI EN CSS ET PAS EN REGLAGE ELEMENTOR : le reset de cette feuille remet
   a zero les variables --padding-* de tous les conteneurs, donc un padding pose
   dans le panneau Elementor reste sans effet ici. Constate le 2026-07-29. */
.cr-refonte.cr-pro-conditions > .e-con-inner { padding-top: 72px; padding-bottom: 30px; }
.cr-refonte.cr-pro-etapes > .e-con-inner { padding-top: 16px; padding-bottom: 30px; }
.cr-refonte.cr-pro-formulaire > .e-con-inner { padding-top: 16px; padding-bottom: 72px; }

/* Photo de l'atelier dans l'en-tete revendeur. La colonne est plus haute que
   large, alors qu'une image d'atelier est panoramique : sans recadrage elle
   flottait au milieu d'un grand vide sombre. */
.cr-refonte .cr-photo-pro img {
  display: block; width: 100%; height: 340px; object-fit: cover;
  border-radius: var(--radius);
}
@media (max-width: 860px) {
  .cr-refonte .cr-photo-pro img { height: 240px; }
}
.cr-refonte .cr-etape-rouge { border-color: var(--rouge); }
.cr-refonte .cr-shd-txt .elementor-widget-container > p { color: var(--texte-doux); margin: 10px 0 0; }

@media (max-width: 860px) {
  .cr-refonte .cr-grille-2 { grid-template-columns: 1fr; }
}

/* =========================================================================
   14. Correctifs conteneurs "boxed" et cartes d'articles (2026-07-28)
   ========================================================================= */

/* GOTCHA (miroir de celui deja connu sur les conteneurs "full") : un conteneur
   Elementor en content_width "boxed" insere un .e-con-inner. La classe CSS reste
   sur le .e-con externe, mais c'est le .e-con-inner qui aligne reellement les
   enfants. Poser display/gap sur la classe seule ne fait donc rien de visible.
   Le cas du header est desormais traite par ses reglages natifs (gap 28). */

/* Cartes d'articles (widget Posts, skin cards) aux couleurs de la marque :
   par defaut les titres et le "lire la suite" sortaient en bleu lien navigateur. */
.cr-refonte .cr-articles .elementor-post__title { font-family: var(--slab); font-size: 1.05rem; line-height: 1.3; margin: 0 0 10px; }
.cr-refonte .cr-articles .elementor-post__title a { color: var(--brun); text-decoration: none; }
.cr-refonte .cr-articles .elementor-post__title a:hover { color: var(--rouge); }
.cr-refonte .cr-articles .elementor-post__excerpt p { color: var(--texte-doux); font-size: .9rem; margin: 0; }
.cr-refonte .cr-articles .elementor-post__read-more {
  color: var(--rouge); font: 600 .82rem/1 var(--sans); text-decoration: none;
  text-transform: none; letter-spacing: normal;
}
.cr-refonte .cr-articles .elementor-post__read-more:hover { color: var(--brun); }
.cr-refonte .cr-articles .elementor-post__meta-data { color: var(--texte-doux); font-size: .78rem; }
.cr-refonte .cr-articles .elementor-post__badge { background: var(--brun); color: var(--creme); font: 600 .7rem/1.3 var(--sans); }
.cr-refonte .cr-articles .elementor-post__card { border: 1px solid rgba(49,31,21,.1); border-radius: var(--radius); overflow: hidden; }

/* 15. Debordement horizontal en mobile (2026-07-28).
      Le formulaire newsletter du footer debordait la page de 5px a 375px :
      les gouttieres du widget Form (margin -5px) ne rentraient pas dans la
      colonne etroite. Corrige a la source, dans les reglages du widget
      (column_gap 0, row_gap 8) plutot qu'en CSS : Elementor injecte ses
      propres regles en fin de page, elles battent cette feuille a
      specificite egale. Ne pas retenter de le corriger ici. */

/* 16. Alignement du header sur la grille du contenu (2026-07-28, revu le soir).
      Le header n'utilise pas la classe .wrap : il etait decale par rapport au
      contenu des pages. Corrige desormais dans le gabarit #1413 lui-meme
      (largeur de contenu 1032 px + padding lateral 24), et non plus ici. */

/* 17. Cartes produits WooCommerce aux couleurs de la marque (2026-07-28).
      Par defaut les etoiles, les prix et les titres heritaient du bleu de lien.
      C'est le point "polish cartes produits" du runbook de mise en ligne. */
.cr-refonte .cr-shop-grid .woocommerce-loop-product__title,
.cr-refonte .cr-shop-grid h2.woocommerce-loop-product__title {
  font-family: var(--slab); font-weight: 700; font-size: 1.05rem; color: var(--brun);
  margin: 14px 0 6px; padding: 0;
}
.cr-refonte .cr-shop-grid a { color: var(--brun); text-decoration: none; }
.cr-refonte .cr-shop-grid .star-rating,
.cr-refonte .cr-shop-grid .star-rating::before,
.cr-refonte .cr-shop-grid .star-rating span::before { color: var(--etoile); }
.cr-refonte .cr-shop-grid .price,
.cr-refonte .cr-shop-grid .price ins,
.cr-refonte .cr-shop-grid .price .amount,
.cr-refonte .cr-shop-grid .price bdi {
  font-family: var(--slab); font-weight: 700; color: var(--brun); font-size: 1rem;
  text-decoration: none;
}
.cr-refonte .cr-shop-grid .price del,
.cr-refonte .cr-shop-grid .price del .amount { color: var(--texte-doux); font-weight: 400; }
.cr-refonte .cr-shop-grid .button,
.cr-refonte .cr-shop-grid a.button,
.cr-refonte .cr-shop-grid .add_to_cart_button {
  background: var(--rouge); color: var(--creme); border: none; border-radius: 4px;
  font: 600 .85rem/1 var(--sans); padding: 12px 18px; display: inline-block;
  margin-top: 10px; text-decoration: none;
}
.cr-refonte .cr-shop-grid .button:hover,
.cr-refonte .cr-shop-grid a.button:hover { background: var(--brun); color: var(--creme); }
.cr-refonte .cr-shop-grid img { border-radius: 8px; }

/* Cartes produits WooCommerce au style .carte de la maquette : cadre blanc
   borde, coins arrondis, et soulevement au survol. Le fond de la grille etant
   creme, sans ce cadre les cartes paraissaient nues.
   L'image deborde le padding lateral pour occuper toute la largeur du cadre.

   POURQUOI LA CLASSE EST DOUBLEE ICI (2026-07-29, apres la bascule du CSS)
   Elementor pose `.elementor-products-grid ul.products.elementor-grid li.product`
   sur ces memes cartes, avec exactement la meme specificite (0,4,2) que la
   version simple de nos selecteurs. Tant que la feuille etait chargee en
   dernier par le theme, elle gagnait a egalite. Depuis qu'elle vit dans le CSS
   personnalise d'Elementor, elle est servie en 26e position sur 54 : la feuille
   du widget passe apres et l'emportait, ce qui vidait le padding des cartes et
   les repassait en `display:block`. La classe doublee remonte la specificite a
   (0,5,2) sans rien changer au sens du selecteur.
   Diagnostic verifie : 41 ecarts de rendu sur 350 elements de l'accueil, tous
   concentres sur ces cartes. */
.cr-refonte.cr-refonte .cr-shop-grid ul.products > li.product {
  display: flex; flex-direction: column;
  background: #fff;
  border: 1px solid rgba(49,31,21,.1);
  border-radius: var(--radius);
  overflow: hidden;
  position: relative;
  padding: 0 20px 20px;
  transition: transform .15s ease, box-shadow .15s ease;
}
.cr-refonte.cr-refonte .cr-shop-grid ul.products > li.product:hover {
  transform: translateY(-3px);
  box-shadow: 0 12px 28px rgba(49,31,21,.12);
}
.cr-refonte.cr-refonte .cr-shop-grid ul.products > li.product img {
  display: block;
  width: calc(100% + 40px);
  max-width: none;
  margin: 0 -20px 16px;
  border-radius: 0;
}
.cr-refonte .cr-shop-grid ul.products > li.product .woocommerce-loop-product__title {
  padding-top: 0;
}
.cr-refonte .cr-shop-grid ul.products > li.product .price {
  margin-top: auto; padding-top: 8px;
}
/* Le tarif au kilo passe sous le « des X € », comme dans la maquette. */
.cr-refonte .cr-shop-grid .price small {
  display: block; margin-top: 2px;
  font-family: var(--sans); font-weight: 400;
  font-size: .78rem; color: var(--texte-doux);
}
.cr-refonte.cr-refonte .cr-shop-grid ul.products > li.product .button,
.cr-refonte.cr-refonte .cr-shop-grid ul.products > li.product a.button {
  margin-top: auto; align-self: flex-start;
}

/* =========================================================================
   18. STRUCTURE APLATIE (2026-07-28, demande Johann)
   Objectif : le moins de conteneurs possible, pour que le Navigator reste
   lisible et que Ludo s'y retrouve.

   Principe : une section = UN conteneur Elementor en mode "boxed". Le fond
   s'etend sur toute la largeur (sur le .e-con externe) pendant que le contenu
   reste centre et limite (sur le .e-con-inner). Cela remplace l'ancien couple
   section pleine largeur + .wrap interne, soit un niveau en moins partout.

   Chaque section porte donc elle-meme la classe .cr-refonte : il n'y a plus
   de conteneur racine englobant. Les regles ci-dessous sont les variantes
   "meme element" (.cr-refonte.hero) des regles descendantes plus haut dans ce
   fichier (.cr-refonte .hero), qui restent utilisees par le header/footer.
   Les selecteurs de descendants (.cr-refonte .etape, .cr-refonte h1...) sont
   valables dans les deux structures, il n'y a rien a y changer.
   ========================================================================= */

/* Largeur de contenu commune, equivalent de l'ancien .wrap. */
.cr-refonte > .e-con-inner {
  max-width: 1080px; margin-left: auto; margin-right: auto;
  padding-left: 24px; padding-right: 24px;
}

/* Rythme vertical des sections. */
.cr-refonte.section > .e-con-inner { padding-top: var(--pad-section); padding-bottom: var(--pad-section); }

/* Fonds : ils vivent sur le conteneur externe pour s'etendre pleine largeur. */
.cr-refonte.hero {
  background:
    radial-gradient(1100px 480px at 82% -10%, rgba(229,210,170,.14), transparent 60%),
    radial-gradient(700px 420px at -8% 110%, rgba(182,19,21,.18), transparent 55%),
    var(--brun-fonce);
  color: var(--creme); overflow: hidden;
}
.cr-refonte.reassurance { background: var(--or); }
.cr-refonte.ludo { background: var(--or-clair); }
.cr-refonte.bande-sombre {
  background: radial-gradient(900px 400px at 90% -20%, rgba(229,210,170,.12), transparent 60%), var(--brun-fonce);
  color: var(--creme);
}

/* Mises en page a deux ou quatre colonnes, portees par l'inner. */
.cr-refonte.hero > .e-con-inner { display: grid; grid-template-columns: 1.1fr 1fr; gap: 48px; align-items: center; padding-top: 72px; padding-bottom: 72px; }
.cr-refonte.reassurance > .e-con-inner { display: grid; grid-template-columns: repeat(4, 1fr); gap: 18px; padding-top: 22px; padding-bottom: 22px; }
.cr-refonte.ludo > .e-con-inner { display: grid; grid-template-columns: 1fr 1.3fr; gap: 52px; align-items: center; padding-top: 72px; padding-bottom: 72px; }
.cr-refonte.bande-sombre > .e-con-inner { display: grid; grid-template-columns: 1.2fr 1fr; gap: 48px; align-items: center; padding-top: 64px; padding-bottom: 64px; }

/* Variantes "meme element" des regles de texte des sections a fond fonce. */
.cr-refonte.hero h1, .cr-refonte.bande-sombre h1 { color: var(--creme); }
.cr-refonte.dark .eyebrow { color: var(--or); }
.cr-refonte.center { text-align: center; }

/* L'ancien conteneur .section-head disparait : le titre porte lui-meme sa
   largeur et sa marge basse. */
.cr-refonte .cr-titre-section .elementor-heading-title { max-width: 60ch; }
.cr-refonte.center .cr-titre-section .elementor-heading-title { margin-left: auto; margin-right: auto; }

/* PIEGE (2026-07-29) : Elementor pose `.e-con .elementor-widget.elementor-widget
   { margin-block-end: 0 }` (specificite 0,3,0) et utilise la propriete LOGIQUE.
   Un simple `.cr-refonte .cr-titre-section { margin-bottom: 40px }` (0,2,0) etait
   donc ecrase et tous les titres de section collaient a leur contenu.
   Il faut a la fois `margin-block-end` et une specificite >= 0,4,0. */
.cr-refonte .elementor-widget.elementor-widget.cr-titre-section { margin-block-end: 40px; }
.cr-refonte .elementor-widget.elementor-widget.cr-titre-section.cr-avec-soustitre { margin-block-end: 10px; }
.cr-refonte .elementor-widget.elementor-widget.cr-soustitre-section { margin-block-end: 40px; }
.cr-refonte .cr-soustitre-section .elementor-widget-container > p { color: var(--texte-doux); max-width: 60ch; margin: 0; }
.cr-refonte.center .cr-soustitre-section .elementor-widget-container > p { margin-left: auto; margin-right: auto; }

/* Le bouton centre n'a plus besoin d'un conteneur dedie. */
.cr-refonte .cr-btn-centre { text-align: center; margin-top: 34px; }

@media (max-width: 860px) {
  .cr-refonte.hero > .e-con-inner,
  .cr-refonte.ludo > .e-con-inner,
  .cr-refonte.bande-sombre > .e-con-inner { grid-template-columns: 1fr; }
  .cr-refonte.reassurance > .e-con-inner { grid-template-columns: repeat(2, 1fr); }
}
@media (max-width: 560px) {
  .cr-refonte.reassurance > .e-con-inner { grid-template-columns: 1fr; }
}

/* =========================================================================
   19. Variantes "meme element" pour la structure aplatie (2026-07-28)

   PIEGE A RETENIR : dans l'ancienne structure, .hero etait un DESCENDANT du
   conteneur racine .cr-refonte, d'ou des selecteurs ".cr-refonte .hero X".
   Depuis l'aplatissement, la section EST le .cr-refonte : ces selecteurs ne
   matchent plus rien. Toute regle visant une SECTION doit donc exister aussi
   en version ".cr-refonte.hero X" (sans espace). Les regles qui visent un
   descendant quelconque (.cr-refonte .etape, .cr-refonte h1) restent valables
   dans les deux structures : il n'y a rien a y toucher.
   Les versions descendantes plus haut sont conservees : elles servent encore
   au header et au footer, qui gardent un conteneur racine.
   ========================================================================= */

/* Hero */
.cr-refonte.hero h1 { color: var(--creme); font-size: clamp(1.9rem, 4vw, 2.7rem); font-weight: 700; line-height: 1.15; letter-spacing: -0.01em; }
.cr-refonte.hero h1 em { font-style: normal; color: var(--or); }
.cr-refonte.hero p.pitch { color: rgba(255,248,232,.78); margin: 18px 0 8px; max-width: 46ch; }
.cr-refonte.hero .preuve { display: flex; flex-direction: row; align-items: center; gap: 10px; margin: 14px 0 26px; font-size: .92rem; color: rgba(255,248,232,.85); }
.cr-refonte.hero .ctas { display: flex; flex-direction: row; gap: 14px; flex-wrap: wrap; }
.cr-refonte.dark .cr-h2 .elementor-heading-title { color: var(--creme); }

/* Bande reassurance */
.cr-refonte.reassurance .item { display: flex; flex-direction: row; align-items: center; gap: 12px; color: var(--brun); font: 500 0.88rem/1.3 var(--sans); }
.cr-refonte.reassurance .item .elementor-widget-html { display: flex; flex: none; }
.cr-refonte.reassurance svg { flex: none; width: 26px; height: 26px; stroke: var(--rouge); }

/* Bloc torrefacteur */
.cr-refonte.ludo blockquote { margin: 22px 0; padding: 0 0 0 18px; border-left: 3px solid var(--rouge); font-family: var(--slab); font-size: 1.05rem; color: var(--brun); }

/* Hero pro de la page revendeur */
.cr-refonte.bande-sombre h1 { font-family: var(--slab); font-weight: 700; color: var(--creme); font-size: clamp(1.6rem, 3.2vw, 2.2rem); margin: 0; }
.cr-refonte.bande-sombre p { color: rgba(255,248,232,.78); }
.cr-refonte.bande-sombre .cr-h1 .elementor-heading-title { font-size: clamp(1.6rem, 3.2vw, 2.2rem); letter-spacing: normal; }

/* 20. En-tetes de page dans la structure aplatie (2026-07-28).
      Les conteneurs .liste-head et .page-head disparaissent : le titre et le
      chapo sont des enfants directs de la section, ils portent donc eux-memes
      leur rythme vertical. */
/* En-tete de la page liste. Valeurs reprises de la maquette, ou le fil d'ariane
   occupe 20px au-dessus et 6 en dessous, et le bloc titre 48 au-dessus et 8 en
   dessous. La page etait 711px plus haute que la maquette (2903 contre 2192),
   pour l'essentiel a cause des 72px de padding de section appliques a des
   blocs qui n'en portent pas dans le dessin d'origine. Mesure du 2026-07-29. */
.cr-refonte.cr-entete > .e-con-inner { padding-top: 20px; padding-bottom: 8px; }
.cr-refonte .cr-liste-h1, .cr-refonte .cr-page-h1 { margin-top: 28px; }

/* La grille des cafes et les cartes d'offre n'ont aucun padding vertical dans
   la maquette : ce sont les blocs qu'elles encadrent qui portent leur espace. */
.cr-refonte.cr-liste-grille > .e-con-inner { padding-top: 0; padding-bottom: 0; }
/* Les cartes d'offre doivent respirer avant le texte de reference qui suit :
   6px les collaient au bloc suivant. */
.cr-refonte.cr-liste-offres > .e-con-inner { padding-top: 0; padding-bottom: 40px; }
.cr-refonte .cr-filtres { padding: 22px 0 34px; }

/* 21. Template d'archive produit refondu (2026-07-28).
      La page boutique WooCommerce n'affiche pas son propre contenu Elementor :
      c'est le template d'archive qui gouverne. Le design de la page liste vit
      donc dans ce template. Le texte SEO historique de la page boutique est
      conserve en bas de page via le widget de description d'archive : il porte
      le positionnement sur « cafe artisanal ». */
.cr-refonte.cr-seo > .e-con-inner { padding-top: 10px; padding-bottom: 56px; }
.cr-refonte .cr-seo-txt { font-size: .88rem; color: var(--texte-doux); }
.cr-refonte .cr-seo-txt p { font-size: .88rem; color: var(--texte-doux); max-width: 78ch; }
.cr-refonte .cr-seo-txt strong { color: var(--brun); }
.cr-refonte .cr-seo-txt figure:empty, .cr-refonte .cr-seo-txt img:not([src]) { display: none; }

/* Fil d'ariane WooCommerce dans l'en-tete d'archive. */
.cr-refonte .cr-fil .woocommerce-breadcrumb { font-size: .8rem; color: var(--texte-doux); margin: 0; }
.cr-refonte .cr-fil .woocommerce-breadcrumb a { color: var(--texte-doux); text-decoration: none; }
.cr-refonte .cr-fil .woocommerce-breadcrumb a:hover { color: var(--brun); }

/* =========================================================================
   HEADER ET FOOTER : plus rien ici (2026-07-28, soir)
   Les deux gabarits (#1413 et #1414) sont entierement pilotes par leurs
   reglages Elementor, et leurs conteneurs ne portent plus la classe
   .cr-refonte. Toutes les regles qui les visaient ont donc ete supprimees :
   elles ne matchaient plus rien.
   Ne pas en remettre. Pour changer l'entete ou le pied de page, passer par
   Modeles > Theme Builder dans l'administration.
   ========================================================================= */

/* =========================================================================
   FICHE PRODUIT : raccords maquette (2026-07-29)
   ========================================================================= */

/* Photo produit : la maquette arrondit le cadre a 12px. La galerie WooCommerce
   n'expose aucun reglage d'arrondi dans Elementor. */
.cr-refonte .woocommerce-product-gallery__image,
.cr-refonte .woocommerce-product-gallery__image img,
.cr-refonte .woocommerce-product-gallery__wrapper { border-radius: 12px; overflow: hidden; }

/* Ligne de reassurance : le flex etait pose sur le widget, alors que les trois
   mentions vivent dans le <p> genere par l'editeur. Les puces se retrouvaient
   collees les unes aux autres, separees par une simple espace. */
.cr-refonte .sous-cta .elementor-widget-container > p {
  display: flex; gap: 16px; flex-wrap: wrap; margin: 0;
}

/* Portrait rond du rappel torrefacteur. */
.cr-refonte .rappel-ludo .rond img {
  width: 52px; height: 52px; border-radius: 50%; object-fit: cover; display: block;
}
.cr-refonte .rappel-ludo .rond { flex: none; }
.cr-refonte .rappel-ludo .elementor-widget-container > p { margin: 0; }

/* Avis WooCommerce remis au dessin de la maquette : plus de cadre gris ni
   d'avatar par defaut, une simple liste separee par des filets. */
.cr-refonte .avis-prod .commentlist { list-style: none; margin: 0; padding: 0; }
.cr-refonte .avis-prod .commentlist li { list-style: none; margin: 0; }
.cr-refonte .avis-prod .comment_container {
  display: block; border-bottom: 1px solid rgba(49,31,21,.1); padding: 18px 0;
  background: none; border-radius: 0;
}
.cr-refonte .avis-prod .commentlist li:first-child .comment_container { padding-top: 0; }
.cr-refonte .avis-prod .comment_container img.avatar { display: none; }
.cr-refonte .avis-prod .comment-text {
  /* Meme cause que les pastilles : une feuille externe impose ce cadre en
     !important, il faut repasser devant pour retrouver la liste de la maquette. */
  border: none !important; background: none !important;
  padding: 0 !important; margin: 0 !important; border-radius: 0 !important;
}
/* Un seul onglet subsiste depuis que la description et les informations
   complementaires ont ete retirees : l'onglet ne sert plus a rien et la maquette
   n'en montre pas. Le titre repete deja le nom du produit juste au-dessus. */
.cr-refonte .avis-prod .woocommerce-tabs ul.tabs { display: none !important; }
.cr-refonte .avis-prod .woocommerce-Reviews-title { display: none !important; }
.cr-refonte .avis-prod .woocommerce-tabs .panel { padding: 0 !important; margin: 0 !important; }
.cr-refonte .avis-prod .comment-text .star-rating { float: none; margin: 0 0 6px; font-size: .9em; }
.cr-refonte .avis-prod .comment-text .woocommerce-review__author {
  font: 600 .85rem/1 var(--sans); color: var(--brun); font-style: normal;
}
.cr-refonte .avis-prod .comment-text .woocommerce-review__verified,
.cr-refonte .avis-prod .comment-text .woocommerce-review__published-date,
.cr-refonte .avis-prod .comment-text .woocommerce-review__dash {
  font-size: .75rem; color: var(--texte-doux); font-style: normal;
}
.cr-refonte .avis-prod .comment-text .description p { margin: 8px 0 0; font-size: .9rem; }
.cr-refonte .avis-prod .woocommerce-Tabs-panel > h2 { display: none; }

/* =========================================================================
   PAGE NOS CAFES : filtres, cartes d'offre, vitrine d'avis (2026-07-29)
   ========================================================================= */

/* Les pastilles de filtre sont des liens, pas des boutons : le style de .pill
   vise des <span> dans la maquette et ne descend pas sur un <a>. */
.cr-refonte .cr-filtres .pill {
  display: inline-flex; align-items: center;
  font: 500 0.9rem/1 var(--sans); color: var(--brun); background: #fff;
  border: 1.5px solid rgba(49,31,21,.18); border-radius: 100px;
  padding: 11px 20px; text-decoration: none;
  transition: background .15s ease, border-color .15s ease;
}
.cr-refonte .cr-filtres .pill:hover { border-color: var(--brun); }
.cr-refonte .cr-filtres .pill.on { background: var(--brun); color: var(--creme); border-color: var(--brun); }

/* Coffrets et abonnement : deux cartes a parts egales sur toute la largeur. */
.cr-refonte .cr-grille-offres { display: grid; grid-template-columns: repeat(2, 1fr); gap: 20px; }
.cr-refonte .carte-offre.cr-pointille { border: 1.5px dashed rgba(49,31,21,.25); }
.cr-refonte .carte-offre h3 { font-size: 1.15rem; }
.cr-refonte .carte-offre .eyebrow { margin: 0; }
/* Coffrets et abonnement n'existent pas encore : la mention remplace le lien,
   et doit se distinguer d'un appel a l'action pour ne rien promettre. */
.cr-refonte .cr-bientot {
  font-weight: 600; font-size: .82rem; letter-spacing: .04em;
  text-transform: uppercase; opacity: .7; margin-top: 6px !important;
}

/* Filtres : deux groupes, memes intitules que le selecteur de l'accueil. */
.cr-refonte .cr-bloc-filtres { padding: 22px 0 34px; }
.cr-refonte .cr-bloc-filtres .q { margin: 0 0 10px; }
.cr-refonte .cr-bloc-filtres .q + .cr-filtres { padding: 0; margin-bottom: 18px; }
.cr-refonte .cr-bloc-filtres .cr-filtres:last-child { margin-bottom: 0; }

/* Le temps d'aller chercher la liste filtree, la grille s'estompe : sans ce
   signal, un clic sans rechargement de page passe pour un clic sans effet. */
.cr-refonte .cr-shop-grid.cr-chargement { opacity: .4; transition: opacity .12s ease; pointer-events: none; }

/* Texte de reference et avis client cote a cote, comme dans la maquette. */
.cr-refonte.seo-avis > .e-con-inner { display: grid; grid-template-columns: 1.4fr 1fr; gap: 40px; align-items: start; }
.cr-refonte .cr-vitrine-avis h3 { font-size: 1rem; margin-bottom: 10px; }
.cr-refonte .cr-vitrine-avis .avis-carte {
  background: #fff; border: 1px solid rgba(49,31,21,.1); border-radius: var(--radius);
  padding: 26px 22px; display: flex; flex-direction: column; gap: 12px;
}
/* Les etoiles de la vitrine reprennent la taille de la maquette : en heritant
   du corps de texte elles ecrasaient la citation qu'elles accompagnent. */
.cr-refonte .cr-vitrine-avis .stars { font-size: .8rem; line-height: 1; }
.cr-refonte .cr-vitrine-avis .avis-carte p { margin: 0; font-size: .92rem; color: var(--texte); }
.cr-refonte .cr-vitrine-avis .qui { font: 600 .82rem/1.4 var(--sans); color: var(--brun); }
.cr-refonte .cr-vitrine-avis .qui small { display: block; font-weight: 400; color: var(--texte-doux); }

@media (max-width: 860px) {
  .cr-refonte .cr-grille-offres { grid-template-columns: 1fr; }
  .cr-refonte.seo-avis > .e-con-inner { grid-template-columns: 1fr; }
}

/* Note, prix et etoiles de la fiche (2026-07-29, retours de Johann).
   Trois defauts herites de WooCommerce : les etoiles reprenaient la couleur du
   texte au lieu de l'or de la maquette, le lien vers les avis etait colle aux
   etoiles faute de conteneur en flex, et le prix de la variation s'affichait
   dans le jaune-vert par defaut du theme, en Roboto 400. */
.cr-refonte .star-rating,
.cr-refonte .star-rating span,
.cr-refonte p.stars a { color: var(--etoile) !important; letter-spacing: 2px; }

.cr-refonte .woocommerce-product-rating {
  display: flex; align-items: center; gap: 10px;
  font-size: .88rem; color: var(--texte-doux); margin: 0;
}
.cr-refonte .woocommerce-product-rating .star-rating { margin: 0; float: none; }
.cr-refonte .woocommerce-product-rating a { color: var(--texte-doux); text-decoration: none; }
.cr-refonte .woocommerce-product-rating a:hover { color: var(--brun); }
/* Le point median de la maquette, pose en CSS pour ne pas toucher au markup
   que WooCommerce regenere a chaque changement de variation. */
.cr-refonte .woocommerce-product-rating .cr-note-chiffre::after { content: '·'; margin-left: 10px; color: var(--texte-doux); }

.cr-refonte .woocommerce-variation-price .price,
.cr-refonte .woocommerce-variation-price .price .amount,
.cr-refonte .woocommerce-variation-price .price bdi {
  font-family: var(--slab) !important; font-weight: 700 !important;
  font-size: 1.9rem !important; color: var(--brun) !important; line-height: 1.1;
}
.cr-refonte .woocommerce-variation-price .price small {
  font: 400 .85rem/1 var(--sans) !important; color: var(--texte-doux) !important;
}
/* Le prix vit a l'interieur du widget d'achat : le `gap` du conteneur ne
   l'atteint pas, il restait donc colle aux pastilles au-dessus et au bouton en
   dessous. Marges reprises de .f-prix et .cta-row dans la maquette. */
.cr-refonte .woocommerce-variation-price { margin: 18px 0 14px !important; display: block; }

/* Le panneau des onglets porte un filet gris en haut. Il separait l'onglet du
   contenu, mais l'onglet est masque depuis qu'il n'en reste qu'un : le trait se
   retrouvait colle aux etoiles du premier avis, sans rien separer. Les avis ont
   deja leurs propres filets entre eux. */
.cr-refonte .avis-prod .woocommerce-Tabs-panel { border: none !important; }

/* Etiquettes de variations (2026-07-29).
   Le <select> reste dans la page et pilote la commande : il n'est masque que
   lorsque le script a reellement construit ses pastilles (classe posee en JS).
   Sans JS, les listes deroulantes restent visibles et le tunnel fonctionne. */
/* Les !important de ce bloc ne sont pas de la paresse : la page charge treize
   feuilles servies depuis un autre domaine, donc inspectables par personne, et
   l'une d'elles impose en !important l'apparence des <select> et des <button>.
   Sans cette priorite, la liste deroulante restait visible sous les pastilles et
   celles-ci heritaient du rouge du bouton d'achat. Verifie le 2026-07-29. */
.cr-refonte select.cr-select-pilote { display: none !important; }
.cr-refonte .cr-pastilles { justify-content: flex-start; margin: 0; }
.cr-refonte .cr-pastilles .pill {
  font: 500 0.9rem/1 var(--sans) !important;
  color: var(--brun) !important;
  background: #fff !important;
  border: 1.5px solid rgba(49,31,21,.18) !important;
  border-radius: 100px !important;
  padding: 12px 20px !important;
  width: auto !important;
  cursor: pointer; transition: background .15s ease, border-color .15s ease;
}
.cr-refonte .cr-pastilles .pill:hover:not(:disabled) { border-color: var(--brun) !important; }
.cr-refonte .cr-pastilles .pill.on {
  background: var(--brun) !important; color: var(--creme) !important; border-color: var(--brun) !important;
}
.cr-refonte .cr-pastilles .pill:disabled { opacity: .35; cursor: not-allowed; text-decoration: line-through; }

/* Le tableau des variations redevient une simple pile d'options, avec le meme
   intitule en petites capitales que le selecteur de la page d'accueil. */
.cr-refonte table.variations,
.cr-refonte table.variations tbody,
.cr-refonte table.variations tr,
.cr-refonte table.variations th,
.cr-refonte table.variations td { display: block; width: auto; background: none; border: none; padding: 0; }
.cr-refonte table.variations tr + tr { margin-top: 18px; }
.cr-refonte table.variations th.label label {
  font: 600 0.78rem/1 var(--sans); text-transform: uppercase; letter-spacing: .12em;
  color: var(--texte-doux); display: block; margin-bottom: 10px;
}
.cr-refonte .hint { font-size: .8rem; color: var(--rouge); font-weight: 500; margin: 8px 0 0; }

/* Fiche produit : lien « Effacer » des variations (2026-07-29).
   Les cinq cafes ont une variation par defaut (1 kg / grain) toujours
   preselectionnee : le lien ne sert donc qu'a vider la selection et a laisser
   la fiche sans prix. Il n'est expose par aucun panneau Elementor. */
.cr-refonte .reset_variations { display: none !important; }

/* Formulaire d'avis WooCommerce (2026-07-29).
   Le bouton d'envoi vit a l'interieur du widget Onglets produit : Elementor ne
   l'expose dans aucun panneau, il reste donc legitimement style ici. Sans ca il
   gardait le gris par defaut du theme a cote d'un bouton d'achat rouge. */
.cr-refonte #respond input#submit,
.cr-refonte .comment-form input[type="submit"] {
  background: var(--rouge); color: var(--creme);
  font: 600 0.95rem/1 var(--sans);
  padding: 15px 28px; border: none; border-radius: 4px; cursor: pointer;
  transition: background .15s ease;
}
.cr-refonte #respond input#submit:hover,
.cr-refonte .comment-form input[type="submit"]:hover { background: #8F0F11; }

/* =========================================================================
   MOBILE (2026-07-29, premier controle en 390px)
   ========================================================================= */

/* Les regles qui redressaient le bandeau Complianz sur telephone ont ete
   retirees le 2026-07-30 : le plugin n'est plus installe. Le bandeau actuel
   est en flux et occupe toute la largeur, il n'a besoin d'aucun correctif. */

@media (max-width: 600px) {
  /* Sur telephone, ces mentions descendaient a 10,5px : trop petit pour se
     lire au bras tendu. Le seuil de confort est a 12px. */
  .cr-refonte .cr-shop-grid .price small,
  .cr-refonte .badge-fav,
  .cr-refonte .cr-encart-guide p,
  .cr-refonte .cr-encart-lecture p { font-size: .78rem; }

  /* Zones tactiles : 38px passe mal au pouce, les recommandations vont de 44
     a 48px. Concerne les pastilles de filtre et les boutons des cartes. */
  .cr-refonte .cr-filtres .pill,
  .cr-refonte .cr-pastilles .pill,
  .cr-refonte .cr-shop-grid .button,
  .cr-refonte .cr-shop-grid a.button { min-height: 44px; padding-top: 13px; padding-bottom: 13px; }

  /* Les tableaux comparatifs des articles sont plus larges que l'ecran. Plutot
     que de tasser les colonnes jusqu'a l'illisible, on les fait defiler
     horizontalement dans leur propre cadre : la page, elle, ne bouge pas. */
  .cr-refonte .cr-art-corps table {
    display: block; width: 100%; overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
  .cr-refonte .cr-art-corps table th,
  .cr-refonte .cr-art-corps table td { white-space: nowrap; }
}

/* =========================================================================
   MESSAGES ET PANIER LATERAL DE WOOCOMMERCE (2026-07-29)

   Ces elements sont injectes hors du contenu Elementor : ni les messages de
   confirmation ni le panneau lateral ne portent la classe .cr-refonte, donc
   les regles ci-dessous sortent volontairement du scope habituel.

   Sans elles, WooCommerce servait un bandeau gris a liseré vert olive en
   police Poppins, et un panneau lateral blanc a boutons gris : les seuls
   endroits du site ou la charte disparaissait completement, et ils tombent
   juste apres le clic le plus important de la page.
   ========================================================================= */

.woocommerce-message,
.woocommerce-info,
.woocommerce-error,
.woocommerce-noreviews {
  background: var(--or-clair, #F0E4C4) !important;
  border: none !important;
  border-left: 3px solid var(--rouge, #B61315) !important;
  border-radius: 8px !important;
  color: var(--brun, #311F15) !important;
  font: 500 .92rem/1.5 'Roboto', system-ui, sans-serif !important;
  padding: 16px 20px !important;
  display: flex; align-items: center; flex-wrap: wrap; gap: 12px;
}
.woocommerce-message::before,
.woocommerce-info::before,
.woocommerce-error::before { display: none !important; }

/* Une erreur doit se distinguer d'une confirmation au premier coup d'oeil. */
.woocommerce-error {
  background: #FBEAEA !important;
  color: #7d1416 !important;
}

/* Le lien « Voir le panier » du bandeau devient un vrai bouton. */
.woocommerce-message .button,
.woocommerce-info .button {
  background: var(--rouge, #B61315) !important;
  color: var(--creme, #FFF8E8) !important;
  border-radius: 4px !important;
  font: 600 .85rem/1 'Roboto', system-ui, sans-serif !important;
  padding: 11px 18px !important;
  margin-left: auto;
  text-decoration: none;
}
.woocommerce-message .button:hover,
.woocommerce-info .button:hover { background: #8F0F11 !important; }

/* --- Panneau lateral du panier ------------------------------------------ */
.elementor-menu-cart__main {
  background: var(--creme, #FFF8E8) !important;
  font-family: 'Roboto', system-ui, sans-serif !important;
  color: var(--texte, #4a3a2e);
}
.elementor-menu-cart__product-name,
.elementor-menu-cart__product-name a {
  font-family: 'Roboto Slab', Georgia, serif !important;
  font-weight: 700; color: var(--brun, #311F15) !important; text-decoration: none;
}
/* La quantite et le prix arrivaient en #D5D8DC sur fond creme, soit un
   contraste d'environ 1,3 pour 1 : le « 2 x 20,90 EUR » etait pratiquement
   invisible, alors que c'est l'information que le visiteur vient verifier en
   ouvrant le panier. Le reglage vient du widget Elementor et gagnait sur une
   regle simple, d'ou le !important. */
.elementor-menu-cart__product-price,
.elementor-menu-cart__product-price .quantity,
.elementor-menu-cart__product .quantity {
  color: var(--texte, #4a3a2e) !important;
  font-weight: 500 !important;
  font-size: .88rem !important;
}
/* Le nombre d'articles se lit avant le prix unitaire : on l'appuie. */
.elementor-menu-cart__product-price .quantity { font-variant-numeric: tabular-nums; }
.elementor-menu-cart__subtotal {
  font-family: 'Roboto Slab', Georgia, serif !important;
  font-weight: 700; color: var(--brun, #311F15);
  border-top: 1px solid rgba(49,31,21,.12);
}
.elementor-menu-cart__product { border-bottom: 1px solid rgba(49,31,21,.1); }

/* Deux boutons, deux roles : voir le panier est secondaire, commander est
   l'action principale. Le gris uniforme d'origine ne les distinguait pas. */
.elementor-menu-cart__footer-buttons .elementor-button {
  border-radius: 4px !important;
  font: 600 .88rem/1 'Roboto', system-ui, sans-serif !important;
  padding: 13px 18px !important;
}
.elementor-menu-cart__footer-buttons .elementor-button--view-cart {
  background: transparent !important;
  color: var(--brun, #311F15) !important;
  border: 1.5px solid rgba(49,31,21,.25) !important;
}
.elementor-menu-cart__footer-buttons .elementor-button--checkout {
  background: var(--rouge, #B61315) !important;
  color: var(--creme, #FFF8E8) !important;
}
.elementor-menu-cart__footer-buttons .elementor-button--checkout:hover { background: #8F0F11 !important; }
.elementor-menu-cart__close-button { color: var(--brun, #311F15); }

/* =========================================================================
   FOND DU SITE (2026-07-29)
   Seule regle de cette feuille qui sort du scope .cr-refonte, et c'est
   volontaire : dans la maquette le creme est pose sur le conteneur racine
   (.site), donc sur toutes les pages, tunnel de commande compris. Le thema
   Hello impose un blanc via reset.css (selecteur `body`, specificite 0,0,1) :
   une regle simple sur `body` suffit a repasser devant, refonte.css etant
   chargee apres. Les blocs qui doivent rester blancs (cartes produit, encarts)
   portent deja leur propre `background: #fff`.
   ========================================================================= */
body { background-color: #FFF8E8; }

/* =========================================================================
   RECETTE FINALE (2026-07-29) : accessibilite et tenue sur telephone
   Corrections issues d'un balayage automatise du contraste (outils/contraste.mjs)
   et du controle 390px (outils/mobile.mjs), pas d'un examen a l'oeil.
   ========================================================================= */

/* -- 1. Texte doux sur fond sable ----------------------------------------
   #7d6a59 sur #F0E4C4 donne 4,07 pour 1, sous le minimum de 4,5. Le defaut
   ne vient pas de la couleur du texte mais du couple : le meme brun sur le
   creme passe a 4,87 et reste conforme. On ne corrige donc QUE dans les
   blocs a fond sable, en redefinissant la variable : tous les descendants
   suivent sans avoir a lister chaque regle. Nouvelle mesure : 5,21. */
.cr-refonte.guidage, .cr-refonte .guidage,
.cr-refonte.ludo, .cr-refonte .ludo,
.cr-refonte.rappel-ludo, .cr-refonte .rappel-ludo,
.cr-ap-encadre,
.cr-encart-guide,
.cr-encart-lecture,
.encart-produit { --texte-doux: #6B5A4A; }

/* La liste ci-dessus a ete relevee par balayage (outils/sable.mjs), pas de
   memoire : au premier essai je n'avais mis que .guidage et le bloc « Dans son
   atelier du Beaujolais » restait a 4,07 parce qu'il porte la classe .ludo. */

/* -- 2. Le mot « des » devant le prix ------------------------------------
   Corrige le 2026-07-29 : la remise en forme du prix visait `.amount`, donc
   le montant. Mais `span.price` porte AUSSI un noeud de texte nu (« des »)
   qui gardait le jaune-vert #958E09 de WooCommerce, mesure a 3,41 pour 1.
   Un mot isole passe inapercu en relecture ; le balayage l'a vu. */
.cr-refonte .price,
.cr-refonte span.price,
/* Classe doublee : sur la page Nos cafes la grille est rendue par un widget
   Elementor dont la feuille passe apres celle du kit et reprenait la main a
   specificite egale. Meme piege que le padding des cartes le 2026-07-29 :
   la regle simple marchait sur l'accueil et pas ici. */
.cr-refonte.cr-refonte .products span.price,
.cr-refonte.cr-refonte ul.products li.product span.price { color: var(--brun, #311F15); }

/* -- 3. Le zoom de la photo produit sur telephone -------------------------
   L'image de zoom de WooCommerce est servie en 1920px de large et depassait
   de 1554px hors de l'ecran en 390px. Le debordement etait rattrape plus
   haut, mais un geste de balayage sur la photo pouvait decaler la page. */
.woocommerce-product-gallery { overflow: hidden; }
/* `max-width` ne suffisait pas : le script de zoom pose une largeur en style
   inline (1920px), qui bat toute regle de feuille. Sur telephone le survol
   n'existe pas de toute facon, on ecarte donc la couche de zoom : le geste
   naturel pour agrandir une photo est le pincement, qui reste disponible. */
@media (max-width: 767px) {
  .woocommerce-product-gallery img.zoomImg { display: none !important; }
}
.woocommerce-product-gallery img.zoomImg { max-width: 100%; height: auto; }

/* -- 4. Les tableaux dans les articles ------------------------------------
   Les guides rediges contiennent des tableaux comparatifs larges de 861px.
   Sur un ecran de 390px, les colonnes de droite etaient inatteignables.
   On rend le tableau defilant DANS son cadre, sans toucher au contenu :
   la regle est de ne jamais modifier le texte des articles. */
@media (max-width: 767px) {
  /* La classe est .cr-art-corps, relevee sur la page : au premier essai
     j'avais vise .cr-article et .entry-content, qui n'existent ni l'une ni
     l'autre sur ce gabarit, et le tableau debordait toujours. */
  .cr-art-corps .elementor-widget-container:has(> table) {
    overflow-x: auto;
    -webkit-overflow-scrolling: touch;
  }
  .cr-art-corps table { min-width: 520px; }
}

/* -- 5. La zone tactile du panier dans l'en-tete --------------------------
   Mesure a 34px de haut sur les sept pages. Le seuil d'accessibilite est de
   44px : en dessous, le doigt rate la cible, et c'est le bouton qui mene au
   paiement. On agrandit la zone sensible sans changer le rendu visuel. */
.cr-cart .elementor-menu-cart__toggle_button,
.elementor-menu-cart__toggle_button.elementor-button {
  min-height: 44px;
  display: inline-flex;
  align-items: center;
}

/* -- 6. Les boutons des encarts d'article sur telephone -------------------
   « Voir le cafe » et « Lire l'article » mesuraient 36px de haut. Ce sont les
   deux seuls liens de sortie d'un article vers la boutique : ils doivent etre
   faciles a atteindre au pouce. */
@media (max-width: 767px) {
  .encart-produit .cr-btn-encart,
  .cr-encart-guide .cr-btn-encart,
  .cr-encart-lecture .cr-btn-encart {
    min-height: 44px;
    display: inline-flex;
    align-items: center;
  }
}

/* =========================================================================
   BANDEAU COOKIES : correctif Complianz retire le 2026-07-30
   Complianz sortait de l'ecran par la gauche sur telephone, faute d'annuler
   son propre translateX en dessous de 768px. Le correctif n'a plus d'objet :
   le plugin a ete remplace par wpjraconsent, dont le bandeau est en flux et
   ne se centre pas par transformation. Conserve ici en memoire du piege, au
   cas ou un autre site utiliserait encore Complianz.
   ========================================================================= */


/* =========================================================================
   BANDEAU DE CONSENTEMENT (2026-07-30)
   Le plugin maison wpjraconsent remplace Complianz puis SEOPress. Il n'a
   aucun reglage de couleur : tout passe par ces variables, ce qui evite un
   ecran de plus a mal regler et garde la charte dans une seule feuille.
   ========================================================================= */
:root {
  --wpjraco-fond: #241710;
  --wpjraco-texte: #FFF8E8;
  --wpjraco-texte-doux: rgba(255, 248, 232, .78);
  --wpjraco-accent: #B61315;
  --wpjraco-accent-texte: #FFF8E8;
  --wpjraco-bordure: rgba(255, 248, 232, .3);
  --wpjraco-rayon: 8px;
}

/* Le lien de reouverture, pose dans le pied de page, suit le ton des autres
   liens de cette zone plutot que celui du bandeau. */
.cr-refonte .wpjraco-lien-reglages { color: inherit; opacity: .8; }
.cr-refonte .wpjraco-lien-reglages:hover { opacity: 1; }

/* =========================================================================
   PAGES LEGALES (2026-07-30)
   Politique de cookies et mentions legales sortent du gabarit Elementor :
   elles passent par le gabarit par defaut du theme Hello, qui ne pose ni
   marge ni largeur de lecture. Le titre se retrouvait a 8px sous l'en-tete
   et le texte courait sur toute la largeur de l'ecran.
   ========================================================================= */
/* INCIDENT du 2026-07-30, signale par Johann : la premiere version visait
   `.site-main.page`, or la classe `page` est posee sur TOUTES les pages,
   Elementor compris. La home et toutes les pages du builder se sont donc
   retrouvees bridees a 820px, heros compris. On cible desormais les seules
   pages rendues par le gabarit simple du theme : la classe `elementor-page`
   du body permet de les distinguer sans ambiguite. */
body:not(.elementor-page) .site-main.page {
  max-width: 820px;
  margin: 0 auto;
  padding: 56px 20px 72px;
  color: var(--texte, #4a3a2e);
}

/* Typographie alignee sur le reste du site.
   Signale par Johann : ces pages heritaient de Poppins 18px, la police par
   defaut du theme, alors que tout le site est en Roboto 15,7px. Elles
   paraissaient venir d'un autre site. Les valeurs ci-dessous sont celles
   relevees sur les pages Elementor, pas des valeurs choisies au jugE. */
body:not(.elementor-page) .site-main.page,
body:not(.elementor-page) .site-main.page p,
body:not(.elementor-page) .site-main.page li,
body:not(.elementor-page) .site-main.page td,
body:not(.elementor-page) .site-main.page th {
  font-family: 'Roboto', system-ui, sans-serif;
  font-size: .98rem;
}

body:not(.elementor-page) .site-main.page .entry-title {
  margin: 0 0 32px;
  font-family: 'Roboto Slab', Georgia, serif;
  font-weight: 700;
  font-size: 2.2rem;
  color: var(--brun, #311F15);
  line-height: 1.15;
}

body:not(.elementor-page) .site-main.page h2 {
  margin: 44px 0 14px;
  font-family: 'Roboto Slab', Georgia, serif;
  font-weight: 700;
  font-size: 1.75rem;
  line-height: 1.25;
  color: var(--brun, #311F15);
}

body:not(.elementor-page) .site-main.page h3 {
  margin: 30px 0 10px;
  font-family: 'Roboto Slab', Georgia, serif;
  font-size: 1.18rem;
  font-weight: 700;
  color: var(--brun, #311F15);
}

body:not(.elementor-page) .site-main.page p { margin: 0 0 14px; line-height: 1.6; }
body:not(.elementor-page) .site-main.page ul,
body:not(.elementor-page) .site-main.page ol { margin: 0 0 16px; padding-left: 22px; line-height: 1.6; }
body:not(.elementor-page) .site-main.page li { margin-bottom: 6px; }
body:not(.elementor-page) .site-main.page strong { color: var(--brun, #311F15); }
body:not(.elementor-page) .site-main.page a { color: var(--rouge, #B61315); text-underline-offset: 3px; }

/* Les tableaux de cookies : lisibles, et defilants plutot que debordants
   sur telephone. Meme traitement que les tableaux des articles. */
body:not(.elementor-page) .site-main.page table {
  width: 100%;
  border-collapse: collapse;
  margin: 18px 0 26px;
  font-size: .92rem;
}
body:not(.elementor-page) .site-main.page thead th {
  text-align: left;
  background: var(--or-clair, #F0E4C4);
  color: var(--brun, #311F15);
  font-weight: 600;
  padding: 10px 12px;
}
body:not(.elementor-page) .site-main.page td { padding: 10px 12px; border-top: 1px solid rgba(49,31,21,.12); vertical-align: top; }
body:not(.elementor-page) .site-main.page code {
  font-size: .86em;
  background: rgba(49,31,21,.06);
  padding: 1px 5px;
  border-radius: 3px;
  overflow-wrap: anywhere;
}

@media (max-width: 767px) {
  body:not(.elementor-page) .site-main.page { padding: 32px 16px 56px; }
  body:not(.elementor-page) .site-main.page table { display: block; overflow-x: auto; }
}

/* =========================================================================
   PAGE CONTACT (2026-07-30)
   Seule page du site restee sur l'ancien design : elle utilisait Playfair
   Display, une police absente partout ailleurs. Refaite avec la grammaire des
   autres pages : en-tete sombre, puis les moyens de contact en cartes.
   Textes et coordonnees repris a l'identique.
   ========================================================================= */

.cr-contact-hero {
  background: var(--brun, #311F15);
  padding: 64px 20px 72px;
  text-align: center;
}
.cr-contact-hero .eyebrow { color: var(--or, #D9A441); }
/* On vise le titre lui-meme, pas l'enveloppe du widget : le kit Elementor
   pose sa couleur sur `.elementor-heading-title`, et une couleur mise sur le
   conteneur n'a aucun effet. Resultat au premier essai : un titre brun sur
   fond brun, donc invisible. */
.cr-refonte .cr-contact-titre,
.cr-refonte .cr-contact-titre .elementor-heading-title {
  color: var(--creme, #FFF8E8);
  font-family: 'Roboto Slab', Georgia, serif;
  font-weight: 700;
  margin-block-end: 18px;
}
.cr-refonte .cr-contact-chapo,
.cr-refonte .cr-contact-chapo p {
  color: rgba(255, 248, 232, .82);
  line-height: 1.6;
  margin: 0 0 4px;
}

/* Les trois cartes. `auto-fit` plutot qu'un nombre fixe de colonnes : si une
   coordonnee disparait un jour, la grille se referme sans laisser de trou. */
.cr-contact-cartes {
  padding: 56px 20px 64px;
}
.cr-contact-cartes > .e-con-inner {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 20px;
  align-items: stretch;
}
.cr-contact-carte {
  background: #fff;
  border-radius: 12px;
  padding: 32px 24px;
  text-align: center;
  box-shadow: 0 1px 3px rgba(49, 31, 21, .07);
}
.cr-contact-icone { color: var(--rouge, #B61315); font-size: 26px; margin-block-end: 14px; }

/* Meme piege que le titre : la taille et la couleur doivent viser le titre
   lui-meme, sinon le kit Elementor impose son h2 a 28px. */
.cr-refonte .cr-contact-etiquette,
.cr-refonte .cr-contact-etiquette .elementor-heading-title {
  font-family: 'Roboto Slab', Georgia, serif;
  font-size: 1.05rem;
  font-weight: 700;
  line-height: 1.3;
  color: var(--brun, #311F15);
}
.cr-refonte .elementor-widget.cr-contact-etiquette { margin-block-end: 10px; }

.cr-refonte .cr-contact-valeur,
.cr-refonte .cr-contact-valeur .elementor-heading-title,
.cr-refonte .cr-contact-valeur a {
  color: var(--texte, #4a3a2e);
  font-family: 'Roboto', system-ui, sans-serif;
  font-size: .95rem;
  font-weight: 400;
  line-height: 1.5;
  overflow-wrap: anywhere;
}
.cr-refonte .cr-contact-valeur a:hover { color: var(--rouge, #B61315); }

@media (max-width: 767px) {
  .cr-contact-hero { padding: 44px 16px 52px; }
  .cr-contact-cartes { padding: 36px 16px 52px; }
}

/* =========================================================================
   APRES LE PAIEMENT (2026-07-30)
   La derniere page que voit un client, et celle qu'il rouvre pour retrouver
   son numero de commande. WooCommerce y met un recapitulatif exact mais froid,
   qui ne repond pas a la seule question du moment : quand vais-je le recevoir.
   ========================================================================= */

.cr-merci {
  font-family: 'Roboto Slab', Georgia, serif;
  font-size: 1.35rem;
  font-weight: 700;
  color: var(--brun, #311F15);
  margin: 0 0 10px;
}
.cr-merci-suite { margin: 0 0 26px; color: var(--texte, #4a3a2e); line-height: 1.6; }

/* Le bandeau des quatre informations : c'est ce qu'on vient chercher en
   revenant sur la page, il ne doit pas se confondre avec le reste. */
.woocommerce-order-overview.order_details {
  background: var(--or-clair, #F0E4C4);
  border-radius: 10px;
  padding: 20px 24px;
  margin: 0 0 36px;
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  gap: 20px 36px;
  border: none;
}
.woocommerce-order-overview.order_details li {
  border: none;
  padding: 0;
  margin: 0;
  font-size: .78rem;
  text-transform: uppercase;
  letter-spacing: .04em;
  color: var(--texte-doux, #7d6a59);
}
.woocommerce-order-overview.order_details li strong {
  display: block;
  margin-top: 4px;
  font-family: 'Roboto Slab', Georgia, serif;
  font-size: 1.05rem;
  text-transform: none;
  letter-spacing: 0;
  color: var(--brun, #311F15);
}

/* Les trois etapes. Numerotees parce qu'il s'agit reellement d'une sequence
   dans le temps, pas d'une liste decorative. */
.cr-suite {
  margin: 40px 0 8px;
  padding: 28px 28px 24px;
  background: #fff;
  border-radius: 12px;
  box-shadow: 0 1px 3px rgba(49, 31, 21, .07);
}
.cr-suite__titre {
  font-family: 'Roboto Slab', Georgia, serif;
  font-size: 1.3rem;
  font-weight: 700;
  color: var(--brun, #311F15);
  margin: 0 0 18px;
}
.cr-suite__etapes { margin: 0 0 22px; padding-left: 22px; }
.cr-suite__etapes li { margin-bottom: 12px; line-height: 1.6; color: var(--texte, #4a3a2e); }
.cr-suite__etapes li strong { color: var(--brun, #311F15); }
.cr-suite__aide { font-size: .92rem; color: var(--texte-doux, #7d6a59); line-height: 1.6; margin: 0 0 20px; }
.cr-suite__aide a { color: var(--rouge, #B61315); }
.cr-suite__retour { margin: 0; }
.cr-suite__bouton {
  display: inline-flex;
  align-items: center;
  min-height: 44px;
  padding: 11px 22px;
  border-radius: 8px;
  background: var(--rouge, #B61315);
  color: var(--creme, #FFF8E8) !important;
  font-weight: 600;
  text-decoration: none;
}
.cr-suite__bouton:hover { background: #8F0F11; }

@media (max-width: 600px) {
  .woocommerce-order-overview.order_details { gap: 16px 24px; padding: 16px 18px; }
  .cr-suite { padding: 22px 18px 20px; }
}/* End custom CSS */
/* Start Custom Fonts CSS */@font-face {
	font-family: 'Poppins';
	font-style: normal;
	font-weight: normal;
	font-display: auto;
	src: url('https://caferogo.business/wp-content/uploads/2025/03/Poppins-Regular.ttf') format('truetype');
}
@font-face {
	font-family: 'Poppins';
	font-style: normal;
	font-weight: bold;
	font-display: auto;
	src: url('https://caferogo.business/wp-content/uploads/2025/03/Poppins-Bold.ttf') format('truetype');
}
@font-face {
	font-family: 'Poppins';
	font-style: normal;
	font-weight: 100;
	font-display: auto;
	src: url('https://caferogo.business/wp-content/uploads/2025/03/Poppins-Thin.ttf') format('truetype');
}
@font-face {
	font-family: 'Poppins';
	font-style: italic;
	font-weight: normal;
	font-display: auto;
	src: url('https://caferogo.business/wp-content/uploads/2025/03/Poppins-Italic.ttf') format('truetype');
}
/* End Custom Fonts CSS */
/* Start Custom Fonts CSS */@font-face {
	font-family: 'Playfair Display';
	font-display: auto;
	src: url('https://caferogo.business/wp-content/uploads/2025/03/PlayfairDisplay-VariableFont_wght.ttf') format('truetype');
}
/* End Custom Fonts CSS */