@font-face {
  font-family: "icons";
  src: url("../fonts/icons.eot");
  src: url("../fonts/icons.eot?#iefix") format("embedded-opentype"),
       url("../fonts/icons.ttf") format("truetype"),
       url("../fonts/icons.svg#icons") format("svg");
  font-weight: normal;
  font-style: normal;
}

/*
Inter : font-family: 'Inter', sans-serif;
Outfit : font-family: 'Outfit', sans-serif;
Epilogue : font-family: 'Epilogue', sans-serif;
*/

:root{
  --brique:#c1666b;   /* Artisanat */
  --brique_hover:#a94f54;
  --bleu:#1e75a0;     /* Croisières / Circuits */
  --bleu_hover:#1d698f;
  --violet:#75417f;   /* Culture / Laos */
  --violet_hover:#5f3468;
  --vert:#4a7c59;     /* Nature / Farm Stay / Informations */
  --vert_hover:#3b6347;
  --jaune:#d99f3e;    /* Spiritualité / Luang Prabang */
  --jaune_hover:#bd8630;
  --orange:#e96a25;   /* Sport & Aventure */
  --orange_hover:#c7561c;
  --gris:#535359;     /* Généraliste */
  --gris_hover:#33404a;

  /* Couleur dominante par catégorie de page (voir zcore_composition_class()) */
  --c-generale:var(--gris);
  --c-circuit:var(--bleu);
  --c-info:var(--brique);
  --c-mice:var(--violet);
  --c-page:var(--c-generale);

  --ink:var(--gris);
  --titre:var(--gris-deep);
  --fond-autre:#faf8f4;
  --gris-bg:#eef1f2; --gris-deep:#33404a; --line:#dedad3;
  --blanc:#fff;
  /* Triplet RGB de --gris-deep, ressorti en variable car repris tel quel
     (hors var()) dans plusieurs box-shadow/overlays du fichier. */
  --ink-rgb:32,39,47;
  --radius-md:0.2em; --radius-lg:0.4em; --radius-xl:1em;
  --shadow-card:0 3px 7px rgba(var(--ink-rgb),.10);
  --shadow-card-hover:0 10px 10px rgba(var(--ink-rgb),.18);

  /* Échelle d'espacement générique, réutilisable partout où un padding/gap
     est posé "à la main" — norme fixée sur .edito-face-avant .content
     (2em, demande utilisateur du 2026-09-07) = --space-lg. Toute nouvelle
     section doit piocher dans cette échelle plutôt qu'inventer une valeur
     ad hoc, pour que les cartes/panneaux du site restent visuellement
     homogènes. */
  --space-xs:.5em; --space-sm:1em; --space-md:1.5em; --space-lg:2em; --space-xl:3em;

  --font-texte: 'Inter', 'Outfit', 'Epilogue', 'Work Sans', Arial, sans-serif; /* I want to test these options */
  --font-titres: 'Fraunces', Georgia, serif;
  --font-eyebrow: var(--font-titres);
}

/* Sommaire (lignes approximatives, à date de la v1.2.2) :
   - Couleurs/thème de page, classe .couleur/data-couleur .......... 61
   - Base (body, typo, liens, boutons, listes, icônes) ............. 81
   - Fil d'ariane .................................................. 180
   - Header (bannière, variantes dist/sommaire/recherche/generale) . 490
   - Grille/sections génériques, rythme de fond alterné ............ 1740
   - Cartes (edito/testimonial/tour/rubrique), médias recadrés ..... 1778
   - CTA (contact, googlemap, prochain événement, a-la-une) ........ 2440
   - Sommaire v1.2.0 (header/breadcrumb dédiés) ..................... 3195
   Section suivante non listée : voir les commentaires /* Titre */ au fil
   du fichier, pas de renumérotation exhaustive pour ce nettoyage. */

/* Couleur dominante par catégorie de page */
html.composition_circuit,
html.composition_circuits { --c-page:var(--c-circuit); }
html.composition_information,
html.composition_informations { --c-page:var(--c-info); }
html.composition_mice { --c-page:var(--c-mice); }

/* Classe generique "couleur" : chaque <section> du site porte cette classe
   plus un attribut data-couleur (une des 7 couleurs thematiques) qui pilote
   --c-section pour cette section. Remplace les mecanismes ad hoc utilises
   auparavant par certaines sections (style inline --c-accent, classe
   .avant-voyage codee en dur) par un seul point d'entree reutilisable. */
.couleur[data-couleur="brique"] { --c-section:var(--brique); --c-section-hover:var(--brique_hover); }
.couleur[data-couleur="bleu"]   { --c-section:var(--bleu);   --c-section-hover:var(--bleu_hover); }
.couleur[data-couleur="violet"] { --c-section:var(--violet); --c-section-hover:var(--violet_hover); }
.couleur[data-couleur="vert"]   { --c-section:var(--vert);   --c-section-hover:var(--vert_hover); }
.couleur[data-couleur="jaune"]  { --c-section:var(--jaune);  --c-section-hover:var(--jaune_hover); background: var(--blanc);}
.couleur[data-couleur="orange"] { --c-section:var(--orange); --c-section-hover:var(--orange_hover); }
.couleur[data-couleur="gris"]   { --c-section:var(--gris);   --c-section-hover:var(--gris_hover); }

body{
  font-family:var(--font-texte);
  color:var(--ink);
  background:#f9f7f6;
  -webkit-font-smoothing:antialiased;
  font-size: 14pt;
  font-weight: 500;
  letter-spacing: 0.025em;
  line-height: 1.75em;
}
/*  body.is-preload *, body.is-preload *:before, body.is-preload *:after {
    -moz-animation: none !important;
    -webkit-animation: none !important;
    -ms-animation: none !important;
    animation: none !important;
    -moz-transition: none !important;
    -webkit-transition: none !important;
    -ms-transition: none !important;
    transition: none !important;
  }
*/
  a {
    -moz-transition: color 0.2s ease-in-out, border-color 0.2s ease-in-out, background-color 0.2s ease-in-out;
    -webkit-transition: color 0.2s ease-in-out, border-color 0.2s ease-in-out, background-color 0.2s ease-in-out;
    -ms-transition: color 0.2s ease-in-out, border-color 0.2s ease-in-out, background-color 0.2s ease-in-out;
    transition: color 0.2s ease-in-out, border-color 0.2s ease-in-out, background-color 0.2s ease-in-out;
    color: var(--c-page);
    text-decoration: none;
    border-bottom: dotted 1px;
  }
    a:hover {
      border-bottom-color: transparent;
    }

  strong, b {font-weight: 700;}
  img {max-width: 100%; height: auto;}
  em, i {font-style: italic;}
  p, ul, ol, dl, table, blockquote {margin: 0 0 2em 0;}

  h1, h2, h3, h4, h5, h6 {
    font-family: var(--font-titres);
    color: var(--titre);
    font-weight: 800;
    line-height: 1.3em;
    margin-bottom: 0.8em;
    letter-spacing: 0.02em;
  }

  h1 {
    font-size: 2.5em;
  }

    h1 a, h2 a, h3 a, h4 a, h5 a, h6 a {
      color: inherit;
      text-decoration: none;
      border: 0;
    }

  h2 {
    font-size: 1.5em;
    letter-spacing: 0em;
    line-height: 1.1em;
  }

  h3 {
    font-size: 1.15em;
    letter-spacing: 0.025em;
  }

  /* h4-h6 : titres dans les blocs (cartes, etc.), harmonisés sur un seul
     gabarit — taille reprise du titre des 6 bénéfices (demande du 2026-08-21) */
  h4 {
    font-size: .95em;
  }

  sub {
    font-size: 0.8em;
    position: relative;
    top: 0.5em;
  }

  sup {
    font-size: 0.8em;
    position: relative;
    top: -0.5em;
  }

  hr {
    border-top: solid 1px rgba(124, 128, 129, 0.2);
    border: 0;
    margin-bottom: 1.5em;
  }

  blockquote {
    border-left: solid 0.5em rgba(124, 128, 129, 0.2);
    font-style: italic;
    padding: 1em 0 1em 2em;
  }

  /* Fil d'Ariane */

  /* Fond anthracite + menu horizontal generalises a #breadcrumb par defaut
     (demande utilisateur 2026-09-15, confirme "toujours" sur toutes les
     pages le 2026-09-16 - l'ancien fond bleu propre a rubrique-circuits a
     ete retire a cette occasion, voir RUBRIQUE CIRCUITS plus bas). Plus
     aucune page ne surcharge cette couleur : html.page_sommaire et
     html.rubrique_circuits ne surchargent plus que leur propre
     positionnement sticky (is-fixed) - tout le reste (couleur, ordre,
     tailles, marges) vient d'ici. */
  #breadcrumb {
    padding: .7em 0;
    border-bottom: 0;
    background: rgba(var(--ink-rgb), .94);
    color: rgba(255, 255, 255, .85);
  }
  #breadcrumb .container {
    display: flex;
    align-items: center;
    /* flex-start (et non space-between) : #breadcrumb .container accueille
       .breadcrumb-lang (drapeaux, cf. body.html) sur toutes les pages, en plus
       du fil d'ariane et du menu horizontal - c'est la marge auto posee sur
       ul.breadcrumb-items plus bas qui pousse menu+drapeaux a droite, pas
       justify-content (sans effet sur les pages a un seul enfant, rien a
       repartir, donc aucune regression sur le fil d'ariane seul). */
    justify-content: flex-start;
    gap: 1em;
  }
  /* Drapeaux de langue a droite du menu horizontal, boutons A-/A+ a gauche
     du fil d'ariane (demande utilisateur 2026-09-15 - inversion de l'ordre
     d'origine, ou les drapeaux etaient en premier dans le HTML de
     body.html et les boutons ajoutes en dernier par le JS du plugin
     boutonstexte). #breadcrumb .container est deja en flex : un simple
     `order` sur chaque enfant suffit, sans toucher a l'ordre du HTML ni au
     JS d'injection. Ordre visuel : boutons > fil d'ariane > menu horizontal
     > drapeaux. `.nav-secondary-wrap` est scope a #breadcrumb ici (pas de
     regle globale sur cette classe), seul contexte ou elle vit encore
     depuis la suppression de la bar2 des headers (2026-09-16). `.boutonstexte`
     recoit son `order:-1` plus bas, regroupe avec le reste de ses regles
     existantes plutot que duplique ici. */
  #breadcrumb .nav-secondary-wrap { order: 1; flex-shrink: 0; }
  .breadcrumb-lang { order: 2; flex-shrink: 0; }
  ul.breadcrumb-items {
    display: flex;
    flex-wrap: wrap;
    list-style: none;
    margin: 0 auto 0 0;
    padding: 0;
    font-size: .8em;
    letter-spacing: .03em;
    color: inherit;
  }
    ul.breadcrumb-items li.item { display: flex; align-items: center; }
    /* Demande utilisateur 2026-09-16 : inversion du contraste - les
       rubriques meres (liens ancetres, menant vers le contenu courant)
       ressortent en blanc vif, tandis que le contenu courant (dernier
       maillon, span non cliquable) est attenue par opacite. */
    ul.breadcrumb-items li.item.active { opacity: .7; font-weight: 500; }
    ul.breadcrumb-items a { color: var(--blanc); border-bottom-color: transparent; opacity: 1; }
    ul.breadcrumb-items a:hover { opacity: .8; }
    ul.breadcrumb-items .sep { margin: 0 .5em; opacity: .5; }
    /* Icone "maison" (SVG images/icon_home.svg) a la place du texte "Accueil"
       en tete du fil d'ariane (breadcrumb/dist.html et inc-objet.html) - lien
       icone seule, texte accessible via title/aria-label sur le <a>. */
    ul.breadcrumb-items .icon-home {
      display: inline-block;
      width: 1.6em;
      height: 1.6em;
      background: url("../images/icon_home.svg") no-repeat center / contain;
    }
    /* Demande utilisateur 2026-09-16 : l'icone Home garde son ancien
       comportement (grise au repos, blanc vif au survol), non concernee par
       l'inversion de contraste ci-dessus appliquee aux rubriques meres. */
    ul.breadcrumb-items a.icon-home { opacity: .75; }
    ul.breadcrumb-items a.icon-home:hover { opacity: 1; }

  /* Menu horizontal du fil d'ariane, style "onglets" (demande utilisateur
     2026-09-15, affinee le 2026-09-16) : la 1ere entree (Circuits) et la
     suivante (Explorer) ont chacune un contour de couleur (circuit/info),
     fond transparent par defaut ; le fond ne se remplit de cette couleur
     que lorsque le contenu courant fait partie de la rubrique concernee.
     Les autres entrees (dont Contact, en derniere position) restent sans
     contour, fond toujours transparent. Selecteurs de position (nth-child)
     plutot que des classes du plugin Menus, pour ne pas dependre des
     libelles/rangs exacts configures en back-office - la seule hypothese
     est qu'Accueil ne fait plus partie de ce menu (retire du back-office
     le 2026-09-15).
     Enfant DIRECT (>) de .nav-secondary, pas simple descendant : le
     panneau deroulant de chaque entree (.circuit-dropdown, .mega-panel)
     contient lui-meme des .menu-entree/.menu-items__lien imbriques (sous-
     rubriques) qui seraient sinon aussi cibles par ces regles (constate le
     2026-09-15 - bug de fond corrige ici, cf. demande utilisateur). Scope
     #breadcrumb .nav-secondary uniquement, seul contexte ou cette classe
     vit encore depuis la suppression de la bar2 des headers (2026-09-16). */
  #breadcrumb .nav-secondary > .menu-entree:nth-child(1) > .menu-items__lien,
  #breadcrumb .nav-secondary > .menu-entree:nth-child(1) > .menu-items__texte {
    background: transparent;
    border: 1px solid var(--c-circuit);
    border-radius: 4px;
  }
  /* .on : classe posee nativement par le plugin Menus (menus_exposer) sur
     l'entree Circuits (type "objet", pointe une rubrique) quand la page
     courante en fait partie (rubrique elle-meme ou tout article de sa
     branche) - deja utilisee ailleurs dans ce fichier (menu-entree.on). */
  #breadcrumb .nav-secondary > .menu-entree:nth-child(1).on > .menu-items__lien,
  #breadcrumb .nav-secondary > .menu-entree:nth-child(1).on > .menu-items__texte {
    background: var(--c-circuit);
  }

  #breadcrumb .nav-secondary > .menu-entree:nth-child(2) > .menu-items__lien,
  #breadcrumb .nav-secondary > .menu-entree:nth-child(2) > .menu-items__texte {
    background: transparent;
    border: 1px solid var(--c-info);
    border-radius: 4px;
  }
  /* Explorer (entree "texte_libre") n'a pas d'equivalent natif a .on (le
     squelette du plugin menus/texte_libre.html n'appelle pas
     menus_exposer, contrairement a menus/objet.html) - "actif" est donc
     calcule a la main dans breadcrumb/dist.html (rubrique courante ou un
     de ses ancetres = Luang Prabang/Le Laos) et pose en classe
     .explorer-actif sur .nav-secondary-wrap, notre propre markup. */
  #breadcrumb .nav-secondary-wrap.explorer-actif > .nav-secondary > .menu-entree:nth-child(2) > .menu-items__lien,
  #breadcrumb .nav-secondary-wrap.explorer-actif > .nav-secondary > .menu-entree:nth-child(2) > .menu-items__texte {
    background: var(--c-info);
  }

  /* "Plus d'infos" (3e entree depuis le retrait d'Accueil le 2026-09-15,
     entree "objet" comme Circuits : classe .on posee nativement par
     menus_exposer, pas de calcul manuel necessaire ici contrairement a
     Explorer). Couleur jaune-or demandee par l'utilisateur - texte fonce
     force sur l'etat rempli, --jaune etant trop clair pour du blanc (cf.
     commentaire de .info-dropdown plus haut). */
  #breadcrumb .nav-secondary > .menu-entree:nth-child(3) > .menu-items__lien,
  #breadcrumb .nav-secondary > .menu-entree:nth-child(3) > .menu-items__texte {
    background: transparent;
    border: 1px solid var(--jaune);
    border-radius: 4px;
  }
  #breadcrumb .nav-secondary > .menu-entree:nth-child(3).on > .menu-items__lien,
  #breadcrumb .nav-secondary > .menu-entree:nth-child(3).on > .menu-items__texte {
    background: var(--jaune);
    color: #111;
  }

  /* plugin boutonstexte : injecté par JS dans #breadcrumb .container (cf. javascript/boutonstexte.js).
     float:none impératif : le CSS natif du plugin (css/boutonstexte.css) pose `.boutonstexte {float:right}`
     et n'est jamais réécrit par cette règle (seule display: est reprise ici) — sans ce reset, un cache CSS
     perimé ou tout contexte ou le conteneur `#breadcrumb .container` n'est pas trouve par le JS (repli sur
     prependTo('body')) fait flotter les boutons A-/A+ en haut a droite de tout le viewport au lieu de rester
     dans le fil d'ariane (observe sur Firefox, cf. retour utilisateur du 2026-09-10). Effet d'opacite
     aligne sur l'icone Accueil (`.icon-home`, `ul.breadcrumb-items a`) le 2026-09-16 : .75 au repos, 1
     au survol, demande explicite utilisateur ce jour (remplace l'opacite pleine fixee la veille). */
  .boutonstexte { display: inline-flex; float: none; align-items: center; gap: .5em; flex-shrink: 0; order: -1; }
  .boutonstexte a { display: inline-flex; opacity: .75; border-bottom: none; }
  .boutonstexte a:hover { opacity: 1; }
  .boutonstexte img { width: 18px; height: 18px; }

  /* Pagination */

  /* Image */


/* List */

  ol {
    list-style: decimal;
    padding-left: 1.25em;
  }

    ol li {
      padding-left: 0.25em;
    }

  ul {
    list-style: disc;
    padding-left: 1em;
  }

    ul li {
      padding-left: 0.5em;
    }

/* Icons */

/* Buttons */

  ul.buttons {
    cursor: default;
    list-style: none;
    padding-left: 0;
  }

    ul.buttons:last-child {
      margin-bottom: 0;
    }

    ul.buttons li {
      display: inline-block;
      padding: 0 0 0 1.5em;
    }

      ul.buttons li:first-child {
        padding: 0;
      }

    ul.buttons.stacked li {
      display: block;
      padding: 1.5em 0 0 0;
    }

      ul.buttons.stacked li:first-child {
        padding: 0;
      }

  /* Form */

  input[type="text"],
  input[type="password"],
  input[type="email"],
  textarea {
    -moz-transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out;
    -webkit-transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out;
    -ms-transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out;
    transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out;
    -moz-appearance: none;
    -webkit-appearance: none;
    -ms-appearance: none;
    appearance: none;
    background: none;
    border: solid 1px rgba(124, 128, 129, 0.2);
    border-radius: 0;
    color: inherit;
    display: block;
    padding: 0.75em;
    text-decoration: none;
    width: 100%;
    outline: 0;
  }

    input[type="text"]:focus,
    input[type="password"]:focus,
    input[type="email"]:focus,
    textarea:focus {
      border-color: #83d3c9;
    }

  input[type="text"],
  input[type="password"],
  input[type="email"] {
    line-height: 1em;
  }

  ::-webkit-input-placeholder {
    color: inherit;
    opacity: 0.5;
    position: relative;
    top: 3px;
  }

  :-moz-placeholder {
    color: inherit;
    opacity: 0.5;
  }

  ::-moz-placeholder {
    color: inherit;
    opacity: 0.5;
  }

  :-ms-input-placeholder {
    color: inherit;
    opacity: 0.5;
  }

/* List */

  ol {
    list-style: decimal;
    padding-left: 1.25em;
  }

    ol li {
      padding-left: 0.25em;
    }

  ul {
    list-style: disc;
    padding-left: 1em;
  }

    ul li {
      padding-left: 0.5em;
    }


/* Icons */

  ul.icons {
    list-style: none;
    padding-left: 0;
    cursor: default;
  }

    ul.icons li {
      display: inline-block;
      line-height: 1em;
      padding-left: 0.5em;
    }

      ul.icons li:first-child {
        padding-left: 0;
      }

