/*
 * GoLoisir — Design system du site public.
 * Écrit à la main (pas de Tailwind ici) : le site public doit être rapide
 * et indexable, un CDN de plusieurs Mo non purgé serait contre-productif.
 * Cf. backend/docs/site-public.md pour les décisions de design.
 */

:root {
  /* Le thème clair reste la base. Le sombre n'est activé que lorsque le
     navigateur ou le système annonce explicitement cette préférence. */
  color-scheme: light;

  /* --- Couleurs de marque (imposées) --- */
  --navy: #10245E;
  --navy-700: #1a3373;
  --turquoise: #16B8B4;
  --turquoise-600: #129e9b;
  --coral: #FF5A55;
  --yellow: #FFBD27;

  /* Couleur des titres : var(--navy) en clair (identité de marque), une
     teinte plus claire en sombre pour rester lisible — le bleu marine plein
     sur fond sombre tombe sous 2:1 de contraste, corrigé ici (WCAG 2.1 AA). */
  --heading: var(--navy);

  /* --- Neutres --- */
  --bg: #FFFFFF;
  --bg-tint: #F6F8FC;
  --bg-tint-2: #EEF2FA;
  --ink: #14172B;
  --ink-soft: #4B5170;
  --ink-faint: #7B8098;
  --border: #E3E7F1;
  --white: #FFFFFF;

  /* --- États sémantiques --- */
  --success: #1B8A5A;
  --focus-ring: #16B8B4;

  /* --- Typographie --- */
  --font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
  --fs-xs: 0.75rem;
  --fs-sm: 0.875rem;
  --fs-base: 1rem;
  --fs-md: 1.125rem;
  --fs-lg: 1.375rem;
  --fs-xl: 1.75rem;
  --fs-2xl: 2.25rem;
  --fs-3xl: 2.75rem;

  /* --- Échelle d'espacement (base 4px) --- */
  --sp-1: 4px;
  --sp-2: 8px;
  --sp-3: 12px;
  --sp-4: 16px;
  --sp-5: 20px;
  --sp-6: 24px;
  --sp-8: 32px;
  --sp-10: 40px;
  --sp-12: 48px;
  --sp-16: 64px;

  /* --- Rayons --- */
  --r-sm: 8px;
  --r-md: 12px;
  --r-lg: 18px;
  --r-pill: 999px;

  /* --- Ombres légères --- */
  --shadow-sm: 0 1px 2px rgba(16, 36, 94, 0.06);
  --shadow-md: 0 4px 16px rgba(16, 36, 94, 0.08);
  --shadow-lg: 0 12px 32px rgba(16, 36, 94, 0.12);

  --container-max: 1240px;
}

@media (prefers-color-scheme: dark) {
  :root {
    color-scheme: dark;
    --bg: #0F1224;
    --bg-tint: #171B33;
    --bg-tint-2: #1E2340;
    --ink: #F2F4FA;
    --ink-soft: #C3C8DE;
    --ink-faint: #8E93AE;
    --border: #2B3055;
    --white: #171B33;
    --heading: #9FB6FF;
  }
}

/* --- Reset minimal --- */
*, *::before, *::after { box-sizing: border-box; }
/* Le footer est toujours la dernière section (fond navy). Sur mobile,
   quand la barre d'adresse se rétracte pendant le scroll, le
   navigateur agrandit temporairement la zone visible au-delà du
   contenu réel : sans fond propre sur <html>, cette zone hérite du
   fond de <body> (blanc / très sombre selon le thème) et casse la
   continuité visuelle avec le footer. On aligne <html> sur le navy
   du footer pour que ce dépassement reste cohérent quel que soit le
   thème — cf. retour utilisateur du 10/08/2026 (espace blanc visible
   sous le footer en version mobile). */
html { background: var(--navy); -webkit-text-size-adjust: 100%; scroll-behavior: smooth; }
@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  *, *::before, *::after { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; }
}
body {
  margin: 0;
  font-family: var(--font-sans);
  font-size: var(--fs-base);
  color: var(--ink);
  background: var(--bg);
  line-height: 1.5;
  overflow-x: clip;
}
img { max-width: 100%; display: block; }
a { color: inherit; text-decoration: none; }
button { font-family: inherit; cursor: pointer; }
h1, h2, h3, h4 { margin: 0; line-height: 1.2; font-weight: 800; }
p { margin: 0; }
ul { margin: 0; padding: 0; list-style: none; }

/* Focus visible partout — accessibilité clavier (WCAG 2.1 AA) */
:focus-visible {
  outline: 3px solid var(--focus-ring);
  outline-offset: 2px;
  border-radius: var(--r-sm);
}

.container {
  max-width: var(--container-max);
  margin-inline: auto;
  padding-inline: var(--sp-4);
}
@media (min-width: 768px) { .container { padding-inline: var(--sp-8); } }

.sr-only {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}
.skip-link {
  position: absolute; left: var(--sp-4); top: -50px;
  background: var(--navy); color: #fff; padding: var(--sp-3) var(--sp-4);
  border-radius: var(--r-sm); z-index: 100; transition: top .15s ease;
}
.skip-link:focus { top: var(--sp-4); }

