/**
Theme Name: Astra
Theme URI: https://wpastra.com/
Author: Brainstorm Force
Author URI: https://wpastra.com/about/?utm_source=theme_preview&utm_medium=author_link&utm_campaign=astra_theme
Description: Astra is fast, fully customizable & beautiful WordPress theme suitable for blog, personal portfolio, business website and WooCommerce storefront. It is very lightweight (less than 50KB on frontend) and offers unparalleled speed. Built with SEO in mind, Astra comes with Schema.org code integrated and is Native AMP ready so search engines will love your site. It offers special features and templates so it works perfectly with all page builders like Elementor, Beaver Builder, Visual Composer, SiteOrigin, Divi, etc. Some of the other features: # WooCommerce Ready # Responsive # RTL & Translation Ready # Extendible with premium addons # Regularly updated # Designed, Developed, Maintained & Supported by Brainstorm Force. Looking for a perfect base theme? Look no further. Astra is fast, fully customizable and WooCommerce ready theme that you can use for building any kind of website!
Version: 3.9.1
Requires at least: 5.3
Tested up to: 6.0.1
Requires PHP: 5.3
License: GNU General Public License v2 or later
License URI: https://www.gnu.org/licenses/gpl-2.0.html
Text Domain: astra
Domain Path: /languages
Tags: custom-menu, custom-logo, entertainment, one-column, two-columns, left-sidebar, e-commerce, right-sidebar, custom-colors, editor-style, featured-images, full-width-template, microformats, post-formats, rtl-language-support, theme-options, threaded-comments, translation-ready, blog
AMP: true

Astra WordPress Theme, Copyright 2020 WPAstra.
Astra is distributed under the terms of the GNU GPL.

Astra is based on Underscores https://underscores.me/, (C) 2012-2020 Automattic, Inc.
Underscores is distributed under the terms of the GNU GPL v2 or later.

Normalizing styles have been helped along thanks to the fine work of.
Nicolas Gallagher and Jonathan Neal https://necolas.github.com/normalize.css/

Astra icon font is based on IcoMoon-Free vector icon by Keyamoon.
IcoMoon-Free vector icon distributed under terms of CC BY 4.0 or GPL. (https://creativecommons.org/licenses/by/4.0/ or https://www.gnu.org/licenses/gpl.html)
Source: http://keyamoon.com/

Flexibility is a JavaScript polyfill for Flexbox By Jonathan Neal, 10up. (https://github.com/jonathantneal/flexibility)
Licensed under MIT ( https://github.com/jonathantneal/flexibility/blob/master/LICENSE.md )

Screenshot image is a collage of actual sites created using the Astra WordPress Theme.

Icons used in the Screenshot image are all licensed under Creative Commons ( CC BY 4.0 ) License ( https://fontawesome.com/license/free )
https://fontawesome.com/v5.15/icons/store?style=solid
https://fontawesome.com/v5.15/icons/shopping-cart?style=solid
https://fontawesome.com/v5.15/icons/pen-square?style=solid
https://fontawesome.com/v5.15/icons/user-tie?style=solid
https://fontawesome.com/v5.15/icons/user-tie?style=solid

Illustrations used in the Screenshot images are all licensed under Creative Commons ( CC0 ) License ( https://gumroad.com/l/humaaans )
https://websitedemos.net/web-design-agency-08/wp-content/uploads/sites/796/2021/05/standing-24.png
https://websitedemos.net/web-design-agency-08/wp-content/uploads/sites/796/2021/05/sitting-2.png

Hand-drawn illustrations used are created by Brainstorm Force and released under Creative Commons ( CC0 ) License.
https://websitedemos.net/web-design-agency-08/wp-content/uploads/sites/796/2021/05/girl-with-image-container.png
https://websitedemos.net/web-design-agency-08/wp-content/uploads/sites/796/2021/05/boy-with-code-container.png
https://websitedemos.net/web-design-agency-08/wp-content/uploads/sites/796/2021/05/web-browser.png

The same site as screenshot can be imported from here https://websitedemos.net/web-design-agency-08/.

For more information, refer to this document on how to create a page like in the screenshot - https://wpastra.com/docs/replicating-the-screenshot/.

Astra default breadcrumb is based on Breadcrumb Trail by Justin Tadlock. (https://github.com/justintadlock/breadcrumb-trail)
Breadcrumb Trail is distributed under the terms of the GNU GPL v2 or later.

Astra local fonts feature is based on Webfonts Loader by WordPress Themes Team (WPTT). (https://github.com/WPTT/webfont-loader)
Licensed under MIT ( https://github.com/WPTT/webfont-loader/blob/master/LICENSE )

/* Note: The CSS files are loaded from assets/css/ folder. *//*
 Theme Name:   Astra Child
 Theme URI:    https://jvecameroun.org/
 Description:  Thème enfant d'Astra pour jvecameroun.org - protège les personnalisations lors des mises à jour du thème parent.
 Author:       JVE Cameroun
 Template:     astra
 Version:      3.2.0
 Text Domain:  astra-child
*/

