/*!
 * Moustache Modules — mm-core.css — v1.0.0
 * Aucun module n'impose de fond ni de largeur : héritage de la section Divi.
 * Tokens injectés par le plugin : --mm-accent, --mm-title-color, --mm-text-color,
 * --mm-radius, --mm-speed, --mm-font-display, --mm-font-body.
 */

:root{
  --mm-ease:cubic-bezier(.2,.8,.2,1);
  --mm-border:#e2e8f0;
}

/* ---------- Conteneur neutre ---------- */
.mm-module{width:100%;background:transparent;font-family:var(--mm-font-body,inherit);color:var(--mm-text-color,#64748b);box-sizing:border-box}
.mm-module *{box-sizing:border-box}
.mm-module h1,.mm-module h2,.mm-module h3,.mm-module h4{color:var(--mm-title-color,#1e293b);font-family:var(--mm-font-display,inherit);margin:0}
.mm-module a{text-decoration:none;color:inherit}
.mm-module img{max-width:100%}

/* Variante fond sombre : ajouter la classe is-dark sur le module ou la section */
.is-dark .mm-module h1,.is-dark .mm-module h2,.is-dark .mm-module h3,.is-dark .mm-module h4,
.mm-module.is-dark h1,.mm-module.is-dark h2,.mm-module.is-dark h3,.mm-module.is-dark h4{color:#fff}
.is-dark .mm-module,.mm-module.is-dark{color:rgba(255,255,255,.7)}

/* Badge verre commun */
.mm-badge-glass{padding:7px 12px;border-radius:999px;background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.28);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);font-size:.75rem;font-weight:700;color:#fff;display:inline-block}

/* Nav commune carrousels */
.mm-carnav{display:flex;justify-content:center;align-items:center;gap:16px;margin-top:28px}
.mm-carnav button{width:46px;height:46px;border-radius:50%;border:1.5px solid var(--mm-border);background:rgba(255,255,255,.75);cursor:pointer;display:grid;place-items:center;transition:all var(--mm-speed,.34s) var(--mm-ease);font-size:1.05rem;color:var(--mm-title-color,#1e293b)}
.is-dark .mm-carnav button{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.2);color:#fff}
.mm-carnav button:hover{border-color:var(--mm-accent);color:var(--mm-accent);transform:scale(1.08)}
.mm-dots{display:flex;gap:8px;flex-wrap:wrap;justify-content:center}
.mm-dot{width:32px;height:32px;min-width:32px;border-radius:50%;border:1.5px solid var(--mm-border);background:transparent;cursor:pointer;transition:all var(--mm-speed,.34s) var(--mm-ease);padding:0;font-family:var(--mm-font-body,inherit);font-size:12px;font-weight:600;color:var(--mm-text-color,#64748b);display:inline-flex;align-items:center;justify-content:center;line-height:1;font-variant-numeric:tabular-nums}
.is-dark .mm-dot{border-color:rgba(255,255,255,.24);color:rgba(255,255,255,.7)}
.mm-dot:hover{border-color:var(--mm-accent);color:var(--mm-accent)}
.mm-dot--on{background:var(--mm-accent);border-color:var(--mm-accent);color:#fff}
.mm-dot--on:hover{color:#fff}

/* ---------- Marquee ---------- */
.mm-marquee{overflow:hidden;-webkit-mask-image:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent);mask-image:linear-gradient(90deg,transparent,#000 10%,#000 90%,transparent)}
.mm-mq-track{display:flex;width:max-content;will-change:transform}
.mm-mq-item{display:flex;align-items:center;gap:14px;padding:14px 28px;opacity:.6;transition:opacity var(--mm-speed,.34s) var(--mm-ease)}
.mm-mq-item:hover{opacity:1}
.mm-mq-num{font-size:.78rem;color:var(--mm-accent);font-family:monospace}
.mm-mq-txt{font-family:var(--mm-font-display,inherit);font-weight:700;font-size:clamp(1rem,2.4vw,1.5rem);white-space:nowrap;color:var(--mm-title-color,#1e293b)}
.is-dark .mm-mq-txt{color:#fff}
.mm-mq-star{color:var(--mm-accent)}
.mm-mq-item--img{padding:14px 24px}
.mm-mq-item--img img{display:block;object-fit:contain;filter:grayscale(1);opacity:.65;transition:filter var(--mm-speed,.34s) var(--mm-ease),opacity var(--mm-speed,.34s) var(--mm-ease)}
/* v1.12 : dimension pilotée par --mm-mq-img (100px par defaut), sur la hauteur ou la largeur */
.mm-marquee--fit-height .mm-mq-item--img img{height:var(--mm-mq-img,100px);width:auto;max-width:none}
.mm-marquee--fit-width .mm-mq-item--img img{width:var(--mm-mq-img,100px);height:auto}
.mm-mq-item--img:hover img{filter:none;opacity:1}
.mm-marquee--color .mm-mq-item--img img{filter:none;opacity:1}
.is-dark .mm-mq-item--img img{filter:grayscale(1) brightness(2);opacity:.55}
.is-dark .mm-mq-item--img:hover img{filter:brightness(2);opacity:1}
.is-dark .mm-marquee--color .mm-mq-item--img img{filter:none;opacity:1}

/* ---------- Carrousel / Team (Embla) ---------- */
.mm-embla{overflow:hidden;padding:8px 0}
/* v1.12 : le gap Embla ne s'applique pas entre le dernier et le premier slide lors du
   rebouclage. On ajoute donc une marge de fin sur le dernier slide pour que l'espacement
   reste identique sur toute la boucle. */
.mm-embla__container{display:flex;gap:var(--mm-slide-gap,20px);touch-action:pan-y}
.mm-embla__container > .mm-embla__slide:last-child{margin-right:var(--mm-slide-gap,20px)}
.mm-embla__slide{flex:0 0 82%;min-width:0}
@media(min-width:640px){.mm-embla__slide{flex:0 0 46%}}
@media(min-width:1000px){.mm-embla__slide{flex:0 0 31%}}
/* Carte-slide : image en fond complet + scrim + texte blanc en overlay. Aucune ombre. */
.mm-slide-card{position:relative;display:block;border-radius:calc(var(--mm-radius,16px) * 1.6);overflow:hidden;height:380px;text-decoration:none;transition:transform var(--mm-speed,.34s) var(--mm-ease)}
.mm-slide-card:hover{transform:translateY(-6px)}
.mm-slide-card__bg{position:absolute;inset:0;background-size:cover;background-position:center;transition:transform .8s ease}
.mm-slide-card:hover .mm-slide-card__bg{transform:scale(1.06)}
.mm-slide-card__scrim{position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,0) 30%,rgba(0,0,0,.78) 100%)}
.mm-slide-card > .mm-badge-glass{position:absolute;top:14px;left:14px;z-index:2}
.mm-slide-card__body{position:absolute;left:0;right:0;bottom:0;padding:22px 24px 24px;color:#fff;z-index:2}
.mm-slide-card__body h3{font-size:1.15rem;font-weight:700;margin-bottom:8px;color:#fff;line-height:1.3}
.mm-slide-card__body h3:last-child{margin-bottom:0}
.mm-slide-card__body p{font-size:.9rem;margin:0;color:rgba(255,255,255,.88);line-height:1.5}

/* ---------- Features ---------- */
.mm-features{display:grid;grid-template-columns:1fr;gap:16px}
@media(min-width:700px){.mm-features{grid-template-columns:1fr 1fr}}
.mm-feature{display:flex;gap:16px;align-items:flex-start;padding:20px;background:rgba(255,255,255,.7);border:1px solid var(--mm-border);border-radius:var(--mm-radius,16px);transition:transform var(--mm-speed,.34s) var(--mm-ease),box-shadow var(--mm-speed,.34s) var(--mm-ease)}
.is-dark .mm-feature{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.14)}
.mm-feature:hover{transform:translateY(-3px);box-shadow:0 8px 25px rgba(0,0,0,.08)}
.mm-feature .fi-icon{flex:0 0 auto;width:44px;height:44px;border-radius:12px;display:grid;place-items:center;font-size:1.3rem;color:#fff;background:linear-gradient(135deg,var(--mm-accent),#8b5cf6)}
.mm-feature h4{font-size:1rem;margin-bottom:4px}
.mm-feature p{font-size:.88rem;margin:0}

/* ---------- Galerie ---------- */
.mm-gallery{columns:2;column-gap:16px}
@media(min-width:800px){.mm-gallery{columns:3}}
.mm-gallery figure{break-inside:avoid;margin:0 0 16px;border-radius:var(--mm-radius,16px);overflow:hidden;cursor:pointer;position:relative;box-shadow:0 1px 3px rgba(0,0,0,.06)}
.mm-gallery img{width:100%;display:block;transition:transform .56s ease}
.mm-gallery figure::after{content:'\2922';position:absolute;top:12px;right:12px;width:34px;height:34px;border-radius:50%;background:rgba(255,255,255,.2);backdrop-filter:blur(8px);color:#fff;display:grid;place-items:center;opacity:0;transition:opacity var(--mm-speed,.34s) var(--mm-ease)}
.mm-gallery figure:hover img{transform:scale(1.06)}
.mm-gallery figure:hover::after{opacity:1}
.mm-lightbox{position:fixed;inset:0;z-index:99998;background:rgba(15,23,42,.9);backdrop-filter:blur(8px);display:flex;align-items:center;justify-content:center;padding:24px;opacity:0;pointer-events:none;transition:opacity var(--mm-speed,.34s) var(--mm-ease)}
.mm-lightbox.on{opacity:1;pointer-events:auto}
.mm-lightbox img{max-width:92vw;max-height:88vh;border-radius:var(--mm-radius,16px);box-shadow:0 30px 60px rgba(0,0,0,.5)}
.mm-lightbox .close{position:absolute;top:20px;right:24px;width:48px;height:48px;border-radius:50%;border:none;background:rgba(255,255,255,.15);color:#fff;font-size:1.4rem;cursor:pointer;backdrop-filter:blur(8px)}

/* ---------- Tabs ---------- */
.mm-tabs{max-width:860px;margin:0 auto;text-align:center}
.mm-tabs-nav{display:inline-flex;padding:6px;border-radius:999px;background:rgba(255,255,255,.8);border:1px solid var(--mm-border);box-shadow:0 1px 3px rgba(0,0,0,.06);gap:4px;position:relative;margin-bottom:26px;flex-wrap:wrap;justify-content:center}
.is-dark .mm-tabs-nav{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.16)}
.mm-tab-btn{padding:10px 20px;border-radius:999px;border:none;background:transparent;font-family:var(--mm-font-body,inherit);font-weight:600;font-size:.9rem;color:var(--mm-text-color,#64748b);cursor:pointer;transition:color var(--mm-speed,.34s) var(--mm-ease);position:relative;z-index:1}
.is-dark .mm-tab-btn{color:rgba(255,255,255,.7)}
.mm-tab-btn.active{color:#fff}
.mm-tab-pill{position:absolute;top:6px;left:6px;height:calc(100% - 12px);border-radius:999px;background:var(--mm-accent);transition:transform var(--mm-speed,.34s) var(--mm-ease),width var(--mm-speed,.34s) var(--mm-ease);z-index:0}
.mm-tab-panel{display:none;padding:26px;background:rgba(255,255,255,.8);border:1px solid var(--mm-border);border-radius:calc(var(--mm-radius,16px) * 1.4);box-shadow:0 1px 3px rgba(0,0,0,.06);text-align:left}
.is-dark .mm-tab-panel{background:rgba(255,255,255,.06);border-color:rgba(255,255,255,.14)}
.mm-tab-panel.active{display:block;animation:mmFadeUp .4s var(--mm-ease)}
@keyframes mmFadeUp{from{opacity:0;transform:translateY(12px)}to{opacity:1;transform:none}}

/* ---------- Compteurs ---------- */

/* ---------- Cartes parallaxe (pcards) : grid auto-fit + lien global + effets riches ---------- */
.mm-pcards{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:24px;width:100%;align-items:stretch}
.mm-pcard{position:relative;display:flex;flex-direction:column;justify-content:flex-end;min-height:380px;border-radius:calc(var(--mm-radius,16px) * 1.8);overflow:hidden;text-decoration:none;color:inherit;transition:transform calc(var(--mm-speed,.34s) * 1.3) var(--mm-ease)}
.mm-pcard:hover{transform:translateY(-8px)}
.mm-pcard__bg{position:absolute;inset:0;background-size:cover;background-position:center;transition:transform .9s ease}
.mm-pcard:hover .mm-pcard__bg{transform:scale(1.08)}
.mm-pcard__scrim{position:absolute;inset:0;background:linear-gradient(180deg,rgba(15,23,42,0) 30%,rgba(15,23,42,.75) 100%);transition:background var(--mm-speed,.34s) var(--mm-ease)}
.mm-pcard:hover .mm-pcard__scrim{background:linear-gradient(180deg,rgba(15,23,42,.15) 0%,rgba(15,23,42,.85) 100%)}
.mm-pcard__badges{position:relative;padding:16px 76px 0 16px;display:flex;gap:8px;flex-wrap:wrap;z-index:1}
.mm-pcard__body{position:relative;padding:22px 22px 24px;color:#fff;z-index:1}
.mm-pcard__body h3{font-size:1.3rem;font-weight:700;margin-bottom:0;color:#fff;transition:transform var(--mm-speed,.34s) var(--mm-ease)}
.mm-pcard:hover .mm-pcard__body h3{transform:translateY(-4px)}
.mm-pcard__body p{margin:0;font-size:.92rem;color:rgba(255,255,255,.9);max-height:0;overflow:hidden;opacity:0;transition:max-height calc(var(--mm-speed,.34s) * 1.4) var(--mm-ease),opacity var(--mm-speed,.34s) var(--mm-ease),margin-top var(--mm-speed,.34s) var(--mm-ease)}
.mm-pcard:hover .mm-pcard__body p{max-height:120px;opacity:.92;margin-top:8px}
.mm-pcard__arrow{position:absolute;top:16px;right:16px;width:44px;height:44px;border-radius:50%;background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.28);backdrop-filter:blur(10px);display:grid;place-items:center;color:#fff;font-size:1.1rem;z-index:2;transition:transform var(--mm-speed,.34s) var(--mm-ease),background var(--mm-speed,.34s) var(--mm-ease),border-color var(--mm-speed,.34s) var(--mm-ease)}
.mm-pcard:hover .mm-pcard__arrow{transform:rotate(-45deg) scale(1.12);background:var(--mm-accent);border-color:var(--mm-accent)}

/* ---------- Hoverlist ---------- */
.mm-hoverlist{max-width:940px;margin:0 auto}
.mm-hl-row{display:flex;align-items:center;justify-content:space-between;gap:20px;padding:24px 8px;border-top:1px solid var(--mm-border);cursor:pointer;position:relative}
.mm-hl-row:last-child{border-bottom:1px solid var(--mm-border)}
.is-dark .mm-hl-row{border-color:rgba(255,255,255,.14)}
.mm-hl-index{font-family:monospace;font-size:.8rem;color:var(--mm-text-color,#94a3b8);width:38px;flex:0 0 auto;transition:color var(--mm-speed,.34s) var(--mm-ease)}
.mm-hl-title{font-family:var(--mm-font-display,inherit);font-weight:700;font-size:clamp(1.3rem,3.4vw,2.1rem);letter-spacing:-.02em;margin:0;flex:1;transition:transform var(--mm-speed,.34s) var(--mm-ease),color var(--mm-speed,.34s) var(--mm-ease)}
.mm-hl-cat{font-size:.85rem;flex:0 0 auto;transition:color var(--mm-speed,.34s) var(--mm-ease)}
.mm-hl-row:hover .mm-hl-title{transform:translateX(20px);color:var(--mm-accent)}
.mm-hl-row:hover .mm-hl-index{color:var(--mm-accent)}
.mm-hl-float{position:fixed;top:0;left:0;width:280px;height:200px;border-radius:var(--mm-radius,16px);overflow:hidden;pointer-events:none;opacity:0;z-index:99997;box-shadow:0 20px 50px rgba(0,0,0,.28);transform:translate(-50%,-50%) scale(.8);will-change:transform}
.mm-hl-float img{width:100%;height:100%;object-fit:cover;display:block}
@media(hover:none){.mm-hl-float{display:none}.mm-hl-row:hover .mm-hl-title{transform:none}}

/* ---------- Team ---------- */
.mm-team .mm-embla__slide{flex:0 0 78%}
@media(min-width:640px){.mm-team .mm-embla__slide{flex:0 0 45%}}
@media(min-width:1000px){.mm-team .mm-embla__slide{flex:0 0 30%}}
.mm-teamcard{position:relative;border-radius:calc(var(--mm-radius,16px) * 1.8);overflow:hidden;aspect-ratio:3/4;box-shadow:0 18px 36px rgba(60,33,86,.08)}
.mm-teamcard img{width:100%;height:100%;object-fit:cover;transition:transform .56s ease}
.mm-teamcard:hover img{transform:scale(1.06)}
.mm-teamcard__scrim{position:absolute;inset:0;background:linear-gradient(180deg,rgba(15,23,42,0) 45%,rgba(15,23,42,.78) 100%)}
.mm-teamcard__info{position:absolute;left:0;right:0;bottom:0;padding:22px;color:#fff;transform:translateY(8px);opacity:.92;transition:transform var(--mm-speed,.34s) var(--mm-ease),opacity var(--mm-speed,.34s) var(--mm-ease)}
.mm-teamcard:hover .mm-teamcard__info{transform:translateY(0);opacity:1}
.mm-teamcard__info h3{font-size:1.2rem;font-weight:700;color:#fff}
.mm-teamcard__info span{font-size:.85rem;opacity:.85}
.mm-teamcard__socials{display:flex;gap:8px;margin-top:12px;max-height:0;overflow:hidden;opacity:0;transition:max-height var(--mm-speed,.34s) var(--mm-ease),opacity var(--mm-speed,.34s) var(--mm-ease)}
.mm-teamcard:hover .mm-teamcard__socials{max-height:44px;opacity:1}
.mm-teamcard__socials a{width:34px;height:34px;border-radius:50%;background:rgba(255,255,255,.18);border:1px solid rgba(255,255,255,.28);backdrop-filter:blur(8px);display:grid;place-items:center;color:#fff;font-size:.85rem;font-weight:700;transition:background var(--mm-speed,.34s) var(--mm-ease)}
.mm-teamcard__socials a:hover{background:var(--mm-accent)}

/* ---------- Blog masonry (v1.6) ---------- */
.mm-blog{width:100%}
/* Layout multi-colonnes : chaque carte prend la largeur de sa colonne, les colonnes s'équilibrent en hauteur. */
.mm-blog__grid{column-gap:20px}
.mm-blog__grid.cols-2{column-count:2}
.mm-blog__grid.cols-3{column-count:3}
.mm-blog__grid.cols-4{column-count:4}
@media(max-width:1200px){.mm-blog__grid.cols-4{column-count:3}}
@media(max-width:960px){.mm-blog__grid.cols-3,.mm-blog__grid.cols-4{column-count:2}}
@media(max-width:600px){.mm-blog__grid.cols-2,.mm-blog__grid.cols-3,.mm-blog__grid.cols-4{column-count:1}}

/* Carte : image en fond + dégradé + textes en overlay. Aspect-ratio varié (cycle de 5) pour un rendu masonry visuel. */
.mm-blog__card{position:relative;display:block;break-inside:avoid;margin:0 0 20px;border-radius:calc(var(--mm-radius,16px) * 1.5);overflow:hidden;text-decoration:none;color:#fff;background:#1e293b;transition:transform var(--mm-speed,.34s) var(--mm-ease),box-shadow var(--mm-speed,.34s) var(--mm-ease);width:100%}
.mm-blog__card:hover{transform:translateY(-6px);box-shadow:0 22px 42px rgba(15,23,42,.22)}
.mm-blog__card:nth-child(5n+1){aspect-ratio:3/4}
.mm-blog__card:nth-child(5n+2){aspect-ratio:1/1}
.mm-blog__card:nth-child(5n+3){aspect-ratio:4/5}
.mm-blog__card:nth-child(5n+4){aspect-ratio:5/6}
.mm-blog__card:nth-child(5n+5){aspect-ratio:3/4}

.mm-blog__bg{position:absolute;inset:0;background-size:cover;background-position:center;transition:transform .9s ease}
.mm-blog__card:hover .mm-blog__bg{transform:scale(1.07)}
/* Dégradé pour lisibilité : transparent en haut, sombre en bas */
.mm-blog__scrim{position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,0) 25%,rgba(0,0,0,.35) 55%,rgba(0,0,0,.88) 100%);transition:background var(--mm-speed,.34s) var(--mm-ease)}
.mm-blog__card:hover .mm-blog__scrim{background:linear-gradient(180deg,rgba(0,0,0,.15) 0%,rgba(0,0,0,.5) 45%,rgba(0,0,0,.92) 100%)}

.mm-blog__badge{position:absolute;top:16px;left:16px;padding:5px 12px;border-radius:999px;background:rgba(255,255,255,.16);border:1px solid rgba(255,255,255,.28);backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);font-size:.72rem;font-weight:700;color:#fff;z-index:2;letter-spacing:.02em}

.mm-blog__body{position:absolute;left:0;right:0;bottom:0;padding:22px 22px 24px;color:#fff;z-index:2}
.mm-blog__body h3{font-size:1.1rem;font-weight:700;margin:0 0 8px;color:#fff;line-height:1.3;transition:transform var(--mm-speed,.34s) var(--mm-ease)}
.mm-blog__card:hover .mm-blog__body h3{transform:translateY(-3px)}
.mm-blog__meta{display:flex;align-items:center;gap:8px;font-size:.75rem;color:rgba(255,255,255,.75);font-weight:500;letter-spacing:.01em}
.mm-blog__body p{margin:8px 0 0;font-size:.88rem;color:rgba(255,255,255,.85);line-height:1.5;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}

/* =========================================================
   BLOG — layouts « cards » et « list » (v1.25)
   Style neutre et clair, pensé mobile-first. S'appuie sur les
   variables globales (--mm-radius, --mm-accent, --mm-border…).
   ========================================================= */

/* -- Commun -- */
.mm-bloglist{width:100%}
.mm-bloglist__tag{display:inline-flex;align-items:center;padding:3px 10px;border-radius:999px;background:var(--mm-accent-soft,rgba(231,33,58,.1));color:var(--mm-accent,#e7213a);font-size:.72rem;font-weight:700;letter-spacing:.01em;line-height:1.4}
.mm-bloglist__date{font-size:.78rem;color:var(--mm-text-color,#64748b);font-weight:500}
.mm-bloglist__metaline{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin:0 0 10px}
.mm-bloglist__title{color:var(--mm-title-color,#1e293b);font-weight:700;line-height:1.35;transition:color var(--mm-speed,.34s) var(--mm-ease)}
.mm-bloglist__excerpt{margin:8px 0 0;font-size:.9rem;color:var(--mm-text-color,#64748b);line-height:1.55;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
.is-dark .mm-bloglist__title{color:#fff}
.is-dark .mm-bloglist__excerpt,.is-dark .mm-bloglist__date{color:rgba(255,255,255,.7)}

/* -- Layout CARDS : fiche moderne, image en haut, texte dessous -- */
.mm-bloglist__grid{display:grid;gap:24px}
.mm-bloglist__grid.cols-2{grid-template-columns:repeat(2,1fr)}
.mm-bloglist__grid.cols-3{grid-template-columns:repeat(3,1fr)}
.mm-bloglist__grid.cols-4{grid-template-columns:repeat(4,1fr)}
@media(max-width:1200px){.mm-bloglist__grid.cols-4{grid-template-columns:repeat(3,1fr)}}
@media(max-width:960px){.mm-bloglist__grid.cols-3,.mm-bloglist__grid.cols-4{grid-template-columns:repeat(2,1fr)}}
@media(max-width:600px){.mm-bloglist__grid.cols-2,.mm-bloglist__grid.cols-3,.mm-bloglist__grid.cols-4{grid-template-columns:1fr}}

.mm-bloglist__card{display:flex;flex-direction:column;border:1px solid var(--mm-border,#e2e8f0);border-radius:calc(var(--mm-radius,16px) * 1.1);overflow:hidden;background:var(--mm-card-bg,#fff);text-decoration:none;transition:transform var(--mm-speed,.34s) var(--mm-ease),box-shadow var(--mm-speed,.34s) var(--mm-ease),border-color var(--mm-speed,.34s) var(--mm-ease)}
.mm-bloglist__card:hover{transform:translateY(-4px);box-shadow:0 18px 40px rgba(15,23,42,.1);border-color:transparent}
.is-dark .mm-bloglist__card{background:rgba(255,255,255,.03);border-color:rgba(255,255,255,.12)}
.mm-bloglist__thumb{position:relative;aspect-ratio:16/10;overflow:hidden;background:var(--mm-accent-soft,#f1f5f9)}
.mm-bloglist__thumb img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .9s var(--mm-ease)}
.mm-bloglist__card:hover .mm-bloglist__thumb img{transform:scale(1.05)}
.mm-bloglist__thumb--empty{background:linear-gradient(135deg,var(--mm-accent-soft,#f1f5f9),transparent)}
.mm-bloglist__cardbody{display:flex;flex-direction:column;padding:20px}
.mm-bloglist__card .mm-bloglist__title{font-size:1.08rem}
.mm-bloglist__card:hover .mm-bloglist__title{color:var(--mm-accent,#e7213a)}
.mm-bloglist__more{margin-top:14px;font-size:.82rem;font-weight:600;color:var(--mm-accent,#e7213a);display:inline-flex;align-items:center;gap:6px}
.mm-bloglist__more::after{content:'';width:6px;height:6px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(-45deg);transition:transform var(--mm-speed,.34s) var(--mm-ease)}
.mm-bloglist__card:hover .mm-bloglist__more::after{transform:rotate(-45deg) translate(2px,2px)}

/* -- Layout LIST : lignes cliquables, mini-miniature optionnelle -- */
.mm-bloglist__list{display:flex;flex-direction:column;gap:2px}
.mm-bloglist__row{display:flex;align-items:center;gap:18px;padding:18px 16px;border-radius:var(--mm-radius,16px);text-decoration:none;border:1px solid transparent;transition:background var(--mm-speed,.34s) var(--mm-ease),border-color var(--mm-speed,.34s) var(--mm-ease),transform var(--mm-speed,.34s) var(--mm-ease)}
.mm-bloglist__row + .mm-bloglist__row{border-top:1px solid var(--mm-border,#e2e8f0)}
.mm-bloglist__row:hover{background:var(--mm-accent-soft,rgba(231,33,58,.05));border-color:transparent;border-top-color:transparent}
.mm-bloglist__row:hover + .mm-bloglist__row{border-top-color:transparent}
.mm-bloglist__mini{flex:0 0 auto;width:74px;height:74px;border-radius:12px;overflow:hidden;background:var(--mm-accent-soft,#f1f5f9)}
.mm-bloglist__mini img{width:100%;height:100%;object-fit:cover;display:block}
.mm-bloglist__mini--empty{background:linear-gradient(135deg,var(--mm-accent-soft,#f1f5f9),transparent)}
.mm-bloglist__rowbody{flex:1 1 auto;min-width:0;display:block}
.mm-bloglist__row .mm-bloglist__metaline{margin:0 0 6px}
.mm-bloglist__row .mm-bloglist__title{display:block;font-size:1.02rem}
.mm-bloglist__row:hover .mm-bloglist__title{color:var(--mm-accent,#e7213a)}
.mm-bloglist__chevron{flex:0 0 auto;width:9px;height:9px;border-right:2px solid var(--mm-text-color,#94a3b8);border-bottom:2px solid var(--mm-text-color,#94a3b8);transform:rotate(-45deg);opacity:.5;transition:transform var(--mm-speed,.34s) var(--mm-ease),opacity var(--mm-speed,.34s) var(--mm-ease)}
.mm-bloglist__row:hover .mm-bloglist__chevron{opacity:1;transform:rotate(-45deg) translate(3px,3px);border-color:var(--mm-accent,#e7213a)}
@media(max-width:600px){
  .mm-bloglist__row{gap:14px;padding:14px 10px}
  .mm-bloglist__mini{width:60px;height:60px}
  .mm-bloglist__row .mm-bloglist__excerpt{display:none}
}

/* -- Bouton « charger plus » (commun aux 3 layouts) -- */
.mm-blog__more-wrap{display:flex;justify-content:center;margin:32px 0 4px}
.mm-blog__more{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:10px;padding:13px 30px;border-radius:999px;border:1px solid var(--mm-border,#e2e8f0);background:var(--mm-card-bg,#fff);color:var(--mm-title-color,#1e293b);font-size:.92rem;font-weight:600;cursor:pointer;transition:background var(--mm-speed,.34s) var(--mm-ease),color var(--mm-speed,.34s) var(--mm-ease),border-color var(--mm-speed,.34s) var(--mm-ease),transform var(--mm-speed,.34s) var(--mm-ease)}
.mm-blog__more:hover{background:var(--mm-accent,#e7213a);color:#fff;border-color:transparent;transform:translateY(-2px)}
.is-dark .mm-blog__more{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.14);color:#fff}
.mm-blog__more-spin{display:none;width:16px;height:16px;border:2px solid currentColor;border-right-color:transparent;border-radius:50%;animation:mm-blog-spin .7s linear infinite}
.mm-blog__more.is-loading{pointer-events:none;opacity:.85}
.mm-blog__more.is-loading .mm-blog__more-spin{display:inline-block}
@keyframes mm-blog-spin{to{transform:rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.mm-blog__more-spin{animation-duration:1.4s}}

/* ---------- Boutons animés (v1.4) ---------- */
.mm-buttons{display:flex;flex-wrap:wrap;gap:14px;align-items:center}
.mm-buttons.align-left{justify-content:flex-start}
.mm-buttons.align-center{justify-content:center}
.mm-buttons.align-right{justify-content:flex-end}
.mm-buttons.layout-stack{flex-direction:column;align-items:flex-start;gap:12px}
.mm-buttons.layout-stack.align-center{align-items:center}
.mm-buttons.layout-stack.align-right{align-items:flex-end}

/* Base du bouton — toutes les couleurs et tailles sont pilotées par variables CSS surchargeables inline */
.mm-btn{
  --mm-btn-bg:var(--mm-accent);
  --mm-btn-color:#fff;
  --mm-btn-hover-bg:var(--mm-title-color,#1e293b);
  --mm-btn-hover-color:#fff;
  --mm-btn-radius:999px;
  --mm-btn-py:12px;
  --mm-btn-px:24px;
  --mm-btn-fs:14px;
  --mm-btn-gap:10px;
  --mm-btn-icon:1.15em;
  display:inline-flex;align-items:center;gap:var(--mm-btn-gap);
  padding:var(--mm-btn-py) var(--mm-btn-px);
  border-radius:var(--mm-btn-radius);
  font-family:var(--mm-font-body,inherit);
  font-weight:600;
  font-size:var(--mm-btn-fs);
  text-decoration:none !important;
  cursor:pointer;
  border:2px solid transparent;
  transition:background var(--mm-speed,.34s) var(--mm-ease),color var(--mm-speed,.34s) var(--mm-ease),border-color var(--mm-speed,.34s) var(--mm-ease),transform var(--mm-speed,.34s) var(--mm-ease),box-shadow var(--mm-speed,.34s) var(--mm-ease);
  position:relative;line-height:1.2;vertical-align:middle;white-space:nowrap;
  isolation:isolate;
}
.mm-btn__icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0}
.mm-btn__icon svg{width:var(--mm-btn-icon);height:var(--mm-btn-icon);display:block}
.mm-btn__label{display:inline-block;position:relative;line-height:1.2}

/* Tailles */
.mm-btn--s-s{--mm-btn-py:8px;--mm-btn-px:16px;--mm-btn-fs:13px;--mm-btn-gap:6px}
.mm-btn--s-m{--mm-btn-py:12px;--mm-btn-px:24px;--mm-btn-fs:14px}
.mm-btn--s-l{--mm-btn-py:15px;--mm-btn-px:32px;--mm-btn-fs:16px;--mm-btn-icon:1.2em}
.mm-btn--s-xl{--mm-btn-py:19px;--mm-btn-px:40px;--mm-btn-fs:18px;--mm-btn-icon:1.25em;--mm-btn-gap:12px}

/* Radius */
.mm-btn--r-pill{--mm-btn-radius:999px}
.mm-btn--r-lg{--mm-btn-radius:18px}
.mm-btn--r-md{--mm-btn-radius:10px}
.mm-btn--r-square{--mm-btn-radius:0}

/* Apparences de base */
.mm-btn--filled{background:var(--mm-btn-bg);color:var(--mm-btn-color);border-color:var(--mm-btn-bg)}
.mm-btn--filled:hover{background:var(--mm-btn-hover-bg);color:var(--mm-btn-hover-color);border-color:var(--mm-btn-hover-bg)}
.mm-btn--outline{background:transparent;color:var(--mm-btn-bg);border-color:var(--mm-btn-bg)}
.mm-btn--outline:hover{background:var(--mm-btn-bg);color:var(--mm-btn-color);border-color:var(--mm-btn-bg)}
.mm-btn--ghost{background:transparent;color:var(--mm-btn-bg);border-color:transparent}
.mm-btn--ghost:hover{background:rgba(var(--mm-accent-rgb,231,33,58),.12);color:var(--mm-btn-bg);border-color:transparent}
.mm-btn--underline{background:transparent;color:var(--mm-btn-bg);border:none;border-radius:0;--mm-btn-px:2px;padding-bottom:6px}
.mm-btn--underline::after{content:'';position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--mm-btn-bg);transform:scaleX(1);transform-origin:right;transition:transform var(--mm-speed,.34s) var(--mm-ease)}
.mm-btn--underline:hover{color:var(--mm-btn-hover-bg)}
.mm-btn--underline:hover::after{background:var(--mm-btn-hover-bg);transform:scaleX(0);transform-origin:left}

/* --- Effets d'animation --- */

/* 1 · arrow-slide : l'icône glisse à droite (ou à gauche si icône à gauche) */
.mm-fx-arrow-slide .mm-btn__icon{transition:transform calc(var(--mm-speed,.34s) * 1.1) var(--mm-ease)}
.mm-fx-arrow-slide:hover .mm-btn__icon{transform:translateX(5px)}
.mm-fx-arrow-slide.mm-btn--icon-left:hover .mm-btn__icon{transform:translateX(-5px)}

/* 2 · arrow-rotate : l'icône pivote -45° (vers le haut à droite) */
.mm-fx-arrow-rotate .mm-btn__icon{transition:transform calc(var(--mm-speed,.34s) * 1.1) var(--mm-ease)}
.mm-fx-arrow-rotate:hover .mm-btn__icon{transform:rotate(-45deg)}

/* 3 · text-rise : le libellé remonte, un clone (data-txt) apparaît en dessous */
.mm-fx-text-rise{overflow:hidden}
.mm-fx-text-rise .mm-btn__label{transition:transform calc(var(--mm-speed,.34s) * 1.2) var(--mm-ease)}
.mm-fx-text-rise .mm-btn__label::before{content:attr(data-txt);position:absolute;left:0;right:0;top:110%;color:inherit;text-align:center}
.mm-fx-text-rise:hover .mm-btn__label{transform:translateY(-115%)}

/* 4 · bar-grow : une barre s'élargit sous le texte au survol */
.mm-fx-bar-grow::before{content:'';position:absolute;left:20%;right:20%;bottom:6px;height:2px;background:currentColor;transform:scaleX(0);transform-origin:center;transition:transform calc(var(--mm-speed,.34s) * 1.1) var(--mm-ease);border-radius:2px;opacity:.75}
.mm-fx-bar-grow:hover::before{transform:scaleX(1)}
.mm-fx-bar-grow.mm-btn--underline::before{display:none} /* incompatible avec underline (::after) */

/* 5 · swipe : le fond couleur monte depuis le bas au survol */
.mm-fx-swipe{overflow:hidden}
.mm-fx-swipe::before{content:'';position:absolute;inset:0;background:var(--mm-btn-hover-bg);transform:translateY(101%);transition:transform calc(var(--mm-speed,.34s) * 1.3) var(--mm-ease);z-index:-1;border-radius:inherit}
.mm-fx-swipe:hover::before{transform:translateY(0)}
.mm-fx-swipe.mm-btn--filled:hover{background:var(--mm-btn-bg);color:var(--mm-btn-hover-color);border-color:var(--mm-btn-bg)}
.mm-fx-swipe.mm-btn--outline:hover{color:var(--mm-btn-hover-color);border-color:var(--mm-btn-bg)}
.mm-fx-swipe.mm-btn--ghost:hover{background:transparent;color:var(--mm-btn-hover-color)}

/* 6 · glow : lueur colorée pulsée + élévation légère */
.mm-fx-glow{transition:box-shadow calc(var(--mm-speed,.34s) * 1.4) var(--mm-ease),background var(--mm-speed,.34s) var(--mm-ease),color var(--mm-speed,.34s) var(--mm-ease),transform var(--mm-speed,.34s) var(--mm-ease)}
.mm-fx-glow:hover{box-shadow:0 0 26px rgba(var(--mm-accent-rgb,231,33,58),.55),0 0 60px rgba(var(--mm-accent-rgb,231,33,58),.3);transform:translateY(-2px)}

/* 7 · icon-appear : l'icône était invisible et translatée, elle apparaît au survol */
.mm-fx-icon-appear .mm-btn__icon{opacity:0;max-width:0;transform:translateX(-10px);margin-left:calc(-1 * var(--mm-btn-gap));transition:opacity var(--mm-speed,.34s) var(--mm-ease),transform var(--mm-speed,.34s) var(--mm-ease),max-width var(--mm-speed,.34s) var(--mm-ease),margin-left var(--mm-speed,.34s) var(--mm-ease)}
.mm-fx-icon-appear:hover .mm-btn__icon{opacity:1;max-width:1.5em;transform:translateX(0);margin-left:0}
.mm-fx-icon-appear.mm-btn--icon-left .mm-btn__icon{transform:translateX(10px);margin-left:0;margin-right:calc(-1 * var(--mm-btn-gap))}
.mm-fx-icon-appear.mm-btn--icon-left:hover .mm-btn__icon{transform:translateX(0);margin-right:0}

/* 8 · magnetic : géré en JS (transform x/y suit la souris) */
.mm-fx-magnetic{will-change:transform}
@media(hover:none){.mm-fx-magnetic{transform:none !important}}

/* ---------- Menu avancé [mm_menu] : liens, sous-menus, méga menu, responsive ---------- */
/* v1.19 — le menu et le sous-menu ont chacun leurs propres couleurs : un
   en-tête sombre peut ouvrir un déroulant clair, et inversement. */
.mm-menu > ul{list-style:none;margin:0;padding:0;display:flex;flex-wrap:wrap;gap:var(--mm-menu-gap,8px);align-items:center;
  background:var(--mm-menu-bg,transparent)}
/* v1.12 : empêche le passage à la ligne quand le menu compte beaucoup d'entrées */
.mm-menu--nowrap > ul{flex-wrap:nowrap}
.mm-menu--nowrap.mm-menu--mobile > ul{flex-wrap:wrap}
.mm-menu.vertical > ul{flex-direction:column;align-items:flex-start;gap:4px}
.mm-menu > ul > li{margin:0;position:relative;list-style:none}

/* v1.12 : taille et padding pilotés par variables (réglables dans Apparence
   ou par attribut de shortcode). white-space:nowrap évite qu'un libellé de deux
   mots se casse en deux lignes et déclenche un wrap du menu entier. */
.mm-menu a{position:relative;display:inline-flex;align-items:center;gap:8px;text-decoration:none;font-family:var(--mm-font-display,inherit);font-weight:600;font-size:var(--mm-menu-link-size,16px);line-height:1.25;white-space:nowrap;color:var(--mm-menu-color,var(--mm-title-color,#1e293b));padding:var(--mm-menu-py,8px) var(--mm-menu-px,10px);transition:color var(--mm-speed,.34s) var(--mm-ease),transform var(--mm-speed,.34s) var(--mm-ease),padding-left var(--mm-speed,.34s) var(--mm-ease),background var(--mm-speed,.34s) var(--mm-ease) !important;border-radius:999px}

/* Icône d'une entrée de menu — couleur unique pour tout le menu */
.mm-menu__ic{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;color:var(--mm-menu-icon-color,var(--mm-accent));line-height:0}
.mm-menu__ic svg{width:var(--mm-menu-icon-size,18px);height:var(--mm-menu-icon-size,18px);display:block}
.mm-menu__ic--img img{width:var(--mm-menu-icon-size,18px);height:var(--mm-menu-icon-size,18px);object-fit:contain;display:block}
.is-dark .mm-menu a{color:#fff}

/* Indicateur "sous-menu présent" (flèche) sur les entrées de niveau 1 */
.mm-menu > ul > li.menu-item-has-children > a::after{content:'\25BE';margin-left:6px;font-size:.7rem;opacity:.7;transition:transform var(--mm-speed,.34s) var(--mm-ease);position:static !important;background:none !important;width:auto !important;height:auto !important;border-radius:0 !important;transform:none}
.mm-menu > ul > li.menu-item-has-children:hover > a::after{transform:rotate(180deg)}

/* ---- STYLE 1 : line ---- */
.mm-menu[data-style="line"] a{padding-left:var(--mm-menu-px,10px);border-radius:0}
.mm-menu[data-style="line"] a::before{content:'';position:absolute;left:0;top:50%;transform:translateY(-50%);width:0;height:2px;border-radius:2px;background:var(--mm-accent);transition:width var(--mm-speed,.34s) var(--mm-ease)}
.mm-menu[data-style="line"] a:hover,.mm-menu[data-style="line"] a.active,.mm-menu[data-style="line"] .current-menu-item > a{color:var(--mm-accent);padding-left:calc(var(--mm-menu-px,10px) + 16px)}
.mm-menu[data-style="line"] a:hover::before,.mm-menu[data-style="line"] a.active::before,.mm-menu[data-style="line"] .current-menu-item > a::before{width:18px}

/* ---- STYLE 2 : underline ---- */
.mm-menu[data-style="underline"] a{border-radius:0}
.mm-menu[data-style="underline"] a::after{content:'';position:absolute;left:14px;right:14px;bottom:6px;height:2px;border-radius:2px;background:var(--mm-accent);transform:scaleX(0);transform-origin:center;transition:transform var(--mm-speed,.34s) var(--mm-ease);width:auto;margin:0;opacity:1;font-size:0}
.mm-menu[data-style="underline"] a:hover,.mm-menu[data-style="underline"] a.active,.mm-menu[data-style="underline"] .current-menu-item > a{color:var(--mm-accent)}
.mm-menu[data-style="underline"] a:hover::after,.mm-menu[data-style="underline"] a.active::after,.mm-menu[data-style="underline"] .current-menu-item > a::after{transform:scaleX(1)}

/* ---- STYLE 3 : pill ---- */
.mm-menu[data-style="pill"] a{position:relative;z-index:0;isolation:isolate}
.mm-menu[data-style="pill"] a::before{content:'';position:absolute;inset:0;border-radius:999px;background:var(--mm-accent-soft);transform:scale(.6);opacity:0;transition:transform var(--mm-speed,.34s) var(--mm-ease),opacity var(--mm-speed,.34s) var(--mm-ease);z-index:-1}
.mm-menu[data-style="pill"] a:hover,.mm-menu[data-style="pill"] a.active,.mm-menu[data-style="pill"] .current-menu-item > a{color:var(--mm-accent)}
.mm-menu[data-style="pill"] a:hover::before,.mm-menu[data-style="pill"] a.active::before,.mm-menu[data-style="pill"] .current-menu-item > a::before{transform:scale(1);opacity:1}

/* ---- STYLE 4 : grow ---- */
.mm-menu[data-style="grow"] a:hover,.mm-menu[data-style="grow"] a.active,.mm-menu[data-style="grow"] .current-menu-item > a{color:var(--mm-accent);transform:translateY(-3px)}

/* ---- STYLE 5 : reveal ---- */
.mm-menu[data-style="reveal"] > ul > li > a{overflow:hidden;height:38px;perspective:600px;padding-top:5px;padding-bottom:5px}
.mm-menu[data-style="reveal"] a > span.mm-lbl{display:inline-block;position:relative;transition:transform var(--mm-speed,.34s) var(--mm-ease)}
.mm-menu[data-style="reveal"] a > span.mm-lbl::before{content:attr(data-txt);position:absolute;left:0;top:100%;color:var(--mm-accent)}
.mm-menu[data-style="reveal"] a:hover > span.mm-lbl,.mm-menu[data-style="reveal"] a.active > span.mm-lbl,.mm-menu[data-style="reveal"] .current-menu-item > a > span.mm-lbl{transform:translateY(-100%)}

/* ---- SOUS-MENUS classiques (dropdowns liste) ---- */
.mm-menu .sub-menu{position:absolute;top:100%;left:0;min-width:var(--mm-submenu-width,220px);list-style:none;margin:0;padding:10px;background:var(--mm-submenu-bg,rgba(255,255,255,.98));backdrop-filter:blur(18px);-webkit-backdrop-filter:blur(18px);border:1px solid var(--mm-border);border-radius:calc(var(--mm-radius,16px) * 0.9);box-shadow:0 22px 44px rgba(15,23,42,.14);display:flex !important;flex-direction:column;gap:2px;z-index:100;opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--mm-speed,.34s) var(--mm-ease),transform var(--mm-speed,.34s) var(--mm-ease),max-height calc(var(--mm-speed,.34s) * 1.5) var(--mm-ease),visibility 0s linear var(--mm-speed,.34s)}
.is-dark .mm-menu .sub-menu{background:rgba(15,23,42,.96);border-color:rgba(255,255,255,.14)}
.mm-menu .sub-menu li{margin:0;width:100%;list-style:none}
.mm-menu .sub-menu a{display:block !important;width:100%;padding:10px 14px !important;padding-left:14px !important;font-size:var(--mm-submenu-size,.92rem);font-weight:500;border-radius:8px;background:transparent !important;color:var(--mm-submenu-color,var(--mm-title-color,#1e293b)) !important;height:auto !important;overflow:visible !important;white-space:normal}
.is-dark .mm-menu .sub-menu a{color:var(--mm-submenu-color,#fff) !important}
.mm-menu .sub-menu a::before,.mm-menu .sub-menu a::after{display:none !important}
.mm-menu .sub-menu a > span.mm-lbl{transform:none !important;position:static}
.mm-menu .sub-menu a:hover,.mm-menu .sub-menu .current-menu-item > a{background:var(--mm-submenu-hover-bg,var(--mm-accent-soft)) !important;color:var(--mm-submenu-hover-color,var(--mm-accent)) !important;transform:none !important;padding-left:14px !important}
.mm-menu > ul > li:hover > .sub-menu,.mm-menu > ul > li:focus-within > .sub-menu{opacity:1 !important;visibility:visible !important;pointer-events:auto;transition:opacity var(--mm-speed,.34s) var(--mm-ease),transform var(--mm-speed,.34s) var(--mm-ease),max-height calc(var(--mm-speed,.34s) * 1.5) var(--mm-ease),visibility 0s}

/* Animations sous-menus */
.mm-menu[data-submenu-anim="fade"] .sub-menu{transform:translateY(-10px)}
.mm-menu[data-submenu-anim="fade"] > ul > li:hover > .sub-menu{transform:translateY(0)}
.mm-menu[data-submenu-anim="scale"] .sub-menu{transform:scale(.94);transform-origin:top left}
.mm-menu[data-submenu-anim="scale"] > ul > li:hover > .sub-menu{transform:scale(1)}
.mm-menu[data-submenu-anim="slide"] .sub-menu{max-height:0;padding-top:0;padding-bottom:0;overflow:hidden;transform:none}
.mm-menu[data-submenu-anim="slide"] > ul > li:hover > .sub-menu{max-height:600px;padding-top:10px;padding-bottom:10px}

/* Menu vertical : sous-menus à droite */
.mm-menu.vertical .sub-menu{top:0;left:100%;margin-left:8px}

/* ---- NIVEAU 3 (v1.24) : flyout latéral au survol d'une entrée de sous-menu ---- */
/* Une entrée de niveau 2 qui a des enfants : positionnement relatif pour ancrer le flyout. */
.mm-menu .sub-menu li.menu-item-has-children{position:relative}
/* Indicateur visuel « ce lien a un sous-niveau » : chevron droit. */
.mm-menu .sub-menu li.menu-item-has-children > a{display:flex !important;align-items:center;justify-content:space-between;gap:8px}
.mm-menu .sub-menu li.menu-item-has-children > a::after{content:'';flex:0 0 auto;width:6px;height:6px;margin-left:6px;border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(-45deg);opacity:.55;transition:transform var(--mm-speed,.34s) var(--mm-ease),opacity var(--mm-speed,.34s) var(--mm-ease)}
.mm-menu .sub-menu li.menu-item-has-children:hover > a::after{opacity:1}
/* Le flyout niveau 3 sort à droite de son parent (bascule à gauche si débordement géré en JS). */
.mm-menu .sub-menu .sub-menu{top:-11px;left:100%;margin-left:8px;transform:translateX(-6px)}
.mm-menu .sub-menu li.menu-item-has-children:hover > .sub-menu,
.mm-menu .sub-menu li.menu-item-has-children:focus-within > .sub-menu{opacity:1 !important;visibility:visible !important;pointer-events:auto;transform:translateX(0);transition:opacity var(--mm-speed,.34s) var(--mm-ease),transform var(--mm-speed,.34s) var(--mm-ease),visibility 0s}
/* Ouverture vers la gauche quand le parent a demandé un renversement (posé par le JS). */
.mm-menu .sub-menu li.mm-flip-left > .sub-menu{left:auto;right:100%;margin-left:0;margin-right:8px}
/* Menu vertical : le niveau 3 continue de sortir à droite, cohérent avec le niveau 2. */
.mm-menu.vertical .sub-menu .sub-menu{top:0}

/* =========================================================
   MÉGA MENU (v1.9) — panneau large à icônes
   Couleurs pilotées par variables posées sur .mm-menu :
   --mm-mega-bg / --mm-mega-color / --mm-mega-desc / --mm-mega-hover / --mm-mega-cols
   ========================================================= */
.mm-menu .mm-mega{position:absolute;top:100%;z-index:120;
  background:var(--mm-mega-bg,#fff);color:var(--mm-mega-color,#1e293b);
  border:1px solid var(--mm-border);border-radius:calc(var(--mm-radius,16px) * 0.9);
  box-shadow:0 26px 54px rgba(15,23,42,.16);
  opacity:0;visibility:hidden;pointer-events:none;transform:translateY(-10px);
  transition:opacity var(--mm-speed,.34s) var(--mm-ease),transform var(--mm-speed,.34s) var(--mm-ease),visibility 0s linear var(--mm-speed,.34s)}
.is-dark .mm-menu .mm-mega{border-color:rgba(255,255,255,.12)}
.mm-menu .mm-mega__inner{padding:22px}
.mm-menu .mm-mega__grid{display:grid;grid-template-columns:repeat(var(--mm-mega-cols,4),minmax(0,1fr));gap:6px}
/* Panneau à 1 colonne : largeur resserrée, sinon il s'étale inutilement */
.mm-menu[data-mega-width="container"] .mm-mega:has(.mm-mega__grid[style*="--mm-mega-cols:1"]){width:max(320px,100%)}

/* Largeur "container" : le panneau s'aligne sur le menu (gauche) */
.mm-menu[data-mega-width="container"] .mm-mega{left:0;width:max(680px,100%);max-width:92vw}
/* Largeur "full" : edge-to-edge, centré sur la fenêtre */
.mm-menu[data-mega-width="full"] .mm-mega{left:50%;transform:translateX(-50%) translateY(-10px);width:min(1200px,96vw)}

/* Entrée du méga menu : icône + titre + description */
.mm-menu .mm-mega__item{display:flex !important;align-items:flex-start;gap:12px;padding:12px 14px !important;border-radius:12px;background:transparent !important;text-decoration:none;white-space:normal !important;transition:background var(--mm-speed,.34s) var(--mm-ease),transform var(--mm-speed,.34s) var(--mm-ease)}
.mm-menu .mm-mega__item::before,.mm-menu .mm-mega__item::after{display:none !important}
.mm-menu .mm-mega__item:hover{background:var(--mm-mega-hover,#f6f7f9) !important;transform:none}
.mm-menu .mm-mega__ic{flex:0 0 auto;width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border-radius:10px;background:var(--mm-accent-soft);overflow:hidden;transition:transform var(--mm-speed,.34s) var(--mm-ease)}
.mm-menu .mm-mega__item:hover .mm-mega__ic{transform:translateY(-2px) scale(1.05)}
.mm-menu .mm-mega__ic img{width:26px;height:26px;object-fit:contain;display:block}
.mm-menu .mm-mega__ic--svg svg{width:22px;height:22px;color:var(--mm-accent)}
/* v1.12 : titre et description sur DEUX LIGNES distinctes.
   display:block + width:100% force le retour à la ligne même si un thème (Divi)
   impose display:inline aux <span>, ce qui collait la description au titre.
   white-space:normal annule le nowrap hérité de .mm-menu a. */
.mm-menu .mm-mega__txt{display:flex;flex-direction:column;align-items:flex-start;gap:3px;min-width:0;flex:1 1 auto}
.mm-menu .mm-mega__t{display:block;width:100%;font-weight:700;font-size:var(--mm-mega-title-size,15px);color:var(--mm-mega-color,#1e293b);line-height:1.3;white-space:normal}
.mm-menu .mm-mega__d{display:block;width:100%;font-weight:400;font-size:var(--mm-mega-desc-size,13px);color:var(--mm-mega-desc,#64748b);line-height:1.4;white-space:normal}

/* Ouverture au survol / focus (desktop) */
.mm-menu > ul > li.mm-has-mega:hover > .mm-mega,
.mm-menu > ul > li.mm-has-mega:focus-within > .mm-mega{opacity:1;visibility:visible;pointer-events:auto;transition:opacity var(--mm-speed,.34s) var(--mm-ease),transform var(--mm-speed,.34s) var(--mm-ease),visibility 0s}
.mm-menu[data-mega-width="container"] > ul > li.mm-has-mega:hover > .mm-mega,
.mm-menu[data-mega-width="container"] > ul > li.mm-has-mega:focus-within > .mm-mega{transform:translateY(0)}
.mm-menu[data-mega-width="full"] > ul > li.mm-has-mega:hover > .mm-mega,
.mm-menu[data-mega-width="full"] > ul > li.mm-has-mega:focus-within > .mm-mega{transform:translateX(-50%) translateY(0)}

/* =========================================================
   BURGER + MODE MOBILE (classe .mm-menu--mobile posée par le JS)
   ========================================================= */
.mm-burger{display:none;flex-direction:column;justify-content:center;width:44px;height:44px;padding:0;border:none;background:transparent;cursor:pointer;border-radius:10px;transition:background var(--mm-speed,.34s) var(--mm-ease)}
.mm-burger__box{position:relative;width:24px;height:16px;margin:0 auto}
.mm-burger__inner,.mm-burger__inner::before,.mm-burger__inner::after{content:'';position:absolute;left:0;width:24px;height:2px;border-radius:2px;background:var(--mm-title-color,#1e293b);transition:transform var(--mm-speed,.34s) var(--mm-ease),top var(--mm-speed,.34s) var(--mm-ease),opacity var(--mm-speed,.34s) var(--mm-ease)}
.is-dark .mm-burger__inner,.is-dark .mm-burger__inner::before,.is-dark .mm-burger__inner::after{background:#fff}
.mm-burger__inner{top:50%;transform:translateY(-50%)}
.mm-burger__inner::before{top:-7px}
.mm-burger__inner::after{top:7px}

/* Mode mobile : le burger apparaît, la liste devient un panneau déroulant vertical */
.mm-menu--mobile{position:relative}
.mm-menu--mobile .mm-burger{display:flex}
.mm-menu--mobile.is-open .mm-burger__inner{background:transparent}
.mm-menu--mobile.is-open .mm-burger__inner::before{top:0;transform:rotate(45deg)}
.mm-menu--mobile.is-open .mm-burger__inner::after{top:0;transform:rotate(-45deg)}

.mm-menu--mobile > ul{position:absolute;top:calc(100% + 10px);left:0;right:0;flex-direction:column;align-items:stretch;gap:2px;background:var(--mm-submenu-bg,var(--mm-mega-bg,#fff));border:1px solid var(--mm-border);border-radius:14px;padding:10px;box-shadow:0 26px 54px rgba(15,23,42,.16);max-height:0;overflow:hidden;opacity:0;visibility:hidden;transition:opacity var(--mm-speed,.34s) var(--mm-ease),max-height calc(var(--mm-speed,.34s) * 1.6) var(--mm-ease),visibility 0s linear var(--mm-speed,.34s);z-index:200}
.is-dark .mm-menu--mobile > ul{background:#0f172a;border-color:rgba(255,255,255,.12)}
.mm-menu--mobile.is-open > ul{max-height:80vh;overflow-y:auto;opacity:1;visibility:visible;transition:opacity var(--mm-speed,.34s) var(--mm-ease),max-height calc(var(--mm-speed,.34s) * 1.6) var(--mm-ease),visibility 0s}
.mm-menu--mobile > ul > li{width:100%}
.mm-menu--mobile a{width:100%;border-radius:8px}

/* En mobile, sous-menus et méga menus deviennent des accordéons dans le flux */
.mm-menu--mobile .sub-menu,
.mm-menu--mobile .mm-mega{position:static !important;width:auto !important;max-width:none !important;transform:none !important;opacity:1 !important;visibility:visible !important;pointer-events:auto !important;box-shadow:none !important;border:none !important;background:transparent !important;padding:0 !important;max-height:0;overflow:hidden;transition:max-height calc(var(--mm-speed,.34s) * 1.4) var(--mm-ease)}
.mm-menu--mobile .mm-mega__inner{padding:4px 0 8px !important}
.mm-menu--mobile .mm-mega__grid{grid-template-columns:1fr !important}
.mm-menu--mobile li.mm-open > .sub-menu,
.mm-menu--mobile li.mm-open > .mm-mega{max-height:1400px}
/* Flèche accordéon en mobile */
.mm-menu--mobile li.menu-item-has-children > a::after{margin-left:auto}
.mm-menu--mobile li.mm-open > a::after{transform:rotate(180deg)}

/* ---- NIVEAU 3 en mobile (v1.24) : accordéon imbriqué, indenté ---- */
/* En mobile le flyout latéral n'a pas de sens : on repasse en flux vertical. */
.mm-menu--mobile .sub-menu .sub-menu{position:static !important;left:auto !important;right:auto !important;margin:0 !important;transform:none !important;max-height:0;overflow:hidden;transition:max-height calc(var(--mm-speed,.34s) * 1.4) var(--mm-ease)}
.mm-menu--mobile li.mm-open > .sub-menu.sub-menu--l3,
.mm-menu--mobile .sub-menu li.mm-open > .sub-menu{max-height:1000px}
/* Indentation visuelle du 3e niveau + petit trait de rattachement. */
.mm-menu--mobile .sub-menu .sub-menu li > a{padding-left:26px !important;position:relative}
.mm-menu--mobile .sub-menu .sub-menu li > a::before{content:'';position:absolute;left:14px;top:50%;width:6px;height:1px;background:currentColor;opacity:.4;transform:translateY(-50%)}
/* La flèche accordéon du niveau 3 en mobile réutilise le chevron ; on le réoriente vers le bas. */
.mm-menu--mobile .sub-menu li.menu-item-has-children > a::after{transform:rotate(45deg);margin-left:auto}
.mm-menu--mobile .sub-menu li.mm-open > a::after{transform:rotate(225deg)}

/* ---------- Capabilities ---------- */
.mm-caps{display:grid;grid-template-columns:1fr;gap:22px}
@media(min-width:680px){.mm-caps{grid-template-columns:1fr 1fr}}
@media(min-width:1020px){.mm-caps{grid-template-columns:repeat(3,1fr)}}
.mm-cap{position:relative;display:flex;border:1px solid var(--mm-border);border-radius:calc(var(--mm-radius,16px) * 1.4);padding:32px 26px;min-height:300px;flex-direction:column;overflow:hidden;cursor:pointer;isolation:isolate;background:transparent;transition:border-color var(--mm-speed,.34s) var(--mm-ease),transform var(--mm-speed,.34s) var(--mm-ease),box-shadow var(--mm-speed,.34s) var(--mm-ease)}
.is-dark .mm-cap{border-color:rgba(255,255,255,.16)}
.mm-cap::before{content:'';position:absolute;inset:0;background:var(--mm-accent);transform:translateY(101%);transition:transform calc(var(--mm-speed,.34s) * 1.6) var(--mm-ease);z-index:-2;border-radius:inherit}
.mm-cap__img{position:absolute;inset:0;background-size:cover;background-position:center;opacity:0;transform:scale(1.12);mix-blend-mode:soft-light;transition:opacity calc(var(--mm-speed,.34s) * 1.8) ease,transform calc(var(--mm-speed,.34s) * 2.4) ease;z-index:-1;border-radius:inherit}
.mm-cap:hover{transform:translateY(-6px);border-color:transparent;box-shadow:0 22px 44px rgba(var(--mm-accent-rgb,231,33,58),.25)}
.mm-cap:hover::before{transform:translateY(0)}
.mm-cap:hover .mm-cap__img{opacity:.5;transform:scale(1.02)}
.mm-cap__num{font-family:monospace;font-size:.78rem;color:var(--mm-accent);transition:color var(--mm-speed,.34s) var(--mm-ease)}
.mm-cap__ico{width:52px;height:52px;border-radius:14px;background:var(--mm-accent-soft,rgba(231,33,58,.12));color:var(--mm-accent);display:grid;place-items:center;font-size:1.5rem;margin:16px 0 auto;transition:all var(--mm-speed,.34s) var(--mm-ease)}
.mm-cap h3{font-size:1.26rem;font-weight:700;margin:20px 0 8px;transition:color var(--mm-speed,.34s) var(--mm-ease)}
.mm-cap p{margin:0;font-size:.92rem;line-height:1.6;transition:color var(--mm-speed,.34s) var(--mm-ease)}
.mm-cap__arrow{position:absolute;bottom:24px;right:24px;font-size:1.2rem;color:var(--mm-accent);opacity:0;transform:translate(-8px,8px);transition:all var(--mm-speed,.34s) var(--mm-ease)}
.mm-cap:hover .mm-cap__num{color:rgba(255,255,255,.8)}
.mm-cap:hover .mm-cap__ico{background:rgba(255,255,255,.18);color:#fff}
.mm-cap:hover h3{color:#fff}
.mm-cap:hover p{color:rgba(255,255,255,.85)}
.mm-cap:hover .mm-cap__arrow{opacity:1;transform:none;color:#fff}

/* ---------- Modules globaux ---------- */
.mm-progress{position:fixed;top:0;left:0;height:3px;width:0;background:linear-gradient(90deg,var(--mm-accent),#0090e7);z-index:99999}
.mm-cursor-dot,.mm-cursor-ring{position:fixed;top:0;left:0;border-radius:50%;pointer-events:none;z-index:99999;mix-blend-mode:difference}
.mm-cursor-dot{width:7px;height:7px;background:#fff;transform:translate(-50%,-50%)}
.mm-cursor-ring{width:38px;height:38px;border:1.5px solid #fff;transform:translate(-50%,-50%)}
@media(hover:none){.mm-cursor-dot,.mm-cursor-ring{display:none}}
.mm-top{position:fixed;bottom:24px;right:24px;z-index:99996;width:58px;height:58px;cursor:pointer;opacity:0;pointer-events:none;transform:translateY(14px);transition:opacity var(--mm-speed,.34s) var(--mm-ease),transform var(--mm-speed,.34s) var(--mm-ease);background:transparent;border:none;padding:0}
.mm-top.on{opacity:1;pointer-events:auto;transform:none}
.mm-top svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg)}
.mm-top circle{fill:none;stroke-width:3}
.mm-top .track{stroke:var(--mm-border)}
.mm-top .bar{stroke:var(--mm-accent);stroke-linecap:round}
.mm-top .core{position:absolute;inset:7px;border-radius:50%;background:rgba(255,255,255,.88);backdrop-filter:blur(8px);display:grid;place-items:center;color:var(--mm-title-color,#1e293b);font-size:1.05rem;box-shadow:0 8px 20px rgba(15,23,42,.14);transition:all var(--mm-speed,.34s) var(--mm-ease)}
.mm-top:hover .core{background:var(--mm-accent);color:#fff;transform:scale(1.06)}
.mm-blur-bottom{position:fixed;left:0;right:0;bottom:0;height:120px;z-index:99990;pointer-events:none}
.mm-blur-bottom span{position:absolute;inset:0}
.mm-blur-bottom span:nth-child(1){backdrop-filter:blur(1px);-webkit-backdrop-filter:blur(1px);-webkit-mask-image:linear-gradient(0deg,#000 20%,transparent 60%);mask-image:linear-gradient(0deg,#000 20%,transparent 60%)}
.mm-blur-bottom span:nth-child(2){backdrop-filter:blur(3px);-webkit-backdrop-filter:blur(3px);-webkit-mask-image:linear-gradient(0deg,#000 10%,transparent 45%);mask-image:linear-gradient(0deg,#000 10%,transparent 45%)}
.mm-blur-bottom span:nth-child(3){backdrop-filter:blur(7px);-webkit-backdrop-filter:blur(7px);-webkit-mask-image:linear-gradient(0deg,#000 0%,transparent 30%);mask-image:linear-gradient(0deg,#000 0%,transparent 30%)}

/* ---------- Classes utilitaires (applicables sur tout module Divi) ---------- */
.mmu-reveal{opacity:0;transform:translateY(36px)}
.mmu-reveal-left{opacity:0;transform:translateX(-40px)}
.mmu-reveal-right{opacity:0;transform:translateX(40px)}
.mmu-hover-lift{transition:transform var(--mm-speed,.34s) var(--mm-ease),box-shadow var(--mm-speed,.34s) var(--mm-ease)}
.mmu-hover-lift:hover{transform:translateY(-6px);box-shadow:0 18px 36px rgba(15,23,42,.12)}
.mmu-hover-zoom{overflow:hidden;border-radius:var(--mm-radius,16px)}
.mmu-hover-zoom img{transition:transform calc(var(--mm-speed,.34s) * 1.8) ease;display:block;width:100%}
.mmu-hover-zoom:hover img{transform:scale(1.07)}
.mmu-glass{background:rgba(255,255,255,.14) !important;border:1px solid rgba(255,255,255,.25);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);border-radius:var(--mm-radius,16px)}
.mmu-radius{border-radius:var(--mm-radius,16px);overflow:hidden}
.mmu-magnetic{will-change:transform;display:inline-block}
.mmu-parallax-img{overflow:hidden}
.mmu-parallax-img img{will-change:transform;display:block;width:100%;scale:1.15}

/* ---- WOW EFFECTS (v1.3) ---- */

/* Bouton : le fond couleur d'accent monte depuis le bas au survol */
.mmu-btn-swipe{position:relative;overflow:hidden;isolation:isolate;z-index:0;transition:color var(--mm-speed,.34s) var(--mm-ease)}
.mmu-btn-swipe::before{content:'';position:absolute;inset:0;background:var(--mm-accent);transform:translateY(101%);transition:transform calc(var(--mm-speed,.34s) * 1.3) var(--mm-ease);z-index:-1;border-radius:inherit}
.mmu-btn-swipe:hover::before{transform:translateY(0)}
.mmu-btn-swipe:hover,.mmu-btn-swipe:hover *{color:#fff !important;border-color:transparent !important}

/* Bouton : lueur colorée au survol */
.mmu-btn-glow{transition:box-shadow calc(var(--mm-speed,.34s) * 1.4) var(--mm-ease),transform var(--mm-speed,.34s) var(--mm-ease)}
.mmu-btn-glow:hover{box-shadow:0 0 26px rgba(var(--mm-accent-rgb,231,33,58),.55),0 0 56px rgba(var(--mm-accent-rgb,231,33,58),.32);transform:translateY(-2px)}


/* Texte : au survol, chaque lettre monte en vague (JS enveloppe les caractères) */
.mmu-text-wave{display:inline-block;cursor:default}
.mmu-text-wave .mm-char{display:inline-block;will-change:transform}
.mmu-text-wave .mm-space{display:inline-block;width:.28em}

/* Scroll reveal fort : image révélée par un masque (clip-path) au scroll */
.mmu-scroll-reveal{clip-path:inset(0 100% 0 0);-webkit-clip-path:inset(0 100% 0 0);will-change:clip-path}

/* Scroll tilt : inclinaison 3D légère en fonction de la position de scroll */
.mmu-scroll-tilt{will-change:transform;transform-style:preserve-3d}

/* Cursor follow : l'élément suit la souris dans son conteneur parent (décorations, images flottantes) */
.mmu-cursor-follow{will-change:transform;transition:transform 0s}
@media(hover:none){.mmu-cursor-follow{transform:none !important}}

/* =====================================================================
   CLASSES POUR MODULES DIVI (v1.7)
   À poser dans le champ « Classe CSS » (onglet Avancé) d'un module Divi.
   Réglages fins via « Attributs personnalisés » Divi : data-mm-duration,
   data-mm-distance, data-mm-direction (lus par mm-core.js qui pose les
   variables CSS ci-dessous). Défauts autonomes : fonctionnent sans réglage.
   ===================================================================== */

/* 1 · Rotation permanente ------------------------------------------- */
.mmu-rotate{animation:mmuRotate var(--mmu-dur,20s) linear infinite;animation-direction:var(--mmu-dir,normal);transform-origin:center;will-change:transform}
@keyframes mmuRotate{to{transform:rotate(360deg)}}

/* 2 · Flottement vertical ------------------------------------------- */
.mmu-float{animation:mmuFloat var(--mmu-dur,7s) ease-in-out infinite;will-change:transform}
@keyframes mmuFloat{0%,100%{transform:translateY(0)}50%{transform:translateY(calc(-1 * var(--mmu-dist,16px)))}}


/* 5 · Balancement pendulaire (swing) -------------------------------- */
.mmu-swing{animation:mmuSwing var(--mmu-dur,7s) ease-in-out infinite;transform-origin:top center;will-change:transform}
@keyframes mmuSwing{0%,100%{transform:rotate(calc(-1 * var(--mmu-angle,3deg)))}50%{transform:rotate(var(--mmu-angle,3deg))}}

/* 6 · Ken Burns : zoom + panoramique lent (cible l'image interne) --- */
.mmu-kenburns{overflow:hidden}
.mmu-kenburns img{width:100%;height:100%;object-fit:cover;transform-origin:center;animation:mmuKenburns var(--mmu-dur,40s) ease-in-out infinite alternate;will-change:transform}
/* Si le fond est porté par la section elle-même (pas d'<img>), fallback background-size. */
.mmu-kenburns.mmu-kb-bg{animation:mmuKenburnsBg var(--mmu-dur,40s) ease-in-out infinite alternate;background-size:cover;background-position:center}
@keyframes mmuKenburns{from{transform:scale(1) translate(0,0)}to{transform:scale(1.14) translate(1.5%,-1.5%)}}
@keyframes mmuKenburnsBg{from{background-size:100%}to{background-size:118%}}

/* 7 · Inclinaison 3D au survol (tilt) ------------------------------- */
.mmu-tilt-hover{transition:transform calc(var(--mm-speed,.34s) * 1.2) var(--mm-ease);transform-style:preserve-3d;will-change:transform}
.mmu-tilt-hover:hover{transform:perspective(900px) rotateX(6deg) rotateY(-6deg) translateY(-4px)}
@media(hover:none){.mmu-tilt-hover:hover{transform:none}}

/* 8 · Défilement vertical en boucle du contenu (marquee vertical) --- */
.mmu-scroll-y{overflow:hidden;position:relative}
.mmu-scroll-y .mmu-sy-track{display:flex;flex-direction:column;will-change:transform}

/* 9-10 · Défilement du fond image (horizontal / vertical) ----------- */
.mmu-bg-scroll-x{background-repeat:repeat-x;background-size:auto 100%}
.mmu-bg-scroll-y{background-repeat:repeat-y;background-size:100% auto}

/* =====================================================================
   CLASSES WOW — RÉAGISSENT AU CURSEUR & DÉCOR (v1.8)
   ===================================================================== */

/* A · Halo lumineux qui suit la souris (avec retard/ease géré en JS) -- */
.mmu-spotlight{position:relative;overflow:hidden;isolation:isolate}
.mmu-spotlight::after{content:'';position:absolute;inset:0;z-index:1;pointer-events:none;border-radius:inherit;
  opacity:0;transition:opacity .45s var(--mm-ease);
  background:radial-gradient(var(--mmu-spot-size,340px) circle at var(--mmu-mx,50%) var(--mmu-my,50%),var(--mmu-spot-color,rgba(255,255,255,.16)),transparent 80%)}
.mmu-spotlight:hover::after{opacity:1}

/* A-bis (v1.12) · Mode IMAGE : au lieu d'un dégradé, c'est une image qui est
   révélée dans le halo. Le masque radial suit le curseur exactement comme le
   dégradé — on ne révèle l'image que sous le faisceau. */
.mmu-spotlight[data-mm-image]::after{
  background-image:var(--mmu-spot-img);
  background-size:cover;background-position:center;
  -webkit-mask-image:radial-gradient(var(--mmu-spot-size,340px) circle at var(--mmu-mx,50%) var(--mmu-my,50%),#000 0%,rgba(0,0,0,.35) 55%,transparent 80%);
  mask-image:radial-gradient(var(--mmu-spot-size,340px) circle at var(--mmu-mx,50%) var(--mmu-my,50%),#000 0%,rgba(0,0,0,.35) 55%,transparent 80%)}

/* A-ter (v1.12) · Variante « carte » : le halo + une bordure douce, prêt à poser
   sur un module Divi qui fait déjà office de carte. */
.mmu-spot-card{position:relative;overflow:hidden;isolation:isolate;
  border-radius:var(--mm-radius,16px);
  border:1px solid var(--mmu-card-border,rgba(148,163,184,.28));
  background:var(--mmu-card-bg,rgba(255,255,255,.6));
  transition:transform var(--mm-speed,.34s) var(--mm-ease),box-shadow var(--mm-speed,.34s) var(--mm-ease),border-color var(--mm-speed,.34s) var(--mm-ease)}
.mmu-spot-card::after{content:'';position:absolute;inset:0;z-index:1;pointer-events:none;border-radius:inherit;
  opacity:0;transition:opacity .45s var(--mm-ease);
  background:radial-gradient(var(--mmu-spot-size,320px) circle at var(--mmu-mx,50%) var(--mmu-my,50%),var(--mmu-spot-color,rgba(231,33,58,.22)),transparent 78%)}
.mmu-spot-card:hover{transform:translateY(-4px);box-shadow:0 22px 44px rgba(15,23,42,.12);border-color:var(--mmu-spot-color,var(--mm-accent))}
.mmu-spot-card:hover::after{opacity:1}
.is-dark .mmu-spot-card{background:var(--mmu-card-bg,rgba(15,23,42,.5));border-color:var(--mmu-card-border,rgba(255,255,255,.12))}

/* B · Bordure lumineuse qui suit le curseur — façon Linear / Vercel (v1.22)
   -----------------------------------------------------------------------
   Réécriture complète de l'effet (inspiré du composant « GlowCard »).
   Le curseur est suivi GLOBALEMENT (position dans la fenêtre, pas relative
   à l'élément) : le halo balaie la page et la teinte de la bordure varie
   avec la position X horizontale. Trois couches :
     · un halo de fond très léger dans la carte,
     · la bordure illuminée (::before) dont la teinte suit le curseur,
     · un point blanc surbrillant (::after) qui renforce le contact.
   Les variables --mmu-gx / --mmu-gy (px, position curseur dans la fenêtre)
   et --mmu-gxp (0→1, position X normalisée) sont posées en JS sur <html>.
   La teinte : --mmu-gb (base) + --mmu-gxp * --mmu-gs (amplitude). */
.mmu-spotlight-border{
  position:relative;border-radius:var(--mm-radius,16px);
  --mmu-gb:220;      /* teinte de base (bleu) */
  --mmu-gs:200;      /* amplitude de variation de teinte selon X */
  --mmu-gsize:200px; /* diamètre du faisceau */
  --mmu-bw:2px;      /* épaisseur de la bordure */
  --mmu-gsat:100%;
  --mmu-glight:55%;
  --mmu-ghue:calc(var(--mmu-gb) + (var(--mmu-gxp,0) * var(--mmu-gs)));
  /* Liseré neutre au repos (et fallback si aucune position n'est posée). */
  border:1px solid var(--mmu-card-border,rgba(148,163,184,.28));
}
.is-dark .mmu-spotlight-border{border-color:var(--mmu-card-border,rgba(255,255,255,.12))}
/* Halo de fond, discret, à l'intérieur de la carte. */
.mmu-spotlight-border::after{
  content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:0;
  background:radial-gradient(var(--mmu-gsize) var(--mmu-gsize) at
    calc((var(--mmu-gx,0) - var(--mmu-ox,0)) * 1px)
    calc((var(--mmu-gy,0) - var(--mmu-oy,0)) * 1px),
    hsl(var(--mmu-ghue) var(--mmu-gsat) 70% / .10),transparent 70%);
}
/* Bordure illuminée : dégradé masqué pour ne peindre que le liseré. */
.mmu-spotlight-border::before{
  content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:1;
  padding:var(--mmu-bw,2px);
  background:radial-gradient(calc(var(--mmu-gsize) * .9) calc(var(--mmu-gsize) * .9) at
    calc((var(--mmu-gx,0) - var(--mmu-ox,0)) * 1px)
    calc((var(--mmu-gy,0) - var(--mmu-oy,0)) * 1px),
    hsl(var(--mmu-ghue) var(--mmu-gsat) var(--mmu-glight) / 1),
    hsl(var(--mmu-ghue) var(--mmu-gsat) var(--mmu-glight) / .35) 40%,transparent 75%);
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);
  -webkit-mask-composite:xor;mask-composite:exclude;
  filter:brightness(1.35);
}
@media(hover:none){
  /* Sur tactile : pas de curseur, on garde juste le liseré neutre. */
  .mmu-spotlight-border::before,.mmu-spotlight-border::after{display:none}
}

/* C · Carte 3D qui s'incline en suivant la souris (+ reflet) ---------- */
.mmu-tilt-3d{position:relative;transform-style:preserve-3d;will-change:transform}
.mmu-tilt-3d::after{content:'';position:absolute;inset:0;border-radius:inherit;pointer-events:none;z-index:2;
  opacity:0;transition:opacity .3s var(--mm-ease);mix-blend-mode:soft-light;
  background:radial-gradient(circle at var(--mmu-mx,50%) var(--mmu-my,50%),rgba(255,255,255,.45),transparent 45%)}
.mmu-tilt-3d.mmu-has-glare:hover::after{opacity:1}
@media(hover:none){.mmu-tilt-3d{transform:none !important}}

/* D · Fond « aurore » : deux nappes de couleur floutées, mouvement lent -- */
.mmu-aurora{position:relative;overflow:hidden;isolation:isolate}
.mmu-aurora::before,.mmu-aurora::after{content:'';position:absolute;inset:-45%;z-index:-1;pointer-events:none;filter:blur(55px);will-change:transform}
.mmu-aurora::before{
  background:
    radial-gradient(42% 42% at 25% 30%,var(--mmu-c1,rgba(231,33,58,.55)),transparent 70%),
    radial-gradient(44% 44% at 78% 25%,var(--mmu-c2,rgba(139,92,246,.5)),transparent 72%);
  animation:mmuAuroraA var(--mmu-dur,18s) ease-in-out infinite}
.mmu-aurora::after{
  background:
    radial-gradient(48% 48% at 62% 78%,var(--mmu-c3,rgba(59,130,246,.45)),transparent 72%),
    radial-gradient(38% 38% at 30% 75%,var(--mmu-c2,rgba(139,92,246,.4)),transparent 70%);
  animation:mmuAuroraB var(--mmu-dur,18s) ease-in-out infinite;animation-delay:-6s}
/* v1.12 : amplitude fortement augmentee (l'ancienne version bougeait de 6-8% en 34s,
   soit un deplacement invisible a l'oeil sous 55px de flou) + 4 etapes pour un
   mouvement non lineaire qui ne "revient" pas sur ses pas. */
@keyframes mmuAuroraA{
  0%,100%{transform:translate3d(-22%,-14%,0) rotate(-12deg) scale(1.05)}
  33%{transform:translate3d(18%,10%,0) rotate(10deg) scale(1.35)}
  66%{transform:translate3d(6%,-18%,0) rotate(-4deg) scale(1.15)}}
@keyframes mmuAuroraB{
  0%,100%{transform:translate3d(20%,16%,0) rotate(10deg) scale(1.25)}
  33%{transform:translate3d(-18%,-12%,0) rotate(-14deg) scale(1.02)}
  66%{transform:translate3d(-4%,20%,0) rotate(6deg) scale(1.3)}}

/* E · Bordure en dégradé qui tourne (carte « premium ») -------------- */
@property --mmu-a{syntax:'<angle>';inherits:false;initial-value:0deg}
.mmu-gradient-border{position:relative;z-index:0;border-radius:var(--mm-radius,16px)}
.mmu-gradient-border::before{content:'';position:absolute;inset:0;border-radius:inherit;padding:var(--mmu-bw,2px);pointer-events:none;
  background:conic-gradient(from var(--mmu-a),var(--mmu-c1,#e7213a),var(--mmu-c2,#8b5cf6),var(--mmu-c3,#3b82f6),var(--mmu-c1,#e7213a));
  -webkit-mask:linear-gradient(#000 0 0) content-box,linear-gradient(#000 0 0);-webkit-mask-composite:xor;mask-composite:exclude;
  animation:mmuBorderFlow var(--mmu-dur,14s) linear infinite}
@keyframes mmuBorderFlow{to{--mmu-a:360deg}}


/* G · Défilement horizontal en boucle du contenu (bande de logos) ---- */
.mmu-scroll-x{overflow:hidden;display:flex;flex-wrap:nowrap}
.mmu-scroll-x .mmu-sx-track{display:flex;flex-direction:row;flex:0 0 auto;width:max-content;will-change:transform}

/* H · Inclinaison selon la vitesse de défilement (skew au scroll) ----- */
.mmu-scroll-skew{will-change:transform;display:block}



/* =====================================================================
   NOUVEAUX MODULES (v1.12)
   ===================================================================== */

/* --- 1 · Grille d'images 3D : mode "auto" (défilement continu) ou
       "scroll" (piloté par le défilement de la page). Un seul module,
       deux moteurs — cf. mm-core.js. ------------------------------- */
.mm-3dgrid{position:relative;overflow:hidden;perspective:var(--mm-3d-persp,1200px);
  min-height:var(--mm-3d-height,560px);display:flex;align-items:center;justify-content:center}
.mm-3dgrid__stage{display:flex;gap:var(--mm-3d-gap,14px);width:max-content;
  transform:rotateX(var(--mm-3d-rx,42deg)) rotateY(var(--mm-3d-ry,0deg)) rotateZ(var(--mm-3d-rz,-32deg)) scale(var(--mm-3d-scale,.9));
  transform-style:preserve-3d;will-change:transform}
.mm-3dgrid__col{display:flex;flex-direction:column;gap:var(--mm-3d-gap,14px);flex:0 0 auto;will-change:transform}
.mm-3dgrid__cell{width:var(--mm-3d-cell,220px);border-radius:var(--mm-radius,16px);overflow:hidden;
  background:rgba(148,163,184,.12);box-shadow:0 12px 30px rgba(15,23,42,.18);
  transition:transform var(--mm-speed,.34s) var(--mm-ease),box-shadow var(--mm-speed,.34s) var(--mm-ease)}
.mm-3dgrid__cell img{width:100%;height:100%;aspect-ratio:var(--mm-3d-ratio,4/3);object-fit:cover;display:block}
.mm-3dgrid__cell:hover{transform:translateZ(40px);box-shadow:0 26px 54px rgba(15,23,42,.3)}
/* Voile de fondu sur les bords, pour que la grille ne soit pas coupée net */
.mm-3dgrid::before{content:'';position:absolute;inset:0;z-index:3;pointer-events:none;
  background:radial-gradient(ellipse at center,transparent 45%,var(--mm-3d-fade,rgba(255,255,255,.92)) 92%)}
.is-dark .mm-3dgrid::before{background:radial-gradient(ellipse at center,transparent 45%,rgba(15,23,42,.92) 92%)}
.mm-3dgrid--flat .mm-3dgrid__stage{transform:none}
.mm-3dgrid--flat{perspective:none}

/* --- 2 · Cartes empilées : au survol, l'éventail se déploie -------- */
.mm-stack{position:relative;display:flex;align-items:center;justify-content:center;
  min-height:var(--mm-stack-h,420px);padding:20px}
.mm-stack__inner{position:relative;width:var(--mm-stack-w,300px);height:var(--mm-stack-h,400px)}
.mm-stack__card{position:absolute;inset:0;border-radius:var(--mm-radius,16px);overflow:hidden;
  background:#fff;border:1px solid var(--mm-border);box-shadow:0 18px 40px rgba(15,23,42,.16);
  transform-origin:bottom center;
  transition:transform .55s cubic-bezier(.22,1,.36,1),box-shadow .55s var(--mm-ease)}
.is-dark .mm-stack__card{background:#0f172a;border-color:rgba(255,255,255,.12)}
.mm-stack__card img{width:100%;height:70%;object-fit:cover;display:block}
.mm-stack__body{padding:16px 18px}
.mm-stack__t{display:block;font-family:var(--mm-font-display,inherit);font-weight:700;font-size:1.02rem;color:var(--mm-title-color,#1e293b);line-height:1.3}
.is-dark .mm-stack__t{color:#fff}
.mm-stack__d{display:block;margin-top:4px;font-size:.86rem;color:var(--mm-text-color,#64748b);line-height:1.45}
/* v1.20 — seule une carte CLIQUABLE passe au premier plan au survol.
   Le sélecteur cible « a.mm-stack__card » : une carte sans lien est rendue en
   <div>, elle garde donc sa place dans la pile et n'attire pas l'attention
   sur un élément qui ne mène nulle part. */
a.mm-stack__card:hover{box-shadow:0 26px 56px rgba(15,23,42,.26);z-index:20 !important}

/* --- 3 · Panneaux réactifs au curseur (onde gaussienne) ------------ */
/* v1.15 — la distance entre panneaux passe par une marge et non par « gap »,
   afin d'accepter les valeurs NÉGATIVES (chevauchement façon jeu de cartes),
   que la propriété CSS gap refuse. */
.mm-panels{display:flex;justify-content:center;
  min-height:var(--mm-panels-h,420px);padding:30px 10px;perspective:1000px}
.mm-panels--row .mm-panels__item + .mm-panels__item{margin-left:var(--mm-panels-gap,10px)}

/* ===== v1.17 — disposition « stack » : pile en profondeur 3D =====
   Les panneaux sont empilés le long de l'axe Z, de plus en plus grands et
   opaques vers l'avant. La scène entière pivote selon la souris, et une onde
   gaussienne soulève les panneaux proches du curseur en écrasant les autres.
   Les panneaux sont en position absolue autour d'un point d'origine de taille
   nulle : leurs marges négatives les centrent sur ce point. */
.mm-panels--stack{align-items:center;perspective:900px;user-select:none;overflow:hidden}
.mm-panels__scene{position:relative;width:0;height:0;transform-style:preserve-3d;
  transform:rotateY(var(--mm-panels-ry,-42deg)) rotateX(var(--mm-panels-rx,18deg)) rotateZ(var(--mm-panels-rz,0deg))}
.mm-panels--stack .mm-panels__item{position:absolute;left:0;top:0;
  border-radius:var(--mm-panels-radius,var(--mm-radius,14px));overflow:hidden;
  pointer-events:none;transform-origin:bottom center;border:none;background:none;
  transform:translateZ(var(--mm-p-z,0px));will-change:transform}
.mm-panels--stack .mm-panels__item::after{content:'';position:absolute;inset:0;border-radius:inherit;
  border:1px solid var(--mm-p-bd,rgba(255,255,255,.15));box-sizing:border-box;pointer-events:none;z-index:4}
.mm-panels--stack .mm-panels__item img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
/* Dégradé coloré en surimpression (multiply) + vignette, comme la référence. */
.mm-panels__grad{position:absolute;inset:0;mix-blend-mode:multiply;z-index:2;pointer-events:none}
.mm-panels__vig{position:absolute;inset:0;z-index:3;pointer-events:none;
  background:linear-gradient(to bottom,rgba(0,0,0,.08) 0%,rgba(0,0,0,.32) 100%)}
.mm-panels--stack .mm-panels__cap{z-index:5}
/* Survol : le panneau passe devant ses voisins (utile si l'espacement est négatif). */
.mm-panels__item:hover{z-index:30}
/* v1.14 — align="bottom" (défaut) : tous les bas sur une même ligne horizontale.
   L'onde fait GRANDIR les panneaux vers le haut (transform-origin en bas) au lieu
   de les déplacer verticalement : la ligne du bas reste donc parfaitement droite. */
.mm-panels--row.mm-panels--bottom{align-items:flex-end}
.mm-panels--row.mm-panels--center{align-items:center}
.mm-panels__item{flex:0 0 var(--mm-panels-w,74px);height:var(--mm-panels-ih,280px);
  border-radius:var(--mm-panels-radius,var(--mm-radius,16px));overflow:hidden;position:relative;
  background:linear-gradient(160deg,var(--mm-accent-soft),rgba(148,163,184,.18));
  border:1px solid var(--mm-border);will-change:transform;transform-style:preserve-3d;
  /* Rotations 3D indépendantes, appliquées au repos et conservées par GSAP. */
  transform:rotateX(var(--mm-panels-rx,0deg)) rotateY(var(--mm-panels-ry,0deg)) rotateZ(var(--mm-panels-rz,0deg))}
.mm-panels--row.mm-panels--bottom .mm-panels__item{transform-origin:bottom center}
.mm-panels--row.mm-panels--center .mm-panels__item{transform-origin:center center}
.is-dark .mm-panels__item{border-color:rgba(255,255,255,.1)}
.mm-panels__item img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.mm-panels__cap{position:absolute;left:0;right:0;bottom:0;padding:12px 10px;z-index:2;
  background:linear-gradient(to top,rgba(15,23,42,.78),transparent);
  color:#fff;font-size:.78rem;font-weight:600;line-height:1.3;
  opacity:0;transition:opacity var(--mm-speed,.34s) var(--mm-ease)}
.mm-panels__item:hover .mm-panels__cap{opacity:1}

/* --- 4 · Rail de focus (refonte v1.18) --------------------------------
   Fond flouté repris de l'image active, diapos voisines floutées et réduites,
   bloc de contexte sorti des cartes et posé sous la scène, pagination + CTA. */
.mm-focus{position:relative;overflow:hidden;isolation:isolate;
  border-radius:var(--mm-radius,16px);padding:36px 0 30px;
  /* Valeurs de repli : le shortcode les surcharge en ligne, mais elles
     garantissent que le JS lit toujours quelque chose de cohérent. */
  --mm-focus-blur:14px;--mm-focus-bgblur:60px;--mm-focus-bgop:.55;--mm-focus-w:30%}

/* Fond : une couche par diapo, seule l'opacité bascule. */
.mm-focus__bg{position:absolute;inset:-10%;z-index:0;pointer-events:none}
.mm-focus__bgimg{position:absolute;inset:0;background-size:cover;background-position:center;
  filter:blur(var(--mm-focus-bgblur,60px)) saturate(1.25);
  transform:scale(1.15);opacity:0;transition:opacity .8s var(--mm-ease)}
.mm-focus__bgimg.is-active{opacity:var(--mm-focus-bgop,.55)}
/* Voile pour garder le texte lisible par-dessus le fond. */
.mm-focus__bg::after{content:'';position:absolute;inset:0;
  background:linear-gradient(to bottom,rgba(0,0,0,.28),rgba(0,0,0,.55))}

.mm-focus__stage{position:relative;z-index:2}
.mm-focus__viewport{overflow:hidden;padding:10px 0}
.mm-focus__container{display:flex;align-items:center;touch-action:pan-y}
/* v1.18.1 — l'état visuel des diapos est porté par le CSS, PAS par le script.
   Le JS ne fait plus que poser la classe .is-active. Conséquences : le rendu
   est correct même si le JS tarde, et surtout les tweens ne peuvent plus
   s'écraser mutuellement à chaque frame de défilement (ce qui empêchait la
   carte centrale d'atteindre son état net). Le rebond est porté par la courbe
   de transition elle-même — un cubic-bezier qui dépasse 1 avant de revenir. */
/* v1.18.2 — l'échelle (et son rebond) sont portées par la CARTE, l'opacité,
   le flou et le basculement 3D par la DIAPO. Séparer les deux évite d'avoir à
   interpoler des listes de transformations différentes, et permet surtout de
   rejouer le rebond en keyframes à chaque changement. */
.mm-focus__slide{flex:0 0 var(--mm-focus-w,30%);min-width:0;padding:0 12px;
  text-decoration:none;will-change:transform,filter,opacity;
  opacity:var(--mm-focus-sop,.45);
  filter:blur(var(--mm-focus-blur,14px));
  transition:transform var(--mm-focus-dur,.6s) ease-out,
             opacity var(--mm-focus-dur,.6s) ease-out,
             filter var(--mm-focus-dur,.6s) ease-out}
.mm-focus__slide.is-active{opacity:1;filter:blur(0)}
/* Léger basculement 3D des voisines, selon leur côté. */
.mm-focus--depth .mm-focus__slide{transform:perspective(1200px) rotateY(0deg)}
.mm-focus--depth .mm-focus__slide.is-left{transform:perspective(1200px) rotateY(var(--mm-focus-tilt,18deg))}
.mm-focus--depth .mm-focus__slide.is-right{transform:perspective(1200px) rotateY(calc(-1 * var(--mm-focus-tilt,18deg)))}

/* Échelle : transition pour l'état de repos… */
.mm-focus__card{transform:scale(var(--mm-focus-sscale,.78));
  transition:transform var(--mm-focus-dur,.6s) var(--mm-focus-bez,cubic-bezier(.34,1.56,.64,1))}
.mm-focus__slide.is-active .mm-focus__card{transform:scale(1)}
/* …et ANIMATION pour le rebond. Une transition interrompue repart de la valeur
   courante — enchaîner les clics écrasait donc les rebonds intermédiaires et
   seul le dernier se jouait. Une animation, elle, rejoue toujours sa courbe
   depuis le début : le rebond se produit à CHAQUE changement. */
.mm-focus__slide.is-active.mm-pop .mm-focus__card{
  animation:mmFocusPop var(--mm-focus-dur,.6s) var(--mm-focus-bez,cubic-bezier(.34,1.56,.64,1))}
@keyframes mmFocusPop{
  from{transform:scale(var(--mm-focus-sscale,.78))}
  to{transform:scale(1)}}
@media(max-width:900px){.mm-focus__slide{flex:0 0 62%}}
.mm-focus__card{position:relative;border-radius:calc(var(--mm-radius,16px) * .9);overflow:hidden;
  aspect-ratio:var(--mm-focus-ratio,3/4);background:rgba(148,163,184,.18)}
.mm-focus--fixed .mm-focus__card{aspect-ratio:auto;height:var(--mm-focus-h,420px)}
.mm-focus__card img{width:100%;height:100%;object-fit:cover;display:block}
/* La diapo active se détache : nette, à pleine échelle, légèrement ombrée. */
.mm-focus__slide.is-active .mm-focus__card{box-shadow:0 30px 60px rgba(0,0,0,.45)}

/* Pied : contexte à gauche, commandes à droite. */
.mm-focus__foot{position:relative;z-index:3;display:flex;align-items:flex-end;justify-content:space-between;
  gap:24px;flex-wrap:wrap;padding:26px 30px 4px}
.mm-focus__metas{position:relative;flex:1 1 320px;min-width:0;min-height:var(--mm-focus-mh,120px)}
.mm-focus__meta{position:absolute;inset:0;display:flex;flex-direction:column;gap:6px;
  opacity:0;visibility:hidden;transform:translateY(14px);
  transition:opacity .35s var(--mm-ease),transform .45s var(--mm-ease),visibility 0s linear .35s}
.mm-focus__meta.is-active{opacity:1;visibility:visible;transform:translateY(0);transition:opacity .35s var(--mm-ease),transform .45s var(--mm-ease),visibility 0s}
.mm-focus__eyebrow{font-size:.72rem;letter-spacing:.16em;text-transform:uppercase;
  font-weight:700;color:var(--mm-accent)}
.mm-focus__title{font-family:var(--mm-font-display,inherit);font-weight:800;
  font-size:clamp(1.6rem,3.4vw,2.6rem);line-height:1.1;color:#fff}
.mm-focus__desc{font-size:.95rem;line-height:1.5;color:rgba(255,255,255,.72);max-width:46ch}

.mm-focus__ctrls{display:flex;align-items:center;gap:14px;flex:0 0 auto}
.mm-focus__pager{display:flex;align-items:center;gap:6px;padding:6px;
  background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.14);
  border-radius:999px;backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
.mm-focus__btn{width:36px;height:36px;border:none;background:transparent;border-radius:999px;
  cursor:pointer;display:inline-flex;align-items:center;justify-content:center;color:rgba(255,255,255,.85);
  transition:background var(--mm-speed,.34s) var(--mm-ease),color var(--mm-speed,.34s) var(--mm-ease)}
.mm-focus__btn:hover{background:rgba(255,255,255,.14);color:#fff}
.mm-focus__btn svg{width:18px;height:18px}
.mm-focus__btn[data-dir="prev"] svg{transform:rotate(180deg)}
.mm-focus__count{font-size:.82rem;letter-spacing:.06em;color:rgba(255,255,255,.6);
  min-width:52px;text-align:center;font-variant-numeric:tabular-nums}
.mm-focus__count b{color:#fff;font-weight:600}
.mm-focus__cta{display:inline-flex;align-items:center;gap:8px;padding:12px 22px;border-radius:999px;
  background:#fff;color:#0f172a;font-weight:700;font-size:.9rem;text-decoration:none;
  transition:transform var(--mm-speed,.34s) var(--mm-ease),box-shadow var(--mm-speed,.34s) var(--mm-ease)}
.mm-focus__cta:hover{transform:translateY(-2px);box-shadow:0 14px 30px rgba(0,0,0,.3)}
.mm-focus__cta svg{width:16px;height:16px}

/* Sans fond flouté : on retombe sur les couleurs du thème. */
.mm-focus--nobg .mm-focus__title{color:var(--mm-title-color,#1e293b)}
.mm-focus--nobg .mm-focus__desc{color:var(--mm-text-color,#64748b)}
.mm-focus--nobg .mm-focus__pager{background:transparent;border-color:var(--mm-border)}
.mm-focus--nobg .mm-focus__btn{color:var(--mm-title-color,#1e293b)}
.mm-focus--nobg .mm-focus__count{color:var(--mm-text-color,#64748b)}
.mm-focus--nobg .mm-focus__count b{color:var(--mm-title-color,#1e293b)}
.mm-focus--nobg .mm-focus__cta{background:var(--mm-accent);color:#fff}

/* --- 5 · Liste « lumina » : navigation numérotée + aperçu image ---- */
.mm-lumina{display:grid;grid-template-columns:1fr;gap:24px;align-items:center}
@media(min-width:900px){.mm-lumina{grid-template-columns:1.05fr .95fr;gap:44px}}
.mm-lumina__list{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.mm-lumina__row{position:relative;border-top:1px solid var(--mm-border)}
.mm-lumina__row:last-child{border-bottom:1px solid var(--mm-border)}
.mm-lumina__link{display:flex;align-items:baseline;gap:16px;padding:18px 4px;text-decoration:none;
  color:var(--mm-title-color,#1e293b);transition:color var(--mm-speed,.34s) var(--mm-ease),padding-left var(--mm-speed,.34s) var(--mm-ease)}
.is-dark .mm-lumina__link{color:#fff}
.mm-lumina__num{flex:0 0 auto;font-family:monospace;font-size:.72rem;letter-spacing:.1em;color:var(--mm-accent);opacity:.85}
.mm-lumina__t{font-family:var(--mm-font-display,inherit);font-weight:600;font-size:clamp(1.15rem,2.6vw,1.9rem);line-height:1.2;
  transition:opacity var(--mm-speed,.34s) var(--mm-ease)}
.mm-lumina__meta{margin-left:auto;font-size:.76rem;letter-spacing:.12em;text-transform:uppercase;opacity:0;
  transition:opacity var(--mm-speed,.34s) var(--mm-ease);white-space:nowrap}
.mm-lumina__row:hover .mm-lumina__link{padding-left:14px;color:var(--mm-accent)}
.mm-lumina__row:hover .mm-lumina__meta{opacity:.7}
/* Les autres lignes s'estompent quand une ligne est survolée */
.mm-lumina__list:hover .mm-lumina__row:not(:hover) .mm-lumina__t{opacity:.38}
.mm-lumina__preview{position:relative;border-radius:var(--mm-radius,16px);overflow:hidden;
  aspect-ratio:var(--mm-lumina-ratio,4/5);background:rgba(148,163,184,.12);order:-1}
@media(min-width:900px){.mm-lumina__preview{order:0}}
.mm-lumina__img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;
  opacity:0;transform:scale(1.06);transition:opacity .6s var(--mm-ease),transform .9s var(--mm-ease)}
.mm-lumina__img.is-on{opacity:1;transform:scale(1)}


/* --- 6 · Témoignages animés (v1.14) : pile de photos en 3D + citation
       révélée mot par mot. ------------------------------------------ */
.mm-testi{display:grid;grid-template-columns:1fr;gap:28px;align-items:center}
@media(min-width:900px){
  .mm-testi{grid-template-columns:minmax(0,.85fr) minmax(0,1.15fr);gap:52px}
  .mm-testi--right .mm-testi__media{order:2}
}
.mm-testi__media{position:relative;width:100%;aspect-ratio:var(--mm-testi-ratio,1/1);perspective:1200px}
/* v1.15 — TOUTES les cartes restent visibles, empilées et légèrement inclinées.
   Plus d'ombre portée : la pile se lit par les décalages d'angle, pas par l'ombre. */
.mm-testi__photo{position:absolute;inset:0;border-radius:var(--mm-testi-radius,var(--mm-radius,16px));
  overflow:hidden;transform-origin:bottom center;backface-visibility:hidden;
  opacity:.7;z-index:1;
  transform:rotate(var(--mm-testi-r,0deg)) scale(.95);
  transition:transform .4s ease-in-out,opacity .4s ease-in-out}
.mm-testi__photo img{width:100%;height:100%;object-fit:cover;display:block;-webkit-user-drag:none;user-select:none}
/* La carte active revient droite, au premier plan, à pleine échelle. */
.mm-testi__photo.is-active{opacity:1;transform:rotate(0deg) scale(1);z-index:999}
/* v1.16 — « elle vient de derrière » : la carte qui devient active décrit un
   court arc vertical (monte puis retombe) pendant sa remise à plat. C'est ce
   mouvement, très bref, qui donne l'impression qu'on tire la carte du dessous
   de la pile. Amplitude réglable via --mm-testi-pop. */
.mm-testi__photo.is-active.mm-pop{animation:mmTestiPop .4s ease-in-out}
@keyframes mmTestiPop{
  0%{transform:rotate(0deg) scale(1) translateY(0)}
  50%{transform:rotate(0deg) scale(1) translateY(calc(-1 * var(--mm-testi-pop,80px)))}
  100%{transform:rotate(0deg) scale(1) translateY(0)}}

.mm-testi__body{display:flex;flex-direction:column;justify-content:center;min-height:0}
/* Pile de citations : toutes superposées en absolu, donc la hauteur du bloc ne
   dépend PLUS de la longueur du texte — les boutons ne bougent jamais. */
.mm-testi__stack{position:relative;min-height:var(--mm-testi-th,190px)}
.mm-testi__quote{margin:0;position:absolute;inset:0;
  opacity:0;visibility:hidden;pointer-events:none;
  transition:opacity .2s ease-in-out,visibility 0s linear .2s}
.mm-testi__quote.is-active{opacity:1;visibility:visible;pointer-events:auto;transition:opacity .2s ease-in-out,visibility 0s}
/* Le bloc entier (nom + fonction + citation) glisse depuis le bas à chaque
   changement, par-dessus l'apparition mot par mot. */
.mm-testi__quote.is-active.mm-pop{animation:mmTestiRise .25s ease-in-out}
@keyframes mmTestiRise{from{transform:translateY(20px);opacity:0}to{transform:translateY(0);opacity:1}}
.mm-testi__text{margin:0;font-family:var(--mm-font-display,inherit);
  font-size:clamp(1.05rem,2.2vw,1.4rem);line-height:1.55;font-weight:400;
  color:var(--mm-title-color,#1e293b)}
.is-dark .mm-testi__text{color:#fff}
/* v1.16 — apparition mot par mot : le mot arrive FLOU et se net(t)oie
   progressivement (blur 10px → 0), en montant légèrement. */
.mm-testi__w{display:inline-block;opacity:0;transform:translateY(5px);filter:blur(10px)}
.mm-testi__quote.is-active .mm-testi__w{animation:mmTestiWord .2s ease-in-out forwards}
@keyframes mmTestiWord{to{opacity:1;transform:translateY(0);filter:blur(0)}}
/* Mode « sans découpage en mots » : le bloc de texte entier passe par le flou. */
.mm-testi--noword .mm-testi__quote.is-active .mm-testi__text{animation:mmTestiBlur .35s ease-in-out}
@keyframes mmTestiBlur{from{filter:blur(10px);opacity:0}to{filter:blur(0);opacity:1}}
/* Nom + fonction en tête du bloc (cf. maquette). */
.mm-testi__who{display:flex;flex-direction:column;gap:1px;margin-bottom:18px}
.mm-testi__name{font-family:var(--mm-font-display,inherit);font-weight:700;
  font-size:clamp(1.2rem,2.4vw,1.6rem);line-height:1.2;color:var(--mm-title-color,#1e293b)}
.is-dark .mm-testi__name{color:#fff}
.mm-testi__role{font-size:.9rem;color:var(--mm-text-color,#64748b)}
.mm-testi__nav{display:flex;gap:10px;margin-top:26px;flex:0 0 auto}
.mm-testi__btn{width:40px;height:40px;border-radius:999px;border:1px solid var(--mm-border);
  background:transparent;cursor:pointer;display:inline-flex;align-items:center;justify-content:center;
  color:var(--mm-title-color,#1e293b);
  transition:background var(--mm-speed,.34s) var(--mm-ease),color var(--mm-speed,.34s) var(--mm-ease),border-color var(--mm-speed,.34s) var(--mm-ease)}
.mm-testi__btn:hover{background:var(--mm-accent);border-color:var(--mm-accent);color:#fff}
.mm-testi__btn svg{width:18px;height:18px;transition:transform var(--mm-speed,.34s) var(--mm-ease)}
.mm-testi__btn[data-dir="prev"]:hover svg{transform:translateX(-2px)}
.mm-testi__btn[data-dir="next"]:hover svg{transform:translateX(2px)}
.is-dark .mm-testi__btn{color:#fff;border-color:rgba(255,255,255,.2)}


/* --- 7 · Accordéon d'images (v1.19) -------------------------------
   Volets étroits en rangée ; celui qui est actif s'ouvre en largeur.
   Le libellé pivote à 90° tant que le volet est fermé. --------------- */
.mm-acc{display:flex;flex-direction:row;align-items:center;justify-content:center;
  gap:var(--mm-acc-gap,16px);padding:8px 0;overflow-x:auto;scrollbar-width:none}
.mm-acc::-webkit-scrollbar{display:none}
.mm-acc__item{position:relative;flex:0 0 auto;
  width:var(--mm-acc-closed,60px);height:var(--mm-acc-h,450px);
  border-radius:var(--mm-acc-radius,var(--mm-radius,16px));overflow:hidden;
  cursor:pointer;text-decoration:none;display:block;
  transition:width var(--mm-acc-dur,.7s) ease-in-out}
.mm-acc__item.is-open{width:var(--mm-acc-open,400px)}
.mm-acc__item img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;display:block}
.mm-acc__veil{position:absolute;inset:0;background:rgba(0,0,0,var(--mm-acc-veil,.4));
  transition:background var(--mm-acc-dur,.7s) ease-in-out}
.mm-acc__item.is-open .mm-acc__veil{background:rgba(0,0,0,calc(var(--mm-acc-veil,.4) * .55))}
/* Libellé : vertical quand fermé, horizontal centré en bas quand ouvert. */
.mm-acc__label{position:absolute;left:50%;bottom:96px;z-index:2;
  color:#fff;font-family:var(--mm-font-display,inherit);font-weight:600;font-size:1.05rem;
  white-space:nowrap;transform:translateX(-50%) rotate(90deg);transform-origin:center;
  transition:transform .3s ease-in-out,bottom .3s ease-in-out}
.mm-acc__item.is-open .mm-acc__label{bottom:24px;transform:translateX(-50%) rotate(0deg)}
.mm-acc__item:focus-visible{outline:2px solid var(--mm-accent);outline-offset:3px}
@media(max-width:700px){
  /* En dessous de 700px, la rangée devient une pile verticale : des volets de
     60px de large sur 450px de haut ne sont pas exploitables au doigt. */
  .mm-acc{flex-direction:column;align-items:stretch;overflow-x:visible}
  .mm-acc__item{width:100% !important;height:var(--mm-acc-closed-h,90px);
    transition:height var(--mm-acc-dur,.7s) ease-in-out}
  .mm-acc__item.is-open{height:var(--mm-acc-h,450px)}
  .mm-acc__label{bottom:24px;transform:translateX(-50%) rotate(0deg)}
}

/* --- 8 · Cartes empilées révélées au défilement (v1.19) ------------ */
/* v1.20 — le module occupe une section HAUTE (300vh par défaut) dans laquelle
   la pile reste COLLÉE au centre de l'écran. C'est ce défilement « à vide »
   qui donne au visiteur la distance nécessaire pour faire partir les cartes
   une à une. Sans conteneur collant, la pile traversait l'écran d'un bloc et
   l'effet ne se voyait pas. */
.mm-scrollcards{position:relative;height:var(--mm-sc-len,300vh);perspective:1000px}
.mm-scrollcards__sticky{position:sticky;top:0;height:100vh;height:100svh;
  display:flex;align-items:center;justify-content:center;padding:40px 16px}
.mm-scrollcards__stack{position:relative;
  width:var(--mm-sc-w,350px);max-width:100%;height:var(--mm-sc-h,520px)}
.mm-sc__card{position:absolute;left:0;right:0;top:0;
  display:flex;flex-direction:column;gap:18px;
  height:var(--mm-sc-h,520px);padding:26px;
  border-radius:var(--mm-sc-radius,calc(var(--mm-radius,16px) * 1.2));
  border:1px solid var(--mm-border);text-decoration:none;
  backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);
  backface-visibility:hidden;will-change:transform;
  transform-origin:center center}
.mm-scrollcards--light .mm-sc__card{background:rgba(255,255,255,.86);color:var(--mm-title-color,#1e293b)}
.mm-scrollcards--dark .mm-sc__card{background:rgba(15,23,42,.82);border-color:rgba(255,255,255,.12);color:#fff}
.mm-scrollcards--noshadow .mm-sc__card{box-shadow:none !important;filter:none !important}
.mm-sc__media{display:block;border-radius:calc(var(--mm-radius,16px) * .8);overflow:hidden;flex:1 1 auto;min-height:0}
.mm-sc__media img{width:100%;height:100%;object-fit:cover;display:block;min-height:180px}
.mm-sc__txt{display:flex;flex-direction:column;gap:8px;flex:0 0 auto}
.mm-sc__eyebrow{font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;font-weight:700;color:var(--mm-accent)}
.mm-sc__title{font-family:var(--mm-font-display,inherit);font-weight:700;
  font-size:clamp(1.2rem,2.4vw,1.7rem);line-height:1.2}
.mm-sc__body{font-size:.94rem;line-height:1.55;opacity:.78}
.mm-sc__cta{display:inline-flex;align-items:center;gap:7px;margin-top:4px;
  font-weight:700;font-size:.9rem;color:var(--mm-accent)}
.mm-sc__cta svg{width:16px;height:16px;transition:transform var(--mm-speed,.34s) var(--mm-ease)}
a.mm-sc__card:hover .mm-sc__cta svg{transform:translateX(4px)}
/* Idem ici : seule une carte cliquable réagit au survol. */
a.mm-sc__card{cursor:pointer}
a.mm-sc__card:hover{box-shadow:0 26px 56px rgba(15,23,42,.24)}

/* Repli sans défilement piloté : la pile se déroule en colonne classique. */
.mm-scrollcards--static{height:auto}
.mm-scrollcards--static .mm-scrollcards__sticky{position:static;height:auto;display:block;padding:0}
.mm-scrollcards--static .mm-scrollcards__stack{width:100%;height:auto}
.mm-scrollcards--static .mm-sc__card{position:relative;height:auto;min-height:0;margin-bottom:20px;transform:none !important}


/* --- 9 · Anneaux de progression (v1.21) ---------------------------
   Anneaux concentriques qui se remplissent à l'entrée dans l'écran.
   Le remplissage passe par stroke-dashoffset : c'est la seule façon
   d'animer un arc SVG sans dépendre d'une librairie. ----------------- */
.mm-rings{display:flex;flex-direction:column;gap:22px;align-items:center}
.mm-rings__title{margin:0;font-family:var(--mm-font-display,inherit);font-weight:600;
  font-size:clamp(1.2rem,2.4vw,1.6rem);color:var(--mm-title-color,#1e293b);text-align:center}
.is-dark .mm-rings__title{color:#fff}
.mm-rings__body{display:flex;align-items:center;gap:34px;flex-wrap:wrap;justify-content:center}
.mm-rings--column .mm-rings__body{flex-direction:column;gap:22px}
.mm-rings__stage{position:relative;flex:0 0 auto;
  width:var(--mm-rings-size,220px);height:var(--mm-rings-size,220px)}
.mm-ring{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%) rotate(-90deg);
  color:rgba(148,163,184,.28)}
.is-dark .mm-ring{color:rgba(255,255,255,.14)}
.mm-ring__bar{stroke-dasharray:var(--mm-ring-circ,300);
  stroke-dashoffset:var(--mm-ring-circ,300);
  filter:drop-shadow(0 0 6px rgba(0,0,0,.15))}
.mm-rings.is-on .mm-ring__bar{
  transition:stroke-dashoffset var(--mm-rings-dur,1.8s) cubic-bezier(.4,0,.2,1) var(--mm-ring-delay,0ms);
  stroke-dashoffset:var(--mm-ring-off,0)}
.mm-rings__details{display:flex;flex-direction:column;gap:18px;min-width:0}
.mm-rings--column .mm-rings__details{flex-direction:row;flex-wrap:wrap;gap:22px;justify-content:center}
.mm-ring__row{display:flex;flex-direction:column;gap:1px}
.mm-ring__label{font-size:.78rem;font-weight:600;letter-spacing:.08em;text-transform:uppercase;
  color:var(--mm-text-color,#64748b)}
.mm-ring__value{font-family:var(--mm-font-display,inherit);font-weight:700;font-size:1.55rem;line-height:1.1}
.mm-ring__sep{opacity:.45;margin:0 1px}
.mm-ring__unit{margin-left:5px;font-size:.9rem;font-weight:500;color:var(--mm-text-color,#64748b)}

/* --- 10 · Carte retournable (v1.21) -------------------------------- */
.mm-flip{position:relative;width:var(--mm-flip-w,280px);height:var(--mm-flip-h,320px);
  max-width:100%;perspective:2000px;outline:none}
.mm-flip__inner{position:relative;width:100%;height:100%;transform-style:preserve-3d;
  transition:transform .5s cubic-bezier(.77,0,.175,1)}
.mm-flip.is-flipped .mm-flip__inner{transform:rotateY(180deg)}
.mm-flip__face{position:absolute;inset:0;backface-visibility:hidden;-webkit-backface-visibility:hidden;
  border-radius:calc(var(--mm-radius,16px) * 1.05);overflow:hidden;
  border:1px solid var(--mm-border);background:#fff;
  display:flex;flex-direction:column;
  transition:box-shadow .5s var(--mm-ease)}
.is-dark .mm-flip__face{background:#0f172a;border-color:rgba(255,255,255,.1)}
.mm-flip:hover .mm-flip__face{box-shadow:0 18px 40px rgba(15,23,42,.16)}
.mm-flip__face--front{transform:rotateY(0deg);justify-content:flex-end;
  background:linear-gradient(to bottom,rgba(148,163,184,.12),#fff)}
.is-dark .mm-flip__face--front{background:linear-gradient(to bottom,rgba(30,41,59,.9),#020617)}
.mm-flip__face--back{transform:rotateY(180deg);padding:22px;justify-content:space-between;gap:16px}
.mm-flip__bg{position:absolute;inset:0;background-size:cover;background-position:center;z-index:0}
.mm-flip__bg::after{content:'';position:absolute;inset:0;
  background:linear-gradient(to top,rgba(0,0,0,.72),rgba(0,0,0,.1) 60%,transparent)}
/* Halo pulsé du recto : plusieurs cercles décalés dans le temps. */
.mm-flip__glow{position:absolute;left:50%;top:38%;width:190px;height:100px;transform:translateX(-50%);
  z-index:0;pointer-events:none}
.mm-flip__glow::before,.mm-flip__glow::after{content:'';position:absolute;left:50%;top:50%;
  width:50px;height:50px;margin:-25px 0 0 -25px;border-radius:140px;opacity:0;
  box-shadow:0 0 50px var(--mm-flip-accent,var(--mm-accent));
  animation:mmFlipGlow 3s linear infinite}
.mm-flip__glow::after{animation-delay:1.5s}
.mm-flip:hover .mm-flip__glow::before,.mm-flip:hover .mm-flip__glow::after{animation-duration:2s}
@keyframes mmFlipGlow{
  0%{transform:scale(2);opacity:0}
  50%{transform:translateY(-5px) scale(1);opacity:1}
  100%{transform:translateY(5px) scale(.1);opacity:0}}
.mm-flip__front-txt{position:relative;z-index:2;padding:20px;display:flex;flex-direction:column;gap:6px}
.mm-flip__bg ~ .mm-flip__front-txt .mm-flip__t,
.mm-flip__bg ~ .mm-flip__front-txt .mm-flip__st{color:#fff}
.mm-flip__t{font-family:var(--mm-font-display,inherit);font-weight:700;font-size:1.1rem;
  line-height:1.3;color:var(--mm-title-color,#1e293b);
  transition:transform .5s var(--mm-ease)}
.is-dark .mm-flip__t{color:#fff}
.mm-flip__st{font-size:.88rem;line-height:1.4;color:var(--mm-text-color,#64748b);
  transition:transform .5s var(--mm-ease);transition-delay:50ms}
.mm-flip:hover .mm-flip__t,.mm-flip:hover .mm-flip__st{transform:translateY(-4px)}
.mm-flip__badge{position:absolute;right:18px;bottom:22px;z-index:3;
  display:inline-flex;align-items:center;justify-content:center;width:30px;height:30px;
  border-radius:9px;color:var(--mm-flip-accent,var(--mm-accent));
  background:color-mix(in srgb,var(--mm-flip-accent,var(--mm-accent)) 14%,transparent);
  transition:transform .3s var(--mm-ease)}
.mm-flip:hover .mm-flip__badge{transform:rotate(-12deg) scale(1.1)}
.mm-flip__back-top{display:flex;flex-direction:column;gap:10px;overflow:auto;min-height:0}
.mm-flip__d{font-size:.88rem;line-height:1.5;color:var(--mm-text-color,#64748b)}
.mm-flip__feats{list-style:none;margin:6px 0 0;padding:0;display:flex;flex-direction:column;gap:7px}
.mm-flip__feats li{display:flex;align-items:center;gap:8px;font-size:.86rem;
  color:var(--mm-text-color,#475569);
  opacity:0;transform:translateX(-10px);
  transition:opacity .3s cubic-bezier(.23,1,.32,1),transform .3s cubic-bezier(.23,1,.32,1);
  transition-delay:calc(150ms + var(--mm-flip-i,0) * 50ms)}
.is-dark .mm-flip__feats li{color:#cbd5e1}
.mm-flip.is-flipped .mm-flip__feats li{opacity:1;transform:translateX(0)}
.mm-flip__feats svg{flex:0 0 auto;color:var(--mm-flip-accent,var(--mm-accent))}
.mm-flip__extra{font-size:.86rem;line-height:1.5;color:var(--mm-text-color,#64748b)}
.mm-flip__cta{display:flex;align-items:center;justify-content:space-between;gap:10px;
  padding:12px 14px;border-radius:12px;text-decoration:none;
  background:rgba(148,163,184,.14);color:var(--mm-title-color,#1e293b);
  font-weight:600;font-size:.88rem;flex:0 0 auto;
  border-top:1px solid var(--mm-border);
  transition:background var(--mm-speed,.34s) var(--mm-ease),color var(--mm-speed,.34s) var(--mm-ease),transform var(--mm-speed,.34s) var(--mm-ease)}
.is-dark .mm-flip__cta{background:rgba(255,255,255,.08);color:#fff}
.mm-flip__cta:hover{background:color-mix(in srgb,var(--mm-flip-accent,var(--mm-accent)) 12%,transparent);
  color:var(--mm-flip-accent,var(--mm-accent));transform:scale(1.02)}
.mm-flip__cta svg{color:var(--mm-flip-accent,var(--mm-accent));transition:transform .3s var(--mm-ease)}
.mm-flip__cta:hover svg{transform:translateX(3px)}
.mm-flip:focus-visible{outline:2px solid var(--mm-accent);outline-offset:4px;border-radius:18px}

/* ---------- Timeline (v1.22) ----------------------------------------
   Frise verticale : chaque entrée a un point sur un rail à gauche, un
   titre « sticky » et un contenu libre. Une barre de progression se
   remplit au défilement (dégradé accent → bleu), pilotée en JS. */
.mm-timeline{width:100%}
.mm-timeline__head{max-width:56rem;margin:0 auto;padding:0 4px 8px}
.mm-timeline__title{font-family:var(--mm-font-display,inherit);font-weight:800;
  font-size:clamp(1.4rem,3.4vw,2.4rem);line-height:1.15;color:var(--mm-title-color,#1e293b);margin:0 0 10px}
.is-dark .mm-timeline__title{color:#fff}
.mm-timeline__intro{font-size:.98rem;line-height:1.6;color:var(--mm-text-color,#64748b);max-width:34rem;margin:0}
.mm-timeline__list{position:relative;max-width:72rem;margin:24px auto 0}
/* Rail vertical + barre de progression. Le rail est calé à gauche ; sur
   desktop, la colonne de titres occupe la gouttière. */
.mm-timeline__rail{position:absolute;top:0;left:20px;width:2px;height:100%;overflow:hidden;
  background:linear-gradient(to bottom,transparent 0%,var(--mm-border,#e2e8f0) 8%,var(--mm-border,#e2e8f0) 92%,transparent 100%);
  -webkit-mask-image:linear-gradient(to bottom,transparent 0,#000 6%,#000 94%,transparent 100%);
  mask-image:linear-gradient(to bottom,transparent 0,#000 6%,#000 94%,transparent 100%)}
.is-dark .mm-timeline__rail{background:linear-gradient(to bottom,transparent 0%,rgba(255,255,255,.16) 8%,rgba(255,255,255,.16) 92%,transparent 100%)}
.mm-timeline__bar{position:absolute;inset-inline:0;top:0;width:2px;height:0;border-radius:999px;
  background:linear-gradient(to top,var(--mm-accent) 0%,#3b82f6 60%,transparent 100%);opacity:0;
  transition:opacity .4s var(--mm-ease)}
.mm-timeline.is-on .mm-timeline__bar{opacity:1}
@media(min-width:768px){.mm-timeline__rail,.mm-timeline__bar{left:32px}}
/* Une entrée */
.mm-timeline__entry{position:relative;display:flex;flex-direction:column;
  padding:36px 0 0 56px}
@media(min-width:768px){
  .mm-timeline__entry{flex-direction:row;gap:40px;padding:80px 0 0 0}
  .mm-timeline__entry:first-child{padding-top:20px}
}
/* Colonne de gauche : point + titre (sticky sur desktop) */
.mm-timeline__aside{position:relative;display:flex;align-items:center;gap:14px}
@media(min-width:768px){
  .mm-timeline__aside{position:sticky;top:96px;align-self:flex-start;
    flex:0 0 auto;width:16rem;max-width:22rem}
}
.mm-timeline__dot{position:absolute;left:-56px;top:0;width:40px;height:40px;border-radius:50%;
  background:var(--mm-badge-bg,#fff);display:grid;place-items:center}
.is-dark .mm-timeline__dot{background:#0b1220}
@media(min-width:768px){.mm-timeline__dot{left:14px;top:-4px}}
.mm-timeline__dot span{width:14px;height:14px;border-radius:50%;
  background:var(--mm-accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--mm-accent) 22%,transparent)}
.mm-timeline__date{font-family:var(--mm-font-display,inherit);font-weight:800;
  font-size:clamp(1.1rem,2.4vw,2rem);color:var(--mm-title-color,#94a3b8);line-height:1}
@media(min-width:768px){.mm-timeline__date{padding-left:72px;font-size:clamp(1.4rem,3vw,3rem);color:#94a3b8}}
.is-dark .mm-timeline__date{color:#64748b}
/* Colonne de droite : contenu */
.mm-timeline__body{position:relative;flex:1 1 auto;min-width:0}
.mm-timeline__body > :first-child{margin-top:0}
.mm-timeline__body p{font-size:.95rem;line-height:1.65;color:var(--mm-text-color,#64748b);margin:0 0 14px}
.is-dark .mm-timeline__body p{color:rgba(255,255,255,.72)}
.mm-timeline__body img{border-radius:var(--mm-radius,14px);width:100%;height:auto;display:block}
.mm-timeline__grid{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:0 0 8px}
.mm-timeline__grid img{height:120px;object-fit:cover;
  box-shadow:0 1px 2px rgba(15,23,42,.08),0 8px 30px rgba(15,23,42,.06)}
@media(min-width:768px){.mm-timeline__grid img{height:200px}}
/* Entrée d'apparition au scroll (désactivée si reduced-motion, voir plus bas) */
.mm-timeline__entry{opacity:0;transform:translateY(24px);
  transition:opacity .6s var(--mm-ease),transform .6s var(--mm-ease)}
.mm-timeline__entry.is-in{opacity:1;transform:none}

/* ---------- Effets convertis en modules (v1.22) --------------------
   Conteneur générique pour les modules aurora / spotlight / bordures.
   L'inner porte le contenu au-dessus des pseudo-éléments d'effet et
   remplit toute la surface pour que les fonds restent visibles même
   quand le module est vide (simple cadre). */
.mm-fx{position:relative;display:block}
.mm-fx__inner{position:relative;z-index:2;display:flex;flex-direction:column;
  min-height:inherit;height:100%}
.mm-fx__inner:empty{min-height:inherit}
/* Les bordures (spotlight-border / gradient-border) n'ont pas overflow:hidden
   car le halo déborde volontairement ; les fonds (aurora/spotlight) le gardent
   via leur propre classe. */

/* ---------- Aurora Shader (v1.23) ----------------------------------
   Le canvas WebGL est injecté et positionné en JS (position:absolute,
   inset:0). Ici, seulement le conteneur et un fond de repli discret
   au cas où WebGL serait indisponible. */
.mm-shader{position:relative;overflow:hidden;isolation:isolate;
  background:#031d26} /* teinte sombre proche du preset, évite le flash blanc */
.mm-shader__canvas{z-index:0}
.mm-shader--nofallback{
  background:linear-gradient(135deg,#031d26 0%,#1b6ba8 55%,#5ad2f4 100%)}

/* ---------- Texte animé « roulement » au survol (v1.23) ------------
   Deux calques de lettres superposés : au survol, le calque du haut
   glisse vers le haut, celui du bas remonte depuis le dessous. Le
   délai par lettre (posé en inline) crée la vague. Aucun JS. */
.mm-textroll{position:relative;display:inline-block;overflow:hidden;
  line-height:.85;vertical-align:top;cursor:pointer;color:inherit;text-decoration:none}
.mm-textroll__layer{display:block}
.mm-textroll__top{position:relative}
.mm-textroll__bottom{position:absolute;inset:0}
.mm-textroll__ch{display:inline-block;white-space:pre;
  transition:transform .5s ease-in-out;transition-delay:inherit;will-change:transform}
/* Position de repos : le haut est en place, le bas attend sous la ligne. */
.mm-textroll__top .mm-textroll__ch{transform:translateY(0)}
.mm-textroll__bottom .mm-textroll__ch{transform:translateY(100%)}
/* Au survol (ou focus clavier sur le lien) : bascule. */
.mm-textroll:hover .mm-textroll__top .mm-textroll__ch,
.mm-textroll:focus-visible .mm-textroll__top .mm-textroll__ch{transform:translateY(-100%)}
.mm-textroll:hover .mm-textroll__bottom .mm-textroll__ch,
.mm-textroll:focus-visible .mm-textroll__bottom .mm-textroll__ch{transform:translateY(0)}
/* Texte accessible pour lecteurs d'écran (les calques sont aria-hidden). */
.mm-textroll__sr{position:absolute;width:1px;height:1px;padding:0;margin:-1px;
  overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* ---------- Accessibilité ---------- */
@media(prefers-reduced-motion:reduce){
  .mm-module *,.mm-top,.mm-progress{animation-duration:.01ms !important;transition-duration:.01ms !important}
  .mmu-reveal,.mmu-reveal-left,.mmu-reveal-right{opacity:1;transform:none}
  .mmu-rotate,.mmu-float,.mmu-swing,.mmu-kenburns img,.mmu-kenburns.mmu-kb-bg,.mmu-aurora::before,.mmu-aurora::after,.mmu-gradient-border::before,.mm-3dgrid__col,.mm-panels__item,.mm-testi__w,.mm-testi__photo,.mm-testi__quote,.mm-testi__text,.mm-flip__glow::before,.mm-flip__glow::after{animation:none !important}
  /* Rail de focus : on garde la hiérarchie visuelle mais sans rebond. */
  .mm-focus__card{transition-timing-function:ease-out !important;animation:none !important}
  /* Le texte doit rester lisible : on annule le flou et le décalage. */
  .mm-testi__w{opacity:1;transform:none;filter:none}
  /* Timeline : entrées immédiatement visibles, barre remplie. */
  .mm-timeline__entry{opacity:1 !important;transform:none !important}
  .mm-timeline .mm-timeline__bar{opacity:1}
  /* Texte roulant : pas de mouvement, on fige l'état de repos. */
  .mm-textroll__ch{transition:none !important}
  .mm-textroll:hover .mm-textroll__top .mm-textroll__ch,
  .mm-textroll:focus-visible .mm-textroll__top .mm-textroll__ch{transform:translateY(0)}
  .mm-textroll:hover .mm-textroll__bottom .mm-textroll__ch,
  .mm-textroll:focus-visible .mm-textroll__bottom .mm-textroll__ch{transform:translateY(100%)}
}
