@charset "UTF-8";
/* ============================================================================
   EXCURSIONS MAROC — direction « ALIZÉ »
   ----------------------------------------------------------------------------
   Origine du dessin : la côte atlantique et la chaux. Le bleu profond des
   barques d'Essaouira et des portes de médina, le blanc crayeux des murs
   chaulés, le corail des filets de pêche. La signature de mise en page est
   l'ARCHE — le cintre outrepassé des portes marocaines — appliquée aux photos
   qui ouvrent une page ou un lieu, jamais à toutes les images : une arche
   partout ne serait plus une signature, seulement un arrondi.
   Deuxième signature : un filet ondulé qui sépare les sections, tracé une fois
   en SVG et repris en fond, comme une ligne d'horizon.

   Aucun framework. Le contenu est lisible sans JavaScript ; le mouvement n'est
   qu'un supplément, désactivé si l'utilisateur le demande.
   Remplace le dessin « Indigo » du 2026-09-04, archivé dans
   archive/dessin-indigo-2026-09-04/ (rien n'a été perdu).
   ========================================================================= */

/* --- 1. Jetons ----------------------------------------------------------- */
:root {
  color-scheme: light dark;

  /* Bleus — la couleur porteuse */
  --bleu-950: #071A26;
  --bleu-900: #0B2233;
  --bleu-800: #0E3A5C;
  --bleu-700: #14496F;
  --bleu-600: #1B5C89;
  --bleu-400: #6B9CBC;
  --bleu-200: #B8D2E2;
  --bleu-100: #DCE8F0;
  --bleu-50:  #EFF5F9;

  /* Matières claires : la chaux */
  --chaux:    #F7F4EE;
  --chaux-2:  #EFEAE1;
  --chaux-3:  #E4DED2;
  --craie:    #FFFFFF;

  /* Signaux, employés avec parcimonie */
  --corail:      #C93F18;   /* action ; 4,55:1 sur la chaux, 4,99:1 sous du blanc */
  --corail-fonce:#B33714;
  --corail-clair:#FF7A4F;
  --sable:       #8C6112;   /* chiffres et notes ; 4,99:1 sur la chaux */
  --sable-clair: #E7BD68;
  --menthe:      #0F7A5F;

  /* Neutres tirés vers le bleu — un gris pur sonnerait « par défaut » */
  --encre:    #12222E;
  --encre-2:  #22384A;
  --doux:     #46606F;      /* 6,85:1 sur la chaux */
  --tenu:     #5B707E;      /* 4,71:1 sur la chaux, 5,17:1 sur le blanc */

  /* Rôles — thème clair */
  --fond:          var(--chaux);
  --fond-creux:    var(--chaux-2);
  --fond-plein:    var(--bleu-800);
  --surface:       var(--craie);
  --surface-2:     #FBF9F5;
  --texte:         var(--encre);
  --texte-doux:    var(--doux);
  --texte-tenu:    var(--tenu);
  --texte-inverse: #F2F8FB;
  --trait:         var(--chaux-3);
  --trait-fort:    #C9BFAE;
  --trait-bleu:    var(--bleu-100);
  --accent:        var(--bleu-800);
  --accent-vif:    var(--bleu-600);
  --accent-tenu:   var(--bleu-50);
  --action:        var(--corail);
  --action-fonce:  var(--corail-fonce);
  --sur-action:    #FFFFFF;
  /* Texte posé sur --accent : blanc en clair, encre en sombre — l'accent
     sombre est un bleu PÂLE, sous lequel du blanc tomberait à 1,8:1. */
  --sur-accent:    #FFFFFF;
  --note:          var(--sable);

  --ombre-1: 0 1px 2px rgb(14 58 92 / .05), 0 6px 18px rgb(14 58 92 / .06);
  --ombre-2: 0 2px 6px rgb(14 58 92 / .07), 0 22px 50px rgb(14 58 92 / .11);

  /* Caractères */
  --titre: "Epilogue", "Helvetica Neue", Arial, sans-serif;
  --texte-fam: "Karla", "Helvetica Neue", Arial, sans-serif;
  --mono: ui-monospace, SFMono-Regular, "SF Mono", Menlo, monospace;

  /* Échelle typographique — un rapport constant de 1,22 */
  --t-xs: .78rem;
  --t-sm: .89rem;
  --t-md: 1rem;
  --t-lg: 1.12rem;
  --t-xl: clamp(1.28rem, 1.1rem + .6vw, 1.55rem);
  --t-2xl: clamp(1.6rem, 1.25rem + 1.3vw, 2.15rem);
  --t-3xl: clamp(2rem, 1.4rem + 2.4vw, 3rem);
  --t-4xl: clamp(2.5rem, 1.5rem + 4vw, 4.15rem);

  /* Espaces */
  --e-court: .75rem;
  --e-moyen: 1.35rem;
  --e-large: 2.4rem;
  --e-bloc: clamp(3.6rem, 2rem + 5vw, 6.4rem);
  --gouttiere: clamp(1.15rem, .6rem + 2.2vw, 2.5rem);
  --largeur: 1220px;

  /* L'arche : le cintre des portes, en rayons. Une seule définition, reprise
     partout — la changer ici change la signature du site entier. */
  --arche: 52% 52% 14px 14px / 42% 42% 14px 14px;
  --arche-douce: 40% 40% 14px 14px / 26% 26% 14px 14px;
  --rayon: 16px;
  --rayon-court: 10px;
  --pilule: 999px;
}