/*
 Ce fichier ne contient volontairement QUE l'en-tête ci-dessus (requis par
 WordPress pour identifier le thème). Le CSS réel vit dans
 assets/css/custom-{version}.css, chargé par functions.php.

 Pourquoi : l'hébergeur met en cache les fichiers statiques (CSS/JS/images)
 par CHEMIN, en ignorant totalement les paramètres ?ver= (confirmé le
 2026-07-16 — X-Cache-Status: HIT même avec un paramètre aléatoire jamais
 vu). Le seul moyen fiable de forcer une actualisation est de changer le
 NOM DE FICHIER à chaque déploiement.
*//* =========================================================
   Polices auto-hébergées — Sora (titres) + Inter (corps)
   ========================================================= */
@font-face {
  font-family: 'Sora';
  font-weight: 600;
  font-style: normal;
  font-display: swap;
  src: url(//jvecameroun.org/wp-content/themes/astra-child/assets/fonts/sora.woff2) format('woff2');
}
@font-face {
  font-family: 'Sora';
  font-weight: 700;
  font-style: normal;
  font-display: swap;
  src: url(//jvecameroun.org/wp-content/themes/astra-child/assets/fonts/sora.woff2) format('woff2');
}
@font-face {
  font-family: 'Inter';
  font-weight: 400 500;
  font-style: normal;
  font-display: swap;
  src: url(//jvecameroun.org/wp-content/themes/astra-child/assets/fonts/inter.woff2) format('woff2');
}

/* =========================================================
   Système de couleurs — Design System "Terre & Forêt"
   Remplace la palette Astra/Elementor existante (synchronisées :
   --ast-global-color-N et --e-global-color-astglobalcolorN)
   ========================================================= */
:root {
  /* Force le rendu clair : évite que Chrome Android (mode sombre système)
     ne réinterprète automatiquement les couleurs de la page. */
  color-scheme: light;

  /* Palette officielle */
  --color-forest: #1F4B3F;
  --color-forest-dark: #16362D;
  --color-sand: #E8DCC4;
  --color-coral: #E8632C;
  --color-coral-hover: #C74E1D;
  --color-text: #2A2A28;
  --color-bg: #FAFAF7;
  --color-text-on-dark: #FAFAF7;

  --font-heading: 'Sora', 'Segoe UI', sans-serif;
  --font-body: 'Inter', 'Segoe UI', sans-serif;

  /* 0: Primary (boutons/liens/titres) */
  --ast-global-color-0: var(--color-forest);
  --e-global-color-astglobalcolor0: var(--color-forest);
  /* 1: Secondary (hover/contraste) */
  --ast-global-color-1: var(--color-forest-dark);
  --e-global-color-astglobalcolor1: var(--color-forest-dark);
  /* 2: Text */
  --ast-global-color-2: var(--color-text);
  --e-global-color-astglobalcolor2: var(--color-text);
  /* 3: Link */
  --ast-global-color-3: var(--color-forest);
  --e-global-color-astglobalcolor3: var(--color-forest);
  /* 4: Background clair */
  --ast-global-color-4: var(--color-bg);
  --e-global-color-astglobalcolor4: var(--color-bg);
  /* 5: Fond secondaire (contenu article, sidebar, commentaires...).
     Astra core utilise CE slot comme couleur de fond de
     .ast-article-single, des zones de commentaires, du conteneur
     WooCommerce, etc. — jamais comme "accent". Le fixer sur la forêt
     peignait le corps des articles en vert foncé (texte illisible),
     bug découvert sur mobile après publication d'articles avec image
     à la une. Slot non utilisé ailleurs dans ce fichier : sans risque. */
  --ast-global-color-5: var(--color-bg);
  --e-global-color-astglobalcolor5: var(--color-bg);
  /* 6: Fond alterné (sable) */
  --ast-global-color-6: var(--color-sand);
  --e-global-color-astglobalcolor6: var(--color-sand);
  /* 7: Texte foncé secondaire */
  --ast-global-color-7: var(--color-text);
  --e-global-color-astglobalcolor7: var(--color-text);
  /* 8: Survol translucide */
  --ast-global-color-8: rgba(31, 75, 63, 0.12);
  --e-global-color-astglobalcolor8: rgba(31, 75, 63, 0.12);
}

/* =========================================================
   Typographie
   ========================================================= */
body,
button,
input,
select,
textarea,
.ast-button,
.ast-custom-button {
  font-family: var(--font-body);
  font-weight: 400;
  color: var(--color-text);
}

h1, h2, h3, h4, h5, h6,
.entry-title,
.site-title,
.elementor-heading-title {
  font-family: var(--font-heading);
  font-weight: 600;
  color: var(--color-forest);
}

h1, .elementor-widget-heading h1.elementor-heading-title {
  font-weight: 700;
  font-size: clamp(30px, 4.5vw, 48px);
  line-height: 1.2;
}
h2, .elementor-widget-heading h2.elementor-heading-title {
  font-size: clamp(24px, 3vw, 32px);
  line-height: 1.2;
}
h3, .elementor-widget-heading h3.elementor-heading-title {
  font-size: clamp(18px, 2.2vw, 22px);
  line-height: 1.2;
}
body, p, .elementor-widget-text-editor {
  font-size: 16px;
  line-height: 1.6;
}
@media (min-width: 768px) {
  body, p, .elementor-widget-text-editor {
    font-size: 17px;
  }
}

/* Titres sur fond forêt (header/footer) */
.site-header, .site-header h1, .site-header h2, .site-header h3,
footer.site-footer, footer.site-footer h1, footer.site-footer h2, footer.site-footer h3, footer.site-footer h4 {
  color: var(--color-text-on-dark);
}

/* =========================================================
   Boutons — 2 styles maximum sur tout le site
   ========================================================= */
.btn-primary,
.ast-header-button-1 .ast-custom-button,
a[href*="don"].ast-button,
a[href*="don"].elementor-button,
.donate-button {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background-color: var(--color-coral) !important;
  color: var(--color-text-on-dark) !important;
  font-family: var(--font-body);
  font-weight: 500;
  font-size: 16px;
  padding: 14px 28px;
  border-radius: 6px;
  border: none !important;
  transition: background-color 0.2s ease;
}
.btn-primary:hover,
.ast-header-button-1 .ast-custom-button:hover,
a[href*="don"].ast-button:hover,
a[href*="don"].elementor-button:hover,
.donate-button:hover {
  background-color: var(--color-coral-hover) !important;
  color: var(--color-text-on-dark) !important;
}

.btn-secondary,
.elementor-button.elementor-button-outline {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  background-color: transparent;
  color: var(--color-forest);
  border: 2px solid var(--color-forest);
  font-family: var(--font-body);
  font-weight: 500;
  font-size: 16px;
  padding: 12px 26px;
  border-radius: 6px;
  transition: background-color 0.2s ease, color 0.2s ease;
}
.btn-secondary:hover,
.elementor-button.elementor-button-outline:hover {
  background-color: var(--color-forest);
  color: var(--color-text-on-dark);
}

/* =========================================================
   Écran d'ouverture — badge animé (globe qui tourne) + mot-symbole
   ========================================================= */
#jve-preloader {
  position: fixed;
  inset: 0;
  z-index: 999999;
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--color-bg);
  transition: opacity 0.6s ease, visibility 0.6s ease;
}
#jve-preloader.jve-preloader-hidden {
  opacity: 0;
  visibility: hidden;
  pointer-events: none;
}
#jve-preloader .jve-preloader-inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 18px;
}
.jve-preloader-badge {
  display: block;
  width: 108px;
  height: 108px;
  border-radius: 50%;
  overflow: hidden;
  box-shadow: 0 4px 20px -4px rgba(31, 75, 63, 0.35);
  opacity: 0;
  animation: jve-badge-in 0.6s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}