/* Button */

  input[type="button"],
  input[type="submit"],
  input[type="reset"],
  button,
  .button {
    -moz-appearance: none;
    -webkit-appearance: none;
    -ms-appearance: none;
    appearance: none;
    -moz-transition: color 0.2s ease-in-out, border-color 0.2s ease-in-out, background-color 0.2s ease-in-out;
    -webkit-transition: color 0.2s ease-in-out, border-color 0.2s ease-in-out, background-color 0.2s ease-in-out;
    -ms-transition: color 0.2s ease-in-out, border-color 0.2s ease-in-out, background-color 0.2s ease-in-out;
    transition: color 0.2s ease-in-out, border-color 0.2s ease-in-out, background-color 0.2s ease-in-out;
    background: none;
    border: solid 1px;
    border-radius: 0;
    color: inherit;
    cursor: pointer;
    display: inline-block;
    font-size: 0.8em;
    font-weight: 900;
    letter-spacing: 2px;
    min-width: 18em;
    padding: 0 0.75em;
    line-height: 3.75em;
    text-align: center;
    text-decoration: none;
    text-transform: uppercase;
  }

    input[type="button"]:hover,
    input[type="submit"]:hover,
    input[type="reset"]:hover,
    button:hover,
    .button:hover {
      background: rgba(188, 202, 206, 0.15);
      border-color: inherit;
    }

    input[type="button"].stylelight,
    input[type="submit"].stylelight,
    input[type="reset"].stylelight,
    button.stylelight,
    .button.stylelight {
      background: #83d3c9;
      border-color: #83d3c9;
      color: var(--blanc) !important;
    }

      input[type="button"].stylelight:hover,
      input[type="submit"].stylelight:hover,
      input[type="reset"].stylelight:hover,
      button.stylelight:hover,
      .button.stylelight:hover {
        background: #96dad1 !important;
        border-color: #96dad1 !important;
      }

    input[type="button"].fit,
    input[type="submit"].fit,
    input[type="reset"].fit,
    button.fit,
    .button.fit {
      width: 100%;
    }

    input[type="button"].small,
    input[type="submit"].small,
    input[type="reset"].small,
    button.small,
    .button.small {
      font-size: 0.7em;
      min-width: 14em;
      padding: 0.5em 0;
    }

    /* Effet "light-sweep" : balayage lumineux diagonal au survol,
       repris de template_travel_base/css/theme.css — classe générique
       (au lieu d'une liste de sélecteurs figée) réutilisable sur tout
       bouton plein (sidebar circuits-filtre, sommaire-circuits...). */
    .btn-light-sweep {
      position: relative;
      overflow: hidden;
    }
      .btn-light-sweep::after {
        content: '';
        position: absolute;
        top: 0;
        left: -60%;
        width: 40%;
        height: 100%;
        background: linear-gradient(120deg, transparent, rgba(255,255,255,.55), transparent);
        transform: skewX(-20deg);
        transition: left .6s ease;
      }
      .btn-light-sweep:hover::after {
        left: 120%;
      }

/* Wrapper */

  .wrapper {
    margin-bottom: 5em;
    padding: 5em;
  }

    .wrapper.nopadding {
      padding: 0;
    }

    /* colle au pied-de-page : seul le margin-bottom saute, padding et style-* restent actifs */
    .wrapper.cta {
      margin-bottom: 0;
    }

    .wrapper.stylebleu {background-color: var(--bleu); color: var(--blanc);}
    .wrapper.stylejaune {background-color: var(--jaune); color: #111;}
    .wrapper.stylebrique {background: var(--brique); color: var(--blanc);}
    .wrapper.styleviolet {background: var(--violet); color: var(--blanc);}
    .wrapper.styleorange {background: var(--orange); color: var(--blanc);}
    .wrapper.stylevert {background: var(--vert); color: var(--blanc);}
    .wrapper.stylegris-bg {background: var(--gris-bg); color: var(--ink);}
    .wrapper.stylegris-deep {background: var(--gris-deep); color: var(--blanc);}

    .wrapper[class*="style"] input[type="button"],
    .wrapper[class*="style"] input[type="submit"],
    .wrapper[class*="style"] input[type="reset"],
    .wrapper[class*="style"] button,
    .wrapper[class*="style"] .button {
      border-color: currentColor;
      color: inherit;
    }

    .wrapper[class*="style"] input[type="button"]:hover,
    .wrapper[class*="style"] input[type="submit"]:hover,
    .wrapper[class*="style"] input[type="reset"]:hover,
    .wrapper[class*="style"] button:hover,
    .wrapper[class*="style"] .button:hover {
      background: rgba(255, 255, 255, 0.15);
    }

    .wrapper[class*="style"] input[type="button"].stylelight,
    .wrapper[class*="style"] input[type="submit"].stylelight,
    .wrapper[class*="style"] input[type="reset"].stylelight,
    .wrapper[class*="style"] button.stylelight,
    .wrapper[class*="style"] .button.stylelight {
      background: transparent;
      border-color: var(--blanc);
      color: var(--blanc) !important;
    }

    .wrapper[class*="style"] input[type="button"].stylelight:hover,
    .wrapper[class*="style"] input[type="submit"].stylelight:hover,
    .wrapper[class*="style"] input[type="reset"].stylelight:hover,
    .wrapper[class*="style"] button.stylelight:hover,
    .wrapper[class*="style"] .button.stylelight:hover {
      background: rgba(255, 255, 255, 0.15);
    }

/* Main */

  #main {}
    #main > :last-child {margin-bottom: 0;}
    #main .sidebar section {}
      #main .sidebar section:first-child {}
      #main .sidebar section:last-child {}

/* ==========================================================
   HEADER — 3 hauteurs (100% / 80% / 40%)
   ========================================================== */

  #header-banner {
    position: relative;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: var(--c-page);
    background-size: cover;
    background-position: center;
    color: var(--blanc);
    text-align: center;
  }
    #header-banner:before {
      content: '';
      position: absolute;
      inset: 0;
      background: linear-gradient(180deg, rgba(18,22,26,.55) 0%, rgba(18,22,26,.4) 45%, rgba(18,22,26,.65) 100%);
    }
    #header-banner .header-banner-inner {
      position: relative;
      z-index: 1;
    }

    /* Reveal-image : IMG/spip_fond_login.jpg est cachee en plein cadre
       derriere le banner ; .header-reveal est le hublot rond de 10em qui, en
       suivant le curseur, laisse voir la tranche de cette image qui se
       trouve a cet endroit (voir javascript/perso.js pour le calcul de
       background-position/-size - meme principe que le "spotlight hero
       reveal" classique). Cercle invisible (opacity 0, scale reduit) tant
       que la souris ne bouge pas ; apparait pendant le mouvement, se
       retracte et disparait 0.5s apres l'arret (classe reveal-active pilotee
       en JS). Position (left/top) fixee en JS a chaque mousemove, sans
       transition, pour un suivi instantane du curseur ; seules
       opacity/transform sont animees, donc toujours symetriques (pas
       d'ancrage sur un coin, contrairement a une transition de mask-size). */
    #header-banner .header-reveal {
      position: absolute;
      top: 0;
      left: 0;
      width: 10em;
      height: 10em;
      border-radius: 50%;
      z-index: 1;
      pointer-events: none;
      background-repeat: no-repeat;
      opacity: 0;
      transform: scale(.4);
      transition: opacity .25s ease, transform .25s ease;
    }
      #header-banner.reveal-active .header-reveal {
        opacity: 1;
        transform: scale(1);
      }

  /* Header + fil d'ariane = 100% de la hauteur ecran, sur toutes les pages
     (demande utilisateur 2026-09-16 - generalise a tout le site le mecanisme
     introduit le 2026-09-15 pour la seule rubrique-circuits, qui remplacait
     alors les paliers fixes hauteur-40/80/100 ci-dessous, desormais retires
     partout - #ENV{header_hauteur} n'est plus lu par aucun header/*.html).
     La hauteur reelle du #breadcrumb (variable selon le contenu - fil
     d'ariane simple ou menu horizontal en plus - et le line-height herite)
     n'est pas une valeur simple a deviner ici en CSS : mesuree en JS au
     chargement/redimensionnement (body.html, juste apres le #breadcrumb) et
     posee dans --breadcrumb-h sur la racine du document. Le 4.5rem de repli
     ne sert que le tout premier instant avant l'execution de ce script. Pas
     de palier reduit en mobile : la demande "100% de l'ecran" s'applique a
     toutes les tailles, volontairement. */
  #header-banner.hauteur-ecran-moins-breadcrumb {
    min-height: calc(100vh - var(--breadcrumb-h, 4.5rem));
  }

  /* Séparateur décoratif (glyphe icons U+E925) entre les entrées de menu */
  .icon-separator::before {
    font-family: 'icons';
    content: "\e926";
    font-style: normal;
    font-weight: normal;
    line-height: 1;
  }

  /* Marque "LT Travel" */
  .brand {
    font-family: var(--font-titres);
    font-size: .85em;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--blanc);
    display: inline-flex;
    align-items: baseline;
    gap: 5px;
  }
    .brand .lt { font-weight: 700; }
    .brand .travel { font-style: italic; font-weight: 400; opacity: .85; }

  /* bar1 : barre transparente en surimpression du header, avant scroll */
  .bar1 {
    position: absolute;
    top: 0; left: 0; right: 0;
    z-index: 20;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 20px;
    padding: 1.6em 2em 1em;
    transition: transform .5s cubic-bezier(.4,0,.2,1), opacity .35s ease;
  }
    .bar1.hidden { transform: translateY(-120%); opacity: 0; }

  .nav-primary { width: 100%; max-width: 1440px; }
    .nav-primary .menu-liste {
      display: flex;
      align-items: center;
      flex-wrap: wrap;
      justify-content: center;
      gap: 0;
      list-style: none;
      margin: 0;
      padding: 0;
    }
    .nav-primary .menu-sep {
      display: flex;
      align-items: center;
      justify-content: center;
      width: 1em;
      color: rgba(255,255,255,.5);
      font-size: .75em;
    }
    .nav-primary .menu-items__lien {
      display: inline-block;
      color: rgba(255,255,255,.92);
      font-family: var(--font-titres);
      font-size: .85em;
      letter-spacing: .1em;
      text-transform: uppercase;
      padding: .4em 1em;
      font-weight: 500;
      border-bottom-color: transparent;
      transition: transform .2s ease;
    }
    .nav-primary .menu-entree:hover .menu-items__lien { transform: scale(1.08); border-bottom-color: transparent; }

  .nav-secondary-wrap { display: flex; align-items: center; gap: 6px; }
  .nav-secondary {
    display: flex;
    align-items: center;
    gap: 6px;
    list-style: none;
    margin: 0;
    padding: 0;
  }
    /* le padding-bottom (compensé par une marge négative) sert de pont de
       survol vers le panneau de niveau 2 sans "trou mort" à la souris */
    .nav-secondary .menu-entree { position: relative; padding-bottom: 18px; margin-bottom: -18px; }
    .nav-secondary .menu-items__lien,
    .nav-secondary .menu-items__texte {
      display: inline-block;
      color: rgba(255,255,255,.9);
      font-family: var(--font-texte);
      font-size: .8em;
      letter-spacing: 0em;
      padding: .5em .8em;
      font-weight: 500;
      border-bottom-color: transparent;
      cursor: pointer;
      transition: transform .2s ease;
    }
    .nav-secondary .menu-entree:hover > .menu-items__lien,
    .nav-secondary .menu-entree:hover > .menu-items__texte { transform: scale(1.08); border-bottom-color: transparent; }
    /* objet consulte (rubrique/article) : classe "on" posee par menus_exposer sur le <li> */
    .menu-entree.on > .menu-items__lien {}

  /* Panneaux de niveau 2 : ouverture verticale progressive au survol */
  .sub-panel {
    font-family: var(--font-texte);
    text-align: left;
    position: absolute;
    top: 100%; right: 0;
    background: var(--blanc);
    box-shadow: var(--shadow-card-hover);
    padding: 1.4em 1.6em;
    z-index: 80;
    opacity: 0;
    visibility: hidden;
    transform: scaleY(0);
    transform-origin: top;
    transition: opacity .3s ease, transform .3s ease, visibility .3s;
    pointer-events: none;
  }
    /* Ouverture inversee tant que #breadcrumb n'est pas fixe (demande
       utilisateur 2026-09-16) : au chargement, #breadcrumb est colle au bas
       du header 100vh (cf. hauteur-ecran-moins-breadcrumb plus haut) - trop
       peu de place en dessous pour un panneau qui s'ouvre vers le bas, donc
       ouverture vers le haut par defaut ici. Des que #breadcrumb devient
       .is-fixed (colle en haut du viewport au scroll - classe posee par le
       script de breadcrumb/sommaire.html et breadcrumb/rubrique-circuits.html,
       seules pages a avoir ce mecanisme aujourd'hui), la place est de
       nouveau en dessous : on retombe sur .sub-panel ci-dessus, ouverture
       vers le bas inchangee. */
    #breadcrumb:not(.is-fixed) .sub-panel {
      top: auto; bottom: 100%;
      transform-origin: bottom;
    }
    .nav-secondary .menu-entree:hover .sub-panel {
      opacity: 1; visibility: visible; transform: scaleY(1); pointer-events: auto;
    }

  .mega-panel { display: flex; gap: 2.5em; }
    .mega-panel .mega-col {
      width: 220px;
      max-height: 60vh;
      overflow-y: auto;
      opacity: 0;
      transform: translateY(-6px);
      transition: opacity .3s ease, transform .3s ease;
    }
    .nav-secondary .menu-entree:hover .mega-panel .mega-col { opacity: 1; transform: translateY(0); }
    .mega-panel .mega-col:nth-child(1) { transition-delay: .08s; }
    .mega-panel .mega-col:nth-child(2) { transition-delay: .18s; }
    .mega-panel .mega-col-titre {
      display: flex; align-items: center; gap: 10px;
      font-family: var(--font-texte);
      font-size: 1.1em; font-weight: 500; letter-spacing: .04em;
      color: var(--brique);
      margin-bottom: .6em;
    }
      .mega-panel .mega-col-titre a { color: inherit; }
    .mega-panel .menu-liste { list-style: none; margin: 0; padding: 0; }
    .mega-panel .menu-items__lien {
      display: block; color: var(--ink); font-size: .85em;
      padding: .25em 0em;
      transition: background .15s ease, color .15s ease;
    }

    .mega-panel ul li { padding-left: 0; }
    .mega-panel li a.menu-items__lien { padding-left: 0; }
    .mega-panel .menu-items__lien .icon-separator,
    .mega-panel .menu-items__lien .tiret { margin-right: .4em; font-size: .75em; opacity: .5; }
    .mega-panel .menu-entree:hover > .menu-items__lien { padding-left: 0.8em; background: var(--brique); color: var(--blanc); }
    .mega-panel .menu-liste .menu-liste { padding-left: .6em; }
    .mega-panel .menu-liste .menu-liste .menu-items__lien { font-size: .8em; color: #6b747c; padding: .05em .5em; }
    .mega-panel .menu-liste .menu-liste .menu-entree:hover > .menu-items__lien { color: var(--blanc); }

  .circuit-dropdown { display: flex; flex-direction: column; gap: 2px; min-width: 200px; padding: .5em; }
    .circuit-dropdown .menu-items__lien {
      display: block; color: var(--ink); font-size: .85em;
      padding: .4em .9em;
      transition: background .15s ease, color .15s ease;
    }
    .circuit-dropdown .menu-items__lien:hover { background: var(--bleu); color: var(--blanc); }
    .circuit-dropdown .icon-separator { margin-right: .4em; font-size: .75em; opacity: .5; }
    .circuit-dropdown .menu-items__lien:hover .icon-separator { opacity: .9; }

  /* Sous-menu "Plus d'infos" : meme mecanique que .circuit-dropdown
     ci-dessus, couleur jaune-or (--jaune) demandee par l'utilisateur.
     Texte fonce (#111) au survol plutot que blanc : --jaune est trop
     clair pour un texte blanc lisible (meme constat deja fait sur
     .wrapper.stylejaune plus haut dans ce fichier, seul autre endroit du
     site associant --jaune a du texte). */
  .info-dropdown {
    padding: .5em;
    /* min-width 200px (comme .circuit-dropdown) trop etroit pour des
       titres d'articles (plus longs que les 4 mots-cles region de
       Circuits) - largeur qui suit le contenu, plafonnee pour rester un
       "encart" de menu, pas une pleine colonne (demande utilisateur
       2026-09-16, sous-rubriques/titres passant a la ligne). */
    min-width: 200px; width: max-content; max-width: 340px;
  }
    /* items rendus en li.menu-entree (balisage natif du plugin Menus,
       repris comme dans .mega-panel .menu-liste plus haut) au lieu de
       liens nus : reset de liste + mise en colonne portes par
       .menu-liste plutot que directement sur .info-dropdown. */
    .info-dropdown .menu-liste { display: flex; flex-direction: column; gap: 2px; list-style: none; margin: 0; padding: 0; }
    .info-dropdown .menu-entree { padding-left: 0; }
    .info-dropdown .menu-items__lien {
      display: block; color: var(--ink); font-size: .85em;
      padding: .4em .9em;
      white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
      transition: background .15s ease, color .15s ease;
    }
    .info-dropdown .menu-items__lien:hover { background: var(--jaune); color: #111; }
    /* Puce/separateur avant le titre : le balisage natif du plugin Menus
       (menus/objet.html) ne pose pas de span dedie pour ca (contrairement
       aux boucles maison .circuit-dropdown/.mega-panel) - meme glyphe
       "icons" (U+E926) que .icon-separator ci-dessus, pose directement en
       ::before du lien plutot qu'en surchargeant le squelette du plugin. */
    .info-dropdown .menu-items__lien::before {
      font-family: 'icons'; content: "\e926"; font-style: normal; font-weight: normal; line-height: 1;
      margin-right: .4em; font-size: .75em; opacity: .5;
    }
    .info-dropdown .menu-items__lien:hover::before { opacity: .9; }
    /* La derniere entree du sous-menu (lien retitre "Encore + d'infos"/
       "More more info" vers la rubrique elle-meme, configure directement
       dans le plugin Menus) se distingue deja visuellement par son texte -
       plus de classe -_voirtout- dediee depuis le passage au balisage
       natif #MENUS_AFFICHER_ENTREE (elle etait posee par l'ancien lien
       "Tous les articles" genere a la main, retire). */

  .lang { font-size: .75em; letter-spacing: .05em; }
  .lang.fr { color: rgba(255,255,255,.85); }
  .lang.en { color: rgba(255,255,255,.55); }

  /* .breadcrumb-lang (gauche du fil d'ariane, cf. body.html) : liens de
     langue #menu_lang (natifs du plugin mll) remplaces visuellement par des
     drapeaux — texte masque, image de fond posee sur les classes
     langue_fr/langue_en deja generees par mll, sans toucher au balisage du
     plugin. Footer non concerne (bloc CSS separe, #footer .footer-bottom-
     links #menu_lang). */
  .breadcrumb-lang #menu_lang { display: flex; align-items: center; gap: 8px; }
    .breadcrumb-lang #menu_lang a,
    .breadcrumb-lang #menu_lang strong {
      display: inline-block;
      width: 22px;
      height: 14px;
      overflow: hidden;
      text-indent: -999px;
      white-space: nowrap;
      background-repeat: no-repeat;
      background-position: center;
      background-size: cover;
      border-radius: 2px;
      opacity: .8;
      transition: opacity .2s ease, transform .2s ease;
    }
    .breadcrumb-lang #menu_lang a:hover { opacity: 1; transform: scale(1.1); }
    /* Contour blanc plein (demande utilisateur 2026-09-15), sur les 2 etats
       (lien inactif et langue courante). */
    .breadcrumb-lang #menu_lang a,
    .breadcrumb-lang #menu_lang strong { border: 1px solid #fff; }
    .breadcrumb-lang #menu_lang .langue_fr { background-image: url("../images/flag-fr-small.png"); }
    .breadcrumb-lang #menu_lang .langue_en { background-image: url("../images/flag-en-small.png"); }

  @media screen and (max-width: 840px) {
    .nav-primary, .nav-secondary { display: none; }
  }

  /* Encart titre centré + 2 infos, au milieu du header */
  .header-titrebox {
    padding: 2em;
  }
    /* Kicker : titre de la rubrique parente, au-dessus du titre de page -
       propre a header/dist.html (rubrique/article), meme esprit que le
       kicker du hero sommaire (header/sommaire.html, scope
       html.page_sommaire .header-kicker) mais scope ici sur les 2 classes
       de page que dist.html sert reellement - header/generale.html et
       header/recherche.html partagent .header-titrebox/.header-titre sans
       kicker, ne doivent pas heriter de cet agrandissement. */
    html.page_article .header-titrebox .header-kicker,
    html.page_rubrique .header-titrebox .header-kicker {
      display: flex;
      align-items: center;
      justify-content: center;
      gap: .8em;
      margin: 0 0 .6em;
      font-family: var(--font-texte);
      font-size: .8em;
      font-weight: 500;
      letter-spacing: .2em;
      text-transform: uppercase;
      color: rgba(255,255,255,.82);
      text-shadow: 0 1px 6px rgba(0,0,0,.3);
    }
      html.page_article .header-titrebox .header-kicker-line,
      html.page_rubrique .header-titrebox .header-kicker-line {
        width: 2em;
        height: 1px;
        background: rgba(255,255,255,.4);
      }
    html.page_article .header-titrebox .header-titre,
    html.page_rubrique .header-titrebox .header-titre {
      font-size: clamp(2.2rem, 5vw, 3.6rem);
      font-weight: 700;
      line-height: 1.15em;
    }
    .header-titrebox h1,
    .header-titrebox .header-titre {
      margin-bottom: 0.35em;
      text-shadow: 0 2px 12px rgba(0,0,0,.35);
    }
    .header-titrebox .header-infos {
      display: flex;
      justify-content: center;
      gap: 1.5em;
      font-family: var(--font-titres);
      font-size: 0.9em;
      letter-spacing: 0.05em;
      opacity: .92;
    }

    /* Header rubrique-circuits : accroche sous le titre + icones thematiques
       (demande utilisateur 2026-09-16, header/rubrique-circuits.html).
       Accroche reprise du style .header-tagline du hero sommaire plus bas
       dans ce fichier (italique, police titres) plutot que du texte courant.
       Memes classes .themes/.icon-theme/.tooltip-theme que .tour-card
       (inclure/carte-circuit-simple.html) et .circuit-info-bloc
       (inclure/article-circuit-sidebar.html), redeclarees ici scopees a
       .header-themes ; boucle du squelette sans lien a un contenu precis,
       donc toujours les 6 thematiques avec toutes leurs sous-thematiques au
       survol. Taille corrigee 2 fois le 2026-09-16 : d'abord ramenee a 44px
       (retour "trop grand"), puis reagrandie a 56px/rounded-square (retour
       "maintenant trop petit") - la bulle d'info-bulle reste en taille fixe
       (rem, pas em) dans les 2 cas, donc son texte ne bouge plus quelle que
       soit la taille de la pastille. Bulle ouverte sous la pastille (`top`),
       pas au-dessus comme .tour-card/.circuit-info-bloc : demande
       utilisateur du 2026-09-16, propre a ce contexte header. */
    .header-titrebox .header-baseline {
      font-family: var(--font-titres);
      font-style: italic;
      font-weight: 400;
      font-size: 1.05em;
      letter-spacing: normal;
      margin: 0 0 1.5em;
      opacity: .88;
      text-shadow: 0 1px 6px rgba(0,0,0,.3);
    }
    .header-titrebox .header-themes {
      display: flex;
      justify-content: center;
      flex-wrap: wrap;
      gap: 1em;
      margin-bottom: .3em;
    }

    /* Header rubrique-informations : titres des articles affiches en
       mots-cles/tags sous le titre (demande utilisateur 2026-09-16,
       header/rubrique-informations.html). Reprend .tag-list/.tag-pill de
       content/recherche.html (mots-cles suggeres), surcharge ici en clair
       sur fond sombre - meme logique de scoping que .header-themes juste
       au-dessus. */
    .header-titrebox .header-tags {
      display: flex;
      justify-content: center;
      flex-wrap: wrap;
      gap: .6em;
      margin: var(--space-xl) 0 .3em;
    }
    @media screen and (min-width: 981px) {
      .header-titrebox .header-tags {
        max-width: 840px;
        margin-left: auto;
        margin-right: auto;
      }
    }
    .header-titrebox .header-tags .tag-pill {
      background: var(--blanc);
      border-color: var(--blanc);
      color: var(--ink);
      box-shadow: 0 2px 8px rgba(0,0,0,.2);
    }
    .header-titrebox .header-tags .tag-pill:hover,
    .header-titrebox .header-tags .tag-pill:focus {
      border-color: var(--c-page);
      color: var(--c-page);
    }
    .header-titrebox .header-themes .icon-theme {
      position: relative;
      width: 56px; height: 56px;
      border-radius: .4em;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      font-family: 'icons';
      font-size: 2em;
      color: var(--blanc);
      box-shadow: 0 2px 8px rgba(0,0,0,.25);
      /* background-color pose en inline par le squelette (couleur thematique) */
      transition: transform .2s ease, box-shadow .2s ease;
    }
    .header-titrebox .header-themes .icon-theme:hover,
    .header-titrebox .header-themes .icon-theme:focus {
      transform: translateY(-2px);
      box-shadow: 0 4px 12px rgba(0,0,0,.3);
    }
    .header-titrebox .header-themes .tooltip-theme {
      position: absolute;
      top: calc(100% + 10px);
      left: 50%;
      transform: translateX(-50%);
      z-index: 5;
      min-width: 170px;
      max-width: 220px;
      padding: .7em .9em;
      border-radius: var(--radius-lg);
      box-shadow: var(--shadow-card-hover);
      background: inherit;
      color: var(--blanc);
      font-family: var(--font-texte);
      font-size: .8rem;
      text-align: left;
      opacity: 0;
      visibility: hidden;
      pointer-events: none;
      transition: opacity .2s ease;
    }
    .header-titrebox .header-themes .icon-theme:hover .tooltip-theme,
    .header-titrebox .header-themes .icon-theme:focus .tooltip-theme { opacity: 1; visibility: visible; }
    .header-titrebox .header-themes .tooltip-titre {
      display: block;
      font-family: var(--font-titres);
      font-size: .85em;
      font-weight: 800;
      letter-spacing: .05em;
      text-transform: uppercase;
      margin-bottom: .5em;
    }
    .header-titrebox .header-themes .tooltip-theme ul {
      list-style: none;
      margin: 0;
      padding: 0 0 6px 0;
    }
    .header-titrebox .header-themes .tooltip-theme li {
      position: relative;
      padding-left: .9em;
      font-size: .85em;
      line-height: 1.5em;
    }
    .header-titrebox .header-themes .tooltip-theme li::before {
      content: "–";
      position: absolute;
      left: 0;
    }

  /* Champ de recherche du header/recherche.html (fichier independant de
     header/generale.html, propre a la page recherche) : centre dans le
     header-titrebox, sous les 2 barres de menu. Pas de label (placeholder
     seul = recherche en cours). Pilule blanche a bordure fine (--line),
     input transparent, bouton loupe accole a droite separe par un filet
     vertical - un seul bloc pilule, pas deux elements disjoints. */
  .header-recherche {
    display: flex;
    align-items: stretch;
    justify-content: center;
    min-width: 360px;
    width: 600px;
    max-width: 80vw;
    margin: 1.2em auto 0;
    background: var(--blanc);
    border: 1px solid var(--line);
    border-radius: 999px;
    overflow: hidden;
  }
    .header-recherche-input {
      flex: 1 1 auto;
      min-width: 0;
      background: transparent;
      border: none;
      color: var(--ink);
      padding: .75em 1.3em;
      font-size: .95em;
      font-family: inherit;
    }
    .header-recherche-input::placeholder { color: var(--gris); opacity: .75; }
    .header-recherche-submit {
      flex: 0 0 auto;
      display: flex;
      align-items: center;
      justify-content: center;
      width: 3em;
      min-width: 0;
      padding: 0;
      line-height: normal;
      border: none;
      border-left: 1px solid var(--line);
      background: transparent;
      color: var(--ink);
      cursor: pointer;
      transition: background .2s ease;
    }
    .header-recherche-submit:hover { background: var(--gris-bg); }

  @media screen and (max-width: 736px) {
    .header-recherche { width: 360px; }
    html.page_article .header-titrebox .header-kicker,
    html.page_rubrique .header-titrebox .header-kicker { font-size: .7em; letter-spacing: .16em; }
    html.page_article .header-titrebox .header-kicker-line,
    html.page_rubrique .header-titrebox .header-kicker-line { width: 1.4em; }
    .header-titrebox .header-themes { gap: .7em; }
    .header-titrebox .header-themes .icon-theme { width: 46px; height: 46px; font-size: 1.6em; }
  }

/* ==========================================================
   CONTENT — H1 et wrapper principal
   ========================================================== */

  #content {
    padding: 4em 0;
  }
    #content h1 {
      color: var(--titre);
    }

    /* Sommaire (v1.2.0) : chaque section gere deja son propre padding via
       .couleur, le padding-bottom generique de #content s'ajoutait a celui
       du bloc #cta (.wrapper.cta, 5em) et creait un espace trop grand entre
       la derniere section (temoignages) et le CTA. */
    html.page_sommaire #content {
      padding-bottom: 0;
    }

