@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:wght@500;600&family=Inter:wght@300;400;500;600&display=swap');

:root {
  --noir: #0B2545;
  --or: #D8342A;
  --or-hover: #A82A22;
  --blanc: #FFFFFF;
  --gris-texte: #5C6470;
  --bordure: #E2E5EA;
}

/* Palette d'accents par rubrique (21/09/2026, retour d'un observateur : le site est jugé "épuré mais
   plat, pas vivant, pas coloré" pour un site qui parle d'automobile). Plutôt que de multiplier les
   couleurs partout (boutons, menu...), qui casserait la cohérence de marque, chaque grande rubrique du
   site reçoit sa propre couleur d'accent, posée sur le <body> de sa page (classe theme-xxx) et reprise
   uniquement par des éléments d'IDENTITÉ DE PAGE : le trait sous le H1 (.trait-or) et la mise en avant
   des cartes au survol. Le reste de l'interface (boutons d'action, navigation, liens) garde le rouge de
   marque partout, pour que "cliquer" reste associé à une seule couleur sur tout le site. Valeur de repli
   sur --or si aucune classe theme-xxx n'est posée (page d'accueil, simulateurs, pages sans rubrique). */
body.theme-electrique { --accent: #1BA672; }   /* Passer à l'électrique : vert, associé à l'écologie/l'électrique */
body.theme-bons-plans { --accent: #F2994A; }   /* Bons plans : orange, couleur de promo/bonne affaire */
body.theme-actu { --accent: #2F80ED; }         /* Actualités & Innovations : bleu, couleur d'info/techno */
body.theme-voiture-annee { --accent: #C9971F; } /* Voiture de l'année : or, couleur de distinction/prix */
body.theme-magazine { --accent: #8B5CF6; }     /* Magazine & Newsletter : violet, couleur éditoriale */
body.theme-annuaire { --accent: #0EA5A6; }     /* Annuaire & Services : sarcelle, couleur de service/annuaire */
/* Ajoutés le 21/09/2026 (retour : "trop de blanc, ajoute des couleurs et des animations") pour couvrir
   les pages de conseils et de services, jusqu'ici sans couleur d'accent. */
body.theme-conseils { --accent: #D6336C; }     /* Conseils pratiques (achat, entretien, utilisation, vente, sécurité) : rose/magenta, chaleureux et humain */
body.theme-services { --accent: #4F46E5; }     /* Assurance, financement, estimation par un expert : indigo, sérieux/confiance */

* { box-sizing: border-box; margin: 0; padding: 0; }

html { scroll-behavior: smooth; }

@media (prefers-reduced-motion: reduce) {
  html { scroll-behavior: auto; }
  * { animation-duration: 0.01ms !important; animation-iteration-count: 1 !important; transition-duration: 0.01ms !important; }
}

body {
  font-family: 'Inter', sans-serif;
  font-weight: 300;
  font-size: 16px;
  line-height: 1.75;
  color: var(--noir);
  /* 21/09/2026 : fond passé d'un blanc pur (--blanc) à un léger lavis bleu-gris — les cartes, l'en-tête
     et les bandeaux gardent volontairement un fond blanc pur explicite (var(--blanc)), ce qui crée un
     léger contraste de profondeur au lieu d'un aplat blanc uniforme sur toute la page. */
  background: #F5F7FB;
  position: relative;
  overflow-x: hidden;
}

/* Halos décoratifs sur les flancs (21/09/2026, retour de Serge : sur grand écran, une fois le contenu
   recentré dans son conteneur (max 1100px), il restait de larges bandes vides à gauche et à droite —
   "que toute la page soit bien occupée"). Deux halos flous, fixes par rapport à la fenêtre (donc jamais
   dans le flux, aucun impact sur la largeur de la page ni sur le défilement), en couleur d'accent de la
   page (repli sur le rouge) et en bleu marine de marque, qui dérivent très lentement. Invisibles en
   pratique sur les écrans étroits (mobile/tablette), où le conteneur occupe déjà toute la largeur. */
body::before, body::after {
  content: '';
  position: fixed;
  width: 460px;
  height: 460px;
  border-radius: 50%;
  filter: blur(100px);
  opacity: 0.30;
  z-index: -1;
  pointer-events: none;
  animation: halo-derive 20s ease-in-out infinite alternate;
}
body::before {
  top: -8%;
  left: -220px;
  background: radial-gradient(circle, var(--accent, var(--or)) 0%, transparent 70%);
}
body::after {
  top: 45%;
  right: -220px;
  background: radial-gradient(circle, var(--noir) 0%, transparent 70%);
  animation-delay: -10s;
}
@keyframes halo-derive {
  from { transform: translateY(0) scale(1); }
  to { transform: translateY(70px) scale(1.1); }
}
/* Deux halos supplémentaires, statiques (pas d'animation ici, pour rester sobre), plus bas sur la
   page — les pages longues (conseils, magazine...) laissaient les flancs complètement vides une fois
   passé le premier écran. Portés par <html> plutôt que <body> pour pouvoir en superposer 4 au total. */
html::before, html::after {
  content: '';
  position: fixed;
  width: 380px;
  height: 380px;
  border-radius: 50%;
  filter: blur(100px);
  opacity: 0.22;
  z-index: -1;
  pointer-events: none;
}
html::before {
  bottom: 5%;
  left: -200px;
  background: radial-gradient(circle, var(--noir) 0%, transparent 70%);
}
html::after {
  bottom: 30%;
  right: -200px;
  background: radial-gradient(circle, var(--accent, var(--or)) 0%, transparent 70%);
}
@media (max-width: 1180px) {
  /* Sous ce seuil, le conteneur (1100px) occupe déjà quasiment toute la largeur : les halos
     n'apporteraient plus rien et risqueraient de teinter le contenu lui-même. */
  body::before, body::after, html::before, html::after { display: none; }
}

h1, h2, h3 {
  font-family: 'Cormorant Garamond', serif;
  font-weight: 600;
  line-height: 1.15;
  color: var(--noir);
}

@keyframes h1-entree {
  from { opacity: 0; transform: translateY(14px); }
  to { opacity: 1; transform: translateY(0); }
}
h1 { font-size: 40px; margin-bottom: 16px; animation: h1-entree 0.6s ease-out both; }
h2 {
  font-size: 28px;
  margin: 32px 0 12px;
}
/* Barre d'accent devant les sous-titres : posée en contenu inline (et non en ::before absolu calé sur
   le bord gauche du bloc) pour qu'elle suive le texte partout, y compris quand le h2 est centré
   (corrigé le 21/09/2026 — un h2 centré, ex. magazine.html, laissait la barre isolée collée au bord
   gauche de la page, déconnectée du texte). */
h2::before {
  content: '';
  display: inline-block;
  width: 4px;
  height: 0.85em;
  margin-right: 10px;
  vertical-align: middle;
  border-radius: 2px;
  background: var(--accent, var(--or));
}
h3 { font-size: 20px; margin: 24px 0 8px; }

/* Puces de liste colorées dans le contenu éditorial — un petit détail qui casse le tout-noir-et-blanc
   des pages de conseils, particulièrement chargées en listes (21/09/2026). */
.article-content ul li::marker,
main ul li::marker {
  color: var(--accent, var(--or));
}

p { margin-bottom: 16px; max-width: 68ch; }

a { color: var(--noir); text-decoration: none; transition: color 0.2s ease; }
a:hover { color: var(--or); }

@keyframes grow-trait {
  from { width: 0; opacity: 0; }
  to { width: 36px; opacity: 1; }
}
.trait-or {
  width: 36px;
  height: 2px;
  background: linear-gradient(90deg, var(--noir), var(--accent, var(--or)));
  margin: 14px 0 24px;
  border: none;
  animation: grow-trait 0.6s ease-out;
}

.container {
  max-width: 1100px;
  margin: 0 auto;
  padding: 0 24px;
}

/* Header */
header {
  border-bottom: 1px solid var(--bordure);
  background: var(--blanc);
  position: sticky;
  top: 0;
  z-index: 100;
}

.header-inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding: 14px 24px;
  max-width: 1600px;
  margin: 0 auto;
}

.logo img { height: 58px; display: block; }

nav.mega { display: flex; flex-wrap: nowrap; justify-content: space-between; align-items: flex-start; flex: 1; margin-left: 48px; }

nav.mega > .nav-item { position: relative; }

nav.mega > a.nav-label {
  font-size: 15px;
  font-weight: 600;
  padding: 8px 0;
  display: inline-block;
  position: relative;
  transition: color 0.2s ease;
  width: 130px;
  white-space: normal;
}
nav.mega > a.nav-label::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 2px;
  width: 0;
  height: 2px;
  background: var(--or);
  transition: width 0.25s ease;
}
nav.mega > a.nav-label:hover::after { width: 100%; }
nav.mega > a.nav-label:hover { color: var(--or); }

nav.mega > .nav-item > .nav-label {
  font-size: 15px;
  font-weight: 600;
  cursor: pointer;
  padding: 8px 0;
  display: inline-block;
  position: relative;
  width: 130px;
  white-space: normal;
  transition: color 0.2s ease;
}
nav.mega > .nav-item > .nav-label::after {
  content: "";
  position: absolute;
  left: 0;
  bottom: 2px;
  width: 0;
  height: 2px;
  background: var(--or);
  transition: width 0.25s ease;
}
nav.mega > .nav-item:hover > .nav-label::after { width: 100%; }

nav.mega > .nav-item > .nav-label:hover { color: var(--or); }

/* "Bons plans" et "Mon véhicule" affichés sur 2 lignes (un mot par ligne) en desktop, pour la même
   hauteur visuelle que les libellés plus longs comme "Magazine & Newsletter" (demande de Serge,
   11/09/2026). Sur mobile (menu déroulant vertical), les mots restent sur une seule ligne : la place
   ne manque pas et il n'y a pas de contrainte de hauteur entre libellés voisins. */
@media (min-width: 1231px) {
  nav.mega > a.nav-label .nav-word,
  nav.mega > .nav-item > .nav-label .nav-word {
    display: block;
  }
}

.mega-panel {
  display: flex;
  gap: 32px;
  position: absolute;
  top: 100%;
  left: 0;
  background: var(--blanc);
  border: 1px solid var(--bordure);
  border-radius: 8px;
  padding: 20px;
  min-width: 240px;
  box-shadow: 0 12px 28px rgba(11,37,69,0.10);
  opacity: 0;
  visibility: hidden;
  transform: translateY(-6px);
  transition: opacity 0.2s ease, transform 0.2s ease, visibility 0.2s;
  pointer-events: none;
}

.nav-item:hover .mega-panel { opacity: 1; visibility: visible; transform: translateY(0); pointer-events: auto; }

.mega-col a { display: block; font-size: 14px; padding: 6px 0; color: var(--gris-texte); transition: color 0.2s ease, padding-left 0.2s ease; }
.mega-col a:hover { color: var(--or); padding-left: 4px; }
.mega-col-title { font-size: 12px; text-transform: uppercase; letter-spacing: 0.06em; color: var(--noir); margin-bottom: 8px; }

/* Colonne "Nos outils" du méga-menu "Mon véhicule" : regroupe les 3 simulateurs (jusqu'ici éparpillés
   entre les colonnes Acheter/Vendre) dans une colonne à part, mise en léger relief pour signaler que
   ce sont des outils interactifs et non de simples pages de conseils (14/09/2026). Reste dans le menu
   existant plutôt que dans une nouvelle entrée de premier niveau, à la demande de Serge. */
.mega-col-outils { padding-right: 20px; border-right: 1px solid var(--bordure); }
.mega-col-outils .mega-col-title { color: var(--or); }

/* La colonne outils est placée en premier dans le HTML pour être annoncée avant les colonnes de
   conseils par les lecteurs d'écran ; en mobile, où l'ordre visuel suit l'ordre du HTML, on la repasse
   en dernier pour ne pas faire passer les conseils d'achat/vente après les outils dans le menu déroulant. */
@media (max-width: 1230px) {
  .mega-col-outils { order: 5; padding-right: 0; border-right: none; border-top: 1px solid var(--bordure); padding-top: 10px; margin-top: 4px; }
}

/* Mobile nav toggle */
/* Seuil relevé de 700px à 1230px (14/09/2026, ajusté le même jour après retrait du bouton "Estimer
   mon véhicule", devenu redondant avec le bandeau "Nos outils") : le menu desktop (logo + 8 libellés,
   sans bouton) a besoin d'environ 1215px pour tenir sur une seule ligne sans déborder. En dessous de
   700px (l'ancien seuil), il restait une zone morte où rien ne s'adaptait et où la page débordait
   horizontalement. En dessous de 1230px, le site bascule maintenant sur le menu mobile. */
.nav-toggle { display: none; margin-left: auto; }
@media (max-width: 1230px) {
  .header-inner { flex-wrap: wrap; }
  nav.mega {
    display: none;
    width: 100%;
    flex-direction: column;
    align-items: flex-start;
    gap: 0;
    margin-left: 0;
    margin-top: 12px;
    border-top: 0.5px solid var(--bordure);
    padding-top: 8px;
  }
  nav.mega.open { display: flex; }
  nav.mega > .nav-item, nav.mega > a.nav-label { width: 100%; }
  nav.mega > a.nav-label, nav.mega > .nav-item > .nav-label { padding: 12px 0; white-space: normal; }
  .mega-panel {
    display: none;
    position: static;
    box-shadow: none;
    border: none;
    padding: 0 0 8px 16px;
    flex-direction: column;
    gap: 4px;
  }
  .nav-item.open-sub .mega-panel {
    display: flex;
    opacity: 1;
    visibility: visible;
    transform: none;
    pointer-events: auto;
  }
  .nav-item:hover .mega-panel { opacity: 0; visibility: hidden; pointer-events: none; }
  .nav-item.open-sub:hover .mega-panel { opacity: 1; visibility: visible; pointer-events: auto; }
  .mega-col { gap: 0; }
  .btn-abonner { display: none; }
  .nav-toggle { display: block; font-size: 22px; background: none; border: none; cursor: pointer; color: var(--noir); line-height: 1; padding: 4px 8px; }
}

/* Hero */
.hero {
  padding: 80px 24px 64px;
  text-align: center;
  max-width: 760px;
  margin: 0 auto;
}
.hero h1 { font-size: 44px; }
.hero p.subtitle { font-size: 18px; color: var(--gris-texte); margin-bottom: 28px; }

.btn-cta {
  display: inline-block;
  background: var(--noir);
  color: var(--blanc);
  padding: 14px 28px;
  border-radius: 6px;
  font-size: 15px;
  transition: background 0.2s ease, color 0.2s ease, transform 0.15s ease, box-shadow 0.2s ease;
}
.btn-cta:hover { background: var(--or); color: var(--noir); box-shadow: 0 8px 20px rgba(216,52,42,0.25); transform: translateY(-2px); }
.btn-cta:active { transform: translateY(0) scale(0.98); }

.btn-outline {
  display: inline-block;
  border: 1px solid var(--or);
  color: var(--noir);
  padding: 12px 26px;
  border-radius: 6px;
  font-size: 15px;
  transition: background 0.2s ease, color 0.2s ease, transform 0.15s ease;
}
.btn-outline:hover { background: var(--or); color: var(--noir); transform: translateY(-2px); }
.btn-outline:active { transform: translateY(0) scale(0.98); }

/* Cards grid */
.grid-3 {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
  gap: 20px;
  margin: 32px 0;
}
.card {
  background: var(--blanc);
  border: 1px solid var(--bordure);
  border-radius: 8px;
  padding: 24px;
  overflow: hidden;
  position: relative;
  transition: transform 0.25s ease, box-shadow 0.25s ease, border-color 0.25s ease;
}
.card:hover {
  transform: translateY(-8px) scale(1.015);
  box-shadow: 0 18px 36px rgba(11,37,69,0.14), inset 0 0 0 2px var(--accent, var(--or));
  border-color: transparent;
}
.card h3 { margin-top: 0; transition: color 0.25s ease; }
.card:hover h3 { color: var(--accent, var(--or)); }
.card a { position: relative; }
.card:hover a { color: var(--accent, var(--or)); }
.card a::after {
  content: '';
  position: absolute;
  left: 0; bottom: -2px;
  width: 0;
  height: 1px;
  background: var(--accent, var(--or));
  transition: width 0.25s ease;
}
.card:hover a::after { width: 100%; }
.card .card-image, .card .img-placeholder, .card .card-icon-block { transition: transform 0.4s ease; }
.card:hover .card-image, .card:hover .img-placeholder, .card:hover .card-icon-block { transform: scale(1.06) rotate(-1deg); }
/* Un léger liseré de couleur en haut de chaque carte au survol, dans la couleur d'accent de la
   rubrique (ou le rouge de marque par défaut). Exclut .card-outil, qui a déjà son propre liseré fixe
   (voir plus bas) — pour ne pas empiler deux bordures au survol. */
.card:not(.card-outil)::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 3px;
  background: var(--accent, var(--or));
  transform: scaleX(0);
  transform-origin: left;
  transition: transform 0.3s ease;
}
.card:not(.card-outil):hover::before { transform: scaleX(1); }

/* Page content */
main { padding: 48px 24px; max-width: 760px; margin: 0 auto; }
main.wide { max-width: 1100px; }

/* Encart "Voiture de l'année" en page d'accueil : habillage premium (bordure en dégradé) au lieu
   d'un simple cadre gris, pour un temps fort éditorial qui ressort davantage (10/09/2026). */
.feature-banner {
  display: flex;
  align-items: center;
  gap: 24px;
  flex-wrap: wrap;
  border: 2px solid transparent;
  border-radius: 10px;
  padding: 24px;
  margin: 8px 0 40px;
  background: linear-gradient(var(--blanc), var(--blanc)) padding-box,
              linear-gradient(120deg, var(--noir), var(--or)) border-box;
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.feature-banner:hover { transform: translateY(-4px); box-shadow: 0 16px 32px rgba(11,37,69,0.12); }
.feature-banner img { transition: transform 0.3s ease; }
.feature-banner:hover img { transform: scale(1.08) rotate(-2deg); }

.placeholder-box {
  border: 1px dashed var(--accent, var(--or));
  border-radius: 8px;
  padding: 40px 24px;
  text-align: center;
  margin: 40px 0;
  transition: background 0.25s ease;
}
.placeholder-box:hover {
  background: color-mix(in srgb, var(--accent, var(--or)) 5%, transparent);
}
.placeholder-box h3 { margin-top: 0; }
.placeholder-box p { max-width: 480px; margin-left: auto; margin-right: auto; }

.cta-banner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  flex-wrap: wrap;
  background: linear-gradient(135deg, var(--noir) 0%, #143a6b 100%);
  color: var(--blanc);
  border-radius: 10px;
  padding: 28px 32px;
  margin: 40px 0;
  position: relative;
  overflow: hidden;
}
.cta-banner::after {
  content: '';
  position: absolute;
  top: -60px; right: -60px;
  width: 200px; height: 200px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(216,52,42,0.35) 0%, rgba(216,52,42,0) 70%);
  pointer-events: none;
}
.cta-banner h3 { color: var(--blanc); margin: 0 0 6px; }
.cta-banner p { color: #C9D2E0; margin: 0; max-width: 48ch; }
.cta-banner .btn-cta { background: var(--or); white-space: nowrap; flex-shrink: 0; position: relative; z-index: 1; }
.cta-banner .btn-cta:hover { background: var(--blanc); color: var(--noir); }
.cta-banner > div, .cta-banner > p { position: relative; z-index: 1; }
/* Bandeau aminci (15/09/2026, retour de Serge : "trop large" / trop épais) : padding vertical réduit,
   titre et texte légèrement plus compacts, bouton avec un padding propre au bandeau plutôt que le
   .btn-cta standard (plus généreux) utilisé ailleurs sur le site. */
.footer-cta {
  background: var(--noir);
  color: var(--blanc);
  padding: 18px 24px;
}
.footer-cta .container {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
  flex-wrap: wrap;
}
.footer-cta h3 { color: var(--blanc); margin: 0 0 3px; font-size: 17px; }
.footer-cta p { color: #C9D2E0; margin: 0; max-width: 48ch; font-size: 13px; }
.footer-cta .btn-cta { background: var(--or); white-space: nowrap; padding: 9px 18px; font-size: 14px; }
.footer-cta .btn-cta:hover { background: var(--blanc); color: var(--noir); }

/* Footer */
footer {
  border-top: 1px solid var(--bordure);
  color: var(--gris-texte);
  font-size: 13px;
}
.footer-grid {
  padding: 48px 24px 32px;
  display: grid;
  grid-template-columns: 1.2fr 1fr 1fr 1fr 1fr;
  gap: 32px;
  text-align: left;
}
.footer-col-title {
  font-family: 'Inter', sans-serif;
  font-weight: 500;
  font-size: 13px;
  color: var(--noir);
  text-transform: uppercase;
  letter-spacing: 0.05em;
  margin-bottom: 12px;
}
.footer-col { display: flex; flex-direction: column; }
.footer-col a { display: block; padding: 4px 0; color: var(--gris-texte); font-size: 14px; }
.footer-col a:hover { color: var(--or); }
.footer-bottom {
  border-top: 0.5px solid var(--bordure);
  padding: 18px 24px;
  font-size: 12px;
  text-align: center;
  color: var(--gris-texte);
}
/* Lien "Mentions légales" ajouté le 15/09/2026 : le lien doit se distinguer du texte environnant
   (par défaut, les liens du site reprennent la couleur du texte, sans soulignement). */
.footer-bottom a { text-decoration: underline; color: var(--gris-texte); }
.footer-bottom a:hover { color: var(--or); }
@media (max-width: 880px) {
  .footer-grid { grid-template-columns: 1fr 1fr 1fr; text-align: left; }
  .footer-brand { grid-column: 1 / -1; margin-bottom: 8px; }
}
@media (max-width: 720px) {
  .footer-grid { grid-template-columns: 1fr 1fr; text-align: left; }
  .footer-brand { grid-column: 1 / -1; margin-bottom: 8px; }
}

/* Simulateur */
.sim-form-card {
  background: var(--blanc);
  border: 1px solid var(--bordure);
  border-radius: 14px;
  padding: 32px;
  box-shadow: 0 4px 24px rgba(11,37,69,0.05);
  max-width: 480px;
}
/* Touche de couleur ajoutée sur le formulaire d'estimation-valeur.html (10/09/2026, demande de
   Serge : rendre le formulaire "plus vivant et dynamique"), puis étendue à simulateur.html le
   11/09/2026 pour que les deux simulateurs aient exactement le même rendu visuel. */
.sim-form-card--vendre { position: relative; overflow: hidden; }
.sim-form-card--vendre::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 4px;
  background: linear-gradient(90deg, var(--noir), var(--or));
}
.sim-form { display: grid; gap: 20px; }
#bloc-liste, #bloc-custom { display: grid; gap: 20px; }
#bloc-liste[hidden], #bloc-custom[hidden] { display: none; }
.sim-mode-toggle { display: flex; gap: 6px; background: #F3F5F8; border-radius: 10px; padding: 4px; margin-bottom: 24px; }
.sim-mode-toggle .mode-btn {
  flex: 1;
  border: none;
  background: transparent;
  padding: 10px 12px;
  font-family: 'Inter', sans-serif;
  font-size: 13px;
  font-weight: 600;
  color: var(--gris-texte);
  border-radius: 7px;
  cursor: pointer;
  transition: background 0.2s ease, color 0.2s ease, box-shadow 0.2s ease;
}
.sim-mode-toggle .mode-btn.active { background: var(--blanc); color: var(--noir); box-shadow: 0 1px 4px rgba(11,37,69,0.1); }
.sim-mode-toggle .mode-btn:hover:not(.active) { color: var(--noir); }
.sim-form label { font-size: 12px; text-transform: uppercase; letter-spacing: 0.05em; font-weight: 600; color: var(--gris-texte); display: block; margin-bottom: 6px; }
.sim-form select, .sim-form input:not([type="checkbox"]) {
  width: 100%;
  padding: 12px 14px;
  border: 1px solid var(--bordure);
  border-radius: 8px;
  font-family: 'Inter', sans-serif;
  font-size: 15px;
  color: var(--noir);
  background: var(--blanc);
  transition: border-color 0.2s ease, box-shadow 0.25s ease, transform 0.2s ease, background-color 0.2s ease;
}
/* Micro-interactions champs (survol/focus) — unifiées le 11/09/2026 sur les deux simulateurs
   (revente et coût de possession), qui partagent tous les deux la classe .sim-form sur leur
   <form> : léger lavis de couleur (bleu marine au survol, rouge au focus + petit soulèvement) pour
   un rendu identique, plus vivant, sur l'ensemble du site. Auparavant scopées à .form-section-fields
   (propre à estimation-valeur.html), ce qui laissait le simulateur de coût sans ces animations. */
.sim-form select:hover, .sim-form input:not([type="checkbox"]):hover {
  border-color: #B9C3D4;
  background-color: #F5F8FC;
}
.sim-form select:focus, .sim-form input:focus {
  outline: none;
  border-color: var(--or);
  transform: translateY(-1px);
  box-shadow: 0 4px 14px rgba(11,37,69,0.10), 0 0 0 3px rgba(216,52,42,0.12);
  background-color: #FFF9F8;
}
.sim-form input[type="checkbox"] {
  width: 16px;
  height: 16px;
  margin: 0 8px 0 0;
  vertical-align: middle;
  accent-color: var(--or);
  cursor: pointer;
  transition: transform 0.15s cubic-bezier(.34,1.56,.64,1);
}
.sim-form input[type="checkbox"]:checked { transform: scale(1.2); }
.sim-form input[type="checkbox"]:active { transform: scale(0.9); }
.form-row-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; }
@media (max-width: 560px) {
  .form-row-2 { grid-template-columns: 1fr; }
}
.form-section {
  margin-top: 28px;
  padding-top: 28px;
  border: 0;
  border-top: 2px solid var(--bordure);
  border-image: linear-gradient(90deg, var(--noir), var(--or)) 1;
}
.form-section:first-child { margin-top: 0; padding-top: 0; border-top: none; border-image: none; }
.form-section-title {
  font-family: 'Inter', sans-serif;
  font-size: 12px;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  color: var(--or);
  margin: 0 0 16px;
  padding: 0;
  display: flex;
  align-items: center;
}
/* Badge numéroté animé devant chaque titre de section (10/09/2026, demande de Serge : formulaire
   jugé "trop simple, pas assez animé") */
.section-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 20px;
  height: 20px;
  min-width: 20px;
  border-radius: 50%;
  background: var(--noir);
  color: var(--blanc);
  font-size: 11px;
  font-weight: 700;
  margin-right: 8px;
  /* Visible par défaut (10/09/2026) : l'apparition n'est plus conditionnée au défilement de la
     page — voir estimation-valeur.html, retour de Serge sur un formulaire dont les champs
     restaient cachés tant qu'on n'avait pas fait défiler. */
}
.reveal.is-visible .section-badge { transform: scale(1); opacity: 1; }
/* Petit effet d'apparition au chargement de la page (pas au défilement), ajouté par JS sur les
   navigateurs sans préférence "réduire les animations" — voir estimation-valeur.html. */
.badge-pop {
  animation: badge-pop-in 0.45s cubic-bezier(.34,1.56,.64,1);
}
@keyframes badge-pop-in {
  from { opacity: 0; transform: scale(0.4); }
  to { opacity: 1; transform: scale(1); }
}
/* Alternance de couleur des badges (marque/rouge de la charte) pour rythmer les 4 sections. */
.sim-form > .form-section:nth-child(2) .section-badge,
.sim-form > .form-section:nth-child(4) .section-badge {
  background: var(--or);
}
.form-section-fields { display: grid; gap: 20px; }
/* Les micro-interactions champs (survol/focus) qui étaient ici, propres à estimation-valeur.html,
   ont été déplacées le 11/09/2026 sur le sélecteur partagé .sim-form (voir plus haut) pour
   s'appliquer uniformément aux deux simulateurs (revente et coût de possession). */
.mobile-estimate-bar { display: none; }
@media (max-width: 880px) {
  .mobile-estimate-bar {
    display: flex;
    align-items: center;
    justify-content: center;
    text-align: center;
    position: fixed;
    left: 0; right: 0; bottom: 0;
    background: var(--noir);
    color: var(--blanc);
    padding: 14px 20px;
    font-family: 'Inter', sans-serif;
    font-size: 14px;
    font-weight: 600;
    z-index: 200;
    box-shadow: 0 -4px 16px rgba(11,37,69,0.18);
  }
  body.has-mobile-estimate-bar { padding-bottom: 64px; }
}
.sim-result {
  margin-top: 32px;
  position: relative;
  overflow: hidden;
  background: linear-gradient(180deg, #EEF3FA 0%, #F7FAFD 100%);
  border: 1px solid #D7E3F4;
  border-radius: 14px;
  padding: 36px 32px;
  box-shadow: 0 4px 24px rgba(11,37,69,0.06);
}
.sim-result::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 4px;
  background: linear-gradient(90deg, var(--noir), var(--or));
}
.badge-moto {
  display: inline-block;
  background: var(--noir);
  color: var(--blanc);
  font-size: 11px;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-weight: 600;
  padding: 6px 16px;
  border-radius: 999px;
}
.sim-result .label-sub { color: var(--gris-texte); font-size: 13px; margin-top: 18px; }
.sim-result .total { font-family: 'Cormorant Garamond', serif; font-size: 44px; line-height: 1.15; color: var(--noir); margin-top: 2px; }
/* Variante "chiffres pro" : police sans-serif + chiffres alignés (lining/tabular), utilisée uniquement
   par le simulateur d'estimation de valeur (estimation-valeur.html) pour un rendu plus lisible et
   professionnel sur un montant financier. N'affecte pas .sim-result .total du simulateur de consommation. */
.total-pro {
  font-family: 'Inter', sans-serif;
  font-size: 34px;
  font-weight: 700;
  font-variant-numeric: lining-nums tabular-nums;
  letter-spacing: -0.01em;
}
/* Repli "Voir le détail" (11/09/2026, demande de Serge) : le détail achat/énergie/entretien/assurance
   est maintenant replié par défaut dans un <details> natif (pas de JS nécessaire), pour que le total
   reste le seul élément mis en avant visuellement. */
.sim-breakdown-details { margin-top: 20px; }
.sim-breakdown-details summary {
  cursor: pointer;
  font-size: 13px;
  font-weight: 600;
  color: var(--noir);
  list-style: none;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  user-select: none;
}
.sim-breakdown-details summary::-webkit-details-marker { display: none; }
.sim-breakdown-details summary::after { content: '▾'; font-size: 10px; transition: transform 0.2s ease; }
.sim-breakdown-details[open] summary::after { transform: rotate(180deg); }
.sim-breakdown-details summary:hover { color: var(--or); }
/* Passé à une grille fixe 2 colonnes le 11/09/2026 (demande de Serge, même esprit que le montant sur
   une seule ligne du simulateur d'estimation de revente) : l'ancienne grille "auto-fit, minmax(130px)"
   créait des colonnes trop étroites pour les montants à 7 chiffres (ex. "2 351 025 FCFA"), qui
   retombaient à la ligne sur "FCFA" tout seul. 2 colonnes fixes donnent assez de place à chaque
   montant pour tenir sur une seule ligne, y compris sur mobile. */
.sim-breakdown { display: grid; grid-template-columns: repeat(2, 1fr); gap: 14px; margin-top: 14px; }
/* Sur mobile étroit, 2 colonnes ne laissent plus assez de place pour un montant à 7 chiffres avec son
   "FCFA" (ex. "2 860 000 FCFA") : le chiffre se faisait couper (14/09/2026, repéré en vérifiant le
   nouveau bloc "informations clés" sur petit écran). Une seule colonne sur mobile, comme .sim-coutkm-detail
   déjà juste en dessous. */
@media (max-width: 480px) {
  .sim-breakdown { grid-template-columns: 1fr; }
}
.sim-stat {
  background: var(--blanc);
  border: 1px solid #D7E3F4;
  border-radius: 10px;
  padding: 14px 16px;
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}
.sim-stat:hover { transform: translateY(-3px); box-shadow: 0 6px 16px rgba(11,37,69,0.08); }
.sim-stat-label { display: block; font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--gris-texte); margin-bottom: 6px; }

/* Bloc "ce que votre véhicule vaudra encore" du simulateur de coût de possession (14/09/2026).
   Volontairement détaché du total par un filet : c'est une information complémentaire, pas une
   composante du coût affiché au-dessus — le total reste le coût brut, achat compris. */
.sim-revente {
  margin-top: 22px;
  padding-top: 18px;
  border-top: 1px solid #D7E3F4;
}
.sim-revente-montant {
  font-size: 22px;
  font-weight: 700;
  line-height: 1.2;
  color: var(--noir);
  margin-top: 2px;
  font-variant-numeric: tabular-nums;
}
/* Coût kilométrique (14/09/2026) : mis en avant juste sous le total, c'est le chiffre qui permet
   de comparer deux véhicules que tout oppose par ailleurs. */
.sim-coutkm { margin-top: 22px; padding-top: 18px; border-top: 1px solid #D7E3F4; }
/* Volontairement PLUS PETIT et en police courante, pas en Cormorant : le coût total de possession
   brut (.sim-result .total, 44px serif) doit rester la seule information mise en avant (demande de
   Serge, 14/09/2026). Le coût kilométrique et la valeur de revente sont des compléments de lecture,
   ils ne doivent pas lui faire concurrence visuellement. */
.sim-coutkm-montant {
  font-size: 22px;
  font-weight: 700;
  line-height: 1.2;
  color: var(--noir);
  margin-top: 2px;
  font-variant-numeric: tabular-nums;
}
.sim-coutkm-detail { display: grid; grid-template-columns: repeat(3, 1fr); gap: 12px; margin-top: 14px; }
.sim-coutkm-detail > div {
  background: var(--blanc);
  border: 1px solid #D7E3F4;
  border-radius: 10px;
  padding: 12px 14px;
}
.sim-coutkm-detail span { display: block; font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; color: var(--gris-texte); margin-bottom: 5px; }
.sim-coutkm-detail strong { display: block; font-size: 15px; color: var(--noir); font-variant-numeric: tabular-nums; white-space: nowrap; }
.sim-coutkm-detail em { display: block; font-style: normal; font-size: 11px; color: var(--gris-texte); margin-top: 4px; line-height: 1.4; }
.sim-coutkm-note { font-size: 12px; color: var(--gris-texte); margin-top: 12px; line-height: 1.6; }
.sim-coutkm-note strong { color: var(--noir); white-space: nowrap; }
@media (max-width: 700px) {
  .sim-coutkm-detail { grid-template-columns: 1fr; }
}

.sim-revente-note { font-size: 12px; color: var(--gris-texte); margin-top: 10px; line-height: 1.6; }
.sim-revente-note strong { color: var(--noir); white-space: nowrap; }
.sim-revente-note a { color: var(--or); text-decoration: underline; }

/* Astérisque sur les montants estimés (15/09/2026, demande de Serge) : rappelle visuellement, sans
   surcharger, que le coût total et la valeur de revente affichés sont des estimations. */
.sim-star { color: var(--or); font-size: 0.45em; vertical-align: top; margin-left: 2px; }
.sim-footnote { font-size: 12px; color: var(--gris-texte); margin-top: 18px; padding-top: 14px; border-top: 1px solid #D7E3F4; }

/* Apparition au défilement */
.reveal {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.6s ease, transform 0.6s ease;
}
.reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
}
.reveal-stagger > * { opacity: 0; }
.reveal-stagger.is-visible > * {
  animation: reveal-stagger-in 0.6s ease both;
}
.reveal-stagger.is-visible > *:nth-child(2) { animation-delay: 0.08s; }
.reveal-stagger.is-visible > *:nth-child(3) { animation-delay: 0.16s; }
.reveal-stagger.is-visible > *:nth-child(4) { animation-delay: 0.24s; }
.reveal-stagger.is-visible > *:nth-child(5) { animation-delay: 0.32s; }
.reveal-stagger.is-visible > *:nth-child(6) { animation-delay: 0.4s; }
.reveal-stagger.is-visible > *:nth-child(7) { animation-delay: 0.48s; }
@keyframes reveal-stagger-in {
  from { opacity: 0; transform: translateY(20px); }
  to { opacity: 1; transform: translateY(0); }
}
/* Chiffres alignés (tabular-nums) et pas de retour à la ligne (11/09/2026, demande de Serge : un
   montant + "FCFA" doit tenir sur une seule ligne, comme sur le simulateur d'estimation de revente) —
   combiné à la grille 2 colonnes ci-dessus (.sim-breakdown) qui donne assez de largeur à chaque case. */
.sim-breakdown strong { display: block; color: var(--noir); font-size: 17px; font-weight: 600; font-variant-numeric: lining-nums tabular-nums; white-space: nowrap; }

/* Layout article en deux colonnes */
.layout-article {
  max-width: 1040px;
  margin: 0 auto;
  padding: 48px 24px;
  display: grid;
  grid-template-columns: minmax(0, 1fr) 280px;
  gap: 56px;
  align-items: start;
}
.article-content { min-width: 0; }
.article-content p { max-width: 62ch; }

.sidebar { position: sticky; top: 88px; display: flex; flex-direction: column; gap: 16px; }
.sidebar-card {
  background: var(--surface-1, #F4F6F8);
  border-radius: 12px;
  padding: 1.25rem;
  border: 0.5px solid var(--bordure);
  border-top: 3px solid var(--accent, var(--or));
  transition: transform 0.25s ease, box-shadow 0.25s ease;
}
.sidebar-card:hover {
  transform: translateY(-4px);
  box-shadow: 0 12px 24px rgba(11,37,69,0.10);
}
.sidebar-card h4 { font-family: 'Inter', sans-serif; font-weight: 500; font-size: 14px; margin: 0 0 8px; color: var(--noir); }
.sidebar-card p { font-size: 13px; color: var(--gris-texte); margin-bottom: 12px; max-width: none; }
.sidebar-card a.btn-cta, .sidebar-card a.btn-outline { display: block; text-align: center; font-size: 13px; padding: 10px 14px; }
.sidebar-list { list-style: none; }
.sidebar-list li { padding: 6px 0; border-bottom: 0.5px solid var(--bordure); font-size: 13px; }
.sidebar-list li:last-child { border-bottom: none; }
.sidebar-list a { color: var(--noir); }
.sidebar-list a:hover { color: var(--or); }

@media (max-width: 880px) {
  .layout-article { grid-template-columns: 1fr; gap: 32px; padding: 32px 20px; }
  .sidebar { position: static; }
}

/* Grille des 3 finalistes "Voiture de l'année" sur une seule ligne (21/09/2026, demande de Serge) :
   dans la mise en page à sidebar (.layout-article), la colonne de contenu est plus étroite qu'une page
   pleine largeur, donc le .grid-3 générique (auto-fit, 240px min) ne tenait que 2 colonnes et renvoyait
   le 3e finaliste à la ligne suivante. Forcé à 3 colonnes égales, mais seulement au-dessus de 880px —
   en dessous, .layout-article repasse en 1 colonne pleine largeur et le comportement auto-fit par
   défaut de .grid-3 reste le mieux adapté (empile proprement sur mobile). */
@media (min-width: 881px) {
  .layout-article .grid-3 { grid-template-columns: repeat(3, 1fr); gap: 16px; }
  .layout-article .grid-3 .card { padding: 16px; }
}

/* Bandeau des 3 bénéfices sur contact.html ("Gagnez du temps" / "Décidez en confiance" / "Évitez
   les mauvaises surprises"), forcé sur une seule ligne (21/09/2026, demande de Serge : "mets les 3
   sur la même ligne pour un bon ajustement et un équilibre"). Même logique que les 3 finalistes
   "Voiture de l'année" ci-dessus : la page utilise le <main> par défaut (760px max), plus étroit
   qu'une page pleine largeur, donc le .grid-3 générique (auto-fit, 240px min) ne tenait que 2
   colonnes. Actif au-dessus de 700px ; en dessous, le comportement auto-fit par défaut de .grid-3
   reprend la main et empile proprement sur mobile. */
@media (min-width: 701px) {
  .benefits-grid { grid-template-columns: repeat(3, 1fr); gap: 16px; }
  .benefits-grid .card { padding: 18px; }
}

/* Carte sidebar "Nos outils" (14/09/2026) — version compacte, sur le côté, du bandeau .outils-banner,
   utilisée sur voiture-de-lannee.html et magazine.html à la demande de Serge (le bandeau plein format
   ne convenait pas à ces deux pages). Plusieurs boutons empilés dans une même sidebar-card : on ajoute
   un espacement entre eux, absent par défaut car .sidebar-card n'est pas un conteneur flex. */
.sidebar-card-outils a.btn-cta,
.sidebar-card-outils a.btn-outline { margin-bottom: 8px; }
.sidebar-card-outils a:last-child { margin-bottom: 0; }
.sidebar-card-outils .sidebar-card-outils-soon {
  display: inline-block; margin-left: 6px; padding: 1px 6px; border-radius: 8px;
  background: var(--or); color: var(--noir); font-size: 9px; text-transform: uppercase;
  letter-spacing: 0.03em; font-weight: 700; vertical-align: 1px;
}

/* Hero accueil en deux colonnes sur desktop */
.hero-split {
  max-width: 1100px;
  margin: 0 auto;
  padding: 56px 24px;
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 48px;
  align-items: center;
}
.hero-split .hero-text { text-align: left; animation: fade-in-left 0.7s ease both; }
.hero-split .hero-text h1 { font-size: 38px; }
.hero-split .hero-image { height: 420px; margin: 0; animation: fade-in-right 0.7s ease 0.15s both; }
@keyframes fade-in-left {
  from { opacity: 0; transform: translateX(-24px); }
  to { opacity: 1; transform: translateX(0); }
}
@keyframes fade-in-right {
  from { opacity: 0; transform: translateX(24px); }
  to { opacity: 1; transform: translateX(0); }
}
@media (max-width: 880px) {
  .hero-split { grid-template-columns: 1fr; padding: 40px 20px; }
  .hero-split .hero-text { text-align: center; }
}

/* Simulateur en deux colonnes sur desktop */
.sim-layout {
  display: grid;
  grid-template-columns: minmax(0, 480px) 1fr;
  gap: 40px;
  align-items: start;
}
@media (max-width: 880px) {
  .sim-layout { grid-template-columns: 1fr; }
}

/* Images */
.hero-image {
  width: 100%;
  height: 380px;
  object-fit: cover;
  /* 21/09/2026 : les photos étaient désaturées de 15% (0.85) sur tout le site, ce qui participait
     nettement au ressenti "pas coloré" — corrigé en légère sursaturation (1.08) pour redonner leur
     couleur naturelle aux photos existantes, sans remplacer aucune image. */
  filter: saturate(1.08) contrast(1.04);
  border-radius: 8px;
}
.hero-image-wrap { position: relative; margin: 0 0 40px; }
.hero-image-wrap::after {
  content: "";
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(11,37,69,0) 40%, rgba(11,37,69,0.55) 100%);
  border-radius: 8px;
}
.card-image {
  width: 100%;
  height: 160px;
  object-fit: cover;
  filter: saturate(1.08) contrast(1.04);
  border-radius: 8px 8px 0 0;
  margin: -24px -24px 16px;
  width: calc(100% + 48px);
}
.card-icon-block {
  width: calc(100% + 48px);
  height: 160px;
  margin: -24px -24px 16px;
  border-radius: 8px 8px 0 0;
  background: linear-gradient(135deg, var(--noir) 0%, var(--or) 140%);
  display: flex;
  align-items: center;
  justify-content: center;
}
.card-image-full {
  height: 320px;
  object-fit: contain;
  background: var(--noir);
  filter: none;
}
.img-placeholder-hero {
  width: 100%;
  height: 320px;
  border-radius: 8px;
  background: repeating-linear-gradient(135deg, #eef0f3, #eef0f3 10px, #e2e5ea 10px, #e2e5ea 20px);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  color: var(--gris-texte);
  margin-bottom: 24px;
}
.img-placeholder {
  width: 100%;
  height: 160px;
  border-radius: 8px 8px 0 0;
  margin: -24px -24px 16px;
  width: calc(100% + 48px);
  background: repeating-linear-gradient(135deg, #eef0f3, #eef0f3 10px, #e2e5ea 10px, #e2e5ea 20px);
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  color: var(--gris-texte);
}

/* Filet de sécurité pour la couverture du magazine (21/09/2026, élargissement de la couverture à
   la demande de Serge) — .heyzine-fold vient de heyzine.4.min.css (chargé depuis leur CDN) ; si ce
   fichier tarde à charger ou ne charge pas (réseau lent, bloqueur de scripts), cette règle locale
   garantit que l'image de couverture remplit quand même correctement son cadre (au lieu de s'afficher
   toute petite dans un grand cadre vide). Sans effet négatif si le CSS de Heyzine charge normalement :
   il définit le même comportement en interne pour ce composant. */
.heyzine-fold { position: relative; overflow: hidden; border-radius: 8px; background: var(--noir); }
.heyzine-fold .img-front.fp-thumb {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* Lecteur du magazine en fenêtre superposée (magazine.html uniquement, 10/09/2026) — évite de
   rediriger l'utilisateur vers heyzine.com pour lire le flip-book, il reste sur auto-phile.com. */
.magazine-modal {
  position: fixed;
  inset: 0;
  background: rgba(11, 37, 69, 0.75);
  z-index: 500;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 24px;
  animation: magazine-modal-fade 0.2s ease;
}
.magazine-modal[hidden] { display: none; }
@keyframes magazine-modal-fade {
  from { opacity: 0; }
  to { opacity: 1; }
}
.magazine-modal-inner {
  position: relative;
  width: 100%;
  max-width: 960px;
  height: 85vh;
  background: var(--noir);
  border-radius: 10px;
  overflow: hidden;
  box-shadow: 0 20px 60px rgba(0,0,0,0.4);
}
.magazine-modal-iframe {
  width: 100%;
  height: 100%;
  border: 0;
  display: block;
}
.magazine-modal-close {
  position: absolute;
  top: 10px;
  right: 10px;
  z-index: 1;
  width: 36px;
  height: 36px;
  border-radius: 50%;
  border: none;
  background: var(--blanc);
  color: var(--noir);
  font-size: 16px;
  line-height: 1;
  cursor: pointer;
  box-shadow: 0 2px 8px rgba(0,0,0,0.25);
  transition: transform 0.15s ease, background-color 0.15s ease;
}
.magazine-modal-close:hover { transform: scale(1.08); background: var(--or); color: var(--blanc); }
@media (max-width: 640px) {
  .magazine-modal { padding: 0; }
  .magazine-modal-inner { max-width: 100%; height: 100%; border-radius: 0; }
}

/* --- Page d'accueil : bloc "Nos outils" dans le héros (le MVP du site, 14/09/2026) --- */
.hero-outils { padding: 40px 0 10px; }
.hero-marque {
  font-size: 12px; text-transform: uppercase; letter-spacing: 0.18em;
  color: var(--or); font-weight: 700; margin: 0 0 6px;
}
.hero-outils h1 { font-size: 40px; margin: 0 0 10px; }
.hero-outils .subtitle { color: var(--gris-texte); margin: 0 0 30px; max-width: 640px; }

.card-outil {
  display: flex; flex-direction: column; position: relative;
  text-decoration: none; color: inherit;
  border-top: 3px solid var(--or);
}
.card-outil h3 { margin-top: 4px; }
.card-outil > p { flex-grow: 1; }
.card-outil--bientot { opacity: 0.72; border-top-color: #D7E3F4; }

/* Chaque outil s'adresse à une personne différente, à un moment différent : ce repère remplace
   la numérotation 1/2/3, qui laissait croire à un parcours en trois étapes (retour de Serge). */
.outil-tag {
  display: block; font-size: 11px; text-transform: uppercase; letter-spacing: 0.06em;
  color: var(--or); font-weight: 700; margin-bottom: 2px;
}
.card-outil--bientot .outil-tag { color: var(--gris-texte); }

/* Le bouton plein du héros (.btn-cta), repris dans les cartes outils. La carte entière étant
   cliquable, le bouton réagit au survol de la carte plutôt qu'à son propre survol. */
.outil-btn { align-self: flex-start; margin-top: 2px; }
.card-outil:hover .outil-btn { background: var(--or); color: var(--noir); }
.outil-btn--inactif,
.card-outil--bientot:hover .outil-btn--inactif {
  background: #E8EDF5; color: var(--gris-texte) !important; box-shadow: none; cursor: default;
}

.pourquoi { padding: 10px 24px 50px; max-width: 760px; }
.pourquoi h2 { margin-bottom: 8px; }
.pourquoi p { color: var(--gris-texte); }

/* --- Bandeau "chiffres clés" (page d'accueil) — couleur + mouvement (21/09/2026) --- */
.stats-band {
  padding: 40px 24px 44px;
}
.stats-band-grid {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 16px;
  max-width: 1100px;
  margin: 0 auto;
}
.stat-item {
  position: relative;
  overflow: hidden;
  text-align: center;
  padding: 22px 14px 18px;
  background: var(--blanc);
  border: 1px solid var(--bordure);
  border-radius: 12px;
  transition: transform 0.3s ease, box-shadow 0.3s ease;
}
.stat-item::before {
  content: '';
  position: absolute;
  top: 0; left: 0; right: 0;
  height: 4px;
  background: var(--stat-color, var(--or));
}
.stat-item:hover {
  transform: translateY(-6px);
  box-shadow: 0 14px 28px rgba(11,37,69,0.12);
}
.stat-item:nth-child(1) { --stat-color: #1BA672; }
.stat-item:nth-child(2) { --stat-color: #2F80ED; }
.stat-item:nth-child(3) { --stat-color: #F2994A; }
.stat-item:nth-child(4) { --stat-color: #C9971F; }
.stat-number {
  display: block;
  font-size: 2.2em;
  font-weight: 700;
  color: var(--noir);
  line-height: 1.1;
  font-variant-numeric: tabular-nums;
}
.stat-item:nth-child(1) .stat-number { color: #1BA672; }
.stat-item:nth-child(2) .stat-number { color: #2F80ED; }
.stat-item:nth-child(3) .stat-number { color: #F2994A; }
.stat-item:nth-child(4) .stat-number { color: #C9971F; }
.stat-label {
  display: block;
  margin-top: 6px;
  font-size: 13px;
  color: var(--gris-texte);
}
@media (max-width: 720px) {
  .stats-band-grid { grid-template-columns: repeat(2, 1fr); }
}

/* --- Bandeau "Nos outils", affiché sous l'en-tête sur la plupart des pages (14/09/2026) --- */
.outils-banner {
  background: linear-gradient(120deg, var(--noir) 0%, #123163 100%);
  color: var(--blanc);
}
/* Mise en page centrée (14/09/2026, retour de Serge : le texte à gauche et les boutons groupés au
   centre laissaient un grand vide à droite, l'ensemble ne semblait pas "ajusté") : tout le contenu du
   bandeau est maintenant centré en colonne — texte au-dessus, boutons en dessous — plutôt qu'étalé sur
   une seule ligne entre un bloc de texte et un bloc de boutons. */
/* Bandeau aminci (15/09/2026, retour de Serge : "trop large" / trop épais) : padding vertical et
   gap réduits, kicker et boutons resserrés, pour un bandeau plus fin sur toutes les pages. */
.outils-banner-inner {
  display: flex;
  flex-direction: column;
  align-items: center;
  text-align: center;
  gap: 8px;
  padding: 14px 24px;
}
.outils-banner-kicker {
  display: block;
  font-size: 10px;
  text-transform: uppercase;
  letter-spacing: 0.12em;
  color: var(--or);
  font-weight: 700;
  margin-bottom: 2px;
}
.outils-banner-text { max-width: 640px; }
.outils-banner-text p { color: #C9D2E0; margin: 0; font-size: 13px; }
.outils-banner-links { display: flex; justify-content: center; gap: 10px; flex-wrap: wrap; }
.outils-banner-btn { padding: 8px 16px; font-size: 13px; white-space: nowrap; background: var(--or); }
.outils-banner-btn:hover { background: var(--blanc); color: var(--noir); }
.outils-banner-btn--ghost { background: transparent; box-shadow: none; border: 1px solid rgba(255,255,255,0.5); color: var(--blanc); }
.outils-banner-btn--ghost:hover { background: rgba(255,255,255,0.12); color: var(--blanc); border-color: rgba(255,255,255,0.8); }
/* Comparateur par budget : présent sur le même bandeau que les 2 autres (demande de Serge), mais dans
   un style volontairement plus discret puisqu'il mène à une page "bientôt disponible" plutôt qu'à un
   outil utilisable dès maintenant. */
.outils-banner-btn--soon { background: rgba(255,255,255,0.18); box-shadow: none; border: 1px solid rgba(255,255,255,0.45); color: var(--blanc); font-weight: 500; }
.outils-banner-btn--soon:hover { background: rgba(255,255,255,0.28); color: var(--blanc); border-color: rgba(255,255,255,0.65); }
.outils-banner-soon-tag {
  display: inline-block; margin-left: 6px; padding: 2px 7px; border-radius: 10px;
  background: var(--or); color: var(--noir); font-size: 10px; text-transform: uppercase;
  letter-spacing: 0.04em; font-weight: 700; vertical-align: 1px;
}
@media (max-width: 700px) {
  .outils-banner-inner { flex-direction: column; align-items: flex-start; padding: 12px 18px; }
  .outils-banner-links { width: 100%; }
  .outils-banner-btn { flex: 1; text-align: center; }
}

/* Illustrations des cartes de contenu (23/09/2026, demande de Serge : "crée des illustrations visuelles
   pour chaque point abordé", à partir de la page Passer à l'électrique). Petits dessins SVG en trait,
   écrits directement dans la page (aucune image à charger), sur un fond teinté de la couleur de la
   rubrique. Les traits prennent automatiquement la couleur d'accent de la page (.a) et le bleu marine
   de marque (.n) : la même illustration se recolore toute seule d'une rubrique à l'autre. Un détail
   par dessin bouge doucement (éclair qui pulse, roue ou clé qui tourne, barres qui montent...), coupé
   si le visiteur a demandé à réduire les animations dans son système. */
.card-illu {
  height: 116px;
  margin: 0 0 18px;
  border-radius: 8px;
  background: #F2F5F9;
  background: color-mix(in srgb, var(--accent, var(--or)) 9%, #ffffff);
  display: flex;
  align-items: center;
  justify-content: center;
  overflow: hidden;
}
.card-illu svg { height: 104px; width: auto; max-width: 100%; fill: none; stroke-width: 2.2; stroke-linecap: round; stroke-linejoin: round; }
.card-illu .a { stroke: var(--accent, var(--or)); }
.card-illu .n { stroke: var(--noir); }
.card-illu .g { stroke: var(--noir); opacity: 0.35; }
.card-illu .fa { fill: var(--accent, var(--or)); stroke: none; }
.card-illu .fn { fill: var(--noir); stroke: none; }
.card-illu .soft { fill: var(--accent, var(--or)); opacity: 0.16; stroke: none; }
.card-illu text { font-family: 'Inter', sans-serif; font-weight: 600; stroke: none; }
@keyframes illu-pulse { 0%, 100% { opacity: 1; } 50% { opacity: 0.25; } }
@keyframes illu-bob { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-4px); } }
@keyframes illu-swing { 0%, 100% { transform: rotate(-12deg); } 50% { transform: rotate(12deg); } }
@keyframes illu-spin { to { transform: rotate(360deg); } }
@keyframes illu-grow { 0% { transform: scaleY(0.15); } 35%, 100% { transform: scaleY(1); } }
@keyframes illu-gap { 0%, 100% { transform: scaleY(1); } 50% { transform: scaleY(0.82); } }
.card-illu .pulse { animation: illu-pulse 2.4s ease-in-out infinite; }
.card-illu .bob { animation: illu-bob 3s ease-in-out infinite; transform-box: fill-box; }
.card-illu .swing { animation: illu-swing 3.5s ease-in-out infinite; transform-box: fill-box; transform-origin: center; }
.card-illu .spin { animation: illu-spin 14s linear infinite; transform-box: fill-box; transform-origin: center; }
.card-illu .grow { animation: illu-grow 5s ease-out infinite; transform-box: fill-box; transform-origin: bottom; }
.card-illu .gap { animation: illu-gap 4s ease-in-out infinite; transform-box: fill-box; transform-origin: bottom; }
@media (prefers-reduced-motion: reduce) { .card-illu * { animation: none !important; } }

/* ===== Animations automobiles dans les marges (23/09/2026) =====
   Le contenu est injecté par js/layout.js (constante ANIMATION_MARGES : 1, 2 ou 3). Voir le commentaire
   dans ce fichier. Couleur d'accent de la rubrique, placé sous le contenu, masqué sous 1340px. */
body.deco-on::before, body.deco-on::after, html:has(body.deco-on)::before, html:has(body.deco-on)::after { display:none; } /* halos colorés retirés quand les animations sont actives : fond blanc cassé uni */
.deco-lane{position:fixed; top:120px; bottom:0; width:calc((100vw - 1100px) / 2); pointer-events:none; z-index:-1; display:none;} /* sous le bandeau bleu, l’en-tête et les cartes */
.deco-lane.l{left:0;} .deco-lane.r{right:0;}
.deco-lane .ic{position:absolute; left:50%; width:56px; height:56px; margin-left:-28px; color:var(--accent, var(--or)); opacity:.4;}
.deco-lane .ic svg{width:100%; height:100%; display:block;}
@media (min-width:1340px){ .deco-lane{display:block;} }

/* Option 1 : icônes flottantes */
@keyframes d-float{0%,100%{transform:translateY(0) rotate(var(--r,0deg));}50%{transform:translateY(-12px) rotate(var(--r,0deg));}}
@keyframes d-steer{0%,100%{transform:rotate(-10deg);}50%{transform:rotate(10deg);}}
.s1 .ic{animation:d-float 8s ease-in-out infinite;}
.s1 .ic.steer{animation:d-steer 8s ease-in-out infinite;}

/* Option 2 : route en mouvement */
@keyframes d-road{from{background-position-y:0;}to{background-position-y:46px;}}
@keyframes d-drive{0%{top:-40px;}100%{top:100%;}}
.s2 .road{position:absolute; top:0; bottom:0; left:50%; width:6px; margin-left:-3px; opacity:.3;
  background-image:repeating-linear-gradient(var(--accent, var(--or)) 0 24px, transparent 24px 46px);
  animation:d-road 3s linear infinite;}
.s2 .edge{position:absolute; top:0; bottom:0; width:1px; background:var(--accent, var(--or)); opacity:.18;}
.s2 .edge.a{left:calc(50% - 38px);} .s2 .edge.b{left:calc(50% + 38px);}
.s2 .car{position:absolute; left:50%; width:32px; height:60px; margin-left:-16px; color:var(--accent, var(--or)); opacity:.5; animation:d-drive 18s linear infinite;}
.s2 .car svg{width:100%; height:100%; display:block;}
.r .s2 .car{animation-direction:reverse; animation-delay:-9s;}

/* Option 3 : jauges & rotation */
@keyframes d-spin{to{transform:rotate(360deg);}}
@keyframes d-needle{0%,100%{transform:rotate(-35deg);}50%{transform:rotate(35deg);}}
.s3 .ic.spin svg{animation:d-spin 16s linear infinite;}
.s3 .needle{transform-box:view-box; transform-origin:24px 27px; animation:d-needle 6s ease-in-out infinite;}

@media (prefers-reduced-motion:reduce){ .deco-lane *{animation:none !important;} }


/* Points illustrés dans les listes de conseils (23/09/2026, suite de la demande "des illustrations pour
   chaque point abordé", étendue aux pages Conseils, Sécurité routière, Financement, Assurance et
   Contact). Chaque puce est remplacée par une petite icône dessinée (SVG écrit dans la page), dans une
   pastille teintée de la couleur de la rubrique. Un seul détail bouge en continu sur certaines icônes
   (goutte, aiguille, repère...) ; les autres s'animent seulement au survol de la ligne. */
ul.illu-list { list-style: none; margin: 0 0 20px; padding: 0; }
ul.illu-list > li { display: flex; gap: 14px; align-items: flex-start; margin-bottom: 14px; }
ul.illu-list > li::marker { content: none; }
.li-illu {
  flex: 0 0 48px; width: 48px; height: 48px; border-radius: 12px;
  background: #F2F5F9;
  background: color-mix(in srgb, var(--accent, var(--or)) 10%, #ffffff);
  display: flex; align-items: center; justify-content: center;
  transition: transform 0.3s ease, background 0.3s ease;
}
ul.illu-list > li:hover .li-illu { transform: translateY(-2px) scale(1.06); background: color-mix(in srgb, var(--accent, var(--or)) 18%, #ffffff); }
.li-illu svg { width: 36px; height: 36px; overflow: visible; fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.li-txt { padding-top: 11px; flex: 1; min-width: 0; }
.li-illu .a, .card-illu .a { stroke: var(--accent, var(--or)); }
.li-illu .n, .card-illu .n { stroke: var(--noir); }
.li-illu .fa { fill: var(--accent, var(--or)); stroke: none; }
.li-illu .fn { fill: var(--noir); stroke: none; }
.li-illu .soft { fill: var(--accent, var(--or)); opacity: 0.16; stroke: none; }
.li-illu text, .card-illu text { font-family: 'Inter', sans-serif; font-weight: 600; stroke: none; }
.li-illu .pulse, .card-illu .pulse { animation: illu-pulse 2.4s ease-in-out infinite; }
.li-illu .bob, .card-illu .bob { animation: illu-bob 3s ease-in-out infinite; }
@keyframes illu-needle { 0%, 100% { transform: rotate(-18deg); } 50% { transform: rotate(14deg); } }
.li-illu .needle, .card-illu .needle, .li-illu .needle-s { animation: illu-needle 3.2s ease-in-out infinite; transform-box: fill-box; transform-origin: left bottom; }
.li-illu .tick, .card-illu .tick { animation: illu-spin 8s linear infinite; transform-box: fill-box; transform-origin: center bottom; }
.li-illu .hspin, .li-illu .hswing, .card-illu .hspin, .card-illu .hswing { transform-box: fill-box; transform-origin: center; transition: transform 0.6s ease; }
ul.illu-list > li:hover .hspin, .card:hover .card-illu .hspin { transform: rotate(180deg); }
ul.illu-list > li:hover .hswing, .card:hover .card-illu .hswing { transform: rotate(-15deg); }
@media (prefers-reduced-motion: reduce) { .li-illu *, .card-illu * { animation: none !important; transition: none !important; } }

/* Page Magazine en deux colonnes (23/09/2026, demande de Serge : couverture un peu plus grande, mais
   titre, présentation et boutons toujours visibles sans défiler). La hauteur de la couverture suit
   la hauteur de l'écran (100vh moins l'en-tête et le bandeau), plafonnée à 540px : environ +25 % sur
   un écran d'ordinateur courant par rapport à l'ancienne mise en page empilée. */
.magazine-hero { display: grid; grid-template-columns: 1fr; grid-template-areas: "intro" "cover" "actions"; gap: 20px; justify-items: center; text-align: center; margin-bottom: 8px; }
.magazine-hero-intro { grid-area: intro; }
.magazine-hero-cover { grid-area: cover; }
.magazine-hero-actions { grid-area: actions; }
.magazine-hero h1 { margin-bottom: 6px; }
.magazine-hero .trait-or { margin: 6px auto 12px; }
.magazine-hero-intro p { margin: 0 auto; max-width: 46ch; }
.magazine-hero h2 { margin: 0 0 8px; }
.magazine-edition { margin: 0 0 18px; color: var(--gris-texte); }
.magazine-edition strong { color: var(--noir); font-weight: 500; }
.magazine-buttons { display: flex; gap: 12px; flex-wrap: wrap; justify-content: center; }
.magazine-hero .heyzine-fold { height: min(62vh, 480px); width: auto; max-width: 100%; aspect-ratio: 358/523; margin: 0 auto; box-shadow: 0 14px 34px rgba(11, 37, 69, 0.18); }
/* Le titre et le sous-titre intégrés au composant Heyzine s'affichaient par-dessus la couverture : ils
   sont désormais repris en texte à côté, donc masqués ici (l'effet de coin corné reste). */
.magazine-hero .heyzine-fold .fp-title, .magazine-hero .heyzine-fold .fp-subtitle { display: none; }
@media (min-width: 900px) {
  .magazine-hero {
    grid-template-columns: auto minmax(0, 420px);
    grid-template-areas: "cover intro" "cover actions";
    grid-template-rows: auto 1fr;
    column-gap: 56px; row-gap: 22px;
    justify-content: center; justify-items: start; align-items: start; text-align: left;
    margin-top: -8px;
  }
  .magazine-hero-intro { align-self: end; }
  .magazine-hero .trait-or { margin: 6px 0 14px; }
  .magazine-hero-intro p { margin: 0; }
  .magazine-buttons { justify-content: flex-start; }
  .magazine-hero .heyzine-fold { height: min(calc(100vh - 300px), 540px); min-height: 330px; }
}