.jve-preloader-badge img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 50% 42%;
  animation: jve-badge-spin 2.4s cubic-bezier(0.45, 0, 0.4, 1) 0.1s infinite;
}
@keyframes jve-badge-in {
  to { opacity: 1; }
}
@keyframes jve-badge-spin {
  to { transform: rotate(360deg); }
}
.jve-preloader-word {
  margin: 0;
  font-family: var(--font-heading);
  font-weight: 700;
  font-size: 20px;
  letter-spacing: 0.02em;
  display: flex;
  gap: 8px;
  align-items: baseline;
  opacity: 0;
  transform: translateY(6px);
  animation: jve-word-in 0.5s ease 0.5s forwards;
}
.jve-w-j, .jve-w-v, .jve-w-e { color: var(--color-forest); }
.jve-w-cameroun { color: var(--color-text); }
@keyframes jve-word-in {
  to { opacity: 1; transform: translateY(0); }
}
.jve-preloader-bar {
  display: block;
  width: 130px;
  height: 3px;
  background: var(--color-sand);
  border-radius: 2px;
  overflow: hidden;
  opacity: 0;
  animation: jve-word-in 0.4s ease 0.7s forwards;
}
.jve-preloader-bar::after {
  content: "";
  display: block;
  height: 100%;
  width: 100%;
  background: var(--color-forest);
  transform: translateX(-100%);
  animation: jve-bar-fill 1.3s cubic-bezier(0.65, 0, 0.35, 1) 0.7s forwards;
}
@keyframes jve-bar-fill {
  to { transform: translateX(0); }
}
body.jve-preloading {
  overflow: hidden;
}
@media (prefers-reduced-motion: reduce) {
  .jve-preloader-badge,
  .jve-preloader-badge img,
  .jve-preloader-word,
  .jve-preloader-bar,
  .jve-preloader-bar::after {
    animation: none !important;
    opacity: 1 !important;
    transform: none !important;
  }
}

/* =========================================================
   Responsive — filet de sécurité général
   ========================================================= */
html {
  overflow-x: hidden;
}
img, iframe, video, embed, object {
  max-width: 100% !important;
}
@media (max-width: 767px) {
  .elementor-element-291e329 img,
  .elementor-element-0b05cf3 img {
    width: 100% !important;
    height: auto !important;
  }
}

/* =========================================================
   Accessibilité — indicateur de focus clavier (WCAG 2.4.7)
   ========================================================= */
a:focus-visible,
button:focus-visible,
.ast-button:focus-visible,
.elementor-button:focus-visible,
input:focus-visible,
textarea:focus-visible,
select:focus-visible,
.menu-toggle:focus-visible,
.astra-search-icon:focus-visible,
[tabindex]:focus-visible {
  outline: none !important;
  box-shadow: 0 0 0 2px #ffffff, 0 0 0 5px var(--color-forest) !important;
  border-radius: 2px;
}

