/* ===========================================================================
   « Renouveau » — proposition de mise en forme pour les pages du site.
   Écrite le 18/09/2026, servie UNIQUEMENT sous /v2/. Le site actuel ne la
   charge pas : rien de ce qui suit ne peut l'atteindre.

   Ce qu'on corrige, dans l'ordre de ce qui saute aux yeux :

   1. les titres de section s'affichaient sur un BANDEAU GRIS pleine largeur
      (`h2 { background:#f2f2f2 }`, une règle nue du thème, jamais voulue) ;
   2. ils étaient trop gros : 32 px pour un h2, 28 pour un h3, en capitales
      très écartées — l'échelle d'un site de 2019 ;
   3. le texte courait sur 1120 px, soit ~150 signes par ligne, quand l'œil en
      lit confortablement 65 à 75 ;
   4. l'alignement changeait de bloc en bloc — les titres de widget à gauche,
      les titres écrits dans le corps de texte centrés — sans raison ;
   5. il fallait CLIQUER pour lire : deux accordéons et deux « Lire plus » sur
      la seule page « Nos engagements » ;
   6. des bandes décoratives vides mangeaient de la hauteur pour rien.

   Deux familles de titres cohabitent sur ce site, et il faut viser les deux :
   ceux posés par un widget « Titre » d'Elementor (`.elementor-heading-title`)
   et ceux écrits À LA MAIN dans un bloc de texte, qui portent souvent un
   `style="text-align:center"` en ligne. Une déclaration `!important` d'une
   feuille l'emporte sur un style en ligne ordinaire : c'est ce qui permet de
   les remettre d'aplomb sans toucher au contenu.

   Pourquoi `!important` partout ici, alors qu'on l'évite ailleurs : cette
   feuille n'a qu'un rôle, passer PAR-DESSUS les règles par-élément d'Elementor
   (`.elementor-208 .elementor-element-4729c05a .elementor-heading-title`,
   spécificité 0,4,0, une par widget). Les égaler à coups de sélecteurs
   dupliqués la rendrait illisible pour un gain nul. C'est le cas où le
   mot-clé est à sa place : une surcouche assumée, jamais mêlée au site.
   =========================================================================== */

:root {
  --nv-vert: #B6C92F;
  --nv-vert-fonce: #5C6618;
  --nv-encre: #3d3d3b;
  --nv-texte: #4c4c4a;
  --nv-trait: #e6e6e2;
  --nv-colonne: 46rem;      /* ~72 signes dans la fonte du site */
}

/* --- 1. Le bandeau gris derrière les titres — sur toutes les pages --------
   `main.site-main` est ajouté pour la liste des actualités : elle n'est pas
   une page Elementor, c'est le gabarit d'archive du thème — et la règle nue
   `h2 { background:#f2f2f2 }` l'atteint tout autant. */
body.icare-v2 [data-elementor-type="wp-post"] h2,
body.icare-v2 [data-elementor-type="wp-post"] h3,
body.icare-v2 [data-elementor-type="wp-post"] h4,
body.icare-v2 main.site-main h2,
body.icare-v2 main.site-main h3 {
  background: none !important;
  border-bottom: 0 !important;
  padding-left: 0 !important;
  padding-right: 0 !important;
}

/* --- 2. L'échelle des titres — pages de contenu --------------------------
   Les capitales de la charte sont conservées : c'était l'écartement et la
   taille qui faisaient « vieux », pas les majuscules. Un trait court sous le
   h2 remplace le filet pleine largeur : il souligne le titre, il ne barre
   plus la page. */
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) h2 {
  font-size: 1.38rem !important;
  font-weight: 600 !important;
  line-height: 1.3 !important;
  letter-spacing: .015em !important;
  color: var(--nv-encre) !important;
  text-align: left !important;
  margin: 0 0 22px !important;
  padding-bottom: 12px !important;
  position: relative;
}
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) h2::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 54px;
  height: 3px;
  background: var(--nv-vert);
}
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) h3,
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) h4 {
  font-size: 1.06rem !important;
  font-weight: 600 !important;
  line-height: 1.35 !important;
  letter-spacing: .02em !important;
  color: var(--nv-vert-fonce) !important;
  text-align: left !important;
  margin: 26px 0 8px !important;
}

/* --- 3 & 4. La colonne de lecture ----------------------------------------
   Seulement sur les pages de contenu : l'accueil et les actualités ont leurs
   propres compositions (colonnes, vignettes), qu'une largeur imposée
   abîmerait. */
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .elementor-widget-text-editor > .elementor-widget-container,
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .elementor-widget-heading > .elementor-widget-container,
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .elementor-widget-icon-list > .elementor-widget-container {
  max-width: var(--nv-colonne);
  margin-left: 0;
  margin-right: auto;
}
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .elementor-widget-text-editor p,
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .elementor-widget-text-editor li,
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .elementor-widget-text-editor {
  text-align: left !important;
}
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .elementor-widget-text-editor p {
  font-size: 1rem !important;
  line-height: 1.68 !important;
  color: var(--nv-texte) !important;
  margin: 0 0 1em !important;
}
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .elementor-widget-text-editor p:last-child {
  margin-bottom: 0 !important;
}