/* ==========================================================
   SIDEBARS
   ========================================================== */

  /* Espacement entre sidebar et content-main : .row (grid.css) n'a aucun
     gutter par defaut (seul .gtr-0 existe, deja a 0) - meme valeur que
     .layout-sidebar-slim pour rester coherent sur tout le site. Corrige
     au passage un manque deja present sur article-circuits (sidebar et
     content-main colles, jamais remarque car les cadres blancs de la
     sidebar suffisaient a la distinguer visuellement). */
  .layout-sidebar-normal-1,
  .layout-sidebar-normal-2 {
    gap: 2em;
  }

  /* col-3/col-9 (grid.css) totalisent deja 100% du conteneur : au moindre
     gap ajoute la somme depasse 100%, et .row (flex-wrap:wrap) fait
     passer content-main a la ligne suivante des le calcul des lignes -
     avant meme que flex-shrink n'ait sa chance de compenser. Constate en
     live (screenshot + getBoundingClientRect), pas suppose. Meme parade
     que .layout-sidebar-slim plus haut : sidebar en largeur fixe,
     content-main en flex-basis 0 qui absorbe tout le reste (conteneur
     moins sidebar moins gap). Scopee au-dessus du seuil mobile 736px pour
     laisser intact l'empilement par .col-12-mobile{width:100%}. */
  @media screen and (min-width: 737px) {
    .layout-sidebar-normal-1 .sidebar,
    .layout-sidebar-normal-2 .sidebar {
      flex: 0 0 320px;
    }
    .layout-sidebar-normal-1 .content-main,
    .layout-sidebar-normal-2 .content-main {
      flex: 1 1 0;
      min-width: 0;
    }
  }

  /* normal-1 : tablette -> sidebar en début de contenu
     normal-2 : tablette -> sidebar en fin de contenu */
  .layout-sidebar-normal-1 .sidebar { order: -1; }
  .layout-sidebar-normal-2 .sidebar { order: 1; }

  @media screen and (max-width: 980px) {
    .layout-sidebar-normal-1 .sidebar,
    .layout-sidebar-normal-2 .sidebar {
      order: 0;
    }
    .layout-sidebar-normal-1 .sidebar { order: -1; }
    .layout-sidebar-normal-2 .sidebar { order: 1; }
  }

  /* Article circuit : sidebar (prix/durée/difficulté + bouton) fixe au
     scrolling pendant que le texte défile. align-self:flex-start requis
     car .row est display:flex/align-items:stretch — sans lui l'aside est
     étiré à la hauteur du flex-container et ne peut pas "sticker". top:96px
     laissait passer la bar2 (barre de menu fixe compacte, ~90px) - bar2
     supprimee le 2026-09-16, valeur conservee telle quelle (non revisitee,
     pas d'acces navigateur pour la remesurer, cf. [[feedback-no-network-calls]]). */
  #article-circuits .sidebar {
    position: sticky;
    top: 96px;
    align-self: flex-start;
  }

  @media screen and (max-width: 980px) {
    /* pas de sticky en mobile : la sidebar est empilée au-dessus du texte,
       pas à côté — rien à fixer pendant le scroll */
    #article-circuits .sidebar {
      position: static;
    }
  }

  /* slim : largeur fixe 200px sur grand écran, 2 blocs empilés */
  .layout-sidebar-slim {
    display: flex;
    flex-wrap: wrap;
    gap: 2em;
  }
    .layout-sidebar-slim .sidebar-slim {
      flex: 0 0 240px;
      display: flex;
      flex-direction: column;
      gap: 1.5em;
    }
    .layout-sidebar-slim .content-main {
      flex: 1 1 0;
      min-width: 0;
    }

  @media screen and (max-width: 980px) {
    .layout-sidebar-slim {
      flex-direction: column;
      flex-wrap: nowrap;
    }
    .layout-sidebar-slim .sidebar-slim {
      flex-basis: auto;
      width: 100%;
    }
    /* mobile : filtre au-dessus des résultats */
    .layout-sidebar-slim .sidebar-slim { order: -1; }
    .layout-sidebar-slim .content-main { order: 0; }
  }

  /* "fixing option on scrolling" (demande rubrique-circuits) : les 2 blocs
     de la sidebar (filtre + mini-calendrier) restent visibles ensemble
     pendant que la colonne de résultats défile. Scopé à #rubrique-circuits
     seul — le sommaire réutilise .sidebar-slim pour son propre bloc
     circuits mais n'a pas demandé ce comportement, et sa colonne de
     résultats (slideshow Slick, hauteur fixe) n'a de toute façon rien à
     dépasser pour qu'un sticky serve à quelque chose. align-self:flex-start
     est nécessaire car le parent est display:flex — sans lui l'aside est
     étiré à la hauteur du flex-container et ne peut pas "sticker". top:96px
     laissait passer la bar2 (barre de menu fixe compacte, ~90px) - bar2
     supprimee le 2026-09-16, valeur conservee telle quelle (non revisitee,
     pas d'acces navigateur pour la remesurer, cf. [[feedback-no-network-calls]]). */
  #rubrique-circuits .sidebar-slim {
    position: sticky;
    top: 96px;
    align-self: flex-start;
  }

  @media screen and (max-width: 980px) {
    /* pas de sticky en mobile : le filtre est empilé au-dessus des
       résultats, pas à côté — rien à fixer pendant le scroll */
    #rubrique-circuits .sidebar-slim {
      position: static;
    }
  }

  /* Rubrique circuits : 2 blocs de la sidebar-slim (filtre + mini-calendrier),
     et grille de résultats en dur (pas de slideshow ici, contrairement au
     bloc circuits du sommaire). Scopé à #rubrique-circuits : le sommaire
     réutilise déjà .sidebar-slim-bloc-2 pour son propre formulaire (déjà
     stylé via .formulaire-filtre-statique) et ne doit pas hériter d'un
     2e cadre blanc autour. */
  #rubrique-circuits .sidebar-slim-bloc-1,
  #rubrique-circuits .sidebar-slim-bloc-2 {
    background: var(--blanc);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    overflow: hidden;
  }
    #rubrique-circuits .sidebar-slim-bloc-1 .formulaire-filtre-statique {
      border: 0;
      border-radius: 0;
    }
    #rubrique-circuits .sidebar-slim-bloc-2 .calendrier-mini-wrap {
      padding: 1.2em 1.4em;
    }

  .tour-grid {
    display: grid;
    gap: 2em;
  }
    .tour-grid.cols3 { grid-template-columns: repeat(3, 1fr); }

  @media screen and (max-width: 1280px) {
    .tour-grid.cols3 { grid-template-columns: repeat(2, 1fr); }
  }
  @media screen and (max-width: 640px) {
    .tour-grid.cols3 { grid-template-columns: 1fr; }
  }

  .tours-results .aucun-resultat {
    background: var(--gris-bg);
    padding: 2em;
    text-align: center;
    color: var(--gris);
  }

  .pagination {
    display: flex;
    justify-content: center;
    gap: .6em;
    margin-top: 2.5em;
  }
    .pagination a,
    .pagination strong {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      min-width: 2.4em;
      height: 2.4em;
      padding: 0 .5em;
      border: 1px solid var(--line);
      border-radius: 50%;
      font-size: .85em;
      font-weight: 700;
    }
    .pagination a:hover {
      border-color: var(--c-page);
      color: var(--c-page);
    }
    .pagination strong {
      /* pas de var(--c-page) ici : sur cette install, --c-generale/--c-circuit/
         --c-info/--c-mice sont ecrases a vide par le CSS genere par
         configurer_template_travel (css/travel-template.css, "Gestion des
         couleurs"), ce qui invalide --c-page site-wide (fond transparent,
         page courante illisible en blanc sur blanc) - a corriger cote
         generateur separement. */
      background: #000;
      border-color: #000;
      color: var(--blanc);
    }