/* =========================================================
   Domaines d'intervention (accueil) — 5 cartes cliquables
   ========================================================= */
.elementor-element-8j20205 .elementor-column {
  border-radius: 10px;
  padding: 10px 8px 14px;
  transition: background-color 0.25s ease;
}
.elementor-element-8j20205 .elementor-column:hover {
  background-color: var(--color-forest);
}
.elementor-element-8j20205 .elementor-widget-image img {
  box-shadow: 0 1px 3px rgba(42, 42, 40, 0.12);
}
.elementor-element-8j20205 .elementor-heading-title {
  overflow: hidden;
  padding: 0 4px;
}
.elementor-element-8j20205 .elementor-heading-title a {
  display: block;
  color: inherit;
  text-decoration: none;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
  font-size: 14.5px;
  transition: color 0.2s ease;
}
.elementor-element-8j20205 .elementor-column:hover .elementor-heading-title a {
  color: var(--color-text-on-dark);
}
@media (max-width: 767px) {
  .elementor-element-8j20205 .elementor-heading-title a {
    white-space: normal;
    text-overflow: clip;
    font-size: 15px;
  }
}

/* =========================================================
   Chiffres clés (accueil) — bandeau vert forêt englobant le titre
   "JVE Cameroun en chiffres" ET les cartes corail, animation
   d'entrée conservée. Écrase le fond clair réglé dans Elementor
   sur la section englobante (id 6752046).
   ========================================================= */
.elementor-element-6752046 {
  background-color: var(--color-forest) !important;
}
.elementor-element-6752046 .elementor-heading-title,
.elementor-element-6752046 .elementor-heading-title a {
  color: var(--color-text-on-dark) !important;
}
.jve-stats-frame {
  max-width: 1040px;
  margin: 0 auto;
  position: relative;
}
.jve-stat-item {
  position: relative;
  background-color: var(--color-coral) !important;
  border-radius: 10px;
  padding: 20px 16px;
  margin: 8px;
  min-height: 140px;
  opacity: 0;
  transform: translateY(14px);
  box-shadow: 0 10px 24px -6px rgba(0, 0, 0, 0.5);
  transition: opacity 0.6s ease, transform 0.6s ease, box-shadow 0.25s ease;
}
.jve-stat-item.jve-in-view {
  opacity: 1;
  transform: translateY(0);
}
.jve-stat-item:hover {
  transform: translateY(-6px) !important;
  box-shadow: 0 18px 36px -8px rgba(0, 0, 0, 0.55);
}
.jve-stat-item .elementor-heading-title,
.jve-stat-item .elementor-heading-title a {
  color: var(--color-text-on-dark) !important;
  text-align: center;
}
.jve-stat-item .elementor-widget-heading:first-of-type .elementor-heading-title {
  font-size: 26px !important;
  position: relative;
  display: inline-block;
}
.jve-stat-item .elementor-widget-heading:first-of-type .elementor-heading-title::after {
  content: "";
  display: block;
  height: 3px;
  width: 36px;
  margin: 8px auto 0;
  background: var(--color-text-on-dark);
  border-radius: 2px;
  opacity: 0.6;
}
.jve-stat-item .elementor-widget-heading:last-of-type .elementor-heading-title {
  font-size: 12.5px !important;
}

/* Cartes à détail dépliable (régions, projets) — accordéon en place
   (remplace l'ancienne infobulle au survol, jamais réellement câblée :
   la classe .jve-stat-tooltip n'était appliquée à aucun élément, ce qui
   laissait le texte de détail toujours visible en flux normal et gonflait
   la hauteur des cartes). Hauteur repliée uniforme sur les 4 cartes via
   min-height ci-dessus ; seule la carte cliquée s'étire à l'ouverture. */
.jve-stats-frame > .elementor-container {
  align-items: flex-start !important;
}
.jve-stat-item--expandable {
  cursor: pointer;
}
.jve-stat-item--expandable .elementor-widget-heading:last-of-type .elementor-heading-title::after {
  content: "Voir plus ▾";
  display: block;
  margin-top: 8px;
  font-size: 10.5px;
  font-weight: 600;
  letter-spacing: 0.02em;
  text-decoration: underline;
  color: var(--color-text-on-dark);
  opacity: 0.9;
}
.jve-stat-item--expandable.jve-tooltip-open .elementor-widget-heading:last-of-type .elementor-heading-title::after {
  content: "Voir moins ▴";
}
.jve-stat-item--expandable .elementor-widget-text-editor {
  max-height: 0;
  opacity: 0;
  overflow: hidden;
  margin-top: 0 !important;
  transition: max-height 0.35s ease, opacity 0.3s ease, margin-top 0.35s ease;
}
.jve-stat-item--expandable .elementor-widget-text-editor p {
  margin: 0 !important;
  font-size: 12px;
  line-height: 1.5;
  color: var(--color-text-on-dark);
  text-align: center;
}
.jve-stat-item--expandable.jve-tooltip-open .elementor-widget-text-editor {
  max-height: 260px;
  opacity: 1;
  margin-top: 10px !important;
}

/* =========================================================
   CTA — Faire un don / Devenir bénévole / Devenir partenaire
   Actions prioritaires : traitement bouton primaire (corail)
   ========================================================= */