/* --- Listes : une puce verte plutôt qu'un rond noir ----------------------- */
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .elementor-widget-text-editor ul {
  list-style: none !important;
  padding-left: 0 !important;
  margin: 0 0 1em !important;
}
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .elementor-widget-text-editor ul > li {
  position: relative;
  padding-left: 20px !important;
  margin-bottom: 7px !important;
  line-height: 1.6 !important;
  color: var(--nv-texte) !important;
}
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .elementor-widget-text-editor ul > li::before {
  content: "";
  position: absolute;
  left: 0;
  top: .62em;
  width: 7px;
  height: 7px;
  background: var(--nv-vert);
}

/* --- 5. Les accordéons : ouverts -----------------------------------------
   Deux greffons différents (l'accordéon d'Essential Addons et le « toggle »
   d'Elementor) partagent la même classe de contenu. Le repli est posé en
   style EN LIGNE par leur JavaScript — seul `!important` en vient à bout.
   Les titres redeviennent des intertitres : plus d'icône « + », plus de
   curseur main, plus rien qui promette un clic devenu inutile. */
body.icare-v2 .elementor-tab-content,
body.icare-v2 .eael-accordion-content {
  display: block !important;
  height: auto !important;
  padding: 0 0 6px !important;
  border: 0 !important;
}
body.icare-v2 .elementor-tab-title,
body.icare-v2 .eael-accordion-header {
  cursor: default !important;
  background: none !important;
  border: 0 !important;
  border-bottom: 1px solid var(--nv-trait) !important;
  padding: 0 0 8px !important;
  margin: 26px 0 12px !important;
  font-size: 1.06rem !important;
  font-weight: 600 !important;
  letter-spacing: .02em !important;
  color: var(--nv-vert-fonce) !important;
}
body.icare-v2 .elementor-toggle-icon,
body.icare-v2 .eael-advanced-accordion-icon-closed,
body.icare-v2 .eael-advanced-accordion-icon-opened,
body.icare-v2 .elementor-accordion-icon {
  display: none !important;
}
/* Le « Lire plus » d'Elementor est un <a> : sans cela il resterait un lien
   qui ne mène nulle part. */
body.icare-v2 a.elementor-toggle-title {
  pointer-events: none;
  text-decoration: none !important;
}


/* Le contenu des accordéons n'est pas un « bloc de texte » aux yeux
   d'Elementor : il lui faut ses propres règles, sinon il repartait pleine
   largeur, avec les puces noires du navigateur. */
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .elementor-tab-content p,
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .eael-accordion-content p,
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .elementor-tab-content li,
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .eael-accordion-content li {
  font-size: 1rem !important;
  line-height: 1.68 !important;
  color: var(--nv-texte) !important;
  text-align: left !important;
}
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .elementor-tab-content p,
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .eael-accordion-content p { margin: 0 0 1em !important; max-width: var(--nv-colonne); }
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .elementor-tab-content ul,
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .eael-accordion-content ul {
  list-style: none !important;
  padding-left: 0 !important;
  margin: 0 0 1em !important;
  max-width: var(--nv-colonne);
}
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .elementor-tab-content ul > li,
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .eael-accordion-content ul > li {
  position: relative;
  padding-left: 20px !important;
  margin-bottom: 7px !important;
}
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .elementor-tab-content ul > li::before,
body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) .eael-accordion-content ul > li::before {
  content: "";
  position: absolute;
  left: 0;
  top: .62em;
  width: 7px;
  height: 7px;
  background: var(--nv-vert);
}

/* Un intitulé d'accordéon qui disait « Lire plus » ou « Découvrir » n'a plus
   de sens une fois le contenu déplié : c'est le script qui les marque, le CSS
   ne sait pas lire un texte. */
body.icare-v2 .icare-v2-appel { display: none !important; }

/* --- 6 & 7. LES SECTIONS DÉCORATIVES SONT EXEMPTÉES ----------------------
   Une section qui porte une IMAGE DE FOND est un bandeau : le titre de page,
   ou l'une de ces bandes vertes qui séparent les chapitres. Son texte y est
   centré, souvent blanc, et occupe toute la largeur — c'est voulu. Les règles
   ci-dessus le repeindraient en gris foncé et le pousseraient à gauche, hors
   du cadre. On le lui rend, avec un cran de spécificité de plus.

   On les EXCLUT à la source (`:not(.entete):not(.icare-v2-deco)`) plutôt
   que de les rattraper après coup. Première tentative, écartée : rendre leur
   apparence avec `revert`. Ce mot-clé annule TOUTES les déclarations
   d'auteur, donc le centrage d'Elementor lui-même — le texte repartait à
   gauche, hors du cadre. Il ne sert pas à « revenir à la règle d'avant ».

   `.entete` est écrit en dur parce qu'il est en haut de page : l'attendre du
   JavaScript ferait clignoter le titre. Les autres bandes sont marquées au
   chargement par `renouveau.js` — elles sont plus bas, personne ne les voit
   changer. */