/* ==========================================================
   ARTICLE CIRCUIT — intro, sidebar prix/durée/difficulté, contact
   ========================================================== */

  /* Ancre douce du bouton "Demande d'infos" (sidebar) vers #contact-circuit.
     scroll-margin-top laissait passer la bar2 (barre de menu fixe compacte,
     supprimee le 2026-09-16, valeur conservee telle quelle), même valeur
     que le top du sticky de #rubrique-circuits. */
  html { scroll-behavior: smooth; }
  #contact-circuit { scroll-margin-top: 96px; }

  .circuit-infos {
    display: flex;
    flex-direction: column;
    gap: 1.2em;
  }
    .circuit-info-bloc {
      background: var(--blanc);
      border: 1px solid var(--line);
      border-radius: var(--radius-md);
      padding: 1em 1.2em;
    }
      .circuit-info-label {
        font-family: var(--font-titres);
        font-size: .8em;
        letter-spacing: .08em;
        text-transform: uppercase;
        opacity: .6;
        margin-bottom: .4em;
      }
      .circuit-info-valeur {
        font-size: 1.15em;
        font-weight: 700;
      }
        .circuit-info-valeur .unit {
          font-size: .7em;
          font-weight: 500;
          opacity: .6;
        }
      .circuit-difficulte {
        list-style: none;
        padding: 0;
        margin: 0;
      }
        .circuit-difficulte li {
          padding: 0;
          margin-bottom: .3em;
          font-weight: 700;
        }
        .circuit-difficulte li:last-child { margin-bottom: 0; }

    .circuit-info-cta .button {
      display: block;
      text-align: center;
    }

    /* Icones thematiques (sidebar) : memes classes .themes/.icon-theme/
       .tooltip-theme qu'inclure/carte-circuit-simple.html (.tour-card),
       redeclarees ici car scopees a .tour-card la-bas. La bulle est ancree
       a gauche sur les 2 premieres pastilles (colonne la plus a gauche de
       la page, une bulle centree deborderait du conteneur). */
    .circuit-info-bloc .themes { display: flex; flex-wrap: wrap; gap: .6em; }
    .circuit-info-bloc .icon-theme {
      position: relative;
      width: 38px; height: 38px;
      border-radius: 0.3em;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      font-family: 'icons';
      font-size: .8em;
      color: var(--blanc);
      /* background-color pose en inline par le squelette (couleur thematique) */
      transition: transform .2s ease;
    }
    .circuit-info-bloc .icon-theme:hover { transform: translateY(-2px) scale(1.08); }
    .circuit-info-bloc .tooltip-theme {
      position: absolute;
      bottom: calc(100% + 10px);
      left: 50%;
      transform: translateX(-50%);
      z-index: 5;
      min-width: 190px;
      max-width: 260px;
      padding: .8em 1em;
      border-radius: var(--radius-lg);
      box-shadow: var(--shadow-card-hover);
      background: inherit;
      color: var(--blanc);
      font-family: var(--font-texte);
      text-align: left;
      opacity: 0;
      visibility: hidden;
      pointer-events: none;
      transition: opacity .2s ease;
    }
    .circuit-info-bloc .icon-theme:hover .tooltip-theme,
    .circuit-info-bloc .icon-theme:focus .tooltip-theme { opacity: 1; visibility: visible; }
    .circuit-info-bloc .icon-theme:nth-child(1) .tooltip-theme,
    .circuit-info-bloc .icon-theme:nth-child(2) .tooltip-theme {
      left: 0;
      transform: none;
    }
    .circuit-info-bloc .tooltip-titre {
      display: block;
      font-family: var(--font-titres);
      font-size: .8em;
      font-weight: 800;
      letter-spacing: .05em;
      text-transform: uppercase;
      margin-bottom: .5em;
    }
    .circuit-info-bloc .tooltip-theme ul {
      list-style: none;
      margin: 0;
      padding: 0 0 10px 0;
    }
    .circuit-info-bloc .tooltip-theme li {
      position: relative;
      padding-left: .9em;
      font-size: .7em;
      line-height: 1.5em;
    }
    .circuit-info-bloc .tooltip-theme li::before {
      content: "–";
      position: absolute;
      left: 0;
    }

  /* Bloc contact article circuit : formulaire Formidable "contact_circuit",
     2 fieldsets (nom "fieldset_1" / "fieldset_2" cote back-office) a 50%
     l'un a cote de l'autre. Le squelette saisies/fieldset.html du plugin
     saisies prefixe systematiquement la classe par "fieldset_" + le nom
     de la saisie (#ENV{nom}|saisie_nom2classe), d'ou la classe reelle
     "fieldset_fieldset_1" / "fieldset_fieldset_2" (verifie dans
     plugins/auto/saisies/v6.3.6/saisies/fieldset.html) - ne pas
     confondre avec la classe generique "fieldset" presente sur tous les
     fieldsets. Bouton #ENV{...} rendu par la saisies plugin dans
     <p class="boutons"> en frere de .editer-groupe (voir
     formulaires/inc-saisies-cvt.html du plugin saisies) donc deja sous les
     2 colonnes sans reglage supplementaire.
     Fond legerement teinte (var(--gris-bg), meme mecanique que
     #recherche-page .aucun-resultat) pour distinguer le bloc du texte de
     l'article au-dessus.
     La mise en 2 colonnes ne doit cibler QUE le .editer-groupe racine
     (direct enfant du <div> de inc-saisies-cvt.html, lui-meme enfant du
     <form>) : chaque fieldset genere aussi son propre .editer-groupe
     imbrique pour ses champs (meme squelette fieldset.html, ligne 30). Si
     la regle flex visait tous les .editer-groupe sans distinction, les
     champs courts de "About your journey" (dates, nb personnes, cases a
     cocher) se retrouvaient eux aussi cote a cote au lieu de s'empiler -
     d'ou le selecteur "form > div > .editer-groupe" qui ne matche que le
     niveau racine (les groupes imbriques sont enfants d'un <fieldset>, pas
     du <div> direct du <form>), laissant les champs internes en
     empilement vertical par defaut (comportement natif du plugin saisies,
     aucune regle supplementaire necessaire pour l'empilement). */
  .circuit-contact-form {
    background: var(--gris-bg);
    padding: 2em;
    border-radius: var(--radius-md);
  }
  .circuit-contact-form h3 { margin-bottom: 1em; }
  .circuit-contact-form form > div > .editer-groupe {
    display: flex;
    flex-wrap: wrap;
    gap: 2em;
  }
  .circuit-contact-form form > div > .editer-groupe > fieldset.fieldset_fieldset_1,
  .circuit-contact-form form > div > .editer-groupe > fieldset.fieldset_fieldset_2 {
    flex: 1 1 calc(50% - 1em);
    min-width: 0;
  }

  /* Formulaire sans fieldset (Formidable #3, "demande d'infos"/"votre
     message" de content/rubrique-informations.html) : les .editer de
     chaque champ sont alors enfants DIRECTS de ce meme .editer-groupe
     racine (pas de <fieldset> intermediaire) - sans cette regle ils
     heritaient du display:flex ci-dessus sans flex-basis dedie (seuls
     les .fieldset_fieldset_1/_2 en ont un), et se retrouvaient cote a
     cote au lieu de s'empiler. Bug releve par l'utilisateur le
     2026-09-16 sur le formulaire repete de cette page (seul appelant de
     -circuit-contact-form- avec un Formidable sans fieldset a ce jour). */
  .circuit-contact-form form > div > .editer-groupe > .editer {
    flex: 1 1 100%;
  }

  @media screen and (max-width: 736px) {
    .circuit-contact-form form > div > .editer-groupe > fieldset.fieldset_fieldset_1,
    .circuit-contact-form form > div > .editer-groupe > fieldset.fieldset_fieldset_2 {
      flex-basis: 100%;
    }
  }

  /* Legendes de fieldset (saisies/fieldset.html) : "About you"/"About your
     journey" en tete de colonne + "Langue"/"Main interests" (sous-groupes
     pliables) plus discrets. Toujours un <legend> nu (jamais de classe
     "editer-label" a ce niveau - voir fieldset.html ligne 24), donc jamais
     touche par le masquage de labels ci-dessous. */
  .circuit-contact-form legend {
    display: block;
    font-family: var(--font-titres);
    font-weight: 700;
    margin-bottom: 1em;
  }
  .circuit-contact-form fieldset fieldset legend {
    font-size: .8em;
    letter-spacing: .06em;
    text-transform: uppercase;
    opacity: .7;
    margin-bottom: .8em;
  }

  /* Espacement vertical entre chaque champ (chaque champ = un .editer
     genere par saisies/_base.html), sur les 2 colonnes. */
  .circuit-contact-form .editer { margin-bottom: var(--space-sm); }
  .circuit-contact-form .editer:last-child { margin-bottom: 0; }

  /* Labels des champs masques visuellement (seuls les placeholders
     restent visibles) - meme technique offscreen que
     #cta-contact .contact-block-form .editer-label plus haut dans ce
     fichier. Limite au tag <label> : pour une saisie checkbox/radio (ex.
     "Main interests", "Langue"), saisies/_base.html rend ce meme label
     applicatif en <legend class="editer-label label"> (conteneur_label
     "legend" - voir plugins/auto/saisies/v6.3.6/saisies/checkbox.php,
     checkbox_get_markup()) : ces choix n'ont pas de placeholder de
     substitution, donc ce texte doit rester visible, d'ou le selecteur
     "label.editer-label" plutot que ".editer-label" tout court. */
  .circuit-contact-form label.editer-label {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
  }

  /* Cases a cocher ("Main interests"/"Langue") : le reset sitewide
     "input, select, textarea {appearance:none}" (grid.css) les rend
     invisibles sans re-styling explicite - meme correctif deja applique
     a .formulaire-filtre-statique input[type="radio"] plus haut dans ce
     fichier, transpose ici en checkbox. */
  .circuit-contact-form .choix {
    display: block;
    margin-bottom: .5em;
  }
  .circuit-contact-form .choix input[type="checkbox"] {
    -moz-appearance: checkbox;
    -webkit-appearance: checkbox;
    appearance: checkbox;
    width: auto;
    accent-color: var(--c-circuit);
  }
  .circuit-contact-form .choix label {
    display: inline-flex;
    align-items: center;
    gap: .6em;
    cursor: pointer;
  }

  /* Bouton d'envoi centre sous les 2 colonnes, detache du bloc de champs. */
  .circuit-contact-form .boutons {
    margin-top: var(--space-lg);
    text-align: center;
  }

  /* Page Contact (content/article-contact.html) : le meme formulaire
     Formidable #1/.circuit-contact-form n'y est plus un simple bloc
     secondaire de fiche circuit mais l'objet principal de la page - repris
     en carte blanche "accueillante" avec un vrai en-tete editorial
     (.section-head/.eyebrow/.rule, meme motif que les CTA contact plus bas
     dans ce fichier) a la place du <h3> nu d'avant, et des champs qui se
     voient enfin (fond+bordure nets sur la carte blanche, placeholder
     plus soutenu) - demande utilisateur du 2026-09-10 ("formulaire trop
     laid, on ne voit pas les placeholders"). Scope sur #article-contact-page
     pour ne pas toucher le formulaire identique (memes classes) de
     content/article-circuits.html (#article-circuits), pas concerne par
     cette demande. Meme probleme et meme remede pour le formulaire "demande
     d'infos" (Formidable #3, sans fieldset) de content/rubrique-informations.html,
     etendu ici a #rubrique-informations. */
  #article-contact-page .circuit-contact-form,
  #rubrique-informations .circuit-contact-form {
    background: var(--blanc);
    border: 1px solid var(--line);
    border-radius: var(--radius-lg);
    box-shadow: var(--shadow-card);
    padding: 2.6em 2.6em 2.8em;
    margin-top: var(--space-xl);
  }
  #article-contact-page .circuit-contact-form .section-head,
  #rubrique-informations .circuit-contact-form .section-head {
    margin-bottom: 2em;
  }
  #article-contact-page .circuit-contact-form .rule,
  #rubrique-informations .circuit-contact-form .rule {
    background: var(--c-info);
  }
  #article-contact-page .contact-form-intro,
  #rubrique-informations .contact-form-intro {
    margin: .8em 0 0;
    font-size: .95em;
    opacity: .7;
  }

  /* Encart formulaire repete de content/rubrique-informations.html
     (.form-pause-grid) : texte d'intro et champs cote a cote (col-4/col-8,
     meme grille que inclure/article-circuit-contact.html) plutot
     qu'empiles, pour limiter la hauteur d'un bloc qui revient toutes les 6
     fiches - demande utilisateur du 2026-09-16. Le .section-head generique
     ci-dessus (centre, filet centre par margin:auto) est pense pour un
     bloc pleine largeur au-dessus d'un formulaire, pas pour une colonne
     etroite a cote des champs : ecrase ici en aligne a gauche. Scope
     #rubrique-informations uniquement, la version pleine page de
     #article-contact-page (bloc unique, pas repete) garde l'empilement
     centre d'origine. */
  #rubrique-informations .form-pause-grid .section-head {
    text-align: left;
    max-width: none;
    margin: 0;
  }
  #rubrique-informations .form-pause-grid .section-head .rule {
    margin: 1em 0 0;
  }
  #rubrique-informations .form-pause-intro {
    display: flex;
    align-items: center;
  }
  @media screen and (max-width: 736px) {
    #rubrique-informations .form-pause-intro { margin-bottom: 1.5em; }
  }

  /* Carte trop large/imposante pour un bloc repete toutes les 6 fiches -
     demande utilisateur du 2026-09-16 : padding reduit, specifique a
     .rubrique-info-form-pause (la carte pleine page de
     #article-contact-page garde son padding d'origine). */
  #rubrique-informations .rubrique-info-form-pause.circuit-contact-form {
    padding: 1.4em 1.8em 1.6em;
  }

  /* Champs du formulaire (#FORMULAIRE_FORMIDABLE{3}) reorganises en grille
     nom+email empiles / message cote a cote, puis antispam/bouton cote a
     cote en dessous - 2 rangees de 2 blocs mitoyens plutot que
     l'empilement vertical par defaut du plugin saisies, pour un bloc plus
     horizontal et bien moins haut - demande utilisateur du 2026-09-16.
     Cible les classes .editer_<nom> generees par saisies/_base.html
     d'apres le nom de champ configure cote Formidable (formulaire #3
     "Contact General", cf. spip_formulaires.saisies : input_1=nom
     complet, input_3=email, textarea_1=message, input_6=antispam).
     Couplage fragile par nature (une renumerotation des champs en
     back-office casserait ce placage), mais aucune autre accroche stable
     n'existe sans toucher au squelette du plugin (proscrit, cf.
     .editer-groupe generique sinon). Le <div> nu entre <form> et
     .editer-groupe (saisies/formulaires/inc-saisies-cvt.html ligne 31,
     sans classe) sert de conteneur de grille ; .editer-groupe passe en
     display:contents pour que ses champs deviennent des items de cette
     grille au meme niveau que .boutons (sinon le bouton, hors de
     .editer-groupe, resterait sous la grille au lieu d'y occuper une
     case). */
  #rubrique-informations .form-pause-champs form > div {
    display: grid;
    grid-template-columns: 1fr 1.2fr;
    column-gap: 1.5em;
  }
  #rubrique-informations .form-pause-champs .editer-groupe {
    display: contents;
  }
  #rubrique-informations .form-pause-champs .editer_input_1 { grid-column: 1; grid-row: 1; }
  #rubrique-informations .form-pause-champs .editer_input_3 { grid-column: 1; grid-row: 2; }
  #rubrique-informations .form-pause-champs .editer_textarea_1 { grid-column: 2; grid-row: 1 / 3; }
  #rubrique-informations .form-pause-champs .editer_input_6 { grid-column: 1; grid-row: 3; }
  #rubrique-informations .form-pause-champs .boutons {
    grid-column: 2;
    grid-row: 3;
    margin: 0;
    align-self: center;
    text-align: left;
  }
  #rubrique-informations .rubrique-info-form-pause .editer {
    margin-bottom: var(--space-xs);
  }
  #rubrique-informations .rubrique-info-form-pause.circuit-contact-form textarea {
    min-height: 76px;
  }
  @media screen and (max-width: 736px) {
    #rubrique-informations .form-pause-champs form > div {
      grid-template-columns: 1fr;
    }
    #rubrique-informations .form-pause-champs .editer_input_1,
    #rubrique-informations .form-pause-champs .editer_input_3,
    #rubrique-informations .form-pause-champs .editer_textarea_1,
    #rubrique-informations .form-pause-champs .editer_input_6,
    #rubrique-informations .form-pause-champs .boutons {
      grid-column: 1;
      grid-row: auto;
    }
    #rubrique-informations .form-pause-champs .boutons { text-align: center; }
  }

  /* Champs : le fond gris-bg de la carte d'origine + la bordure a peine
     visible de la regle generique (rgba .2, plus haut dans ce fichier)
     fondaient entierement les champs dans leur propre carte - sur du gris
     sur gris, le placeholder (color:inherit a 50% d'opacite, meme regle
     generique) devenait quasi illisible. La carte est maintenant blanche
     (ci-dessus) : on redonne aux champs un fond legerement teinte + une
     bordure nette pour qu'on voie ou cliquer, et on fonce un peu le
     placeholder pour qu'il reste net sur ce fond clair. */
  #article-contact-page .circuit-contact-form input[type="text"],
  #article-contact-page .circuit-contact-form input[type="email"],
  #article-contact-page .circuit-contact-form input[type="password"],
  #article-contact-page .circuit-contact-form textarea,
  #article-contact-page .circuit-contact-form select,
  #rubrique-informations .circuit-contact-form input[type="text"],
  #rubrique-informations .circuit-contact-form input[type="email"],
  #rubrique-informations .circuit-contact-form input[type="password"],
  #rubrique-informations .circuit-contact-form textarea,
  #rubrique-informations .circuit-contact-form select {
    background: var(--gris-bg);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    padding: .85em 1em;
  }
  #article-contact-page .circuit-contact-form input[type="text"]:focus,
  #article-contact-page .circuit-contact-form input[type="email"]:focus,
  #article-contact-page .circuit-contact-form input[type="password"]:focus,
  #article-contact-page .circuit-contact-form textarea:focus,
  #article-contact-page .circuit-contact-form select:focus,
  #rubrique-informations .circuit-contact-form input[type="text"]:focus,
  #rubrique-informations .circuit-contact-form input[type="email"]:focus,
  #rubrique-informations .circuit-contact-form input[type="password"]:focus,
  #rubrique-informations .circuit-contact-form textarea:focus,
  #rubrique-informations .circuit-contact-form select:focus {
    background: var(--blanc);
    border-color: var(--c-info);
  }
  #article-contact-page .circuit-contact-form textarea,
  #rubrique-informations .circuit-contact-form textarea {
    min-height: 130px;
  }
  #article-contact-page .circuit-contact-form input::-webkit-input-placeholder,
  #article-contact-page .circuit-contact-form textarea::-webkit-input-placeholder,
  #rubrique-informations .circuit-contact-form input::-webkit-input-placeholder,
  #rubrique-informations .circuit-contact-form textarea::-webkit-input-placeholder {
    color: var(--gris);
    opacity: .65;
  }
  #article-contact-page .circuit-contact-form input:-moz-placeholder,
  #article-contact-page .circuit-contact-form textarea:-moz-placeholder,
  #article-contact-page .circuit-contact-form input::-moz-placeholder,
  #article-contact-page .circuit-contact-form textarea::-moz-placeholder,
  #rubrique-informations .circuit-contact-form input:-moz-placeholder,
  #rubrique-informations .circuit-contact-form textarea:-moz-placeholder,
  #rubrique-informations .circuit-contact-form input::-moz-placeholder,
  #rubrique-informations .circuit-contact-form textarea::-moz-placeholder {
    color: var(--gris);
    opacity: .65;
  }
  #article-contact-page .circuit-contact-form input:-ms-input-placeholder,
  #article-contact-page .circuit-contact-form textarea:-ms-input-placeholder,
  #rubrique-informations .circuit-contact-form input:-ms-input-placeholder,
  #rubrique-informations .circuit-contact-form textarea:-ms-input-placeholder {
    color: var(--gris);
    opacity: .65;
  }

  /* Cases a cocher : accent-color alignee sur la couleur chaleureuse de la
     page (var(--c-info), meme teinte que l'eyebrow/le filet ci-dessus)
     plutot que le bleu circuit de la regle generique. */
  #article-contact-page .circuit-contact-form .choix input[type="checkbox"] {
    accent-color: var(--c-info);
  }

  /* Colonnes "About you"/"About your journey" separees par un filet
     vertical discret en plus du gap - lecture plus nette de 2 blocs de
     formulaire distincts plutot que 2 colonnes qui se touchent. */
  @media screen and (min-width: 737px) {
    #article-contact-page .circuit-contact-form form > div > .editer-groupe > fieldset.fieldset_fieldset_2 {
      padding-left: 2em;
      border-left: 1px solid var(--line);
    }
  }

  /* Bouton d'envoi : sort du style outline generique (transparent, tres
     discret) pour un bouton plein dans la meme couleur chaleureuse que
     l'eyebrow/le filet - plus engageant sur une page dont c'est l'unique
     appel a l'action. */
  #article-contact-page .circuit-contact-form input[type="submit"],
  #article-contact-page .circuit-contact-form button[type="submit"],
  #rubrique-informations .circuit-contact-form input[type="submit"],
  #rubrique-informations .circuit-contact-form button[type="submit"] {
    background: var(--c-info);
    border-color: var(--c-info);
    color: var(--blanc);
    border-radius: var(--radius-md);
    min-width: 14em;
  }
  #article-contact-page .circuit-contact-form input[type="submit"]:hover,
  #article-contact-page .circuit-contact-form button[type="submit"]:hover,
  #rubrique-informations .circuit-contact-form input[type="submit"]:hover,
  #rubrique-informations .circuit-contact-form button[type="submit"]:hover {
    background: var(--brique_hover);
    border-color: var(--brique_hover);
  }

  @media screen and (max-width: 736px) {
    #article-contact-page .circuit-contact-form,
    #rubrique-informations .circuit-contact-form {
      padding: 1.8em 1.5em 2em;
    }
  }

  /* Documents à télécharger, fin de content */
  .documents-joints {
    margin-top: 3em;
    padding-top: 2em;
    border-top: 1px solid var(--line);
  }
    .documents-joints h4 {
      font-family: var(--font-titres);
      margin-bottom: 1em;
    }
    .documents-joints ul {
      list-style: none;
      padding: 0;
      margin: 0;
      display: flex;
      flex-direction: column;
      gap: .6em;
    }
    .documents-joints li {
      display: flex;
      align-items: center;
      gap: .8em;
      padding: .8em 1em;
      background: var(--blanc);
      border: 1px solid var(--line);
      border-radius: var(--radius-md);
    }
      .documents-joints .doc-titre { flex: 1; font-weight: 700; }
      .documents-joints .doc-meta { font-size: .8em; opacity: .6; }
      .documents-joints .doc-telecharger {
        font-size: .85em;
        font-weight: 700;
        color: var(--c-page);
        white-space: nowrap;
      }
      .documents-joints .doc-telecharger:hover { color: var(--brique); }