/* Thème sombre. Guardé sur :not([data-theme="light"]) pour qu'un choix
   explicite de thème clair l'emporte sur un système en sombre. */
@media (prefers-color-scheme: dark) {
  :root:not([data-theme="light"]) {
    --fond:          var(--bleu-950);
    --fond-creux:    #0A2130;
    --fond-plein:    #06131C;
    --surface:       #10293A;
    --surface-2:     #0D2231;
    --texte:         #E8F1F6;
    --texte-doux:    #AFC6D3;
    --texte-tenu:    #8AA5B5;
    --texte-inverse: #F2F8FB;
    --trait:         #1D3B4F;
    --trait-fort:    #2A5069;
    --trait-bleu:    #1D3B4F;
    --accent:        #9CC6DE;
    --accent-vif:    #B6D8EC;
    --accent-tenu:   #12303F;
    --action:        var(--corail-clair);
    --action-fonce:  #FF9270;
    /* Le corail clair du thème sombre ne porte pas de blanc lisible : le texte
       posé dessus repasse en encre. */
    --sur-action:    #17140F;
    --sur-accent:    #071A26;
    --note:          var(--sable-clair);
    --ombre-1: 0 1px 2px rgb(0 0 0 / .3), 0 6px 18px rgb(0 0 0 / .28);
    --ombre-2: 0 2px 6px rgb(0 0 0 / .34), 0 22px 50px rgb(0 0 0 / .42);
  }
}
:root[data-theme="dark"] {
  --fond: var(--bleu-950); --fond-creux: #0A2130; --fond-plein: #06131C;
  --surface: #10293A; --surface-2: #0D2231;
  --texte: #E8F1F6; --texte-doux: #AFC6D3; --texte-tenu: #8AA5B5;
  --trait: #1D3B4F; --trait-fort: #2A5069; --trait-bleu: #1D3B4F;
  --accent: #9CC6DE; --accent-vif: #B6D8EC; --accent-tenu: #12303F;
  --action: var(--corail-clair); --action-fonce: #FF9270; --sur-action: #17140F;
  --sur-accent: #071A26;
  --note: var(--sable-clair);
}

/* --- 2. Réglages généraux ------------------------------------------------ */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) { html { scroll-behavior: auto; } }

body {
  margin: 0;
  background: var(--fond);
  color: var(--texte);
  font-family: var(--texte-fam);
  font-size: var(--t-md);
  line-height: 1.68;
  -webkit-font-smoothing: antialiased;
  overflow-wrap: break-word;
}

h1, h2, h3, h4 {
  font-family: var(--titre);
  font-weight: 700;
  letter-spacing: -.028em;
  line-height: 1.08;
  margin: 0;
  text-wrap: balance;
}
h1 { font-size: var(--t-4xl); }
h2 { font-size: var(--t-3xl); }
h3 { font-size: var(--t-xl); }
h4 { font-size: var(--t-lg); }
p { margin: 0 0 var(--e-moyen); }
p:last-child { margin-bottom: 0; }

a { color: var(--accent); text-decoration-thickness: 1px; text-underline-offset: .18em; }
a:hover { color: var(--action); }
img, picture, svg, video { max-width: 100%; }
img { display: block; height: auto; }
ul, ol { margin: 0 0 var(--e-moyen); padding-left: 1.15rem; }
li { margin-bottom: .35rem; }
strong, b { font-weight: 700; }
small { font-size: var(--t-xs); }

/* [hidden] doit gagner contre les .fiche{display:flex} : le filtre du
   catalogue pose hidden en JS et, sans !important, les cartes resteraient
   visibles — le filtre paraîtrait simplement ne rien faire. */
[hidden] { display: none !important; }

:focus-visible {
  outline: 3px solid var(--action);
  outline-offset: 3px;
  border-radius: 4px;
}

::selection { background: var(--bleu-200); color: var(--encre); }

.visuellement-cache {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0;
}
.evitement {
  position: absolute; left: var(--e-moyen); top: -4rem; z-index: 100;
  background: var(--action); color: var(--sur-action); padding: .7rem 1.1rem;
  border-radius: var(--rayon-court); text-decoration: none; font-weight: 600;
  transition: top .18s;
}
.evitement:focus { top: var(--e-court); color: var(--sur-action); }

.mono { font-family: var(--mono); font-size: var(--t-xs); letter-spacing: .01em; }
.centre { text-align: center; }