/* Le titre de page garde son échelle de bannière ; on ne lui reprend que la
   graisse, trop maigre en 300. */
body.icare-v2 [data-elementor-type="wp-post"] section.entete h1.elementor-heading-title {
  font-weight: 400 !important;
}

/* Bandes réellement VIDES (ni texte ni image) : réduites à un filet. Elles
   gardent leur rôle de séparateur, elles ne coûtent plus un écran. */
body.icare-v2 .icare-v2-bande {
  min-height: 0 !important;
  height: 16px !important;
  padding: 0 !important;
  margin: 34px 0 !important;
}
body.icare-v2 .icare-v2-bande > .elementor-container { display: none !important; }

/* --- Le ruban « proposition » ---------------------------------------------
   Fixé en bas, discret, avec le lien vers la MÊME page du site actuel : on
   compare en un clic, sans chercher l'adresse. Il n'existe que sous /v2/. */
.icare-v2-ruban {
  position: fixed;
  left: 50%;
  bottom: 16px;
  transform: translateX(-50%);
  z-index: 99999;
  display: flex;
  align-items: center;
  gap: 14px;
  max-width: calc(100vw - 32px);
  padding: 9px 18px;
  border-radius: 999px;
  background: rgba(28, 28, 26, .9);
  color: #fff;
  font: 400 13px/1.3 "Work Sans", system-ui, sans-serif;
  box-shadow: 0 6px 24px rgba(0, 0, 0, .28);
}
.icare-v2-ruban strong { font-weight: 600; color: var(--nv-vert); }
.icare-v2-ruban a {
  color: #fff !important;
  text-decoration: underline;
  text-underline-offset: 3px;
  white-space: nowrap;
}
.icare-v2-ruban a:hover { color: var(--nv-vert) !important; }
.icare-v2-ruban button {
  border: 0;
  background: none;
  color: #9a9a95;
  font: inherit;
  font-size: 15px;
  line-height: 1;
  padding: 0 0 0 2px;
  cursor: pointer;
}
.icare-v2-ruban button:hover { color: #fff; }

@media (max-width: 700px) {
  .icare-v2-ruban { font-size: 12px; gap: 10px; padding: 8px 14px; }
  body.icare-v2-contenu [data-elementor-type="wp-post"] section.elementor-section:not(.entete):not(.icare-v2-deco) h2 { font-size: 1.22rem !important; }
}


/* ===========================================================================
   L'ACCUEIL — on ne touche qu'à ce qui gêne.
   Son triptyque de colonnes et ses titres centrés sont une composition
   voulue : la colonne de lecture et l'alignement à gauche l'abîmeraient.
   Deux corrections, demandées le 18/09/2026.
   =========================================================================== */

/* 1. Les deux boutons « Nos engagements » et « Nos réalisations » prenaient
      TOUTE la largeur de leur colonne (360 px mesurés) pour une simple
      flèche. Un bouton doit faire la taille de ce qu'il dit. */
body.icare-v2-accueil .elementor-widget-button .elementor-button {
  display: inline-flex !important;
  width: auto !important;
  min-width: 0 !important;
  padding: 10px 34px !important;
  border-radius: 3px !important;
}
body.icare-v2-accueil .elementor-widget-button .elementor-button-wrapper {
  text-align: center !important;
}

/* 2. Le texte justifié dans des colonnes étroites creuse des rivières de
      blanc — très visible sur « experts en Maîtrise d'Œuvre, OPC et… ». */
body.icare-v2-accueil .elementor-widget-text-editor p {
  text-align: left !important;
}

/* ===========================================================================
   LES ACTUALITÉS — des vignettes, pas des pavés.
   La liste empilait, pleine largeur : le titre sur son bandeau gris, parfois
   une photo de 500 px de haut, parfois rien, et tout le chapô. Les blocs
   Facebook qui ne se chargent plus y laissaient des trous d'un demi-écran.
   Demandé le 18/09/2026 : montrer les visuels, beaucoup moins de texte.

   Le gabarit d'archive est simple — `article.post` contenant un titre, parfois
   un lien-image, parfois un chapô : il suffit de le disposer en grille, dans
   l'ordre où l'œil le lit (l'image d'abord), et de couper le texte.

   La grille se pose sur `.page-content`, PAS sur `main` : les articles sont
   ses enfants à elle. Posée un cran trop haut, elle n'avait que deux cases —
   l'entête et le bloc entier — et la page mesurait 9 200 px. */
/* Le titre d'archive, au-dessus de la grille.
   =========================================================================== */

body.icare-v2-actus main.site-main .page-content {
  display: grid;
  grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 44px 30px;
  box-sizing: border-box;
  width: 100%;
  max-width: 1280px;
  margin: 0 auto;
  padding: 46px 20px 80px;
}
/* La pagination n'est pas une vignette : elle traverse. */
body.icare-v2-actus main.site-main .page-content > *:not(article) {
  grid-column: 1 / -1;
  text-align: center;
}
body.icare-v2-actus main.site-main .page-content > article.post {
  display: flex;
  flex-direction: column;
  min-width: 0;
}
/* Dans le balisage, le titre précède l'image. À l'écran c'est l'inverse :
   c'est le visuel qui donne envie d'entrer. `order` suffit — on ne déplace
   rien dans le document, donc le titre reste le premier élément lu par un
   lecteur d'écran et par un moteur. */
body.icare-v2-actus article.post > a:has(img) {
  order: -1;
  display: block;
  aspect-ratio: 16 / 10;
  overflow: hidden;
  background: #f0f3df;
  margin-bottom: 14px;
}
body.icare-v2-actus article.post > a > img {
  width: 100% !important;
  height: 100% !important;
  max-width: none !important;
  object-fit: cover;
  display: block;
  transition: transform .5s ease;
}
body.icare-v2-actus article.post:hover > a > img { transform: scale(1.04); }
/* Un article sans photo garde sa place dans la grille : un aplat de la charte
   plutôt qu'une vignette manquante qui décalerait toute la rangée. */
body.icare-v2-actus article.post:not(:has(img))::before {
  content: "";
  order: -1;
  display: block;
  aspect-ratio: 16 / 10;
  margin-bottom: 14px;
  background: repeating-linear-gradient(135deg, #f5f7e8 0 16px, #edf1d9 16px 32px);
}
body.icare-v2-actus h2.entry-title {
  font-size: 1.02rem !important;
  font-weight: 600 !important;
  line-height: 1.35 !important;
  letter-spacing: 0 !important;
  margin: 0 0 8px !important;
  padding: 0 !important;
}
body.icare-v2-actus h2.entry-title a {
  color: var(--nv-encre) !important;
  text-decoration: none !important;
}
body.icare-v2-actus h2.entry-title a:hover { color: var(--nv-vert-fonce) !important; }
/* Trois lignes d'accroche, pas une de plus. */
body.icare-v2-actus article.post p {
  font-size: .92rem !important;
  line-height: 1.6 !important;
  color: var(--nv-texte) !important;
  margin: 0 !important;
  text-align: left !important;
  display: -webkit-box;
  -webkit-line-clamp: 3;
  line-clamp: 3;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
/* Les intégrations Facebook mortes et les blocs vides ne laissent plus de
   trous : dans une vignette, il n'y a de place que pour l'image, le titre et
   l'accroche. */
body.icare-v2-actus article.post iframe,
body.icare-v2-actus article.post .fb_iframe_widget,
body.icare-v2-actus article.post > *:not(h2):not(p):not(a) {
  display: none !important;
}

@media (max-width: 1100px) {
  body.icare-v2-actus main.site-main .page-content { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 700px) {
  body.icare-v2-actus main.site-main .page-content { grid-template-columns: 1fr; gap: 34px; }
}

body.icare-v2-actus main.site-main .page-header {
  max-width: 1280px;
  margin: 0 auto;
  padding: 40px 20px 0;
}
body.icare-v2-actus main.site-main .page-header h1 {
  font-size: 1.5rem;
  font-weight: 600;
  letter-spacing: .015em;
  color: var(--nv-encre);
  margin: 0;
  padding-bottom: 12px;
  position: relative;
}
body.icare-v2-actus main.site-main .page-header h1::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 0;
  width: 54px;
  height: 3px;
  background: var(--nv-vert);
}

/* La vidéo du bandeau d'accueil, servie par nous (montage du 24/09/2026).
   Elle prend la place du lecteur YouTube dans le conteneur d'Elementor.
   `cover` : le bandeau n'a pas le rapport 16/9. */
body.icare-v2-accueil .elementor-background-video-container video.icare-v2-video {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  max-width: none;
  object-fit: cover;
}

/* Et AUSSI sur mobile (décision de Miran, 24/09/2026) : Elementor masquait le
   conteneur (`.elementor .elementor-hidden-mobile`, 0,2,0) parce que le
   lecteur YouTube pesait 1,15 Mo et 20 requêtes. Notre fichier fait 1,6 Mo
   en une requête ; renouveau.js garde les exceptions (moins d'animations,
   économie de données), et l'affiche tient la place si la lecture est refusée. */
@media (max-width: 767px) {
  body.icare-v2-accueil .elementor-background-video-container.elementor-hidden-mobile {
    display: block;
  }
}

/* ==========================================================================
   TÉLÉPHONE — l'en-tête et le bandeau d'accueil
   Retours de Miran du 25/09/2026, depuis son téléphone, site en ligne.
   ========================================================================== */
@media (max-width: 767px) {

  /* --- L'en-tête : logo à gauche, tampons ISO à droite, bouton sous eux ----
     Avant : logo centré sur sa rangée, tampons centrés sur une autre, bouton
     posé en absolu à droite — 231 px avant d'atteindre le contenu. Les trois
     colonnes d'Elementor deviennent deux blocs d'une même rangée. */
  body.icare-v2 .elementor-location-header .elementor-top-section > .elementor-container {
    display: flex;
    flex-wrap: nowrap;
    align-items: center;
    justify-content: space-between;
    gap: 14px;
    padding: 10px 16px;
  }
  body.icare-v2 .elementor-location-header .elementor-top-column {
    width: auto;
    flex: 0 0 auto;
  }
  /* La colonne du logo prend toute la place que les tampons lui laissent, et
     le logo s'y centre : il respire au lieu d'être collé au bord gauche. */
  body.icare-v2 .elementor-location-header .elementor-top-column:nth-child(1) {
    flex: 1 1 auto;
    min-width: 0;
  }
  body.icare-v2 .elementor-location-header .elementor-top-column:nth-child(1)
    > .elementor-widget-wrap {
    justify-content: center;
  }
  /* La colonne du milieu ne porte qu'un second logo, masqué de toute façon. */
  body.icare-v2 .elementor-location-header .elementor-top-column:nth-child(2) {
    display: none;
  }
  /* « Le plus gros possible » : la hauteur de l'en-tête est désormais celle du
     logo. Au-delà de 140 px de large (soit 131 de haut), on repasserait
     au-dessus de la colonne de droite — tampons + bouton — qui en occupe 76,
     et l'en-tête recommencerait à grandir pour rien. */
  body.icare-v2 .elementor-location-header .elementor-widget-theme-site-logo img {
    width: 140px;
    height: auto;
  }
  /* Tampons et bouton empilés, alignés à droite. */
  body.icare-v2 .elementor-location-header .elementor-top-column:nth-child(3)
    > .elementor-widget-wrap {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    justify-content: center;
    gap: 4px;
    padding: 0;
  }
  /* Les tampons : c'est le WIDGET qu'il faut dimensionner, pas l'image.
     Elementor lui donne une largeur propre (`width: initial`) ; l'image, elle,
     n'occupe que ce que son conteneur lui laisse — réglée seule, elle se
     tassait à 59 px de large, moitié moins que le logo d'en face. */
  body.icare-v2 .elementor-location-header .elementor-top-column:nth-child(3)
    .elementor-widget-image {
    width: 130px;
    max-width: 130px;
  }
  body.icare-v2 .elementor-location-header .elementor-top-column:nth-child(3)
    .elementor-widget-image img {
    width: 100%;
    height: auto;
  }
  /* Le bouton revient DANS le flux : c'est ce qui le place sous les tampons.
     La règle du 15/09 le posait en absolu (icare-ajustements.css) ; on la
     défait ici, pour la v2 seulement. */
  body.icare-v2 .elementor-location-header .elementor-widget-nav-menu {
    position: static;
    width: 100%;
    margin: 0;
  }
  /* Le widget du menu porte `…__align-start` : son bouton se range à gauche
     de la place qu'on lui donne. On aligne le contenant, pas le bouton — un
     `margin-left: auto` sur un élément dont le parent n'est pas en flex ne
     déplace rien. */
  /* Ce conteneur est en colonne (règle d'Elementor) : dans ce sens, c'est
     `align-items` qui range horizontalement, pas `justify-content`. Le bouton,
     étiré d'un bord à l'autre faute de cette précision, offrait 130 px de zone
     cliquable pour une icône de 24. */
  body.icare-v2 .elementor-location-header .elementor-widget-nav-menu
    > .elementor-widget-container {
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    justify-content: flex-end;
  }
  /* Elementor centre le bouton avec `margin: 0 auto` — et une marge `auto`
     l'emporte sur le `justify-content` du parent. C'est elle qui laissait le
     bouton 38 px à gauche du bord, désaligné des tampons juste au-dessus.
     La règle vient de `post-1308.css`, écrite avec QUATRE classes
     (`.elementor-1308 .elementor-element.elementor-element-dc89e76
     .elementor-menu-toggle`) : une règle à trois classes, même chargée après,
     ne la dépasse pas. D'où le chemin complet ci-dessous — et pas un
     `!important`, qui aurait rendu la suivante plus difficile encore. */
  body.icare-v2 .elementor-location-header .elementor-widget-nav-menu
    > .elementor-widget-container > .elementor-menu-toggle {
    margin: 0;
    /* Sans marges automatiques, le bouton devenait un élément flexible étiré
       sur toute la largeur de la colonne : 130 px de zone cliquable pour une
       icône de 24. `flex: 0 0 auto` le rend à sa taille. */
    flex: 0 0 auto;
  }
  body.icare-v2 .elementor-location-header .elementor-widget__width-initial {
    margin-left: 0;
    margin-right: 0;
  }

  /* Le panneau déroulant s'ouvre sous l'en-tête, sur toute la largeur.
     `top: 100%` se mesure sur le conteneur de la section, rendu `relative`
     par icare-ajustements.css — plus de hauteur écrite en dur à corriger le
     jour où le logo change de taille. */
  body.icare-v2 .elementor-location-header
    .elementor-nav-menu__container.elementor-nav-menu--dropdown {
    position: absolute;
    top: 100%;
    left: 0;
    right: auto;
    width: 100%;
    max-width: 100%;
    display: none;
    background: #fff;
    box-shadow: 0 10px 24px rgba(0, 0, 0, .12);
  }
  /* C'est renouveau.js qui pose cette classe : Elementor ne peut pas le faire,
     le code qui ouvrait son menu n'existe pas sur ce site (404). */
  body.icare-v2 .elementor-location-header
    .elementor-nav-menu__container.icare-menu-ouvert {
    display: block;
  }
  /* Les sous-menus restent dépliés : les replier demanderait le même code
     manquant, et un menu à deux niveaux tient sans peine sur un téléphone. */
  body.icare-v2 .elementor-location-header
    .elementor-nav-menu--dropdown .sub-menu {
    display: block;
  }
  body.icare-v2 .elementor-location-header
    .elementor-nav-menu--dropdown .sub-menu a {
    padding-left: 32px;
  }
  /* Le « × » de fermeture apparaît à la place des trois barres. */
  body.icare-v2 .elementor-menu-toggle.elementor-active
    .elementor-menu-toggle__icon--open { display: none; }
  body.icare-v2 .elementor-menu-toggle.elementor-active
    .elementor-menu-toggle__icon--close { display: block; }

  /* --- Le pied de page -----------------------------------------------------
     Demandé le 25/09/2026 : « fait un peu trop gros sur téléphone ». Le logo
     occupait 204 px de large et la signature 32 px de corps, pour un pied de
     657 px — plus haut qu'un écran et demi de téléphone.
     ⚠️ Le widget du logo porte AUSSI la classe `elementor-widget-image`,
     comme les tampons : sans le `:not(...)`, la règle des tampons écraserait
     celle du logo (même spécificité, la dernière l'emporte). */
  body.icare-v2 .elementor-location-footer .elementor-widget-theme-site-logo img {
    width: 140px;
    height: auto;
  }
  body.icare-v2 .elementor-location-footer
    .elementor-widget-image:not(.elementor-widget-theme-site-logo) img {
    width: 150px;
    height: auto;
  }
  /* La signature manuscrite : 32 → 24 px. ⚠️ Viser tous les `text-editor` du
     pied grossissait aussi la ligne légale du bas, qui est le même widget :
     d'où le cantonnement à la PREMIÈRE section. Vu à la capture, pas au
     calcul — les deux blocs ne se ressemblent pas à l'écran, seulement dans
     le balisage.
     Ses deux lignes sont deux paragraphes distincts : sans `margin: 0`, elles
     s'écartent d'une marge de bloc en plus de l'interligne. */
  body.icare-v2 .elementor-location-footer
    > .elementor-section:first-of-type .elementor-widget-text-editor,
  body.icare-v2 .elementor-location-footer
    > .elementor-section:first-of-type .elementor-widget-text-editor p {
    font-size: 24px;
    line-height: 1.25;
    margin: 0;
  }
  /* La ligne légale, elle, rapetisse : c'est la mention la moins utile de la
     page et elle occupait trois lignes. */
  body.icare-v2 .elementor-location-footer
    > .elementor-section:last-of-type .elementor-widget-text-editor,
  body.icare-v2 .elementor-location-footer
    > .elementor-section:last-of-type .elementor-widget-text-editor p,
  body.icare-v2 .elementor-location-footer
    > .elementor-section:last-of-type .elementor-widget-text-editor span {
    font-size: 13px;
    line-height: 1.6;
  }
  body.icare-v2 .elementor-location-footer .elementor-icon-list-text {
    font-size: 15px;
  }

  /* --- Le bandeau d'accueil ------------------------------------------------
     Le trait vert de 15 px (bordure posée par Elementor sur la section) mange
     la largeur d'un téléphone et pousse le texte contre le bord droit. On le
     retire, et on redonne de l'air des deux côtés. */
  body.icare-v2-accueil .elementor-top-section.elementor-section-stretched {
    border-left-width: 0;
  }
  body.icare-v2-accueil .elementor-top-section.elementor-section-stretched
    > .elementor-container {
    padding-left: 18px;
    padding-right: 18px;
  }
}

/* ==========================================================================
   ORDINATEUR — les sous-menus « Notre entreprise » et « Nos activités »
   Signalé par Miran le 28/09/2026 sur le site en ligne : les deux entrées
   n'ouvraient plus rien du tout.

   Même cause que le bouton du menu en téléphone, un cran plus haut :
   `widget-nav-menu.min.css` pose `display: none` sur les sous-menus au-delà
   de 1024 px et attend que le code d'Elementor l'efface au survol. Ce code
   est `nav-menu.<empreinte>.bundle.min.js`, chargé à la demande — il répond
   404 ici, comme il répondait déjà 404 sur la production WordPress. Le menu
   n'a donc jamais fonctionné dans la copie figée, à aucune largeur.

   On ouvre au survol et au clavier EN CSS : ainsi le menu marche même si
   notre JavaScript ne se charge pas. renouveau.js n'ajoute que le clic, pour
   les écrans tactiles où « survoler » n'existe pas.
   ========================================================================== */
@media (min-width: 1025px) {

  /* Le survol se guette sur le <li>, jamais sur le lien : en descendant du
     libellé vers le sous-menu, la souris traverse la bordure du <li> — visée
     sur le lien seul, la liste se refermerait sous le doigt. */
  body.icare-v2 .elementor-nav-menu--main li.menu-item-has-children:hover > ul.sub-menu,
  body.icare-v2 .elementor-nav-menu--main li.menu-item-has-children:focus-within > ul.sub-menu,
  body.icare-v2 .elementor-nav-menu--main li.menu-item-has-children.icare-sous-ouvert > ul.sub-menu {
    display: block;
  }

  /* Le sous-menu se déploie par-dessus la page. Sans cote de superposition, il
     passe derrière le bandeau qui suit l'en-tête : visible en haut, rogné en
     bas. Les libellés tiennent sur une ligne — « Marchés Publics Globaux »
     coupé en deux ferait un menu bancal. */
  body.icare-v2 .elementor-nav-menu--main li.menu-item-has-children > ul.sub-menu {
    z-index: 100;
    width: auto;
    min-width: 100%;
    white-space: nowrap;
    box-shadow: 0 8px 20px rgba(0, 0, 0, .10);
  }

  /* Le dernier parent de la barre ouvrirait vers la droite, hors de l'écran :
     celui-là s'aligne par sa fin. */
  body.icare-v2 .elementor-nav-menu--main > li.menu-item-has-children:last-child > ul.sub-menu {
    left: auto;
    right: 0;
  }
}

/* ==========================================================================
   CE QUI DEVAIT APPARAÎTRE EN S'ANIMANT
   Elementor masque (`visibility: hidden`) tout élément porteur d'une animation
   d'entrée, et confie à son JavaScript le soin de le montrer quand il entre
   dans l'écran. Ce code vit dans un morceau chargé à la demande : 404 ici.

   Trouvé le 28/09/2026 en auditant la production, page « Nous connaître » :
   cinq mots d'un slogan — « intelligence collective pour accélérer le
   renouvellement énergétique », chacun composé en image — et le paragraphe
   qui suit, jamais montrés à personne. Pire, le résultat variait d'un
   chargement à l'autre : parfois deux mots apparaissaient, parfois aucun.

   Aucune animation ne peut jouer sur ce site figé. Rien ne doit donc dépendre
   d'elles pour être LU.
   ========================================================================== */
body.icare-v2 .elementor-invisible { visibility: visible; }

/* --- Le carrousel d'images -----------------------------------------------
   Même cause : `image-carousel.<empreinte>.bundle.min.js` répond 404, Swiper
   ne s'initialise jamais. Les trois diapositives restent posées côte à côte,
   la première seule dans le cadre, et les deux flèches ne font rien — deux
   photos que personne ne pouvait atteindre. renouveau.js fait glisser le
   ruban ; ici, de quoi le rendre lisible et le mouvement doux. */
body.icare-v2 .elementor-image-carousel-wrapper { overflow: hidden; }
body.icare-v2 .elementor-image-carousel-wrapper .swiper-wrapper {
  display: flex;
  transition: transform .45s ease;
}
body.icare-v2 .elementor-image-carousel-wrapper .swiper-slide {
  flex: 0 0 100%;
}
@media (prefers-reduced-motion: reduce) {
  body.icare-v2 .elementor-image-carousel-wrapper .swiper-wrapper {
    transition: none;
  }
}
/* Les flèches redeviennent des boutons : on les désigne comme tels. */
body.icare-v2 .elementor-swiper-button { cursor: pointer; }

/* ==========================================================================
   NOS ACTUALITÉS — les publications Facebook, chez nous
   Remplace le flux du greffon « Custom Facebook Feed », figé au jour de
   l'aspiration : ses textes dataient et ses photos ne s'affichaient plus,
   les adresses d'images de Facebook étant signées et périmées.

   Ici, tout vient de notre service (icare-actualites) : les photos sont
   rapatriées, les dates sont de vraies dates en français, et rien n'est
   demandé à facebook.com — donc aucun cookie à faire accepter avant de
   pouvoir afficher la section.
   ========================================================================== */
body.icare-v2 .icare-actus {
  padding: 48px 20px 56px;
}
body.icare-v2 .icare-actus-titre {
  margin: 0 0 30px;
  text-align: center;
  font-size: 1.5rem;
  letter-spacing: .04em;
  text-transform: uppercase;
  color: #575756;
}
body.icare-v2 .icare-actus-titre::after {
  content: "";
  display: block;
  width: 56px;
  height: 3px;
  margin: 14px auto 0;
  background: #afca0b;
}
body.icare-v2 .icare-actus-liste {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 26px;
  max-width: 1140px;
  margin: 0 auto;
  padding: 0;
  list-style: none;
}
/* Les cartes s'alignent : une publication courte ne remonte pas sa voisine.
   Chaque carte prend les mêmes rangées que la grille — photo, texte, date. */
body.icare-v2 .icare-actus-carte {
  display: grid;
  grid-template-rows: auto 1fr auto;
  background: #fff;
  border: 1px solid #ececec;
  border-radius: 4px;
  overflow: hidden;
  transition: box-shadow .25s ease, transform .25s ease;
}
body.icare-v2 .icare-actus-carte:hover,
body.icare-v2 .icare-actus-carte:focus-within {
  box-shadow: 0 10px 26px rgba(0, 0, 0, .10);
  transform: translateY(-2px);
}
body.icare-v2 .icare-actus-carte > a {
  display: contents;          /* le lien enveloppe tout sans casser la grille */
  color: inherit;
  text-decoration: none;
}
body.icare-v2 .icare-actus-photo {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  display: block;
  background: #f4f4f4;
}
body.icare-v2 .icare-actus-texte {
  margin: 0;
  padding: 20px 22px 6px;
  font-size: .95rem;
  line-height: 1.55;
  color: #575756;
  /* Le site justifie ses paragraphes : dans une colonne de 300 px, cela creuse
     des rivières blanches entre les mots. Une carte se lit au fil de l'œil. */
  text-align: left;
  hyphens: none;
  /* Une publication entière déséquilibrerait la grille : on en montre le
     début, la suite se lit sur Facebook. */
  display: -webkit-box;
  -webkit-line-clamp: 8;
  -webkit-box-orient: vertical;
  overflow: hidden;
}
body.icare-v2 .icare-actus-texte strong { color: #4a4a49; }
body.icare-v2 .icare-actus-pied {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  padding: 12px 22px 18px;
  font-size: .82rem;
  color: #9a9a99;
}
body.icare-v2 .icare-actus-suite { color: #8aa30a; font-weight: 600; }
body.icare-v2 .icare-actus-plus {
  margin: 34px 0 0;
  text-align: center;
}
body.icare-v2 .icare-actus-plus a {
  display: inline-block;
  padding: 12px 26px;
  border: 2px solid #afca0b;
  border-radius: 3px;
  color: #6f8207;
  font-weight: 600;
  text-decoration: none;
  transition: background .2s ease, color .2s ease;
}
body.icare-v2 .icare-actus-plus a:hover,
body.icare-v2 .icare-actus-plus a:focus {
  background: #afca0b;
  color: #fff;
}
@media (max-width: 767px) {
  body.icare-v2 .icare-actus { padding: 34px 18px 40px; }
  body.icare-v2 .icare-actus-liste { gap: 18px; }
  body.icare-v2 .icare-actus-titre { font-size: 1.25rem; }
}
@media (prefers-reduced-motion: reduce) {
  body.icare-v2 .icare-actus-carte { transition: none; }
  body.icare-v2 .icare-actus-carte:hover { transform: none; }
}

/* --- La signature du pied de page, sur une seule ligne ---------------------
   « ensemble pour mieux construire » se coupait en deux alors que la place ne
   manquait pas : 264 px suffisent dans sa police, la colonne en offre 493.
   La coupure venait du CONTENU — deux paragraphes écrits l'un sous l'autre
   dans WordPress, que nul réglage de largeur ne pouvait réunir.

   On les assoit côte à côte plutôt que de les forcer : `flex-wrap` leur rend
   la liberté de se replier si un jour la place vient vraiment à manquer.
   Signalé par Miran le 29/09/2026. */
body.icare-v2 .elementor-location-footer
  .elementor-widget-text-editor:first-of-type > .elementor-widget-container {
  display: flex;
  flex-wrap: wrap;
  align-items: baseline;
  justify-content: center;
  gap: 0 .3em;
}
body.icare-v2 .elementor-location-footer
  .elementor-widget-text-editor:first-of-type > .elementor-widget-container > p {
  margin: 0;
}

/* Entre 768 et 1000 px, la colonne du milieu descend à 405 px et la signature
   en réclame 403 plus ses marges : elle se replierait de nouveau. Plutôt que
   de redécouper un pied de page qui tient par ailleurs — logo à gauche,
   flèche à droite —, elle s'y compose un cran plus petit, comme elle le fait
   déjà sur téléphone. Au-dessus de 1000 px, la place est là : 32 px. */
@media (min-width: 768px) and (max-width: 999px) {
  body.icare-v2 .elementor-location-footer
    .elementor-widget-text-editor:first-of-type > .elementor-widget-container > p {
    font-size: 24px;
  }
}