/* ==========================================================
   FOOTER — logo + colonnes de liens
   ========================================================== */

  #footer {
    background: #16181b;
    color: var(--blanc);
    padding: 4em 0 2em;
  }
    #footer ul li {
      padding-left: 0em;
    }
    #footer a {
      color: var(--blanc);
      opacity: .85;
      border-bottom-color: transparent;
    }
    #footer a:hover {
      opacity: 1;
    }
    #footer .footer-top {
      display: grid;
      grid-template-columns: 1.4fr 2.6fr;
      gap: 3em;
      margin-bottom: 3em;
    }
    #footer .footer-brand {
      max-width: 300px;
    }
    #footer .footer-logo {
      font-family: var(--font-titres);
      font-style: italic;
      font-size: 1.5em;
      margin-bottom: .6em;
      display: block;
    }
    #footer .footer-tagline {
      font-size: .85em;
      line-height: 1.7em;
      opacity: .6;
      margin: 0;
    }
    /* Colonnes du footer = rendu generique du plugin menus (inclure/menu.html,
       identifiant footer_fr/footer_en choisi selon #LANG). Depth 0 = les
       colonnes elles-memes (chaque <li> = 1 colonne, son lien/texte direct =
       l'intitule de colonne) ; depth 1 = la liste de liens de chaque colonne. */
    #footer .footer-menu {
      list-style: none;
      padding: 0;
      margin: 0;
    }
    #footer .footer-menu[data-depth="0"] {
      display: grid;
      grid-template-columns: repeat(auto-fit, minmax(130px, 1fr));
      gap: 2em;
    }
      #footer .footer-menu[data-depth="0"] > li > a,
      #footer .footer-menu[data-depth="0"] > li > span {
        display: block;
        font-size: 0.8em;
        letter-spacing: 0.1em;
        text-transform: uppercase;
        font-weight: 700;
        opacity: .8;
        margin-bottom: 1.1em;
        font-family: var(--font-texte);
      }
    #footer .footer-menu[data-depth="1"] > li {
      margin-bottom: 0.2em;
    }
      #footer .footer-menu[data-depth="1"] > li > a,
      #footer .footer-menu[data-depth="1"] > li > span {
        opacity: .55;
        font-weight: 400;
        text-transform: none;
        letter-spacing: normal;
        font-size: 0.85em;
        text-decoration: none;
        
      }
      #footer .footer-menu[data-depth="1"] > li > a:hover {opacity: .65}
    #footer .footer-bottom {
      display: flex;
      flex-wrap: wrap;
      align-items: center;
      justify-content: space-between;
      gap: 1em;
      border-top: solid 1px rgba(255, 255, 255, .15);
      padding-top: 1.5em;
      font-size: 0.8em;
      opacity: .7;
    }
      #footer .footer-copyright { margin: 0; }
      #footer .footer-bottom-links ul {
        display: flex;
        flex-wrap: wrap;
        gap: 1.5em;
        list-style: none;
        padding: 0;
        margin: 0;
      }
      #footer .footer-bottom-links #menu_lang {
        display: inline-flex;
        gap: .6em;
      }
        #footer .footer-bottom-links #menu_lang a,
        #footer .footer-bottom-links #menu_lang strong {
          opacity: .85;
          text-transform: uppercase;
        }

    @media screen and (max-width: 900px) {
      #footer .footer-top { grid-template-columns: 1fr; }
      #footer .footer-brand { max-width: none; }
      #footer .footer-menu[data-depth="0"] { grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); }
    }
    @media screen and (max-width: 640px) {
      #footer .footer-top { grid-template-columns: 1fr; }
      #footer .footer-menu[data-depth="0"] { grid-template-columns: 1fr 1fr; }
    }
    @media screen and (max-width: 736px) {
      #footer .footer-bottom { flex-direction: column; align-items: flex-start; }
    }