.jve-cta-card {
  margin: 8px;
  box-shadow: 0 8px 18px -8px rgba(15, 40, 32, 0.35);
  transition: transform 0.25s ease, box-shadow 0.25s ease;
  background-color: var(--color-bg) !important;
}
.jve-cta-card:hover {
  transform: translateY(-6px);
  box-shadow: 0 16px 32px -10px rgba(15, 40, 32, 0.45);
}
.jve-cta-card .elementor-heading-title,
.jve-cta-card .elementor-heading-title a {
  text-decoration: none;
  color: var(--color-forest) !important;
}
.jve-cta-card .elementor-button {
  background-color: var(--color-coral) !important;
  border-color: var(--color-coral) !important;
}
.jve-cta-card .elementor-button:hover {
  background-color: var(--color-coral-hover) !important;
  border-color: var(--color-coral-hover) !important;
}

/* =========================================================
   Garde-fou boutons — checklist section 12 : max 2 styles de
   bouton sur tout le site, corail réservé aux actions prioritaires.
   Tout bouton Elementor "nu" (ni .elementor-button-outline, ni un
   lien de don) reçoit par défaut le traitement secondaire plutôt
   que le style brut non maîtrisé d'Elementor. Les règles des
   cartes CTA ci-dessous ont une spécificité égale ou supérieure
   et arrivent après dans le fichier : elles restent prioritaires.
   ========================================================= */
.elementor-button:not(.elementor-button-outline):not([href*="don"]):not(.donate-button) {
  background-color: transparent !important;
  border: 2px solid var(--color-forest) !important;
  color: var(--color-forest) !important;
}
.elementor-button:not(.elementor-button-outline):not([href*="don"]):not(.donate-button):hover {
  background-color: var(--color-forest) !important;
  color: var(--color-text-on-dark) !important;
}

/* =========================================================
   CTA final — design uniforme sur les 3 cartes (mise à jour
   demandée : Bénévole/Partenaire reprennent exactement le style
   corail de "Faites un don", plus de hiérarchisation visuelle).
   Cible directement les IDs Elementor existants de la section
   "Faites un don / Devenez bénévole / Devenez partenaire"
   (accueil, id 6) : pas de restructuration Elementor nécessaire.
   ========================================================= */
.elementor-element-f0c9f64.jve-cta-card,
.elementor-element-1c50fe5.jve-cta-card,
.elementor-element-a517560.jve-cta-card {
  background-color: var(--color-coral) !important;
  transform: scale(1.04);
  z-index: 1;
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}
/* Le fond réel visible est peint par la div interne .elementor-widget-wrap
   (Elementor y applique sa propre couleur claire) : sans cette règle, le
   corail posé sur la colonne extérieure reste caché derrière. */
.elementor-element-f0c9f64.jve-cta-card > .elementor-widget-wrap,
.elementor-element-1c50fe5.jve-cta-card > .elementor-widget-wrap,
.elementor-element-a517560.jve-cta-card > .elementor-widget-wrap {
  background-color: var(--color-coral) !important;
}
.elementor-element-f0c9f64.jve-cta-card:hover,
.elementor-element-1c50fe5.jve-cta-card:hover,
.elementor-element-a517560.jve-cta-card:hover {
  transform: translateY(-6px) scale(1.04) !important;
  box-shadow: 0 14px 30px -12px rgba(15, 40, 32, 0.4);
}
.elementor-element-f0c9f64.jve-cta-card .elementor-heading-title,
.elementor-element-f0c9f64.jve-cta-card .elementor-heading-title a,
.elementor-element-f0c9f64.jve-cta-card .elementor-widget-text-editor p,
.elementor-element-1c50fe5.jve-cta-card .elementor-heading-title,
.elementor-element-1c50fe5.jve-cta-card .elementor-heading-title a,
.elementor-element-1c50fe5.jve-cta-card .elementor-widget-text-editor p,
.elementor-element-a517560.jve-cta-card .elementor-heading-title,
.elementor-element-a517560.jve-cta-card .elementor-heading-title a,
.elementor-element-a517560.jve-cta-card .elementor-widget-text-editor p {
  color: var(--color-text-on-dark) !important;
}
.elementor-element-f0c9f64.jve-cta-card .elementor-button:not(.elementor-button-outline),
.elementor-element-1c50fe5.jve-cta-card .elementor-button:not(.elementor-button-outline),
.elementor-element-a517560.jve-cta-card .elementor-button:not(.elementor-button-outline) {
  background-color: var(--color-text-on-dark) !important;
  border-color: var(--color-text-on-dark) !important;
  color: var(--color-coral) !important;
  font-weight: 600;
}
.elementor-element-f0c9f64.jve-cta-card .elementor-button:not(.elementor-button-outline):hover,
.elementor-element-1c50fe5.jve-cta-card .elementor-button:not(.elementor-button-outline):hover,
.elementor-element-a517560.jve-cta-card .elementor-button:not(.elementor-button-outline):hover {
  background-color: var(--color-forest-dark) !important;
  border-color: var(--color-forest-dark) !important;
  color: var(--color-text-on-dark) !important;
}
@media (max-width: 767px) {
  .elementor-element-f0c9f64.jve-cta-card,
  .elementor-element-1c50fe5.jve-cta-card,
  .elementor-element-a517560.jve-cta-card {
    transform: none;
  }
  .jve-cta-card .elementor-button-link {
    min-height: 44px;
  }
}