/* --- 3. Trames ----------------------------------------------------------- */
.page { width: min(100% - 2 * var(--gouttiere), var(--largeur)); margin-inline: auto; }
.page--etroite { width: min(100% - 2 * var(--gouttiere), 760px); }
.bloc { padding-block: var(--e-bloc); }
.creux { background: var(--fond-creux); }
.bloc--plein { background: var(--fond-plein); color: var(--texte-inverse); }
.bloc--plein h2, .bloc--plein h3, .bloc--plein .entete-section h2 { color: #fff; }
.bloc--plein p, .bloc--plein .entete-section p { color: #C6DCE9; }
.bloc--plein .sourcil { color: var(--sable-clair); }

/* Le filet ondulé : la ligne d'horizon. Tracé une seule fois, en fond, donc
   sans un seul élément supplémentaire dans le HTML. */
.regle {
  border: 0; height: 12px; margin: 0;
  background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='120' height='12' viewBox='0 0 120 12'><path d='M0 6 Q15 1 30 6 T60 6 T90 6 T120 6' fill='none' stroke='%230E3A5C' stroke-opacity='.32' stroke-width='1.4'/></svg>") repeat-x center;
}

.entete-section {
  display: flex; justify-content: space-between; align-items: flex-end;
  gap: var(--e-large); margin-bottom: var(--e-large); flex-wrap: wrap;
}
.entete-section > div { max-width: 62ch; }
.entete-section p { color: var(--texte-doux); margin-top: var(--e-court); margin-bottom: 0; }

.sourcil {
  font-family: var(--titre); font-weight: 600; font-size: var(--t-xs);
  letter-spacing: .17em; text-transform: uppercase; color: var(--action);
  margin: 0;
}

.prose { max-width: 68ch; }
.prose h2 { font-size: var(--t-2xl); margin-top: var(--e-large); }
.prose h3 { margin-top: var(--e-moyen); }
.prose > :first-child { margin-top: 0; }
.prose ul { padding-left: 0; list-style: none; }
.prose li { padding-left: 1.5rem; position: relative; }
.prose li::before {
  content: ""; position: absolute; left: 0; top: .62em;
  width: .5rem; height: .5rem; border-radius: 50%;
  border: 2px solid var(--accent); background: var(--accent-tenu);
}

/* --- 4. Boutons et liens ------------------------------------------------- */
.bouton {
  display: inline-flex; align-items: center; gap: .5rem;
  font-family: var(--titre); font-weight: 600; font-size: var(--t-sm);
  padding: .82rem 1.4rem; border-radius: var(--pilule);
  text-decoration: none; border: 1.5px solid transparent; cursor: pointer;
  transition: background .16s, color .16s, border-color .16s, translate .16s;
}
.bouton:hover { translate: 0 -1px; }
.bouton--plein { background: var(--action); color: var(--sur-action); }
.bouton--plein:hover { background: var(--action-fonce); color: var(--sur-action); }
.bouton--fil { border-color: var(--trait-fort); color: var(--texte); background: transparent; }
.bouton--fil:hover { border-color: var(--accent); color: var(--accent); background: var(--accent-tenu); }
.bouton--clair { background: rgb(255 255 255 / .12); color: #fff; border-color: rgb(255 255 255 / .3); }
.bouton--clair:hover { background: rgb(255 255 255 / .2); color: #fff; }
.bouton .fl { transition: translate .18s; }
.bouton:hover .fl { translate: 3px 0; }

.lien {
  font-family: var(--titre); font-weight: 600; color: var(--accent);
  text-decoration: none; border-bottom: 2px solid var(--trait-bleu); padding-bottom: 1px;
}
.lien:hover { border-color: var(--action); color: var(--action); }

/* --- 5. En-tête ---------------------------------------------------------- */
.entete {
  position: sticky; top: 0; z-index: 50;
  background: color-mix(in srgb, var(--fond) 88%, transparent);
  backdrop-filter: blur(12px);
  border-bottom: 1px solid transparent;
  transition: border-color .2s, background .2s;
}
.entete[data-defile="oui"] { border-bottom-color: var(--trait); background: var(--fond); }
.entete__grille {
  width: min(100% - 2 * var(--gouttiere), var(--largeur)); margin-inline: auto;
  display: flex; align-items: center; gap: var(--e-moyen);
  padding-block: .85rem;
}
.marque {
  display: inline-flex; align-items: center; gap: .6rem;
  text-decoration: none; color: var(--texte); margin-right: auto;
}
.marque__mark { flex: none; }
.marque__nom {
  font-family: var(--titre); font-weight: 700; font-size: 1.16rem; letter-spacing: -.035em;
  display: flex; flex-direction: column; line-height: 1.02;
}
.marque__nom small {
  font-weight: 600; font-size: .75rem; letter-spacing: .18em;
  text-transform: uppercase; color: var(--action);
}
.nav { display: flex; }
.nav--principale { gap: 1.5rem; }
.nav--principale a {
  font-family: var(--titre); font-weight: 600; font-size: var(--t-sm);
  color: var(--texte-doux); text-decoration: none; padding-block: .4rem;
  position: relative;
}
.nav--principale a::after {
  content: ""; position: absolute; left: 0; right: 100%; bottom: 0; height: 2px;
  background: var(--action); border-radius: 2px; transition: right .22s;
}
.nav--principale a:hover, .nav--principale a[aria-current="page"] { color: var(--texte); }
.nav--principale a:hover::after, .nav--principale a[aria-current="page"]::after { right: 0; }

.burger {
  display: none; width: 42px; height: 42px; padding: 0;
  align-items: center; justify-content: center;
  background: transparent; border: 1.5px solid var(--trait-fort);
  border-radius: var(--pilule); color: var(--texte); cursor: pointer;
}
.burger svg { width: 20px; height: 20px; }
.tiroir {
  border-top: 1px solid var(--trait); background: var(--fond);
  padding: var(--e-court) var(--gouttiere) var(--e-large);
  display: flex; flex-direction: column;
}
.tiroir a {
  display: flex; justify-content: space-between; align-items: baseline;
  font-family: var(--titre); font-weight: 700; font-size: var(--t-xl);
  letter-spacing: -.03em; color: var(--texte); text-decoration: none;
  padding-block: .85rem; border-bottom: 1px solid var(--trait);
}
.tiroir a span { font-family: var(--mono); font-size: var(--t-xs); color: var(--texte-tenu); }
.tiroir a:last-child { color: var(--action); border-bottom: 0; }

/* --- 6. Ouverture -------------------------------------------------------- */
.ouverture { padding-block: var(--e-bloc) var(--e-large); }
.ouverture__grille {
  display: grid; grid-template-columns: 1.02fr .98fr;
  gap: clamp(2rem, 4vw, 4.2rem); align-items: center;
}
.ouverture__titre { font-size: var(--t-4xl); }
.ouverture__titre em { font-style: normal; color: var(--action); }
.ouverture__chapeau {
  font-size: var(--t-lg); color: var(--texte-doux);
  max-width: 46ch; margin-top: var(--e-moyen);
}
.ouverture__actions { display: flex; gap: var(--e-court); flex-wrap: wrap; margin-top: var(--e-large); }

/* La plaque : une photo en arche, posée sur l'air. C'est la signature. */
.plaque { position: relative; }
.plaque picture, .plaque img {
  border-radius: var(--arche); overflow: hidden; display: block;
  width: 100%; box-shadow: var(--ombre-2);
}
.plaque img { aspect-ratio: 4 / 4.6; object-fit: cover; }
.plaque--ouverture img { aspect-ratio: 4 / 4.75; }
.plaque__jeton {
  position: absolute; left: 50%; bottom: -.9rem; translate: -50% 0;
  background: var(--surface); border: 1px solid var(--trait);
  border-radius: var(--pilule); padding: .5rem 1.05rem; margin: 0;
  font-family: var(--mono); font-size: var(--t-xs); color: var(--texte-doux);
  box-shadow: var(--ombre-1); white-space: nowrap; max-width: 92%;
  overflow: hidden; text-overflow: ellipsis;
}

/* --- 7. Bande de preuves ------------------------------------------------- */
.bande {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: var(--e-court);
  margin-top: clamp(2.6rem, 5vw, 4.4rem);
}
.bande__cellule {
  background: var(--surface); border: 1px solid var(--trait);
  border-radius: var(--rayon); padding: 1.15rem 1.25rem;
}
.bande__nombre {
  display: block; font-family: var(--titre); font-weight: 700;
  font-size: clamp(1.7rem, 1.1rem + 1.5vw, 2.4rem); letter-spacing: -.04em;
  color: var(--accent); font-variant-numeric: tabular-nums; line-height: 1;
}
.bande__legende {
  display: block; margin-top: .55rem; font-size: var(--t-sm);
  color: var(--texte-tenu); line-height: 1.45;
}

/* --- 8. Fiches (excursions et destinations) ------------------------------ */
.grille-plaques {
  display: grid; grid-template-columns: repeat(3, 1fr);
  gap: clamp(1.3rem, 2.4vw, 2.2rem);
}
.fiche {
  display: flex; flex-direction: column;
  background: var(--surface); border: 1px solid var(--trait);
  border-radius: var(--rayon); overflow: hidden;
  transition: box-shadow .22s, translate .22s, border-color .22s;
}
.fiche:hover { box-shadow: var(--ombre-2); translate: 0 -3px; border-color: var(--trait-bleu); }
.fiche__vue { position: relative; overflow: hidden; }
.fiche__vue img {
  width: 100%; aspect-ratio: 4 / 3.1; object-fit: cover;
  transition: scale .5s cubic-bezier(.2, .7, .2, 1);
}
.fiche:hover .fiche__vue img { scale: 1.045; }
.fiche__prix {
  position: absolute; right: .8rem; bottom: .8rem; margin: 0;
  background: var(--surface); color: var(--texte);
  border-radius: var(--pilule); padding: .4rem .85rem;
  font-family: var(--titre); font-weight: 700; font-size: var(--t-sm);
  font-variant-numeric: tabular-nums; box-shadow: var(--ombre-1);
}
.fiche__prix small { font-weight: 500; color: var(--texte-tenu); margin-left: .2rem; }
.fiche__corps { padding: 1.25rem 1.3rem 1.35rem; display: flex; flex-direction: column; flex: 1; }
.fiche__meta {
  display: flex; align-items: center; gap: .45rem; flex-wrap: wrap; margin: 0 0 .6rem;
  font-family: var(--titre); font-weight: 600; font-size: var(--t-xs);
  letter-spacing: .08em; text-transform: uppercase; color: var(--texte-tenu);
}
/* Le séparateur est porté par les spans, pas par un élément à part : quand la
   ligne se coupe, un <i> séparé reste orphelin en fin de ligne — « 1 jour ·
   12 h · MARRAKECH · » avec un point qui ne sépare plus rien. En ::before, il
   part avec le mot qu'il introduit. */
.fiche__meta i { display: none; }
.fiche__meta span ~ span::before {
  content: "·"; color: var(--action); margin-right: .45rem; font-weight: 700;
}
.fiche__titre { font-size: var(--t-xl); margin-bottom: .45rem; }
.fiche__titre a { color: inherit; text-decoration: none; }
/* La carte entière est cliquable, mais seul le titre porte le lien : c'est lui
   qui est annoncé, et le reste du texte reste sélectionnable. */
.fiche__titre a::after { content: ""; position: absolute; inset: 0; }
.fiche { position: relative; }
.fiche__accroche { color: var(--texte-doux); font-size: var(--t-sm); margin-bottom: var(--e-court); }
.fiche__points { margin-top: 0; }
.fiche__pied {
  margin: auto 0 0; padding-top: .9rem; border-top: 1px solid var(--trait);
  display: flex; justify-content: space-between; align-items: center;
  font-family: var(--titre); font-weight: 600; font-size: var(--t-xs);
  color: var(--texte-tenu);
}
.fiche__pied .fl { color: var(--action); }
/* Les fiches de LIEU portent l'arche, les fiches d'excursion non : le motif
   marque ce qui est un endroit, pas ce qui est un produit. Une arche partout
   ne signifierait plus rien. */
.fiche--lieu .fiche__vue { padding: .5rem .5rem 0; }
.fiche--lieu .fiche__vue img { border-radius: var(--arche-douce); }

.fiche--vedette { grid-column: span 2; }
.fiche--vedette .fiche__vue img { aspect-ratio: 16 / 9.4; }
.fiche--vedette .fiche__titre { font-size: var(--t-2xl); }
.fiche--vedette .fiche__accroche { font-size: var(--t-md); }

/* La liste à repères : un petit demi-cintre, écho de l'arche. */
.liste-losange { list-style: none; padding: 0; margin: 0; }
.liste-losange li {
  position: relative; padding-left: 1.5rem; margin-bottom: .45rem;
  font-size: var(--t-sm); color: var(--texte-doux);
}
.liste-losange li::before {
  content: ""; position: absolute; left: 0; top: .55em;
  width: .58rem; height: .38rem;
  border: 2px solid var(--accent); border-bottom: 0;
  border-radius: .58rem .58rem 0 0;
}
.losange {
  width: .5rem; height: .5rem; display: inline-block;
  border-radius: .5rem .5rem 1px 1px; background: var(--action);
}

/* --- 9. Bento « comment nous travaillons » ------------------------------- */
.bento {
  display: grid; grid-template-columns: repeat(4, 1fr);
  gap: clamp(1rem, 1.6vw, 1.5rem);
}
.case {
  background: var(--surface); border: 1px solid var(--trait);
  border-radius: var(--rayon); padding: 1.5rem 1.5rem 1.6rem;
  display: flex; flex-direction: column;
}
.case--large { grid-column: span 2; }
.case--haute { grid-row: span 2; }
.case--pleine {
  background: var(--fond-plein); color: var(--texte-inverse); border-color: transparent;
  position: relative; overflow: hidden;
}
/* La grande case garde de la hauteur en réserve pour tenir la rangée du bento.
   Plutôt que du vide, on y pose l'arche en filigrane — le motif du site. */
.case--pleine::after {
  content: ""; position: absolute; right: -14%; bottom: -34%;
  width: 62%; aspect-ratio: 4 / 5; border-radius: var(--arche);
  border: 1.5px solid rgb(255 255 255 / .12); pointer-events: none;
}
.case--pleine > * { position: relative; z-index: 1; }
.case.case--pleine h3 { color: #fff; }
.case.case--pleine p { color: #BFD6E4; }
.case.case--pleine .case__num { color: var(--sable-clair); }
.case__num {
  font-family: var(--titre); font-weight: 700; font-size: var(--t-lg);
  color: var(--note); font-variant-numeric: tabular-nums;
  margin: 0 0 .7rem; letter-spacing: .02em;
}
.case h3 { margin-bottom: .6rem; }
.case p { color: var(--texte-doux); font-size: var(--t-sm); }

/* --- 10. Appel à l'action ------------------------------------------------ */
.appel {
  background: var(--fond-plein); color: var(--texte-inverse);
  border-radius: clamp(20px, 3vw, 34px);
  padding: clamp(2.2rem, 5vw, 4rem);
  position: relative; overflow: hidden;
}
/* L'arche en filigrane : le motif du site, agrandi, jamais nommé. */
.appel::after {
  content: ""; position: absolute; right: -6%; top: -30%;
  width: 42%; aspect-ratio: 4 / 5; border-radius: var(--arche);
  border: 1.5px solid rgb(255 255 255 / .13); pointer-events: none;
}
.appel h2 { color: #fff; max-width: 20ch; }
.appel p { color: #C6DCE9; max-width: 56ch; margin-top: var(--e-moyen); }
.appel__actions { display: flex; gap: var(--e-court); flex-wrap: wrap; margin-top: var(--e-large); }
.appel .sourcil { color: var(--sable-clair); }

/* --- 11. Bandeau défilant ------------------------------------------------ */
.bandeau { overflow: hidden; border-block: 1px solid var(--trait); padding-block: var(--e-moyen); }
.bandeau__piste {
  display: flex; gap: var(--e-large); width: max-content;
  animation: glisse 52s linear infinite;
}
.bandeau:hover .bandeau__piste { animation-play-state: paused; }
.bandeau a {
  font-family: var(--titre); font-weight: 700; font-size: var(--t-xl);
  letter-spacing: -.035em; text-decoration: none; color: var(--texte-tenu);
  display: inline-flex; align-items: center; gap: var(--e-large);
  transition: color .15s;
}
.bandeau a:hover { color: var(--action); }
.bandeau a::after {
  content: ""; width: .5rem; height: .34rem; flex: none;
  border: 2px solid var(--trait-fort); border-bottom: 0; border-radius: .5rem .5rem 0 0;
}
@keyframes glisse { from { translate: 0 0; } to { translate: -50% 0; } }
@media (prefers-reduced-motion: reduce) {
  .bandeau { overflow-x: auto; }
  .bandeau__piste { animation: none; }
}

/* --- 12. Page excursion -------------------------------------------------- */
.chapeau-tour { padding-block: var(--e-large) 0; }
.fil {
  font-family: var(--titre); font-weight: 600; font-size: var(--t-xs);
  color: var(--texte-tenu); display: flex; flex-wrap: wrap; gap: .4rem;
  align-items: center; list-style: none; padding: 0; margin: 0;
}
.fil a { text-decoration: none; display: inline-block; padding-block: .3rem; color: inherit; }
.fil a:hover { color: var(--action); }
.fil li { margin: 0; }
.fil li + li::before { content: "→"; margin-right: .4rem; opacity: .5; }

.tour__titre { margin-top: var(--e-moyen); }
.tour__accroche {
  font-size: var(--t-lg); color: var(--texte-doux);
  max-width: 60ch; margin-top: var(--e-moyen);
}
.tour__corps {
  display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(300px, .9fr);
  gap: clamp(1.8rem, 4vw, 3.6rem); align-items: start;
  padding-block: var(--e-large) var(--e-bloc);
}
.tour__section { margin-top: var(--e-bloc); }
.tour__section:first-child { margin-top: 0; }
.tour__section > h2 { font-size: var(--t-2xl); margin-bottom: var(--e-moyen); }

/* Les étapes : un vrai chemin. Le trait relie les jours, le nœud les marque —
   la numérotation dit ici quelque chose de vrai, c'est une succession. */
.route { list-style: none; padding: 0; margin: 0; }
.etape {
  position: relative; padding-left: 3.1rem; padding-bottom: var(--e-large);
  margin-bottom: 0;
}
.etape:last-child { padding-bottom: 0; }
.etape::before {
  content: ""; position: absolute; left: 1.02rem; top: 2.1rem; bottom: 0;
  width: 2px; background: linear-gradient(var(--trait-bleu), transparent);
}
.etape:last-child::before { display: none; }
.etape__noeud {
  position: absolute; left: 0; top: 1rem;
  width: 2.1rem; height: 2.1rem; border-radius: 50%;
  background: var(--accent-tenu); border: 2px solid var(--accent);
  color: var(--accent); display: grid; place-items: center;
  font-family: var(--titre); font-weight: 700; font-size: var(--t-sm);
  font-variant-numeric: tabular-nums;
}
.etape__heure {
  font-family: var(--titre); font-weight: 600; font-size: var(--t-xs);
  letter-spacing: .14em; text-transform: uppercase; color: var(--action);
  margin: 0 0 .3rem;
}
.etape h3 { margin-bottom: .5rem; }
.etape p { color: var(--texte-doux); }

/* La carte de réservation : le seul bloc qui suit le défilement. */
.carte-resa {
  position: sticky; top: 5.4rem;
  background: var(--surface); border: 1px solid var(--trait);
  border-radius: clamp(18px, 2vw, 24px); overflow: hidden; box-shadow: var(--ombre-1);
}
.carte-resa__haut { background: var(--accent-tenu); padding: 1.4rem 1.5rem; text-align: center; }
/* Le gabarit écrit <b>149 €</b><span>par personne…</span> : c'est donc b et
   span qu'il faut peindre, pas un <small> qui n'existe nulle part. */
.carte-resa__prix { margin: 0; }
.carte-resa__prix b {
  display: block; font-family: var(--titre); font-weight: 700; letter-spacing: -.04em;
  font-size: clamp(2.1rem, 1.4rem + 2vw, 2.9rem); line-height: 1;
  color: var(--accent); font-variant-numeric: tabular-nums;
}
.carte-resa__prix span {
  display: block; font-size: var(--t-sm); color: var(--texte-doux); margin-top: .45rem;
}
.carte-resa__faits { list-style: none; padding: 0; margin: 0; }
.carte-resa__faits li {
  display: flex; justify-content: space-between; gap: var(--e-court);
  padding: .8rem 1.5rem; border-bottom: 1px solid var(--trait);
  font-size: var(--t-sm); margin: 0;
}
.carte-resa__faits li b {
  color: var(--texte-tenu); font-family: var(--titre); font-weight: 600;
  font-size: var(--t-xs); letter-spacing: .1em; text-transform: uppercase;
  flex: none; padding-top: .15rem;
}
.carte-resa__faits li span { text-align: right; font-weight: 600; }
.carte-resa__pied { padding: 1.3rem 1.5rem 1.5rem; }
.carte-resa__pied .bouton { width: 100%; justify-content: center; }
.carte-resa__note {
  margin: var(--e-court) 0 0; font-size: var(--t-xs);
  color: var(--texte-tenu); text-align: center;
}

.duo { display: grid; grid-template-columns: 1fr 1fr; gap: var(--e-moyen); }
/* Les deux colonnes sont des <section>, pas des <div> : cibler `> div`
   n'aurait rien peint du tout sans qu'aucune règle ne paraisse fausse. */
.duo > * {
  background: var(--surface); border: 1px solid var(--trait);
  border-radius: var(--rayon); padding: 1.4rem 1.5rem;
}
.duo h3 { font-size: var(--t-lg); margin-bottom: var(--e-court); }
.duo ul { list-style: none; padding: 0; margin: 0; }
.duo li {
  display: flex; gap: .6rem; align-items: flex-start;
  font-size: var(--t-sm); color: var(--texte-doux); margin-bottom: .5rem;
}
.duo svg { width: 1rem; height: 1rem; flex: none; margin-top: .34rem; }
.duo--oui svg { color: var(--menthe); }
.duo--non svg { color: var(--texte-tenu); }

/* --- 13. Galeries et mosaïques ------------------------------------------- */
.galerie { display: grid; grid-template-columns: repeat(4, 1fr); gap: .55rem; }
.galerie img {
  width: 100%; aspect-ratio: 1; object-fit: cover;
  border-radius: var(--rayon-court);
}
.galerie > :first-child { grid-column: span 2; grid-row: span 2; }
.galerie > :first-child img { aspect-ratio: 1; border-radius: var(--rayon); }

/* La mosaïque d'ouverture d'une fiche : une grande image et deux petites.
   La première passe en arche — c'est une ouverture de page. */
.mosaique { display: grid; grid-template-columns: repeat(3, 1fr); grid-auto-rows: 1fr;
  gap: var(--e-court); }
.mosaique img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover;
  border-radius: var(--rayon-court); height: 100%; }
.mosaique > :first-child { grid-column: span 2; grid-row: span 2; }
.mosaique > :first-child img { aspect-ratio: 16 / 11; border-radius: var(--arche-douce); }

/* --- 14. Catalogue et filtres -------------------------------------------- */
.filtres { display: flex; flex-wrap: wrap; gap: .5rem; align-items: center; }
.filtre {
  font-family: var(--titre); font-weight: 600; font-size: var(--t-sm);
  background: transparent; color: var(--texte-doux);
  border: 1.5px solid var(--trait-fort); border-radius: var(--pilule);
  padding: .55rem 1.05rem; cursor: pointer;
  transition: background .15s, color .15s, border-color .15s;
}
.filtre:hover { border-color: var(--accent); color: var(--accent); }
.filtre[aria-pressed="true"] {
  background: var(--accent); border-color: var(--accent); color: var(--sur-accent);
}
.filtres__compte {
  font-family: var(--titre); font-weight: 600; font-size: var(--t-sm);
  color: var(--texte-tenu); margin-left: auto;
}

/* --- 15. Questions ------------------------------------------------------- */
.qr { border-bottom: 1px solid var(--trait); }
.qr summary {
  cursor: pointer; list-style: none; padding: 1.05rem 2.4rem 1.05rem 0;
  font-family: var(--titre); font-weight: 600; font-size: var(--t-lg);
  position: relative; color: var(--texte);
}
.qr summary::-webkit-details-marker { display: none; }
.qr summary::after {
  content: ""; position: absolute; right: .4rem; top: 1.5rem;
  width: .75rem; height: .75rem;
  border-right: 2px solid var(--action); border-bottom: 2px solid var(--action);
  rotate: 45deg; transition: rotate .2s;
}
.qr[open] summary::after { rotate: -135deg; }
.qr summary:hover { color: var(--accent); }
.qr__reponse { padding-bottom: 1.15rem; color: var(--texte-doux); max-width: 70ch; }

/* --- 16. Formulaire ------------------------------------------------------ */
.form { display: grid; gap: var(--e-moyen); }
.duo-champs { display: grid; grid-template-columns: 1fr 1fr; gap: var(--e-moyen); }
.champ { display: grid; gap: .4rem; }
.champ label { font-family: var(--titre); font-weight: 600; font-size: var(--t-sm); }
.champ .req { color: var(--action); }
.champ input, .champ select, .champ textarea {
  font: inherit; font-size: var(--t-md); color: var(--texte);
  background: var(--surface); border: 1.5px solid var(--trait-fort);
  border-radius: var(--rayon-court); padding: .75rem .9rem; width: 100%;
  transition: border-color .15s, box-shadow .15s;
}
.champ textarea { min-height: 9rem; resize: vertical; }
.champ input:focus, .champ select:focus, .champ textarea:focus {
  outline: none; border-color: var(--accent);
  box-shadow: 0 0 0 3px var(--accent-tenu);
}
.champ__aide { font-size: var(--t-xs); color: var(--texte-tenu); margin: 0; }
.champ input[type="checkbox"] {
  width: 1.5rem; height: 1.5rem; min-width: 1.5rem; flex: none;
  accent-color: var(--action); cursor: pointer;
}
.champ--erreur input, .champ--erreur select, .champ--erreur textarea { border-color: var(--action); }
/* Le piège à robots : masqué SANS coordonnée hors écran. « left:-9999px »
   élargit la boîte du document et fait déborder la page horizontalement — un
   défaut invisible à l'œil mais bien réel, et présent sur toutes les largeurs. */
.pot-de-miel {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip-path: inset(50%); white-space: nowrap; border: 0;
}
.message {
  border-radius: var(--rayon-court); padding: .9rem 1.1rem; margin: 0;
  font-size: var(--t-sm); border: 1.5px solid;
}
.message--ok { background: #E8F5EF; border-color: var(--menthe); color: #0A5B46; }
.message--ko { background: #FCEAE4; border-color: var(--action); color: var(--corail-fonce); }

/* --- 17. Crédits photo --------------------------------------------------- */
.credit-photo {
  font-family: var(--mono); font-size: var(--t-xs); color: var(--texte-tenu);
  margin-top: .5rem;
}
.vedette { font-weight: 700; }
.classe { display: inline-block; }

/* --- 18. Pied ------------------------------------------------------------ */
.pied {
  background: var(--fond-plein); color: #BFD6E4;
  padding-block: var(--e-bloc) var(--e-large); margin-top: 0;
  /* Le pied est un fond sombre : on y REDÉFINIT les jetons de texte plutôt que
     de repeindre chaque règle. Sans cela, un style en ligne du gabarit
     (color:var(--texte-doux)) posait du gris foncé sur du bleu nuit — 1,78:1,
     illisible, et invisible à la relecture du CSS puisque la faute est ailleurs. */
  --texte-doux: #C6DCE9;
  --texte-tenu: #9DBACD;
  --action: var(--sable-clair);
}
.pied a { color: #DCEAF3; text-decoration: none; }
.pied a:hover { color: var(--sable-clair); }
.pied .marque { color: #fff; }
.pied .marque__nom small { color: var(--sable-clair); }
.pied__grille {
  display: grid; grid-template-columns: 1.5fr repeat(3, 1fr);
  gap: var(--e-large); padding-bottom: var(--e-large);
}
.pied__grille ul { list-style: none; padding: 0; margin: 0; }
.pied__grille li { margin-bottom: .5rem; font-size: var(--t-sm); }
.pied-titre {
  font-family: var(--titre); font-weight: 600; font-size: var(--t-xs);
  letter-spacing: .17em; text-transform: uppercase; color: var(--sable-clair);
  margin: 0 0 var(--e-court);
}
.pied__signature { color: #93B2C6; }
.pied__signature a { border-bottom: 1px solid rgb(255 255 255 / .28); }
.pied__bas {
  border-top: 1px solid rgb(255 255 255 / .14); padding-top: var(--e-moyen);
  display: flex; justify-content: space-between; gap: var(--e-moyen);
  flex-wrap: wrap; font-size: var(--t-xs); color: #93B2C6;
}

/* --- 19. Divers ---------------------------------------------------------- */
.rail { display: flex; gap: var(--e-court); overflow-x: auto; padding-bottom: .5rem; }
.plaque--ouverture { justify-self: end; width: 100%; }

/* --- 20. Adaptations ----------------------------------------------------- */
@media (max-width: 1080px) {
  .bento { grid-template-columns: repeat(2, 1fr); }
  .case--haute { grid-row: auto; }
  .grille-plaques { grid-template-columns: repeat(2, 1fr); }
  /* Les fiches de LIEU portent l'arche, les fiches d'excursion non : le motif
   marque ce qui est un endroit, pas ce qui est un produit. Une arche partout
   ne signifierait plus rien. */
.fiche--lieu .fiche__vue { padding: .5rem .5rem 0; }
.fiche--lieu .fiche__vue img { border-radius: var(--arche-douce); }

.fiche--vedette { grid-column: span 2; }
}
@media (max-width: 900px) {
  .nav--principale, .bouton--action-entete { display: none; }
  .burger { display: inline-flex; }
  .ouverture__grille { grid-template-columns: 1fr; }
  .plaque--ouverture { order: -1; max-width: 30rem; margin-inline: auto; }
  .tour__corps { grid-template-columns: 1fr; }
  .carte-resa { position: static; }
  .bande { grid-template-columns: repeat(2, 1fr); }
  .pied__grille { grid-template-columns: 1fr 1fr; }
}
@media (max-width: 640px) {
  .grille-plaques, .bento, .duo, .duo-champs { grid-template-columns: 1fr; }
  .mosaique { grid-template-columns: 1fr 1fr; }
  .mosaique > :first-child { grid-column: span 2; grid-row: auto; }
  .case--large, .fiche--vedette { grid-column: auto; }
  .galerie { grid-template-columns: 1fr 1fr; }
  .galerie > :first-child { grid-column: span 2; grid-row: auto; }
  .entete-section { flex-direction: column; align-items: flex-start; }
  .pied__grille { grid-template-columns: 1fr; gap: var(--e-moyen); }
  .filtres__compte { margin-left: 0; width: 100%; }
}

/* --- 21. Mouvement ------------------------------------------------------- */
/* Le contenu est VISIBLE au repos : l'animation ne fait que le monter un peu,
   jamais apparaître depuis l'opacité zéro. Une page qui attend un observateur
   pour s'afficher est une page vide au premier coup d'œil, et à l'impression. */
@media (prefers-reduced-motion: no-preference) {
  @supports (animation-timeline: view()) {
    .apparait {
      animation: monte linear both;
      animation-timeline: view();
      animation-range: entry 0% entry 55%;
    }
    @keyframes monte { from { translate: 0 22px; } to { translate: 0 0; } }
  }
}
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: .001ms !important; animation-iteration-count: 1 !important;
    transition-duration: .001ms !important; scroll-behavior: auto !important;
  }
}

@media print {
  .entete, .tiroir, .bandeau, .appel, .evitement, .burger { display: none !important; }
  body { background: #fff; color: #000; }
  .fiche, .case, .carte-resa { break-inside: avoid; }
}
