/* cmsms stylesheet: ELS Conseil 2026 modified: dimanche 26 juillet 2026 04:56:02 */
/* Polices auto-hébergées (Sora + Manrope, variables, OFL). Récupérées de Google Fonts, servies en local pour retirer la requête render-blocking. url() relatif à tmp/cache/ -> valable en local (/els-conseil/) comme en prod (/). */
@font-face{font-family:'Manrope';font-style:normal;font-weight:400 700;font-display:swap;src:url(../../uploads/fonts/Manrope-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Manrope';font-style:normal;font-weight:400 700;font-display:swap;src:url(../../uploads/fonts/Manrope-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
@font-face{font-family:'Sora';font-style:normal;font-weight:500 800;font-display:swap;src:url(../../uploads/fonts/Sora-latin-ext.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF}
@font-face{font-family:'Sora';font-style:normal;font-weight:500 800;font-display:swap;src:url(../../uploads/fonts/Sora-latin.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD}
/* ==========================================================================
   ELS Conseil — Feuille de style 2026
   Reprend les tokens du handoff Claude Design (README.md §4).
   Les styles de mise en page restent en ligne dans le markup, conformément
   à l'exigence de fidélité au pixel. Ne sont centralisés ici que :
   les règles globales, les animations, le responsive et les états :hover
   (qui ne peuvent pas s'exprimer en style inline).
   ========================================================================== */

/* --- Base ---------------------------------------------------------------- */
* { box-sizing: border-box; }
body { margin: 0; }
a { color: #256EC7; }
a:hover { color: #1F63C4; }
img { max-width: 100%; }

/* --- Apparition au scroll ------------------------------------------------ */
/* Repli sans JS : .els-reveal reste visible tant que <html> n'a pas la classe
   els-js. Le script l'ajoute avant le premier rendu. */
.els-js .els-reveal {
  opacity: 0;
  transform: translateY(26px);
  transition: opacity .7s cubic-bezier(.16,.8,.24,1), transform .7s cubic-bezier(.16,.8,.24,1);
}
.els-js .els-reveal.is-in { opacity: 1; transform: none; }

/* --- Animations ---------------------------------------------------------- */
@keyframes els-float { 0%,100% { transform: translateY(0); } 50% { transform: translateY(-9px); } }
@keyframes els-pulse { 0% { transform: scale(.8); opacity: .9; } 70% { transform: scale(2.4); opacity: 0; } 100% { opacity: 0; } }

@media (prefers-reduced-motion: reduce) {
  .els-js .els-reveal { opacity: 1; transform: none; transition: none; }
  *, *::before, *::after { animation: none !important; transition: none !important; }
}

/* --- En-tête ------------------------------------------------------------- */
.els-burger { display: none; }

/* Appel direct, MOBILE UNIQUEMENT. Sous 1150 px, .els-cta-desktop disparaît :
   l'en-tête n'y porte alors plus aucun appel à l'action, alors que c'est
   précisément l'écran du dirigeant en panne. Même géométrie que la loupe et le
   burger (44x44). Orange #D0481E : 4,54:1 sur blanc, conforme AA.
   ⚠️ MESURE À CONNAÎTRE : le logo (191 px) et le groupe de boutons sont tous
   deux en flex-shrink:0. Avec ce 3e bouton l'en-tête demande 419 px, d'où un
   débordement horizontal mesuré à 35 px sur un écran de 360, 20 px à 375 et
   5 px à 390. Au-delà de ~395 px, aucun débordement. En test sur iPhone 16 Pro
   (402 px). Si l'on veut couvrir les écrans plus étroits : réduire les marges
   de l'en-tête (24->16), l'écart logo/boutons (24->12) et l'écart entre
   boutons (12->8) libère 36 px. */
.els-tel-mobile { display: none; }

/* Seuil de bascule vers le menu burger. ⚠️ Était à 1040 px, ce qui était trop
   bas : la barre bureau (logo 264 + six entrées + loupe + bouton) demande
   ~1133 px. Entre 1041 et 1133 px elle débordait donc horizontalement — 92 px
   à 1041, 43 px à 1090, 13 px à 1120 — sur un portable en fenêtre non
   maximisée. Défaut mesuré et corrigé le 26/07. Si l'on rallonge un jour un
   libellé de navigation, refaire la mesure : ce seuil en dépend directement. */
@media (max-width: 1150px) {
  .els-nav-links { display: none !important; }
  .els-burger { display: inline-flex !important; }
  .els-cta-desktop { display: none !important; }
  .els-tel-mobile {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    width: 44px;
    height: 44px;
    border: 1px solid #EAECF0;
    background: #fff;
    border-radius: 10px;
    color: #D0481E;
    text-decoration: none;
    flex-shrink: 0;
  }
  .els-tel-mobile:hover { border-color: #C7CCD6; }
}
@media (max-width: 520px) {
  .els-logo { height: 42px !important; }
}

/* Sous 430 px, l'en-tête n'a plus la place de tenir le logo ET les trois
   boutons (loupe, téléphone, burger) : il demandait 419 px de large.
   Mesuré avant ce correctif : débordement horizontal de 20 px sur iPhone 11 Pro
   (375), 35 px à 360, 5 px à 390 — confirmé sur appareil réel. L'iPhone 16 Pro
   (402) passait, d'où l'importance de tester plus étroit que son propre écran.
   On resserre donc les espacements et on réduit le logo, mobile UNIQUEMENT.
   Les !important sont nécessaires : ces valeurs sont en style inline dans les
   gabarits (exigence de fidélité au pixel du handoff, cf. en-tête de ce fichier). */
@media (max-width: 430px) {
  .els-hd-inner   { padding: 0 16px !important; gap: 12px !important; }
  .els-hd-actions { gap: 8px !important; }
  .els-logo       { height: 36px !important; }
}
.els-mobile-nav { display: none; }
.els-mobile-nav.is-open { display: block; }

/* Cible tactile ≥ 44px (accessibilité, README §8) */
.els-nav-links a { min-height: 40px; display: inline-flex; align-items: center; }

/* --- États :hover -------------------------------------------------------- */
/* Traduction 1:1 des attributs `style-hover` du handoff (non standard). */

/* CTA orange, variante de base (7 occurrences) */
.els-hv-cta:hover {
  background: #A9451B;
  transform: translateY(-2px);
}
/* CTA orange, grand format */
.els-hv-cta-lg:hover {
  background: #A9451B;
  transform: translateY(-2px);
  box-shadow: 0 18px 34px -10px rgba(232,98,42,0.8);
}
/* CTA orange, en-tête */
.els-hv-cta-sm:hover {
  background: #A9451B;
  transform: translateY(-1px);
  box-shadow: 0 12px 26px -8px rgba(232,98,42,0.75);
}
/* CTA orange, décalage discret */
.els-hv-cta-1:hover {
  background: #A9451B;
  transform: translateY(-1px);
}
/* Lien sur fond sombre */
.els-hv-white:hover { color: #fff; }
/* Bouton sombre */
.els-hv-dark:hover {
  background: #000;
  transform: translateY(-2px);
}
/* Bouton fantôme sur bandeau dégradé */
.els-hv-ghost:hover { background: rgba(0,0,0,0.30); }
/* Carte standard */
.els-hv-card:hover {
  border-color: #D7DCE4;
  box-shadow: 0 26px 50px -28px rgba(35,60,110,0.4);
  transform: translateY(-4px);
}
/* Carte accent orange */
.els-hv-card-orange:hover {
  border-color: #EBD3C6;
  box-shadow: 0 26px 50px -28px rgba(232,98,42,0.4);
  transform: translateY(-4px);
}
/* Élévations simples */
.els-hv-lift3:hover {
  transform: translateY(-3px);
  box-shadow: 0 22px 44px -28px rgba(35,60,110,0.4);
}
.els-hv-lift3-sm:hover {
  transform: translateY(-3px);
  box-shadow: 0 24px 46px -28px rgba(35,60,110,0.4);
}
.els-hv-lift3-lg:hover {
  transform: translateY(-3px);
  box-shadow: 0 30px 56px -30px rgba(35,60,110,0.45);
}
.els-hv-lift4:hover {
  transform: translateY(-4px);
  box-shadow: 0 26px 50px -30px rgba(35,60,110,0.45);
}
/* Carte douce */
.els-hv-soft:hover {
  border-color: #C7CCD6;
  background: #FAFBFC;
}

/* --- Plan du site -------------------------------------------------------- */
.els-plan {
  max-width: 980px;
  margin: 0 auto;
  padding: clamp(36px,4vw,56px) 24px clamp(48px,6vw,72px);
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
  gap: 32px 40px;
  font-family: 'Manrope', sans-serif;
}
.els-plan-actus { grid-column: 1 / -1; }
.els-plan-bloc h2 {
  font-family: 'Sora', sans-serif;
  font-weight: 700;
  font-size: 18px;
  color: #23242A;
  margin: 0 0 14px;
  padding-bottom: 10px;
  border-bottom: 2px solid #EAECF0;
}
.els-plan-bloc h3 {
  font-family: 'Sora', sans-serif;
  font-weight: 600;
  font-size: 14px;
  color: #D0481E;
  margin: 18px 0 8px;
  text-transform: uppercase;
  letter-spacing: 0.5px;
}
.els-plan-bloc ul { list-style: none; margin: 0; padding: 0; }
.els-plan-bloc li { margin: 0 0 9px; }
.els-plan-bloc a {
  color: #33343A;
  text-decoration: none;
  font-size: 15px;
  border-bottom: 1px solid transparent;
  transition: color .15s ease, border-color .15s ease;
}
.els-plan-bloc a:hover { color: #256EC7; border-bottom-color: #256EC7; }
.els-plan-actus ul {
  columns: 2;
  column-gap: 40px;
}
@media (max-width: 560px) { .els-plan-actus ul { columns: 1; } }

/* --- Recherche ----------------------------------------------------------- */
.els-search-open {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border: 1px solid #EAECF0;
  background: #fff;
  border-radius: 10px;
  cursor: pointer;
  color: #33343A;
  flex-shrink: 0;
  transition: border-color .15s ease, color .15s ease;
}
.els-search-open:hover { border-color: #C7CCD6; color: #256EC7; }

.els-search { position: fixed; inset: 0; z-index: 300; }
.els-search[hidden] { display: none; }
.els-search-fond {
  position: absolute;
  inset: 0;
  background: rgba(35,36,42,0.55);
  backdrop-filter: blur(3px);
  -webkit-backdrop-filter: blur(3px);
}
.els-search-modale {
  position: relative;
  max-width: 680px;
  margin: 8vh auto 0;
  background: #fff;
  border-radius: 20px;
  box-shadow: 0 40px 90px -30px rgba(35,60,110,0.6);
  padding: 22px 22px 12px;
  max-height: 78vh;
  display: flex;
  flex-direction: column;
  font-family: 'Manrope', sans-serif;
}
.els-search-tete { display: flex; align-items: center; justify-content: space-between; gap: 12px; }
.els-search-label {
  font-family: 'Sora', sans-serif;
  font-weight: 700;
  font-size: 16px;
  color: #23242A;
}
.els-search-fermer {
  width: 36px; height: 36px;
  display: inline-flex; align-items: center; justify-content: center;
  border: none; background: #F3F4F6; color: #33343A;
  border-radius: 9px; cursor: pointer;
}
.els-search-fermer:hover { background: #E7E9ED; }

.els-search-champ-boite {
  display: flex; align-items: center; gap: 10px;
  margin-top: 14px;
  border: 1px solid #DDE1E8;
  border-radius: 12px;
  padding: 0 14px;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.els-search-champ-boite:focus-within {
  border-color: #256EC7;
  box-shadow: 0 0 0 3px rgba(43,125,224,0.14);
}
.els-search-champ {
  flex: 1;
  border: none;
  outline: none;
  font-family: 'Manrope', sans-serif;
  font-size: 16px;
  color: #23242A;
  padding: 14px 0;
  background: transparent;
}
.els-search-champ::placeholder { color: #A2A7B0; }
.els-search-etat { font-size: 13px; color: #6B6F79; margin: 12px 2px 6px; }

.els-search-resultats {
  list-style: none;
  margin: 0;
  padding: 0 0 10px;
  overflow-y: auto;
}
.els-search-item + .els-search-item { border-top: 1px solid #F0F1F4; }
.els-search-item a {
  display: block;
  padding: 14px 12px;
  border-radius: 12px;
  text-decoration: none;
  transition: background .12s ease;
}
.els-search-item a:hover, .els-search-item a:focus { background: #F6F8FB; outline: none; }
.els-search-type {
  display: block;
  font-size: 11.5px;
  font-weight: 700;
  letter-spacing: 1.2px;
  text-transform: uppercase;
  color: #D0481E;
}
.els-search-titre {
  display: block;
  font-family: 'Sora', sans-serif;
  font-weight: 600;
  font-size: 16px;
  line-height: 1.3;
  color: #23242A;
  margin-top: 4px;
}
.els-search-extrait {
  display: block;
  font-size: 13.5px;
  line-height: 1.55;
  color: #6B6F79;
  margin-top: 5px;
}

@media (max-width: 620px) {
  .els-search-modale { margin: 0; border-radius: 0; max-height: 100vh; height: 100vh; }
}

/* --- Bandeau de consentement --------------------------------------------- */
.els-consent {
  position: fixed;
  left: 16px;
  right: 16px;
  bottom: 16px;
  z-index: 200;
  background: #fff;
  border: 1px solid #E4E8EE;
  border-radius: 18px;
  box-shadow: 0 24px 60px -24px rgba(35,60,110,0.45);
  font-family: 'Manrope', sans-serif;
}
.els-consent[hidden] { display: none; }
.els-consent-box {
  max-width: 1000px;
  margin: 0 auto;
  padding: 20px 22px;
  display: flex;
  flex-wrap: wrap;
  align-items: center;
  gap: 18px 24px;
  justify-content: space-between;
}
.els-consent-titre {
  font-family: 'Sora', sans-serif;
  font-weight: 700;
  font-size: 16px;
  color: #23242A;
  margin: 0 0 6px;
}
.els-consent-texte {
  font-size: 14px;
  line-height: 1.6;
  color: #6B6F79;
  margin: 0;
  max-width: 640px;
}
.els-consent-texte a { color: #256EC7; font-weight: 600; text-decoration: none; }
.els-consent-texte a:hover { text-decoration: underline; }

.els-consent-actions { display: flex; gap: 10px; flex-shrink: 0; }
/* Refuser et Accepter ont le même poids visuel : refuser doit être aussi
   simple qu'accepter (recommandation CNIL). */
.els-consent-btn {
  font-family: 'Manrope', sans-serif;
  font-weight: 600;
  font-size: 15px;
  line-height: 1;
  padding: 13px 22px;
  border-radius: 10px;
  cursor: pointer;
  min-height: 44px;
  transition: background .15s ease, border-color .15s ease, transform .15s ease;
}
.els-consent-btn:hover { transform: translateY(-1px); }
.els-consent-refuse { background: #fff; color: #33343A; border: 1px solid #D8DDE4; }
.els-consent-refuse:hover { border-color: #B9C0CA; }
.els-consent-accept { background: #23242A; color: #fff; border: 1px solid #23242A; }
.els-consent-accept:hover { background: #000; }

@media (max-width: 640px) {
  .els-consent-box { padding: 18px; }
  .els-consent-actions { width: 100%; }
  .els-consent-btn { flex: 1; }
}

/* --- Filtres par catégorie (page Actualités) ------------------------------ */
.els-cats {
  display: flex;
  flex-wrap: wrap;
  gap: 10px;
  margin: 0 0 32px;
}
.els-cat-pill {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  font-family: 'Manrope', sans-serif;
  font-weight: 600;
  font-size: 14px;
  line-height: 1;
  text-decoration: none;
  border: 1px solid #E4E8EE;
  border-radius: 999px;
  padding: 10px 14px 10px 16px;
  min-height: 40px;
  transition: border-color .15s ease, background .15s ease, transform .15s ease;
}
.els-cat-pill:hover {
  border-color: #C7CCD6;
  transform: translateY(-1px);
}
.els-cat-pill[aria-current="true"]:hover { border-color: #23242A; }
.els-cat-count {
  font-size: 12px;
  font-weight: 700;
  border-radius: 999px;
  padding: 3px 8px;
  min-width: 22px;
  text-align: center;
}
.els-cat-info {
  font-size: 14.5px;
  color: #6B6F79;
  margin: -18px 0 30px;
}
.els-cat-info a { color: #256EC7; font-weight: 600; text-decoration: none; }
.els-cat-info a:hover { color: #1F63C4; text-decoration: underline; }

@media (max-width: 560px) {
  .els-cats { gap: 8px; }
  .els-cat-pill { font-size: 13.5px; padding: 9px 12px 9px 14px; }
}

/* --- Pages légales ------------------------------------------------------- */
/* Le corps de ces pages est du HTML hérité de l'ancien thème : des suites de
   <p>, <br> et <strong>, sans classes. On le met en forme ici, sans toucher
   au texte juridique lui-même. */
.els-legal {
  max-width: 820px;
  margin: 0 auto;
  padding: clamp(36px, 4vw, 56px) 24px clamp(48px, 6vw, 72px);
  font-size: 16px;
  line-height: 1.75;
  color: #4A4D56;
}
.els-legal p { margin: 0 0 18px; }
/* Les <p>&nbsp;</p> de l'éditeur WYSIWYG servaient d'espaceurs : on les neutralise. */
.els-legal p:empty { display: none; }
.els-legal strong { color: #23242A; font-weight: 600; }

/* NB : pas de règle « <p><strong>…</strong></p> = titre » ici. En CSS, :only-child
   ignore les nœuds texte, donc « <p>Le <strong>coût…</strong></p> » serait à tort
   traité comme un titre et « Le » se retrouverait orphelin. Les pages utilisent
   de vrais <h2>/<h3> pour leurs titres. */
.els-legal h2, .els-legal h3 {
  font-family: 'Sora', sans-serif;
  color: #23242A;
  letter-spacing: -0.4px;
  line-height: 1.3;
}
.els-legal h2 { font-size: clamp(20px, 2.2vw, 26px); font-weight: 700; margin: 44px 0 14px; }
.els-legal h3 { font-size: 18px; font-weight: 600; margin: 32px 0 10px; }

.els-legal a { color: #256EC7; text-decoration: none; border-bottom: 1px solid rgba(43,125,224,0.28); }
.els-legal a:hover { color: #1F63C4; border-bottom-color: #1F63C4; }

.els-legal ul, .els-legal ol { margin: 0 0 18px; padding-left: 22px; }
.els-legal li { margin-bottom: 8px; }

.els-legal table {
  width: 100%;
  border-collapse: collapse;
  margin: 0 0 24px;
  font-size: 14.5px;
}
.els-legal th, .els-legal td {
  border: 1px solid #EAECF0;
  padding: 10px 12px;
  text-align: left;
  vertical-align: top;
}
.els-legal th { background: #F6F8FB; font-weight: 600; color: #23242A; }
/* Les tableaux larges défilent au lieu de déborder la page. */
.els-legal .els-table-scroll { overflow-x: auto; }

.els-legal img { max-width: 100%; height: auto; border-radius: 10px; }

/* --- Pied de page -------------------------------------------------------- */
.els-legal-links { display: flex; flex-wrap: wrap; gap: 16px; }
.els-legal-links a {
  color: #888B93;
  text-decoration: none;
  font-size: 13px;
  transition: color .15s ease;
}
.els-legal-links a:hover { color: #C7CAD2; }

/* --- Champs de formulaire ------------------------------------------------ */
/* Reprise à l'identique du <style> de Contact.dc.html. */
.els-field {
  width: 100%;
  font-family: 'Manrope', sans-serif;
  font-size: 15px;
  color: #23242A;
  background: #fff;
  border: 1px solid #DDE1E8;
  border-radius: 10px;
  padding: 13px 15px;
  outline: none;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.els-field:focus {
  border-color: #256EC7;
  box-shadow: 0 0 0 3px rgba(43,125,224,0.14);
}
.els-field::placeholder { color: #A2A7B0; }

/* --- Formulaire (FormBuilder) -------------------------------------------- */
/* FormBuilder génère lui-même les <input>. On les aligne sur .els-field. */
.els-form input[type="text"],
.els-form input[type="email"],
.els-form input[type="tel"],
.els-form select,
.els-form textarea {
  width: 100%;
  font-family: 'Manrope', sans-serif;
  font-size: 15px;
  color: #23242A;
  background: #fff;
  border: 1px solid #DDE1E8;
  border-radius: 10px;
  padding: 13px 15px;
  outline: none;
  transition: border-color .15s ease, box-shadow .15s ease;
}
.els-form textarea { resize: vertical; min-height: 120px; }
.els-form input:focus,
.els-form select:focus,
.els-form textarea:focus {
  border-color: #256EC7;
  box-shadow: 0 0 0 3px rgba(43,125,224,0.14);
}
.els-form input::placeholder,
.els-form textarea::placeholder { color: #A2A7B0; }

.els-form label {
  display: block;
  font-size: 13.5px;
  font-weight: 600;
  color: #33343A;
  margin-bottom: 7px;
}

.els-form-grid {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 16px;
}
.els-col-12 { grid-column: 1 / -1; }
@media (max-width: 560px) {
  .els-form-grid { grid-template-columns: 1fr; }
  .els-col-6 { grid-column: 1 / -1; }
}

.els-form-submit { margin-top: 20px; }
.els-form-submit input[type="submit"] {
  width: 100%;
  font-family: 'Manrope', sans-serif;
  font-weight: 600;
  font-size: 16px;
  color: #fff;
  background: #D0481E;
  border: none;
  padding: 15px 24px;
  border-radius: 11px;
  cursor: pointer;
  box-shadow: 0 12px 26px -10px rgba(232,98,42,0.7);
  transition: transform .18s ease, background .18s ease;
}
.els-form-submit input[type="submit"]:hover {
  background: #A9451B;
  transform: translateY(-1px);
}
.els-form-note {
  font-size: 12.5px;
  line-height: 1.5;
  color: #6B6F79;
  text-align: center;
  margin: 14px 0 0;
}

.els-form .els-error { color: #B5461E; font-size: 13px; margin-top: 6px; }
.els-invalid input, .els-invalid textarea, .els-invalid select { border-color: #D0481E; }
.els-error-box {
  background: #FDEEE7;
  border: 1px solid #EBD3C6;
  color: #B5461E;
  border-radius: 12px;
  padding: 14px 16px;
  font-size: 14px;
  margin-bottom: 20px;
}
.els-error-box ul { margin: 0; padding-left: 18px; }

/* ===== Lexique ===== */
/* Index A–Z : une seule ligne, compact, et collant sous l'en-tête (94px) au scroll.
   nowrap + overflow-x sur très petits écrans ; barre de défilement masquée. */
.els-az{display:flex;flex-wrap:nowrap;overflow-x:auto;gap:4px;justify-content:center;position:sticky;top:94px;z-index:20;background:#fff;padding:12px 24px;margin:0 0 22px;border-bottom:1px solid #EAECF0;scrollbar-width:none}
.els-az::-webkit-scrollbar{display:none}
.els-az a,.els-az span{flex:0 0 auto;display:inline-flex;align-items:center;justify-content:center;min-width:28px;height:30px;border-radius:8px;font-weight:700;font-size:13px;text-decoration:none}
.els-az a{color:#256EC7;background:#EAF2FD}
.els-az a:hover{background:#256EC7;color:#fff}
.els-az span{color:#C7CCD6;background:#F4F6F9}
@media(max-width:900px){.els-az{justify-content:flex-start}}

/* ===== Lexique dans le plan du site (grille A–Z, façon raynata) ===== */
.els-plan-sec-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;flex-wrap:wrap}
.els-plan-voir{font-size:14px;font-weight:600;color:#256EC7;text-decoration:none;white-space:nowrap}
.els-plan-voir:hover{text-decoration:underline}
.els-plan-lex-intro{font-size:15px;color:#6B6F79;margin:-6px 0 18px}
.els-plan-lex{grid-column:1 / -1}
.els-plan-lexgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:18px 28px}
.els-plan-lexgrp{break-inside:avoid}
.els-plan-lexl{display:inline-flex;align-items:center;justify-content:center;min-width:26px;height:26px;border-radius:7px;background:#EAF2FD;color:#256EC7;font-family:'Sora',sans-serif;font-weight:800;font-size:14px;margin-bottom:9px}
.els-plan-lexgrp ul{list-style:none;margin:0;padding:0}
.els-plan-lexgrp li{margin:0 0 7px;line-height:1.35}
.els-plan-lexgrp a{text-decoration:none;color:#4A5A62;font-size:14px;transition:color .15s ease}
.els-plan-lexgrp a:hover{color:#256EC7}
.els-lex-groupe{padding:0 24px;margin-bottom:26px}
/* scroll-margin-top : décale l'ancre sous l'en-tête (94px) + la barre A–Z collante
   (~55px) pour que le clic sur une lettre amène bien le titre de la lettre visé. */
.els-lex-lettre{font-family:'Sora',sans-serif;font-weight:800;font-size:20px;color:#256EC7;margin:0 0 12px;padding-bottom:6px;border-bottom:1px solid #EAECF0;scroll-margin-top:160px}
.els-lex-liste{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:14px}
.els-lex-item{background:#fff;border:1px solid #EAECF0;border-radius:14px;padding:16px 18px;transition:border-color .15s ease,box-shadow .15s ease,transform .15s ease}
.els-lex-item:hover{border-color:#D7DCE4;box-shadow:0 18px 34px -26px rgba(35,60,110,.4);transform:translateY(-3px)}
.els-lex-nom{font-family:'Sora',sans-serif;font-weight:700;font-size:16px;color:#23242A;text-decoration:none;display:block}
.els-lex-item:hover .els-lex-nom{color:#256EC7}
.els-lex-teaser{font-size:13.5px;line-height:1.5;color:#6B6F79;margin:6px 0 0}

/* ==========================================================================
   FIGURES TECHNIQUES
   Registre emprunté au plan de câblage annoté : filets d'un pixel, repères de
   mesure, étiquettes rattachées par une ligne de rappel. C'est le langage du
   métier d'ELS Conseil, et il tranche volontairement avec la carte arrondie à
   icône qui porte le reste du site : sur une page de 1500 mots, répéter la
   même carte rend la lecture monotone.

   Tout est en HTML et CSS : aucune image ni SVG à charger (donc aucune requête
   et aucun décalage cumulé), le texte reste sélectionnable, traduisible et
   annoncé par les lecteurs d'écran, et les couleurs restent vérifiables par le
   scan de contraste au même titre que le reste du site.

   Mobile d'abord : les chronologies sont verticales par défaut et ne basculent
   à l'horizontale qu'à partir de 760px, largeur en dessous de laquelle une
   frise horizontale devient illisible.
   ========================================================================== */

.els-fig{margin:0}
.els-fig-eyebrow{display:block;font-size:13px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#6B6F79}
.els-fig-titre{font-family:'Sora',sans-serif;font-weight:700;font-size:clamp(20px,2.2vw,26px);line-height:1.2;letter-spacing:-.5px;color:#23242A;margin:10px 0 0}
.els-fig-legende{font-size:14.5px;line-height:1.6;color:#6B6F79;margin:14px 0 0;max-width:62ch}

/* --- Chronologie comparée ------------------------------------------------ */
.els-chrono{display:grid;gap:18px;margin-top:32px}
.els-chrono-piste{position:relative;background:#fff;border:1px solid #E7EAEF;border-radius:16px;padding:22px 24px 24px}
/* Le filet de gauche encode la nature de la piste : subie ou maîtrisée. */
.els-chrono-piste--subie{border-left:3px solid #C6451A}
.els-chrono-piste--maitrisee{border-left:3px solid #256EC7}
.els-chrono-nom{font-family:'Sora',sans-serif;font-weight:700;font-size:16px;color:#23242A;margin:0}
.els-chrono-bilan{font-size:14px;font-weight:700;letter-spacing:.4px;margin:0;text-transform:uppercase}
.els-chrono-piste--subie .els-chrono-bilan{color:#C6451A}
.els-chrono-piste--maitrisee .els-chrono-bilan{color:#256EC7}

.els-chrono-rail{list-style:none;margin:18px 0 0;padding:0 0 0 22px;position:relative}
/* Le rail : vertical sur mobile, horizontal au-delà de 760px. */
.els-chrono-rail::before{content:"";position:absolute;left:5px;top:6px;bottom:6px;width:1px;background:#D7DBE2}
.els-chrono-evt{position:relative;padding:0 0 16px}
.els-chrono-evt:last-child{padding-bottom:0}
.els-chrono-evt::before{content:"";position:absolute;left:-19px;top:5px;width:9px;height:9px;border-radius:99px;background:#fff;border:2px solid #C3C7D0}
.els-chrono-piste--subie .els-chrono-evt--cle::before{border-color:#C6451A;background:#C6451A}
.els-chrono-piste--maitrisee .els-chrono-evt--cle::before{border-color:#256EC7;background:#256EC7}
.els-chrono-quand{display:block;font-family:'Sora',sans-serif;font-size:12px;font-weight:700;letter-spacing:1.4px;text-transform:uppercase;color:#6B6F79;font-variant-numeric:tabular-nums}
.els-chrono-quoi{display:block;font-size:15.5px;line-height:1.55;color:#4A4D56;margin-top:3px}
.els-chrono-evt--cle .els-chrono-quoi{font-weight:600;color:#23242A}

@media (min-width:760px){
  .els-chrono-piste{padding:24px 28px 28px;display:grid;grid-template-columns:1fr auto;align-items:baseline;column-gap:20px}
  .els-chrono-rail{grid-column:1 / -1;margin-top:26px;padding:34px 0 0;min-height:96px}
  .els-chrono-rail::before{left:0;right:0;top:0;bottom:auto;width:auto;height:1px}
  /* Chaque événement est posé à son abscisse réelle via --x, comme une cote
     sur un plan. Le texte reste au-dessous, rattaché par sa ligne de rappel. */
  .els-chrono-evt{position:absolute;top:0;left:var(--x);width:min(24%,180px);padding:0;transform:translateX(-6px)}
  .els-chrono-evt::before{left:0;top:-4px}
  .els-chrono-evt::after{content:"";position:absolute;left:4px;top:6px;width:1px;height:22px;background:#D7DBE2}
  .els-chrono-evt>*{padding-left:0}
  .els-chrono-quand{margin-top:28px}
  /* Le dernier événement d'une piste déborderait à droite : on l'ancre à droite. */
  .els-chrono-evt--fin{left:auto;right:0;transform:none;text-align:right}
  .els-chrono-evt--fin::before{left:auto;right:0}
  .els-chrono-evt--fin::after{left:auto;right:4px}
}

/* --- Schéma d'installation ---------------------------------------------- */
/* Arborescence réseau dessinée en HTML : nœuds encadrés, liaisons en filets
   d'un pixel, annotations rattachées par une ligne de rappel. Même registre
   que les chronologies, même absence de requête réseau. */
.els-schema{position:relative;padding:4px 0}
.els-schema-niveau{display:flex;justify-content:center;gap:12px}
.els-schema-noeud{background:#fff;border:1px solid #D7DBE2;border-radius:10px;padding:11px 14px;text-align:center;min-width:0;flex:0 1 auto}
.els-schema-nom{display:block;font-family:'Sora',sans-serif;font-weight:600;font-size:14px;color:#23242A;line-height:1.25}
.els-schema-det{display:block;font-size:12px;color:#6B6F79;margin-top:2px;line-height:1.3}
/* Nœud sous contrat de supervision : c'est l'information, pas une décoration. */
.els-schema-noeud--supervise{border-color:#256EC7;box-shadow:0 0 0 3px rgba(37,110,199,.08)}
.els-schema-noeud--supervise .els-schema-nom{color:#1F63C4}
/* Liaison verticale entre deux niveaux. */
.els-schema-lien{width:1px;height:22px;background:#D7DBE2;margin:0 auto}
/* Répartiteur : chaque descente part du centre de SA colonne, donc les traits
   tombent juste quelle que soit la largeur des nœuds. Une barre approximative
   posée en pourcentage ne s'alignait pas, ce qui ruinait le registre du plan. */
.els-schema-feuilles{position:relative;display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding-top:22px}
.els-schema-feuilles::before{content:"";position:absolute;top:0;left:calc((100% - 20px) / 6);right:calc((100% - 20px) / 6);height:1px;background:#D7DBE2}
.els-schema-branche{position:relative}
.els-schema-branche::before{content:"";position:absolute;top:-22px;left:50%;width:1px;height:22px;background:#D7DBE2}

/* Deux couleurs, deux informations. Bleu : ce que nous surveillons en continu.
   Orange : ce qui s'arrête immédiatement chez vous si l'équipement tombe.
   Le reste demeure neutre, sinon plus rien ne ressort. */
.els-schema-noeud--critique{border-color:#D0481E;box-shadow:0 0 0 3px rgba(208,72,30,.08)}
.els-schema-noeud--critique .els-schema-nom{color:#C6451A}
.els-schema-legende{display:flex;flex-wrap:wrap;gap:8px 22px;margin:18px 0 0}
.els-schema-cle{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;color:#4A4D56}
.els-schema-cle::before{content:"";width:13px;height:13px;border-radius:4px;border:2px solid currentColor;flex:0 0 auto}
.els-schema-cle--supervise{color:#1F63C4}
.els-schema-cle--critique{color:#C6451A}

/* Annotation en marge, comme une cote sur un plan. */
.els-schema-note{display:flex;align-items:flex-start;gap:9px;margin:14px 0 0;font-size:13px;line-height:1.5;color:#6B6F79}
.els-schema-note::before{content:"";flex:0 0 18px;height:1px;background:#D7DBE2;margin-top:9px}

/* --- Étiquettes de matériel --------------------------------------------- */
/* Ce qui est réellement en jeu chez ce type de client. Concret et balayable,
   là où un second paragraphe aurait été relu en diagonale. */
/* Nomenclature en colonne, alignée à gauche : en deux colonnes les libellés
   se coupaient en deux lignes centrées, plus brouillon que le pavé d'origine.
   Le repère carré porte la couleur, le libellé reste lisible d'un trait. */
.els-tags{display:flex;flex-direction:column;gap:7px;margin:14px 0 0;padding:0;list-style:none}
.els-tag{display:flex;align-items:center;gap:9px;font-size:13px;font-weight:600;color:#4A4D56}
.els-tag::before{content:"";width:7px;height:7px;border-radius:2px;background:#C3C7D0;flex:0 0 auto}
/* Le point critique du métier : une seule étiquette orange par carte. Déclarée
   APRÈS la règle générique ci-dessus, à spécificité égale l'ordre source décide. */
.els-tag--critique{color:#A9451B}
.els-tag--critique::before{background:#D0481E}

/* --- Étapes filées ------------------------------------------------------- */
/* Un rail continu relie les quatre étapes sur toute la hauteur de la section :
   l'œil suit un fil pendant le défilement au lieu d'affronter quatre pavés. */
.els-etapes{position:relative;margin-top:40px}
.els-etapes::before{content:"";position:absolute;left:19px;top:10px;bottom:10px;width:1px;background:#D7DBE2}
.els-etape{position:relative;padding:0 0 34px 62px}
.els-etape:last-child{padding-bottom:0}
.els-etape-num{position:absolute;left:0;top:-3px;width:39px;height:39px;border-radius:11px;background:#fff;border:1px solid #D7DBE2;display:flex;align-items:center;justify-content:center;font-family:'Sora',sans-serif;font-weight:800;font-size:15px;color:#256EC7;font-variant-numeric:tabular-nums}
.els-etape-nom{font-family:'Sora',sans-serif;font-weight:600;font-size:19px;color:#23242A;margin:0}
.els-etape-txt{font-size:16px;line-height:1.7;color:#4A4D56;margin:10px 0 0}
@media (min-width:900px){
  /* Titre à gauche, prose à droite : la ligne se raccourcit et le pavé disparaît. */
  .els-etape{display:grid;grid-template-columns:250px 1fr;gap:36px;align-items:start}
  .els-etape-txt{margin:0}
}
/* Cartes secteur : la rangée d'étiquettes se cale en bas de carte pour que les
   quatre s'alignent, quelle que soit la longueur du texte au-dessus. */
.els-carte-secteur{display:flex;flex-direction:column}
.els-carte-secteur .els-tags{margin-top:auto;padding-top:16px}

/* ==========================================================================
   PARTITION DES BANDES
   Le site alternait #fff et #F6F8FB, deux blancs séparés par 2 % de luminance :
   une alternance que personne ne perçoit, donc pas un rythme. Trois tons
   franchement distincts, avec une règle : jamais deux bandes identiques à la
   suite, et deux ancres sombres par page, aux moments qui portent la démonstration.
   ========================================================================== */
.els-bande{position:relative}
.els-bande--papier{background:#fff}
.els-bande--plan{background:#F1F4F9;border-top:1px solid #E3E8F0;border-bottom:1px solid #E3E8F0}
.els-bande--nuit{background:#23242A}
.els-in{max-width:1200px;margin:0 auto;padding:clamp(60px,7.5vw,104px) 24px}
/* Colonne de lecture : la prose longue ne doit pas courir sur 1200px. */
.els-in--lecture{max-width:780px}

/* --- Repère de cote : la signature de la page ---------------------------- */
/* Chaque section s'ouvre sur un filet, un numéro et un libellé, toujours au
   même endroit. Défiler revient à descendre le long d'un plan coté. */
.els-cote{display:flex;align-items:center;gap:13px;font-family:'Sora',sans-serif;font-size:12px;font-weight:700;letter-spacing:2.2px;text-transform:uppercase;color:#6B6F79;font-variant-numeric:tabular-nums;margin:0}
.els-cote::before{content:"";width:36px;height:1px;background:#C3C7D0;flex:0 0 auto}
.els-cote b{font-weight:800;color:#256EC7}
.els-bande--nuit .els-cote{color:#9A9EA8}
.els-bande--nuit .els-cote::before{background:#4E525C}
.els-bande--nuit .els-cote b{color:#E8622A}

/* --- Échelle typographique ---------------------------------------------- */
/* Huit titres de section au même corps (38-42px) : tout criait pareil, donc
   rien ne ressortait. Les titres de section redescendent au rang de repère,
   et un seul moment par page prend la parole en grand, sur fond sombre. */
.els-t-section{font-family:'Sora',sans-serif;font-weight:700;font-size:clamp(23px,2.5vw,30px);line-height:1.16;letter-spacing:-.6px;color:#23242A;margin:16px 0 0;text-wrap:balance}
.els-t-ancre{font-family:'Sora',sans-serif;font-weight:800;font-size:clamp(32px,5.4vw,66px);line-height:1.03;letter-spacing:-2px;color:#fff;margin:20px 0 0;text-wrap:balance}
.els-chapo{font-size:17px;line-height:1.7;color:#4A4D56;margin:18px 0 0;max-width:65ch}
.els-bande--nuit .els-t-section{color:#fff}
.els-bande--nuit .els-chapo{color:#C7CAD2}

/* Chronologies posées sur fond sombre. */
.els-bande--nuit .els-chrono-piste{background:#2B2D34;border-color:#3A3D45}
.els-bande--nuit .els-chrono-nom{color:#fff}
.els-bande--nuit .els-chrono-quoi{color:#C7CAD2}
.els-bande--nuit .els-chrono-evt--cle .els-chrono-quoi{color:#fff}
.els-bande--nuit .els-chrono-quand{color:#9A9EA8}
.els-bande--nuit .els-chrono-rail::before,
.els-bande--nuit .els-chrono-evt::after{background:#4E525C}
.els-bande--nuit .els-chrono-evt::before{background:#2B2D34;border-color:#5A5E68}
.els-bande--nuit .els-chrono-piste--subie{border-left-color:#F07A4B}
.els-bande--nuit .els-chrono-piste--maitrisee{border-left-color:#5AA0F0}
.els-bande--nuit .els-chrono-piste--subie .els-chrono-bilan{color:#F07A4B}
.els-bande--nuit .els-chrono-piste--maitrisee .els-chrono-bilan{color:#5AA0F0}
.els-bande--nuit .els-chrono-piste--subie .els-chrono-evt--cle::before{background:#F07A4B;border-color:#F07A4B}
.els-bande--nuit .els-chrono-piste--maitrisee .els-chrono-evt--cle::before{background:#5AA0F0;border-color:#5AA0F0}
.els-bande--nuit .els-fig-legende{color:#9A9EA8}

/* --- Villes de la zone d'intervention ------------------------------------ */
/* Une énumération séparée par des virgules ne se lit pas. En grille, chaque
   commune devient un point d'accroche pour l'œil et le référencement local. */
.els-villes{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:1px;margin:36px 0 0;background:#33353D;border:1px solid #33353D;border-radius:12px;overflow:hidden}
.els-ville{background:#23242A;padding:14px 16px;font-size:15px;color:#C7CAD2}
.els-ville b{display:block;font-family:'Sora',sans-serif;font-weight:600;font-size:11px;letter-spacing:1.4px;text-transform:uppercase;color:#888B93;margin-bottom:3px}
.els-ville--siege{background:#2B2D34}
.els-ville--siege b{color:#F07A4B}
/* Les communes qui ont leur propre page deviennent cliquables au fil des
   publications (Phase 3). #5AA0F0 sur #23242A : 5,69:1, conforme AA. */
.els-ville a{color:#5AA0F0;font-weight:600;text-decoration:none}
.els-ville a:hover{text-decoration:underline}

/* --- Fiche comparative --------------------------------------------------- */
/* Deux offres décrites par deux pavés de prose ne se comparent pas : le lecteur
   doit tenir les deux en tête. Trois lignes de spécification en tête de carte
   donnent la réponse d'un coup d'œil, la prose reste dessous pour qui veut. */
.els-fiche{margin:0 0 20px;border-top:1px solid #E3E8F0}
.els-fiche>div{display:flex;align-items:baseline;justify-content:space-between;gap:18px;padding:10px 0;border-bottom:1px solid #E3E8F0}
.els-fiche dt{font-family:'Sora',sans-serif;font-size:11.5px;font-weight:700;letter-spacing:1.4px;text-transform:uppercase;color:#6B6F79;margin:0}
.els-fiche dd{margin:0;font-size:14.5px;font-weight:600;color:#23242A;text-align:right}
/* Le filet de tête encode la nature de l'offre : suivie dans la durée, ou ponctuelle. */
.els-offre{border-top:3px solid #D7DBE2}
.els-offre--contrat{border-top-color:#256EC7}
.els-offre--ponctuelle{border-top-color:#D0481E}
.els-offre-nom{font-family:'Sora',sans-serif;font-weight:700;font-size:20px;color:#23242A;margin:0 0 18px}

/* --- Frise d'échéances --------------------------------------------------- */
/* Les dates d'une réforme se lisent sur un axe, pas dans un paragraphe. Le
   curseur « aujourd'hui » est positionné par Smarty à partir de la date du
   serveur : une frise dont le repère est figé devient fausse toute seule. */
.els-frise{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:0;margin:38px 0 0;position:relative}
/* Le filet est tracé jalon par jalon, d'un point au suivant, plutôt qu'en
   pourcentages sur le conteneur : le nombre de jalons varie selon la date
   (le curseur « aujourd'hui » disparaît après la dernière échéance). */
.els-jalon{position:relative;padding:26px 18px 0 0}
.els-jalon::after{content:"";position:absolute;top:7px;left:15px;right:0;height:1px;background:#4E525C}
.els-jalon:last-child::after{display:none}
.els-jalon::before{content:"";position:absolute;top:0;left:0;width:15px;height:15px;border-radius:99px;background:#23242A;border:2px solid #5A5E68;box-sizing:border-box}
.els-jalon--echeance::before{border-color:#F07A4B;background:#F07A4B}
.els-jalon--ici::before{border-color:#5AA0F0;background:#23242A;box-shadow:0 0 0 4px rgba(90,160,240,.22)}
.els-jalon-date{display:block;font-family:'Sora',sans-serif;font-size:12.5px;font-weight:800;letter-spacing:1.6px;text-transform:uppercase;color:#9A9EA8;font-variant-numeric:tabular-nums}
.els-jalon--echeance .els-jalon-date{color:#F07A4B}
.els-jalon--ici .els-jalon-date{color:#5AA0F0}
.els-jalon-obl{margin:12px 0 0;padding:0;list-style:none;display:flex;flex-direction:column;gap:8px}
.els-jalon-obl li{background:#2B2D34;border:1px solid #3D4048;border-radius:9px;padding:10px 12px;font-size:14px;line-height:1.4;color:#C7CAD2}
.els-jalon-obl b{display:block;font-family:'Sora',sans-serif;font-weight:700;font-size:13px;color:#fff;margin-bottom:2px}
.els-jalon-note{margin:12px 0 0;font-size:14px;line-height:1.5;color:#9A9EA8}

/* --- Calendrier de saison ------------------------------------------------ */
/* Douze cases, pas un graphique : nous n'avons aucun chiffre d'activité à
   publier, seulement le fait que la campagne sature novembre et décembre. */
.els-saison{display:grid;grid-template-columns:repeat(12,1fr);gap:3px;margin:30px 0 0}
.els-mois{background:#F1F4F9;border:1px solid #E3E8F0;border-radius:6px;padding:12px 2px 10px;text-align:center;font-family:'Sora',sans-serif;font-size:11px;font-weight:700;letter-spacing:.4px;color:#6B6F79}
.els-mois--pic{background:#FDEEE7;border-color:#EEC9B8;color:#A9451B}
.els-saison-leg{display:flex;flex-wrap:wrap;gap:10px 24px;margin:16px 0 0;font-size:13.5px;color:#4A4D56}
.els-saison-leg span{display:inline-flex;align-items:center;gap:8px}
.els-saison-leg span::before{content:"";width:12px;height:12px;border-radius:4px;border:1px solid #E3E8F0;background:#F1F4F9}
.els-saison-leg span.est-pic::before{background:#FDEEE7;border-color:#EEC9B8}

/* --- Rythme des sessions -------------------------------------------------- */
/* Deux formats sur les mêmes quatre semaines : ce que le texte affirme, montré. */
.els-rythme{display:flex;flex-direction:column;gap:22px;margin:32px 0 0}
.els-format{background:#fff;border:1px solid #E3E8F0;border-radius:14px;padding:20px 22px}
.els-format--bloc{border-left:3px solid #C6451A}
.els-format--etale{border-left:3px solid #256EC7}
.els-format-nom{font-family:'Sora',sans-serif;font-weight:700;font-size:16px;color:#23242A;margin:0}
.els-semaines{display:grid;grid-template-columns:repeat(4,1fr);gap:8px;margin:16px 0 0}
.els-semaine{border:1px dashed #D7DBE2;border-radius:8px;min-height:46px;display:flex;align-items:center;justify-content:center;font-size:12px;color:#6B6F79;padding:6px}
.els-semaine--seance{border-style:solid;font-family:'Sora',sans-serif;font-weight:700;font-size:12.5px}
.els-format--bloc .els-semaine--seance{background:#FDEEE7;border-color:#EEC9B8;color:#A9451B}
.els-format--etale .els-semaine--seance{background:#EAF2FD;border-color:#C6DBF6;color:#1F63C4}
.els-format-bilan{margin:14px 0 0;font-size:14px;line-height:1.5;color:#4A4D56}

/* --- Renvoi vers un guide, en tête d'article ----------------------------- */
/* Un lecteur qui arrive sur un article pointu par une recherche doit pouvoir
   remonter au guide d'ensemble sans le chercher. Posé avant le premier titre. */
.els-encart-hub{background:#F1F4F9;border:1px solid #E3E8F0;border-left:3px solid #256EC7;border-radius:12px;padding:16px 20px;margin:0 0 28px}
.els-encart-hub p{margin:0;font-size:15px;line-height:1.6;color:#4A4D56}
.els-encart-hub strong{color:#23242A;font-weight:600}
.els-encart-hub a{color:#256EC7;font-weight:600}

/* --- Sommaire d'article ---------------------------------------------------- */
/* Le sommaire est produit côté serveur par {els_sommaire} : il est dans le HTML
   au premier rendu, donc CLS = 0, et il fonctionne sans JavaScript. Le script
   n'ajoute que la section active et la progression.
   Couleurs prises dans la palette AA : #256EC7 actif, #6B6F79 au repos. Le lien
   actif ne se signale JAMAIS par le seul gras (14,5 px gras reste soumis à 4,5:1). */
.els-toc{margin:32px 0;border:1px solid #E3E8F0;border-radius:14px;background:#F6F8FB;padding:16px 18px}
.els-toc-bascule{display:flex;align-items:center;gap:10px;width:100%;background:none;border:0;padding:0;cursor:pointer;font-family:'Sora',sans-serif;font-weight:600;font-size:15px;color:#23242A;text-align:left}
.els-toc-nb{font-size:12.5px;font-weight:700;color:#6B6F79;background:#fff;border:1px solid #E3E8F0;border-radius:999px;padding:1px 9px}
.els-toc-chev{margin-left:auto;color:#6B6F79;flex:0 0 auto;transition:transform .2s ease}
.els-toc--replie .els-toc-chev{transform:rotate(-90deg)}
/* Sur-titre réservé au bureau : reprend l'idiome .els-cote du site (filet + petite
   capitale espacée) pour que le sommaire soit natif et non rapporté. */
.els-toc-cote{display:none;align-items:center;gap:10px;margin:0 0 14px;font-family:'Sora',sans-serif;font-size:11.5px;font-weight:700;letter-spacing:2px;text-transform:uppercase;color:#6B6F79}
.els-toc-cote::before{content:"";width:28px;height:1px;background:#C3C7D0;flex:0 0 auto}
.els-toc-liste{list-style:none;margin:14px 0 0;padding:0}
.els-toc--replie .els-toc-liste{display:none}
.els-toc-liste li{margin:0}
/* Le filet de gauche des items EST la barre de progression du sommaire : gris clair
   pour ce qui reste à lire, gris moyen pour ce qui est passé, bleu et pastille pour
   la section courante. L'état actif ne repose donc jamais sur la seule couleur. */
.els-toc-lien{position:relative;display:block;padding:7px 12px;border-left:2px solid #E3E8F0;font-size:14.5px;line-height:1.45;color:#6B6F79;text-decoration:none;transition:color .15s ease,border-color .15s ease}
.els-toc-lien:hover{color:#23242A;border-left-color:#C3C7D0}
.els-toc-lien:focus-visible{outline:2px solid #256EC7;outline-offset:2px;border-radius:4px}
.els-toc-lien--vu{border-left-color:#C3C7D0}
.els-toc-lien--actif{color:#256EC7;font-weight:600;border-left-color:#256EC7}
.els-toc-lien--actif::before{content:"";position:absolute;left:-5px;top:50%;margin-top:-4px;width:8px;height:8px;border-radius:50%;background:#256EC7}

/* Filet de progression, calé sous l'en-tête collant dont la hauteur est mesurée
   en JavaScript (elle diffère entre mobile et bureau). Décoratif : aria-hidden. */
.els-toc-progres{position:fixed;top:var(--els-header-h,94px);left:0;right:0;height:3px;z-index:40;pointer-events:none}
.els-toc-progres-barre{display:block;height:100%;background:#D0481E;transform:scaleX(0);transform-origin:0 50%;will-change:transform}

/* Corps de l'article. Ces règles vivaient en style inline dans le gabarit ; elles
   sont ici pour que le conteneur puisse s'élargir quand le sommaire prend place à
   droite (un max-width inline l'emporterait sur toute règle de la feuille). */
.els-article{max-width:820px;margin:0 auto;padding:clamp(36px,4vw,56px) 24px clamp(48px,6vw,80px);font-size:16.5px;line-height:1.75;color:#4A4D56}
/* En-tête d'article (fil d'ariane, titre, signature) : même conteneur que le corps,
   pour que tout s'aligne sur le même bord gauche une fois le sommaire à droite. */
.els-article-tete{max-width:820px;margin:0 auto;padding:clamp(40px,5vw,64px) 24px clamp(32px,4vw,48px)}

/* L'ancre ne doit pas se cacher sous l'en-tête collant (même réglage que le lexique). */
.els-article h2{scroll-margin-top:110px}

/* Bureau : le sommaire passe à DROITE du texte, et l'ensemble texte + sommaire
   est centré dans la page. L'œil revient à gauche pour lire : un sommaire placé
   à gauche entre en concurrence avec le texte, à droite il devient un satellite
   que l'on consulte. La carte grise disparaît au profit d'une marginalia.

   Largeur : 820 (mesure de lecture, inchangée) + 56 (gouttière) + 238 (sommaire)
   + 2×24 de padding = 1162. Le corps de texte garde donc exactement sa mesure,
   il est seulement décalé à gauche pour que la paire soit centrée.

   Colonne en position absolue sur toute la hauteur de l'article + boîte interne
   collante : c'est le seul montage qui tienne, sticky ne pouvant pas coller
   au-delà de son bloc conteneur. */
@media (min-width:1240px){
  .els-article,.els-article-tete{max-width:1162px}
  .els-article{position:relative}
  .els-article > *:not(.els-toc):not(.els-toc-progres),
  .els-article-tete > *{max-width:820px}
  .els-toc{position:absolute;top:clamp(36px,4vw,56px);right:24px;bottom:0;width:238px;margin:0;padding:0;background:none;border:0}
  .els-toc-boite{position:sticky;top:132px;max-height:calc(100vh - 176px);overflow-y:auto}
  .els-toc-bascule{display:none}
  .els-toc-cote{display:flex}
  .els-toc-liste,.els-toc--replie .els-toc-liste{display:block;margin:0}
}
@media (prefers-reduced-motion:reduce){
  .els-toc-chev,.els-toc-lien{transition:none}
  .els-toc-progres-barre{will-change:auto}
}

/* -- Défilement doux vers les ancres --------------------------------------- *
   Un clic dans le sommaire d'article ou l'index A-Z du lexique sautait
   brutalement à la section : le lecteur perdait son repère. Le défilement animé
   le conserve.
   Sous @media no-preference : une personne ayant demandé moins d'animations
   retrouve le saut instantané, le défilement animé étant un déclencheur connu
   de gêne vestibulaire.
   NOTE DE VÉRIFICATION (23/07/2026) : impossible à contrôler depuis un onglet
   piloté, qui est « hidden » et n'exécute donc AUCUNE frame d'animation. Tout
   défilement animé y paraît cassé, natif comme maison. À valider à l'œil dans
   un navigateur au premier plan. */
@media (prefers-reduced-motion: no-preference) {
  html { scroll-behavior: smooth; }
}