/* =========================================================
   CTA final hiérarchisé (addendum 3, 11.2) — variante section
   unique à 3 liens, "Faire un don" dominant, les deux autres en
   contour, y compris empilés en mobile. À appliquer si la section
   CTA de l'accueil est reconstruite en un seul bloc .cta-final
   (h2 + p + .cta-buttons > 3 liens .btn-primary/.btn-secondary)
   plutôt qu'en 3 cartes .jve-cta-card séparées.
   ========================================================= */
.cta-final {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 24px;
  text-align: center;
  background-color: var(--color-forest);
  color: var(--color-text-on-dark);
}
.cta-final h2,
.cta-final .elementor-heading-title {
  color: var(--color-text-on-dark);
}
.cta-final .cta-buttons {
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
  justify-content: center;
}
.cta-final .btn-primary {
  order: 1;
  min-width: 220px;
}
.cta-final .btn-secondary {
  order: 2;
  border-color: var(--color-text-on-dark);
  color: var(--color-text-on-dark) !important;
  min-width: 200px;
}
.cta-final .btn-secondary:hover {
  background-color: var(--color-text-on-dark);
  color: var(--color-forest) !important;
}
@media (max-width: 640px) {
  .cta-final .cta-buttons {
    flex-direction: column;
    width: 100%;
  }
  .cta-final .btn-primary,
  .cta-final .btn-secondary {
    width: 100%;
    min-height: 44px; /* zone tactile minimale WCAG */
  }
}

/* =========================================================
   Fil d'Ariane
   ========================================================= */
.jve-breadcrumb-wrap {
  max-width: var(--ast-container-default-lg-padding, 1200px);
  margin: 0 auto;
  padding: 14px 20px 0;
  font-size: 13.5px;
}
.jve-breadcrumb-wrap .ast-breadcrumbs {
  color: #6B6B64;
}
.jve-breadcrumb-wrap .ast-breadcrumbs a {
  color: var(--color-forest);
  text-decoration: none;
}
.jve-breadcrumb-wrap .ast-breadcrumbs a:hover {
  text-decoration: underline;
}
.jve-breadcrumb-wrap .trail-items li::after {
  color: #6B6B64;
}

/* =========================================================
   Page "Domaines d'intervention" — 5 cartes
   ========================================================= */
.jve-domaine57-card {
  border-radius: 10px;
  padding: 8px 10px 20px;
  transition: box-shadow 0.25s ease, transform 0.25s ease;
}
.jve-domaine57-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 14px 28px -12px rgba(42, 42, 40, 0.2);
}
.jve-domaine57-card .elementor-heading-title a {
  text-decoration: none;
  color: inherit;
}
.jve-domaine57-card .elementor-heading-title a:hover {
  color: var(--color-forest);
}

/* =========================================================
   Carrousel partenaires — défilement continu
   ========================================================= */
.jve-partners-marquee {
  overflow: hidden;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
  mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
}
.jve-partners-track {
  display: flex;
  align-items: center;
  gap: 20px;
  width: max-content;
  animation: jve-partners-scroll 22s linear infinite;
}
/* Pause au survol ET au focus clavier (WCAG 2.3.3) */
.jve-partners-marquee:hover .jve-partners-track,
.jve-partners-marquee:focus-within .jve-partners-track {
  animation-play-state: paused;
}
.jve-partner-chip {
  flex: 0 0 auto;
  width: 220px;
  height: 110px;
  display: flex;
  align-items: center;
  justify-content: center;
  border-radius: 8px;
  background: #FFFFFF;
}
/* Vrais logos : niveaux de gris par défaut, couleur au survol/focus
   (addendum 3, 11.1). Agrandis pour rester lisibles dans le carrousel. */
.jve-partners-track img {
  height: 72px;
  max-width: 180px;
  width: auto;
  object-fit: contain;
  filter: drop-shadow(0 4px 10px rgba(42, 42, 40, 0.22));
  transition: filter 0.25s ease;
}
.jve-partners-track img:hover,
.jve-partners-track img:focus-visible {
  filter: drop-shadow(0 6px 14px rgba(42, 42, 40, 0.3));
}
@keyframes jve-partners-scroll {
  to { transform: translateX(-50%); }
}
/* OBLIGATOIRE : respect de l'accessibilité mouvement (WCAG 2.3.3) */
@media (prefers-reduced-motion: reduce) {
  .jve-partners-track {
    animation: none;
    flex-wrap: wrap;
    justify-content: center;
    overflow-x: auto;
  }
}

/* =========================================================
   Réseaux sociaux — icônes en pied de page
   ========================================================= */
.ast-header-social-wrap,
.header-social-wrap {
  display: none !important;
}
.jve-social-row {
  display: flex;
  gap: 16px;
  justify-content: flex-start;
  margin-top: 14px;
}
.jve-social-row a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  background: rgba(250, 250, 247, 0.14);
  color: var(--color-text-on-dark);
  transition: background-color 0.2s ease, color 0.2s ease;
}
.jve-social-row a:hover {
  background: var(--color-coral);
  color: #ffffff;
}

