/* ==========================================================================
   client-shell.css — coquille « mode client » du simulateur public
   --------------------------------------------------------------------------
   Porte fidèlement trois composants React de l'ancien site Next.js
   (Navbar.jsx → IntentMenu + pilule Lia, CookieConsent.jsx, CinematicHero.jsx)
   en CSS vanilla, préfixé `.emc-` pour ne jamais entrer en collision avec les
   classes Tailwind/`.em-*` déjà chargées sur la page hôte (comparateur.php).

   Toutes les couleurs sont en dur (palette sunset/midnight/slate de la spec)
   car on ne dépend d'aucune classe Tailwind arbitraire — seulement des
   tokens Tailwind *déjà compilés* peuvent exister sur la page, jamais garanti.

   Sommaire :
     1. Variables locales (palette) + resets ciblés
     2. Header / topbar + pilule « Parler à Lia »
     3. Menu d'intention (IntentMenu) — voile + panneau
     4. Hero « argument fort » (CinematicHero)
     5. En-tête épuré post-choix (compact)
     6. Bandeau cookies (CookieConsent)
     7. Keyframes + prefers-reduced-motion
     8. Media queries responsive (360px → 1920px)
   ========================================================================== */

/* --------------------------------------------------------------------
   1. Variables locales — scannées à `.emc-scope` pour rester isolées.
   On les pose aussi sur :root en secours (au cas où le conteneur racine
   du shell ne porte pas la classe), sans jamais toucher aux sélecteurs
   globaux (body, h1, button…) : seule une custom property est globale,
   ce qui ne redéfinit aucun style existant.
   -------------------------------------------------------------------- */