/* ==========================================================
   ACCUEIL — blocs de la page sommaire
   ========================================================== */

  #sommaire-intro {padding: 0;}

  #sommaire-benefices,
  #sommaire-circuits,
  #sommaire-evenements,
  .sommaire-mot-headline,
  .sommaire-mot-slideshow,
  .selection_edito,
  .selection_edito_a_la_une {
    padding: 4.5em 0;
  }

  /* Rythme de fond alterné entre sections */
  #sommaire-circuits { background: var(--fond-autre); }
  #sommaire-evenements { background: var(--gris-bg); }
  .sommaire-mot-slideshow { background: var(--gris-bg); }

  /* Petit intitulé en majuscules au-dessus des titres de section */
  .eyebrow {
    display: block;
    font-family: var(--font-eyebrow);
    font-size: .70em;
    font-weight: 800;
    letter-spacing: .18em;
    text-transform: uppercase;
    color: var(--c-info);
    margin-bottom: .4em;
  }
  .section-head {
    text-align: center;
    max-width: 680px;
    margin: 0 auto 1.5em;
  }
    .section-head h2 { margin-bottom: .3em; }
    .section-head .rule {
      width: 48px;
      height: 2px;
      background: var(--c-page);
      margin: 1em auto 0;
    }

  /* Cartes des selections_editoriales (modeles/selection_edito.html) : au
     survol, un pan glisse depuis le bas (titre + intro + lien) — meme
     mecanique que les 6 bénéfices, cf. .benefice / .benefice-face-arriere
     plus bas (demande du 2026-08-21 : mêmes effets, pas de zoom/ombre). */
  .edito-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(260px, 1fr));
    gap: 28px;
  }
  /* Base commune des "cartes" du site (fond blanc, coin arrondi, ombre légère) :
     .edito-card / .testimonial-card / .tour-card / .events-panel partagent
     exactement cette recette, seuls leurs à-côtés diffèrent (padding, layout,
     transitions). .rubrique-card n'est PAS de la partie : sa base utilise une
     bordure au lieu d'une ombre (ombre seulement au survol), donc un rendu
     différent — regroupée séparément plus bas. */
  .edito-card, .testimonial-card, .tour-card, .events-panel {
    border-radius: var(--radius-md);
    box-shadow: var(--shadow-card);
    background: var(--blanc);
  }

  .edito-card {
    position: relative;
    overflow: hidden;
  }
    .edito-card a { display: block; }
    .edito-face {
      display: flex;
      flex-direction: column;
    }
    .edito-face-avant {
      transition: opacity .45s ease;
    }
      .edito-face-avant .media {
        position: relative;
        overflow: hidden;
        border-radius: var(--radius-md) var(--radius-md) 0 0;
        aspect-ratio: 4 / 3;
      }
      /* adaptive_images enveloppe l'image dans <picture class="adapt-img-wrapper"
         style="position:relative">, non dimensionné par defaut : sans ces règles
         chaque carte afficherait sa photo à sa taille naturelle au lieu de
         remplir son cadre. Recette commune aux 3 endroits du site qui affichent
         une image adaptive_images en fond de carte/média (.edito-face-avant,
         .edito-a-la-une-slick, .tour-card) — reprise ici une seule fois. */
      .edito-face-avant .media .adapt-img-wrapper,
      .edito-a-la-une-slick .slide .adapt-img-wrapper,
      .tour-card .media .adapt-img-wrapper {
        position: absolute;
        inset: 0;
        width: 100%;
        height: 100%;
      }
      .edito-face-avant .media .adapt-img,
      .edito-a-la-une-slick .slide .adapt-img,
      .tour-card .media .adapt-img {
        display: block;
        width: 100%;
        height: 100%;
        object-fit: cover;
      }
      .edito-face-avant .content { padding: var(--space-lg); }
      /* separateur repris de .tour-card .divider-icon (carte-circuit-simple.html) */
      .edito-face-avant .divider-icon {
        display: flex;
        align-items: center;
        gap: .8em;
        color: var(--line);
        font-family: 'icons';
        font-size: 1.2em;
        margin: .8em 0;
      }
        .edito-face-avant .divider-icon::before,
        .edito-face-avant .divider-icon::after {
          content: '';
          flex: 1;
          height: 1px;
          background: var(--line);
        }
        .edito-face-avant .divider-icon .icon-separator { flex-shrink: 0; line-height: 1; }
      .edito-face-avant .desc {
        font-size: .85em;
        color: var(--gris-deep);
        line-height: 1.7em;
      }
    .edito-face-arriere {
      position: absolute;
      inset: 0;
      background: var(--jaune);
      color: var(--blanc);
      align-items: center;
      justify-content: center;
      text-align: center;
      padding: var(--space-lg);
      transform: translateY(100%);
      transition: transform .9s ease;
    }
      .edito-face-arriere .title {
        color: var(--blanc);
        font-size: 1.1em;
        font-weight: 700;
      }
      .edito-face-arriere .separateur {
        width: 36px;
        height: 2px;
        background: var(--blanc);
        opacity: .6;
        margin: .7em auto;
      }
      /* separateur avec icone centrale, repris de .edito-face-avant .divider-icon
         (demande du 2026-08-21) */
      .edito-face-arriere .divider-icon {
        display: flex;
        align-items: center;
        gap: .8em;
        width: 70%;
        max-width: 200px;
        color: rgba(255, 255, 255, .6);
        font-family: 'icons';
        font-size: 1.2em;
        margin: .8em 0;
      }
        .edito-face-arriere .divider-icon::before,
        .edito-face-arriere .divider-icon::after {
          content: '';
          flex: 1;
          height: 1px;
          background: rgba(255, 255, 255, .6);
        }
        .edito-face-arriere .divider-icon .icon-separator { flex-shrink: 0; line-height: 1; }
      .edito-face-arriere .desc {
        font-size: .85em;
        line-height: 1.6em;
        margin-bottom: 1em;
        text-align: justify;
      }
      .edito-face-arriere .lien {
        font-size: .85em;
      }
    .edito-card:hover .edito-face-avant { opacity: 0; }
    .edito-card:hover .edito-face-arriere { transform: translateY(0); }

  /* Variante Slick de la selection edito (inclure/section-slick-3-articles.html) :
     meme gouttiere que .edito-grid (gap: 28px) entre les cartes, via padding
     sur .slide + marge negative equivalente sur .slick-list (qui a
     overflow:hidden par defaut) pour ne pas deborder sur les bords du
     carousel - meme mecanique que #circuits-slideshow-home / .mot-slideshow. */
  .edito-slick .slide { padding: 0 14px; }
  .edito-slick .slick-list { margin: 0 -14px; }

  /* "A lire avant de venir" (id_selection=1) : rendu rapproché de la section
     .avant-voyage de squelette6.2 (fond crème, filigrane spiritualité,
     cartes plates a bordure) — n'affecte pas les autres selection_edito
     (ex. "La ferme", id_selection=2) qui gardent le style carte/ombre du site. */
  .selection_edito.avant-voyage {
    position: relative;
    overflow: hidden;
    background: #faf4e6;
  }
    .selection_edito.avant-voyage::before {
      content: "\eb82";
      font-family: 'icons';
      position: absolute;
      top: 50%;
      right: -4vw;
      transform: translateY(-50%);
      font-size: min(38vw, 520px);
      line-height: 1;
      color: var(--c-section);
      opacity: .08;
      pointer-events: none;
    }
    .selection_edito.avant-voyage .container { position: relative; z-index: 1; }
    .selection_edito.avant-voyage .edito-card {
      border-radius: 0;
      box-shadow: none;
      border: 1px solid var(--line);
    }
      .selection_edito.avant-voyage .edito-face-avant .media { border-radius: 0; }

  /* "A la une du sommaire" (id_selection=2, modeles/selection_edito_a_la_une.html) :
     meme design que la section "farm" de squelette6.2/sommaire.html (classes
     .mice/.mice-alt, cf. css/layout.css lignes 476-493) — panneau plein fond
     couleur, texte a gauche / visuel a droite en flex 50/50 — mais le #TEXTE
     unique est remplace par un slideshow Slick 1 slide a la fois des photos
     de la selection (demande du 2026-08-21). --c-section vient de la classe
     .couleur/data-couleur posee sur la section (cf. modele), pilotee par
     #ENV{couleur}. */
  .selection_edito_a_la_une {
    background: var(--c-section);
    color: var(--blanc);
  }
    .edito-a-la-une-wrap {
      max-width: 1180px;
      margin: 0 auto;
      display: flex;
      gap: 56px;
      align-items: center;
      flex-wrap: wrap;
    }
      .edito-a-la-une-info {
        flex: 1;
        min-width: 300px;
      }
        .edito-a-la-une-info a { color: inherit; }
        .edito-a-la-une-info h2,
        .edito-a-la-une-info h3 { color: var(--blanc); margin: 0 0 18px; }
        .edito-a-la-une-info .desc { color: rgba(255, 255, 255, .85); line-height: 1.75em; }

      .edito-a-la-une-slideshow {
        flex: 1;
        min-width: 300px;
      }

    @media (max-width: 900px) {
      .edito-a-la-une-wrap { flex-direction: column; }
    }

  .edito-a-la-une-slick .slide {
    position: relative;
    display: block;
    overflow: hidden;
    aspect-ratio: 4 / 3;
  }
    /* Positionnement/recadrage commun défini plus haut (cf. .edito-face-avant
       .media .adapt-img-wrapper) — ici seul l'effet de zoom au survol est propre
       à ce carrousel. */
    .edito-a-la-une-slick .slide .adapt-img-wrapper { transition: transform .7s ease; }
    .edito-a-la-une-slick .slide:hover .adapt-img-wrapper { transform: scale(1.05); }
    .edito-a-la-une-slick .slide-caption {
      position: absolute;
      left: 0;
      right: 0;
      bottom: 0;
      padding: 1.2em 1em .8em;
      background: linear-gradient(180deg, rgba(0, 0, 0, 0) 0%, rgba(0, 0, 0, .65) 100%);
      color: var(--blanc);
      font-size: .9em;
      font-weight: 600;
    }
  .edito-a-la-une-slick .slick-dots li button:before { color: var(--blanc); opacity: .5; }
  .edito-a-la-une-slick .slick-dots li.slick-active button:before { color: var(--blanc); opacity: 1; }
  .edito-a-la-une-slick .slick-prev:before,
  .edito-a-la-une-slick .slick-next:before { color: var(--blanc); }

  /* "Temoignages" (id_selection=3, modeles/selection_edito_testimonials.html) :
     fond gris clair (rythme alterne, cf. #sommaire-evenements) + grille de
     cartes blanches, guillemet decoratif en haut, citation, signature separee
     par un filet fin (nom en gras + nom du voyage en gris, ce dernier tire de
     l'objet lie via le champ url generique du back-office). */
  .selection_edito.testimonials { background: var(--gris-bg); }
  .testimonials-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(280px, 1fr));
    gap: 28px;
  }
  .testimonial-card {
    display: block;
    padding: var(--space-lg);
    color: inherit;
    text-decoration: none;
    transition: transform .25s ease;
  }
  /* Carte cliquable (sommaire) vers la rubrique Temoignages complete -
     leger effet de survol, meme logique que .icon-theme:hover. */
  a.testimonial-card:hover { transform: translateY(-3px); }
    .testimonial-card .quote-icon {
      display: block;
      font-family: Georgia, serif;
      font-size: 2.4em;
      line-height: 1;
      color: var(--c-info);
      margin-bottom: .2em;
    }
    .testimonial-card .quote {
      line-height: 1.7em;
      margin: 0 0 1.4em;
    }
    .testimonial-card .testimonial-signature {
      border-top: 1px solid var(--line);
      padding-top: 1em;
    }
      .testimonial-card .testimonial-signature strong {
        display: block;
        font-family: var(--font-titres);
      }
      .testimonial-card .testimonial-signature span {
        display: block;
        font-size: .85em;
        opacity: .6;
        margin-top: .2em;
      }

  #sommaire-intro { text-align: center; }

  .intro-lead {
    display: flex;
    align-items: flex-start;
    justify-content: center;
    gap: 1.2em;
    max-width: 800px;
    margin: 0 auto 3em;
  }
    .intro-texte {
      text-align: center;
    }
    .intro-texte p:last-child { margin-bottom: 0; }

  /* 6 bénéfices : rangée de cases bordées, contenu qui bascule au survol */
  .benefices-row {
    border-top: 1px solid var(--line);
    border-left: 1px solid var(--line);
  }
    .benefices-row > * {
      border-right: 1px solid var(--line);
      border-bottom: 1px solid var(--line);
    }

  .benefice {
    position: relative;
    height: 260px;
    cursor: default;
    overflow: hidden;
    background: var(--blanc);
  }
    .benefice-face {
      position: absolute;
      inset: 0;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      text-align: center;
      padding: var(--space-lg);
    }
    .benefice-face a {color: var(--blanc);}
    .benefice-face-avant {
      transition: opacity .45s ease;
    }
      .benefice-icone {
        font-family: 'icons';
        font-size: 2.2em;
        color: var(--brique);
        margin-bottom: .6em;
        line-height: 1;
      }
      .benefice-titre {
        max-width: 70%;
      }
      .benefice-titre-face {
        font-size: 1.2em;
        color: var(--blanc);
        max-width: 70%;
        margin-bottom: 12px;}
      .benefice-descriptif {margin-bottom: 1em;}

    .benefice-face-arriere {
      background: var(--brique);
      color: var(--blanc);
      font-size: .80em;
      line-height: 1.3;
      transform: translateY(100%);
      transition: transform .5s ease;
    }
    .benefice:hover {
      z-index: 1;
    }
    .benefice:hover .benefice-face-avant {
      opacity: 0;
    }
    .benefice:hover .benefice-face-arriere {
      transform: translateY(0);
    }

  /* Fleches slick invisibles : le plugin charge a la fois slick-theme.min.css
     (theme classique, fleche blanche prevue pour un rond de fond sombre) et
     accessible-slick-theme.min.css (fleche sur fond transparent) en meme temps
     — le ::before de slick-theme.min.css impose color:var(--blanc) qui gagne sur le
     color:#000 de la version accessible (meme specificite, charge apres),
     d'ou une fleche blanche invisible sur fond clair. Fix generique, toutes
     les slideshows slick du site — ".slick-slider" (ajoutee par slick.js sur
     le conteneur a l'init) sert juste a monter la specificite au-dessus de
     celle de slick-theme.min.css, sans !important. */
  .slick-slider .slick-prev .slick-prev-icon::before,
  .slick-slider .slick-next .slick-next-icon::before {
    color: var(--gris-deep);
  }
  .slick-slider .slick-prev:hover .slick-prev-icon::before,
  .slick-slider .slick-next:hover .slick-next-icon::before {
    color: var(--c-page);
  }

  /* Curseur "main" sur tous les slideshows slick du site, pour indiquer
     qu'on peut faire glisser (drag) le carousel — scope a .slick-track
     (pas .slick-slider entier) pour ne pas changer le curseur des
     fleches/dots a cote. */
  .slick-slider .slick-track { cursor: grab; }
  .slick-slider .slick-track:active { cursor: grabbing; }

  /* Bloc circuits (sidebar slim + slideshow) */
  #sommaire-circuits .eyebrow { text-align: center; color: var(--bleu); }
  #sommaire-circuits .rule { width: 48px; height: 2px; background: var(--c-page); margin: 1em 0 2em; }
  #circuits-slideshow-home .slide,
  .mot-slideshow .slide { padding: 0 .75em; }
  /* Le padding des .slide sert de gouttiere entre slides, mais il deborde
     aussi sur les bords exterieurs du slick (premiere/derniere slide),
     d'ou une marge disgracieuse a gauche/droite du carousel. Le
     .slick-list a overflow:hidden par defaut (slick.css) : une marge
     negative egale au padding recadre la zone visible sur les bords du
     conteneur sans toucher la gouttiere entre slides. */
  #circuits-slideshow-home .slick-list,
  .mot-slideshow .slick-list { margin: 0 -.75em; }

  /* Cartes de meme hauteur dans le slideshow : par defaut slick ne
     redimensionne pas ses slides sur la hauteur de la plus grande visible
     (contrairement a une grille CSS, stretch par defaut). On force le
     slick-track en flex + stretch, et on propage la hauteur jusqu'a
     .tour-card (repris de squelettes-V6.2/css/layout.css). */
  #circuits-slideshow-home .slick-track { display: flex; align-items: stretch; }
  #circuits-slideshow-home .slick-slide { height: auto; }
  #circuits-slideshow-home .slick-slide > div { height: 100%; }
  #circuits-slideshow-home .slick-slide .slide { height: 100%; }
  #circuits-slideshow-home .tour-card { height: 100%; }

  /* Formulaire filtre statique (sidebar) */
  .formulaire-filtre-statique {
    background: var(--blanc);
    border: 1px solid var(--line);
    border-radius: var(--radius-md);
    overflow: hidden;
  }
    .formulaire-filtre-statique .head { padding: 1.2em 1.4em; border-bottom: 1px solid var(--line); }
    .formulaire-filtre-statique .filtre-titre {
      font-family: var(--font-titres);
      font-weight: 700;
      font-size: 1em;
    }
    .formulaire-filtre-statique .group { padding: 1.1em 1.4em; border-bottom: 1px solid var(--line); }
    .formulaire-filtre-statique .label {
      font-family: var(--font-titres);
      font-size: .7em;
      font-weight: 700;
      letter-spacing: .1em;
      text-transform: uppercase;
      color: var(--gris);
      margin-bottom: .7em;
    }
    .formulaire-filtre-statique fieldset { border: 0; padding: 0; margin: 0; }
    .formulaire-filtre-statique label {
      display: flex;
      align-items: center;
      gap: .6em;
      font-size: .85em;
      padding: .1em 0;
      cursor: pointer;
    }
    .formulaire-filtre-statique input[type="radio"] {
      -moz-appearance: radio;
      -webkit-appearance: radio;
      appearance: radio;
      width: auto;
      accent-color: var(--c-circuit);
    }
    .formulaire-filtre-statique .cta { padding: 1.2em 1.4em; }
    .formulaire-filtre-statique .cta .button {
      display: block;
      width: 100%;
      background: var(--c-circuit);
      color: var(--blanc);
      border-color: var(--c-page);
      min-width: 0;
    }

  /* Résultats : compteur + carte circuit complète */
  .tours-results .count {
    display: inline-block;
    background: var(--c-circuit);
    border-left: 3px solid var(--c-page);
    padding: .6em 1em;
    font-size: .8em;
    font-weight: 600;
    margin-bottom: 1.2em;
    color: var(--blanc);
  }

  .tour-card {
    display: flex;
    flex-direction: column;
    transition: box-shadow .2s ease, transform .2s ease;
  }
    .tour-card:hover { box-shadow: var(--shadow-card-hover); transform: translateY(-3px); }
    .tour-card .media {
      position: relative;
      overflow: hidden;
      border-radius: var(--radius-md) var(--radius-md) 0 0;
      aspect-ratio: 4 / 3;
    }
    /* Positionnement/recadrage commun défini plus haut (cf. .edito-face-avant
       .media .adapt-img-wrapper) ; image_recadre génère déjà un fichier 480x360
       mais le rendu écran suivrait la taille naturelle de l'image sans ces
       règles tant que le wrapper n'est pas contraint. */
    .tour-card .media a { display: block; width: 100%; height: 100%; }
    .tour-card .duration-badge {
      position: absolute;
      top: .75em; left: .75em;
      background: rgba(var(--ink-rgb),.8);
      color: var(--blanc);
      font-size: .75em;
      padding: .3em .7em;
      border-radius: var(--radius-md);
    }
    .tour-card .body { display: flex; flex-direction: column; flex: 1; padding: 1.2em; }
    .tour-card .region {
      font-family: var(--font-titres);
      font-size: .75em;
      font-weight: 700;
      letter-spacing: .06em;
      text-transform: uppercase;
      color: var(--bleu);
      margin-bottom: .4em;
    }
    .tour-card .title {
      display: block;
      border-bottom-color: transparent;
    }
    .tour-card .desc {
      font-size: .85em;
      color: var(--gris-deep);
      margin-bottom: .8em;
      line-height: 1.7em;
    }
    .tour-card .divider-icon {
      display: flex;
      align-items: center;
      gap: .8em;
      color: var(--line);
      font-family: 'icons';
      font-size: 1.2em;
      margin-top: auto;
      margin-bottom: .8em;
    }
      .tour-card .divider-icon::before,
      .tour-card .divider-icon::after {
        content: '';
        flex: 1;
        height: 1px;
        background: var(--line);
      }
      .tour-card .divider-icon .icon-separator {
        flex-shrink: 0;
        line-height: 1;
      }
    .tour-card .meta { font-size: .85em; margin-bottom: .9em; }
    .tour-card .meta .unit { color: var(--gris); font-size: .85em; }
    .tour-card .meta .sur-devis { color: var(--gris); font-style: italic; }
    .tour-card .themes { display: flex; gap: .6em; }
    .tour-card .icon-theme {
      position: relative;
      width: 38px; height: 38px;
      border-radius: 0.3em;
      display: inline-flex;
      align-items: center;
      justify-content: center;
      font-family: 'icons';
      font-size: .8em;
      color: var(--blanc);
      /* background-color pose en inline par le squelette (couleur thematique) */
      transition: transform .2s ease;
    }
    .tour-card .icon-theme:hover { transform: translateY(-2px) scale(1.08); }

    /* Info-bulle thematique : nom en majuscules + sous-thematiques a tirets,
       fond = couleur de la thematique (--#MOT_COULEURS posé en inline par le
       squelette), texte toujours blanc. */
    .tour-card .tooltip-theme {
      position: absolute;
      bottom: calc(100% + 10px);
      left: 50%;
      transform: translateX(-50%);
      z-index: 5;
      min-width: 190px;
      max-width: 260px;
      padding: .8em 1em;
      border-radius: var(--radius-lg);
      box-shadow: var(--shadow-card-hover);
      background: inherit;
      color: var(--blanc);
      font-family: var(--font-texte);
      text-align: left;
      opacity: 0;
      visibility: hidden;
      pointer-events: none;
      transition: opacity .2s ease;
    }
    .tour-card .icon-theme:hover .tooltip-theme,
    .tour-card .icon-theme:focus .tooltip-theme { opacity: 1; visibility: visible; }
    /* Les 2 premieres pastilles sont trop pres du bord gauche de la carte :
       bulle centree = coupee par l'overflow:hidden du slideshow. On ancre
       son bord gauche sur la pastille au lieu de la centrer. */
    .tour-card .icon-theme:nth-child(1) .tooltip-theme,
    .tour-card .icon-theme:nth-child(2) .tooltip-theme {
      left: 0;
      transform: none;
    }
    .tour-card .tooltip-titre {
      display: block;
      font-family: var(--font-titres);
      font-size: .8em;
      font-weight: 800;
      letter-spacing: .05em;
      text-transform: uppercase;
      margin-bottom: .5em;
    }
    .tour-card .tooltip-theme ul {
      list-style: none;
      margin: 0;
      padding: 0 0 10px 0;
    }
    .tour-card .tooltip-theme li {
      position: relative;
      padding-left: .9em;
      font-size: .7em;
      line-height: 1.5em;
    }
    .tour-card .tooltip-theme li::before {
      content: "–";
      position: absolute;
      left: 0;
    }

  /* Événements — panneau blanc, grille sans ombre */
  .events-panel {
    padding: .5em 1em;
  }
  .event-card {
    display: flex;
    align-items: center;
    gap: 1em;
    padding: 1.2em .5em;
    border-bottom: 1px solid var(--line);
  }
    .col-4:nth-last-child(-n+3) .event-card,
    .col-6-medium:nth-last-child(-n+2) .event-card { border-bottom: 0; }
    .event-card .date { flex: 0 0 3em; text-align: center; }
    .event-card .day { font-family: var(--font-titres); font-size: 1.4em; font-weight: 700; color: var(--c-page); line-height: 1; }
    .event-card .month { font-size: .7em; letter-spacing: .06em; opacity: .7; }
    .event-card .event-title { font-family: var(--font-titres); font-size: .9em; }
    .event-card .event-lieu { font-size: .8em; opacity: .6; margin-top: .2em; }

  /* Blocs mot-clé (id_mot=7, 10, 78) — le slide Slick (.slide) et la
     grille 2 colonnes (.row) sont 2 divs distincts : Slick pose son
     display:inline-block en style inline directement sur l'element qu'on
     lui passe, ce qui ecraserait le display:flex de .row si les 2 classes
     etaient sur le meme div (plus de split 50/50, colonnes empilees). */
  .sommaire-mot-headline .slide .row,
  .sommaire-mot-slideshow .slide .row {
    align-items: center;
    gap: var(--space-xl);
  }
  /* .slide-texte/.slide-logo sont des col-6/col-6 (100% du conteneur à eux
     deux, aucun gutter par défaut) : poser un gap dessus les ferait
     dépasser 100% — même parade que .layout-sidebar-slim/.article-photos-duo
     plus haut dans ce fichier, flex-basis:0 qui absorbe le gap au lieu
     d'un pourcentage fixe. Scopé au-dessus du seuil mobile pour laisser
     .col-12-mobile empiler les 2 blocs normalement en dessous. */
  @media screen and (min-width: 737px) {
    .sommaire-mot-headline .slide .row > .slide-texte,
    .sommaire-mot-headline .slide .row > .slide-logo,
    .sommaire-mot-slideshow .slide .row > .slide-texte,
    .sommaire-mot-slideshow .slide .row > .slide-logo {
      flex: 1 1 0;
      min-width: 0;
    }
  }
    .slide-texte .title { font-size: 1.4em; display: block; margin-bottom: .5em; }
    .slide-logo img { border-radius: var(--radius-md); }

  /* Contact accueil/recherche — 3 blocs cote a cote (infos / formulaire /
     carte) sur fond sombre .wrapper.stylegris-deep. Bloc contenu resserre par
     rapport au .container plein largeur (mêmes paliers que .container.medium),
     et bloc du milieu (formulaire) legerement plus large que les 2 autres —
     voir documentation/inspirations graphiques/sommaire-2-blocs-finaux-et-pied-de-page.jpg. */
  #cta-contact .eyebrow,
  #cta-office .eyebrow { color: rgba(255, 255, 255, .6); }
  #cta-contact .rule,
  #cta-office .rule { background: rgba(255, 255, 255, .3); }
  /* .row du framework est en flexbox : avec flex, la decision de passer
     a la ligne se fait sur la somme des largeurs (flex-basis) AVANT
     application du gap/shrink — 30%+40%+30%+2*28px depassait donc la
     ligne et renvoyait le 3e bloc dessous. En grid avec des unites fr,
     le gap est soustrait de l'espace disponible avant repartition
     proportionnelle : plus de risque de depassement. */
  #cta-contact .contact-grid,
  #cta-office .contact-grid {
    display: grid;
    grid-template-columns: 1fr;
    align-items: start;
    margin: 0;
    gap: 28px;
  }
  @media screen and (min-width: 737px) {
    #cta-contact .contact-grid {
      grid-template-columns: 3fr 4fr 3fr;
    }
    /* CTA "Notre bureau" (inclure/cta-office.html) : 2 blocs seulement
       (infos / carte), pas 3 - meme mecanique grid que #cta-contact
       ci-dessus, ratio propre plutot que de reprendre le 3fr 4fr 3fr pense
       pour 3 colonnes. */
    #cta-office .contact-grid {
      grid-template-columns: 2fr 3fr;
    }
  }
  /* Panneau "vitré" sur fond sombre : recette partagée par le bloc contact
     court (#cta-contact), la carte googlemap (#cta-googlemap) et le bloc
     "Notre bureau" (#cta-office, infos + carte) - seule la largeur diffère
     (pleine largeur ici, colonne centrée limitée sur la carte googlemap). */
  #cta-contact .contact-block,
  #cta-googlemap .contact-block-map,
  #cta-office .contact-block {
    background: rgba(255, 255, 255, .04);
    border: 1px solid rgba(255, 255, 255, .12);
    border-radius: var(--radius-md);
    padding: 2em 1.8em;
  }
  #cta-contact .contact-block,
  #cta-office .contact-block { width: 100%; }
  /* Labels des champs du formulaire court masques visuellement (seuls les
     placeholders restent visibles), gardes accessibles au clavier/lecteur
     d'ecran — meme technique que .offscreen (squelette6.2/css/clear.css),
     non reutilisable telle quelle ici car le label n'est pas dans nos
     squelettes (genere par saisies/_base.html a partir de la config
     Formidable du formulaire #3). */
  #cta-contact .contact-block-form .editer-label {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border: 0;
  }
  /* Espacement entre les champs (chaque champ = un .editer genere par
     saisies/_base.html) + apparence des champs alignee sur l'image de
     reference : fond legerement plus clair que le bloc, bordure visible
     sur fond sombre, coins arrondis. */
  #cta-contact .contact-block-form .editer { margin-bottom: 1.2em; }
  #cta-contact .contact-block-form input[type="text"],
  #cta-contact .contact-block-form input[type="email"],
  #cta-contact .contact-block-form input[type="password"],
  #cta-contact .contact-block-form textarea {
    background: rgba(255, 255, 255, .06);
    border: 1px solid rgba(255, 255, 255, .18);
    border-radius: var(--radius-md);
    color: var(--blanc);
  }
  #cta-contact .contact-block-form textarea { min-height: 110px; }
  #cta-contact .contact-block-titre,
  #cta-googlemap .contact-block-titre,
  #cta-office .contact-block-titre {
    font-family: var(--font-titres);
    font-size: .8em;
    letter-spacing: .1em;
    text-transform: uppercase;
    opacity: .7;
    margin-bottom: 1em;
  }
  #cta-contact .contact-infos,
  #cta-office .contact-infos {
    list-style: none;
    padding: 0;
    margin: 0 0 2em;
  }
    #cta-contact .contact-infos li,
    #cta-office .contact-infos li { padding: 0; margin-bottom: 1.4em; }
    #cta-contact .contact-infos strong,
    #cta-office .contact-infos strong {
      display: block;
      margin-bottom: .3em;
      font-family: var(--font-titres);
      font-weight: 700;
      text-transform: none;
    }
    #cta-contact .contact-infos span,
    #cta-office .contact-infos span { display: block; opacity: .6; font-size: .8em; }
      #cta-contact .contact-infos .horaire-valeur span,
      #cta-office .contact-infos .horaire-valeur span { display: inline; }
  #cta-contact .contact-map,
  #cta-office .contact-map {
    border-radius: var(--radius-md);
    overflow: hidden;
  }
  #cta-contact .contact-map-legende,
  #cta-office .contact-map-legende {
    opacity: .6;
    font-size: .85em;
    margin: .8em 0 0;
  }

  /* CTA "A la une" (inclure/cta-a-la-une.html) : reutilise entierement
     .selection_edito_a_la_une/.edito-a-la-une-* (fond couleur, layout
     texte+photo, deja definis plus haut). Seul ajout : .eyebrow a sa propre
     couleur fixe (--c-info, brique par defaut) non liee au data-couleur de
     la section - meme correctif deja applique a #cta-contact plus haut. */
  #cta-a-la-une .eyebrow { color: rgba(255, 255, 255, .7); }

  /* CTA "Prochain evenement" (inclure/cta-prochain-evenement.html) : reprend
     .event-card existant (agenda) en plus grand format, seul contenu du
     volet droit (a la place du slideshow photo de la a-la-une) - meme
     principe que le reste du fichier, on surcharge la classe native plutot
     que d'inventer un nouveau balisage (cf. .selection_edito_a_la_une-alt
     plus haut). */
  #cta-prochain-evenement .eyebrow { color: rgba(255, 255, 255, .7); }
  #cta-prochain-evenement .event-card {
    background: rgba(255, 255, 255, .1);
    border: 1px solid rgba(255, 255, 255, .2);
    border-radius: var(--radius-md);
    padding: 1.6em 1.4em;
  }
    #cta-prochain-evenement .event-card:hover { background: rgba(255, 255, 255, .16); }
    #cta-prochain-evenement .event-card .date { flex: 0 0 4em; }
    #cta-prochain-evenement .event-card .day { font-size: 2em; color: var(--blanc); }
    #cta-prochain-evenement .event-card .month { color: rgba(255, 255, 255, .75); }
    #cta-prochain-evenement .event-card .event-title { font-size: 1.15em; }
    #cta-prochain-evenement .event-card .event-lieu { color: rgba(255, 255, 255, .75); }

  /* CTA "Carte" (inclure/cta-googlemap.html) : reprend le bloc carte de
     #cta-contact (.contact-block/.contact-map/.contact-block-titre/
     .contact-map-legende), report necessaire sous ce nouvel id car ces
     classes n'ont pas de version non scopee ailleurs - meme principe que
     le reskin de .event-card ci-dessus, en plein format (1 seul bloc,
     centre, pas de grille a 3 colonnes). */
  #cta-googlemap .eyebrow { color: rgba(255, 255, 255, .6); }
  #cta-googlemap .rule { background: rgba(255, 255, 255, .3); }
  #cta-googlemap .contact-block-map {
    max-width: 900px;
    margin: 0 auto;
  }
  #cta-googlemap .contact-map {
    border-radius: var(--radius-md);
    overflow: hidden;
  }
  #cta-googlemap .contact-map-legende {
    opacity: .6;
    font-size: .85em;
    margin: .8em 0 0;
    text-align: center;
  }

/* ==========================================================
   RECHERCHE
   ========================================================== */

  /* Sidebar fixee au scroll (mini-agenda + prochain evenement) pendant que
     la colonne de resultats defile - meme mecanique que #rubrique-circuits
     .sidebar-slim, scopee ici car .sidebar-slim reste non-sticky par
     defaut pour les autres usages (sommaire). Les 2 blocs reutilisent
     directement .circuit-info-bloc/.circuit-info-label (carte blanche +
     petit intitule) plutot que de redeclarer un cadre equivalent. */
  #recherche-page .sidebar-slim {
    position: sticky;
    top: 96px;
    align-self: flex-start;
  }

  @media screen and (max-width: 980px) {
    #recherche-page .sidebar-slim {
      position: static;
    }
  }

  /* Titres de section alignes a gauche dans la colonne de resultats,
     contrairement a .section-head par defaut (centre, utilise ailleurs
     pour des blocs pleine largeur). */
  #recherche-page .content-main .section-head {
    text-align: left;
    max-width: none;
    margin: 0 0 1.5em;
  }

  /* Autres articles / evenements : liste generique de resultats */
  .generic-results {
    display: flex;
    flex-direction: column;
    gap: 1px;
    background: var(--line);
    border: 1px solid var(--line);
    margin-bottom: 2.5em;
  }
    .result-row {
      background: var(--blanc);
      display: flex;
      align-items: baseline;
      gap: 1.2em;
      padding: 1em 1.2em;
      transition: background .3s ease, padding-left .3s ease;
    }
    .result-row:hover { background: var(--fond-autre); padding-left: 1.6em; }
    .result-row .rtype {
      flex: 0 0 90px;
      font-size: .75em;
      letter-spacing: .06em;
      text-transform: uppercase;
      font-weight: 700;
      color: var(--c-page);
    }
    .result-row.row-with-logo { align-items: center; }
    .result-row .rtype.rtype-logo { line-height: 0; }
    .result-row .rtype.rtype-logo img { display: block; width: 100%; height: auto; border-radius: 4px; }
    .result-row .rbody { flex: 1; display: flex; flex-direction: column; gap: .25em; }
    .result-row .rtitle { font-family: var(--font-titres); font-size: 1em; font-weight: 700; color: var(--ink); }
    .result-row .rexcerpt { font-size: .85em; color: var(--ink); opacity: .7; line-height: 1.6; }
    .result-row:hover .rtitle { color: var(--c-page); }

  #recherche-page .aucun-resultat {
    background: var(--gris-bg);
    padding: 2em;
    text-align: center;
    color: var(--gris);
    margin-bottom: 2.5em;
  }

  /* Masque le message "aucun resultat" des qu'un des 3 blocs (circuits/
     articles/evenements) a au moins une ligne. Chacun vit desormais dans
     son propre fond #INCLURE ajax=... (voir content/recherche.html), donc
     impossible de le determiner via un #SET partage entre eux comme avant -
     .section-head n'existe que si un B_xxx a des lignes, d'ou ce :has(). */
  .content-main:has(.section-head) .aucun-resultat {
    display: none;
  }

  /* Mots-cles suggeres au hasard */
  .tags-recherche { margin-top: 1em; }
    .tags-recherche .label {
      font-size: .75em;
      letter-spacing: .08em;
      text-transform: uppercase;
      font-weight: 700;
      opacity: .6;
      margin-bottom: .8em;
    }
    .tags-recherche .tag-list { display: flex; flex-wrap: wrap; gap: .6em; }
    .tag-pill {
      display: inline-block;
      border: 1px solid var(--line);
      color: var(--ink);
      padding: .1em 1em;
      border-radius: 999px;
      font-size: .75em;
    }
    .tag-pill:hover { border-color: var(--c-page); color: var(--c-page); }