/* =========================================================
   Actualité (accueil) — grille des derniers articles
   ========================================================= */
.jve-news-grid {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 24px;
  margin-top: 28px;
}
.jve-news-card {
  display: block;
  text-decoration: none;
  color: inherit;
  border: 1px solid var(--color-sand);
  border-radius: 10px;
  overflow: hidden;
  background: #ffffff;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.jve-news-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 12px 26px -10px rgba(42, 42, 40, 0.25);
}
.jve-news-card-media {
  aspect-ratio: 16 / 10;
  background: var(--color-sand);
  overflow: hidden;
}
.jve-news-card-media img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.jve-news-card-media-fallback {
  width: 100%;
  height: 100%;
  background: linear-gradient(135deg, var(--color-sand), var(--color-bg));
}
.jve-news-card-body {
  padding: 18px 20px 22px;
}
.jve-news-card-date {
  font-size: 12.5px;
  font-weight: 500;
  letter-spacing: 0.04em;
  text-transform: uppercase;
  color: #6B6B64;
}
.jve-news-card-title {
  font-family: var(--font-heading);
  font-weight: 600;
  font-size: 17px;
  margin: 8px 0 8px;
  color: var(--color-forest);
}
.jve-news-card-excerpt {
  font-size: 14.5px;
  color: var(--color-text);
  margin: 0 0 12px;
  line-height: 1.5;
}
.jve-news-card-more {
  font-size: 13.5px;
  font-weight: 500;
  color: var(--color-coral);
}
.jve-news-empty {
  text-align: center;
  color: #6B6B64;
  padding: 24px;
  border: 1.5px dashed var(--color-sand);
  border-radius: 8px;
  margin-top: 24px;
}
.jve-news-empty a {
  color: var(--color-forest);
  font-weight: 500;
}

/* =========================================================
   Rythme vertical des sections + fonds alternés
   96px desktop / 56px mobile entre sections de l'accueil
   ========================================================= */
.elementor-6 > .elementor-section {
  padding-top: 56px;
  padding-bottom: 56px;
}
@media (min-width: 768px) {
  .elementor-6 > .elementor-section {
    padding-top: 96px;
    padding-bottom: 96px;
  }
}
.jve-bg-sand {
  background-color: var(--color-sand) !important;
}
.jve-bg-bg {
  background-color: var(--color-bg) !important;
}
/* Alternance automatique : ne s'applique qu'aux sections sans fond
   déjà défini explicitement (les styles en ligne d'Elementor priment). */
.elementor-6 > .elementor-section:nth-of-type(odd) {
  background-color: var(--color-bg);
}
.elementor-6 > .elementor-section:nth-of-type(even) {
  background-color: var(--color-sand);
}

/* =========================================================
   Uniformité des cartes (domaines, actualités, événements)
   ========================================================= */
.elementor-element-8j20205 .elementor-column,
.jve-domaine57-card,
.jve-news-card,
.jve-cta-card {
  display: flex;
  flex-direction: column;
}

/* =========================================================
   Footer — traduction visuelle (labels francisés côté DOM
   via functions.php ; ici uniquement le style)
   ========================================================= */
.menu-local-branches-container .menu-link,
.menu-quick-links-container .menu-link {
  cursor: default;
}

/* =========================================================
   Traitement photographique (charte, section 6.2)
   À utiliser pour toute nouvelle photo ajoutée sans passer par
   le pré-traitement batch Node/sharp (script treat-image.js).
   Nécessite un wrapper : <div class="photo-action"><img .../></div>
   ========================================================= */
.photo-action,
.photo-portrait,
.photo-hero {
  position: relative;
  overflow: hidden;
  display: block;
}
.photo-action img,
.photo-portrait img,
.photo-hero img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.photo-action {
  aspect-ratio: 4 / 5;
}
.photo-action img {
  filter: saturate(0.88) contrast(1.06);
}
.photo-action::after {
  content: "";
  position: absolute;
  inset: 0;
  background-color: var(--color-forest);
  opacity: 0.09;
  mix-blend-mode: multiply;
  pointer-events: none;
}

.photo-portrait {
  aspect-ratio: 4 / 5;
}
.photo-portrait img {
  filter: saturate(0.95) contrast(1.03);
}
.photo-portrait--subtle::after {
  content: "";
  position: absolute;
  inset: 0;
  background-color: var(--color-forest);
  opacity: 0.04;
  mix-blend-mode: multiply;
  pointer-events: none;
}

.photo-hero {
  aspect-ratio: 16 / 9;
}
.photo-hero img {
  filter: saturate(0.9) contrast(1.05);
}
.photo-hero::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(to bottom, rgba(31, 75, 63, 0) 0%, rgba(31, 75, 63, 0.6) 100%);
  pointer-events: none;
}

/* =========================================================
   Titre "Domaines d'intervention" (accueil) — bande corail
   derrière le texte pour garantir la lisibilité quel que soit
   le fond de la section.
   ========================================================= */
.elementor-element-cac4e82 .elementor-heading-title {
  display: inline-block;
  background-color: var(--color-coral);
  color: var(--color-text-on-dark) !important;
  padding: 10px 28px;
  border-radius: 6px;
}