:root {
  /* Palette pilotée par la marque blanche : l'agent principal injecte
     --emc-brand-50…700 (dérivées de la couleur primaire du cabinet référent)
     dans un <style> posé en fin de <head>. Ces variables "sunset" ne sont
     plus que des ALIAS avec repli sur l'ancienne teinte figée — indispensable
     quand aucune marque blanche n'est résolue (courtier non configuré,
     lien de démo…). Tout le reste du fichier continue de lire --emc-sunset-*,
     donc un seul point de bascule ici suffit à teinter toute la coquille. */
  --emc-sunset-50: var(--emc-brand-50, #FFF3EE);
  --emc-sunset-100: var(--emc-brand-100, #FFE3D6);
  --emc-sunset-200: var(--emc-brand-200, #FCD2BE);
  --emc-sunset-300: var(--emc-brand-300, #F9B592);
  --emc-sunset-400: var(--emc-brand-400, #F59267);
  --emc-sunset-500: var(--emc-brand-500, #F27A54);
  --emc-sunset-600: var(--emc-brand-600, #E2673F);
  --emc-sunset-700: var(--emc-brand-700, #C4522D);
  --emc-midnight-800: #16324A;
  --emc-midnight-900: #0E2A3D;
  --emc-slate-400: #94a3b8;
  --emc-slate-500: #64748b;
  --emc-slate-600: #475569;
  --emc-slate-100: #f1f5f9;
  --emc-slate-200: #e2e8f0;
  --emc-green-500: #22c55e;
  --emc-font-sans: 'DM Sans', system-ui, -apple-system, sans-serif;
  --emc-font-serif: 'Playfair Display', Georgia, serif;
}

/* Focus clavier visible partout dans le shell (accessibilité) — un seul
   sélecteur `*` mais scopé au namespace `.emc-*` par le préfixe de classe,
   donc aucune fuite vers le reste de la page. */
[class^="emc-"]:focus-visible,
[class*=" emc-"]:focus-visible {
  outline: 2px solid var(--emc-sunset-500);
  outline-offset: 2px;
  border-radius: 4px;
}

/* ==========================================================================
   2. HEADER / TOPBAR
   ========================================================================== */

.emc-topbar {
  position: sticky;
  top: 0;
  /* Au-dessus du voile du menu d'intention (70) : la barre — et surtout la
     pilule sur laquelle le menu est ancré — doit rester nette quand le reste
     de la page passe en flou. */
  z-index: 97;
  background: rgba(255, 255, 255, 0.92);
  backdrop-filter: blur(16px);
  -webkit-backdrop-filter: blur(16px);
  border-bottom: 1px solid rgba(15, 23, 42, 0.06);
  font-family: var(--emc-font-sans);
}

.emc-topbar-in {
  max-width: 1280px;
  margin: 0 auto;
  padding: 0.65rem 1.25rem;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 1rem;
}

.emc-brand {
  display: flex;
  align-items: baseline;
  gap: 0.6rem;
  min-width: 0;
}

.emc-brand-logo {
  height: 28px;
  width: auto;
  max-width: 140px;
  object-fit: contain;
}

.emc-brand-mono {
  font-family: var(--emc-font-serif);
  font-style: italic;
  font-weight: 600;
  font-size: 1.2rem;
  background: linear-gradient(90deg, var(--emc-sunset-400), var(--emc-sunset-600));
  -webkit-background-clip: text;
  background-clip: text;
  color: transparent;
}

.emc-brand-name {
  font-weight: 800;
  font-size: 1.05rem;
  color: var(--emc-midnight-800);
}

.emc-brand-sep {
  display: inline-block;
  width: 1px;
  height: 1.1rem;
  background: var(--emc-slate-200);
  margin: 0 0.15rem;
  flex-shrink: 0;
}

.emc-brand-ctx {
  font-size: 0.72rem;
  font-weight: 700;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--emc-slate-500);
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.emc-topbar-actions {
  display: flex;
  align-items: center;
  gap: 0.9rem;
  flex-shrink: 0;
}

.emc-trust {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  font-size: 0.75rem;
  font-weight: 700;
  color: var(--emc-slate-500);
  white-space: nowrap;
}

.emc-trust i {
  color: var(--emc-sunset-500);
}

/* Pilule « Parler à Lia » — dégradé sunset-400→500, avatar rond bordé blanc.
   Le liseré blanc (shimmer) traverse au survol, comme dans Navbar.jsx. */
.emc-lia-pill {
  position: relative;
  display: inline-flex;
  align-items: center;
  gap: 0.6rem;
  padding: 0.3rem 1.1rem 0.3rem 0.3rem;
  border: none;
  border-radius: 999px;
  background: linear-gradient(90deg, var(--emc-sunset-400), var(--emc-sunset-500));
  color: #fff;
  font-family: var(--emc-font-sans);
  font-weight: 800;
  font-size: 0.8rem;
  cursor: pointer;
  overflow: hidden;
  /* color-mix plutôt que rgba(242,122,84,…) : cette ombre doit suivre la
     couleur de marque du cabinet, pas rester figée sur l'orange sunset
     d'origine (elle mixe --emc-sunset-500, déjà pilotée par --emc-brand-500,
     avec du transparent — équivalent visuel d'un rgba() sur cette teinte). */
  box-shadow: 0 8px 20px color-mix(in srgb, var(--emc-sunset-500) 35%, transparent);
  transition: box-shadow 0.3s ease, transform 0.3s ease;
}

.emc-lia-pill:hover,
.emc-lia-pill[aria-expanded="true"] {
  box-shadow: 0 12px 25px color-mix(in srgb, var(--emc-sunset-500) 45%, transparent);
  transform: translateY(-1px);
}

.emc-lia-pill:active {
  transform: translateY(0);
}

/* Liseré lumineux qui balaie la pilule au survol (::after pour ne pas
   perturber la mise en page interne, contenu masqué via overflow:hidden
   sur le parent). */
.emc-lia-pill::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.35), transparent);
  transform: translateX(-120%);
  pointer-events: none;
}

.emc-lia-pill:hover::after {
  animation: emcShimmer 1.4s ease infinite;
}

.emc-lia-avatar {
  position: relative;
  display: block;
  width: 30px;
  height: 30px;
  border-radius: 999px;
  overflow: hidden;
  border: 2px solid rgba(255, 255, 255, 0.9);
  box-shadow: 0 0 12px rgba(255, 255, 255, 0.5);
  flex-shrink: 0;
  z-index: 1;
}

.emc-lia-avatar img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.emc-lia-label {
  position: relative;
  z-index: 1;
  white-space: nowrap;
}

/* ==========================================================================
   3. MENU D'INTENTION (IntentMenu) — voile + panneau flottant
   ========================================================================== */

.emc-intent-veil {
  position: fixed;
  inset: 0;
  /* Au-dessus du bandeau cookies (90) : sur mobile le menu est une feuille
     ancrée en bas, exactement là où vit le bandeau — sans cette priorité, il
     recouvrait trois des quatre entrées du menu. */
  z-index: 95;
  background: rgba(255, 255, 255, 0.4);
  backdrop-filter: blur(4px);
  -webkit-backdrop-filter: blur(4px);
  animation: emcFadeIn 0.2s ease forwards;
}

.emc-intent {
  position: fixed;
  z-index: 96;
  top: 4.5rem;
  /* --emc-intent-right est posée par client-shell.js à l'ouverture (mesure
     de #emcLiaPill.getBoundingClientRect()) pour que le bord droit du
     panneau tombe exactement sous le bord droit de la pilule — celle-ci
     n'est pas à une distance fixe du bord de l'écran (logo/marque de
     largeur variable avant elle). Le repli 1.25rem ne joue qu'avant la
     première mesure JS ou si le calcul échoue. */
  right: var(--emc-intent-right, 1.25rem);
  width: 360px;
  max-width: calc(100vw - 1.5rem);
  background: #fff;
  border-radius: 1.25rem;
  box-shadow: 0 25px 60px -12px rgba(0, 0, 0, 0.18), 0 0 0 1px rgba(0, 0, 0, 0.04);
  overflow: hidden;
  font-family: var(--emc-font-sans);
  animation: emcFadeInUp 0.25s ease forwards;
  transform-origin: top right;
}

/* Petit carré pivoté 45° qui simule la flèche du bulle-menu, positionné
   au-dessus du panneau, aligné sur la pilule. */
.emc-intent-arrow {
  position: absolute;
  top: -8px;
  /* --emc-intent-arrow-x : distance calculée en JS entre le bord droit du
     panneau et le centre de la pilule, moins la moitié de la flèche (8px),
     pour que la pointe tombe pile sous l'avatar/le texte de la pilule quel
     que soit son alignement réel dans la topbar. */
  right: var(--emc-intent-arrow-x, 2.5rem);
  width: 16px;
  height: 16px;
  background: #fff;
  transform: rotate(45deg);
  border-radius: 3px;
  box-shadow: 0 0 0 1px rgba(0, 0, 0, 0.04);
}

.emc-intent-head {
  position: relative;
  display: flex;
  align-items: center;
  gap: 0.75rem;
  padding: 1.15rem 1.5rem 1rem;
  background: linear-gradient(90deg, var(--emc-sunset-50), color-mix(in srgb, var(--emc-sunset-100) 60%, transparent));
  border-bottom: 1px solid color-mix(in srgb, var(--emc-sunset-100) 60%, transparent);
}

.emc-intent-ava {
  position: relative;
  flex-shrink: 0;
  display: block;
  width: 48px;
  height: 48px;
}

.emc-intent-ava img {
  width: 100%;
  height: 100%;
  border-radius: 999px;
  object-fit: cover;
  border: 2.5px solid #fff;
  box-shadow: 0 4px 12px rgba(0, 0, 0, 0.12);
  display: block;
}

.emc-intent-dot {
  position: absolute;
  bottom: -1px;
  right: -1px;
  width: 14px;
  height: 14px;
  border-radius: 999px;
  background: var(--emc-green-500);
  border: 2px solid #fff;
  box-shadow: 0 0 6px rgba(34, 197, 94, 0.5);
}

.emc-intent-t {
  margin: 0;
  font-weight: 800;
  font-size: 0.95rem;
  line-height: 1.2;
  color: var(--emc-midnight-800);
}

.emc-intent-s {
  margin: 0.15rem 0 0;
  font-size: 0.7rem;
  font-weight: 700;
  color: var(--emc-sunset-600);
}

.emc-intent-body {
  display: flex;
  flex-direction: column;
  gap: 0.15rem;
  padding: 0.75rem;
}

.emc-intent-opt {
  display: flex;
  align-items: center;
  gap: 0.75rem;
  width: 100%;
  padding: 0.85rem 1rem;
  border: 1px solid transparent;
  border-radius: 0.85rem;
  background: transparent;
  cursor: pointer;
  text-align: left;
  font-family: inherit;
  transition: background-color 0.3s ease, border-color 0.3s ease, transform 0.3s ease, box-shadow 0.3s ease;
}

.emc-intent-opt:hover {
  background: color-mix(in srgb, var(--emc-sunset-50) 80%, transparent);
  border-color: color-mix(in srgb, var(--emc-sunset-100) 80%, transparent);
  transform: translateY(-2px);
  box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
}

.emc-intent-ico {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 40px;
  height: 40px;
  border-radius: 0.75rem;
  flex-shrink: 0;
  background: var(--emc-slate-100);
  color: var(--emc-slate-500);
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);
  transition: background-color 0.3s ease, color 0.3s ease, transform 0.3s ease;
}

.emc-intent-ico.is-sunset {
  background: var(--emc-sunset-50);
  color: var(--emc-sunset-500);
}

.emc-intent-opt:hover .emc-intent-ico {
  background: var(--emc-sunset-500);
  color: #fff;
  transform: scale(1.08) rotate(3deg);
}

.emc-intent-txt {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.emc-intent-txt b {
  font-size: 0.85rem;
  font-weight: 800;
  color: var(--emc-midnight-800);
  line-height: 1.25;
}

.emc-intent-txt em {
  font-style: normal;
  font-size: 0.72rem;
  font-weight: 600;
  color: var(--emc-slate-400);
  margin-top: 0.1rem;
}

.emc-intent-chev {
  flex-shrink: 0;
  font-size: 0.8rem;
  color: var(--emc-slate-200);
  transition: color 0.3s ease, transform 0.3s ease;
}

.emc-intent-opt:hover .emc-intent-chev {
  color: var(--emc-sunset-500);
  transform: translateX(3px);
}

.emc-intent-sep {
  display: block;
  height: 1px;
  margin: 0.35rem 0.75rem;
  background: rgba(226, 232, 240, 0.6);
}

/* ==========================================================================
   4. HERO « ARGUMENT FORT » (CinematicHero)
   ========================================================================== */

.emc-hero {
  position: relative;
  overflow: visible;
  /* Padding haut nettement augmenté (3.5rem → 4.5rem) : la barre du haut
     est fine et sticky, le hero collait dessous sans respiration. */
  padding: 4.5rem 1.25rem 3rem;
  max-width: 960px;
  margin: 0 auto;
  text-align: center;
  font-family: var(--emc-font-sans);
  transition: opacity 0.45s ease, transform 0.45s ease, max-height 0.45s ease;
  max-height: 1200px;
}

/* Repli en douceur au moment du choix (avant `hidden`, cf. client-shell.js). */
.emc-hero.is-collapsed {
  opacity: 0;
  transform: translateY(-12px);
  max-height: 0;
  overflow: hidden;
  padding-top: 0;
  padding-bottom: 0;
  pointer-events: none;
}

.emc-hero-orbs {
  position: absolute;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  overflow: hidden;
}

.emc-hero-orbs span {
  position: absolute;
  border-radius: 999px;
  filter: blur(60px);
}

.emc-hero-orbs span:nth-child(1) {
  top: 10%;
  left: 50%;
  width: 500px;
  height: 380px;
  margin-left: -250px;
  background: radial-gradient(circle, color-mix(in srgb, var(--emc-sunset-200) 40%, transparent), color-mix(in srgb, var(--emc-sunset-100) 15%, transparent));
  animation: emcGlow 6s ease-in-out infinite;
}

.emc-hero-orbs span:nth-child(2) {
  top: 25%;
  left: 15%;
  width: 260px;
  height: 260px;
  background: color-mix(in srgb, var(--emc-sunset-300) 18%, transparent);
  animation: emcFloat 8s ease-in-out infinite;
}

.emc-hero-orbs span:nth-child(3) {
  bottom: 0;
  right: 10%;
  width: 220px;
  height: 220px;
  background: color-mix(in srgb, var(--emc-sunset-500) 12%, transparent);
  animation: emcFloat 8s ease-in-out infinite 3s;
}

.emc-hero-badge {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  /* Espace badge → H1 élargi (1.5rem → 2.25rem) pour que le titre respire
     au lieu de coller juste sous le badge. */
  margin: 0 0 2.25rem;
  padding: 0.4rem 0.95rem;
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.7);
  border: 1px solid color-mix(in srgb, var(--emc-sunset-200) 60%, transparent);
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.04);
  font-size: 0.68rem;
  font-weight: 800;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--emc-sunset-600);
  animation: emcFadeUp 0.6s ease 0.1s backwards;
}

.emc-hero-badge-dot {
  width: 6px;
  height: 6px;
  border-radius: 999px;
  background: var(--emc-sunset-500);
  box-shadow: 0 0 8px color-mix(in srgb, var(--emc-sunset-500) 60%, transparent);
  animation: emcPulse 2s ease-in-out infinite;
}

.emc-hero-h1 {
  margin: 0;
  font-family: var(--emc-font-serif);
  font-weight: 500;
  color: var(--emc-midnight-800);
  /* 0.98 serrait les deux lignes du titre au point de les faire presque se
     toucher (effet « empilement »). 1.08 laisse un vrai interligne sans
     casser la mise à l'échelle du clamp(). */
  line-height: 1.08;
  font-size: clamp(2rem, 6vw, 5rem);
  letter-spacing: -0.01em;
  animation: emcFadeUp 0.6s ease 0.15s backwards;
}

.emc-hero-amount {
  /* Espace H1 → montant élargi (0.1rem → 0.85rem) : à 0.1rem le montant
     collait littéralement sous le titre. */
  margin: 0.85rem 0 0;
  font-family: var(--emc-font-serif);
  font-weight: 600;
  line-height: 1.1;
  color: var(--emc-midnight-800);
  font-size: clamp(1.7rem, 5.5vw, 4.5rem);
  letter-spacing: -0.02em;
  animation: emcFadeUp 0.6s ease 0.2s backwards;
}

.emc-hero-amount strong {
  font-weight: 800;
  color: var(--emc-sunset-500);
}

.emc-hero-sub {
  /* Espace montant → sous-titre élargi (1.75rem → 2.25rem), en cohérence
     avec les autres écarts du hero désormais plus généreux. */
  margin: 2.25rem auto 0;
  max-width: 620px;
  font-size: clamp(1rem, 2vw, 1.25rem);
  font-weight: 600;
  color: var(--emc-slate-600);
  line-height: 1.5;
  animation: emcFadeUp 0.6s ease 0.3s backwards;
}

.emc-hero-underline {
  position: relative;
  display: inline-block;
}

.emc-hero-underline svg {
  position: absolute;
  left: 0;
  bottom: -0.35rem;
  width: 100%;
  height: auto;
  pointer-events: none;
}

.emc-hero-q {
  /* Espace sous-titre → « QUEL EST VOTRE BESOIN ? » élargi (2.5rem → 3.25rem). */
  margin: 3.25rem 0 1.25rem;
  font-size: 0.8rem;
  font-weight: 800;
  letter-spacing: 0.15em;
  text-transform: uppercase;
  color: var(--emc-slate-400);
  animation: emcFadeUp 0.6s ease 0.4s backwards;
}

.emc-hero-choices {
  display: flex;
  flex-wrap: wrap;
  gap: 1rem;
  justify-content: center;
  max-width: 640px;
  margin: 0 auto;
  animation: emcFadeUp 0.6s ease 0.45s backwards;
}

.emc-need {
  display: flex;
  align-items: center;
  gap: 0.85rem;
  flex: 1 1 260px;
  min-width: 0;
  padding: 1.15rem 1.25rem;
  background: #fff;
  border: 1px solid color-mix(in srgb, var(--emc-sunset-300) 55%, transparent);
  border-radius: 1.1rem;
  box-shadow: 0 4px 20px color-mix(in srgb, var(--emc-sunset-500) 8%, transparent);
  cursor: pointer;
  text-align: left;
  font-family: inherit;
  transition: transform 0.3s ease, box-shadow 0.3s ease, border-color 0.3s ease;
}

.emc-need:hover {
  transform: translateY(-4px);
  box-shadow: 0 12px 40px color-mix(in srgb, var(--emc-sunset-500) 15%, transparent);
  border-color: color-mix(in srgb, var(--emc-sunset-400) 60%, transparent);
}

.emc-need-ico {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 44px;
  height: 44px;
  border-radius: 0.85rem;
  flex-shrink: 0;
  background: var(--emc-slate-100);
  color: var(--emc-slate-500);
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.05);
  transition: background-color 0.4s ease, color 0.4s ease, transform 0.4s ease;
}

.emc-need-ico.is-sunset {
  background: var(--emc-sunset-50);
  color: var(--emc-sunset-500);
}

.emc-need:hover .emc-need-ico {
  background: var(--emc-sunset-500);
  color: #fff;
  transform: rotate(8deg);
}

.emc-need-txt {
  flex: 1;
  min-width: 0;
  display: flex;
  flex-direction: column;
}

.emc-need-txt b {
  font-size: 1rem;
  font-weight: 800;
  color: var(--emc-midnight-800);
  line-height: 1.25;
  white-space: nowrap;
  overflow: hidden;
  text-overflow: ellipsis;
}

.emc-need-txt em {
  font-style: normal;
  font-size: 0.75rem;
  font-weight: 600;
  color: var(--emc-slate-400);
  margin-top: 0.15rem;
}

.emc-need-arrow {
  flex-shrink: 0;
  margin-left: auto;
  font-size: 0.85rem;
  color: var(--emc-sunset-500);
  transition: transform 0.3s ease;
}

.emc-need:hover .emc-need-arrow {
  transform: translateX(3px);
}

/* .emc-hero-proof et ses enfants .emc-proof-* ont été retirés : le bloc de
   preuve sociale (avis, avatars, mentions confidentialité) a été supprimé
   du markup du hero pour aérer la page — ces règles n'ont plus de cible et
   seraient mortes si on les gardait. */

/* ==========================================================================
   5. EN-TÊTE ÉPURÉ POST-CHOIX (compact)
   ========================================================================== */

.emc-compact {
  max-width: 720px;
  margin: 0 auto;
  padding: 2.25rem 1.25rem 1rem;
  text-align: center;
  font-family: var(--emc-font-sans);
  opacity: 0;
  transform: translateY(10px);
  transition: opacity 0.45s ease, transform 0.45s ease;
  /* Flex column : permet de replacer le repère d'étapes (.emc-stepmini) par
     simple `order`, au-dessus du titre en desktop, sous les chips en mobile —
     sans dupliquer le markup pour chaque largeur. */
  display: flex;
  flex-direction: column;
  align-items: center;
}

.emc-compact.is-in {
  opacity: 1;
  transform: translateY(0);
}

.emc-compact-h {
  margin: 0;
  font-family: var(--emc-font-sans);
  font-weight: 800;
  font-size: clamp(1.35rem, 3.5vw, 2rem);
  color: var(--emc-midnight-800);
  line-height: 1.2;
}

/* Le « 2 minutes » en Playfair italique sunset, à l'image de la capture
   de référence de la spec. */
.emc-compact-h em {
  font-family: var(--emc-font-serif);
  font-style: italic;
  font-weight: 600;
  color: var(--emc-sunset-500);
}

/* .emc-compact-sub a été retiré : le sous-titre de l'en-tête épuré post-choix
   a disparu du markup pour aérer cette zone — règle devenue morte.
   .emc-compact-chips (« Tarif immédiat / Sans engagement / Données
   confidentielles ») a été retiré du markup pour la même raison : le titre
   enchaîne directement sur le repère d'étapes, sans palier intermédiaire. */

/* ==========================================================================
   5bis. STEPPER DISCRET (mode client) — .emc-stepmini
   --------------------------------------------------------------------------
   Le stepper courtier (`.cmp-stepper`, défini dans comparator-react-theme.css)
   est un gros galet vitré pensé pour un en-tête à deux colonnes. Côté client,
   réduit à un simple repère discret et déplacé DANS l'en-tête épuré : au-dessus
   du titre « Votre devis en 2 minutes » sur desktop (là où vivait le kicker
   « Simulation personnalisée », retiré), juste sous le titre sur mobile
   (l'ordre visuel suit `#clientCompact`, un flex column — voir règle
   `.emc-compact` plus haut). On ne touche à AUCUNE règle `.cmp-stepper*`
   existante : tout est scopé sous `.emc-stepmini` (2 classes de spécificité),
   qui ne peut jamais affecter le stepper du mode courtier.
   ========================================================================== */

.emc-stepmini {
  order: -1;                 /* au-dessus du H2 par défaut (desktop) */
  margin: 0 0 1rem;
  /* Discret par défaut, net dès qu'on s'y intéresse (survol ou tabulation
     jusqu'à un point de l'étape, focusable). */
  opacity: 0.5;
  transition: opacity 0.2s ease;
}

.emc-stepmini:hover,
.emc-stepmini:focus-within {
  opacity: 1;
}

/* Le galet vitré (fond blanc, ombre, backdrop-filter, gros points de 1.8rem)
   est ici hors-sujet : on ne veut plus qu'une ligne de repères minimaliste,
   sans carte visuelle autour — c'est tout l'objet de la réduction de
   hauteur demandée. */
.emc-stepmini .cmp-stepper {
  margin: 0 auto;
  padding: 0.3rem 0.5rem;
  gap: 0.3rem;
  max-width: none;
  width: fit-content;
  border: 1px solid rgba(15, 23, 42, 0.06);
  border-radius: 999px;
  background: rgba(255, 255, 255, 0.55);
  box-shadow: none;
  -webkit-backdrop-filter: none;
  backdrop-filter: none;
}

.emc-stepmini .cmp-stepper-item {
  gap: 0.25rem;
}

.emc-stepmini .cmp-stepper-dot {
  width: 1.05rem;
  height: 1.05rem;
  font-size: 0.5rem;
}

.emc-stepmini .cmp-stepper-item.is-current .cmp-stepper-dot {
  /* La pastille pleine du mode courtier (halo de 4px) est proportionnée à
     un point de 1.8rem ; ramenée à 1.05rem elle déborderait visuellement.
     On réduit le halo en conséquence. */
  box-shadow: 0 0 0 2px color-mix(in srgb, var(--emc-sunset-500) 16%, transparent);
}

.emc-stepmini .cmp-stepper-label {
  font-size: 0.6rem;
}

.emc-stepmini .cmp-stepper-line {
  min-width: 8px;
}

/* Sous 900px : une seule colonne, le repère redescend sous les chips (« Tarif
   immédiat / Sans engagement / Données confidentielles ») plutôt qu'au-dessus
   du titre, pour ne jamais retarder la lecture du montant et du CTA sur un
   petit écran. Pour tenir sans jamais déborder à 360px, seule l'étape en
   cours garde son libellé ; les autres ne montrent plus que leur pastille. */
@media (max-width: 900px) {
  .emc-stepmini {
    order: 4;
    margin: 0.75rem 0 0;
    /* Le repère hugait sa propre largeur de contenu (`width: fit-content`,
       règle de base plus haut) : sur mobile il s'étire désormais sur toute
       la largeur du formulaire, comme le reste de `#clientCompact`, plutôt
       que de rester tassé au centre. */
    width: 100%;
  }

  .emc-stepmini .cmp-stepper {
    width: 100%;
    max-width: 100%;
    overflow: hidden;
    flex-wrap: nowrap;
    justify-content: space-between;
  }

  .emc-stepmini .cmp-stepper-item {
    flex: 0 0 auto;
  }

  .emc-stepmini .cmp-stepper-line {
    /* flex-grow > 0 : les traits de liaison se répartissent l'espace libéré
       par l'étirement du conteneur, exactement comme le stepper courtier
       (cf. .cmp-stepper-line dans comparator-react-theme.css). */
    flex: 1 1 12px;
    min-width: 4px;
  }

  .emc-stepmini .cmp-stepper-label {
    display: none;
  }

  /* Seule exception : le libellé de l'étape courante reste visible, tronqué
     si besoin — c'est le seul repère textuel qu'on garde sur mobile. */
  .emc-stepmini .cmp-stepper-item.is-current .cmp-stepper-label {
    display: inline-block;
    max-width: 6rem;
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
}


/* ==========================================================================
   6. BANDEAU COOKIES (CookieConsent)
   ========================================================================== */

.emc-cookies {
  position: fixed;
  left: 1rem;
  right: 1rem;
  bottom: 1rem;
  z-index: 90;
  display: flex;
  justify-content: center;
  /* Le conteneur s'étend sur toute la largeur pour centrer la boîte : sans
     cela il capture les clics de part et d'autre du bandeau (il rendait le
     bouton « Envoyer » du chat Lia incliquable). Seule la boîte reçoit les
     événements. */
  pointer-events: none;
  font-family: var(--emc-font-sans);
  animation: emcFadeInUp 0.35s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

.emc-cookies-box {
  pointer-events: auto;
  width: 100%;
  max-width: 720px;
  background: #fff;
  border-radius: 1.15rem;
  border: 1px solid var(--emc-slate-100);
  box-shadow: 0 8px 40px rgba(0, 0, 0, 0.12);
  overflow: hidden;
}

.emc-cookies-row {
  display: flex;
  align-items: center;
  flex-wrap: wrap;
  gap: 1rem;
  padding: 0.9rem 1.25rem;
}

.emc-cookies-ico {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 32px;
  height: 32px;
  border-radius: 999px;
  background: var(--emc-sunset-50);
  color: var(--emc-sunset-500);
  flex-shrink: 0;
  font-size: 0.85rem;
}

.emc-cookies-txt {
  flex: 1 1 260px;
  min-width: 0;
  margin: 0;
  font-size: 0.8rem;
  line-height: 1.45;
  color: var(--emc-slate-600);
}

.emc-cookies-link {
  color: var(--emc-sunset-500);
  font-weight: 600;
  text-decoration: underline;
  text-underline-offset: 2px;
}

.emc-cookies-link:hover {
  color: var(--emc-sunset-600);
}

.emc-cookies-btns {
  display: flex;
  align-items: center;
  gap: 0.5rem;
  flex-shrink: 0;
  flex-wrap: wrap;
}

/* Base commune des 3 boutons cookies (spécificité par classe uniquement). */
.emc-ck-ghost,
.emc-ck-outline,
.emc-ck-primary {
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  border: none;
  border-radius: 0.7rem;
  font-family: inherit;
  font-weight: 700;
  font-size: 0.72rem;
  cursor: pointer;
  white-space: nowrap;
  transition: background-color 0.2s ease, color 0.2s ease, border-color 0.2s ease;
}

.emc-ck-ghost {
  padding: 0.45rem 0.85rem;
  background: transparent;
  color: var(--emc-slate-400);
}

.emc-ck-ghost:hover {
  color: var(--emc-slate-600);
}

.emc-ck-outline {
  padding: 0.45rem 0.85rem;
  background: transparent;
  border: 1px solid var(--emc-slate-200);
  color: var(--emc-slate-500);
}

.emc-ck-outline:hover {
  border-color: var(--emc-slate-400);
  color: var(--emc-slate-600);
}

.emc-ck-primary {
  padding: 0.5rem 1.15rem;
  background: var(--emc-sunset-500);
  color: #fff;
  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.08);
}

.emc-ck-primary:hover {
  background: var(--emc-sunset-600);
}

/* Panneau de personnalisation — se déplie sous la barre principale. */
.emc-cookies-panel {
  border-top: 1px solid var(--emc-slate-100);
  padding: 1rem 1.25rem 1.15rem;
  animation: emcFadeInUp 0.25s cubic-bezier(0.22, 1, 0.36, 1) forwards;
}

.emc-ck-cat {
  display: flex;
  align-items: center;
  gap: 0.85rem;
  padding: 0.6rem 0.65rem;
  border-radius: 0.85rem;
  transition: background-color 0.2s ease;
}

.emc-ck-cat:hover {
  background: var(--emc-slate-100);
}

.emc-ck-cat + .emc-ck-cat {
  margin-top: 0.15rem;
}

.emc-ck-cat-t {
  display: inline-flex;
  align-items: center;
  gap: 0.5rem;
  font-size: 0.78rem;
  font-weight: 700;
  color: var(--emc-slate-600);
}

.emc-ck-tag {
  font-style: normal;
  font-size: 0.62rem;
  font-weight: 700;
  color: var(--emc-sunset-600);
  background: var(--emc-sunset-50);
  padding: 0.1rem 0.4rem;
  border-radius: 0.3rem;
}

.emc-ck-cat-d {
  margin: 0.2rem 0 0;
  font-size: 0.7rem;
  line-height: 1.4;
  color: var(--emc-slate-400);
}

/* Interrupteur type « switch » — reproduit le composant Toggle du JSX. */
.emc-ck-toggle {
  position: relative;
  flex-shrink: 0;
  display: inline-flex;
  width: 36px;
  height: 20px;
  border: none;
  border-radius: 999px;
  background: var(--emc-slate-200);
  cursor: pointer;
  padding: 0;
  transition: background-color 0.2s ease;
}

.emc-ck-toggle::after {
  content: '';
  position: absolute;
  top: 2px;
  left: 2px;
  width: 16px;
  height: 16px;
  border-radius: 999px;
  background: #fff;
  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15);
  transition: transform 0.2s ease;
}

.emc-ck-toggle.is-on {
  background: var(--emc-sunset-500);
}

.emc-ck-toggle.is-on::after {
  transform: translateX(16px);
}

.emc-ck-toggle.is-locked {
  cursor: not-allowed;
  opacity: 0.6;
}

.emc-ck-foot {
  display: flex;
  justify-content: flex-end;
  margin-top: 0.85rem;
  padding-top: 0.75rem;
  border-top: 1px solid var(--emc-slate-100);
}

.emc-ck-save {
  padding: 0.5rem 1.15rem;
  border: none;
  border-radius: 0.7rem;
  background: var(--emc-midnight-800);
  color: #fff;
  font-family: inherit;
  font-weight: 700;
  font-size: 0.72rem;
  cursor: pointer;
  transition: background-color 0.2s ease;
}

.emc-ck-save:hover {
  background: var(--emc-midnight-900);
}

/* ==========================================================================
   7. KEYFRAMES + PREFERS-REDUCED-MOTION
   ========================================================================== */

@keyframes emcFadeUp {
  from { opacity: 0; transform: translateY(14px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes emcFadeInUp {
  from { opacity: 0; transform: translateY(8px); }
  to { opacity: 1; transform: translateY(0); }
}

@keyframes emcFadeIn {
  from { opacity: 0; }
  to { opacity: 1; }
}

@keyframes emcGlow {
  0%, 100% { opacity: 0.7; transform: scale(1); }
  50% { opacity: 1; transform: scale(1.08); }
}

@keyframes emcFloat {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-16px); }
}

@keyframes emcPulse {
  0%, 100% { opacity: 1; }
  50% { opacity: 0.4; }
}

/* Liseré blanc qui traverse la pilule Lia au survol. */
@keyframes emcShimmer {
  0% { transform: translateX(-120%); }
  100% { transform: translateX(120%); }
}

@media (prefers-reduced-motion: reduce) {
  .emc-hero-badge,
  .emc-hero-h1,
  .emc-hero-amount,
  .emc-hero-sub,
  .emc-hero-q,
  .emc-hero-choices,
  .emc-hero-orbs span,
  .emc-hero-badge-dot,
  .emc-intent-veil,
  .emc-intent,
  .emc-cookies,
  .emc-cookies-panel,
  .emc-lia-pill::after,
  .wz-compare-cta::after {
    animation: none !important;
    transition-duration: 0.01ms !important;
  }

  .emc-hero,
  .emc-compact,
  .emc-need,
  .emc-intent-opt,
  .emc-need-ico,
  .emc-intent-ico,
  .wz-compare-cta,
  .wz-compare-cta i,
  .emc-optin,
  .emc-optin-mark,
  .emc-lead-btn {
    transition-duration: 0.01ms !important;
  }
}

/* ==========================================================================
   8. RESPONSIVE — 360px → 1920px, aucun débordement horizontal toléré
   ========================================================================== */

/* Conteneurs larges : on borne toujours la largeur utile pour éviter tout
   dépassement sur les très grands écrans (jusqu'à 1920px et au-delà). */
.emc-topbar-in,
.emc-hero,
.emc-compact {
  box-sizing: border-box;
}

@media (max-width: 640px) {
  .emc-topbar-in {
    padding: 0.55rem 0.85rem;
  }

  .emc-brand-ctx {
    display: none;
  }

  .emc-trust {
    display: none;
  }

  .emc-hero {
    /* Même logique qu'en desktop : padding haut sensiblement augmenté
       (2.25rem → 2.75rem) pour que le hero respire aussi sous la barre
       fixe en mobile. */
    padding: 2.75rem 1rem 2rem;
  }

  .emc-hero-choices {
    flex-direction: column;
  }

  .emc-need {
    flex-basis: auto;
    width: 100%;
  }

  /* Menu d'intention en feuille plein écran ancrée en bas sur mobile. */
  .emc-intent {
    top: auto;
    left: 0.75rem;
    right: 0.75rem;
    bottom: 0.75rem;
    width: auto;
    max-width: none;
    /* On réserve la hauteur de la barre du haut : la feuille ne doit jamais
       passer sous le logo du cabinet. */
    max-height: calc(100vh - 5.5rem);
    overflow-y: auto;
    animation: emcFadeInUp 0.25s ease forwards;
  }

  .emc-intent-arrow {
    display: none;
  }

  .emc-cookies-row {
    flex-wrap: wrap;
  }

  .emc-cookies-txt {
    order: 2;
    flex-basis: 100%;
  }

  .emc-cookies-btns {
    order: 3;
    flex-basis: 100%;
    justify-content: flex-end;
  }

  /* Nom du cabinet sur sa propre ligne : en desktop la phrase tient sur une
     ligne, mais sur mobile "J'accepte d'être recontacté par" + le nom du
     courtier peut déborder ou se couper au milieu d'un mot. */
  .emc-optin-name {
    display: block;
  }
}

/* Sous 480px : la pilule Lia ne garde que l'avatar (le libellé texte ne
   tient plus sans forcer un retour à la ligne ou un débordement). */
@media (max-width: 480px) {
  .emc-lia-pill {
    padding: 0.3rem;
    gap: 0;
  }

  .emc-lia-label {
    display: none;
  }

  .emc-brand-sep {
    display: none;
  }

  .emc-cookies-btns {
    justify-content: space-between;
    width: 100%;
    gap: 0.4rem;
  }

  .emc-ck-ghost,
  .emc-ck-outline,
  .emc-ck-primary {
    flex: 1 1 auto;
    justify-content: center;
  }
}

@media (min-width: 1920px) {
  .emc-hero,
  .emc-compact {
    max-width: 1100px;
  }
}

/* ══════════════════════════════════════════════════════════════════════════
   PIED DE PAGE CLIENT
   Le client final est chez SON courtier : le pied de page porte la marque du
   cabinet. Discret — la page se termine sur une réassurance, pas sur un menu.
══════════════════════════════════════════════════════════════════════════ */
.emc-footer {
  margin-top: auto;
  padding: 2rem 1rem 2.25rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .6rem;
  text-align: center;
}
.emc-footer-note {
  margin: 0;
  display: inline-flex;
  align-items: center;
  gap: .45rem;
  font-size: .75rem;
  font-weight: 600;
  color: var(--emc-slate-500, #64748b);
}
.emc-footer-note i { color: var(--emc-sunset-500, #F27A54); font-size: .6875rem; }
.emc-footer-break { display: none; }
@media (max-width: 640px) {
  .emc-footer-break { display: inline; }
}
.emc-footer-links {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  align-items: center;
  gap: .25rem 1rem;
}
.emc-footer-links a,
.emc-footer-links button {
  font-size: .6875rem;
  font-weight: 600;
  color: var(--emc-slate-400, #94a3b8);
  background: none;
  border: 0;
  padding: 0;
  cursor: pointer;
  text-decoration: none;
  transition: color .2s;
}
.emc-footer-links a:hover,
.emc-footer-links button:hover { color: var(--emc-sunset-500, #F27A54); }
.emc-footer-links a:focus-visible,
.emc-footer-links button:focus-visible {
  outline: 2px solid var(--emc-sunset-500, #F27A54);
  outline-offset: 3px;
  border-radius: 4px;
}
.emc-footer-brand { margin: 0; font-size: .6875rem; color: var(--emc-slate-400, #94a3b8); }
.emc-footer-pb { font-weight: 700; color: var(--emc-slate-500, #64748b); }

/* Le FAB de Lia (bulle en bas à droite) fait doublon avec la pilule de l'en-tête
   tant qu'il n'y a pas d'offres à analyser : on ne le révèle qu'à la phase
   résultats, où Lia a enfin de la matière (cf. enableChat() du comparateur). */
.emc-shell #chatFab { display: none; }
.emc-shell.emc-chat-ready #chatFab { display: flex; }

/* ══════════════════════════════════════════════════════════════════════════
   FOND DE PAGE
   Le simulateur client n'a pas le fond « mesh » de l'extranet (réservé au
   chrome courtier) : il reprend le lavis chaud du site public, deux halos
   sunset très dilués sur un dégradé neutre. Posé sur la classe du <body>,
   jamais sur `body` lui-même, pour rester dans le namespace .emc-*.
══════════════════════════════════════════════════════════════════════════ */
.emc-shell {
  background:
    radial-gradient(1100px 560px at 10% -10%, color-mix(in srgb, var(--emc-sunset-100) 55%, transparent), transparent 62%),
    radial-gradient(900px 480px at 95% 2%, color-mix(in srgb, var(--emc-sunset-50) 70%, transparent), transparent 60%),
    linear-gradient(180deg, #FFFCFA 0%, #FAFBFC 45%, #F4F7FA 100%);
  background-repeat: no-repeat;
  background-size: 100% 100%;
}

/* ══════════════════════════════════════════════════════════════════════════
   HALO DE PHASE RÉSULTATS — neutralisé en mode client
   `comparator-results.css` pose un `#phaseResults::before` (radial-gradients
   absolus, inset -40px) pensé pour le fond neutre gris/blanc de l'extranet
   courtier. Sur le lavis chaud du simulateur client (`.emc-shell`, cf.
   ci-dessus), ce voile ajoute un second dégradé qui dessine un rectangle
   dont on voit nettement les bords gauche/droite au-dessus de notre propre
   fond — un artefact, pas un effet voulu. On le désactive uniquement ici
   (scope `.emc-shell`) pour ne jamais toucher au rendu courtier. `display:
   none` plutôt que `background: none` : le pseudo-élément ne porte aucun
   autre style utile (juste `content` + position + le dégradé), autant le
   retirer du rendu entièrement plutôt que de laisser une boîte vide. */
.emc-shell #phaseResults::before {
  display: none;
}

/* ══════════════════════════════════════════════════════════════════════════
   PANNEAU LIA EN MODE CLIENT
   Le drawer du comparateur est calé en haut de fenêtre : sous la barre fixe
   du simulateur, son en-tête (avatar + « Lia ») passait derrière le logo du
   cabinet. On le redescend et on lui redonne la hauteur correspondante.
══════════════════════════════════════════════════════════════════════════ */
.emc-shell #chatPanel {
  top: 4.75rem;
  max-height: calc(100vh - 5.5rem);
}
@media (max-width: 900px) {
  /* En dessous, le panneau est une feuille ancrée en bas : rien à décaler. */
  .emc-shell #chatPanel { top: auto; max-height: none; }
}

/* Chat Lia ouvert : le bandeau cookies libère la colonne du drawer, sinon il
   recouvre la zone de saisie (et le bouton « Envoyer » devient incliquable). */
@media (min-width: 901px) {
  .emc-shell.emc-chat-open .emc-cookies { padding-right: 27rem; }
}

/* Réserve, en bas de page, la hauteur réelle du bandeau cookies (posée en JS
   dans --emc-cookie-h) : sinon il recouvre la fin de la carte du wizard. */
.emc-shell.emc-cookies-on { padding-bottom: var(--emc-cookie-h, 0px); }

/* Cibles tactiles : les crayons « Modifier » du récapitulatif et les liens de
   sortie de la zone OCR sont les seuls chemins de retour du parcours — ils
   doivent rester atteignables au doigt. */
@media (hover: none) {
  .emc-shell .emc-recap-edit { width: 40px; height: 40px; }
  .emc-shell .ocr-doc-card-skip,
  .emc-shell #ocrZone button[onclick*="switchToManual"],
  .emc-shell #ocrZone a[onclick*="switchToManual"] {
    min-height: 44px;
    padding-inline: .75rem;
  }
}

/* ══════════════════════════════════════════════════════════════════════════
   CTA FLOTTANT « COMPARER → » (dernière étape du wizard, #wzCompareCta)
   --------------------------------------------------------------------------
   Ce bouton n'appartient PAS au namespace .emc- : il vit dans .wz-nav-wrap,
   à côté de .wz-arrow-next (règles définies dans le <style> de
   comparateur.php, que ce fichier ne touche pas). On réutilise donc les deux
   custom properties déjà posées en JS sur .wz-nav-wrap pour un calage
   PIXEL-PARFAIT avec la flèche qu'il complète :
     --wz-nav-top  → milieu vertical de la carte "Banque" (identique sur
                      toutes les étapes, pour ne jamais sauter en hauteur) ;
     --wz-cur-half → demi-largeur de l'étape courante, pour suivre les
                      étapes "is-wide" (Emprunteurs) au lieu de les chevaucher.
   On reprend exactement le même calcul de `right` que .wz-arrow-next : le
   bord droit de la pilule tombe donc au même endroit que le bord droit du
   rond de la flèche — la pilule, plus large, s'étend ensuite vers le centre.
   Comme .wz-arrow-next se met déjà `opacity:0` sur la dernière étape (il n'y
   a pas d'étape suivante), il n'y a jamais de collision visuelle entre les
   deux : l'un s'efface pile quand l'autre apparaît (`hidden` posé/retiré en
   JS par comparateur.php, hors périmètre de ce fichier).
   ══════════════════════════════════════════════════════════════════════════ */
.wz-compare-cta {
  position: absolute;
  top: var(--wz-nav-top, 8rem);
  /* Bord GAUCHE calé juste après le bord droit de la carte courante
     (--wz-cur-half est sa demi-largeur, posée en JS) : contrairement à la
     flèche ronde qu'il remplace, ce bouton est large — l'aligner par la droite
     le faisait chevaucher les champs du formulaire. */
  left: calc(50% + var(--wz-cur-half, 320px) + 1.25rem);
  right: auto;
  transform: translateY(-50%);
  z-index: 4;
  display: inline-flex;
  align-items: center;
  gap: .6rem;
  padding: .9rem 1.6rem;
  border: none;
  border-radius: 999px;
  overflow: hidden;
  font-family: var(--emc-font-sans);
  font-weight: 800;
  font-size: .95rem;
  color: #fff;
  white-space: nowrap;
  cursor: pointer;
  /* Dégradé sunset + double ombre (large diffuse + resserrée) : c'est le CTA
     principal du parcours, il doit "sortir" davantage que la flèche ronde
     neutre qu'il remplace. */
  background: linear-gradient(90deg, var(--emc-sunset-400), var(--emc-sunset-600));
  box-shadow:
    0 14px 32px color-mix(in srgb, var(--emc-sunset-500) 38%, transparent),
    0 3px 8px color-mix(in srgb, var(--emc-sunset-600) 28%, transparent);
  transition: transform .25s ease, box-shadow .25s ease;
}

/* Libellé + icône au-dessus du liseré animé (::after, cf. plus bas) : sans ce
   z-index le balayage lumineux passerait PAR-DESSUS le texte au lieu de
   courir dessous, comme sur .emc-lia-pill (même patron). */
.wz-compare-cta-lbl,
.wz-compare-cta > i {
  position: relative;
  z-index: 1;
}

.wz-compare-cta i {
  transition: transform .25s ease;
}

/* Appel au survol : léger soulèvement + ombre qui s'ouvre + flèche qui
   avance d'un cran. Rien de brusque (durée et amplitude alignées sur le
   reste de la coquille, cf. .emc-need/.emc-lia-pill). */
.wz-compare-cta:hover,
.wz-compare-cta:focus-visible {
  transform: translateY(-50%) translateY(-2px);
  box-shadow:
    0 20px 42px color-mix(in srgb, var(--emc-sunset-500) 48%, transparent),
    0 4px 12px color-mix(in srgb, var(--emc-sunset-600) 34%, transparent);
}

.wz-compare-cta:hover i,
.wz-compare-cta:focus-visible i {
  transform: translateX(3px);
}

.wz-compare-cta:active {
  transform: translateY(-50%) translateY(0);
}

/* `.wz-compare-cta` n'est pas préfixé `emc-` : la règle globale de focus
   visible en tête de fichier (scopée au namespace .emc-*) ne s'applique donc
   pas ici. On dessine son propre anneau, pensé pour rester lisible sur un
   fond orange (liseré blanc + halo coloré, plutôt que l'anneau sunset
   habituel qui se fondrait dans le bouton). */
.wz-compare-cta:focus-visible {
  outline: 2px solid #fff;
  outline-offset: 3px;
}

/* Liseré de brillance en boucle lente et discrète — "vivant" sans être
   clignotant : une seule bande fine qui traverse toutes les 3,2 s, avec un
   délai initial pour ne pas partir pile au rendu de l'étape. Réutilise le
   keyframe emcShimmer déjà défini pour .emc-lia-pill (liseré identique, juste
   rejoué en boucle infinie plutôt qu'au seul survol). */
.wz-compare-cta::after {
  content: '';
  position: absolute;
  inset: 0;
  background: linear-gradient(90deg, transparent, rgba(255, 255, 255, .4), transparent);
  transform: translateX(-120%);
  pointer-events: none;
  animation: emcShimmer 3.2s ease-in-out infinite;
  animation-delay: 1s;
}

/* Sous 900px : plus de piste de carrousel avec voisines en filigrane (le
   wizard passe en pleine largeur, cf. règles .wz-track du <style> de
   comparateur.php) — le flottant perd donc son repère de calage horizontal
   ET vertical. Il repasse dans le flux normal, centré, pleine largeur, comme
   un second CTA sous le bouton principal de la carte. */
/* Sous 1100px, plus de place pour le flottant à côté de la carte — et le
   bouton .cta-btn de la carte (désormais lui-même libellé "Comparer",
   cf. comparateur.php) fait déjà office de CTA principal. Un second CTA
   pleine largeur en dessous était redondant, et son ombre diffuse en
   position statique/pleine largeur débordait visuellement sur toute la
   page (halo orange perçu comme un bug de "brillance"). On le masque donc
   plutôt que de le repasser en flux. */
@media (max-width: 1100px) {
  .wz-compare-cta {
    display: none;
  }
}

/* ══════════════════════════════════════════════════════════════════════════
   OPT-IN DE RECONTACT (étape Emprunteur(s), juste avant le CTA de fin)
   --------------------------------------------------------------------------
   Case à cocher "maison" : la vraie <input type=checkbox> reste dans le DOM
   et focusable (screen-readers, tabulation) mais visuellement masquée via le
   patron .sr-only classique (clip + dimension 1px, jamais display:none qui
   la sortirait de l'arbre d'accessibilité) — c'est .emc-optin-mark, un <span>
   purement décoratif, qui dessine le carré. Tout le bloc est un <label>,
   donc toute la ligne (texte compris) bascule la case au clic, sans JS.
   ══════════════════════════════════════════════════════════════════════════ */
.emc-optin {
  display: flex;
  align-items: flex-start;
  gap: .85rem;
  margin-top: 1.75rem;
  padding: 1rem 1.15rem;
  border: 1px solid var(--emc-slate-200);
  border-radius: 1rem;
  background: #fff;
  cursor: pointer;
  transition: border-color .2s ease, background-color .2s ease;
}

.emc-optin:hover {
  border-color: color-mix(in srgb, var(--emc-sunset-300) 65%, transparent);
  background: color-mix(in srgb, var(--emc-sunset-50) 45%, transparent);
}

/* Masquage visuel accessible (jamais display:none/visibility:hidden : la
   case doit rester atteignable au clavier et annoncée par les lecteurs
   d'écran — seul le carré dessiné à côté est décoratif/aria-hidden). */
.emc-optin-box {
  position: absolute;
  width: 1px;
  height: 1px;
  margin: -1px;
  padding: 0;
  border: 0;
  overflow: hidden;
  clip: rect(0 0 0 0);
  clip-path: inset(50%);
  white-space: nowrap;
}

.emc-optin-mark {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 1.5rem;
  height: 1.5rem;
  margin-top: .1rem;
  border: 1.5px solid var(--emc-slate-200);
  border-radius: .45rem;
  background: #fff;
  color: transparent;
  font-size: .7rem;
  transition: background-color .2s ease, border-color .2s ease, color .2s ease, transform .15s ease;
}

/* Remplissage sunset + coche blanche quand la vraie case est cochée — piloté
   uniquement en CSS (:checked sur le sibling), aucun JS de style requis. */
.emc-optin-box:checked + .emc-optin-mark {
  background: linear-gradient(135deg, var(--emc-sunset-400), var(--emc-sunset-600));
  border-color: var(--emc-sunset-500);
  color: #fff;
}

.emc-optin:active .emc-optin-mark {
  transform: scale(.92);
}

/* Anneau de focus clavier porté par le carré décoratif : la case réelle est
   hors-flux visuel (cf. .emc-optin-box ci-dessus), un focus dessiné sur elle
   serait invisible. On le reporte donc sur son sibling via :focus-visible +
   sélecteur adjacent, seule combinaison possible en CSS pur (pas de :has()
   nécessaire ici, le mark suit toujours directement l'input dans le DOM). */
.emc-optin-box:focus-visible + .emc-optin-mark {
  outline: 2px solid var(--emc-sunset-500);
  outline-offset: 2px;
}

.emc-optin-txt {
  display: flex;
  flex-direction: column;
  gap: .2rem;
}

.emc-optin-txt b {
  font-size: .85rem;
  font-weight: 800;
  line-height: 1.3;
  color: var(--emc-midnight-800);
}

.emc-optin-txt em {
  font-style: normal;
  font-size: .74rem;
  font-weight: 500;
  line-height: 1.45;
  color: var(--emc-slate-500);
}

/* Tentative de poursuite sans avoir coché : bordure + fond rouge très pâle.
   Rouge en dur (pas de token dédié dans la palette du fichier — seule la
   teinte de marque "sunset" est variabilisée, cf. règle en tête de fichier ;
   un rouge d'alerte n'a pas vocation à suivre le courtier). */
.emc-optin.is-error {
  border-color: #fca5a5;
  background: rgba(239, 68, 68, .06);
}

.emc-optin.is-error .emc-optin-mark {
  border-color: #ef4444;
}

/* ══════════════════════════════════════════════════════════════════════════
   BLOC DE CONVERSION « ÊTRE RAPPELÉ » (phase résultats, .emc-lead)
   --------------------------------------------------------------------------
   Remplace l'ancien empilement kicker/titre/sous-titre (règles mortes,
   retirées : .emc-lead-kicker et .emc-lead-sub n'ont plus de cible dans le
   markup) par un vrai encart de conversion : icône + titre + 3 bénéfices en
   liste à puces cochées à gauche, CTA + micro-réassurance à droite. Le halo
   flou (.emc-lead-glow) reprend le procédé des orbes du hero
   (radial-gradient + blur, cf. section HERO plus haut) pour donner du relief
   sans dépendre d'une image.
   ══════════════════════════════════════════════════════════════════════════ */
.emc-lead {
  position: relative;
  margin-top: 1.75rem;
  padding: 1.75rem 2rem;
  border: 1px solid color-mix(in srgb, var(--emc-sunset-200) 55%, transparent);
  border-radius: 1.5rem;
  background: #fff;
  box-shadow:
    0 20px 50px -12px color-mix(in srgb, var(--emc-sunset-500) 16%, transparent),
    0 2px 8px rgba(15, 23, 42, .04);
  overflow: hidden;
  font-family: var(--emc-font-sans);
}

.emc-lead-glow {
  position: absolute;
  z-index: 0;
  top: -45%;
  right: -12%;
  width: 340px;
  height: 340px;
  border-radius: 999px;
  pointer-events: none;
  filter: blur(70px);
  background: radial-gradient(circle, color-mix(in srgb, var(--emc-sunset-300) 38%, transparent), transparent 70%);
}

.emc-lead-in {
  position: relative;
  z-index: 1;
  display: flex;
  align-items: center;
  gap: 1.5rem;
}

.emc-lead-ico {
  flex-shrink: 0;
  display: flex;
  align-items: center;
  justify-content: center;
  width: 3.25rem;
  height: 3.25rem;
  border-radius: 1rem;
  background: linear-gradient(135deg, var(--emc-sunset-400), var(--emc-sunset-600));
  color: #fff;
  font-size: 1.15rem;
  box-shadow: 0 8px 20px color-mix(in srgb, var(--emc-sunset-500) 35%, transparent);
}

.emc-lead-txt {
  flex: 1;
  min-width: 0;
}

.emc-lead-title {
  margin: 0 0 .65rem;
  font-weight: 800;
  font-size: clamp(1.05rem, 2vw, 1.25rem);
  line-height: 1.3;
  color: var(--emc-midnight-800);
}

.emc-lead-title b {
  font-weight: 800;
  color: var(--emc-sunset-600);
}

/* Les 3 bénéfices : une ligne si la largeur le permet (flex-wrap laisse
   chaque item passer à la ligne dès qu'il manque de place, sans media query
   dédiée pour ce premier palier — cf. le vrai empilement forcé sous 720px
   plus bas, où la juxtaposition icône+titre+CTA ne laisse de toute façon
   plus assez de largeur pour une seule ligne de bénéfices). */
.emc-lead-list {
  display: flex;
  flex-wrap: wrap;
  gap: .5rem 1.25rem;
  margin: 0;
  padding: 0;
  list-style: none;
}

.emc-lead-list li {
  display: inline-flex;
  align-items: center;
  gap: .45rem;
  font-size: .8rem;
  font-weight: 600;
  color: var(--emc-slate-600);
  white-space: nowrap;
}

.emc-lead-list i {
  display: inline-flex;
  flex-shrink: 0;
  align-items: center;
  justify-content: center;
  width: 1.1rem;
  height: 1.1rem;
  border-radius: 999px;
  background: color-mix(in srgb, var(--emc-sunset-500) 15%, transparent);
  color: var(--emc-sunset-600);
  font-size: .6rem;
}

.emc-lead-act {
  flex-shrink: 0;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: .5rem;
}

.emc-lead-btn {
  display: inline-flex;
  align-items: center;
  gap: .6rem;
  padding: .9rem 1.5rem;
  border: none;
  border-radius: 999px;
  background: linear-gradient(90deg, var(--emc-sunset-400), var(--emc-sunset-600));
  color: #fff;
  font-family: inherit;
  font-weight: 800;
  font-size: .9rem;
  white-space: nowrap;
  cursor: pointer;
  box-shadow: 0 10px 24px color-mix(in srgb, var(--emc-sunset-500) 35%, transparent);
  transition: transform .2s ease, box-shadow .2s ease, opacity .2s ease;
}

.emc-lead-btn:hover:not(:disabled) {
  transform: translateY(-2px);
  box-shadow: 0 14px 30px color-mix(in srgb, var(--emc-sunset-500) 45%, transparent);
}

.emc-lead-btn:active:not(:disabled) {
  transform: translateY(0);
}

/* `disabled` tant que l'opt-in de recontact (section précédente) n'est pas
   coché — le bouton reste visible (on ne veut pas qu'il "disparaisse", ce qui
   ferait perdre le repère de conversion) mais clairement inerte. */
.emc-lead-btn:disabled {
  opacity: .55;
  cursor: not-allowed;
  box-shadow: none;
}

.emc-lead-note {
  margin: 0;
  font-size: .68rem;
  font-weight: 600;
  color: var(--emc-slate-400);
  text-align: center;
  white-space: nowrap;
}

/* Sous 720px : plus la place pour une ligne icône+texte+CTA — on empile
   verticalement (icône puis titre puis liste puis CTA), et le CTA + sa note
   passent en pleine largeur pour rester le point d'atterrissage évident du
   pouce en bas de bloc. */
@media (max-width: 720px) {
  .emc-lead {
    padding: 1.5rem 1.25rem;
  }

  .emc-lead-in {
    flex-direction: column;
    align-items: flex-start;
    gap: 1rem;
  }

  .emc-lead-list {
    flex-direction: column;
    align-items: flex-start;
    gap: .45rem;
  }

  .emc-lead-act {
    align-self: stretch;
  }

  .emc-lead-btn {
    width: 100%;
    justify-content: center;
  }

  .emc-lead-note {
    width: 100%;
  }
}