/* ============================= Boutons ============================= */
.btn {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--sp-2);
  font-weight: 700; font-size: var(--fs-sm); line-height: 1;
  padding: 13px 22px; border-radius: var(--r-pill); border: 2px solid transparent;
  min-height: 44px; transition: background-color .15s ease, color .15s ease, border-color .15s ease, transform .1s ease;
}
.btn:active { transform: scale(0.98); }
.btn-primary { background: var(--coral); color: #fff; }
.btn-primary:hover { background: #e8493f; }
.btn-secondary { background: var(--navy); color: #fff; }
.btn-secondary:hover { background: var(--navy-700); }
.btn-outline { background: transparent; color: var(--heading); border-color: var(--border); }
.btn-outline:hover { border-color: var(--navy); }
.btn-ghost { background: transparent; color: var(--ink-soft); }
.btn-ghost:hover { color: var(--ink); background: var(--bg-tint); }
.btn:disabled { opacity: .5; cursor: not-allowed; }
.btn-block { width: 100%; }
.btn-sm { padding: 9px 16px; font-size: var(--fs-xs); min-height: 36px; }

/* ============================= Badges / Chips ============================= */
.badge {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: var(--fs-xs); font-weight: 700; padding: 4px 10px; border-radius: var(--r-pill);
  background: var(--bg-tint-2); color: var(--heading);
}
.badge-free { background: rgba(22,184,180,.14); color: var(--turquoise-600); }
.badge-coral { background: rgba(255,90,85,.12); color: #d94641; }
.badge-yellow { background: rgba(255,189,39,.18); color: #8a5c05; }
/* Mises en avant sponsorisées : jamais dépendant de la seule couleur
   (brief §8 accessibilité) — icône + texte, contraste AA sur fond clair
   comme sombre. */
.badge-sponsored { background: #17357a; color: #fff; }
.badge-sponsored svg { flex: none; }

/* Transparence IA (brief obligations transparence) — violet volontairement
   distinct du turquoise (Gratuit), du jaune (Coup de cœur) et du navy plein
   (Sponsorisé) pour ne jamais être confondu avec eux, tout en gardant un
   contraste AA sur fond clair comme sombre (texte blanc sur #4C3B8C ≈ 6.3:1). */
.badge-ai { background: #4C3B8C; color: #fff; }
.badge-ai svg { flex: none; }

.sponsored-section { margin: var(--sp-8) 0; }
.sponsored-section__head { display: flex; align-items: baseline; gap: var(--sp-2); margin-bottom: var(--sp-4); }
.sponsored-section__head h2 { margin: 0; }
.sponsored-section__tooltip {
  position: relative; display: inline-flex; align-items: center; justify-content: center;
  width: 18px; height: 18px; border-radius: 50%; background: var(--bg-tint-2); color: var(--ink-soft);
  font-size: 11px; font-weight: 700; cursor: help;
}
.sponsored-section__tooltip:hover .sponsored-section__tooltip-text,
.sponsored-section__tooltip:focus-visible .sponsored-section__tooltip-text { display: block; }
.sponsored-section__tooltip-text {
  display: none; position: absolute; z-index: 5; bottom: 130%; left: 50%; transform: translateX(-50%);
  width: 240px; padding: 10px 12px; border-radius: var(--r-md); background: var(--navy-900); color: #fff;
  font-size: var(--fs-xs); font-weight: 400; line-height: 1.4; text-align: left;
}

.chip {
  display: inline-flex; align-items: center; gap: var(--sp-2);
  padding: 10px 16px; border-radius: var(--r-pill); border: 1.5px solid var(--border);
  background: var(--white); color: var(--ink); font-size: var(--fs-sm); font-weight: 600;
  white-space: nowrap; min-height: 44px;
}
.chip:hover { border-color: var(--turquoise); }
.chip[aria-pressed="true"] { background: var(--navy); border-color: var(--navy); color: #fff; }

/* ============================= Header ============================= */
.site-header {
  border-bottom: 1px solid var(--border);
  background: var(--white);
  position: sticky; top: 0; z-index: 40;
}
.site-header__bar {
  display: flex; align-items: center; justify-content: space-between;
  gap: var(--sp-4); padding-block: var(--sp-3);
}
.site-header__logo img { height: 34px; width: auto; }
.site-header__nav { display: none; align-items: center; gap: var(--sp-6); }
.site-header__nav a { font-weight: 600; font-size: var(--fs-sm); color: var(--ink-soft); }
.site-header__nav a:hover, .site-header__nav a[aria-current="page"] { color: var(--heading); }
/* Contrôle de localisation du bandeau (29/08/2026, "comme sur iOS/Android")
   — pastille avec pin + libellé, même esprit que le bouton de localisation
   natif des apps (barre du haut de l'accueil). */
.site-header__location {
  display: inline-flex; align-items: center; gap: 7px; padding: 8px 14px;
  border: 1px solid var(--border); border-radius: var(--r-pill);
  color: var(--heading); font-weight: 700; font-size: var(--fs-sm); background: var(--bg-tint);
  max-width: 220px;
}
.site-header__location svg { flex: 0 0 auto; color: var(--turquoise-600); }
.site-header__location span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.site-header__location:hover { border-color: rgba(22, 184, 180, .55); background: var(--bg-tint-2); }
.site-header__actions { display: flex; align-items: center; gap: var(--sp-2); }
.icon-btn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 44px; height: 44px; border-radius: var(--r-pill); color: var(--ink-soft);
  border: 1px solid transparent; position: relative;
}
.icon-btn:hover { background: var(--bg-tint); color: var(--heading); }
.icon-btn .count {
  position: absolute; top: 2px; right: 2px; background: var(--coral); color: #fff;
  font-size: 10px; font-weight: 700; min-width: 16px; height: 16px; border-radius: 999px;
  display: flex; align-items: center; justify-content: center; padding-inline: 3px;
}
/* Badge de profil connecté (demande du 28/08/2026) : initiales dans un
   cercle plein plutôt que la silhouette générique, pour que le header
   confirme d'un coup d'œil "vous êtes connecté(e)" sans avoir à cliquer —
   même logique de couleur que .btn-secondary (navy plein, texte blanc). */
.site-header__avatar {
  display: grid; place-items: center; width: 32px; height: 32px; border-radius: 50%;
  background: var(--navy); color: #fff; font-size: .78rem; font-weight: 800; letter-spacing: .01em;
}
.icon-btn--avatar:hover .site-header__avatar { background: var(--navy-700); }
.hamburger { display: inline-flex; }
@media (min-width: 900px) {
  .site-header__nav { display: flex; }
  .hamburger { display: none; }
}

/* Menu mobile plein écran */
.mobile-nav { display: none; }
.mobile-nav.is-open {
  display: block; position: fixed; inset: 0; background: var(--bg); z-index: 60;
  padding: var(--sp-4); overflow-y: auto;
}
.mobile-nav__top { display: flex; justify-content: space-between; align-items: center; margin-bottom: var(--sp-6); }
.mobile-nav a {
  display: block; padding: var(--sp-4) 0; font-size: var(--fs-md); font-weight: 700;
  border-bottom: 1px solid var(--border); color: var(--ink);
}
/* 2e déclencheur de la popup de localisation (30/08/2026, "ne s'affiche pas
   sur web taille mobile") — même look que les liens .mobile-nav a
   ci-dessus, en <button> plutôt qu'un lien puisqu'il ouvre une popup. */
.mobile-nav__location {
  display: flex; align-items: center; gap: 10px; width: 100%; padding: var(--sp-4) 0;
  border: 0; border-bottom: 1px solid var(--border); background: none;
  color: var(--ink); font-size: var(--fs-md); font-weight: 700; text-align: left; cursor: pointer;
}
.mobile-nav__location svg { flex: 0 0 auto; color: var(--turquoise-600); }
.mobile-nav__location span { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }

/* ============================= Hero / recherche ============================= */
.hero {
  background: linear-gradient(180deg, var(--bg-tint) 0%, var(--bg) 100%);
  padding-block: var(--sp-10) var(--sp-4);
}
.hero__title {
  font-size: var(--fs-2xl); color: var(--heading); text-align: center; max-width: 720px; margin-inline: auto;
}
@media (min-width: 768px) { .hero__title { font-size: var(--fs-3xl); } }
.hero__subtitle {
  text-align: center; color: var(--ink-soft); font-size: var(--fs-md);
  max-width: 560px; margin: var(--sp-3) auto 0;
}
.search-panel {
  max-width: 880px; margin: var(--sp-8) auto 0; background: var(--white);
  border: 1px solid var(--border); border-radius: var(--r-lg); box-shadow: var(--shadow-lg);
  padding: var(--sp-3);
}
.search-panel form {
  display: grid; grid-template-columns: 1fr; gap: var(--sp-2);
}
@media (min-width: 700px) {
  .search-panel form { grid-template-columns: minmax(0,1fr) auto minmax(0,1fr) auto; align-items: center; }
  .search-panel .search-divider { display:block; border-left: 1px solid var(--border); height: 32px; }
}
.search-field { display: flex; align-items: center; gap: var(--sp-2); padding: var(--sp-3) var(--sp-4); }
.search-field input {
  border: none; outline: none; font-size: var(--fs-base); width: 100%; background: transparent; color: var(--ink);
}
.search-field input::placeholder { color: var(--ink-faint); }

/* Autocomplétion géographique — régions, départements et villes. */
.location-autocomplete { position: relative; overflow: visible; }
.location-suggestions {
  position: absolute; z-index: 80; top: calc(100% + 10px); left: 0;
  width: min(420px, calc(100vw - 32px)); max-height: min(420px, 55vh);
  padding: 7px; overflow-y: auto; overscroll-behavior: contain;
  border: 1px solid var(--border); border-radius: 18px;
  background: var(--white); box-shadow: 0 18px 48px rgba(16, 36, 94, .18);
}
.location-suggestions[hidden] { display: none; }
.location-suggestions::before {
  content: ''; position: absolute; top: -6px; left: 30px; width: 12px; height: 12px;
  border-top: 1px solid var(--border); border-left: 1px solid var(--border);
  background: var(--white); transform: rotate(45deg);
}
.location-suggestion {
  position: relative; display: grid; grid-template-columns: 38px minmax(0, 1fr);
  gap: 11px; align-items: center; width: 100%; padding: 10px 11px;
  border: 0; border-radius: 13px; background: transparent; color: var(--ink);
  text-align: left; cursor: pointer;
}
.location-suggestion:hover,
.location-suggestion.is-active { background: var(--bg-tint); }
.location-suggestion__icon {
  display: inline-grid; width: 38px; height: 38px; place-items: center;
  border-radius: 12px; background: rgba(22, 184, 180, .12);
  color: var(--turquoise-700); font-size: .72rem; font-weight: 900;
}
.location-suggestion__copy { min-width: 0; }
.location-suggestion__label {
  display: block; overflow: hidden; color: var(--heading); font-size: var(--fs-sm);
  font-weight: 800; text-overflow: ellipsis; white-space: nowrap;
}
.location-suggestion__context {
  display: block; margin-top: 2px; overflow: hidden; color: var(--ink-soft);
  font-size: var(--fs-xs); text-overflow: ellipsis; white-space: nowrap;
}
.location-suggestions__state {
  padding: 14px 12px; color: var(--ink-soft); font-size: var(--fs-sm); text-align: center;
}
@media (max-width: 699px) {
  .location-suggestions { right: 0; left: 0; width: 100%; max-height: 46vh; }
}
/* Popup de localisation (29/08/2026, "problème d'affichage") : la largeur
   par défaut (jusqu'à 420px) dépassait celle de la popup elle-même
   (min(380px, 92vw)), donnant l'impression que la liste flottait hors de
   la carte plutôt que d'être un menu déroulant du champ. Recalée sur la
   largeur exacte du champ dans ce contexte précis. */
.location-modal__dialog .location-suggestions { width: 100%; max-width: 100%; }

.time-shortcuts {
  display: flex; justify-content: flex-start; gap: var(--sp-2); overflow-x: auto;
  width: 100%; padding: var(--sp-6) var(--sp-4) 0; scrollbar-width: none;
}
.time-shortcuts::-webkit-scrollbar { display: none; }
@media (min-width: 768px) {
  .time-shortcuts { justify-content: center; }
}

/* Badges App Store / Google Play du hero (16/09/2026, cf. site.home) —
   discrets sous les pastilles de raccourcis, pour ne jamais concurrencer
   visuellement le formulaire de recherche juste au-dessus (placement
   inspiré de wondday.com, en plus sobre : leur app EST le produit, ici
   c'est un canal secondaire). */
.hero-app-badges {
  display: flex; flex-direction: column; align-items: center; gap: var(--sp-2);
  margin-top: var(--sp-6); text-align: center;
}
.hero-app-badges__label { color: var(--ink-faint); font-size: var(--fs-xs); }
.hero-app-badges__row { display: flex; flex-wrap: wrap; justify-content: center; gap: var(--sp-3); }
/* Pastille "liquid glass" + icône seule (16/09/2026, retour utilisateur) —
   PAS le badge officiel noir rectangulaire imbriqué dans un fond blanc
   (version précédente rejetée), un bouton personnalisé : verre dépoli
   translucide (fond semi-transparent + backdrop-filter blur, liseré et
   reflet clairs façon "Liquid Glass"), logo Apple / triangle Google Play
   en couleur, texte qui suit le thème clair/sombre (var(--ink)), cf.
   site.home pour la provenance des tracés SVG. Repli sans blur pour les
   navigateurs qui ne le supportent pas (Firefox < 103) : le fond
   semi-transparent reste lisible seul, cf. @supports plus bas. */
.app-badge {
  display: inline-flex; align-items: center; gap: 10px;
  background: rgba(255,255,255,.55);
  border: 1px solid rgba(255,255,255,.6);
  border-radius: var(--r-pill); padding: 8px 18px;
  box-shadow: 0 8px 26px rgba(4,15,50,.14), inset 0 1px 0 rgba(255,255,255,.7);
}
@supports (backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px)) {
  .app-badge { backdrop-filter: blur(20px) saturate(180%); -webkit-backdrop-filter: blur(20px) saturate(180%); }
}
@media (prefers-color-scheme: dark) {
  .app-badge {
    background: rgba(255,255,255,.10); border-color: rgba(255,255,255,.22);
    box-shadow: 0 8px 26px rgba(0,0,0,.35), inset 0 1px 0 rgba(255,255,255,.16);
  }
}
.app-badge__icon { width: 22px; height: 22px; flex: 0 0 auto; }
.app-badge__icon--apple { fill: var(--ink); }
.app-badge__text { display: grid; text-align: left; line-height: 1.2; }
.app-badge__text small { color: var(--ink-soft); font-size: 10px; }
.app-badge__text strong { color: var(--ink); font-size: var(--fs-sm); font-weight: 600; }
@media (min-width: 768px) {
  .hero-app-badges { margin-top: var(--sp-6); gap: var(--sp-3); }
  .hero-app-badges__label { font-size: var(--fs-sm); }
  .hero-app-badges__row { gap: var(--sp-4); }
  .app-badge { padding: 10px 22px; gap: 12px; }
  .app-badge__icon { width: 26px; height: 26px; }
  .app-badge__text small { font-size: 11px; }
  .app-badge__text strong { font-size: var(--fs-md); }
}

/* ==================== Localisation par défaut de l'accueil (29/08/2026) ==================== */
.location-prompt {
  padding-block: var(--sp-3); background: var(--bg-tint-2); border-bottom: 1px solid var(--border);
}
.location-prompt__inner {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-3);
}
.location-prompt__inner p { flex: 1 1 240px; min-width: 0; color: var(--ink); font-size: var(--fs-sm); font-weight: 600; }
.location-prompt__icon { font-size: 1.2rem; }
.location-prompt__actions { display: flex; flex: 0 0 auto; gap: var(--sp-2); }

/* Popup de localisation (29/08/2026, "comme sur android") — remplace
   l'ancien panneau en dropdown, désormais ouvert depuis le bandeau de
   navigation sur toutes les pages plutôt que juste sur l'accueil, cf.
   site.partials.header. Même structure que .filter-drawer (backdrop +
   panneau), mais centré comme une vraie popup plutôt qu'un tiroir latéral. */
.location-modal { position: fixed; inset: 0; z-index: 90; display: none; }
.location-modal.is-open { display: block; }
.location-modal__backdrop { position: absolute; inset: 0; background: rgba(16, 36, 94, .4); }
.location-modal__dialog {
  position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%);
  width: min(520px, 92vw); max-height: 88vh; overflow-y: auto;
  padding: var(--sp-5); border-radius: var(--r-lg); background: var(--white);
  box-shadow: 0 24px 60px rgba(16, 36, 94, .25);
}
.location-modal__head { display: flex; justify-content: flex-end; }
/* Copie du contenu de l'écran natif (30/08/2026, "meme card que ios/android") :
   accroche corail, titre, sous-titre — même hiérarchie que
   LocationOnboardingActivity avant la carte. */
.location-modal__eyebrow {
  margin-top: -4px; color: var(--coral); font-size: .72rem; font-weight: 800;
  letter-spacing: .09em; text-transform: uppercase;
}
.location-modal__dialog h2 { margin-top: 5px; color: var(--heading); font-size: 1.35rem; }
.location-modal__subtitle { margin-top: 6px; color: var(--ink-soft); font-size: var(--fs-sm); line-height: 1.45; }
/* Carte "récap" (30/08/2026, "comme sur l'app") — remplace la ligne texte
   "Actuellement : ..." par la même carte que recapCard dans
   LocationOnboardingView.swift : fond teinté doux, tuile blanche très
   arrondie (PAS un cercle) avec icône, accroche + zone en gras. */
.location-recap-card {
  display: flex; align-items: center; gap: var(--sp-3); margin-top: var(--sp-4);
  padding: 14px; border-radius: var(--r-lg); background: rgba(22, 184, 180, .09);
}
.location-recap-card__icon {
  display: grid; flex: 0 0 auto; place-items: center; width: 44px; height: 44px;
  border-radius: 16px; background: var(--white); color: var(--turquoise-600);
  box-shadow: 0 4px 10px rgba(16, 36, 94, .07);
}
.location-recap-card__copy { display: flex; min-width: 0; flex-direction: column; gap: 2px; }
.location-recap-card__eyebrow {
  color: var(--turquoise-600); font-size: .68rem; font-weight: 800; letter-spacing: .08em; text-transform: uppercase;
}
.location-recap-card__text { overflow: hidden; color: var(--heading); font-size: 1rem; font-weight: 800; text-overflow: ellipsis; white-space: nowrap; }
.home-location-control__option {
  display: flex; align-items: center; gap: 9px; width: 100%; padding: 10px 12px;
  border: 1px solid transparent; border-radius: var(--r-md); background: none;
  color: var(--ink); font-size: .85rem; font-weight: 650; text-align: left; cursor: pointer;
}
.home-location-control__option:hover { background: var(--bg-tint); }
.home-location-control__option svg { flex: 0 0 auto; color: var(--turquoise-600); }
/* "Utiliser ma position" (30/08/2026, "modernise, je veux qu'il ressemble
   ios") — miroir du bouton contour pleine largeur de LocationOnboardingView.swift
   (RoundedRectangle(cornerRadius: 26).stroke(BorderStrong)), distinct du
   simple lien texte "Toute la France" juste en dessous. */
.home-location-control__gps {
  display: flex; align-items: center; justify-content: center; gap: 9px; width: 100%;
  min-height: 52px; padding: 0 16px; border: 1.5px solid var(--border); border-radius: var(--r-pill);
  background: none; color: var(--heading); font-size: .92rem; font-weight: 700; cursor: pointer;
  transition: border-color .18s ease, background .18s ease;
}
.home-location-control__gps:hover { border-color: rgba(22, 184, 180, .55); background: var(--bg-tint); }
.home-location-control__gps svg { flex: 0 0 auto; color: var(--turquoise-600); }
.home-location-control__footer { display: flex; flex-direction: column; gap: var(--sp-2); margin-top: var(--sp-4); }
/* BUG RÉEL CORRIGÉ (30/08/2026, "agrandi le champs texte, décalage avec le
   bouton Valider") : sans align-items, le champ (52px, cf. plus bas) et le
   bouton .btn-sm (36px, cf. règle .btn-sm générale) n'étaient pas alignés
   verticalement — un `stretch` implicite étirait le bouton à la hauteur du
   champ au lieu de le centrer dessus. */
.home-location-control__search { display: flex; align-items: center; gap: 10px; margin: var(--sp-4) 0 0; }
.home-location-control__search .btn { flex: 0 0 auto; min-height: 52px; padding-inline: 20px; }
/* BUG RÉEL CORRIGÉ (30/08/2026, "trop d'écart" entre le champ et le bouton
   Valider) : "flex: 1" ci-dessous n'avait aucun effet — l'input n'est pas
   un enfant direct de .home-location-control__search (flex), mais niché
   dans .location-autocomplete (déjà flex:1 en inline, cf. header.blade.php)
   un niveau plus bas. Sans width:100%, l'input gardait sa largeur
   intrinsèque, laissant tout l'espace du wrapper vide à sa droite. */
.home-location-control__search input {
  width: 100%; min-width: 0; padding: 0 16px; min-height: 52px; border: 1.5px solid var(--border);
  border-radius: var(--r-md); background: var(--bg); color: var(--ink); font: inherit; font-size: 1rem;
}
.home-location-control__search input:focus { outline: 0; border-color: var(--turquoise); box-shadow: 0 0 0 4px rgba(22, 184, 180, .12); }
.home-location-control__error { margin-top: var(--sp-2); color: var(--coral); font-size: .78rem; }

/* Carte interactive (30/08/2026, "creer meme card que ios/android") — mêmes
   tracés SVG et mêmes couleurs que FranceMapView.swift/.java (cf. site.js),
   chargés depuis public/geodata/france_geo.json (copie exacte des apps). */
.location-modal__map-head { display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-3); margin-top: var(--sp-5); }
.location-modal__map-head h3 { color: var(--heading); font-size: 1.02rem; }
.location-modal__map-mode { color: var(--turquoise-600); font-size: .7rem; font-weight: 800; letter-spacing: .06em; text-transform: uppercase; }
/* BUG RÉEL CORRIGÉ (30/08/2026, "carte pas bien visible") : fond
   --bg-tint (#F6F8FC) et remplissage des formes trop proches en luminosité
   — passés à un fond blanc plein (comme Color("Surface") côté app) et un
   remplissage plus soutenu (#C7D2E8 au lieu de #DCE3F0). */
.location-map { position: relative; margin-top: var(--sp-3); padding: var(--sp-3); border: 1px solid var(--border); border-radius: var(--r-lg); background: var(--white); }
.location-map__svg { display: block; width: 100%; height: 260px; }
.location-map__state { margin: var(--sp-4) 0; color: var(--ink-faint); font-size: var(--fs-sm); text-align: center; }
.location-map__state:empty { display: none; }
/* Sous la carte (30/08/2026, "affiche bouton Découvrir les activités comme
   sur ios") — miroir du HStack "Retour aux régions" / "Voir toute la
   région" de LocationOnboardingView.swift, visible seulement région ouverte. */
.location-map__region-actions { display: flex; justify-content: center; gap: var(--sp-4); margin-top: var(--sp-3); }
.location-map__region-actions[hidden] { display: none; }
.location-map__back {
  display: flex; align-items: center; gap: 6px; border: 0; background: none;
  color: var(--turquoise-600); font-size: .82rem; font-weight: 700; cursor: pointer;
}
.location-map__whole-region {
  border: 0; background: none; color: var(--heading); font-size: .82rem; font-weight: 700; cursor: pointer;
}
/* Bandeau de confirmation (30/08/2026) — collé en bas de la popup (celle-ci
   n'étant pas plein écran, contrairement à l'app) plutôt que fixé à l'écran ;
   masqué tant qu'aucune sélection n'a été faite sur la carte. */
.location-modal__confirm-bar {
  position: sticky; bottom: calc(var(--sp-5) * -1); margin: var(--sp-5) calc(var(--sp-5) * -1) calc(var(--sp-5) * -1);
  padding: var(--sp-4) var(--sp-5); background: var(--white); border-top: 1px solid var(--border);
}
.location-modal__confirm-bar[hidden] { display: none; }
.location-modal__confirm-bar .btn { width: 100%; min-height: 52px; }

/* ============================= Rails / sections ============================= */
.section { padding-block: var(--sp-10); }
.section--tint { background: var(--bg-tint); }
.section__head {
  display: flex; align-items: baseline; justify-content: space-between; gap: var(--sp-4);
  min-width: 0; margin-bottom: var(--sp-5);
}
.section__head > * { min-width: 0; }
.section__title { font-size: var(--fs-xl); color: var(--heading); }
.section__link { font-weight: 700; font-size: var(--fs-sm); color: var(--turquoise-600); white-space: nowrap; }

.rail {
  display: flex; gap: var(--sp-4); overflow-x: auto; padding-bottom: var(--sp-2);
  scroll-snap-type: x proximity; -webkit-overflow-scrolling: touch;
}
.rail > * { scroll-snap-align: start; flex: 0 0 auto; width: 270px; }
.rail::-webkit-scrollbar { height: 6px; }
.rail::-webkit-scrollbar-thumb { background: var(--border); border-radius: 999px; }

.grid { display: grid; gap: var(--sp-5); grid-template-columns: 1fr; }
@media (min-width: 600px) { .grid { grid-template-columns: repeat(2, 1fr); } }
@media (min-width: 900px) { .grid { grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 1180px) { .grid { grid-template-columns: repeat(4, 1fr); } }

/* ============================= Cartes catégories visuelles ============================= */
.category-visual-grid {
  display: flex; gap: var(--sp-4); width: 100%; max-width: 100%; overflow-x: auto;
  padding: 2px 2px var(--sp-3); scroll-snap-type: x mandatory; scroll-padding-inline: 2px;
  overscroll-behavior-inline: contain; -webkit-overflow-scrolling: touch; scrollbar-width: none;
}
.category-visual-grid::-webkit-scrollbar { display: none; }
.category-carousel { position: relative; }
.category-carousel__arrow {
  position: absolute; top: 50%; z-index: 6; display: none; align-items: center; justify-content: center;
  width: 48px; height: 48px; padding: 0; border: 2px solid var(--navy); border-radius: 50%;
  background: rgba(255,255,255,.96); color: var(--navy); box-shadow: 0 8px 24px rgba(16,36,94,.2);
  transform: translateY(-50%); transition: color .18s ease, border-color .18s ease, transform .18s ease, opacity .18s ease;
}
.category-carousel__arrow:hover { color: var(--turquoise-600); border-color: var(--turquoise); transform: translateY(-50%) scale(1.06); }
.category-carousel__arrow:active { transform: translateY(-50%) scale(.96); }
.category-carousel__arrow svg { width: 24px; height: 24px; fill: none; stroke: currentColor; stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; }
.category-carousel__arrow--prev { left: 10px; }
.category-carousel__arrow--next { right: 10px; }
.category-carousel__arrow[hidden] { display: none !important; }
@media (min-width: 768px) {
  .category-carousel__arrow { display: inline-flex; }
}
.category-card {
  position: relative; display: block; flex: 0 0 min(82vw, 330px); min-width: 0; min-height: 0; aspect-ratio: 16 / 9; overflow: hidden; scroll-snap-align: start;
  border: 1px solid rgba(14, 165, 168, .12); border-radius: 22px;
  background: linear-gradient(145deg, color-mix(in srgb, var(--category-color) 22%, #eef6fa), #0b1f4d);
  box-shadow: 0 12px 30px rgba(11, 31, 77, .10); isolation: isolate; transform: translateZ(0);
  transition: transform .25s ease, box-shadow .25s ease, border-color .25s ease;
}
.category-card:hover { border-color: rgba(14, 165, 168, .45); box-shadow: 0 20px 44px rgba(11, 31, 77, .18); transform: translateY(-5px); }
.category-card:focus-visible { outline: 3px solid var(--turquoise); outline-offset: 4px; }
.category-card__image, .category-card__fallback { position: absolute; inset: 0; width: 100%; height: 100%; }
.category-card__image { object-fit: cover; transition: transform .55s cubic-bezier(.2,.75,.25,1); }
.category-card:hover .category-card__image { transform: scale(1.055); }
.category-card__fallback {
  display: grid; place-items: center; color: #fff; font-size: 52px;
  background: linear-gradient(145deg, color-mix(in srgb, var(--category-color) 80%, #fff), #0b1f4d);
}
.category-card__fallback img { width: 56px; height: 56px; object-fit: contain; filter: brightness(0) invert(1); }
.category-card__shade {
  position: absolute; inset: 0; z-index: 1;
  background: linear-gradient(180deg, rgba(7,18,45,.03) 25%, rgba(7,18,45,.84) 100%), linear-gradient(90deg, rgba(7,18,45,.22), transparent 66%);
}
.category-card__content {
  position: absolute; inset: auto var(--sp-5) var(--sp-5); z-index: 2; display: flex;
  flex-direction: column; align-items: flex-start; color: #fff; text-align: left;
}
.category-card__eyebrow { margin-bottom: 6px; font-size: .72rem; font-weight: 800; letter-spacing: .12em; text-transform: uppercase; opacity: .82; }
.category-card__label { color: #fff; font-size: clamp(1.25rem, 2vw, 1.55rem); font-weight: 850; line-height: 1.12; text-wrap: balance; text-shadow: 0 2px 10px rgba(0,0,0,.24); }
.category-card__cta {
  display: inline-flex; align-items: center; gap: 5px; max-height: 0; margin-top: 0; overflow: hidden;
  font-size: .82rem; font-weight: 750; opacity: 0; transform: translateY(6px);
  transition: max-height .25s ease, margin .25s ease, opacity .25s ease, transform .25s ease;
}
.category-card__cta svg { width: 17px; fill: none; stroke: currentColor; stroke-width: 2.2; }
.category-card:hover .category-card__cta, .category-card:focus-visible .category-card__cta { max-height: 28px; margin-top: 9px; opacity: 1; transform: translateY(0); }
@media (max-width: 599px) {
  .section { padding-block: var(--sp-8); }
  .section__head { flex-direction: column; align-items: flex-start; gap: var(--sp-2); margin-bottom: var(--sp-4); }
  .section__title { max-width: 100%; font-size: clamp(1.45rem, 7vw, 1.75rem); overflow-wrap: anywhere; }
  .section__link { max-width: 100%; white-space: normal; }
  .category-visual-grid { gap: var(--sp-3); padding-bottom: var(--sp-3); }
  .category-card { min-height: 160px; border-radius: var(--r-lg); }
  .category-card__content { inset: auto var(--sp-4) var(--sp-4); }
  .category-card__eyebrow { margin-bottom: 4px; font-size: .65rem; }
  .category-card__label { font-size: clamp(1.1rem, 5.5vw, 1.35rem); }
}
@media (min-width: 600px) {
  .category-card { flex-basis: 360px; aspect-ratio: 16 / 10; }
}
@media (min-width: 1024px) {
  .category-visual-grid { gap: var(--sp-5); cursor: grab; }
  .category-visual-grid:active { cursor: grabbing; }
  .category-card { flex: 0 0 380px; aspect-ratio: 16 / 10; }
}
@media (prefers-reduced-motion: reduce) { .category-card, .category-card__image, .category-card__cta { transition: none; } }

.category-card__icon {
  width: 52px; height: 52px; border-radius: var(--r-pill); display: flex;
  align-items: center; justify-content: center; font-size: 24px; background: var(--bg-tint-2);
}

/* ============================= Carte activité ============================= */
.activity-card {
  position: relative; display: block; background: var(--white); border: 1px solid var(--border);
  border-radius: var(--r-lg); overflow: hidden; box-shadow: var(--shadow-sm);
  transition: box-shadow .15s ease, transform .15s ease;
}
.activity-card:hover { box-shadow: var(--shadow-md); transform: translateY(-2px); }
.activity-card__media { display: block; position: relative; aspect-ratio: 4 / 3; background: var(--bg-tint-2); }
.activity-card__media img { width: 100%; height: 100%; object-fit: cover; }
.activity-card__badges { position: absolute; top: var(--sp-2); left: var(--sp-2); display: flex; gap: 6px; flex-wrap: wrap; }
/* Contraste sur vignette (28/08/2026) : .badge-free/.badge-yellow sont en
   dosage clair/translucide (14-18% d'opacité), pensé pour un fond de page
   uni — posé directement sur une photo de la carte, ce fond devient
   illisible selon la photo (signalé : "card Gratuit n'est pas visible").
   Repris ici en plein, même logique d'accessibilité que .badge-sponsored/
   .badge-ai juste au-dessus, sans toucher aux autres usages de ces classes
   (fiche activité, badge "vérifié" organisateur, annulation gratuite) qui,
   eux, restent sur fond de page uni où la version translucide reste lisible. */
/* Teintes assombries (pas var(--turquoise-600)/un simple #cf8a00) : testées
   pour atteindre >=4.5:1 avec du blanc à cette taille de texte (12px gras,
   ne compte pas comme "grand texte" AA qui se contenterait de 3:1). */
.activity-card__badges .badge-free { background: #0e7d7a; color: #fff; }
.activity-card__badges .badge-yellow { background: #8f5c00; color: #fff; }
/* Coin bas-gauche : libre sur toutes les cartes (favoris en haut-droite,
   Gratuit/Coup de cœur/Sponsorisé en haut-gauche) — ne masque jamais le
   sujet principal de l'image, contrairement à un badge centré. */
.activity-card__ai-badge { position: absolute; bottom: var(--sp-2); left: var(--sp-2); }
.activity-card__fav {
  position: absolute; top: var(--sp-2); right: var(--sp-2);
  width: 36px; height: 36px; border-radius: 999px; background: rgba(255,255,255,.92);
  display: flex; align-items: center; justify-content: center; color: var(--coral);
  box-shadow: var(--shadow-sm);
}
/* padding-top majoré de 13px (moitié basse du badge, cf.
   .activity-card__category ci-dessous — position:absolute, ancré dans
   .activity-card__media, n'occupe plus aucun espace dans le flux normal). */
.activity-card__body { padding: calc(var(--sp-4) + 13px) var(--sp-4) var(--sp-4); }
/* Badge coloré (demande du 09/09/2026, "comme sur iOS avec leur code
   couleur") — remplace l'ancien texte gris uniforme, qui ne permettait pas
   d'identifier une catégorie d'un coup d'œil (miroir ActivityCardStyle.swift
   / ActivityCardBinder.java : couleur réelle de la catégorie, texte blanc,
   pastille pleine).
   À CHEVAL entre la photo et le fond blanc, CENTRÉ sur la ligne de
   séparation (retour utilisateur du 09/09/2026, répété trois fois : les
   approches en marge négative — calculée sur une hauteur supposée, puis
   via transform:translateY(-50%) sur un frère en flux normal — n'ont
   visiblement pas produit l'effet attendu en rendu réel. Positionnement en
   absolute DANS .activity-card__media (déjà position:relative, cf.
   activity-card.blade.php : le badge est maintenant un ENFANT du lien
   photo, plus un frère) : bottom:-16px avec une hauteur figée de 32px
   place le bord haut du badge à exactement +16px au-dessus du bord bas de
   la photo — un calcul non ambigu, sans dépendance au flux normal. */
/* Réduit (retour utilisateur du 09/09/2026, "un peu trop grand") — hauteur
   26px (au lieu de 32px) + bottom:-13px (toujours exactement la moitié,
   même calcul que précédemment) pour rester centré sur la ligne malgré la
   taille réduite. */
.activity-card__category {
  position: absolute; z-index: 1; left: 12px; bottom: -13px;
  display: inline-flex; align-items: center; justify-content: center;
  height: 26px; padding: 0 12px;
  border-radius: var(--r-pill); background: var(--category-color, var(--turquoise-600));
  color: #fff; font-size: 11px; font-weight: 800; line-height: 1;
}
.activity-card__title {
  font-size: var(--fs-base); font-weight: 800; color: var(--ink); margin-top: 4px;
  display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden;
}
.activity-card__meta { display: flex; align-items: center; gap: var(--sp-2); margin-top: var(--sp-2); font-size: var(--fs-xs); color: var(--ink-soft); flex-wrap: wrap; }
.activity-card__meta .dot::before { content: "·"; margin-inline: 2px; }
.activity-card__footer { display: flex; align-items: center; justify-content: space-between; margin-top: var(--sp-3); }
.rating { display: inline-flex; align-items: center; gap: 4px; font-size: var(--fs-xs); font-weight: 700; color: var(--ink); }
.rating__star { color: var(--yellow); }
.price-tag { font-weight: 800; color: var(--heading); font-size: var(--fs-sm); }

/* ============================= Trust section ============================= */
.trust-grid { display: grid; gap: var(--sp-6); grid-template-columns: 1fr; }
@media (min-width: 800px) { .trust-grid { grid-template-columns: repeat(3, 1fr); } }
.trust-item { display: flex; flex-direction: column; gap: var(--sp-2); }
.trust-item__icon {
  width: 48px; height: 48px; border-radius: var(--r-md); background: rgba(22,184,180,.12);
  color: var(--turquoise-600); display: flex; align-items: center; justify-content: center; font-size: 22px;
}
.trust-item h3 { font-size: var(--fs-md); color: var(--heading); }
.trust-item p { color: var(--ink-soft); font-size: var(--fs-sm); }

/* ============================= Footer ============================= */
.site-footer { background: var(--navy); color: #dfe4f5; padding-block: var(--sp-12) var(--sp-6); margin-top: var(--sp-16); }
.site-footer a { color: #c3cae8; font-size: var(--fs-sm); }
.site-footer a:hover { color: #fff; }
.footer-grid { display: grid; gap: var(--sp-8); grid-template-columns: repeat(2, 1fr); }
@media (min-width: 700px) { .footer-grid { grid-template-columns: repeat(4, 1fr); } }
.footer-col h3 { font-size: var(--fs-sm); color: #fff; margin-bottom: var(--sp-3); }
.footer-col ul { display: flex; flex-direction: column; gap: var(--sp-2); }
/* Sélecteur de langue — cf. site.partials.footer / App\Http\Middleware\SetLocale. */
.footer-locale {
  display: flex; align-items: center; justify-content: center; gap: var(--sp-5);
  width: fit-content; max-width: 100%; margin: var(--sp-8) auto 0; padding: 10px 12px;
  border: 1px solid rgba(255,255,255,.15); border-radius: var(--r-pill);
  background: linear-gradient(135deg, rgba(255,255,255,.09), rgba(255,255,255,.045));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.07), 0 12px 30px rgba(4,15,50,.14);
}
.footer-locale__intro { display: flex; align-items: center; gap: var(--sp-3); min-width: 0; }
.footer-locale__icon {
  flex: 0 0 auto; width: 40px; height: 40px; border-radius: 50%;
  display: grid; place-items: center; color: #7ee3df;
  background: rgba(22,184,180,.16); border: 1px solid rgba(126,227,223,.22);
}
.footer-locale__icon svg { width: 20px; height: 20px; }
.footer-locale__copy { display: grid; gap: 3px; }
.footer-locale__copy strong { color: #fff; font-size: var(--fs-sm); line-height: 1.25; }
.footer-locale__copy > span { max-width: 230px; color: #aeb7d8; font-size: .68rem; line-height: 1.35; }
.footer-locale__options {
  display: grid; grid-template-columns: repeat(2, minmax(126px, 1fr)); gap: 4px;
  padding: 4px; border: 1px solid rgba(255,255,255,.06); border-radius: var(--r-pill); background: rgba(5,17,57,.38);
}
.site-footer .footer-locale__link {
  display: inline-flex; align-items: center; justify-content: center; gap: var(--sp-2);
  min-height: 40px; padding: 7px 12px; border-radius: var(--r-pill);
  border: 1px solid transparent; color: #d8def1; font-size: var(--fs-xs); font-weight: 750;
  transition: color .18s ease, background-color .18s ease, border-color .18s ease, transform .18s ease;
}
/* Puce drapeau SVG (modernisation web mobile du 09/09/2026, remplace
   l'emoji — cf. footer.blade.php) : coin arrondi + fin liseré, rendu
   identique sur tous les systèmes contrairement à un emoji. */
.footer-locale__flag {
  flex: 0 0 auto; display: inline-flex; width: 22px; height: 15px;
  border-radius: 3px; overflow: hidden; box-shadow: 0 0 0 1px rgba(255,255,255,.18);
}
.footer-locale__flag svg { width: 100%; height: 100%; display: block; }
.footer-locale__check {
  width: 18px; height: 18px; padding: 2px; border-radius: 999px;
  color: var(--navy); background: #fff;
}
.site-footer .footer-locale__link:hover {
  border-color: rgba(255,255,255,.18); background: rgba(255,255,255,.08); color: #fff;
  transform: translateY(-1px);
}
.site-footer .footer-locale__link.is-active {
  background: var(--turquoise-600); border-color: rgba(255,255,255,.18); color: #fff;
  box-shadow: 0 6px 18px rgba(0,0,0,.16);
}
.site-footer .footer-locale__link:focus-visible { outline-color: #fff; outline-offset: 3px; }

@media (max-width: 699px) {
  .footer-locale { align-items: stretch; flex-direction: column; width: 100%; border-radius: 20px; padding: var(--sp-4); }
  .footer-locale__options { width: 100%; }
  .footer-locale__copy > span { max-width: none; }
}

/* Modernisation web mobile du 09/09/2026 — en 1 colonne (empilé), un
   conteneur en pilule complète (border-radius:var(--r-pill), un rayon de
   999px) donnait une forme presque ovale, disproportionnée pour un bloc
   aussi haut : radius ramené à var(--r-lg) (18px), plus sobre. Boutons
   agrandis (48px, cible tactile confortable) avec un peu plus d'air entre
   eux (gap) pour bien les distinguer une fois empilés. */
@media (max-width: 430px) {
  .footer-locale__options { grid-template-columns: 1fr; gap: 6px; border-radius: var(--r-lg); }
  .site-footer .footer-locale__link { min-height: 48px; border-radius: var(--r-md); justify-content: flex-start; padding-inline: var(--sp-4); }
}

.footer-bottom {
  display: flex; flex-wrap: wrap; gap: var(--sp-3); justify-content: space-between; align-items: center;
  margin-top: var(--sp-6); padding-top: var(--sp-6); border-top: 1px solid rgba(255,255,255,.12);
  font-size: var(--fs-xs); color: #9aa3c9;
}

/* Sélecteur de langue dans le tiroir mobile (cf. .mobile-nav) */
.mobile-nav__locale {
  display: flex; align-items: center; justify-content: space-between;
  margin-top: var(--sp-4); padding-top: var(--sp-4); border-top: 1px solid var(--border);
  font-size: var(--fs-sm); color: var(--ink-soft);
}
.mobile-nav__locale-links { display: flex; gap: var(--sp-2); }
.mobile-nav__locale-links a {
  padding: 4px 10px; border-radius: var(--r-pill); border: 1px solid var(--border);
  font-size: var(--fs-xs); font-weight: 700; color: var(--ink-soft);
}
.mobile-nav__locale-links a[aria-current="true"] { background: var(--turquoise-600); border-color: var(--turquoise-600); color: #fff; }

/* ============================= États ============================= */
.skeleton {
  background: linear-gradient(90deg, var(--bg-tint) 25%, var(--bg-tint-2) 37%, var(--bg-tint) 63%);
  background-size: 400% 100%; animation: skeleton-loading 1.4s ease infinite; border-radius: var(--r-md);
}
@keyframes skeleton-loading { 0% { background-position: 100% 50%; } 100% { background-position: 0 50%; } }
@media (prefers-reduced-motion: reduce) { .skeleton { animation: none; background: var(--bg-tint-2); } }

.empty-state, .error-state {
  text-align: center; padding: var(--sp-12) var(--sp-4); color: var(--ink-soft);
}
.empty-state__icon, .error-state__icon { font-size: 40px; margin-bottom: var(--sp-3); }
.empty-state h3, .error-state h3 { color: var(--heading); font-size: var(--fs-lg); margin-bottom: var(--sp-2); }

/* ============================= Formulaires / filtres ============================= */
.field label { display: block; font-size: var(--fs-sm); font-weight: 700; margin-bottom: var(--sp-1); color: var(--ink); }
.field input[type="text"], .field input[type="number"], .field input[type="date"], .field input[type="tel"], .field input[type="url"], .field input[type="email"], .field input[type="file"], .field select, .field textarea {
  width: 100%; padding: 10px 14px; border: 1.5px solid var(--border); border-radius: var(--r-sm);
  font-size: var(--fs-sm); background: var(--white); color: var(--ink); min-height: 44px;
  font-family: inherit;
}
.field textarea { min-height: 120px; resize: vertical; }
.field input:focus, .field select:focus, .field textarea:focus { border-color: var(--turquoise); }
.field { margin-bottom: var(--sp-4); }
.field small[role="alert"] { display: block; color: var(--coral); font-size: var(--fs-xs); margin-top: var(--sp-1); }

/* Champ avec icône (ex. lien de réservation externe, publier une activité,
   06/09/2026) — bogue réel corrigé au passage : input[type="url"] était
   absent du sélecteur .field ci-dessus, donc rendu SANS AUCUN style
   (input brut du navigateur, sans bordure arrondie ni hauteur alignée) —
   seul champ de tout le formulaire dans ce cas, juste en dessous du champ
   téléphone parfaitement stylé.
   Icône mal centrée verticalement corrigée (retour utilisateur) : `top:50%`
   était calculé par rapport à .field--icon, qui contient AUSSI le label
   au-dessus de l'input — 50% de (label + input) n'est pas le centre de
   l'input seul. Un wrapper dédié autour du SEUL input+icône règle ça. */
.field--icon-input { position: relative; }
.field--icon-input input { padding-left: 42px !important; }
.field--icon__icon {
  position: absolute; left: 14px; top: 50%; transform: translateY(-50%);
  width: 18px; height: 18px; color: var(--ink-faint); pointer-events: none;
}
.field--icon-input input:focus ~ .field--icon__icon { color: var(--turquoise); }
.publish-activity-photo-count { display: block; color: var(--ink-soft); font-size: var(--fs-xs); margin-top: var(--sp-1); }
.publish-activity-photo-count--ok { color: var(--success); font-weight: 600; }

/* Résumé d'erreurs en haut du formulaire de publication (particulier) */
.publish-activity-form-errors {
  margin-bottom: var(--sp-5); padding: var(--sp-4); border: 1px solid rgba(255, 90, 85, .3);
  border-radius: var(--r-md); background: rgba(255, 90, 85, .07); color: var(--ink);
}
.publish-activity-form-errors strong { display: block; color: var(--coral); font-size: var(--fs-sm); }
.publish-activity-form-errors p { margin: 4px 0 0; font-size: var(--fs-sm); color: var(--ink-soft); }
.publish-activity-form-errors ul { margin: var(--sp-2) 0 0; padding-left: 1.2em; font-size: var(--fs-sm); }
.publish-activity-form-errors li { margin-top: 2px; }

/* Photos — une carte par fichier (/compte/publier-activite/creer) */
.publish-activity-photos { margin: var(--sp-5) 0; padding: var(--sp-4); border: 1.5px solid var(--border); border-radius: var(--r-md); }
.publish-activity-photos legend { padding: 0 6px; font-weight: 700; font-size: var(--fs-sm); color: var(--ink); }
.publish-activity-photos__list {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(130px, 1fr)); gap: var(--sp-3); margin-top: var(--sp-3);
}
.publish-activity-photos__card { display: flex; flex-direction: column; gap: 6px; }
.publish-activity-photos__dropzone {
  position: relative; display: block; aspect-ratio: 1; border: 1.5px dashed var(--border); border-radius: var(--r-sm);
  background: var(--bg-tint); cursor: pointer; overflow: hidden; transition: border-color .18s ease, background .18s ease;
}
.publish-activity-photos__dropzone:hover { border-color: var(--turquoise); background: rgba(22, 184, 180, .06); }
.publish-activity-photos__dropzone input[type="file"] {
  position: absolute; inset: 0; width: 100%; height: 100%; opacity: 0; cursor: pointer;
}
.publish-activity-photos__placeholder {
  display: flex; height: 100%; flex-direction: column; align-items: center; justify-content: center; gap: 6px;
  color: var(--ink-soft); font-size: var(--fs-xs); text-align: center; padding: var(--sp-2); pointer-events: none;
}
.publish-activity-photos__preview { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; pointer-events: none; }
.publish-activity-photos__remove {
  border: none; background: none; color: var(--coral); font-size: var(--fs-xs); font-weight: 600; cursor: pointer; padding: 0;
}
.publish-activity-photos__remove:hover { text-decoration: underline; }

/* Avis — zone d'ajout de photos (glisser-déposer + aperçu, cf. site.js
   [data-review-photos] ; sans JS l'<input multiple> natif reste utilisable). */
.auth-field__label-text { display: block; margin-bottom: 7px; color: var(--ink); font-size: .86rem; font-weight: 750; }
.review-photos { margin-top: 4px; }
.review-photos__drop {
  position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center;
  gap: 4px; padding: 20px 16px; text-align: center; cursor: pointer;
  border: 1.5px dashed var(--border); border-radius: var(--r-md); background: var(--bg-tint);
  transition: border-color .18s ease, background .18s ease;
}
.review-photos__drop:hover,
.review-photos__drop:focus-within,
.review-photos.is-dragover .review-photos__drop { border-color: var(--turquoise); background: rgba(22, 184, 180, .07); }
.review-photos__drop input[type="file"] {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}
.review-photos__icon { width: 26px; height: 26px; color: var(--turquoise); }
.review-photos__title { font-weight: 650; font-size: var(--fs-sm); color: var(--ink); }
.review-photos__hint { font-size: var(--fs-xs); color: var(--ink-soft); }
.review-photos__grid {
  list-style: none; margin: 10px 0 0; padding: 0;
  display: grid; grid-template-columns: repeat(auto-fill, minmax(84px, 1fr)); gap: 8px;
}
.review-photos__item {
  position: relative; aspect-ratio: 1; overflow: hidden;
  border: 1px solid var(--border); border-radius: var(--r-sm); background: var(--bg-tint);
}
.review-photos__item img { width: 100%; height: 100%; object-fit: cover; display: block; }
.review-photos__remove {
  position: absolute; top: 4px; right: 4px; width: 22px; height: 22px;
  display: grid; place-items: center; border: 0; border-radius: 999px; cursor: pointer;
  background: rgba(20, 23, 43, .62); color: #fff; font-size: 14px; line-height: 1;
  transition: background .15s ease;
}
.review-photos__remove:hover { background: rgba(20, 23, 43, .85); }
.review-photos.is-full .review-photos__drop { display: none; }

/* Date(s) de l'événement + tarifs (/compte/publier-activite/creer) */
.publish-activity-dates, .publish-activity-prices {
  margin: var(--sp-5) 0; padding: var(--sp-4); border: 1.5px solid var(--border); border-radius: var(--r-md);
}
.publish-activity-dates legend, .publish-activity-prices legend {
  padding: 0 6px; font-weight: 700; font-size: var(--fs-sm); color: var(--ink);
}
.publish-activity-dates legend span, .publish-activity-prices legend span { font-weight: 400; color: var(--ink-soft); }
.publish-activity-dates__mode { display: flex; flex-wrap: wrap; gap: var(--sp-3); margin: var(--sp-2) 0 var(--sp-4); }
.publish-activity-dates__mode-option {
  display: flex; align-items: center; gap: 8px; padding: 10px 16px;
  border: 1.5px solid var(--border); border-radius: var(--r-pill); cursor: pointer; font-size: var(--fs-sm);
}
.publish-activity-dates__mode-option:has(input:checked) { border-color: var(--turquoise); background: var(--bg-tint); font-weight: 600; }
.publish-activity-dates__list { display: flex; flex-direction: column; gap: var(--sp-2); }
.publish-activity-dates__row { display: flex; align-items: center; gap: var(--sp-2); }
.publish-activity-dates__row input { flex: 1; }
.publish-activity-dates__row input.is-duplicate { border-color: var(--coral); }
.publish-activity-dates__remove {
  display: grid; flex: 0 0 auto; place-items: center; width: 40px; height: 40px; border-radius: var(--r-sm);
  border: 1.5px solid var(--border); background: var(--white); color: var(--coral); font-size: 1.3rem; line-height: 1; cursor: pointer;
}
.publish-activity-dates__remove:hover { background: rgba(255, 90, 85, .08); }
.publish-activity-dates__hint { display: block; color: var(--coral); font-size: var(--fs-xs); margin-top: var(--sp-2); }
.publish-activity-dates__range { display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: var(--sp-3); }
.publish-activity-dates__range label { display: block; font-size: var(--fs-sm); font-weight: 700; margin-bottom: var(--sp-1); color: var(--ink); }
.publish-activity-dates__range input { width: 100%; padding: 10px 14px; border: 1.5px solid var(--border); border-radius: var(--r-sm); font-size: var(--fs-sm); min-height: 44px; }
.publish-activity-prices__hint { margin: 4px 0 var(--sp-3); color: var(--ink-soft); font-size: var(--fs-sm); }
.publish-activity-prices__header {
  display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--sp-3);
}
.publish-activity-prices__header legend { padding: 0; }
.publish-activity-prices__header .account-toggle--compact {
  flex: 0 0 auto; min-height: auto; width: auto; padding: 8px 14px; gap: var(--sp-2);
}
.publish-activity-prices__header .account-toggle--compact .account-toggle__copy strong { font-size: var(--fs-xs); white-space: nowrap; }
.publish-activity-prices__header .account-toggle--compact .account-toggle__switch { width: 38px; height: 22px; }
.publish-activity-prices__header .account-toggle--compact .account-toggle__switch::after { width: 16px; height: 16px; }
.publish-activity-prices__header .account-toggle--compact > input:checked + .account-toggle__switch::after { transform: translateX(16px); }
.publish-activity-prices__list { display: flex; flex-direction: column; gap: var(--sp-4); }
.publish-activity-prices__card { padding: var(--sp-3); border: 1.5px solid var(--border); border-radius: var(--r-sm); background: var(--bg-tint); }
.publish-activity-prices__grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(120px, 1fr)); gap: var(--sp-3); }
.publish-activity-prices__grid .field { margin-bottom: 0; }
.publish-activity-prices__remove {
  margin-top: var(--sp-2); border: none; background: none; color: var(--coral); font-size: var(--fs-xs);
  font-weight: 600; cursor: pointer; padding: 0;
}
.publish-activity-prices__remove:hover { text-decoration: underline; }
.account-field--error input, .account-field--error select, .account-field--error textarea { border-color: var(--coral); }
.checkbox-row { display: flex; align-items: center; gap: var(--sp-2); min-height: 44px; }
.checkbox-row input { width: 20px; height: 20px; }

/* Mise en page desktop de "Publier une activité"/"Modifier mon activité"
   (redesign du 09/09/2026, retour utilisateur : "trop vide sur le côté")
   — formulaire élargi (720px -> 1180px, cf. create.blade.php/edit.blade.php)
   + colonne latérale sticky (aperçu en direct + conseils,
   _preview-sidebar.blade.php). En dessous de 940px, la colonne repasse
   sous le formulaire plutôt qu'à côté (l'aperçu perd son intérêt one-page
   sur un écran étroit, mieux vaut le retour au défilement simple). */
/* Même bogue et même correctif déjà appliqués et éprouvés en production
   sur .activity-layout > aside (fiche activité, cf. plus bas dans ce
   fichier, section "align-items:start empêchait .activity-layout > aside
   de s'étirer...") — repris ici À L'IDENTIQUE plutôt que de retirer
   align-items:start du grid entier (tenté d'abord, retour utilisateur du
   09/09/2026 : "quand je scroll l'aperçu ne s'affiche pas correctement" —
   insuffisant à lui seul). align-self:stretch DIRECTEMENT sur l'aside :
   sans elle, la colonne ne mesure que la hauteur de son propre contenu (2
   petites cartes), pas celle de la ligne de grille entière — position:
   sticky n'a alors de marge pour "suivre" le scroll que sur cette hauteur
   courte, puis se détache bien avant la fin du long formulaire à gauche. */
.publish-activity-layout { display: grid; grid-template-columns: 1fr 360px; gap: var(--sp-6); align-items: start; }
.publish-activity-layout > aside { align-self: stretch; }

/* Champs courts groupés 2 par ligne (catégorie/organisateur, adresse/code
   postal, téléphone/lien) plutôt qu'empilés pleine largeur — c'est ce qui
   récupère le plus directement l'espace laissé vide en desktop, sans nuire
   à la lisibilité mobile (repasse à 1 colonne sous 599px, cf. media query). */
.field-row { display: grid; grid-template-columns: 1fr 1fr; gap: var(--sp-5); }
.field-row .field { margin-bottom: var(--sp-4); }

/* top:90px (pas var(--sp-6), 24px) — retour utilisateur du 09/09/2026,
   "je veux que ça reste fixe quand je scroll" : .site-header est LUI-MÊME
   position:sticky;top:0 (cf. règle plus haut) et fait ~73px de haut sur
   desktop (barre de recherche 48px + padding vertical 12px*2 + bordure) —
   avec un top de seulement 24px, la colonne se collait dès 24px du haut du
   viewport, donc EN PARTIE SOUS le bandeau (z-index:40, au-dessus), qui la
   recouvrait visuellement pendant tout le scroll. 90px = hauteur du
   bandeau + une marge de respiration, pour rester entièrement visible
   juste en dessous de lui. */
.publish-activity-preview-col { position: sticky; top: 90px; display: flex; flex-direction: column; gap: var(--sp-5); }

.publish-activity-preview-card {
  border: 1px solid var(--border); border-radius: var(--r-lg); background: var(--white); overflow: hidden;
  box-shadow: 0 1px 2px rgba(16, 36, 94, .04), 0 16px 40px rgba(16, 36, 94, .09);
}
.publish-activity-preview-card__label {
  padding: var(--sp-4) var(--sp-5) 0; font-size: var(--fs-xs); font-weight: 800; letter-spacing: .06em;
  text-transform: uppercase; color: var(--ink-faint);
}
.publish-activity-preview-card__image {
  margin: var(--sp-3) var(--sp-5) 0; height: 150px; border-radius: var(--r-md);
  background: linear-gradient(135deg, #dfe9f5, #cdeeec); background-size: cover; background-position: center;
}
.publish-activity-preview-card__body { padding: var(--sp-3) var(--sp-5) var(--sp-5); }
.publish-activity-preview-card__title {
  font-weight: 800; font-size: var(--fs-md); color: var(--heading); margin-bottom: var(--sp-1);
  overflow: hidden; text-overflow: ellipsis; white-space: nowrap;
}
.publish-activity-preview-card__meta { font-size: var(--fs-sm); color: var(--ink-faint); margin-bottom: var(--sp-3); }
.publish-activity-preview-card__footer { display: flex; align-items: center; justify-content: space-between; font-size: var(--fs-sm); }
.publish-activity-preview-card__footer span:first-child { color: var(--ink-faint); }
.publish-activity-preview-card__footer span:last-child { font-weight: 800; color: var(--heading); }

.publish-activity-tips-card {
  border: 1px solid var(--border); border-radius: var(--r-lg); background: var(--white); padding: var(--sp-5);
  box-shadow: 0 1px 2px rgba(16, 36, 94, .04), 0 16px 40px rgba(16, 36, 94, .09);
}
.publish-activity-tips-card__title {
  font-size: var(--fs-xs); font-weight: 800; letter-spacing: .06em; text-transform: uppercase;
  color: var(--ink-faint); margin-bottom: var(--sp-4);
}
.publish-activity-tips-card__list { list-style: none; margin: 0; padding: 0; display: flex; flex-direction: column; gap: var(--sp-4); }
.publish-activity-tips-card__list li { display: flex; align-items: flex-start; gap: var(--sp-3); font-size: var(--fs-sm); color: var(--ink-soft); line-height: 1.4; }
.publish-activity-tips-card__list svg {
  flex: 0 0 auto; width: 20px; height: 20px; padding: 4px; box-sizing: border-box; border-radius: 50%;
  background: rgba(22, 184, 180, .12); color: var(--turquoise-600);
}

@media (max-width: 940px) {
  .publish-activity-layout { grid-template-columns: 1fr; }
  .publish-activity-preview-col { position: static; }
}
@media (max-width: 599px) {
  .field-row { grid-template-columns: 1fr; gap: 0; }
}

/* Publication d'activité par un particulier (/compte/publier-activite) */
.publish-audience-form__choices { display: flex; flex-direction: column; gap: var(--sp-3); border: none; margin: 0; padding: 0; }
.publish-audience-form__choice {
  display: flex; align-items: flex-start; gap: var(--sp-3); padding: var(--sp-4);
  border: 1.5px solid var(--border); border-radius: var(--r-md); cursor: pointer; margin-bottom: var(--sp-4);
}
.publish-audience-form__choice:has(input:checked) { border-color: var(--turquoise); background: var(--bg-tint); }
.publish-audience-form__choice input { margin-top: 4px; width: 18px; height: 18px; flex-shrink: 0; }
.publish-audience-form__choice span { display: flex; flex-direction: column; gap: 2px; }
.publish-audience-form__choice small { color: var(--ink-soft); font-size: var(--fs-sm); }
.publish-activity-city-results {
  position: absolute; z-index: 10; margin-top: 4px; width: 100%; background: var(--white);
  border: 1.5px solid var(--border); border-radius: var(--r-sm); box-shadow: var(--shadow-md, 0 4px 12px rgba(0,0,0,.1));
  max-height: 240px; overflow-y: auto;
}
.publish-activity-city-results__option {
  display: block; width: 100%; text-align: left; padding: var(--sp-2) var(--sp-3); border: none;
  background: none; font-size: var(--fs-sm); cursor: pointer; color: var(--ink);
}
.publish-activity-city-results__option:hover { background: var(--bg-tint); }
.publish-activity-city-results__empty { padding: var(--sp-2) var(--sp-3); font-size: var(--fs-sm); color: var(--ink-soft); margin: 0; }

/* Mise en avant sponsorisée pour un particulier (/compte/mes-annonces/{id}/booster) */
.boost-page__eyebrow {
  display: inline-flex; align-items: center; gap: 6px; padding: 6px 14px; border-radius: var(--r-pill);
  background: var(--bg-tint-2); color: var(--turquoise-600); font-size: var(--fs-xs); font-weight: 700;
  text-transform: uppercase; letter-spacing: .04em; margin-bottom: var(--sp-4);
}
.boost-activity-card {
  display: flex; align-items: center; gap: var(--sp-3); padding: var(--sp-3) var(--sp-4);
  border: 1px solid var(--border); border-radius: var(--r-md); background: var(--bg-tint); margin-bottom: var(--sp-6);
}
.boost-activity-card__thumb { width: 52px; height: 52px; border-radius: var(--r-sm); object-fit: cover; flex-shrink: 0; background: var(--bg-tint-2); }
.boost-activity-card__meta { min-width: 0; }
.boost-activity-card__meta strong { display: block; font-size: var(--fs-base); color: var(--heading); }
.boost-activity-card__meta span { display: block; font-size: var(--fs-sm); color: var(--ink-soft); margin-top: 2px; }

.boost-section { border: 1px solid var(--border); border-radius: var(--r-lg); background: var(--bg); padding: var(--sp-5); margin-bottom: var(--sp-5); }
.boost-section__header { display: flex; align-items: center; gap: var(--sp-3); margin-bottom: var(--sp-4); }
.boost-section__badge {
  width: 36px; height: 36px; border-radius: 50%; display: flex; align-items: center; justify-content: center;
  background: var(--bg-tint-2); color: var(--turquoise-600); flex-shrink: 0;
}
.boost-section__badge svg { display: block; }
/* Vrai bug de l'icône non centrée : ce sélecteur ciblait auparavant TOUT
   <span> descendant de .boost-section__header — y compris le badge
   lui-même (.boost-section__badge est un <span>), plus spécifique que
   .boost-section__badge{display:flex} (0,1,1 > 0,1,0) et placé après en
   cascade, donc gagnant : le badge repassait en display:block, l'icône SVG
   retombant alors en flux normal (coin haut-gauche) au lieu d'être centrée
   par le flexbox. Scopé maintenant à .boost-section__title (le conteneur
   titre/sous-titre uniquement), jamais le badge.
   La correction display:block du commentaire ci-dessus reste utile pour
   l'alignement fin (espace fantôme d'un <svg> inline) mais n'était pas la
   cause du décalage visible. */
.boost-section__title strong { display: block; font-size: var(--fs-md); color: var(--heading); }
.boost-section__title span { display: block; font-size: var(--fs-xs); color: var(--ink-faint); margin-top: 2px; }

.boost-radio-grid { display: grid; gap: var(--sp-3); grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); }
.boost-radio-card {
  position: relative; display: flex; flex-direction: column; gap: 4px; padding: var(--sp-4);
  border: 1.5px solid var(--border); border-radius: var(--r-md); cursor: pointer;
}
.boost-radio-card:has(input:checked) { border-color: var(--turquoise); background: var(--bg-tint); }
.boost-radio-card input { position: absolute; top: var(--sp-3); right: var(--sp-3); width: 18px; height: 18px; }
.boost-radio-card strong { font-size: var(--fs-base); color: var(--heading); padding-right: var(--sp-6); }
.boost-radio-card small { color: var(--ink-soft); font-size: var(--fs-sm); }
.boost-radio-card__price { color: var(--turquoise-600); font-weight: 700; font-size: var(--fs-lg); }

.boost-not-eligible { text-align: center; padding: var(--sp-6) var(--sp-4); }
.boost-not-eligible__icon { font-size: 40px; }
.boost-not-eligible ul { text-align: left; display: inline-block; margin-top: var(--sp-3); padding-left: 1.2em; color: var(--ink-soft); font-size: var(--fs-sm); }

/* Bloc conditions (checkbox + texte + liens) — délibérément SANS
   flex-direction:column sur le texte (contrairement à .publish-audience-form__choice,
   pensé pour un simple titre+sous-titre) : un flex-container column casse
   chaque nœud de texte/lien inline en une ligne séparée dès que la case est
   suivie de plusieurs liens dans la même phrase. */
.boost-terms {
  display: flex; align-items: flex-start; gap: var(--sp-3); padding: var(--sp-4);
  border: 1.5px solid var(--border); border-radius: var(--r-md); margin-bottom: var(--sp-5); cursor: pointer;
}
.boost-terms:has(input:checked) { border-color: var(--turquoise); background: var(--bg-tint); }
.boost-terms input { margin-top: 3px; width: 18px; height: 18px; flex-shrink: 0; accent-color: var(--turquoise); }
.boost-terms__text { color: var(--ink-soft); font-size: var(--fs-sm); line-height: 1.5; }
.boost-terms__text a { color: var(--turquoise-600); text-decoration: underline; }

.filter-drawer {
  position: fixed; inset: 0; z-index: 70; display: none;
}
.filter-drawer.is-open { display: block; }
.filter-drawer__backdrop { position: absolute; inset: 0; background: rgba(16,36,94,.4); }
.filter-drawer__panel {
  position: absolute; right: 0; top: 0; bottom: 0; width: min(400px, 92vw);
  background: var(--bg); padding: var(--sp-5); overflow-y: auto;
  box-shadow: var(--shadow-lg);
}

/* ============================= Utilitaires ============================= */
.visually-truncate { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.stack { display: flex; flex-direction: column; }
.cluster { display: flex; flex-wrap: wrap; align-items: center; }

/* Liste à puces "Points forts" / "Ce qui est inclus" — icône et texte sur
   la même ligne, respiration généreuse entre les items (repère GetYourGuide). */
.check-list { display: flex; flex-direction: column; gap: var(--sp-5); }
.check-list__item { display: flex; flex-direction: row; align-items: flex-start; gap: var(--sp-3); }
.check-list__icon { flex: 0 0 auto; margin-top: 3px; }
.check-list__icon svg { display: block; }
.check-list__icon--include { color: var(--turquoise-600); }
.check-list__icon--exclude { color: var(--ink-soft); }
.check-list__text { color: var(--heading); font-size: var(--fs-md); line-height: 1.55; }
.gap-1 { gap: var(--sp-1); } .gap-2 { gap: var(--sp-2); } .gap-3 { gap: var(--sp-3); } .gap-4 { gap: var(--sp-4); }
.mt-2 { margin-top: var(--sp-2); } .mt-4 { margin-top: var(--sp-4); } .mt-5 { margin-top: var(--sp-5); } .mt-6 { margin-top: var(--sp-6); } .mt-8 { margin-top: var(--sp-8); }
.text-muted { color: var(--ink-soft); }
.text-center { text-align: center; }

/* ============================= Contenu éditorial de la fiche ============================= */
.activity-content-section { min-width: 0; }
.activity-content-heading {
  display: flex; align-items: center; gap: var(--sp-3);
}
.activity-content-heading--compact { align-items: center; }
.activity-content-heading__icon {
  display: grid; flex: 0 0 auto; place-items: center; width: 46px; height: 46px;
  border-radius: 15px; background: linear-gradient(145deg, rgba(22,184,180,.17), rgba(22,184,180,.07));
  color: var(--turquoise-600);
}
.activity-content-heading__eyebrow,
.activity-status-card__eyebrow {
  margin-bottom: 3px; color: var(--turquoise-600); font-size: .69rem;
  font-weight: 850; letter-spacing: .09em; text-transform: uppercase;
}
.activity-content-heading .section__title,
.activity-status-card .section__title { font-size: var(--fs-lg); }

.activity-highlight-grid {
  display: grid; grid-template-columns: 1fr; gap: var(--sp-3);
}
.activity-highlight-card {
  display: grid; grid-template-columns: 34px minmax(0, 1fr); align-items: center; gap: var(--sp-3);
  min-height: 70px; padding: var(--sp-3) var(--sp-4); border: 1px solid var(--border);
  border-radius: 16px; background: linear-gradient(145deg, var(--white), var(--bg-tint));
  color: var(--heading); font-size: .94rem; font-weight: 720; line-height: 1.35;
  box-shadow: var(--shadow-sm); transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease;
}
.activity-highlight-card:hover { border-color: rgba(22,184,180,.48); box-shadow: var(--shadow-md); transform: translateY(-2px); }
.activity-highlight-card__icon {
  display: grid; place-items: center; width: 34px; height: 34px; border-radius: 11px;
  background: rgba(22,184,180,.13); color: var(--turquoise-600);
}

.activity-amenity-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-2); }
.activity-amenity-card {
  display: flex; min-width: 0; align-items: center; gap: 10px; min-height: 54px;
  padding: 10px 12px; border: 1px solid var(--border); border-radius: 14px; background: var(--white);
  color: var(--ink); font-size: var(--fs-sm); font-weight: 680;
}
.activity-amenity-card__icon {
  display: grid; flex: 0 0 auto; place-items: center; width: 32px; height: 32px;
  border-radius: 10px; background: var(--bg-tint-2); color: var(--heading);
}

.activity-status-card {
  display: grid; grid-template-columns: 46px minmax(0, 1fr); gap: var(--sp-4);
  padding: var(--sp-5); overflow: hidden; border: 1px solid rgba(22,184,180,.25);
  border-radius: 20px; background:
    radial-gradient(circle at 100% 0, rgba(22,184,180,.15), transparent 36%),
    linear-gradient(145deg, var(--bg-tint), var(--white));
}
.activity-status-card__icon {
  display: grid; place-items: center; width: 46px; height: 46px; border-radius: 15px;
  background: var(--navy); color: #fff; box-shadow: 0 8px 20px rgba(16,36,94,.18);
}
.activity-status-card__lead { margin-top: var(--sp-3); font-weight: 750; }
.activity-status-card__note,
.activity-disclosure__note { margin-top: var(--sp-3); color: var(--ink-faint); font-size: var(--fs-xs); }
.activity-alert-list { display: grid; gap: var(--sp-2); }
.activity-alert-list li {
  display: flex; align-items: flex-start; gap: var(--sp-2); padding: 10px 12px;
  border-radius: 12px; background: rgba(255,189,39,.14); color: var(--ink-soft); font-size: var(--fs-sm);
}
.activity-date-chips { display: flex; gap: var(--sp-2); overflow-x: auto; padding-bottom: 2px; scrollbar-width: none; }
.activity-date-chips::-webkit-scrollbar { display: none; }

.activity-disclosure {
  overflow: hidden; border: 1px solid var(--border); border-radius: 18px;
  background: var(--white); box-shadow: var(--shadow-sm);
  transition: border-color .18s ease, box-shadow .18s ease;
}
.activity-disclosure[open] { border-color: rgba(22,184,180,.4); box-shadow: var(--shadow-md); }
.activity-disclosure--story {
  border-color: rgba(16,36,94,.14);
  background: linear-gradient(145deg, var(--white), color-mix(in srgb, var(--bg-tint) 76%, var(--white)));
}
.activity-disclosure__summary {
  display: flex; align-items: center; gap: var(--sp-3); min-height: 76px;
  padding: var(--sp-4); list-style: none; cursor: pointer; user-select: none;
}
.activity-disclosure__summary::-webkit-details-marker { display: none; }
.activity-disclosure__summary::marker { display: none; content: ""; }
.activity-disclosure__summary:hover { background: color-mix(in srgb, var(--bg-tint) 70%, transparent); }
.activity-disclosure__summary-icon {
  display: grid; flex: 0 0 auto; place-items: center; width: 42px; height: 42px;
  border-radius: 13px; background: var(--bg-tint-2); color: var(--heading);
}
.activity-disclosure__summary-copy { display: flex; min-width: 0; flex: 1; flex-direction: column; }
.activity-disclosure__summary-copy strong { color: var(--heading); font-size: .98rem; }
.activity-disclosure__summary-copy small { margin-top: 3px; color: var(--ink-faint); font-size: .76rem; line-height: 1.35; }
.activity-disclosure__chevron {
  display: grid; flex: 0 0 auto; place-items: center; width: 34px; height: 34px;
  border-radius: 50%; background: var(--bg-tint); color: var(--ink-soft);
  transition: transform .22s ease, background-color .18s ease;
}
.activity-disclosure[open] .activity-disclosure__chevron { background: rgba(22,184,180,.13); color: var(--turquoise-600); transform: rotate(180deg); }
.activity-disclosure__content {
  padding: 0 var(--sp-4) var(--sp-5); border-top: 1px solid var(--border);
  animation: activity-reveal .22s ease both;
}
.activity-prose { color: var(--ink-soft); font-size: .96rem; line-height: 1.75; }
.activity-prose p { padding-top: var(--sp-5); white-space: pre-line; }
@keyframes activity-reveal { from { opacity: 0; transform: translateY(-5px); } to { opacity: 1; transform: translateY(0); } }

.activity-hours-list,
.activity-price-list { padding-top: var(--sp-2); }
.activity-hours-list li,
.activity-price-list li {
  display: flex; align-items: flex-start; justify-content: space-between; gap: var(--sp-4);
  padding: 12px 2px; border-bottom: 1px solid var(--border); color: var(--ink-soft); font-size: var(--fs-sm);
}
.activity-hours-list li:last-child,
.activity-price-list li:last-child { border-bottom: 0; }
.activity-hours-list strong { min-width: 86px; color: var(--ink); }
.activity-hours-list__closed { color: var(--ink-faint); }
.activity-price-list > li > span:first-child { max-width: 65%; color: var(--ink); }
.activity-price-list__values { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 6px; }
.activity-price-list__tier { display: flex; flex-direction: column; align-items: center; gap: 2px; }
.activity-price-list__tier strong {
  padding: 5px 9px; border-radius: var(--r-pill); background: var(--bg-tint-2);
  color: var(--heading); white-space: nowrap;
}
.activity-price-list__tier-age { font-size: var(--fs-xs); color: var(--ink-faint); white-space: nowrap; }

.activity-inclusion-grid { display: grid; grid-template-columns: 1fr; gap: var(--sp-3); padding-top: var(--sp-4); }
.activity-inclusion-card { padding: var(--sp-4); border-radius: 15px; }
.activity-inclusion-card--yes { background: rgba(22,184,180,.08); }
.activity-inclusion-card--no { background: var(--bg-tint); }
.activity-inclusion-card h3 { margin-bottom: var(--sp-3); color: var(--heading); font-size: var(--fs-sm); }
.activity-inclusion-card .check-list { gap: var(--sp-3); }
.activity-inclusion-card .check-list__text { color: var(--ink-soft); font-size: var(--fs-sm); line-height: 1.45; }

.activity-faq-section { min-width: 0; }
.activity-faq-list { overflow: hidden; border: 1px solid var(--border); border-radius: 18px; background: var(--white); }
.activity-faq-item { border-bottom: 1px solid var(--border); }
.activity-faq-item:last-child { border-bottom: 0; }
.activity-faq-item > summary {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-4);
  min-height: 62px; padding: 15px var(--sp-4); list-style: none; cursor: pointer;
  color: var(--heading); font-size: .93rem; font-weight: 750;
}
.activity-faq-item > summary::-webkit-details-marker { display: none; }
.activity-faq-item > summary::marker { display: none; content: ""; }
.activity-faq-item > summary:hover { background: var(--bg-tint); }
.activity-faq-item__plus {
  position: relative; flex: 0 0 auto; width: 28px; height: 28px; border-radius: 50%;
  background: var(--bg-tint-2); transition: background-color .18s ease, transform .2s ease;
}
.activity-faq-item__plus::before,
.activity-faq-item__plus::after {
  content: ""; position: absolute; left: 50%; top: 50%; width: 12px; height: 2px;
  border-radius: 99px; background: var(--heading); transform: translate(-50%, -50%);
}
.activity-faq-item__plus::after { transform: translate(-50%, -50%) rotate(90deg); transition: transform .2s ease; }
.activity-faq-item[open] .activity-faq-item__plus { background: rgba(22,184,180,.14); transform: rotate(180deg); }
.activity-faq-item[open] .activity-faq-item__plus::after { transform: translate(-50%, -50%) rotate(0); }
.activity-faq-item__answer {
  padding: 0 var(--sp-4) var(--sp-4); color: var(--ink-soft); font-size: var(--fs-sm); line-height: 1.65;
  animation: activity-reveal .2s ease both;
}
.activity-faq-item__answer ul { display: grid; gap: var(--sp-2); }
.activity-faq-item__answer li { position: relative; padding-left: 17px; }
.activity-faq-item__answer li::before {
  content: ""; position: absolute; left: 1px; top: .72em; width: 6px; height: 6px;
  border-radius: 50%; background: var(--turquoise);
}

@media (min-width: 620px) {
  .activity-highlight-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .activity-amenity-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .activity-inclusion-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 520px) {
  .activity-status-card { grid-template-columns: 38px minmax(0, 1fr); gap: var(--sp-3); padding: var(--sp-4); border-radius: 17px; }
  .activity-status-card__icon { width: 38px; height: 38px; border-radius: 12px; }
  .activity-disclosure__summary { min-height: 70px; padding: 13px var(--sp-3); }
  .activity-disclosure__summary-icon { width: 38px; height: 38px; }
  .activity-disclosure__content { padding-inline: var(--sp-3); }
  .activity-amenity-grid { grid-template-columns: 1fr; }
  .activity-price-list > li > span:first-child { max-width: 58%; }
}

/* ============================= Fiche activité ============================= */
/* Sur mobile : titre seul, empilé (les actions rapides restent cachées,
   cf. .activity-hero__quick-actions plus bas — sur l'image sur ce format). */
.activity-hero__top { display: block; }
.activity-hero__heading { display: block; }
/* Favoris/partager en lien texte à droite du titre — masqués par défaut
   (mobile : les mêmes actions existent déjà en superposition sur l'image),
   activés en flex à partir de 900px (cf. media query plus bas). */
.activity-hero__quick-actions { display: none; }
.activity-hero__quick-action {
  display: inline-flex; align-items: center; gap: 6px;
  background: none; border: 0; padding: 0;
  color: var(--heading); font-size: var(--fs-sm); font-weight: 600;
  text-decoration: underline; text-underline-offset: 2px; white-space: nowrap;
}
.activity-hero__quick-action:hover { color: var(--turquoise-600); }
.activity-hero__quick-action[aria-pressed="true"] { color: var(--coral); }
/* Couleur de la catégorie (demande du 09/09/2026, "applique le même code
   couleur du catégorie dans détail activité" — même badge que les cartes,
   cf. .activity-card__category) — background:var(--navy) fixe jusqu'ici,
   sans lien avec la vraie couleur de la catégorie. --category-color est
   toujours posée en style inline par show.blade.php (repli #0EA5A8, même
   valeur que les cartes) ; var(--navy) ne sert donc que de garde-fou si ce
   badge était un jour réutilisé ailleurs sans cette variable. Le badge
   "Sponsorisé" (juste après dans show.blade.php) écrase background/color
   en style inline — jamais affecté par ce repli. */
.activity-hero__badge {
  display: inline-flex; align-items: center; gap: 6px;
  background: var(--category-color, var(--navy)); color: #fff; font-size: var(--fs-xs); font-weight: 800;
  text-transform: uppercase; letter-spacing: .04em;
  padding: 6px 14px; border-radius: var(--r-pill);
}
.activity-hero__heading h1 {
  max-width: 900px; margin-top: var(--sp-3); color: var(--heading);
  font-size: clamp(1.9rem, 4vw, 2.75rem); letter-spacing: -.025em;
}
/* Note sur sa propre ligne sous le titre (jamais affichée sans vrais avis,
   cf. show.blade.php) — avant la localisation, comme une fiche GetYourGuide. */
.activity-hero__rating {
  display: flex; align-items: center; gap: var(--sp-2); margin-top: var(--sp-2); font-size: var(--fs-sm);
}
.activity-hero__rating-count { color: var(--ink-soft); text-decoration: underline; }
.activity-hero__meta {
  display: flex; flex-wrap: wrap; align-items: center; gap: var(--sp-3);
  margin-top: var(--sp-2); color: var(--ink-soft); font-size: var(--fs-sm);
}
/* Repli sans photo : favoris/partager redeviennent une rangée de boutons
   classiques sous le titre (cf. .activity-gallery__action-btn pour le cas
   normal, superposé à l'image). */
.activity-hero__actions-fallback { display: flex; gap: var(--sp-2); }
.activity-action {
  width: auto; padding-inline: var(--sp-3); gap: var(--sp-2);
  border: 1px solid var(--border); color: var(--ink);
}
.activity-action:hover { border-color: var(--navy); }
.activity-action[aria-pressed="true"] { color: var(--coral); }

.activity-gallery {
  position: relative; display: grid; grid-template-columns: 2fr 1fr 1fr;
  grid-template-rows: repeat(2, minmax(0, 1fr)); gap: var(--sp-2);
  /* Mosaïque plus basse et large (repère GetYourGuide) : l'ancienne hauteur
     (jusqu'à 560px) rendait la galerie disproportionnée par rapport à la
     carte prix à côté — resserrée à un format bannière. */
  height: clamp(220px, 26vw, 340px); overflow: hidden; border-radius: var(--r-lg);
}
.activity-gallery__item {
  position: relative; min-width: 0; padding: 0; border: 0; overflow: hidden; background: var(--bg-tint-2);
}
.activity-gallery__item:first-child { grid-row: 1 / 3; }
.activity-gallery__item:nth-child(n+6) { display: none; }
.activity-gallery__item img {
  width: 100%; height: 100%; object-fit: cover; transition: transform .25s ease;
}
.activity-gallery__item:hover img { transform: scale(1.025); }
/* Coin haut-gauche : libre sur la mosaïque (favoris/partager en haut-droite,
   points/compteur en bas) — visible sur la photo principale ET chaque
   vignette (brief §4), jamais uniquement dans la visionneuse plein écran. */
.activity-gallery__ai-badge { position: absolute; z-index: 2; top: var(--sp-2); left: var(--sp-2); }
.activity-gallery__all {
  position: absolute; z-index: 2; right: var(--sp-4); bottom: var(--sp-4);
  display: inline-flex; align-items: center; gap: 6px;
  background: rgba(20,24,45,.72); color: #fff; backdrop-filter: blur(4px);
  font-size: var(--fs-xs); font-weight: 700; padding: 8px 14px; border-radius: var(--r-pill);
  box-shadow: var(--shadow-md);
}

/* Points de pagination du carrousel mobile — cachés par défaut (le
   mosaïque desktop n'en a pas besoin), synchronisés au défilement par
   site.js. */
.activity-gallery__dots {
  display: none; position: absolute; z-index: 2; left: 50%; bottom: var(--sp-3);
  transform: translateX(-50%); gap: 7px;
  padding: 5px 8px; background: rgba(20,24,45,.35); border-radius: var(--r-pill);
  backdrop-filter: blur(2px);
}
.activity-gallery__dot {
  width: 6px; height: 6px; border-radius: 999px; background: rgba(255,255,255,.6);
  box-shadow: 0 0 0 1px rgba(0,0,0,.2);
  transition: background-color .15s ease, width .15s ease;
}
.activity-gallery__dot.is-active { background: #fff; width: 16px; }

/* Favoris/partager flottants sur l'image, comme une fiche GetYourGuide —
   toujours superposés (mobile ET desktop), plus de rangée séparée sous le
   titre quand une photo existe. */
.activity-gallery__actions {
  position: absolute; z-index: 2; top: var(--sp-3); right: var(--sp-3);
  display: flex; gap: var(--sp-2);
}
.activity-gallery__action-btn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 40px; height: 40px; border: 0; border-radius: 999px;
  background: rgba(255,255,255,.94); color: var(--navy); box-shadow: var(--shadow-md);
  backdrop-filter: blur(4px); transition: background-color .15s ease, transform .1s ease;
}
.activity-gallery__action-btn:hover { background: #fff; }
.activity-gallery__action-btn:active { transform: scale(0.94); }
.activity-gallery__action-btn[aria-pressed="true"] { color: var(--coral); }

/* Visionneuse plein écran (lightbox) — clic sur une photo de la galerie,
   repère GetYourGuide : fond clair, compteur n/total, flèches, vue grille.
   Toujours au-dessus de tout (z-index élevé), peuplée/pilotée par site.js. */
.lightbox {
  position: fixed; inset: 0; z-index: 200; display: flex; flex-direction: column;
  background: var(--white); color: var(--heading);
}
.lightbox[hidden] { display: none; }
.lightbox__topbar {
  display: flex; align-items: center; justify-content: space-between;
  padding: var(--sp-4) var(--sp-5); flex-shrink: 0;
}
.lightbox__counter { font-weight: 600; font-size: var(--fs-sm); }
.lightbox__icon-btn {
  display: inline-flex; align-items: center; justify-content: center;
  width: 44px; height: 44px; border: 0; border-radius: 999px;
  background: transparent; color: var(--heading);
}
.lightbox__icon-btn:hover { background: var(--bg-tint); }
.lightbox__nav {
  position: absolute; top: 50%; transform: translateY(-50%); z-index: 2;
  display: inline-flex; align-items: center; justify-content: center;
  width: 48px; height: 48px; border: 1px solid var(--border); border-radius: 999px;
  background: var(--white); color: var(--heading); box-shadow: var(--shadow-md);
}
.lightbox__nav:hover { background: var(--bg-tint); }
.lightbox__nav--prev { left: var(--sp-5); }
.lightbox__nav--next { right: var(--sp-5); }
.lightbox__stage {
  position: relative; flex: 1; min-height: 0; display: flex; align-items: center; justify-content: center;
  padding: 0 var(--sp-12) var(--sp-6);
}
.lightbox__stage img { max-width: 100%; max-height: 100%; object-fit: contain; border-radius: var(--r-md); }
.lightbox__ai-badge { position: absolute; z-index: 2; top: var(--sp-4); left: var(--sp-4); }
.lightbox__ai-badge[hidden] { display: none; }
/* Texte long (brief §4) : sous l'image, toujours visible tant que la photo
   affichée est déclarée IA — jamais réduit à une infobulle. */
.lightbox__ai-caption {
  flex-shrink: 0; margin: 0; padding: var(--sp-2) var(--sp-5) var(--sp-4);
  text-align: center; font-size: var(--fs-xs); color: var(--ink-faint);
}
.lightbox__ai-caption[hidden] { display: none; }
.lightbox__grid-ai-badge {
  position: absolute; z-index: 2; top: 6px; left: 6px;
  background: #4C3B8C; color: #fff; font-size: 10px; font-weight: 700;
  padding: 2px 7px; border-radius: var(--r-pill);
}
.lightbox__grid {
  position: absolute; inset: 0; top: 72px; overflow-y: auto;
  display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: var(--sp-3);
  padding: var(--sp-2) var(--sp-5) var(--sp-6); background: var(--white);
}
.lightbox__grid[hidden] { display: none; }
.lightbox__grid-item {
  display: block; padding: 0; border: 0; border-radius: var(--r-md); overflow: hidden;
  aspect-ratio: 4 / 3; background: var(--bg-tint-2);
}
.lightbox__grid-item img { width: 100%; height: 100%; object-fit: cover; }
@media (max-width: 699px) {
  .lightbox__nav { width: 40px; height: 40px; }
  .lightbox__nav--prev { left: var(--sp-2); }
  .lightbox__nav--next { right: var(--sp-2); }
  .lightbox__stage { padding: 0 var(--sp-8) var(--sp-4); }
  .lightbox__grid { grid-template-columns: repeat(auto-fill, minmax(140px, 1fr)); }
}

/* Un seul conteneur grid pour titre + galerie + contenu + carte prix (fusion
   de l'ancien .activity-hero et .activity-layout) : sur mobile tout
   s'empile dans l'ordre source (order:-1 remonte la galerie au-dessus du
   titre, cf. media query <699px) ; sur desktop, grid-template-areas place
   la carte prix à droite de la galerie ET du contenu, comme une fiche
   GetYourGuide (carte visible dès le haut de page, pas après tout le texte). */
.activity-layout {
  display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--sp-5);
  padding-top: var(--sp-5);
}
.activity-layout main { min-width: 0; }
.activity-summary {
  padding-bottom: var(--sp-6); border-bottom: 1px solid var(--border);
}
.activity-facts { display: grid; grid-template-columns: 1fr; gap: var(--sp-4); }
.activity-fact {
  display: grid; grid-template-columns: 36px minmax(0, 1fr); gap: var(--sp-3);
  align-items: start;
}
.activity-fact > span {
  display: grid; place-items: center; width: 36px; height: 36px;
  border-radius: var(--r-md); background: var(--bg-tint-2);
  color: var(--heading); font-size: 1.15rem; font-weight: 700;
}
.activity-fact strong { display: block; color: var(--ink); font-size: var(--fs-sm); }
.activity-fact p { margin-top: 2px; color: var(--ink-soft); font-size: var(--fs-sm); }

.activity-cta-card {
  position: sticky; top: 88px; padding: var(--sp-6); overflow: hidden;
  border: 1px solid var(--border); border-radius: var(--r-lg);
  background: var(--white); box-shadow: 0 18px 46px rgba(16, 36, 94, .09);
}
.activity-cta-card::before {
  content: ""; position: absolute; inset: 0 0 auto; height: 4px;
  background: linear-gradient(90deg, var(--coral), var(--turquoise));
}
.activity-cta-card__price-block { padding-top: var(--sp-1); }
.activity-cta-card__eyebrow {
  display: block; margin-bottom: 5px; color: var(--turquoise-600);
  font-size: .72rem; font-weight: 800; letter-spacing: .09em; text-transform: uppercase;
}
.activity-cta-card .price-tag {
  color: var(--heading); font-size: clamp(1.65rem, 2.5vw, 2rem); line-height: 1.1;
}
.activity-cta-card__unit,
.activity-cta-card__access {
  margin-top: 4px; color: var(--ink-soft); font-size: var(--fs-sm); line-height: 1.35;
}
.activity-cta-card #external-cta {
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  min-height: 54px;
}
.activity-cta-card__external-icon { flex: 0 0 auto; transition: transform .18s ease; }
.activity-cta-card #external-cta:hover .activity-cta-card__external-icon { transform: translate(2px, -2px); }
.activity-cta-card__trust {
  margin-top: var(--sp-4); padding: var(--sp-3); border-radius: var(--r-md);
  background: var(--bg-tint);
}
.activity-cta-card__notice,
.activity-cta-card__verified {
  display: flex; align-items: flex-start; gap: 9px; margin: 0;
  color: var(--ink-soft); font-size: var(--fs-xs); line-height: 1.45; text-align: left;
}
.activity-cta-card__notice svg,
.activity-cta-card__verified svg { flex: 0 0 auto; margin-top: 1px; color: var(--turquoise-600); }
.activity-cta-card__verified {
  margin-top: var(--sp-3); padding-top: var(--sp-3); border-top: 1px solid var(--border);
}
.activity-cta-card__phone {
  display: flex; align-items: center; gap: var(--sp-3); width: 100%; min-height: 66px;
  margin-top: var(--sp-4);
  padding: 10px 12px; border: 1px solid var(--border); border-radius: var(--r-pill);
  color: var(--heading); background: var(--white); text-decoration: none;
  transition: border-color .18s ease, background .18s ease, transform .18s ease;
}
.activity-cta-card__phone:hover {
  border-color: var(--turquoise); background: var(--bg-tint); transform: translateY(-1px);
}
.activity-cta-card__phone-icon {
  display: grid; place-items: center; flex: 0 0 auto; width: 42px; height: 42px;
  border-radius: 50%; color: var(--heading); background: var(--bg-tint-2);
}
.activity-cta-card__phone-copy { display: flex; flex: 1; min-width: 0; flex-direction: column; line-height: 1.2; }
.activity-cta-card__phone-copy small { color: var(--ink-soft); font-size: .72rem; }
.activity-cta-card__phone-copy strong { margin-top: 3px; color: var(--heading); font-size: 1rem; }
.activity-cta-card__phone-chevron { flex: 0 0 auto; color: var(--ink-soft); }
.activity-cta-card__phone:focus-visible {
  outline: 3px solid rgba(22, 184, 180, .28); outline-offset: 2px;
}

.activity-mobile-cta {
  position: fixed; inset: auto 0 0; z-index: 45; display: flex;
  align-items: center; justify-content: space-between; gap: var(--sp-3);
  padding: var(--sp-3) var(--sp-4) max(var(--sp-3), env(safe-area-inset-bottom));
  background: var(--white); border-top: 1px solid var(--border); box-shadow: 0 -4px 18px rgba(16,36,94,.12);
}
.activity-mobile-cta .btn { flex-shrink: 0; }
.activity-mobile-cta + .section { margin-top: var(--sp-8); }
.activity-mobile-cta__info { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.activity-mobile-cta__unit { color: var(--ink-soft); font-size: var(--fs-xs); }
.activity-mobile-cta__badge { align-self: flex-start; margin-top: var(--sp-1); font-size: var(--fs-xs); }

@media (min-width: 700px) {
  .activity-facts { grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 900px) {
  .activity-layout {
    padding-top: var(--sp-5);
    grid-template-columns: minmax(0, 2fr) minmax(290px, 1fr);
    grid-template-areas:
      "heading heading"
      "gallery cta"
      "main cta";
    row-gap: var(--sp-6); column-gap: var(--sp-8);
  }
  .activity-hero__top {
    grid-area: heading; display: flex; align-items: flex-start;
    justify-content: space-between; gap: var(--sp-6);
  }
  .activity-hero__quick-actions { display: flex; flex-shrink: 0; gap: var(--sp-5); margin-top: var(--sp-2); }
  .activity-gallery-wrap, .activity-hero__actions-fallback { grid-area: gallery; }
  .activity-layout > main { grid-area: main; }
  .activity-layout > aside { grid-area: cta; }
  .activity-mobile-cta { display: none; }
}
@media (max-width: 699px) {
  /* La galerie remonte visuellement au-dessus du titre — image d'abord,
     comme une fiche GetYourGuide (ordre source HTML inchangé, le H1 reste
     avant l'image pour le SEO/lecteurs d'écran). */
  .activity-gallery-wrap { order: -1; }
  /* Le résumé qui suit (mt-3 dans le HTML) hérite aussi du padding-top de
     .activity-layout (var(--sp-8) par défaut) : les deux cumulés
     créaient un vide visible entre la localisation et le résumé — signalé
     après comparaison avec la fiche de référence. Resserré sur mobile
     uniquement (le bureau garde plus de respiration entre le bloc titre
     pleine largeur et la grille à deux colonnes). */
  .activity-layout { padding-top: var(--sp-5); }
  .activity-hero__actions-fallback { width: 100%; }
  /* Carrousel tactile natif (scroll-snap) : le défilement swipe ne demande
     aucun JS, seuls les points de pagination sont synchronisés via
     site.js. */
  .activity-gallery {
    display: flex; height: auto; aspect-ratio: 4 / 3; border-radius: var(--r-lg);
    overflow-x: auto; scroll-snap-type: x mandatory; -webkit-overflow-scrolling: touch;
    scrollbar-width: none;
  }
  .activity-gallery::-webkit-scrollbar { display: none; }
  .activity-gallery__item {
    display: block; flex: 0 0 100%; width: 100%; height: 100%;
    scroll-snap-align: start; scroll-snap-stop: always;
  }
  .activity-gallery__all { right: var(--sp-3); bottom: var(--sp-3); }
  .activity-gallery__dots { display: flex; }
  .activity-action { min-width: 44px; }
  .activity-action span { display: none; }
  /* Réserve la hauteur de la barre CTA fixe (.activity-mobile-cta) pour
     qu'elle ne recouvre pas le bas du contenu. Portée à :has() plutôt
     qu'au body global : sans ce ciblage, TOUTES les pages héritaient de
     ces 76px, laissant un vide visible sous le footer (fond du body
     apparent, blanc en thème clair) sur les pages sans barre CTA — cf.
     retour utilisateur du 10/08/2026. */
  body:has(.activity-mobile-cta) { padding-bottom: 76px; }
}


/* Ajustements de la fiche d'après la comparaison visuelle */
.site-header__search {
  display: none; flex: 1; align-items: center; gap: var(--sp-2);
  max-width: 520px; min-height: 48px; padding: 5px 6px 5px var(--sp-4);
  border: 2px solid var(--border); border-radius: var(--r-pill); color: var(--ink-soft);
  background: var(--bg);
}
.site-header__search:focus-within { border-color: var(--navy); }
.site-header__search input {
  flex: 1; min-width: 0; border: 0; outline: 0; background: transparent;
  color: var(--ink); font: inherit;
}
.site-header__search input::placeholder { color: var(--ink-faint); }
@media (min-width: 900px) { .site-header__search { display: flex; } }
@media (min-width: 900px) and (max-width: 1180px) { .site-header__nav { display: none; } }

.activity-hero__heading h1 { max-width: none; }
/* align-items:start empêchait .activity-layout > aside de s'étirer sur toute
   la hauteur de sa zone de grille (galerie+contenu) : son enfant sticky
   (.activity-cta-card) n'avait alors que ~310px de hauteur pour "coller" en
   scrollant, au lieu de rester affiché jusqu'au bas du contenu. On garde
   align-items:start pour le reste de la grille (titre/galerie/contenu, pour
   ne pas les étirer inutilement) mais on laisse aside s'étirer (comportement
   grid par défaut) pour que le sticky ait toute la hauteur de scroll voulue. */
.activity-layout { align-items: start; }
.activity-layout > aside { align-self: stretch; }
.activity-gallery-wrap { min-width: 0; }
.activity-summary { margin-top: var(--sp-8); }

/* Section "Avis" de la fiche activité (redesign du 09/09/2026, retour
   utilisateur : "différencier des autres [éléments], qu'on est sur la
   partie avis") — jusqu'ici du texte brut avec de simples traits de
   séparation entre avis, indissociable visuellement du maillage interne et
   de la ligne "Dernière vérification" juste au-dessus. Même traitement que
   l'encart "Organisateur" juste au-dessus (bordure + coin arrondi) mais
   avec un fond légèrement teinté en plus, pour que la zone se distingue
   d'un coup d'œil, sans dépendre uniquement du titre "Avis". */
.activity-reviews-section {
  border: 1px solid var(--border); border-radius: var(--r-lg); background: var(--bg-tint);
  padding: var(--sp-5);
}
.activity-reviews-section__head { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: var(--sp-3); }
.activity-reviews-section__average { display: inline-flex; align-items: center; gap: 6px; font-size: var(--fs-md); font-weight: 800; color: var(--heading); }
.activity-review-card {
  border: 1px solid var(--border); border-radius: var(--r-md); background: var(--white); padding: var(--sp-4);
}
/* Photo jointe à un avis (retour utilisateur du 09/09/2026, "coins
   arrondis + agrandissement en popup") — <button> plutôt que l'ancien
   <a target="_blank"> (l'agrandissement se fait maintenant sur place,
   cf. #review-photo-lightbox), donc reset des styles bouton par défaut. */
.review-photo-thumb {
  display: block; width: 96px; height: 96px; padding: 0; border: 1px solid var(--border);
  border-radius: var(--r-md); overflow: hidden; background: none; cursor: pointer;
}
.review-photo-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }

.activity-gallery--1 {
  display: block; width: 425px; max-width: 100%; height: 340px;
}
.activity-gallery--1 .activity-gallery__item {
  display: block; width: 100%; height: 100%;
}
.activity-gallery--2 {
  grid-template-columns: repeat(2, minmax(0, 1fr)); grid-template-rows: 1fr;
}
.activity-gallery--2 .activity-gallery__item:first-child { grid-row: auto; }
.activity-gallery--3 {
  grid-template-columns: 2fr 1fr; grid-template-rows: repeat(2, minmax(0, 1fr));
}
.activity-gallery--4 .activity-gallery__item:nth-child(1),
.activity-gallery--5 .activity-gallery__item:nth-child(1) {
  grid-column: 1; grid-row: 1 / 3;
}
.activity-gallery--4 .activity-gallery__item:nth-child(2),
.activity-gallery--5 .activity-gallery__item:nth-child(2) {
  grid-column: 2 / 4; grid-row: 1;
}
.activity-gallery--4 .activity-gallery__item:nth-child(3),
.activity-gallery--5 .activity-gallery__item:nth-child(3) {
  grid-column: 2; grid-row: 2;
}
.activity-gallery--4 .activity-gallery__item:nth-child(4),
.activity-gallery--5 .activity-gallery__item:nth-child(4) {
  grid-column: 3; grid-row: 2;
}
.activity-gallery--5 .activity-gallery__item:nth-child(5) { display: none; }

@media (max-width: 699px) {
  .activity-summary { margin-top: var(--sp-6); }
  .activity-gallery--1 { height: auto; }
}


/* Favoris/partager flottent désormais sur l'image (.activity-gallery__actions)
   plutôt que de partager la ligne du titre — .activity-hero__heading est
   un simple bloc (règle de base plus haut), rien à ajouter ici. */


/* Recherche d'accueil — présentation desktop */
@media (min-width: 900px) {
  .search-panel {
    max-width: 1120px; padding: 7px; border-radius: var(--r-pill);
    box-shadow: 0 10px 30px rgba(16, 36, 94, .10);
  }
  .search-panel form {
    grid-template-columns: minmax(260px, 1fr) 1px minmax(260px, 1fr) auto;
    gap: 0; min-height: 58px;
  }
  .search-panel .search-field {
    min-width: 0; min-height: 58px; padding: 0 var(--sp-5);
    border-radius: var(--r-pill);
    color: var(--ink-soft);
  }
  .search-panel .search-field:focus-within {
    background: var(--bg-tint);
    color: var(--heading);
  }
  .search-panel .search-field svg { flex: 0 0 auto; }
  .search-panel .search-field input { font-size: var(--fs-md); }
  .search-panel .search-divider {
    display: block; align-self: center; width: 1px; height: 34px;
    border: 0; background: var(--border);
  }
  .search-panel .btn {
    align-self: center; min-width: 160px; min-height: 50px;
    margin-left: var(--sp-2); padding-inline: var(--sp-6);
    box-shadow: 0 5px 14px rgba(255, 90, 85, .22);
  }
}


/* Logo d'en-tête plus visible */
.site-header__logo { flex: 0 0 auto; display: inline-flex; align-items: center; }
.site-header__logo img { height: 44px; width: auto; }
@media (min-width: 900px) {
  .site-header__logo img { height: 56px; }
  .site-header__bar { min-height: 84px; }
}


/* Barre de recherche des résultats */
.search-results-head {
  display: flex; align-items: end; justify-content: space-between;
  gap: var(--sp-5); margin-top: var(--sp-8);
}
.search-results-head__eyebrow {
  color: var(--turquoise-600); font-size: var(--fs-xs); font-weight: 800;
  text-transform: uppercase; letter-spacing: .08em;
}
.search-results-head__title {
  margin-top: var(--sp-1); color: var(--heading);
  font-size: clamp(1.7rem, 3vw, 2.35rem);
}
.search-results-head__count {
  flex: 0 0 auto; padding: 9px 14px; border-radius: var(--r-pill);
  background: var(--bg-tint-2); color: var(--ink-soft); font-size: var(--fs-sm);
}
.search-results-head__count strong { color: var(--heading); font-size: var(--fs-md); }

.search-toolbar {
  display: grid; grid-template-columns: minmax(240px, 1fr) minmax(240px, 1fr) auto auto;
  gap: var(--sp-2); align-items: center; padding: var(--sp-2);
  border: 1px solid var(--border); border-radius: 22px;
  background: var(--white); box-shadow: 0 12px 34px rgba(16, 36, 94, .09);
}
.search-toolbar__field {
  display: flex; align-items: center; gap: var(--sp-3); min-width: 0;
  min-height: 66px; padding: 10px var(--sp-4);
  border: 1px solid transparent; border-radius: 15px;
  background: var(--bg-tint); color: var(--ink-soft);
  transition: border-color .15s ease, background-color .15s ease;
}
.search-toolbar__field:focus-within {
  border-color: var(--turquoise); background: var(--white);
}
.search-toolbar__field > svg { flex: 0 0 auto; color: var(--heading); }
.search-toolbar__field-copy { display: flex; flex: 1; min-width: 0; flex-direction: column; }
.search-toolbar__field-copy > span {
  color: var(--heading); font-size: var(--fs-xs); font-weight: 800;
}
.search-toolbar__field input {
  width: 100%; min-width: 0; margin-top: 2px; padding: 0;
  border: 0; outline: 0; background: transparent;
  color: var(--ink); font: inherit; font-size: var(--fs-sm);
}
.search-toolbar__field input::placeholder { color: var(--ink-faint); }
.search-toolbar .location-suggestions { top: calc(100% + 8px); }
.search-toolbar__filter,
.search-toolbar__submit { min-height: 54px; white-space: nowrap; }
.search-toolbar__filter { padding-inline: var(--sp-5); }
.search-toolbar__submit {
  min-width: 150px; box-shadow: 0 6px 16px rgba(255, 90, 85, .22);
}

@media (max-width: 899px) {
  .search-results-head { align-items: flex-start; flex-direction: column; }
  .search-toolbar { grid-template-columns: 1fr 1fr; border-radius: var(--r-lg); }
  .search-toolbar__field { grid-column: 1 / -1; }
  .search-toolbar__filter,
  .search-toolbar__submit { width: 100%; }
}
@media (max-width: 520px) {
  .search-toolbar { grid-template-columns: 1fr; }
  .search-toolbar__field,
  .search-toolbar__filter,
  .search-toolbar__submit { grid-column: 1; }
}

/* ============================= Annuaire des catégories ============================= */
.category-directory-hero {
  position: relative; overflow: hidden; padding-block: clamp(38px, 7vw, 78px);
  border-bottom: 1px solid var(--border);
  background:
    radial-gradient(circle at 88% 18%, rgba(22,184,180,.18), transparent 28%),
    radial-gradient(circle at 72% 90%, rgba(255,90,85,.12), transparent 26%),
    linear-gradient(145deg, var(--bg-tint), var(--bg));
}
.category-directory-breadcrumb { display: flex; align-items: center; gap: 7px; color: var(--ink-faint); font-size: var(--fs-xs); font-weight: 650; }
.category-directory-breadcrumb a:hover { color: var(--turquoise-600); }
.category-directory-breadcrumb svg { width: 15px; fill: none; stroke: currentColor; stroke-width: 2; }
.category-directory-hero__content { max-width: 760px; margin-top: var(--sp-8); }
.category-directory-eyebrow { display: block; color: var(--turquoise-600); font-size: var(--fs-xs); font-weight: 850; letter-spacing: .11em; text-transform: uppercase; }
.category-directory-hero h1 { max-width: 720px; margin-top: var(--sp-3); color: var(--heading); font-size: clamp(2.15rem, 6vw, 4rem); line-height: 1.02; letter-spacing: -.035em; text-wrap: balance; }
.category-directory-hero__content > p { max-width: 680px; margin-top: var(--sp-5); color: var(--ink-soft); font-size: clamp(1rem, 2vw, 1.2rem); }
.category-directory-hero__meta { display: flex; align-items: center; flex-wrap: wrap; gap: var(--sp-2); margin-top: var(--sp-6); color: var(--ink-soft); font-size: var(--fs-sm); }
.category-directory-hero__meta strong { color: var(--heading); }

.category-directory-section { padding-block: clamp(40px, 7vw, 76px); }
.category-directory-heading { display: flex; align-items: end; justify-content: space-between; gap: var(--sp-6); margin-bottom: var(--sp-6); }
.category-directory-heading h2 { margin-top: var(--sp-2); color: var(--heading); font-size: clamp(1.65rem, 3vw, 2.4rem); letter-spacing: -.02em; }
.category-directory-heading > p { color: var(--ink-faint); font-size: var(--fs-sm); }

.category-directory-grid {
  display: flex; gap: var(--sp-4); width: 100%; overflow-x: auto; padding: 2px 2px var(--sp-5);
  scroll-snap-type: x mandatory; overscroll-behavior-inline: contain; scrollbar-width: none;
  -webkit-overflow-scrolling: touch;
}
.category-directory-grid::-webkit-scrollbar { display: none; }
.category-directory-card {
  flex: 0 0 min(86vw, 350px); overflow: hidden; scroll-snap-align: start;
  border: 1px solid var(--border); border-radius: 24px; background: var(--white);
  box-shadow: 0 12px 32px rgba(16,36,94,.09);
  transition: transform .25s ease, box-shadow .25s ease, border-color .25s ease;
}
.category-directory-card:hover { border-color: color-mix(in srgb, var(--category-color) 55%, var(--border)); box-shadow: 0 20px 45px rgba(16,36,94,.16); transform: translateY(-5px); }
.category-directory-card__media { position: relative; display: block; aspect-ratio: 16 / 10; overflow: hidden; background: var(--bg-tint-2); }
.category-directory-card__media > img { width: 100%; height: 100%; object-fit: cover; transition: transform .55s cubic-bezier(.2,.75,.25,1); }
.category-directory-card:hover .category-directory-card__media > img { transform: scale(1.055); }
.category-directory-card__fallback { position: absolute; inset: 0; display: grid; place-items: center; color: #fff; font-size: 48px; background: linear-gradient(145deg, var(--category-color), var(--navy)); }
.category-directory-card__fallback img { width: 58px; height: 58px; object-fit: contain; filter: brightness(0) invert(1); }
.category-directory-card__count { position: absolute; top: var(--sp-3); left: var(--sp-3); padding: 7px 11px; border-radius: var(--r-pill); background: rgba(255,255,255,.93); color: var(--heading); font-size: .7rem; font-weight: 800; box-shadow: var(--shadow-sm); backdrop-filter: blur(8px); }
.category-directory-card__body { display: flex; min-height: 170px; padding: var(--sp-5); flex-direction: column; align-items: flex-start; }
.category-directory-card__title { color: var(--heading); font-size: 1.35rem; font-weight: 850; line-height: 1.15; }
.category-directory-card__tags { display: flex; flex-wrap: wrap; gap: 6px; margin-top: var(--sp-3); }
.category-directory-card__tags > span { padding: 5px 9px; border-radius: var(--r-pill); background: color-mix(in srgb, var(--category-color) 10%, var(--bg-tint)); color: var(--ink-soft); font-size: .72rem; font-weight: 700; }
.category-directory-card__cta { display: inline-flex; align-items: center; gap: 5px; margin-top: auto; padding-top: var(--sp-5); color: var(--turquoise-600); font-size: var(--fs-sm); font-weight: 800; }
.category-directory-card__cta svg { width: 18px; fill: none; stroke: currentColor; stroke-width: 2.2; transition: transform .2s ease; }
.category-directory-card:hover .category-directory-card__cta svg { transform: translateX(3px); }

@media (max-width: 599px) {
  .category-directory-hero { padding-block: var(--sp-8) var(--sp-10); }
  .category-directory-hero__content { margin-top: var(--sp-6); }
  .category-directory-hero h1 { font-size: clamp(2rem, 11vw, 2.65rem); }
  .category-directory-heading { align-items: flex-start; flex-direction: column; gap: var(--sp-2); margin-bottom: var(--sp-4); }
  .category-directory-card { flex-basis: 84vw; border-radius: 20px; }
  .category-directory-card__body { min-height: 155px; padding: var(--sp-4); }
}
@media (min-width: 600px) { .category-directory-card { flex-basis: 370px; } }
@media (min-width: 1024px) {
  .category-directory-heading > p { display: none; }
  .category-directory-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--sp-5); overflow: visible; scroll-snap-type: none; }
  .category-directory-card { width: auto; }
}

/* ============================= Authentification ============================= */
.auth-page { min-height: calc(100vh - 70px); padding: clamp(24px, 5vw, 64px) 0; background: radial-gradient(circle at 8% 12%, rgba(22,184,180,.13), transparent 27%), radial-gradient(circle at 92% 88%, rgba(255,90,85,.10), transparent 24%), linear-gradient(135deg, var(--bg-tint) 0%, var(--bg) 54%, var(--bg-tint) 100%); }
.auth-shell { display: grid; grid-template-columns: minmax(0, .92fr) minmax(420px, 1.08fr); max-width: 1080px; min-height: 650px; padding-inline: var(--sp-4); }
.auth-showcase { position: relative; display: flex; flex-direction: column; justify-content: space-between; min-width: 0; overflow: hidden; padding: clamp(36px, 5vw, 64px); border-radius: 32px 0 0 32px; color: #fff; background: linear-gradient(145deg, #10245e 0%, #173a7c 55%, #0b6e79 145%); box-shadow: 0 24px 70px rgba(16,36,94,.18); }
.auth-showcase::before, .auth-showcase::after { content: ""; position: absolute; border-radius: 50%; pointer-events: none; }
.auth-showcase::before { width: 300px; height: 300px; right: -135px; top: -105px; border: 60px solid rgba(255,255,255,.055); }
.auth-showcase::after { width: 190px; height: 190px; left: -80px; bottom: -70px; background: rgba(22,184,180,.14); }
.auth-showcase__glow { position: absolute; inset: 0; background: radial-gradient(circle at 82% 45%, rgba(22,184,180,.22), transparent 34%); }
.auth-showcase__content, .auth-showcase__footer { position: relative; z-index: 1; }
.auth-eyebrow { display: inline-flex; align-items: center; gap: 7px; color: var(--turquoise-600); font-size: .75rem; font-weight: 800; letter-spacing: .11em; text-transform: uppercase; }
.auth-showcase .auth-eyebrow { color: #78e4e0; }
.auth-eyebrow::before { content: ""; width: 18px; height: 3px; border-radius: 99px; background: currentColor; }
.auth-showcase h2 { margin-top: var(--sp-5); max-width: 430px; color: #fff; font-size: clamp(2rem, 3.2vw, 3rem); letter-spacing: -.035em; text-wrap: balance; }
.auth-showcase__content > p { max-width: 440px; margin-top: var(--sp-4); color: rgba(255,255,255,.76); font-size: var(--fs-md); }
.auth-benefits { display: grid; gap: var(--sp-5); margin-top: var(--sp-10); }
.auth-benefits li { display: grid; grid-template-columns: 48px minmax(0, 1fr); align-items: center; gap: var(--sp-3); }
.auth-benefits__icon { display: grid; place-items: center; width: 48px; height: 48px; border: 1px solid rgba(255,255,255,.14); border-radius: 15px; background: rgba(255,255,255,.10); }
.auth-benefits__icon svg { width: 23px; height: 23px; }
.auth-benefits strong, .auth-benefits small { display: block; }
.auth-benefits strong { color: #fff; font-size: .98rem; }
.auth-benefits small { margin-top: 2px; color: rgba(255,255,255,.65); font-size: .8rem; }
.auth-showcase__footer { display: flex; align-items: center; gap: 9px; margin-top: var(--sp-8); color: rgba(255,255,255,.68); font-size: var(--fs-sm); }
.auth-showcase__dot { width: 8px; height: 8px; border-radius: 50%; background: #64ddd8; box-shadow: 0 0 0 5px rgba(100,221,216,.12); }
.auth-panel { display: flex; flex-direction: column; justify-content: center; min-width: 0; padding: clamp(32px, 5vw, 66px); border: 1px solid var(--border); border-left: 0; border-radius: 0 32px 32px 0; background: var(--white); box-shadow: 20px 24px 70px rgba(16,36,94,.12); }
.auth-back { display: inline-flex; align-items: center; align-self: flex-start; gap: 5px; margin-bottom: var(--sp-8); color: var(--ink-soft); font-size: var(--fs-sm); font-weight: 650; }
.auth-back:hover { color: var(--heading); }
.auth-back svg { width: 19px; height: 19px; transition: transform .18s ease; }
.auth-back:hover svg { transform: translateX(-3px); }
.auth-card { width: 100%; max-width: 470px; margin-inline: auto; }
.auth-heading h1 { margin-top: var(--sp-3); color: var(--heading); font-size: clamp(2rem, 4vw, 2.65rem); letter-spacing: -.035em; }
.auth-heading p { margin-top: var(--sp-3); max-width: 440px; color: var(--ink-soft); font-size: .98rem; }
.auth-form { display: grid; gap: var(--sp-4); margin-top: var(--sp-8); }
.auth-field label { display: flex; align-items: baseline; gap: 5px; margin-bottom: 7px; color: var(--ink); font-size: .86rem; font-weight: 750; }
.auth-field label span { color: var(--ink-faint); font-size: .75rem; font-weight: 500; }
.auth-input { display: flex; align-items: center; min-height: 54px; padding: 0 var(--sp-4); border: 1.5px solid var(--border); border-radius: 15px; background: var(--bg); transition: border-color .18s ease, box-shadow .18s ease; }
.auth-input:focus-within { border-color: var(--turquoise); box-shadow: 0 0 0 4px rgba(22,184,180,.13); }
.auth-field--error .auth-input { border-color: var(--coral); }
.auth-input > svg { flex: 0 0 auto; width: 21px; height: 21px; margin-right: var(--sp-3); color: var(--ink-faint); }
.auth-input input { min-width: 0; width: 100%; height: 51px; padding: 0; border: 0; outline: 0; background: transparent; color: var(--ink); font: inherit; font-size: .94rem; }
.auth-input input::placeholder { color: var(--ink-faint); }
.auth-password-toggle { display: grid; flex: 0 0 auto; place-items: center; width: 40px; height: 40px; margin-right: -10px; padding: 0; border: 0; border-radius: 50%; background: transparent; color: var(--ink-faint); }
.auth-password-toggle:hover { background: var(--bg-tint); color: var(--heading); }
.auth-password-toggle svg { width: 21px; height: 21px; }
.auth-eye--closed, .auth-password-toggle[aria-pressed="true"] .auth-eye--open { display: none; }
.auth-password-toggle[aria-pressed="true"] .auth-eye--closed { display: block; }
.auth-field__hint, .auth-field__error { margin-top: 6px; font-size: .75rem; }
.auth-field__hint { color: var(--ink-faint); }
.auth-field__error { color: #d63f3a; font-weight: 650; }

/* Formulaire de contact (FAQ + page Contact) : réutilise .auth-field/.auth-input
   pour une apparence cohérente avec les formulaires de compte, plus une
   variante textarea et un piège à bots invisible. */
.contact-form__textarea {
  width: 100%; min-height: 140px; padding: var(--sp-3) var(--sp-4);
  border: 1.5px solid var(--border); border-radius: 15px; background: var(--bg);
  color: var(--ink); font: inherit; font-size: .94rem; resize: vertical;
  transition: border-color .18s ease, box-shadow .18s ease;
}
.contact-form__textarea:focus { outline: 0; border-color: var(--turquoise); box-shadow: 0 0 0 4px rgba(22,184,180,.13); }
.contact-form__textarea::placeholder { color: var(--ink-faint); }
.contact-form__hp {
  position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}

/* Formulaire "Laisser un avis" (fiche activité, §avis) : réutilise
   .auth-form/.auth-field/.contact-form__textarea pour rester cohérent avec
   les autres formulaires du site, plus une sélection d'étoiles 100% CSS
   (aucun JS requis) — 5 boutons radio en ordre inverse dans le DOM
   (5,4,3,2,1) affichés en row-reverse pour que le survol/la sélection
   remplisse aussi toutes les étoiles à gauche via ~ (technique standard). */
.review-form-card {
  border: 1px solid var(--border); border-radius: var(--r-lg); background: var(--bg);
  padding: var(--sp-5); margin-top: var(--sp-5);
}
.review-form-card h3 { color: var(--heading); font-size: 1.05rem; margin-bottom: var(--sp-3); }
.star-rating-input { display: flex; flex-direction: row-reverse; justify-content: flex-end; gap: 2px; width: fit-content; }
.star-rating-input input {
  position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
  overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0;
}
.star-rating-input label {
  font-size: 1.9rem; line-height: 1; color: var(--border); cursor: pointer;
  transition: color .12s ease;
}
.star-rating-input input:checked ~ label,
.star-rating-input label:hover,
.star-rating-input label:hover ~ label,
.star-rating-input input:focus-visible ~ label {
  color: var(--yellow);
}
.review-form-card__login-prompt {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3);
  flex-wrap: wrap; color: var(--ink-soft); font-size: var(--fs-sm);
}
.review-form-card__moderation-note { margin-top: var(--sp-2); color: var(--ink-faint); font-size: var(--fs-xs); }
.auth-form__options { display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3); font-size: .82rem; }
.auth-form__options > a, .auth-switch a, .auth-legal a { color: var(--turquoise-600); font-weight: 750; text-decoration: underline; text-decoration-color: transparent; text-underline-offset: 3px; }
.auth-form__options > a:hover, .auth-switch a:hover, .auth-legal a:hover { text-decoration-color: currentColor; }
.auth-check { display: inline-flex; align-items: center; gap: 8px; color: var(--ink-soft); cursor: pointer; }
.auth-check input { width: 18px; height: 18px; accent-color: var(--turquoise); }
.auth-submit { min-height: 54px; margin-top: var(--sp-1); border-radius: 15px; font-size: .96rem; box-shadow: 0 10px 24px rgba(255,90,85,.20); }
.auth-submit svg { width: 19px; height: 19px; transition: transform .18s ease; }
.auth-submit:hover svg { transform: translateX(3px); }
.auth-switch { margin-top: var(--sp-6); text-align: center; color: var(--ink-soft); font-size: .88rem; }
.auth-reassurance { display: flex; align-items: center; justify-content: center; gap: 7px; margin-top: var(--sp-5); color: var(--ink-faint); font-size: .74rem; }
.auth-reassurance svg { width: 16px; height: 16px; color: var(--turquoise-600); }
.auth-legal { margin-top: var(--sp-5); color: var(--ink-faint); font-size: .72rem; line-height: 1.55; text-align: center; }
.auth-alert { display: flex; align-items: flex-start; gap: 9px; margin-top: var(--sp-5); padding: 12px 14px; border-radius: 12px; font-size: .82rem; font-weight: 650; }
.auth-alert svg { flex: 0 0 auto; width: 18px; height: 18px; }
.auth-alert--success { background: rgba(27,138,90,.10); color: var(--success); }
.auth-divider { display: flex; align-items: center; gap: var(--sp-3); margin: var(--sp-6) 0; color: var(--ink-faint); font-size: .78rem; }
.auth-divider::before, .auth-divider::after { content: ''; flex: 1; height: 1px; background: var(--border); }
@media (max-width: 850px) { .auth-page { padding-block: var(--sp-6); } .auth-shell { display: block; max-width: 580px; min-height: 0; } .auth-showcase { display: none; } .auth-panel { padding: clamp(24px, 7vw, 44px); border-left: 1px solid var(--border); border-radius: 26px; box-shadow: var(--shadow-lg); } .auth-back { margin-bottom: var(--sp-6); } }
@media (max-width: 480px) { .auth-page { padding: 0; background: var(--white); } .auth-shell { padding: 0; } .auth-panel { min-height: calc(100vh - 69px); padding: 26px 20px 38px; border: 0; border-radius: 0; box-shadow: none; justify-content: flex-start; } .auth-heading h1 { font-size: 2rem; } .auth-form { margin-top: var(--sp-6); } .auth-form__options { align-items: flex-start; } }

/* Tableau de bord du compte — grille desktop, cartes horizontales et résumé
   des préférences. Les formulaires et actions historiques sont conservés. */
.account-dashboard {
  max-width: 1180px; padding-top: var(--sp-8); padding-bottom: clamp(48px, 7vw, 88px);
}
.account-dashboard__hero {
  position: relative; display: flex; align-items: center; justify-content: space-between;
  gap: var(--sp-6); overflow: hidden; min-height: 190px; padding: clamp(26px, 4vw, 44px);
  border-radius: 30px; color: #fff;
  background: linear-gradient(135deg, #10245e 0%, #1b3978 60%, #116f79 145%);
  box-shadow: 0 22px 58px rgba(16, 36, 94, .16);
}
.account-dashboard__hero::before,
.account-dashboard__hero::after {
  content: ""; position: absolute; border-radius: 50%; pointer-events: none;
}
.account-dashboard__hero::before {
  width: 250px; height: 250px; right: -90px; top: -130px;
  border: 50px solid rgba(255, 255, 255, .055);
}
.account-dashboard__hero::after {
  width: 160px; height: 160px; right: 16%; bottom: -125px; background: rgba(22, 184, 180, .13);
}
.account-dashboard__identity {
  position: relative; z-index: 1; display: flex; align-items: center; gap: var(--sp-5); min-width: 0;
}
.account-dashboard__avatar {
  display: grid; flex: 0 0 auto; place-items: center; width: 78px; height: 78px;
  border: 2px solid rgba(255, 255, 255, .3); border-radius: 25px;
  color: #10245e; background: #fff; font-size: 1.75rem; font-weight: 850;
  box-shadow: 0 12px 30px rgba(0, 0, 0, .14);
}
.account-dashboard__eyebrow {
  color: #72e0dc; font-size: .74rem; font-weight: 800; letter-spacing: .1em; text-transform: uppercase;
}
/* Sous-titre de héros sur fond bleu foncé (cf. .account-dashboard__hero) —
   jamais .text-muted ici : sa couleur (--ink-soft) est pensée pour un fond
   clair et devient quasi illisible sur ce dégradé sombre. */
.account-dashboard__hero-subtitle {
  position: relative; z-index: 1; margin-top: var(--sp-2); color: rgba(255, 255, 255, .82);
  font-size: var(--fs-base); max-width: 46ch;
}
.account-dashboard__identity h1 {
  margin-top: 5px; color: #fff; font-size: clamp(1.8rem, 3.5vw, 2.65rem); line-height: 1.1; letter-spacing: -.03em;
}
.account-dashboard__identity h1 + p { margin-top: 7px; color: rgba(255, 255, 255, .72); font-size: var(--fs-sm); }
.account-dashboard__active-badge {
  position: relative; z-index: 1; display: inline-flex; flex: 0 0 auto; align-items: center; gap: 8px;
  padding: 10px 15px; border: 1px solid rgba(255, 255, 255, .2); border-radius: var(--r-pill);
  color: rgba(255, 255, 255, .88); background: rgba(255, 255, 255, .09); font-size: var(--fs-sm); font-weight: 700;
  backdrop-filter: blur(8px);
}
.account-dashboard__active-badge > span {
  width: 8px; height: 8px; border-radius: 50%; background: #72e0a7; box-shadow: 0 0 0 5px rgba(114, 224, 167, .13);
}
.account-dashboard__alert {
  display: flex; align-items: center; gap: 10px; margin-top: var(--sp-5); padding: 13px 16px;
  border: 1px solid rgba(27, 138, 90, .2); border-radius: var(--r-md);
  color: var(--success); background: rgba(27, 138, 90, .08); font-size: var(--fs-sm); font-weight: 700;
}
.account-dashboard__stats {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--sp-4); margin-top: var(--sp-5);
}
.account-stat-card {
  display: flex; align-items: center; gap: var(--sp-3); min-width: 0; min-height: 98px; padding: 17px;
  border: 1px solid var(--border); border-radius: 20px; color: var(--ink);
  background: var(--white); box-shadow: 0 9px 28px rgba(16, 36, 94, .055); text-decoration: none;
}
a.account-stat-card { transition: border-color .18s ease, transform .18s ease, box-shadow .18s ease; }
a.account-stat-card:hover {
  border-color: rgba(22, 184, 180, .5); transform: translateY(-2px); box-shadow: 0 14px 34px rgba(16, 36, 94, .09);
}
.account-stat-card__icon {
  display: grid; flex: 0 0 auto; place-items: center; width: 48px; height: 48px;
  border-radius: 16px; color: var(--heading); background: var(--bg-tint-2);
}
.account-stat-card--favorites .account-stat-card__icon { color: var(--coral); background: rgba(255, 90, 85, .1); }
.account-stat-card__copy { display: flex; flex: 1; min-width: 0; flex-direction: column; }
.account-stat-card__copy strong { color: var(--heading); font-size: 1.08rem; }
.account-stat-card__copy small { margin-top: 3px; color: var(--ink-soft); font-size: .78rem; }
.account-stat-card__arrow { flex: 0 0 auto; color: var(--ink-faint); }
.account-status-dot {
  flex: 0 0 auto; width: 11px; height: 11px; border: 2px solid var(--white); border-radius: 50%;
  background: var(--ink-faint); box-shadow: 0 0 0 3px rgba(123, 128, 152, .12);
}
.account-status-dot.is-active { background: var(--success); box-shadow: 0 0 0 3px rgba(27, 138, 90, .12); }

/* Suivi de mise en avant particulier (30/08/2026, modernisé le même jour
   suite au retour utilisateur sur l'équivalent Android "mal rangé, espace
   vide à droite" — même refonte reproduite ici : pilule de statut colorée,
   tuile "Taux de clic" en dégradé turquoise mise en avant, grille d'icônes
   colorées, répartitions en lignes icône + badge compteur plutôt qu'en
   texte brut). Même besoin de tracking que le panneau partenaire
   (partner/promotions/stats.blade.php). */
.account-dashboard__alert--danger { border-color: rgba(255, 90, 85, .25); color: var(--coral); background: rgba(255, 90, 85, .08); }
.boost-stats-hero {
  padding: var(--sp-5); border-radius: var(--r-md); text-align: center; margin-bottom: var(--sp-4);
  background: linear-gradient(45deg, var(--turquoise), var(--turquoise-600));
}
.boost-stats-hero__value { color: #fff; font-size: 2.1rem; font-weight: 800; }
.boost-stats-hero__label { margin-top: 2px; color: rgba(255, 255, 255, .9); font-size: .8rem; font-weight: 700; }
.boost-stats-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-3); }
@media (min-width: 640px) { .boost-stats-grid { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
.boost-stats-tile { padding: var(--sp-4); border: 1px solid var(--border); border-radius: var(--r-md); background: var(--white); text-align: center; }
.boost-stats-tile__icon {
  display: inline-flex; align-items: center; justify-content: center; width: 40px; height: 40px;
  border-radius: 50%; margin-bottom: var(--sp-2);
}
.boost-stats-tile__icon--info { color: var(--info, #2F6FE4); background: rgba(47, 111, 228, .12); }
.boost-stats-tile__icon--brand { color: var(--turquoise-600); background: rgba(22, 184, 180, .12); }
.boost-stats-tile__icon--success { color: var(--success); background: rgba(27, 138, 90, .12); }
.boost-stats-tile__icon--warning { color: #b26a00; background: rgba(230, 178, 25, .15); }
.boost-stats-tile__value { color: var(--heading); font-size: 1.5rem; font-weight: 800; }
.boost-stats-tile__label { margin-top: 2px; color: var(--ink-soft); font-size: .78rem; }
.boost-stats-breakdown { display: grid; gap: var(--sp-4); }
@media (min-width: 640px) { .boost-stats-breakdown { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
.boost-stats-breakdown__col { padding: var(--sp-4); border: 1px solid var(--border); border-radius: var(--r-md); background: var(--white); }
.boost-stats-breakdown__col h2 { margin-bottom: var(--sp-2); color: var(--heading); font-size: .92rem; font-weight: 700; }
.boost-stats-breakdown__col p.is-muted { color: var(--ink-faint); font-size: .85rem; }
.boost-stats-breakdown__row { display: flex; align-items: center; gap: 10px; padding: 7px 0; color: var(--turquoise-600); }
.boost-stats-breakdown__label { flex: 1; min-width: 0; color: var(--ink-soft); font-size: .85rem; }
.boost-stats-breakdown__count {
  padding: 2px 10px; border-radius: var(--r-pill); color: var(--heading); font-size: .78rem; font-weight: 700;
  background: var(--bg-tint-2);
}

/* Bannière pleine largeur "Publier une activité" — volontairement hors de
   la grille profil/sidebar (trop à l'étroit dans la colonne latérale,
   noyée entre "Favoris" et "Mon compte") : un CTA autonome, entre le
   résumé du compte et le formulaire, avec son propre accent visuel
   (dégradé corail, cf. --coral) pour ne pas être confondu avec le bleu
   de l'identité ou le turquoise des favoris. */
.account-publish-banner {
  position: relative; overflow: hidden; display: flex; align-items: center; gap: var(--sp-5);
  margin-top: var(--sp-5); padding: clamp(20px, 3vw, 28px) clamp(22px, 4vw, 32px);
  border-radius: 24px; color: #fff; text-decoration: none;
  background: linear-gradient(120deg, #ff6a5f 0%, #ff5a55 55%, #e8434a 130%);
  box-shadow: 0 16px 36px rgba(255, 90, 85, .24);
  transition: transform .18s ease, box-shadow .18s ease;
}
.account-publish-banner:hover, .account-publish-banner:focus-visible {
  transform: translateY(-2px); box-shadow: 0 20px 44px rgba(255, 90, 85, .32);
}
.account-publish-banner::after {
  content: ""; position: absolute; width: 190px; height: 190px; right: -60px; top: -90px;
  border: 34px solid rgba(255, 255, 255, .09); border-radius: 50%; pointer-events: none;
}
.account-publish-banner__icon {
  display: grid; position: relative; z-index: 1; flex: 0 0 auto; place-items: center;
  width: 54px; height: 54px; border-radius: 18px; background: rgba(255, 255, 255, .16);
}
.account-publish-banner__copy {
  position: relative; z-index: 1; display: flex; flex: 1; min-width: 0; flex-direction: column; gap: 4px;
}
.account-publish-banner__copy strong { font-size: 1.2rem; letter-spacing: -.01em; }
.account-publish-banner__copy small { color: rgba(255, 255, 255, .85); font-size: var(--fs-sm); font-weight: 400; }
.account-publish-banner__cta {
  position: relative; z-index: 1; display: inline-flex; flex: 0 0 auto; align-items: center; gap: 8px;
  padding: 12px 22px; border-radius: var(--r-pill); white-space: nowrap;
  color: #e8434a; background: #fff; font-weight: 700; font-size: var(--fs-sm);
  transition: gap .18s ease;
}
.account-publish-banner:hover .account-publish-banner__cta { gap: 12px; }
@media (max-width: 640px) {
  .account-publish-banner { flex-wrap: wrap; }
  .account-publish-banner__cta { margin-left: 66px; }
}

.account-my-activities-link {
  display: inline-flex; align-items: center; gap: 6px; margin-top: var(--sp-3);
  color: var(--ink-soft); font-size: var(--fs-sm); font-weight: 600; text-decoration: none;
}
.account-my-activities-link:hover { color: var(--turquoise); }

/* « Mes annonces » (/compte/mes-annonces) — modernisation 18/08/2026 :
   les boutons Modifier/Booster empilés avec seulement 8px d'écart
   paraissaient collés l'un à l'autre. Espacement resserré, carte avec
   un peu de relief (ombre douce + lift au survol) pour rejoindre le
   niveau de finition déjà appliqué ailleurs (espace partenaire). */
.my-activities-list { display: flex; flex-direction: column; gap: var(--sp-4); margin-top: var(--sp-5); }
.my-activity-card {
  display: flex; align-items: center; gap: var(--sp-4); padding: var(--sp-4);
  border: 1.5px solid var(--border); border-radius: var(--r-lg); background: var(--white);
  box-shadow: 0 8px 22px rgba(20, 32, 54, .05);
  transition: box-shadow .18s ease, border-color .18s ease, transform .18s ease;
}
.my-activity-card:hover { border-color: var(--turquoise); box-shadow: 0 12px 28px rgba(20, 32, 54, .09); transform: translateY(-1px); }
.my-activity-card__thumb {
  display: grid; flex: 0 0 auto; place-items: center; width: 84px; height: 84px;
  border-radius: var(--r-md); overflow: hidden; background: var(--bg-tint);
}
.my-activity-card__thumb img { width: 100%; height: 100%; object-fit: cover; }
.my-activity-card__thumb-placeholder { font-size: 1.5rem; }
.my-activity-card__body { flex: 1; min-width: 0; }
.my-activity-card__status {
  display: inline-block; padding: 3px 10px; border-radius: var(--r-pill); font-size: var(--fs-xs);
  font-weight: 700; margin-bottom: 6px;
}
.my-activity-card__status.is-pending { color: #8a6d1f; background: rgba(230, 178, 25, .15); }
.my-activity-card__status.is-published { color: var(--success); background: rgba(27, 138, 90, .12); }
.my-activity-card__status.is-rejected { color: var(--coral); background: rgba(255, 90, 85, .12); }
.my-activity-card__status.is-info { color: var(--info, #2F6FE4); background: rgba(47, 111, 228, .12); }
.my-activity-card__status.is-muted { color: var(--ink-faint); background: var(--bg-tint-2); }
/* Utilisée sur boost-stats.blade.php à côté des dates plutôt qu'empilée
   au-dessus d'un titre de card (contexte différent de my-activity-card). */
.boost-stats-status-pill { margin-bottom: 0; }
.my-activity-card__body h2 { font-size: 1.05rem; color: var(--ink); margin: 0; overflow-wrap: anywhere; }
.my-activity-card__meta { margin-top: 4px; color: var(--ink-soft); font-size: var(--fs-xs); }
.my-activity-card__promo { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 8px; }
.my-activity-card__promo-dates { color: var(--ink-soft); font-size: var(--fs-xs); }
.my-activity-card__promo-note { margin-top: 4px; color: var(--ink-soft); font-size: var(--fs-xs); }
.my-activity-card__promo-note--danger { color: var(--coral); }
.my-activity-card__actions { display: flex; flex: 0 0 auto; flex-direction: column; gap: 12px; min-width: 130px; }
.my-activity-card__actions .btn { width: 100%; }
@media (max-width: 560px) {
  .my-activity-card { flex-wrap: wrap; }
  .my-activity-card__actions { flex-direction: row; width: 100%; min-width: 0; gap: 10px; }
  .my-activity-card__actions .btn { flex: 1; }
}

.account-dashboard__grid {
  display: grid; grid-template-columns: minmax(0, 1.65fr) minmax(290px, .75fr);
  gap: var(--sp-5); align-items: start; margin-top: var(--sp-5);
}
/* Enveloppe de la colonne de gauche (formulaire de profil + carte
   contact) : nécessaire pour que CSS Grid les empile tous les deux
   dans la même colonne au lieu de placer le 2e élément direct de
   .account-dashboard__grid dans la colonne de droite. */
.account-dashboard__main { display: grid; gap: var(--sp-5); min-width: 0; }
.account-dashboard__side { display: grid; gap: var(--sp-5); }
.account-panel {
  min-width: 0; padding: clamp(22px, 3vw, 30px); border: 1px solid var(--border);
  border-radius: 24px; background: var(--white);
  /* Ombre à deux couches (28/08/2026, "pas moderne") : une seule ombre à
     5.5% d'opacité se confondait avec la bordure fine et rendait la carte
     plate — un premier plan net proche du bord + une diffusion plus large
     donnent un vrai relief, sans changer ni la disposition ni les couleurs. */
  box-shadow: 0 1px 2px rgba(16, 36, 94, .04), 0 16px 40px rgba(16, 36, 94, .09);
}
/* "Mes données" (RGPD, export JSON) utilisait .account-card, une classe
   jamais définie en CSS — la section flottait donc sans carte du tout,
   seule note visuellement "plate" au milieu des autres. Alignée ici sur le
   même traitement que .account-panel plutôt que de dupliquer les règles. */
.account-card {
  min-width: 0; padding: clamp(22px, 3vw, 30px); border: 1px solid var(--border);
  border-radius: 24px; background: var(--white);
  box-shadow: 0 1px 2px rgba(16, 36, 94, .04), 0 16px 40px rgba(16, 36, 94, .09);
}
.account-card h2 { color: var(--heading); font-size: 1.1rem; }
.account-panel__heading { display: flex; align-items: center; gap: var(--sp-3); }
.account-panel__heading-icon {
  display: grid; flex: 0 0 auto; place-items: center; width: 48px; height: 48px;
  border-radius: 16px; color: var(--heading); background: var(--bg-tint-2);
}
.account-panel__heading p,
.account-panel__eyebrow {
  color: var(--turquoise-600); font-size: .7rem; font-weight: 800; letter-spacing: .085em; text-transform: uppercase;
}
.account-panel__heading h2 { margin-top: 3px; color: var(--heading); font-size: 1.35rem; }
.account-panel__heading--compact .account-panel__heading-icon { width: 43px; height: 43px; border-radius: 14px; }
.account-profile-form { margin-top: var(--sp-6); }
.account-profile-form__fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-4); }
.account-profile-form .field label { display: block; margin-bottom: 7px; color: var(--ink); font-size: .84rem; font-weight: 750; }
.account-profile-form .field input {
  width: 100%; min-height: 52px; padding: 0 var(--sp-4); border: 1.5px solid var(--border);
  border-radius: 14px; background: var(--bg); color: var(--ink); font: inherit;
  transition: border-color .18s ease, box-shadow .18s ease;
}
.account-profile-form .field input:focus { outline: 0; border-color: var(--turquoise); box-shadow: 0 0 0 4px rgba(22, 184, 180, .12); }
.account-profile-form .field input:disabled { color: var(--ink-soft); background: var(--bg-tint); cursor: not-allowed; }
.account-profile-form .field small { display: block; margin-top: 6px; color: var(--ink-faint); font-size: .72rem; line-height: 1.35; }
.account-profile-form__preferences { display: grid; gap: 10px; margin-top: var(--sp-6); }
.account-toggle {
  display: flex; align-items: center; gap: var(--sp-3); min-height: 72px; padding: 12px 14px;
  border: 1px solid var(--border); border-radius: 16px; background: var(--bg); cursor: pointer;
  transition: border-color .18s ease, background .18s ease;
}
.account-toggle:hover { border-color: rgba(22, 184, 180, .55); background: var(--bg-tint); }
.account-toggle__icon {
  display: grid; flex: 0 0 auto; place-items: center; width: 42px; height: 42px;
  border-radius: 14px; color: var(--heading); background: var(--bg-tint-2);
}
.account-toggle__copy { display: flex; flex: 1; min-width: 0; flex-direction: column; }
.account-toggle__copy strong { color: var(--ink); font-size: .9rem; }
.account-toggle__copy small { margin-top: 3px; color: var(--ink-soft); font-size: .75rem; line-height: 1.35; }
.account-toggle > input { position: absolute; width: 1px; height: 1px; opacity: 0; pointer-events: none; }
.account-toggle__switch {
  position: relative; flex: 0 0 auto; width: 46px; height: 26px; border-radius: 99px;
  background: var(--border); transition: background .18s ease;
}
.account-toggle__switch::after {
  content: ""; position: absolute; top: 3px; left: 3px; width: 20px; height: 20px;
  border-radius: 50%; background: var(--white); box-shadow: 0 2px 6px rgba(16, 36, 94, .2);
  transition: transform .18s ease;
}
.account-toggle > input:checked + .account-toggle__switch { background: var(--turquoise); }
.account-toggle > input:checked + .account-toggle__switch::after { transform: translateX(20px); }
.account-toggle > input:focus-visible + .account-toggle__switch { outline: 3px solid rgba(22, 184, 180, .25); outline-offset: 2px; }
.account-profile-form__submit {
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  min-height: 52px; margin-top: var(--sp-6); border-radius: var(--r-pill);
}
.account-favorites-card {
  position: relative; overflow: hidden; color: #fff;
  background: linear-gradient(145deg, #10245e, #1a3a7a 68%, #126e79 150%);
}
.account-favorites-card::after {
  content: ""; position: absolute; width: 150px; height: 150px; right: -70px; top: -80px;
  border: 28px solid rgba(255, 255, 255, .055); border-radius: 50%;
}
.account-favorites-card__illustration {
  display: grid; position: relative; z-index: 1; place-items: center; width: 58px; height: 58px;
  border-radius: 19px; color: #fff; background: rgba(255, 255, 255, .12);
}
.account-favorites-card .account-panel__eyebrow { position: relative; z-index: 1; margin-top: var(--sp-5); color: #74e4df; }
.account-favorites-card h2 { position: relative; z-index: 1; margin-top: 4px; color: #fff; font-size: 1.45rem; }
.account-favorites-card > p:not(.account-panel__eyebrow) { position: relative; z-index: 1; margin-top: var(--sp-3); color: rgba(255, 255, 255, .72); font-size: var(--fs-sm); }
.account-favorites-card .btn {
  position: relative; z-index: 1; display: flex; justify-content: center; gap: 8px; margin-top: var(--sp-5);
  border-color: rgba(255, 255, 255, .28); color: #fff; background: rgba(255, 255, 255, .08);
}
.account-favorites-card .btn:hover { background: rgba(255, 255, 255, .15); }
.account-session-card > p { margin-top: var(--sp-5); color: var(--ink-soft); font-size: var(--fs-sm); overflow-wrap: anywhere; }
.account-session-card form { margin-top: var(--sp-5); }
.account-danger-zone {
  margin-top: var(--sp-5); border: 1px solid var(--border); border-radius: 20px; background: var(--white);
  box-shadow: 0 1px 2px rgba(16, 36, 94, .04), 0 16px 40px rgba(16, 36, 94, .09);
}
.account-danger-zone > summary {
  display: flex; align-items: center; gap: var(--sp-3); min-height: 74px; padding: 14px 18px;
  list-style: none; cursor: pointer;
}
.account-danger-zone > summary::-webkit-details-marker { display: none; }
.account-danger-zone__icon {
  display: grid; flex: 0 0 auto; place-items: center; width: 42px; height: 42px;
  border-radius: 14px; color: var(--coral); background: rgba(255, 90, 85, .09);
}
.account-danger-zone > summary > span:nth-child(2) { display: flex; flex: 1; min-width: 0; flex-direction: column; }
.account-danger-zone > summary strong { color: var(--ink); font-size: .92rem; }
.account-danger-zone > summary small { margin-top: 3px; color: var(--ink-faint); font-size: .75rem; }
.account-danger-zone__chevron { flex: 0 0 auto; color: var(--ink-faint); transition: transform .18s ease; }
.account-danger-zone[open] .account-danger-zone__chevron { transform: rotate(180deg); }
.account-danger-zone__content {
  display: grid; grid-template-columns: minmax(0, 1fr) minmax(300px, .75fr); gap: var(--sp-6);
  align-items: center; padding: var(--sp-5); border-top: 1px solid var(--border); background: rgba(255, 90, 85, .035);
}
.account-danger-zone__content h2 { color: var(--coral); font-size: 1.15rem; }
.account-danger-zone__content p { margin-top: 5px; color: var(--ink-soft); font-size: var(--fs-sm); }
.account-danger-zone__content form { display: grid; justify-items: start; gap: var(--sp-3); }
.account-danger-zone__content .checkbox-row { font-size: .78rem; }
.account-danger-zone__delete { background: var(--coral); color: #fff; }

@media (max-width: 900px) {
  .account-dashboard__grid { grid-template-columns: 1fr; }
  .account-dashboard__side { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .account-danger-zone__content { grid-template-columns: 1fr; }
}
@media (max-width: 699px) {
  .account-dashboard { padding-top: var(--sp-4); }
  .account-dashboard__hero { min-height: 170px; padding: 24px 20px; border-radius: 24px; }
  .account-dashboard__avatar { width: 62px; height: 62px; border-radius: 20px; font-size: 1.4rem; }
  .account-dashboard__active-badge { display: none; }
  .account-dashboard__stats {
    display: flex; gap: var(--sp-3); overflow-x: auto; margin-inline: calc(var(--sp-4) * -1);
    padding: 0 var(--sp-4) 7px; scroll-snap-type: x mandatory; scrollbar-width: none;
  }
  .account-dashboard__stats::-webkit-scrollbar { display: none; }
  .account-stat-card { flex: 0 0 min(82vw, 330px); scroll-snap-align: start; }
  .account-profile-form__fields { grid-template-columns: 1fr; }
  .account-dashboard__side { grid-template-columns: 1fr; }
}
@media (max-width: 480px) {
  .account-dashboard__identity { align-items: flex-start; gap: var(--sp-3); }
  .account-dashboard__identity h1 { font-size: 1.65rem; }
  .account-dashboard__identity h1 + p { max-width: 210px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .account-panel { padding: 20px; border-radius: 20px; }
  .account-toggle { align-items: flex-start; }
  .account-toggle__icon { display: none; }
  .account-toggle__switch { margin-top: 3px; }
  .account-profile-form__submit { width: 100%; }
  .account-danger-zone__content { padding: var(--sp-4); }
}

/* Pages Contact et FAQ — centre d'aide moderne, lisible et organisé en
   colonnes sur desktop. Les contenus et formulaires restent administrables. */
.help-page {
  max-width: 1180px; padding-top: var(--sp-8); padding-bottom: clamp(52px, 7vw, 90px);
}
.help-hero {
  position: relative; display: flex; align-items: center; justify-content: space-between;
  min-height: 280px; overflow: hidden; padding: clamp(34px, 5vw, 62px);
  border-radius: 32px; color: #fff;
  background: linear-gradient(135deg, #10245e 0%, #183b7b 60%, #0c737c 145%);
  box-shadow: 0 24px 64px rgba(16, 36, 94, .16);
}
.help-hero::before {
  content: ""; position: absolute; width: 330px; height: 330px; right: -95px; top: -140px;
  border: 62px solid rgba(255, 255, 255, .045); border-radius: 50%; pointer-events: none;
}
.help-hero::after {
  content: ""; position: absolute; inset: 0; pointer-events: none;
  background: radial-gradient(circle at 82% 75%, rgba(70, 218, 210, .18), transparent 29%);
}
.help-hero__content { position: relative; z-index: 2; width: min(100%, 720px); }
.help-eyebrow {
  color: var(--turquoise-600); font-size: .72rem; font-weight: 850;
  letter-spacing: .11em; text-transform: uppercase;
}
.help-hero .help-eyebrow { color: #78e4df; }
.help-hero h1 {
  max-width: 720px; margin-top: 10px; color: #fff;
  font-size: clamp(2.15rem, 4.5vw, 3.7rem); line-height: 1.05; letter-spacing: -.045em; text-wrap: balance;
}
.help-hero__content > p:last-of-type {
  max-width: 640px; margin-top: var(--sp-4); color: rgba(255, 255, 255, .76);
  font-size: clamp(.96rem, 1.5vw, 1.08rem); line-height: 1.65;
}
.help-hero__visual { position: relative; z-index: 1; flex: 0 0 190px; height: 160px; margin-left: var(--sp-8); }
.help-hero__bubble { position: absolute; display: grid; place-items: center; border-radius: 32px; }
.help-hero__bubble--back {
  width: 112px; height: 92px; right: 4px; top: 0;
  border: 1px solid rgba(255, 255, 255, .14); background: rgba(255, 255, 255, .08);
  transform: rotate(9deg);
}
.help-hero__bubble--front {
  width: 128px; height: 108px; left: 0; bottom: 0; color: #fff;
  background: rgba(255, 255, 255, .14); box-shadow: 0 18px 44px rgba(3, 15, 47, .22);
  backdrop-filter: blur(9px);
}
.help-hero__bubble--front::after {
  content: ""; position: absolute; left: 20px; bottom: -13px; width: 28px; height: 28px;
  border-radius: 4px; background: inherit; transform: rotate(45deg);
}
.help-hero__bubble--front svg { position: relative; z-index: 1; width: 52px; height: 52px; }
.help-hero__bubble--question { font-size: 3.8rem; font-weight: 850; line-height: 1; }
.help-section-heading h2 { margin-top: 5px; color: var(--heading); font-size: clamp(1.6rem, 2.6vw, 2.15rem); letter-spacing: -.03em; }
.help-section-heading > p:last-child { max-width: 660px; margin-top: 8px; color: var(--ink-soft); font-size: var(--fs-sm); }
.help-section-heading--row { display: flex; align-items: flex-end; justify-content: space-between; gap: var(--sp-4); }

/* Contact */
.contact-dashboard {
  display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(390px, .85fr);
  align-items: start; gap: var(--sp-6); margin-top: var(--sp-6);
}
.contact-dashboard__info,
.contact-form-card {
  min-width: 0; padding: clamp(24px, 3.5vw, 38px); border: 1px solid var(--border);
  border-radius: 26px; background: var(--white); box-shadow: 0 12px 36px rgba(16, 36, 94, .055);
}
.contact-topic-grid { display: grid; gap: 11px; margin-top: var(--sp-6); }
.contact-topic-card {
  display: flex; align-items: center; gap: var(--sp-4); min-height: 88px; padding: 15px;
  border: 1px solid var(--border); border-radius: 18px; background: var(--bg);
}
.contact-topic-card__icon {
  display: grid; flex: 0 0 auto; place-items: center; width: 48px; height: 48px;
  border-radius: 15px; color: var(--heading); background: var(--bg-tint-2);
}
.contact-topic-card:nth-child(2) .contact-topic-card__icon { color: var(--turquoise-600); background: rgba(22, 184, 180, .1); }
.contact-topic-card:nth-child(3) .contact-topic-card__icon { color: var(--coral); background: rgba(255, 90, 85, .09); }
.contact-topic-card__icon svg { width: 23px; height: 23px; }
.contact-topic-card strong, .contact-topic-card small { display: block; }
.contact-topic-card strong { color: var(--ink); font-size: .92rem; }
.contact-topic-card small { margin-top: 3px; color: var(--ink-soft); font-size: .77rem; line-height: 1.4; }
.contact-editorial {
  display: flex; align-items: flex-start; gap: var(--sp-3); margin-top: var(--sp-6); padding: 16px;
  border-radius: 17px; color: var(--ink-soft); background: rgba(22, 184, 180, .07);
}
.contact-editorial__icon { flex: 0 0 auto; color: var(--turquoise-600); }
.contact-editorial__icon svg { width: 22px; height: 22px; }
.contact-editorial__content { white-space: pre-line; font-size: var(--fs-sm); line-height: 1.65; }
.contact-faq-link {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-4);
  margin-top: var(--sp-5); padding: 16px 18px; border: 1px solid var(--border); border-radius: 17px;
  color: var(--ink); background: var(--white); transition: transform .18s ease, border-color .18s ease, box-shadow .18s ease;
}
.contact-faq-link:hover { border-color: rgba(22, 184, 180, .5); transform: translateY(-2px); box-shadow: 0 10px 24px rgba(16, 36, 94, .07); }
.contact-faq-link span { display: flex; flex-direction: column; }
.contact-faq-link strong { font-size: .9rem; }
.contact-faq-link small { margin-top: 3px; color: var(--ink-soft); font-size: .75rem; }
.contact-faq-link > svg { flex: 0 0 auto; width: 20px; height: 20px; color: var(--turquoise-600); }
.contact-form-card { position: sticky; top: 108px; }
.contact-form-card__heading { display: flex; align-items: center; gap: var(--sp-3); }
.contact-form-card__icon {
  display: grid; flex: 0 0 auto; place-items: center; width: 52px; height: 52px;
  border-radius: 17px; color: var(--heading); background: var(--bg-tint-2);
}
.contact-form-card__icon svg { width: 25px; height: 25px; }
.contact-form-card__heading h2 { margin-top: 3px; color: var(--heading); font-size: 1.55rem; }
.contact-form-card__intro { margin-top: var(--sp-4); color: var(--ink-soft); font-size: var(--fs-sm); line-height: 1.55; }
.contact-form-card .contact-form { margin-top: var(--sp-6); }
.contact-form-card .btn,
.faq-contact-card .btn { min-height: 54px; border-radius: var(--r-pill); font-weight: 800; box-shadow: 0 10px 24px rgba(255, 90, 85, .17); }
.contact-form-card__privacy {
  display: flex; justify-content: center; align-items: center; gap: 7px; margin-top: var(--sp-4);
  color: var(--ink-faint); font-size: .7rem; text-align: center;
}
.contact-form-card__privacy svg { flex: 0 0 auto; width: 15px; height: 15px; color: var(--turquoise-600); }

/* FAQ */
.help-hero--faq { min-height: 330px; }
.faq-search {
  display: flex; align-items: center; width: min(100%, 650px); min-height: 62px; margin-top: var(--sp-7);
  padding: 0 18px; border: 1px solid rgba(255, 255, 255, .2); border-radius: 18px;
  background: rgba(255, 255, 255, .96); box-shadow: 0 18px 42px rgba(4, 18, 52, .18);
  transition: box-shadow .18s ease, transform .18s ease;
}
.faq-search:focus-within { box-shadow: 0 20px 48px rgba(4, 18, 52, .24), 0 0 0 4px rgba(120, 228, 223, .2); transform: translateY(-1px); }
.faq-search > svg { flex: 0 0 auto; width: 23px; height: 23px; color: var(--heading); }
.faq-search input { flex: 1; min-width: 0; height: 60px; padding: 0 14px; border: 0; outline: 0; color: var(--ink); background: transparent; font: inherit; font-size: .95rem; }
.faq-search input::placeholder { color: var(--ink-faint); }
.faq-search__shortcut { padding: 5px 8px; border: 1px solid var(--border); border-radius: 8px; color: var(--ink-faint); background: var(--bg); font-size: .68rem; font-weight: 750; }
.faq-dashboard {
  display: grid; grid-template-columns: minmax(0, 1.25fr) minmax(340px, .65fr);
  align-items: start; gap: var(--sp-6); margin-top: var(--sp-6);
}
.faq-dashboard__questions {
  min-width: 0; padding: clamp(24px, 3.5vw, 38px); border: 1px solid var(--border);
  border-radius: 26px; background: var(--white); box-shadow: 0 12px 36px rgba(16, 36, 94, .055);
}
.faq-count {
  flex: 0 0 auto; padding: 8px 12px; border-radius: var(--r-pill);
  color: var(--ink-soft); background: var(--bg-tint); font-size: .75rem; font-weight: 650;
}
.faq-count strong { color: var(--heading); }
.help-faq-list { display: grid; gap: 11px; margin-top: var(--sp-6); }
.help-faq-item { border: 1px solid var(--border); border-radius: 18px; background: var(--bg); overflow: hidden; transition: border-color .18s ease, background .18s ease, box-shadow .18s ease; }
.help-faq-item:hover { border-color: rgba(22, 184, 180, .42); }
.help-faq-item[open] { border-color: rgba(22, 184, 180, .55); background: var(--white); box-shadow: 0 10px 28px rgba(16, 36, 94, .065); }
.help-faq-item[hidden] { display: none; }
.help-faq-item > summary { display: flex; align-items: center; gap: var(--sp-3); min-height: 74px; padding: 15px 17px; list-style: none; cursor: pointer; }
.help-faq-item > summary::-webkit-details-marker { display: none; }
.help-faq-item__number { flex: 0 0 auto; color: var(--turquoise-600); font-size: .7rem; font-weight: 850; letter-spacing: .06em; }
.help-faq-item__question { flex: 1; min-width: 0; color: var(--ink); font-size: .94rem; font-weight: 750; line-height: 1.4; }
.help-faq-item__toggle { display: grid; flex: 0 0 auto; place-items: center; width: 36px; height: 36px; border-radius: 50%; color: var(--heading); background: var(--white); transition: color .18s ease, background .18s ease, transform .18s ease; }
.help-faq-item__toggle svg { width: 18px; height: 18px; }
.help-faq-item[open] .help-faq-item__toggle { color: #fff; background: var(--heading); transform: rotate(180deg); }
.help-faq-item__answer { padding: 0 66px 20px 50px; color: var(--ink-soft); font-size: var(--fs-sm); line-height: 1.7; white-space: pre-line; }
.faq-contact-card {
  position: sticky; top: 108px; min-width: 0; padding: clamp(24px, 3.2vw, 34px);
  border: 1px solid var(--border); border-radius: 26px; background: var(--white);
  box-shadow: 0 12px 36px rgba(16, 36, 94, .055);
}
.faq-contact-card__heading { padding-bottom: var(--sp-5); border-bottom: 1px solid var(--border); }
.faq-contact-card__icon {
  display: grid; place-items: center; width: 54px; height: 54px; margin-bottom: var(--sp-5);
  border-radius: 18px; color: #fff; background: linear-gradient(145deg, var(--heading), #13717a);
  box-shadow: 0 10px 22px rgba(16, 36, 94, .15);
}
.faq-contact-card__icon svg { width: 26px; height: 26px; }
.faq-contact-card__heading h2 { margin-top: 5px; color: var(--heading); font-size: 1.45rem; letter-spacing: -.025em; }
.faq-contact-card__heading > p:last-child { margin-top: 8px; color: var(--ink-soft); font-size: var(--fs-sm); }
.faq-contact-card .contact-form { margin-top: var(--sp-5); }
.faq-empty-state,
.faq-no-results { padding: 48px 20px; color: var(--ink-soft); text-align: center; }
.faq-empty-state > span,
.faq-no-results > span { display: grid; place-items: center; width: 58px; height: 58px; margin: 0 auto var(--sp-4); border-radius: 19px; color: var(--heading); background: var(--bg-tint-2); font-size: 1.5rem; font-weight: 850; }
.faq-no-results > span svg { width: 27px; height: 27px; }
.faq-empty-state h3,
.faq-no-results h3 { color: var(--heading); font-size: 1.12rem; }
.faq-empty-state p,
.faq-no-results p { margin-top: 5px; font-size: var(--fs-sm); }

@media (max-width: 940px) {
  .contact-dashboard,
  .faq-dashboard { grid-template-columns: 1fr; }
  .contact-form-card,
  .faq-contact-card { position: static; }
  .contact-topic-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .contact-topic-card { align-items: flex-start; flex-direction: column; }
}
@media (max-width: 699px) {
  .help-page { padding-top: var(--sp-4); }
  .help-hero { min-height: 270px; padding: 28px 22px; border-radius: 24px; }
  .help-hero--faq { min-height: 320px; }
  .help-hero__content { width: 100%; }
  .help-hero__visual { display: none; }
  .faq-search { min-height: 56px; margin-top: var(--sp-6); border-radius: 16px; }
  .faq-search input { height: 54px; }
  .contact-topic-grid { grid-template-columns: 1fr; }
  .contact-topic-card { align-items: center; flex-direction: row; }
  .contact-dashboard__info,
  .contact-form-card,
  .faq-dashboard__questions,
  .faq-contact-card { padding: 22px; border-radius: 22px; }
  .help-faq-item__answer { padding-right: 20px; padding-left: 46px; }
}
@media (max-width: 440px) {
  .help-hero h1 { font-size: 2rem; }
  .help-section-heading--row { align-items: flex-start; flex-direction: column; }
  .faq-search__shortcut { display: none; }
  .help-faq-item > summary { gap: 10px; min-height: 70px; padding: 13px; }
  .help-faq-item__number { display: none; }
  .help-faq-item__answer { padding: 0 16px 18px; }
}

/* Consentement cookies : choix symétriques, visible sans bloquer l'accès au
   contenu et réouvrable depuis le pied de page. */
.cookie-consent {
  position: fixed; z-index: 1200; left: max(18px, env(safe-area-inset-left)); right: max(18px, env(safe-area-inset-right));
  bottom: max(18px, env(safe-area-inset-bottom)); display: grid;
  grid-template-columns: auto minmax(0, 1fr) auto; align-items: center; gap: var(--sp-4);
  width: min(1040px, calc(100% - 36px)); margin-inline: auto; padding: 18px;
  border: 1px solid rgba(255, 255, 255, .14); border-radius: 22px; color: #fff;
  background: rgba(13, 29, 72, .97); box-shadow: 0 24px 70px rgba(6, 15, 40, .34);
  backdrop-filter: blur(16px);
}
.cookie-consent[hidden], .cookie-consent-toast[hidden] { display: none; }
.cookie-consent__icon {
  display: grid; place-items: center; width: 52px; height: 52px; border-radius: 17px;
  color: #78e4df; background: rgba(255, 255, 255, .1);
}
.cookie-consent__icon svg { width: 27px; height: 27px; }
.cookie-consent__body h2 { color: #fff; font-size: 1.05rem; }
.cookie-consent__body p { margin-top: 3px; color: rgba(255, 255, 255, .72); font-size: .78rem; line-height: 1.48; }
.cookie-consent__body a { display: inline-block; margin-top: 5px; color: #7ce3df; font-size: .73rem; font-weight: 750; text-decoration: underline; text-underline-offset: 3px; }
.cookie-consent__actions { display: flex; gap: 9px; }
.cookie-consent__actions .btn { min-width: 132px; min-height: 46px; border-radius: var(--r-pill); font-size: .78rem; font-weight: 800; }
.cookie-consent__actions .btn-outline { border-color: rgba(255, 255, 255, .45); color: #fff; background: transparent; }
.cookie-consent__actions .btn-outline:hover { border-color: #fff; background: rgba(255, 255, 255, .08); }
.cookie-consent-toast {
  position: fixed; z-index: 1210; left: 50%; bottom: 24px; transform: translateX(-50%);
  padding: 11px 16px; border-radius: var(--r-pill); color: #fff; background: var(--heading);
  box-shadow: 0 12px 28px rgba(16, 36, 94, .22); font-size: .78rem; font-weight: 750;
}
@media (max-width: 760px) {
  .cookie-consent { grid-template-columns: auto minmax(0, 1fr); }
  .cookie-consent__actions { grid-column: 1 / -1; }
  .cookie-consent__actions .btn { flex: 1; }
}
@media (max-width: 480px) {
  .cookie-consent { left: 10px; right: 10px; bottom: max(10px, env(safe-area-inset-bottom)); width: calc(100% - 20px); padding: 15px; border-radius: 19px; }
  .cookie-consent__icon { display: none; }
  .cookie-consent__body { grid-column: 1 / -1; }
  .cookie-consent__actions { flex-direction: column-reverse; }
  .cookie-consent__actions .btn { width: 100%; }
}

/* Pages éditoriales et légales : les titres numérotés administrables sont
   transformés en sommaire et cartes sans modifier le contenu enregistré. */
.static-page {
  max-width: 1180px; padding-top: var(--sp-8); padding-bottom: clamp(52px, 7vw, 92px);
}
.static-page-hero {
  position: relative; display: flex; align-items: center; justify-content: space-between;
  min-height: 300px; overflow: hidden; padding: clamp(34px, 5vw, 62px);
  border-radius: 32px; color: #fff;
  background: linear-gradient(135deg, #10245e 0%, #1b3978 61%, #0b737c 145%);
  box-shadow: 0 24px 64px rgba(16, 36, 94, .16);
}
.static-page-hero::before,
.static-page-hero::after { content: ""; position: absolute; border-radius: 50%; pointer-events: none; }
.static-page-hero::before {
  width: 350px; height: 350px; right: -115px; top: -170px;
  border: 68px solid rgba(255, 255, 255, .045);
}
.static-page-hero::after {
  width: 270px; height: 270px; right: 11%; bottom: -205px;
  background: rgba(36, 201, 193, .12);
}
.static-page-hero--cookies { background: linear-gradient(135deg, #11245f 0%, #18477c 62%, #147c77 145%); }
.static-page-hero--confidentialite { background: linear-gradient(135deg, #10245e 0%, #283d83 65%, #176777 145%); }
.static-page-hero--a-propos,
.static-page-hero--proposer-une-activite { background: linear-gradient(135deg, #10245e 0%, #153b77 54%, #098a86 145%); }
.static-page-hero__content { position: relative; z-index: 2; width: min(100%, 760px); }
.static-page-eyebrow {
  color: var(--turquoise-600); font-size: .71rem; font-weight: 850;
  letter-spacing: .11em; text-transform: uppercase;
}
.static-page-hero .static-page-eyebrow { color: #7ae5df; }
.static-page-hero h1 {
  max-width: 800px; margin-top: 10px; color: #fff;
  font-size: clamp(2.25rem, 4.8vw, 4rem); line-height: 1.04; letter-spacing: -.048em; text-wrap: balance;
}
.static-page-hero__summary {
  max-width: 660px; margin-top: var(--sp-4); color: rgba(255, 255, 255, .76);
  font-size: clamp(.97rem, 1.55vw, 1.1rem); line-height: 1.65;
}
.static-page-hero__meta { display: flex; flex-wrap: wrap; gap: 9px; margin-top: var(--sp-6); }
.static-page-hero__meta span {
  display: inline-flex; align-items: center; gap: 7px; min-height: 38px; padding: 8px 12px;
  border: 1px solid rgba(255, 255, 255, .16); border-radius: var(--r-pill);
  color: rgba(255, 255, 255, .86); background: rgba(255, 255, 255, .08);
  font-size: .73rem; font-weight: 700; backdrop-filter: blur(8px);
}
.static-page-hero__meta svg { width: 16px; height: 16px; color: #79e4df; }
.static-page-hero__visual { position: relative; z-index: 1; flex: 0 0 195px; height: 175px; margin-left: var(--sp-8); }
.static-page-hero__shape { position: absolute; display: grid; place-items: center; border-radius: 34px; }
.static-page-hero__shape--back {
  width: 120px; height: 110px; right: 0; top: 0; transform: rotate(9deg);
  border: 1px solid rgba(255, 255, 255, .13); background: rgba(255, 255, 255, .07);
}
.static-page-hero__shape--front {
  width: 132px; height: 132px; left: 0; bottom: 0; color: #fff;
  border: 1px solid rgba(255, 255, 255, .14); background: rgba(255, 255, 255, .14);
  box-shadow: 0 22px 48px rgba(3, 15, 47, .24); backdrop-filter: blur(10px);
}
.static-page-hero__shape--front svg { width: 58px; height: 58px; }

.static-document-layout {
  display: grid; grid-template-columns: minmax(245px, .55fr) minmax(0, 1.45fr);
  align-items: start; gap: var(--sp-6); margin-top: var(--sp-6);
}
.static-document-nav { position: sticky; top: 108px; display: grid; gap: var(--sp-4); min-width: 0; }
.static-document-nav__card,
.static-document-help,
.static-document-intro,
.static-document-section,
.static-editorial-card,
.static-editorial-aside {
  border: 1px solid var(--border); border-radius: 24px; background: var(--white);
  box-shadow: 0 11px 34px rgba(16, 36, 94, .055);
}
.static-document-nav__card { padding: 22px; }
.static-document-nav__card nav { display: grid; gap: 3px; margin-top: var(--sp-4); }
.static-document-nav__card nav a {
  display: grid; grid-template-columns: 29px minmax(0, 1fr); align-items: center; gap: 8px;
  min-height: 43px; padding: 7px 9px; border-radius: 12px; color: var(--ink-soft);
  font-size: .76rem; font-weight: 650; line-height: 1.3; transition: color .18s ease, background .18s ease, transform .18s ease;
}
.static-document-nav__card nav a:hover { color: var(--heading); background: var(--bg-tint); transform: translateX(2px); }
.static-document-nav__card nav a span {
  display: grid; place-items: center; width: 29px; height: 29px; border-radius: 9px;
  color: var(--turquoise-600); background: rgba(22, 184, 180, .09); font-size: .61rem; font-weight: 850;
}
.static-document-help {
  position: relative; overflow: hidden; padding: 22px; color: #fff;
  background: linear-gradient(145deg, #10245e, #1b3978 70%, #116f79 150%);
}
.static-document-help::after {
  content: ""; position: absolute; width: 120px; height: 120px; right: -66px; top: -60px;
  border: 24px solid rgba(255, 255, 255, .05); border-radius: 50%;
}
.static-document-help__icon {
  display: grid; position: relative; z-index: 1; place-items: center; width: 46px; height: 46px;
  border-radius: 15px; color: #fff; background: rgba(255, 255, 255, .11);
}
.static-document-help__icon svg { width: 22px; height: 22px; }
.static-document-help strong { display: block; position: relative; z-index: 1; margin-top: var(--sp-4); color: #fff; font-size: 1.05rem; }
.static-document-help p { position: relative; z-index: 1; margin-top: 5px; color: rgba(255, 255, 255, .68); font-size: .76rem; line-height: 1.5; }
.static-document-help a { display: inline-flex; position: relative; z-index: 1; align-items: center; gap: 6px; margin-top: var(--sp-4); color: #7ae5df; font-size: .78rem; font-weight: 800; }
.static-document-help a span { transition: transform .18s ease; }
.static-document-help a:hover span { transform: translateX(3px); }
.static-document-content { display: grid; gap: var(--sp-4); min-width: 0; }
.static-document-intro { padding: clamp(22px, 3vw, 30px); border-left: 4px solid var(--turquoise); }
.static-document-intro p { color: var(--ink-soft); font-size: .92rem; line-height: 1.75; }
.static-document-intro p + p { margin-top: var(--sp-3); }
.static-document-section { scroll-margin-top: 112px; overflow: hidden; }
.static-document-section > header {
  display: flex; align-items: center; gap: var(--sp-3); min-height: 82px; padding: 18px clamp(20px, 3vw, 30px);
  border-bottom: 1px solid var(--border); background: linear-gradient(180deg, var(--white), var(--bg));
}
.static-document-section > header > span {
  display: grid; flex: 0 0 auto; place-items: center; width: 43px; height: 43px;
  border-radius: 14px; color: var(--turquoise-600); background: rgba(22, 184, 180, .1);
  font-size: .7rem; font-weight: 900; letter-spacing: .05em;
}
.static-document-section h2 { color: var(--heading); font-size: clamp(1.08rem, 2vw, 1.32rem); letter-spacing: -.02em; }
.static-document-section__body { padding: clamp(22px, 3vw, 30px); }
.static-document-section__body p { color: var(--ink-soft); font-size: .9rem; line-height: 1.78; overflow-wrap: anywhere; }
.static-document-section__body p + p,
.static-document-section__body p + ul,
.static-document-section__body ul + p { margin-top: var(--sp-4); }
.static-document-section__body ul,
.static-editorial-card ul { display: grid; gap: 10px; }
.static-document-section__body li,
.static-editorial-card li {
  position: relative; padding-left: 27px; color: var(--ink-soft); font-size: .88rem; line-height: 1.55;
}
.static-document-section__body li::before,
.static-editorial-card li::before {
  content: ""; position: absolute; left: 2px; top: .52em; width: 9px; height: 9px;
  border: 2px solid var(--white); border-radius: 50%; background: var(--turquoise); box-shadow: 0 0 0 3px rgba(22, 184, 180, .13);
}

.static-editorial-layout {
  display: grid; grid-template-columns: minmax(0, 1.35fr) minmax(320px, .65fr);
  align-items: start; gap: var(--sp-6); margin-top: var(--sp-6);
}
.static-editorial-story { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: var(--sp-4); }
.static-editorial-card { min-width: 0; padding: clamp(22px, 3vw, 30px); }
.static-editorial-card--lead { grid-column: 1 / -1; border-left: 4px solid var(--turquoise); }
.static-editorial-card p:not(.static-page-eyebrow) { color: var(--ink-soft); font-size: .91rem; line-height: 1.75; }
.static-editorial-card--lead p { color: var(--ink); font-size: 1.02rem; }
.static-editorial-card .static-page-eyebrow { margin-bottom: var(--sp-4); }
.static-editorial-aside { position: sticky; top: 108px; padding: clamp(24px, 3vw, 32px); }
.static-editorial-aside__icon {
  display: grid; place-items: center; width: 56px; height: 56px; margin-bottom: var(--sp-5);
  border-radius: 18px; color: #fff; background: linear-gradient(145deg, var(--heading), #16757b);
  box-shadow: 0 11px 24px rgba(16, 36, 94, .16);
}
.static-editorial-aside__icon svg { width: 28px; height: 28px; }
.static-editorial-aside h2 { margin-top: 5px; color: var(--heading); font-size: 1.5rem; letter-spacing: -.03em; }
.static-editorial-aside > p:not(.static-page-eyebrow) { margin-top: var(--sp-3); color: var(--ink-soft); font-size: .85rem; line-height: 1.6; }
.static-editorial-aside .btn { display: flex; gap: 8px; min-height: 52px; margin-top: var(--sp-5); border-radius: var(--r-pill); font-weight: 800; }
.static-editorial-aside .btn svg { width: 18px; height: 18px; transition: transform .18s ease; }
.static-editorial-aside .btn:hover svg { transform: translateX(3px); }

@media (max-width: 940px) {
  .static-document-layout { grid-template-columns: 1fr; }
  .static-document-nav { position: static; grid-template-columns: minmax(0, 1fr) minmax(250px, .55fr); }
  .static-document-nav__card nav { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .static-editorial-layout { grid-template-columns: 1fr; }
  .static-editorial-aside { position: static; }
}
@media (max-width: 699px) {
  .static-page { padding-top: var(--sp-4); }
  .static-page-hero { min-height: 280px; padding: 28px 22px; border-radius: 24px; }
  .static-page-hero h1 { font-size: clamp(2rem, 9vw, 2.7rem); }
  .static-page-hero__visual { display: none; }
  .static-document-nav { display: block; }
  .static-document-help { margin-top: var(--sp-4); }
  .static-document-nav__card nav { grid-template-columns: 1fr; max-height: 260px; overflow-y: auto; }
  .static-document-nav__card,
  .static-document-help,
  .static-document-intro,
  .static-document-section,
  .static-editorial-card,
  .static-editorial-aside { border-radius: 20px; }
  .static-editorial-story { grid-template-columns: 1fr; }
  .static-editorial-card--lead { grid-column: auto; }
}
@media (max-width: 440px) {
  .static-page-hero__meta { align-items: stretch; flex-direction: column; }
  .static-page-hero__meta span { width: fit-content; }
  .static-document-section > header { align-items: flex-start; }
  .static-document-section > header > span { width: 38px; height: 38px; border-radius: 12px; }
}

/* Pagination publique — composant GoLoisir partagé par recherche, catégories et pages géographiques. */
.site-pagination {
  display: flex; align-items: center; justify-content: space-between; gap: var(--sp-5);
  margin-top: var(--sp-8); padding: 16px 18px; border: 1px solid var(--border); border-radius: 22px;
  background: var(--white); box-shadow: 0 10px 30px rgba(16, 36, 94, .06);
}
.site-pagination__summary { margin: 0; color: var(--ink-soft); font-size: .82rem; font-weight: 700; white-space: nowrap; }
.site-pagination__controls { display: flex; align-items: center; gap: 8px; }
.site-pagination__pages { display: flex; align-items: center; gap: 6px; }
.site-pagination__direction,
.site-pagination__page,
.site-pagination__ellipsis {
  display: inline-flex; align-items: center; justify-content: center; min-width: 42px; height: 42px;
  border: 1px solid var(--border); border-radius: 14px; color: var(--heading); background: var(--white);
  font-size: .8rem; font-weight: 800; line-height: 1; transition: color .18s ease, border-color .18s ease, background .18s ease, transform .18s ease;
}
.site-pagination__direction { gap: 6px; min-width: auto; padding: 0 14px; }
.site-pagination__direction svg { width: 17px; height: 17px; fill: none; stroke: currentColor; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
.site-pagination__direction:hover,
.site-pagination__page:hover { color: var(--turquoise-600); border-color: rgba(22, 184, 180, .5); background: rgba(22, 184, 180, .07); transform: translateY(-1px); }
.site-pagination__page.is-current { color: #fff; border-color: var(--navy); background: var(--navy); box-shadow: 0 7px 16px rgba(16, 36, 94, .18); }
.site-pagination__direction.is-disabled { color: #a9b1c5; background: var(--bg); cursor: not-allowed; }
.site-pagination__ellipsis { min-width: 24px; border-color: transparent; background: transparent; color: var(--ink-soft); }
@media (max-width: 699px) {
  .site-pagination { align-items: stretch; flex-direction: column; gap: 13px; margin-top: var(--sp-6); padding: 14px; border-radius: 19px; }
  .site-pagination__summary { text-align: center; white-space: normal; }
  .site-pagination__controls { justify-content: space-between; }
  .site-pagination__direction { flex: 0 1 auto; padding-inline: 11px; }
}
@media (max-width: 390px) {
  .site-pagination__direction span { display: none; }
  .site-pagination__direction { width: 42px; padding: 0; }
}

/* Page « Proposer une activité » : parcours vers l'espace professionnel. */
.pro-listing { margin-top: var(--sp-6); }
.pro-listing__heading {
  display: flex; align-items: flex-end; justify-content: space-between; gap: var(--sp-8);
  padding: clamp(26px, 4vw, 40px); border: 1px solid var(--border); border-radius: 28px;
  background: var(--white); box-shadow: 0 13px 38px rgba(16, 36, 94, .06);
}
.pro-listing__heading > div:first-child { max-width: 700px; }
.pro-listing__heading h2 { margin-top: 7px; color: var(--heading); font-size: clamp(1.75rem, 3.2vw, 2.5rem); letter-spacing: -.04em; }
.pro-listing__heading p:not(.static-page-eyebrow) { margin-top: 10px; color: var(--ink-soft); font-size: .94rem; line-height: 1.7; }
.pro-listing__actions { display: flex; flex: 0 0 auto; gap: 10px; }
.pro-listing__actions .btn { min-height: 50px; border-radius: var(--r-pill); white-space: nowrap; }
.pro-listing__actions svg { width: 18px; height: 18px; }
.pro-listing__steps { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: var(--sp-4); margin-top: var(--sp-4); }
.pro-listing-card {
  position: relative; display: flex; min-width: 0; min-height: 325px; flex-direction: column;
  overflow: hidden; padding: 27px; border: 1px solid var(--border); border-radius: 24px;
  background: var(--white); box-shadow: 0 10px 30px rgba(16, 36, 94, .05);
  transition: transform .2s ease, border-color .2s ease, box-shadow .2s ease;
}
.pro-listing-card:hover { transform: translateY(-3px); border-color: rgba(22, 184, 180, .4); box-shadow: 0 17px 38px rgba(16, 36, 94, .09); }
.pro-listing-card__number { position: absolute; top: 21px; right: 23px; color: #cbd3e6; font-size: .72rem; font-weight: 900; letter-spacing: .1em; }
.pro-listing-card__icon { display: grid; place-items: center; width: 54px; height: 54px; border-radius: 17px; color: #fff; background: linear-gradient(145deg, var(--heading), #11777c); box-shadow: 0 10px 23px rgba(16, 36, 94, .16); }
.pro-listing-card__icon svg { width: 27px; height: 27px; }
.pro-listing-card h3 { margin-top: var(--sp-5); color: var(--heading); font-size: 1.2rem; letter-spacing: -.025em; }
.pro-listing-card p { margin-top: 9px; color: var(--ink-soft); font-size: .84rem; line-height: 1.65; }
.pro-listing-card > a { display: inline-flex; align-items: center; gap: 7px; width: fit-content; margin-top: auto; padding-top: var(--sp-5); color: var(--turquoise-600); font-size: .8rem; font-weight: 850; }
.pro-listing-card > a span { transition: transform .18s ease; }
.pro-listing-card > a:hover span { transform: translateX(3px); }
.pro-listing__trust { display: flex; align-items: flex-start; gap: var(--sp-4); margin-top: var(--sp-4); padding: 23px 26px; border: 1px solid rgba(22, 184, 180, .22); border-radius: 22px; background: rgba(22, 184, 180, .07); }
.pro-listing__trust-icon { display: grid; flex: 0 0 auto; place-items: center; width: 47px; height: 47px; border-radius: 15px; color: var(--turquoise-600); background: var(--white); }
.pro-listing__trust-icon svg { width: 24px; height: 24px; }
.pro-listing__trust strong { color: var(--heading); font-size: .94rem; }
.pro-listing__trust p { margin-top: 4px; color: var(--ink-soft); font-size: .8rem; line-height: 1.6; }
@media (max-width: 940px) {
  .pro-listing__heading { align-items: flex-start; flex-direction: column; }
  .pro-listing__steps { grid-template-columns: 1fr; }
  .pro-listing-card { min-height: 0; }
}
@media (max-width: 699px) {
  .pro-listing__heading { padding: 23px 20px; border-radius: 22px; }
  .pro-listing__actions { width: 100%; flex-direction: column; }
  .pro-listing__actions .btn { width: 100%; }
  .pro-listing-card { padding: 23px 20px; border-radius: 21px; }
  .pro-listing__trust { padding: 20px; }
}

/* Personnalisation « Ma famille » (12/09/2026) — assistant en 5 étapes,
   cf. resources/views/site/account/profile.blade.php + site.js. */
.account-toggle--compact { padding: 10px 14px; margin-bottom: var(--sp-2); }
.account-toggle--compact .account-toggle__switch { width: 38px; height: 22px; }
.account-toggle--compact .account-toggle__switch::after { width: 16px; height: 16px; }
.account-toggle--compact > input:checked + .account-toggle__switch::after { transform: translateX(16px); }

.family-wizard fieldset { border: none; margin: 0; padding: 0; }
.family-wizard legend { font-weight: 800; font-size: var(--fs-md); color: var(--heading); padding: 0; margin-bottom: var(--sp-3); }

.family-wizard__progress { display: flex; gap: 8px; margin-bottom: var(--sp-4); }
.family-wizard__progress span { flex: 1; height: 4px; border-radius: 999px; background: var(--border); }
.family-wizard__progress span[aria-current="step"], .family-wizard__progress span.is-done { background: var(--turquoise); }

.chip-group { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: var(--sp-3); }

.family-wizard__summary { display: flex; flex-direction: column; gap: 6px; font-size: var(--fs-sm); color: var(--ink); }
.family-wizard__summary p { margin: 0; }
.family-wizard__summary strong { color: var(--heading); }

.family-wizard__nav { display: flex; justify-content: space-between; gap: 12px; margin-top: var(--sp-4); }
.family-wizard__nav .btn { flex: 0 0 auto; }
/* Bug corrigé (13/09/2026) : .btn { display: inline-flex } a la même
   spécificité que la règle native [hidden] { display: none } du
   navigateur — chargée après, elle l'emportait, donc #family-prev/
   #family-next/#family-submit restaient visibles en permanence quel que
   soit l'état "hidden" posé par site.js (Précédent/Suivant/Enregistrer
   apparaissaient tous en même temps, peu importe l'étape). */
.family-wizard__nav .btn[hidden] { display: none; }