/* ==========================================================
   ARTICLE PAGE — page article par defaut (sidebar + sources)
   ========================================================== */

  /* Sidebar (calendrier + evenements a venir) fixee au scroll, meme
     mecanique que #recherche-page .sidebar-slim. */
  #article-page .sidebar-slim {
    position: sticky;
    top: 96px;
    align-self: flex-start;
  }

  @media screen and (max-width: 980px) {
    #article-page .sidebar-slim {
      position: static;
    }
  }

  /* Bloc recherche, 1er bloc de la sidebar - contexte "sidebar" de
     formulaires/recherche.html (surcharge du noyau #FORMULAIRE_RECHERCHE) :
     pas de <label> visible (placeholder + aria-label a la place), bouton
     minimaliste ">" aligne a cote du champ. Le champ recherche de la page
     recherche elle-meme vit desormais dans le header (.header-recherche,
     voir section HEADER plus haut), plus dans ce bandeau. */
  .sidebar-recherche .editer-groupe { display: flex; align-items: stretch; gap: .5em; }
  .sidebar-recherche input.search {
    flex: 1;
    min-width: 0;
    border: 1px solid var(--line);
    padding: .7em .9em;
    font-size: .9em;
    font-family: inherit;
  }
  .sidebar-recherche input.submit {
    flex: 0 0 auto;
    width: 2.6em;
    min-width: 0;
    border: 1px solid var(--c-page);
    background: var(--c-page);
    color: var(--blanc);
    padding: 0;
    font-weight: 700;
    line-height: normal;
    cursor: pointer;
  }

  /* Sources/Documents : bloc distinct du .documents-joints des circuits
     (demande explicite) - cadre teinte + bordure d'accent, icone dediee,
     pour signaler des sources documentaires plutot que de simples pieces
     jointes. */
  .documents-sources {
    margin-top: 3em;
    padding: 1.6em 1.8em;
    background: var(--gris-bg);
    border-left: 4px solid var(--c-page);
    border-radius: var(--radius-md);
  }
    .documents-sources h3 {
      font-family: var(--font-titres);
      margin-top: 0;
      margin-bottom: 1em;
    }
    .documents-sources ul {
      list-style: none;
      padding: 0;
      margin: 0;
      display: flex;
      flex-direction: column;
      gap: .8em;
    }
    .source-item {
      display: flex;
      align-items: center;
      gap: 1em;
      padding: 1em 1.2em;
      background: var(--blanc);
      border: 1px solid var(--line);
      border-radius: var(--radius-md);
    }
      .source-icon {
        flex: 0 0 auto;
        width: 2em;
        height: 2em;
        color: var(--c-page);
      }
        .source-icon svg { width: 100%; height: 100%; }
      .source-body {
        flex: 1;
        display: flex;
        flex-direction: column;
        gap: .2em;
        min-width: 0;
      }
        .source-titre { font-weight: 700; }
        .source-descriptif { font-size: .85em; opacity: .75; line-height: 1.5; }
        .source-meta { font-size: .75em; opacity: .6; }
      .source-telecharger {
        flex: 0 0 auto;
        font-size: .85em;
        font-weight: 700;
        color: var(--blanc);
        background: var(--c-page);
        padding: .5em 1.1em;
        border-radius: 999px;
        white-space: nowrap;
      }
      .source-telecharger:hover { background: var(--brique); }

  @media screen and (max-width: 736px) {
    .source-item { flex-wrap: wrap; }
    .source-telecharger { margin-left: calc(2em + 1em); }
  }

  /* Sous-titre (juste sous le H1) et descriptif (paragraphe d'intro avant
     le texte detaille), memes 2 champs de base ARTICLES que sur les
     circuits (#DESCRIPTIF) mais sans equivalent existant pour #SOUSTITRE -
     accroche discrete, pas un second titre. */
  #article-page .soustitre {
    font-family: var(--font-titres);
    font-weight: 400;
    font-size: 1.2em;
    opacity: .7;
    margin: -.6em 0 1.2em;
  }
  #article-page .descriptif {
    font-size: 1.1em;
    font-weight: 600;
  }

  /* Photos portfolio de l'article, en tete du texte : 1 ou 2 photos
     flottent a 50% sur grand ecran (le texte s'enroule autour), plus de 2
     passent par le modele article_slick (pleine largeur, pas de float). */
  #article-page .article-photos img { display: block; width: 100%; height: auto; border-radius: var(--radius-md); }
  #article-page .article-photos a { display: block; cursor: zoom-in; }

  @media screen and (min-width: 981px) {
    #article-page .article-photos-solo,
    #article-page .article-photos-duo {
      float: left;
      width: 50%;
      margin: 0 2em 1em 0;
    }
  }
  #article-page .article-photos-duo {
    display: flex;
    gap: 1em;
  }
    #article-page .article-photos-duo .article-photo-item { flex: 1 1 0; min-width: 0; }
    #article-page .article-photos-duo img { height: 100%; object-fit: cover; }

  #article-page .article-photos-slick { clear: both; margin-bottom: 1.5em; }
    #article-page .article-photos-slick img { width: 100%; height: 520px; object-fit: cover; border-radius: var(--radius-md); }

  /* Clearfix : sans ca, la hauteur du float (solo/duo) deborde du
     conteneur .texte et chevauche les blocs suivants (documents/
     evenements/carte/rubrique), qui sont hors de .texte. */
  #article-page .content-main .texte::after { content: ""; display: table; clear: both; }

  /* Evenements lies a l'article : meme gabarit .events-panel/.event-card
     que #sommaire-evenements, sans le chrome section-head/eyebrow (bloc
     dans la colonne de contenu, pas une section pleine largeur). */
  #article-page .article-evenements-lies { margin-top: 3em; }
    #article-page .article-evenements-lies h2 { margin-bottom: .8em; }

  /* Carte kml/gis : simple espacement, la mise en forme visuelle vient du
     modele carte_gis lui-meme (meme wrapper non stylise que sur les
     articles circuit). */
  #article-page .map_associated { margin-top: 3em; }

  /* Articles de la meme rubrique : 1 ligne par article, 3 blocs alignes
     (logo / titre+sous-titre / fleche-lien) - meme langage visuel que
     .source-item (icone + corps + action) plus haut dans ce fichier. */
  #article-page .article-rubrique-liste { margin-top: 3em; }
    #article-page .article-rubrique-liste h2 { margin-bottom: .8em; }
    #article-page .rubrique-articles-liste {
      display: flex;
      flex-direction: column;
      gap: .8em;
    }
    #article-page .rubrique-article-row {
      display: flex;
      align-items: center;
      gap: 1.2em;
      padding: 1em 1.2em;
      background: var(--blanc);
      border: 1px solid var(--line);
      border-radius: var(--radius-md);
      transition: border-color .2s ease;
    }
      #article-page .rubrique-article-row:hover { border-color: var(--c-page); }
      #article-page .rubrique-article-logo {
        flex: 0 0 auto;
        width: 4.5em;
        height: 4.5em;
        border-radius: var(--radius-md);
        overflow: hidden;
      }
        #article-page .rubrique-article-logo img { width: 100%; height: 100%; object-fit: cover; display: block; }
      #article-page .rubrique-article-texte { flex: 1; min-width: 0; }
        #article-page .rubrique-article-texte .title { font-size: 1em; margin: 0 0 .2em; }
        #article-page .rubrique-article-texte .desc {
          font-size: .85em;
          opacity: .7;
          margin: 0;
          line-height: 1.5;
          overflow: hidden;
          text-overflow: ellipsis;
          /* white-space: nowrap; */
        }
      #article-page .rubrique-article-fleche {
        flex: 0 0 auto;
        width: 1.6em;
        height: 1.6em;
        color: var(--c-page);
        transition: transform .2s ease;
      }
        #article-page .rubrique-article-fleche svg { width: 100%; height: 100%; }
      #article-page .rubrique-article-row:hover .rubrique-article-fleche { transform: translateX(4px); }

  @media screen and (max-width: 736px) {
    #article-page .rubrique-article-logo { width: 3.5em; height: 3.5em; }
    #article-page .rubrique-article-texte .desc { white-space: normal; }
  }

  /* Page rubrique par defaut (content/rubrique.html) : sous-rubriques
     directes puis articles rattaches, meme carte image+contenu partagee
     entre les 2 sections - voir dev-notes-template-travel.md, Phase D. */
  #rubrique-sous-rubriques { background: var(--fond-autre); }
  #rubrique-sous-rubriques,
  #rubrique-articles {
    padding: 3em 0;
  }
    #rubrique-sous-rubriques .section-titre,
    #rubrique-articles .section-titre {
      font-size: 1.6em;
      margin-bottom: 1em;
    }

    .rubrique-cards-grid {
      display: grid;
      grid-template-columns: repeat(2, 1fr);
      gap: 1.5em;
    }

    .rubrique-card {
      display: flex;
      background: var(--blanc);
      border: 1px solid var(--line);
      border-radius: var(--radius-md);
      overflow: hidden;
      transition: border-color .2s ease, box-shadow .2s ease;
    }
      .rubrique-card:hover { border-color: var(--c-page); box-shadow: var(--shadow-card); }
      .rubrique-card-logo { flex: 0 0 40%; }
        .rubrique-card-logo img { width: 100%; height: 100%; object-fit: cover; display: block; }
      .rubrique-card-corps {
        flex: 1;
        min-width: 0;
        padding: 1.4em 1.6em;
        display: flex;
        flex-direction: column;
        justify-content: center;
      }
        .rubrique-card-titre { font-size: 1.1em; margin: 0 0 .5em; }
          .rubrique-card-titre a { color: inherit; }
        .rubrique-card-article:hover .rubrique-card-titre { color: var(--c-page); }

      /* Articles (rubriques-affichant-articles.png) : logo plus reduit que
         les cartes sous-rubriques - proportion confiee aux classes de
         grille existantes .col-3/.col-9 (css/grid.css) plutot qu'a un
         flex-basis code en dur, d'ou ce reset qui neutralise le flex
         herite de .rubrique-card-logo/-corps pour laisser la largeur
         (width) des .col-N gouverner. */
      .rubrique-card-article .rubrique-card-logo,
      .rubrique-card-article .rubrique-card-corps { flex: 0 1 auto; }

    /* Sous-rubriques : liste des titres d'articles a la place du texte,
       hauteur plafonnee + defilement plutot que de faire deborder la
       carte. */
    .sous-rubrique-articles {
      list-style: none;
      margin: 0;
      padding: 0;
      max-height: 9em;
      overflow-y: auto;
      display: flex;
      flex-direction: column;
      gap: .2em;
    }
      .sous-rubrique-articles li a {
        display: block;
        font-size: .9em;
        padding: .35em 0;
        border-bottom: 1px solid var(--line);
        color: var(--ink);
      }
      .sous-rubrique-articles li:last-child a { border-bottom: 0; }
      .sous-rubrique-articles li a:hover { color: var(--c-page); }
    .sous-rubrique-articles-vide { font-size: .85em; opacity: .6; margin: 0; }

    /* Articles : titre/soustitre/descriptif/texte tronque empiles, comme
       rubriques-affichant-articles.png. */
    .rubrique-card-soustitre {
      font-family: var(--font-titres);
      opacity: .7;
      font-size: .95em;
      margin: 0 0 .4em;
    }
    .rubrique-card-descriptif { font-weight: 600; margin: 0 0 .4em; }
    .rubrique-card-texte { font-size: .85em; opacity: .75; line-height: 1.5; margin: 0; }

  @media screen and (max-width: 981px) {
    .rubrique-cards-grid { grid-template-columns: 1fr; }
  }
  @media screen and (max-width: 736px) {
    .rubrique-card { flex-direction: column; }
    .rubrique-card-logo { flex: 0 0 auto; height: 11em; }
  }

/* ==========================================================
   CALENDRIER — content/rubrique-calendar.html (composition "calendar")
   ========================================================== */

  /* Sidebar (mini-calendrier seul) fixee au scroll, meme mecanique que
     #article-page/#recherche-page .sidebar-slim. */
  #rubrique-calendar .sidebar-slim {
    position: sticky;
    top: 96px;
    align-self: flex-start;
  }

  @media screen and (max-width: 980px) {
    #rubrique-calendar .sidebar-slim {
      position: static;
    }
  }

  #rubrique-calendar .aucun-resultat {
    background: var(--gris-bg);
    padding: 2em;
    text-align: center;
    color: var(--gris);
  }

  /* Liste d'evenements en colonne unique (col-12, pas la grille col-4/
     col-6-medium partagee par inclure/sommaire-evenements.html) : la
     derniere carte perd sa bordure basse via son parent .col-12:last-child
     plutot que :last-child sur .event-card lui-meme (toujours vrai, chaque
     carte est l'unique enfant de son .col-12). */
  #rubrique-calendar #calendrier-evenements-liste .col-12:last-child .event-card {
    border-bottom: 0;
  }

  /* Logo de l'article lie a l'evenement, meme habillage (case carree,
     image_proportions{1,1,focus} + object-fit:cover) que .rubrique-card-logo
     dans content/rubrique.html. */
  #rubrique-calendar .event-card .event-logo {
    flex: 0 0 3.4em;
    width: 3.4em;
    height: 3.4em;
    border-radius: var(--radius-md);
    overflow: hidden;
  }
    #rubrique-calendar .event-card .event-logo img {
      width: 100%;
      height: 100%;
      object-fit: cover;
      display: block;
    }

  /* .section-head est centre/plafonne a 680px par defaut (pense pour des
     sections pleine largeur) - meme surcharge que #recherche-page pour la
     meme raison : ici il vit dans .content-main, deja etroit (col-9). */
  #rubrique-calendar .content-main .section-head {
    text-align: left;
    max-width: none;
    margin: 0 0 1.5em;
  }

/* ==========================================================
   TEMOIGNAGES — content/rubrique-testimonials.html (composition "testimonials")
   ========================================================== */

  /* Sidebar (recherche + mini-calendrier) fixee au scroll, meme mecanique
     que #article-page/#recherche-page/#rubrique-calendar .sidebar-slim. */
  #rubrique-testimonials .sidebar-slim {
    position: sticky;
    top: 96px;
    align-self: flex-start;
  }

  @media screen and (max-width: 980px) {
    #rubrique-testimonials .sidebar-slim {
      position: static;
    }
  }

  /* 3 blocs empiles (recherche, mini-calendrier, filtre circuits) : aucun
     gap generique sur .sidebar-slim en layout normal (uniquement scope a
     .layout-sidebar-slim ailleurs) - espacement ajoute ici plutot que sur
     la classe partagee .circuit-info-bloc, pour ne pas affecter les autres
     pages qui la reutilisent (article-circuit sidebar, deja son propre gap
     via .circuit-infos). */
  #rubrique-testimonials .sidebar-slim > *:not(:last-child) {
    margin-bottom: 1.5em;
  }

  /* .section-head est centre/plafonne a 680px par defaut (pense pour des
     sections pleine largeur) - meme surcharge que #rubrique-calendar pour
     la meme raison : ici il vit dans .content-main, deja etroit (col-9). */
  #rubrique-testimonials .content-main .section-head {
    text-align: left;
    max-width: none;
    margin: 0 0 1.5em;
  }

  #rubrique-testimonials .aucun-resultat {
    background: var(--gris-bg);
    padding: 2em;
    text-align: center;
    color: var(--gris);
  }

  /* Liste verticale (1 temoignage par ligne, paginee 20 par 20) au lieu de
     la grille de cartes du sommaire (.testimonials-grid) : meme carte
     .testimonial-card (fond blanc, ombre, padding), simplement empilee en
     colonne pleine largeur plutot qu'en grille auto-fit. */
  .testimonials-list {
    display: flex;
    flex-direction: column;
    gap: var(--space-lg);
  }
    /* Date en haut a droite de la carte, independante du titre desormais
       (demande utilisateur du 2026-09-09 : titre + description passent
       APRES le texte, la date doit rester en haut) - reutilise le meme
       bandeau .testimonial-head/.testimonial-date que la carte du
       sommaire (inclure/section-testimonials.html), deja stylee plus haut
       dans ce fichier (position relative + date en absolute top:0;right:0). */
    .testimonial-nom {
      font-family: var(--font-titres);
      font-size: 1.2em;
      margin: 0 0 .3em;
    }
    .testimonial-programme { margin-bottom: 0; }

    /* "Lire plus" (lame Blocs Depliables, couteau_suisse) : meme
       surcharge que .intro-savoir-plus plus bas dans ce fichier (masque
       le triangle par defaut du plugin, fleche textuelle a la place),
       scopee a .testimonial-card. Ordre visuel apercu-puis-lien obtenu en
       flex+order sur les 3 enfants directs de .cs_blocs (titre/resume/
       destination), sans toucher au balisage du plugin - l'ordre reel des
       balises reste titre-resume-debut (impose par le plugin), seul le
       rendu visuel est reordonne. */
    .testimonial-card .cs_blocs {
      display: flex;
      flex-direction: column;
    }
    .testimonial-card .blocs_resume { order: 1; }
    .testimonial-card .blocs_titre {
      order: 2;
      align-self: flex-end;
      display: inline-block;
      font-family: var(--font-titres);
      font-size: .85em;
      font-weight: 600;
      background: none !important;
      padding-left: 0 !important;
      margin: 0;
    }
    .testimonial-card .blocs_titre a { color: var(--c-page); border-bottom: 0; }
    .testimonial-card .lire-plus-label::after { content: ' →'; }
    .testimonial-card .blocs_destination { order: 3; margin-top: .4em; }