/* =========================================================
   Objectifs de développement durable (accueil) — défilement
   continu, même principe que le carrousel partenaires.
   ========================================================= */
.jve-odd-marquee {
  overflow: hidden;
  -webkit-mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
  mask-image: linear-gradient(90deg, transparent, #000 8%, #000 92%, transparent);
}
.jve-odd-track {
  display: flex;
  align-items: center;
  gap: 20px;
  width: max-content;
  animation: jve-odd-scroll 34s linear infinite;
}
.jve-odd-marquee:hover .jve-odd-track,
.jve-odd-marquee:focus-within .jve-odd-track {
  animation-play-state: paused;
}
.jve-odd-track img {
  flex: 0 0 auto;
  height: 44px;
  width: 44px;
  border-radius: 5px;
  object-fit: cover;
}
@keyframes jve-odd-scroll {
  to { transform: translateX(-50%); }
}
@media (prefers-reduced-motion: reduce) {
  .jve-odd-track {
    animation: none;
    flex-wrap: wrap;
    justify-content: center;
    overflow-x: auto;
  }
}

/* =========================================================
   Présentation (accueil) — photos superposées : image de
   fond (équipe) + image de premier plan animée (action terrain).
   ========================================================= */
.jve-presentation-photos {
  position: relative;
  display: block;
  width: 100%;
  max-width: 480px;
  height: 600px;
  margin: 0 auto;
  overflow: hidden;
}
.jve-presentation-photo-back {
  position: absolute;
  top: 0;
  right: 0;
  display: block;
  width: 78%;
  max-width: 78%;
  aspect-ratio: 4 / 5;
  height: auto;
  object-fit: cover;
  border-radius: 12px;
  box-shadow: 0 14px 30px -12px rgba(31, 75, 63, 0.35);
}
.jve-presentation-photo-front {
  position: absolute;
  bottom: 0;
  left: 0;
  display: block;
  width: 60%;
  max-width: 60%;
  aspect-ratio: 4 / 5;
  height: auto;
  object-fit: cover;
  border-radius: 12px;
  border: 6px solid var(--color-bg);
  box-shadow: 0 16px 34px -10px rgba(42, 42, 40, 0.4);
  opacity: 0;
  transform: translateY(24px) scale(0.92);
  transition: opacity 0.7s ease, transform 0.7s cubic-bezier(0.22, 1, 0.36, 1);
}
.jve-presentation-photo-front.jve-in-view {
  opacity: 1;
  transform: translateY(0) scale(1);
}
@media (prefers-reduced-motion: reduce) {
  .jve-presentation-photo-front {
    opacity: 1;
    transform: none;
    transition: none;
  }
}
@media (max-width: 767px) {
  .jve-presentation-photos {
    max-width: 320px;
  }
}

/* =========================================================
   Switch de langue (Polylang) — bouton flottant, position fixe.
   Volontairement HORS du menu et de son flux flex : évite tout
   risque de perturber la mise en page du header (leçon apprise
   après une régression où le switcher cassait le menu principal).
   ========================================================= */
.jve-lang-switcher {
  position: fixed;
  top: 14px;
  right: 16px;
  z-index: 100000;
  pointer-events: none;
}
.jve-lang-switcher-list {
  display: flex;
  align-items: center;
  gap: 4px;
  list-style: none;
  margin: 0;
  padding: 3px;
  background-color: var(--color-forest);
  border-radius: 20px;
  box-shadow: 0 4px 14px -4px rgba(0, 0, 0, 0.3);
  pointer-events: auto;
}
.jve-lang-switcher-item {
  margin: 0 !important;
  list-style: none;
}
.jve-lang-switcher-link {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  min-width: 32px;
  padding: 5px 10px;
  font-size: 12px;
  font-weight: 700;
  font-family: var(--font-body);
  letter-spacing: 0.03em;
  border-radius: 16px;
  color: var(--color-text-on-dark);
  text-decoration: none;
  opacity: 0.75;
  transition: background-color 0.2s ease, opacity 0.2s ease;
}
.jve-lang-switcher-link:hover {
  opacity: 1;
  background-color: rgba(250, 250, 247, 0.15);
}
.jve-lang-switcher-current .jve-lang-switcher-link {
  background-color: var(--color-coral);
  opacity: 1;
}
@media (max-width: 600px) {
  .jve-lang-switcher {
    top: auto;
    bottom: 16px;
    right: 16px;
  }
}

/* =========================================================
   Image à la une des articles — hauteur plafonnée.
   Sans cette règle, une image à la une au format portrait
   (ex. affiche/flyer d'événement) s'affiche pleine largeur à
   sa hauteur naturelle : sur mobile elle peut occuper la quasi-
   totalité de l'écran avant le texte, ce qui donne l'impression
   d'une page bloquée sur le fond (souvent vert) de l'affiche.
   object-fit: cover recadre proprement quel que soit le format
   source (portrait, carré, paysage).
   ========================================================= */
.single-post .post-thumb-img-content {
  display: block;
  overflow: hidden;
  border-radius: 8px;
  height: 420px;
}
.single-post .post-thumb-img-content img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: top center;
}
@media (max-width: 767px) {
  .single-post .post-thumb-img-content {
    height: 260px;
  }
}