/* ==========================================================
   INFORMATIONS — content/rubrique-informations.html (composition "informations")
   ========================================================== */

  /* Sidebar (recherche + mini-calendrier) fixee au scroll, meme mecanique
     que #rubrique-testimonials/#rubrique-calendar .sidebar-slim. */
  #rubrique-informations .sidebar-slim {
    position: sticky;
    top: 96px;
    align-self: flex-start;
  }
  @media screen and (max-width: 980px) {
    #rubrique-informations .sidebar-slim {
      position: static;
    }
  }
  #rubrique-informations .sidebar-slim > *:not(:last-child) {
    margin-bottom: 1.5em;
  }

  /* .section-head est centre/plafonne a 680px par defaut (pense pour des
     sections pleine largeur) - meme surcharge que #rubrique-testimonials/
     -calendar, ici sur les 2 sous-blocs empiles du content-main (formulaire,
     articles). Le 3e bloc (slideshow temoignages) vit maintenant dans sa
     propre section pleine largeur, hors #rubrique-informations - garde donc
     le traitement centre par defaut, comme #sommaire-testimonials. */
  #rubrique-informations .content-main .section-head {
    text-align: left;
    max-width: none;
    margin: 0 0 1.5em;
  }

  /* Espacement vertical entre les 2 sous-blocs empiles du content-main. */
  #rubrique-informations .content-main > * + * {
    margin-top: var(--space-xl);
  }

  #rubrique-informations .aucun-resultat,
  #rubrique-informations-testimonials .aucun-resultat {
    background: var(--gris-bg);
    padding: 2em;
    text-align: center;
    color: var(--gris);
  }

  /* Articles de la rubrique empiles verticalement (un par ligne, polyhierarchie
     comprise) plutot qu'en grille 2 colonnes comme content/rubrique.html -
     meme carte .rubrique-card/-article (logo+titre+introduction), seule la
     grille est surchargee en 1 colonne. */
  #rubrique-informations .rubrique-cards-grid {
    grid-template-columns: 1fr;
  }

  /* Logo plus rectangulaire (16:9 au lieu du 1:1 partage par content/rubrique.html
     - meme balise, ratio different) - demande utilisateur du 2026-09-16, pour
     des blocs moins hauts. Sans ce bloc, le flex "stretch" par defaut de
     .rubrique-card etirerait quand meme le logo a la hauteur du bloc corps
     (titre+introduction) et recadrerait l'image bien plus haute que 16:9 via
     object-fit:cover - align-items:flex-start + aspect-ratio fixe sur le
     logo gardent le rectangle voulu quelle que soit la hauteur du texte. */
  #rubrique-informations .rubrique-card-article {
    align-items: flex-start;
  }
  #rubrique-informations .rubrique-card-article .rubrique-card-logo {
    aspect-ratio: 16 / 9;
  }
  @media screen and (max-width: 736px) {
    #rubrique-informations .rubrique-card-article .rubrique-card-logo {
      aspect-ratio: auto;
    }
  }

  /* Introduction plafonnee a 3 lignes visuellement plutot qu'a un nombre de
     caracteres fixe (largeur de carte variable) - line-clamp standard. */
  #rubrique-informations .rubrique-card-texte {
    display: -webkit-box;
    -webkit-line-clamp: 3;
    -webkit-box-orient: vertical;
    overflow: hidden;
  }

  /* Slideshow temoignages, section a part entiere (voir plus haut) : meme
     carte .testimonial-card que inclure/section-testimonials.html, meme
     mecanique de gouttiere/hauteur egale entre slides que
     #circuits-slideshow-home plus haut dans ce fichier. Espace avant ce
     bloc (2 sections .couleur simplement empilees, sans gouttiere par
     defaut) - demande utilisateur du 2026-09-16. */
  #rubrique-informations-testimonials {
    margin-top: var(--space-xl);
  }
  #rubrique-info-testimonials-slick .slide { padding: 0 .75em; }
  #rubrique-info-testimonials-slick .slick-list { margin: 0 -.75em; }
  #rubrique-info-testimonials-slick .slick-track { display: flex; align-items: stretch; }
  #rubrique-info-testimonials-slick .slick-slide { height: auto; }
  #rubrique-info-testimonials-slick .slick-slide > div { height: 100%; }
  #rubrique-info-testimonials-slick .slick-slide .slide { height: 100%; }
  #rubrique-info-testimonials-slick .testimonial-card { height: 100%; }

/* ==========================================================
   SOMMAIRE v1.2.0 — header/breadcrumb dedies, sections revues
   ========================================================== */

  /* Header sommaire : le fil d'ariane + menu horizontal ne sont plus
     imbriques dans le header (header/sommaire.html) mais fusionnes dans le
     #breadcrumb global de body.html (breadcrumb/sommaire.html) — evite un
     second conteneur inutile et laisse le JS du plugin boutonstexte
     (cible en dur #breadcrumb .container) ajouter ses boutons A-/A+ juste
     apres le menu, a droite, sans code specifique (demande utilisateur du
     2026-09-07). Depuis le 2026-09-15, #breadcrumb est anthracite par
     defaut (regle de base plus haut dans ce fichier, meme teinte ici) et
     porte deja le menu horizontal : ce bloc html.page_sommaire ne
     surcharge donc plus que le positionnement sticky au scroll
     (z-index/position/.is-fixed), propre a cette page. */
  html.page_sommaire #breadcrumb {
    z-index: 70;
    position: relative;
  }
    html.page_sommaire #breadcrumb.is-fixed {
      position: fixed;
      top: 0;
      left: 0;
      right: 0;
    }

/* ==========================================================
   RUBRIQUE CIRCUITS — breadcrumb dedie (2026-09-15)
   ========================================================== */

  /* Meme principe que le breadcrumb sommaire ci-dessus (fil d'ariane + menu
     horizontal fusionnes dans le #breadcrumb global de body.html, cf.
     breadcrumb/rubrique-circuits.html) - fond anthracite par defaut comme
     partout ailleurs depuis le 2026-09-16 (l'ancien fond bleu var(--bleu),
     propre a cette composition, a ete retire : demande utilisateur, "le fil
     d'ariane sera toujours de la meme couleur grise anthracite"). Ce bloc ne
     surcharge donc plus que le positionnement sticky au scroll, propre a
     cette page. Scope html.rubrique_circuits (classe posee par
     zcore_composition_class(), page_$type + " " + $type_$composition, ici
     type=rubrique/composition=circuits) et non html.composition_circuits :
     ce dernier est aussi porte par les articles de la branche circuits
     (content/article-circuits.html, cf. branche dans rubrique-circuits.xml)
     qui n'utilisent pas ce breadcrumb dedie. */
  html.rubrique_circuits #breadcrumb {
    z-index: 70;
    position: relative;
  }
    html.rubrique_circuits #breadcrumb.is-fixed {
      position: fixed;
      top: 0;
      left: 0;
      right: 0;
    }

  /* Hero du header sommaire : kicker (label + filets) → H1 → filet →
     tagline → indicateur de défilement, empilés et centrés dans
     .header-titrebox (header/sommaire.html). Scopé html.page_sommaire
     car .header-titre est une classe partagée avec header/dist.html,
     header/generale.html et header/recherche.html (variante <p>, pas
     de hero) — ne doit pas déborder sur ces autres headers. */
  /* Panneau "vitre depolie" derriere le bloc titre : la photo de fond n'est
     pas maitrisee (choisie en back-office, peut etre chargee/detaillee
     comme la carte de demo actuelle) - un fond seul assombri ne suffit
     pas a garantir la lisibilite du texte blanc dessus. Le flou (backdrop-
     filter) attenue le detail de l'image juste derriere le texte, pas
     seulement sa luminosite ; angles doux (24px) pour rester une vitre,
     pas la boite a bord dur de l'ancienne reference utilisateur. */
  html.page_sommaire .header-titrebox-panel {
    position: relative;
    display: inline-block;
    max-width: min(90vw, 920px);
    padding: 3em 4em;
  }
    html.page_sommaire .header-titrebox-panel:before {
      content: '';
      position: absolute;
      inset: 0;
      background: rgba(14,17,20,.4);
      /* -webkit-backdrop-filter: blur(10px);
      backdrop-filter: blur(10px);*/
      border-radius: 12px;
      z-index: -1;
    }
    @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
      html.page_sommaire .header-titrebox-panel:before { background: rgba(14,17,20,.58); }
    }

  /* Emblème décoratif au-dessus du kicker : reprend l'esprit du logo/danseuse
     de l'ancienne référence utilisateur (capture écran luangprabang-laos.com)
     mais en glyphe unique de la police maison "icons" (U+E919, demandé par
     l'utilisateur), pas une image — cohérent avec .icon-separator/flèches
     Slick déjà surchargées ailleurs dans ce fichier. */
  html.page_sommaire .header-emblem {
    display: block;
    font-family: 'icons';
    font-style: normal;
    font-weight: normal;
    line-height: 1;
    font-size: 3.25rem;
    margin-bottom: .5em;
    color: var(--blanc);
    opacity: .92;
    text-shadow: 0 2px 10px rgba(0,0,0,.3);
  }
    html.page_sommaire .header-emblem:before { content: "\e919"; }

  html.page_sommaire .header-kicker {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: .9em;
    margin: 0 0 1.4em;
    font-family: var(--font-texte);
    font-size: .8em;
    font-weight: 500;
    letter-spacing: .22em;
    text-transform: uppercase;
    color: rgba(255,255,255,.85);
    text-shadow: 0 1px 6px rgba(0,0,0,.3);
  }
    html.page_sommaire .header-kicker-line {
      width: 2.5em;
      height: 1px;
      background: rgba(255,255,255,.45);
    }

  /* H1 = tagline (demande utilisateur 2026-09-07) : cette classe portait
     deja tout le style voulu quand l'element etait un <p> (police, taille,
     italique) - on la garde identique maintenant que c'est le <h1>, avec
     juste letter-spacing/line-height remis a plat pour annuler les valeurs
     par defaut de la regle generique "h1,h2,h3,h4,h5,h6" (travel-laos.css,
     ~ligne 120) qui s'appliquerait sinon a un vrai <h1> sans jamais avoir
     touche l'ancien <p>. */
  html.page_sommaire .header-tagline {
    font-family: var(--font-titres);
    font-style: italic;
    font-weight: 400;
    font-size: 1.15em;
    letter-spacing: normal;
    line-height: 1.5em;
    max-width: 32em;
    margin: 0 auto;
    color: rgba(255,255,255,.92);
    text-shadow: 0 2px 10px rgba(0,0,0,.3);
  }

  /* #DESCRIPTIF_SITE (texte du site, espace prive) sous le H1/slogan - en
     retrait volontaire (texte courant, pas serif/italique) pour marquer la
     hierarchie sous le H1. N'apparait que si le champ est rempli en
     back-office (pas de repli idiome, contrairement au H1). */
  html.page_sommaire .header-descriptif {
    font-family: var(--font-texte);
    font-size: 1.3em;
    font-weight: 400;
    max-width: 34em;
    margin: 2.9em auto 3.5em;
    color: rgba(255,255,255,.8);
    text-shadow: 0 2px 8px rgba(0,0,0,.25);
  }

  html.page_sommaire .header-scrollcue {
    display: inline-flex;
    margin-top: 2.5em;
    border-bottom: 0;
  }
    html.page_sommaire .header-scrollcue-line {
      position: relative;
      display: block;
      width: 1px;
      height: 42px;
      overflow: hidden;
      background: rgba(255,255,255,.35);
      transition: background .2s ease;
    }
      html.page_sommaire .header-scrollcue-line:after {
        content: '';
        position: absolute;
        left: 0;
        top: -100%;
        width: 100%;
        height: 100%;
        background: rgba(255,255,255,.9);
        animation: header-scrollcue-drip 1.8s ease-in-out infinite;
      }
    html.page_sommaire .header-scrollcue:hover .header-scrollcue-line { background: rgba(255,255,255,.55); }

  @keyframes header-scrollcue-drip {
    0%   { top: -100%; }
    60%  { top: 100%; }
    100% { top: 100%; }
  }

  @media (prefers-reduced-motion: reduce) {
    html.page_sommaire .header-scrollcue-line:after { animation: none; top: 0; }
  }

  @media screen and (max-width: 736px) {
    html.page_sommaire .header-titrebox-panel { padding: 2em 1.5em; max-width: 92vw; }
    html.page_sommaire .header-titrebox-panel:before { border-radius: 16px; }
    html.page_sommaire .header-emblem { font-size: 2.1rem; }
    html.page_sommaire .header-kicker { font-size: .7em; letter-spacing: .18em; }
    html.page_sommaire .header-kicker-line { width: 1.5em; }
    html.page_sommaire .header-tagline { font-size: 1em; }
    html.page_sommaire .header-descriptif { font-size: .92em; }
    html.page_sommaire .header-scrollcue { margin-top: 1.8em; }
  }

  /* Titre de section affiché comme un H1 (le vrai <h1> vit dans le header
     du sommaire) : balise <h2> conservée pour la hiérarchie sémantique,
     seul le rendu visuel est agrandi. */
  .section-head--h1 {
    font-size: 2.5em;
    letter-spacing: 0.02em;
    line-height: 1.3em;
  }

  /* 2.3/2.3bis "A lire avant de venir" : padding deja porte a --space-lg
     directement sur .edito-face-avant .content (au lieu de 1.2em),
     cf. la declaration originale plus haut dans ce fichier. */

  /* 2.4 Agenda : .date en taille fixe (largeur ET hauteur, plus seulement
     flex-basis) pour un alignement identique quel que soit le nombre de
     chiffres du jour ; titre sur 1 ligne, overflow invisible. Le survol
     .event-preview (panneau revelant le texte de l'article lie) a ete
     retire le 2026-09-07 (demande utilisateur). */
    .event-card .date {
      flex: 0 0 3.4em;
      width: 3.4em;
      height: 3.4em;
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
    }
    .event-card .event-body { min-width: 0; }
    .event-card .event-title {
      overflow: hidden;
      white-space: nowrap;
      text-overflow: clip;
    }

  /* 2.5 bis "A la une" fond couleur : sous-panneau plus clair (--fond-mice,
     câblé pour la première fois — variable définie depuis 2026-08-25, cf.
     dev-notes) qui reprend les contraintes de l'ancien wrap. */
  .edito-a-la-une-panel {
    background: var(--fond-mice);
    border-radius: var(--radius-md);
    padding: var(--space-xl);
  }
    .selection_edito_a_la_une-alt .edito-a-la-une-info,
    .selection_edito_a_la_une-alt .edito-a-la-une-info h2 { color: var(--titre); }
    .selection_edito_a_la_une-alt .edito-a-la-une-info { color: var(--ink); }

  @media screen and (max-width: 736px) {
    .edito-a-la-une-panel { padding: var(--space-md); }
  }

  /* 2.6 "Don't miss" : slide titre+desc+lien / photo, padding genereux,
     fleches Slick par defaut masquées et remplacées par des < > custom,
     très grandes, excentrées (débordent du cadre).
     !important sur display necessaire : Slick.prototype.buildRows() (slick.js)
     s'execute meme avec les options par defaut (rows:1, slidesPerRow:1, la
     fonctionnalite multi-lignes n'est pourtant pas utilisee ici) et pose un
     style="width:100%;display:inline-block" EN INLINE sur chaque
     .dont-miss-slide d'origine. Un style inline sans !important bat toute
     regle de feuille de style quelle que soit sa specificite, d'ou le texte
     empile au-dessus de la photo au lieu d'etre a cote (bug remonte le
     2026-09-07). */
  .dont-miss-slick-wrap { position: relative; }
  .dont-miss-slick-wrap .dont-miss-slick .dont-miss-slide {
    display: flex !important;
    align-items: center;
    gap: var(--space-xl);
    padding: var(--space-xl) calc(var(--space-xl) + var(--space-sm));
  }
    .dont-miss-info { flex: 1; min-width: 280px; }
    .dont-miss-titre { margin-bottom: .5em; }
    .dont-miss-desc { line-height: 1.7em; margin-bottom: 1em; }
    .dont-miss-media {
      flex: 1;
      min-width: 280px;
      border-radius: var(--radius-md);
      overflow: hidden;
    }
      .dont-miss-media img { display: block; width: 100%; height: auto; }

  @media screen and (max-width: 736px) {
    .dont-miss-slide { flex-direction: column; padding: var(--space-lg); }
  }

  /* Grandes flèches réutilisables sur tout carrousel Slick du sommaire :
     surcharge du theme Slick "accessible" natif (bouton/icone deja fournis
     par le plugin, cf. accessible-slick-theme.scss), pas de prevArrow/
     nextArrow custom — un essai en ce sens a ete abandonne le 2026-09-07
     (bug de positionnement, boutons superposes). Glyphe : police "icons"
     (U+EC3B/EC3C). Unites en rem, pas em : .slick-prev/.slick-next ont
     "font-size:0" dans le theme Slick. La taille du glyphe force !important
     malgre une specificite deja suffisante — cause non confirmee, a
     revisiter si ca persiste avec un cache totalement vide. */
  .slick-slider.slick-arrows-lg .slick-prev { left: -3rem; right: auto; }
  .slick-slider.slick-arrows-lg .slick-next { left: auto; right: -1.5rem; }
  .slick-slider.slick-arrows-lg .slick-prev .slick-prev-icon,
  .slick-slider.slick-arrows-lg .slick-next .slick-next-icon {
    font-family: 'icons' !important;
    font-size: 3.5rem !important;
    opacity: .65;
  }
  .slick-slider.slick-arrows-lg .slick-prev .slick-prev-icon:before {
    content: "\ec3b";
    font-family: 'icons' !important;
    font-size: 3.5rem !important;
  }
  .slick-slider.slick-arrows-lg .slick-next .slick-next-icon:before {
    content: "\ec3c";
    font-family: 'icons' !important;
    font-size: 3.5rem !important;
  }
  .slick-slider.slick-arrows-lg .slick-prev .slick-prev-icon:before,
  .slick-slider.slick-arrows-lg .slick-next .slick-next-icon:before {
    color: var(--c-section, var(--c-page));
  }
  .slick-slider.slick-arrows-lg .slick-prev:hover .slick-prev-icon,
  .slick-slider.slick-arrows-lg .slick-next:hover .slick-next-icon {
    opacity: 1;
  }
    /* Sur fond couleur plein cadre (edito-a-la-une, alt y compris), une
       fleche de la meme teinte que la section se fondrait dans le fond :
       on repasse en blanc translucide, comme les puces .slick-dots deja
       en place sur ce composant. */
    .slick-slider.edito-a-la-une-slick.slick-arrows-lg .slick-prev .slick-prev-icon:before,
    .slick-slider.edito-a-la-une-slick.slick-arrows-lg .slick-next .slick-next-icon:before {
      color: var(--blanc);
    }

  /* Don't miss (2.6) uniquement : sa .dont-miss-slide passe en colonne
     sous 736px (empilement titre/desc/photo) — des fleches en position
     absolute flotteraient alors n'importe ou par-dessus ce contenu
     empile. Les autres carrousels .slick-arrows-lg (a-la-une, edito-slick,
     circuits) restent une rangee/image a toute largeur, ou l'absolute
     reste adaptee y compris sur mobile — pas la meme regle pour eux. */
  @media screen and (max-width: 980px) {
    .slick-slider.dont-miss-slick.slick-arrows-lg .slick-prev,
    .slick-slider.dont-miss-slick.slick-arrows-lg .slick-next {
      position: static;
      transform: none;
      display: inline-block;
      margin: 0 .6em;
    }
  }

  /* 2.7 Témoignages : date sur la même ligne que la citation (bandeau avec
     le guillemet), alignée à droite. .descriptif-light : même typo que
     .testimonial-signature span, réutilisable ailleurs. */
  .descriptif-light {
    font-size: .85em;
    opacity: .6;
  }
  .testimonial-head {
    position: relative;
    margin-bottom: .2em;
  }
    .testimonial-head .quote-icon { margin-bottom: 0; }
    .testimonial-head .testimonial-date {
      position: absolute;
      top: 0;
      right: 0;
      line-height: 1;
    }

  /* Page article-testimonials (témoignage complet + "Les autres
     témoignages" en dessous) : même carte .testimonial-card que le
     sommaire/la liste rubrique, simplement pleine largeur hors grille/
     liste. Espacement scopé à cette page, même idiome que
     #article-page .article-evenements-lies/.article-rubrique-liste. */
  #article-testimonials-page .testimonials-autres { margin-top: 3em; }
    #article-testimonials-page .testimonials-autres h2 { margin-bottom: .8em; }
    #article-testimonials-page .aucun-resultat {
      background: var(--gris-bg);
      padding: 2em;
      text-align: center;
      color: var(--gris);
    }

  /* 2.1 Intro : reskin de la lame "Blocs Dépliables" (couteau_suisse) pour
     le "savoir plus" (a activer dans Configuration > Le Couteau Suisse) —
     classes generees par outils/blocs_fonctions.php (cs_blocs/blocs_titre/
     blocs_resume/blocs_destination). */
  .intro-savoir-plus {
    max-width: 800px;
    margin: calc(-1 * var(--space-md)) auto var(--space-xl);
    text-align: center;
  }
  .intro-savoir-plus .cs_blocs { margin-top: .8em; }
  .intro-savoir-plus .blocs_titre {
    display: inline-block;
    font-family: var(--font-titres);
    font-size: .95em;
    font-weight: 600;
    background: none !important;
    padding-left: 0 !important;
  }
    .intro-savoir-plus .blocs_titre a {
      color: var(--c-page);
      border-bottom: 0;
    }
      .intro-savoir-plus .savoir-plus-label::after { content: ' →'; }
  .intro-savoir-plus .blocs_destination {
    overflow: hidden;
    margin-top: .8em;
  }
  .intro-savoir-plus .savoir-plus-texte { line-height: 1.7em; }