/* ==========================================================================
   AIDES RÉNOVATION — feuille de style commune aux 4 landing pages
   (PAC / PV / ITE / Générale)

   1. Base utilitaire (build Tailwind figé — ne pas éditer)
   2. Extensions utilitaires
   3. Design système : couleurs, ombres, boutons, titres
   4. Header + logo
   5. Hero : bloc aides, photo, emplacement formulaire
   6. Sections : solution, aides, réassurance, CTA
   7. Footer, cookies, pages légales
   8. Animations
   ========================================================================== */

/* ==========================================================================
   1. BASE UTILITAIRE — build Tailwind v3.4.19 figé
   ========================================================================== */
*,
:after,
:before {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x: ;
  --tw-pan-y: ;
  --tw-pinch-zoom: ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position: ;
  --tw-gradient-via-position: ;
  --tw-gradient-to-position: ;
  --tw-ordinal: ;
  --tw-slashed-zero: ;
  --tw-numeric-figure: ;
  --tw-numeric-spacing: ;
  --tw-numeric-fraction: ;
  --tw-ring-inset: ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgba(59, 130, 246, .5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur: ;
  --tw-brightness: ;
  --tw-contrast: ;
  --tw-grayscale: ;
  --tw-hue-rotate: ;
  --tw-invert: ;
  --tw-saturate: ;
  --tw-sepia: ;
  --tw-drop-shadow: ;
  --tw-backdrop-blur: ;
  --tw-backdrop-brightness: ;
  --tw-backdrop-contrast: ;
  --tw-backdrop-grayscale: ;
  --tw-backdrop-hue-rotate: ;
  --tw-backdrop-invert: ;
  --tw-backdrop-opacity: ;
  --tw-backdrop-saturate: ;
  --tw-backdrop-sepia: ;
  --tw-contain-size: ;
  --tw-contain-layout: ;
  --tw-contain-paint: ;
  --tw-contain-style:
}

::backdrop {
  --tw-border-spacing-x: 0;
  --tw-border-spacing-y: 0;
  --tw-translate-x: 0;
  --tw-translate-y: 0;
  --tw-rotate: 0;
  --tw-skew-x: 0;
  --tw-skew-y: 0;
  --tw-scale-x: 1;
  --tw-scale-y: 1;
  --tw-pan-x: ;
  --tw-pan-y: ;
  --tw-pinch-zoom: ;
  --tw-scroll-snap-strictness: proximity;
  --tw-gradient-from-position: ;
  --tw-gradient-via-position: ;
  --tw-gradient-to-position: ;
  --tw-ordinal: ;
  --tw-slashed-zero: ;
  --tw-numeric-figure: ;
  --tw-numeric-spacing: ;
  --tw-numeric-fraction: ;
  --tw-ring-inset: ;
  --tw-ring-offset-width: 0px;
  --tw-ring-offset-color: #fff;
  --tw-ring-color: rgba(59, 130, 246, .5);
  --tw-ring-offset-shadow: 0 0 #0000;
  --tw-ring-shadow: 0 0 #0000;
  --tw-shadow: 0 0 #0000;
  --tw-shadow-colored: 0 0 #0000;
  --tw-blur: ;
  --tw-brightness: ;
  --tw-contrast: ;
  --tw-grayscale: ;
  --tw-hue-rotate: ;
  --tw-invert: ;
  --tw-saturate: ;
  --tw-sepia: ;
  --tw-drop-shadow: ;
  --tw-backdrop-blur: ;
  --tw-backdrop-brightness: ;
  --tw-backdrop-contrast: ;
  --tw-backdrop-grayscale: ;
  --tw-backdrop-hue-rotate: ;
  --tw-backdrop-invert: ;
  --tw-backdrop-opacity: ;
  --tw-backdrop-saturate: ;
  --tw-backdrop-sepia: ;
  --tw-contain-size: ;
  --tw-contain-layout: ;
  --tw-contain-paint: ;
  --tw-contain-style:
}

/*! tailwindcss v3.4.19 | MIT License | https://tailwindcss.com*/
*,
:after,
:before {
  box-sizing: border-box;
  border: 0 solid #e5e7eb
}

:after,
:before {
  --tw-content: ""
}

:host,
html {
  line-height: 1.5;
  -webkit-text-size-adjust: 100%;
  -moz-tab-size: 4;
  -o-tab-size: 4;
  tab-size: 4;
  font-family: Public Sans, system-ui, Segoe UI, Arial, sans-serif;
  font-feature-settings: normal;
  font-variation-settings: normal;
  -webkit-tap-highlight-color: transparent
}

body {
  margin: 0;
  line-height: inherit
}

hr {
  height: 0;
  color: inherit;
  border-top-width: 1px
}

abbr:where([title]) {
  -webkit-text-decoration: underline dotted;
  text-decoration: underline dotted
}

h1,
h2,
h3,
h4,
h5,
h6 {
  font-size: inherit;
  font-weight: inherit
}

a {
  color: inherit;
  text-decoration: inherit
}

b,
strong {
  font-weight: bolder
}

code,
kbd,
pre,
samp {
  font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, Liberation Mono, Courier New, monospace;
  font-feature-settings: normal;
  font-variation-settings: normal;
  font-size: 1em
}

small {
  font-size: 80%
}

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline
}

sub {
  bottom: -.25em
}

sup {
  top: -.5em
}

table {
  text-indent: 0;
  border-color: inherit;
  border-collapse: collapse
}

button,
input,
optgroup,
select,
textarea {
  font-family: inherit;
  font-feature-settings: inherit;
  font-variation-settings: inherit;
  font-size: 100%;
  font-weight: inherit;
  line-height: inherit;
  letter-spacing: inherit;
  color: inherit;
  margin: 0;
  padding: 0
}

button,
select {
  text-transform: none
}

button,
input:where([type=button]),
input:where([type=reset]),
input:where([type=submit]) {
  -webkit-appearance: button;
  background-color: transparent;
  background-image: none
}

:-moz-focusring {
  outline: auto
}

:-moz-ui-invalid {
  box-shadow: none
}

progress {
  vertical-align: baseline
}

::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
  height: auto
}

[type=search] {
  -webkit-appearance: textfield;
  outline-offset: -2px
}

::-webkit-search-decoration {
  -webkit-appearance: none
}

::-webkit-file-upload-button {
  -webkit-appearance: button;
  font: inherit
}

summary {
  display: list-item
}

blockquote,
dd,
dl,
figure,
h1,
h2,
h3,
h4,
h5,
h6,
hr,
p,
pre {
  margin: 0
}

fieldset {
  margin: 0
}

fieldset,
legend {
  padding: 0
}

menu,
ol,
ul {
  list-style: none;
  margin: 0;
  padding: 0
}

dialog {
  padding: 0
}

textarea {
  resize: vertical
}

input::-moz-placeholder,
textarea::-moz-placeholder {
  opacity: 1;
  color: #9ca3af
}

input::placeholder,
textarea::placeholder {
  opacity: 1;
  color: #9ca3af
}

[role=button],
button {
  cursor: pointer
}

:disabled {
  cursor: default
}

audio,
canvas,
embed,
iframe,
img,
object,
svg,
video {
  display: block;
  vertical-align: middle
}

img,
video {
  max-width: 100%;
  height: auto
}

[hidden]:where(:not([hidden=until-found])) {
  display: none
}

.fixed {
  position: fixed
}

.sticky {
  position: sticky
}

.bottom-4 {
  bottom: 1rem
}

.left-4 {
  left: 1rem
}

.right-4 {
  right: 1rem
}

.z-40 {
  z-index: 40
}

.order-first {
  order: -9999
}

.mx-auto {
  margin-left: auto;
  margin-right: auto
}

.my-1 {
  margin-top: .25rem;
  margin-bottom: .25rem
}

.mb-2 {
  margin-bottom: .5rem
}

.mb-4 {
  margin-bottom: 1rem
}

.mb-6 {
  margin-bottom: 1.5rem
}

.mb-8 {
  margin-bottom: 2rem
}

.mt-0\.5 {
  margin-top: .125rem
}

.mt-1 {
  margin-top: .25rem
}

.mt-10 {
  margin-top: 2.5rem
}

.mt-2 {
  margin-top: .5rem
}

.mt-3 {
  margin-top: .75rem
}

.mt-4 {
  margin-top: 1rem
}

.mt-5 {
  margin-top: 1.25rem
}

.mt-6 {
  margin-top: 1.5rem
}

.mt-8 {
  margin-top: 2rem
}

.block {
  display: block
}

.inline-block {
  display: inline-block
}

.inline {
  display: inline
}

.flex {
  display: flex
}

.inline-flex {
  display: inline-flex
}

.grid {
  display: grid
}

.hidden {
  display: none
}

.aspect-\[4\/3\] {
  aspect-ratio: 4/3
}

.h-1\.5 {
  height: .375rem
}

.h-10 {
  height: 2.5rem
}

.h-11 {
  height: 2.75rem
}

.h-12 {
  height: 3rem
}

.h-14 {
  height: 3.5rem
}

.h-16 {
  height: 4rem
}

.h-3\.5 {
  height: .875rem
}

.h-4 {
  height: 1rem
}

.h-5 {
  height: 1.25rem
}

.h-9 {
  height: 2.25rem
}

.h-\[220px\] {
  height: 220px
}

.h-full {
  height: 100%
}

.min-h-\[480px\] {
  min-height: 480px
}

.w-10 {
  width: 2.5rem
}

.w-12 {
  width: 3rem
}

.w-14 {
  width: 3.5rem
}

.w-16 {
  width: 4rem
}

.w-3\.5 {
  width: .875rem
}

.w-4 {
  width: 1rem
}

.w-5 {
  width: 1.25rem
}

.w-9 {
  width: 2.25rem
}

.w-auto {
  width: auto
}

.w-full {
  width: 100%
}

.max-w-4xl {
  max-width: 56rem
}

.max-w-6xl {
  max-width: 72rem
}

.max-w-md {
  max-width: 28rem
}

.max-w-sm {
  max-width: 24rem
}

.shrink-0 {
  flex-shrink: 0
}

.transform {
  transform: translate(var(--tw-translate-x), var(--tw-translate-y)) rotate(var(--tw-rotate)) skewX(var(--tw-skew-x)) skewY(var(--tw-skew-y)) scaleX(var(--tw-scale-x)) scaleY(var(--tw-scale-y))
}

.grid-cols-2 {
  grid-template-columns: repeat(2, minmax(0, 1fr))
}

.flex-col {
  flex-direction: column
}

.items-start {
  align-items: flex-start
}

.items-center {
  align-items: center
}

.justify-center {
  justify-content: center
}

.justify-between {
  justify-content: space-between
}

.gap-10 {
  gap: 2.5rem
}

.gap-2 {
  gap: .5rem
}

.gap-3 {
  gap: .75rem
}

.gap-4 {
  gap: 1rem
}

.gap-6 {
  gap: 1.5rem
}

.gap-8 {
  gap: 2rem
}

.space-y-3>:not([hidden])~:not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(.75rem*(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(.75rem*var(--tw-space-y-reverse))
}

.space-y-4>:not([hidden])~:not([hidden]) {
  --tw-space-y-reverse: 0;
  margin-top: calc(1rem*(1 - var(--tw-space-y-reverse)));
  margin-bottom: calc(1rem*var(--tw-space-y-reverse))
}

.overflow-hidden {
  overflow: hidden
}

.rounded-2xl {
  border-radius: 1rem
}

.rounded-full {
  border-radius: 9999px
}

.rounded-lg {
  border-radius: .5rem
}

.rounded-r-lg {
  border-top-right-radius: .5rem;
  border-bottom-right-radius: .5rem
}

.border {
  border-width: 1px
}

.border-2 {
  border-width: 2px
}

.border-y {
  border-top-width: 1px;
  border-bottom-width: 1px
}

.border-l-4 {
  border-left-width: 4px
}

.border-t {
  border-top-width: 1px
}

.border-forest {
  --tw-border-opacity: 1;
  border-color: rgb(244 113 36/var(--tw-border-opacity, 1))
}

.border-slate-100 {
  --tw-border-opacity: 1;
  border-color: rgb(241 245 249/var(--tw-border-opacity, 1))
}

.border-slate-200 {
  --tw-border-opacity: 1;
  border-color: rgb(226 232 240/var(--tw-border-opacity, 1))
}

.border-white\/10 {
  border-color: hsla(0, 0%, 100%, .1)
}

.bg-forest {
  --tw-bg-opacity: 1;
  background-color: rgb(244 113 36/var(--tw-bg-opacity, 1))
}

.bg-forest\/10 {
  background-color: rgba(244, 113, 36, .1)
}

.bg-forest\/15 {
  background-color: rgba(244, 113, 36, .15)
}

.bg-forest\/5 {
  background-color: rgba(244, 113, 36, .05)
}

.bg-navy {
  --tw-bg-opacity: 1;
  background-color: rgb(2 42 106/var(--tw-bg-opacity, 1))
}

.bg-navy-dark {
  --tw-bg-opacity: 1;
  background-color: rgb(27 42 87/var(--tw-bg-opacity, 1))
}

.bg-sand {
  --tw-bg-opacity: 1;
  background-color: rgb(240 246 255/var(--tw-bg-opacity, 1))
}

.bg-slate-200 {
  --tw-bg-opacity: 1;
  background-color: rgb(226 232 240/var(--tw-bg-opacity, 1))
}

.bg-white {
  --tw-bg-opacity: 1;
  background-color: rgb(255 255 255/var(--tw-bg-opacity, 1))
}

.bg-gradient-to-r {
  background-image: linear-gradient(to right, var(--tw-gradient-stops))
}

.from-forest {
  --tw-gradient-from: #F47124 var(--tw-gradient-from-position);
  --tw-gradient-to: rgba(244, 113, 36, 0) var(--tw-gradient-to-position);
  --tw-gradient-stops: var(--tw-gradient-from), var(--tw-gradient-to)
}

.to-navy {
  --tw-gradient-to: #022a6a var(--tw-gradient-to-position)
}

.object-cover {
  -o-object-fit: cover;
  object-fit: cover
}

.object-top {
  -o-object-position: top;
  object-position: top
}

.p-4 {
  padding: 1rem
}

.p-6 {
  padding: 1.5rem
}

.px-10 {
  padding-left: 2.5rem;
  padding-right: 2.5rem
}

.px-4 {
  padding-left: 1rem;
  padding-right: 1rem
}

.px-8 {
  padding-left: 2rem;
  padding-right: 2rem
}

.py-10 {
  padding-top: 2.5rem;
  padding-bottom: 2.5rem
}

.py-14 {
  padding-top: 3.5rem;
  padding-bottom: 3.5rem
}

.py-3 {
  padding-top: .75rem;
  padding-bottom: .75rem
}

.py-3\.5 {
  padding-top: .875rem;
  padding-bottom: .875rem
}

.py-4 {
  padding-top: 1rem;
  padding-bottom: 1rem
}

.py-6 {
  padding-top: 1.5rem;
  padding-bottom: 1.5rem
}

.py-8 {
  padding-top: 2rem;
  padding-bottom: 2rem
}

.pb-14 {
  padding-bottom: 3.5rem
}

.pt-3 {
  padding-top: .75rem
}

.pt-8 {
  padding-top: 2rem
}

.text-center {
  text-align: center
}

.font-sans {
  font-family: Public Sans, system-ui, Segoe UI, Arial, sans-serif
}

.text-2xl {
  font-size: 1.5rem;
  line-height: 2rem
}

.text-5xl {
  font-size: 3rem;
  line-height: 1
}

.text-\[11px\] {
  font-size: 11px
}

.text-\[15px\] {
  font-size: 15px
}

.text-lg {
  font-size: 1.125rem;
  line-height: 1.75rem
}

.text-sm {
  font-size: .875rem;
  line-height: 1.25rem
}

.text-xl {
  font-size: 1.25rem;
  line-height: 1.75rem
}

.text-xs {
  font-size: .75rem;
  line-height: 1rem
}

.font-bold {
  font-weight: 700
}

.font-extrabold {
  font-weight: 800
}

.font-semibold {
  font-weight: 600
}

.uppercase {
  text-transform: uppercase
}

.leading-none {
  line-height: 1
}

.leading-relaxed {
  line-height: 1.625
}

.leading-snug {
  line-height: 1.375
}

.leading-tight {
  line-height: 1.25
}

.tracking-widest {
  letter-spacing: .1em
}

.text-forest {
  --tw-text-opacity: 1;
  color: rgb(244 113 36/var(--tw-text-opacity, 1))
}

.text-navy {
  --tw-text-opacity: 1;
  color: rgb(2 42 106/var(--tw-text-opacity, 1))
}

.text-orange-400 {
  --tw-text-opacity: 1;
  color: rgb(251 146 60/var(--tw-text-opacity, 1))
}

.text-slate-400 {
  --tw-text-opacity: 1;
  color: rgb(148 163 184/var(--tw-text-opacity, 1))
}

.text-slate-500 {
  --tw-text-opacity: 1;
  color: rgb(100 116 139/var(--tw-text-opacity, 1))
}

.text-slate-600 {
  --tw-text-opacity: 1;
  color: rgb(71 85 105/var(--tw-text-opacity, 1))
}

.text-slate-700 {
  --tw-text-opacity: 1;
  color: rgb(51 65 85/var(--tw-text-opacity, 1))
}

.text-white {
  --tw-text-opacity: 1;
  color: rgb(255 255 255/var(--tw-text-opacity, 1))
}

.text-white\/80 {
  color: hsla(0, 0%, 100%, .8)
}

.underline {
  text-decoration-line: underline
}

.underline-offset-2 {
  text-underline-offset: 2px
}

.antialiased {
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale
}

.accent-forest {
  accent-color: #F47124
}

.shadow-xl {
  --tw-shadow: 0 20px 25px -5px rgba(0, 0, 0, .1), 0 8px 10px -6px rgba(0, 0, 0, .1);
  --tw-shadow-colored: 0 20px 25px -5px var(--tw-shadow-color), 0 8px 10px -6px var(--tw-shadow-color);
  box-shadow: var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)
}

.outline {
  outline-style: solid
}

.transition {
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-backdrop-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;
  transition-property: color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-backdrop-filter;
  transition-timing-function: cubic-bezier(.4, 0, .2, 1);
  transition-duration: .15s
}

.transition-all {
  transition-property: all;
  transition-timing-function: cubic-bezier(.4, 0, .2, 1);
  transition-duration: .15s
}

.duration-500 {
  transition-duration: .5s
}

.hover\:bg-forest-light:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(217 90 18/var(--tw-bg-opacity, 1))
}

.hover\:bg-slate-100:hover {
  --tw-bg-opacity: 1;
  background-color: rgb(241 245 249/var(--tw-bg-opacity, 1))
}

.hover\:text-navy:hover {
  --tw-text-opacity: 1;
  color: rgb(2 42 106/var(--tw-text-opacity, 1))
}

.hover\:underline:hover {
  text-decoration-line: underline
}

.disabled\:cursor-wait:disabled {
  cursor: wait
}

.disabled\:opacity-60:disabled {
  opacity: .6
}

@media (min-width:640px) {
  .sm\:block {
    display: block
  }

  .sm\:grid-cols-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr))
  }
}

@media (min-width:768px) {
  .md\:order-none {
    order: 0
  }

  .md\:block {
    display: block
  }

  .md\:hidden {
    display: none
  }

  .md\:h-14 {
    height: 3.5rem
  }

  .md\:h-\[520px\] {
    height: 520px
  }

  .md\:grid-cols-2 {
    grid-template-columns: repeat(2, minmax(0, 1fr))
  }

  .md\:grid-cols-4 {
    grid-template-columns: repeat(4, minmax(0, 1fr))
  }

  .md\:grid-cols-\[260px_1fr\] {
    grid-template-columns: 260px 1fr
  }

  .md\:gap-8 {
    gap: 2rem
  }

  .md\:p-10 {
    padding: 2.5rem
  }

  .md\:text-3xl {
    font-size: 1.875rem;
    line-height: 2.25rem
  }

  .md\:text-\[34px\] {
    font-size: 34px
  }

  .md\:text-xl {
    font-size: 1.25rem;
    line-height: 1.75rem
  }
}

/* ==========================================================================
   2. EXTENSIONS UTILITAIRES — ajouts maison pour les nouvelles sections
   ========================================================================== */
.relative {
  position: relative;
}

.mt-12 {
  margin-top: 3rem;
}

.mb-3 {
  margin-bottom: .75rem;
}

.mb-10 {
  margin-bottom: 2.5rem;
}

.py-12 {
  padding-top: 3rem;
  padding-bottom: 3rem;
}

.py-16 {
  padding-top: 4rem;
  padding-bottom: 4rem;
}

/* hauteur de repli de la photo du hero : neutralisée par .hero-photo à tous
   les points de rupture, conservée pour rester fidèle au gabarit d'origine */
.h-\[240px\] {
  height: 240px;
}

.max-w-2xl {
  max-width: 42rem;
}

.max-w-3xl {
  max-width: 48rem;
}

.gap-5 {
  gap: 1.25rem;
}

.rounded-xl {
  border-radius: .75rem;
}

.text-\[13px\] {
  font-size: 13px;
}

.text-\[16px\] {
  font-size: 16px;
}

.text-\[17px\] {
  font-size: 17px;
}

.items-stretch {
  align-items: stretch;
}

.flex-wrap {
  flex-wrap: wrap;
}

.text-navy-soft {
  color: #4a72a8;
}

@media (min-width: 768px) {
  .md\:py-20 {
    padding-top: 5rem;
    padding-bottom: 5rem;
  }

  .md\:grid-cols-3 {
    grid-template-columns: repeat(3, minmax(0, 1fr));
  }

  .md\:text-\[28px\] {
    font-size: 28px;
  }

  .md\:text-left {
    text-align: left;
  }

  .md\:order-2 {
    order: 2;
  }

  .md\:order-1 {
    order: 1;
  }
}

/* ==========================================================================
   3. DESIGN SYSTÈME
   Charte : orange #F47124 · bleu #022A6A
   ========================================================================== */
:root {
  --orange: #F47124;
  --orange-d: #D95A12;
  --navy: #022A6A;
  --navy-d: #0A1C3D;
}

html {
  scroll-behavior: smooth;
  scroll-padding-top: 76px;
}

body {
  background:
    radial-gradient(900px 420px at 50% -140px, rgba(2, 42, 106, .10), transparent 65%),
    linear-gradient(#eef4ff, #f6f9ff 420px);
}

::selection {
  background: rgba(244, 113, 36, .22);
}

a,
button {
  -webkit-tap-highlight-color: transparent;
}

/* cartes : ombres fines et profondes */
.card {
  box-shadow:
    0 1px 2px rgba(2, 42, 106, .05),
    0 12px 28px -8px rgba(2, 42, 106, .14),
    0 32px 64px -24px rgba(2, 42, 106, .16);
  border: 1px solid rgba(2, 42, 106, .06);
}

/* boutons */
.bg-forest {
  background: linear-gradient(180deg, #F98436, var(--orange) 55%, #E3600F);
}

a.bg-forest,
button.bg-forest,
.btn-cta {
  box-shadow: 0 1px 0 rgba(255, 255, 255, .28) inset, 0 8px 18px -6px rgba(244, 113, 36, .55);
  transition: transform .18s cubic-bezier(.22, .8, .3, 1), box-shadow .18s, filter .18s;
}

a.bg-forest:hover,
button.bg-forest:hover,
.btn-cta:hover {
  transform: translateY(-1.5px);
  filter: saturate(1.05);
  box-shadow: 0 1px 0 rgba(255, 255, 255, .28) inset, 0 14px 26px -8px rgba(244, 113, 36, .6);
}

a.bg-forest:active,
button.bg-forest:active {
  transform: translateY(0);
}

a:focus-visible,
button:focus-visible,
input:focus-visible {
  outline: 2px solid var(--orange);
  outline-offset: 3px;
}

/* titres */
h1,
h2,
h3 {
  letter-spacing: -.02em;
}

.highlight {
  background: var(--orange);
  color: #fff;
  padding: 0 .35em;
  border-radius: 5px;
  box-decoration-break: clone;
  -webkit-box-decoration-break: clone;
  box-shadow: 0 6px 16px -6px rgba(244, 113, 36, .6);
}

/* placeholder image (affiché tant qu'un visuel manque dans /assets).
   Il reprend les classes de l'image remplacée : son gabarit vient donc
   des mêmes règles que celle-ci. */
.ph {
  background: linear-gradient(135deg, #dfe6f0, #c9d3e3);
  display: flex;
  align-items: center;
  justify-content: center;
  color: #4a5b7a;
  font-size: 13px;
  text-align: center;
  padding: 12px;
  line-height: 1.5;
  overflow: hidden;
}

/* gabarits des logos, que la CSS cible par le sélecteur img */
.fc-foot .ph,
.disp .ph {
  width: 92px;
  border-radius: 8px;
  font-size: 9px;
  padding: 3px;
}

.fc-foot .ph {
  height: 30px;
}

.disp .ph {
  height: 46px;
}

@media (min-width: 768px) {
  .fc-foot .ph {
    height: 36px;
  }
}

/* ==========================================================================
   4. HEADER + LOGO
   ========================================================================== */
.site-header {
  position: sticky;
  top: 0;
  z-index: 50;
  background: #fff;
  border-bottom: 1px solid #e8edf5;
}

.hdr {
  max-width: 1080px;
  margin: 0 auto;
  padding: 12px 16px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 20px;
}

.logo {
  display: flex;
  align-items: center;
  gap: 11px;
}

.logo svg {
  width: 38px;
  height: 38px;
  display: block;
  overflow: visible;
}

.logo-txt {
  line-height: 1;
}

.logo-txt b {
  display: block;
  font-weight: 800;
  font-size: 16px;
  letter-spacing: .06em;
  color: var(--navy);
}

.logo-txt i {
  display: block;
  font-style: normal;
  font-weight: 700;
  font-size: 9.5px;
  letter-spacing: .155em;
  color: #6b7d99;
  margin-top: 3px;
}

/* le nom de marque ne se coupe jamais, même pour les libellés longs
   (« RÉNOVATION ÉNERGÉTIQUE », « ISOLATION EXTÉRIEURE ») */
.logo-txt b,
.logo-txt i {
  white-space: nowrap;
}

@media (min-width: 768px) {
  .logo svg {
    width: 44px;
    height: 44px;
  }

  .logo-txt b {
    font-size: 18.5px;
  }

  .logo-txt i {
    font-size: 10.5px;
  }
}

/* drapeau animé du logo */
.fr {
  transform-origin: 22px 30px;
}

.fr path {
  stroke-linecap: round;
  fill: none;
}

.fr .s1 {
  stroke: var(--navy);
  animation: ripple 3.2s ease-in-out infinite;
}

.fr .s2 {
  stroke: #dfe6f1;
  animation: ripple 3.2s ease-in-out infinite .18s;
}

.fr .s3 {
  stroke: #E1000F;
  animation: ripple 3.2s ease-in-out infinite .36s;
}

@keyframes ripple {

  0%,
  100% {
    transform: translateY(0) skewX(0deg);
  }

  50% {
    transform: translateY(-1.6px) skewX(-2.5deg);
  }
}

.roof {
  transition: transform .35s cubic-bezier(.34, 1.56, .64, 1);
  transform-origin: 22px 26px;
}

.logo:hover .roof {
  transform: translateY(-2px);
}

.logo:hover .fr .s1,
.logo:hover .fr .s2,
.logo:hover .fr .s3 {
  animation-duration: 1.1s;
}

.hdr-tag {
  font-size: 12px;
  color: #6b7d99;
  font-weight: 600;
  white-space: nowrap;
}

.hdr-tag i {
  font-style: normal;
  color: var(--orange);
  margin: 0 4px;
}

@media (max-width: 620px) {
  .hdr-tag {
    font-size: 10.5px;
  }
}

/* sous 560 px, la mention cède la place au logo : le même message est
   répété par la trustbar située juste en dessous du titre */
@media (max-width: 560px) {
  .hdr-tag {
    display: none;
  }
}

/* logos administratifs (si affichés dans le header) */
.officiels {
  display: flex;
  align-items: center;
  gap: 10px;
  flex-shrink: 1;
  min-width: 0;
}

.officiels img {
  height: 24px;
  width: auto;
  display: block;
  image-rendering: -webkit-optimize-contrast;
}

@media (min-width: 420px) {
  .officiels {
    gap: 14px;
  }

  .officiels img {
    height: 28px;
  }
}

@media (min-width: 768px) {
  .officiels {
    gap: 22px;
  }

  .officiels img {
    height: 38px;
  }
}

/* ==========================================================================
   5. HERO
   ========================================================================== */

/* bandeau de réassurance sous le H1 */
.trustbar {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 10px 22px;
  margin-top: 16px;
}

.trustbar span {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-size: 12.5px;
  color: #5b6f8d;
  font-weight: 600;
}

.trustbar span::before {
  content: "";
  width: 15px;
  height: 15px;
  flex: 0 0 15px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23F47124' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");
  background-size: 15px;
  background-repeat: no-repeat;
  background-position: center;
}

/* Sous 520 px, les libellés complets ne tiennent plus sur une ligne et la
   troisième mention restait seule au milieu. On bascule sur des libellés
   courts : les trois tiennent alors sur une ligne, coches et taille de
   texte inchangées. .tb-l = libellé long (desktop), .tb-s = court (mobile). */
.trustbar i {
  font-style: normal;
}

.trustbar .tb-s {
  display: none;
}

@media (max-width: 519px) {
  .trustbar {
    gap: 8px 13px;
  }

  .trustbar .tb-l {
    display: none;
  }

  .trustbar .tb-s {
    display: inline;
  }
}

/* Sous 375 px, les libellés courts seuls ne suffisent plus : on resserre
   aussi l'échelle — texte, coche et écarts — pour conserver la ligne
   unique jusqu'aux plus petits téléphones (320 px). */
@media (max-width: 374px) {
  .trustbar {
    gap: 7px 8px;
  }

  .trustbar span {
    font-size: 11px;
    gap: 5px;
  }

  .trustbar span::before {
    width: 13px;
    height: 13px;
    flex: 0 0 13px;
    background-size: 13px;
  }
}

/* --- MOBILE : la photo est plus basse et moins haute ---
   .hero-photo visait l'<img> nu du hero. Les quatre pages passent
   désormais par <picture class="hero-pic"> : ces règles ne s'appliquent
   plus à personne, et sont conservées pour une page qui reviendrait au
   gabarit d'origine. */
@media (max-width: 767px) {
  .hero-photo {
    height: 140px;
    object-position: center 16%;
  }
}

/* --- Variante de hero : texte nu au-dessus du formulaire, en mobile ---
   Sur .hero-grid-alt, le petit écran remonte le bloc au-dessus du
   formulaire, masque la photo, et surtout retire tout l'habillage de
   carte : plus de fond bleu foncé, plus d'ombre, plus de pastille. Il
   ne reste que le texte, recoloré pour un fond clair.
   Aucun contenu n'est dupliqué — c'est le même bloc, déshabillé. Le
   desktop conserve la carte sombre et la photo, inchangées. */
@media (max-width: 767px) {
  .hero-grid-alt .order-first {
    order: 0;
  }

  .hero-grid-alt .hero-pic,
  .hero-grid-alt .hero-photo {
    display: none;
  }

  /* la carte disparaît, il ne reste que le flux de texte */
  .hero-grid-alt .hero-aside {
    background: none;
    box-shadow: none;
    border: 0;
    border-radius: 0;
  }

  .hero-grid-alt .aide-box {
    background: none;
    border-bottom: 0;
    padding: 0 4px;
  }

  .hero-grid-alt .aide-box::before {
    display: none;
  }

  .hero-grid-alt .aide-pill {
    display: none;
  }

  /* recoloration pour un fond clair */
  .hero-grid-alt .aide-lead {
    color: #6b7d99;
    margin-top: 0;
  }

  .hero-grid-alt .aide-amount {
    color: var(--navy);
  }

  .hero-grid-alt .aide-sub {
    color: #64748b;
  }

  .hero-grid-alt .aide-list {
    border-top-color: rgba(2, 42, 106, .12);
  }

  .hero-grid-alt .aide-list span {
    color: #475569;
    font-weight: 600;
    border-bottom-color: rgba(2, 42, 106, .09);
  }

  /* En tête, on ne garde que « Jusqu'à » et le montant. Le descriptif et
     la liste des dispositifs redescendent dans le pied du formulaire,
     juste avant les logos, via le bloc .aide-recap. */
  .hero-grid-alt .aide-box .aide-sub,
  .hero-grid-alt .aide-box .aide-list {
    display: none;
  }

  .hero-grid-alt .aide-box .aide-rule {
    margin-bottom: 0;
  }

  .hero-grid-alt .aide-recap {
    display: block;
    margin-top: 24px;
  }
}

/* Rappel des dispositifs en pied de formulaire : réservé au mobile,
   le desktop l'affiche déjà dans la colonne de gauche. Bloc optionnel,
   qu'aucune page ne porte actuellement — pac.html et ite.html s'appuient
   sur les logos de .fc-foot. Ajoutez un <div class="aide-recap"> dans la
   carte formulaire pour le réactiver. */
.aide-recap {
  display: none;
}

.aide-recap .aide-sub {
  text-align: center;
}

/* --- TABLETTE / DESKTOP : la photo remplit la hauteur restante à côté du formulaire --- */
@media (min-width: 768px) {
  .hero-grid {
    align-items: stretch;
  }

  .hero-aside {
    display: flex;
    flex-direction: column;
  }

  .hero-photo {
    flex: 1 1 0;
    height: 0;
    min-height: 250px;
  }
}

/* Variante <picture> du visuel de hero, portée par les quatre pages. Elle
   permet de servir l'AVIF avec un repli WebP (c'est le cas de pac.html).
   C'est alors le <picture> qui occupe la place dans la colonne, pas
   l'<img> : le dimensionnement porte sur le conteneur. */
.hero-pic {
  display: block;
  overflow: hidden;
}

.hero-pic>img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
}

@media (min-width: 768px) {
  .hero-aside>.hero-pic {
    flex: 1 1 0;
    height: 0;
    min-height: 250px;
  }
}

/* Carrousel du visuel de hero (index.html) : les images sont empilées
   dans le cadre de .hero-pic et se fondent l'une dans l'autre. La classe
   .on désigne la vue affichée ; main.js la fait tourner. */
.hero-caro {
  position: relative;
}

.hero-caro>img {
  position: absolute;
  inset: 0;
  opacity: 0;
  transition: opacity .5s ease;
}

.hero-caro>img.on {
  opacity: 1;
}

@media (prefers-reduced-motion: reduce) {
  .hero-caro>img {
    transition: none;
  }
}

/* En mobile la bande ne fait que 140 px : on remonte le cadrage pour
   garder le groupe extérieur entier plutôt que la pelouse. */
@media (max-width: 767px) {
  .hero-pic {
    height: 140px;
  }

  .hero-pic>img {
    object-position: center 30%;
  }
}

/* bloc « jusqu'à X € d'aides » */
.aide-box {
  background: var(--navy-d);
  color: #fff;
  padding: 20px 22px 16px;
  position: relative;
  overflow: hidden;
  border-bottom: 1px solid rgba(255, 255, 255, .07);
}

/* Variante posée sur le navy de la charte plutôt que sur le navy foncé.
   Portée par les quatre pages : pac.html, pv.html, ite.html et
   renovation-maison.html.
   Le palier min-width n'est pas décoratif : plus haut, le bloc
   @media (max-width: 767px) de .hero-grid-alt retire tout l'habillage de
   carte avec un sélecteur de même spécificité (0,2,0). Placée après lui,
   cette règle l'emporterait en mobile et y réafficherait un fond bleu.
   La borner au desktop la cantonne aux largeurs où le bloc est peint.
   Sur une page sans .hero-grid-alt, le bloc resterait donc en --navy-d
   en mobile — aucune des quatre pages concernées n'est dans ce cas. */
@media (min-width: 768px) {
  .aide-box.aide-box-navy {
    background: var(--navy);
  }
}

.aide-box::before {
  content: "";
  position: absolute;
  inset: 0;
  background: radial-gradient(120% 80% at 50% -20%, rgba(255, 255, 255, .10), transparent 60%);
  pointer-events: none;
}

.aide-box>* {
  position: relative;
}

.aide-pill {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  border: 1px solid rgba(255, 255, 255, .16);
  border-radius: 6px;
  padding: 5px 10px;
  font-size: 9.5px;
  font-weight: 700;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: #a9c0e0;
}

.cocarde {
  width: 15px;
  height: 10px;
  border-radius: 2px;
  flex: 0 0 15px;
  overflow: hidden;
  display: flex;
  box-shadow: 0 0 0 1px rgba(255, 255, 255, .18);
}

.cocarde i {
  flex: 1;
}

.cocarde i:nth-child(1) {
  background: #1e4bab;
}

.cocarde i:nth-child(2) {
  background: #fff;
}

.cocarde i:nth-child(3) {
  background: #E1000F;
}

.aide-lead {
  font-size: 10.5px;
  letter-spacing: .18em;
  text-transform: uppercase;
  color: #7e99c2;
  font-weight: 700;
  margin-top: 16px;
}

.aide-amount {
  font-size: 44px;
  line-height: 1;
  font-weight: 800;
  letter-spacing: -.025em;
  font-variant-numeric: tabular-nums;
  margin-top: 8px;
  color: #fff;
}

/* Le symbole est à la même taille et à la même graisse que le montant : il
   hérite des deux. Plus de vertical-align, qui ne servait qu'à rattraper
   l'alignement optique d'un glyphe plus petit — à taille égale les lignes
   de base coïncident déjà. */
.aide-amount em {
  font-style: normal;
  font-size: inherit;
  font-weight: inherit;
  color: var(--orange);
  margin-left: 4px;
}

.aide-rule {
  width: 34px;
  height: 3px;
  border-radius: 2px;
  background: var(--orange);
  margin: 15px auto 13px;
}

.aide-sub {
  font-size: 12.5px;
  color: #9db4d6;
  line-height: 1.5;
}

.aide-list {
  margin-top: 20px;
  border-top: 1px solid rgba(255, 255, 255, .09);
  text-align: left;
}

.aide-list span {
  display: flex;
  align-items: center;
  gap: 9px;
  font-size: 12.5px;
  color: #cddcf0;
  padding: 7px 0;
  border-bottom: 1px solid rgba(255, 255, 255, .07);
  font-weight: 500;
}

.aide-list span:last-child {
  border-bottom: 0;
}

.aide-list span::before {
  content: "";
  width: 14px;
  height: 14px;
  flex: 0 0 14px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23F47124' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");
  background-size: 14px;
  background-repeat: no-repeat;
  background-position: center;
}

/* --- carte formulaire --- */
#form-card {
  min-height: 420px;
  display: flex;
  flex-direction: column;
}

.fc-head {
  text-align: center;
  padding-bottom: 18px;
  margin-bottom: 20px;
  border-bottom: 1px solid #eef2f8;
}

/* text-wrap: balance répartit les lignes à égalité plutôt que de remplir
   la première au maximum : sans lui, « aides » restait seul en 2e ligne. */
.fc-title {
  font-size: 17px;
  font-weight: 800;
  color: var(--navy);
  line-height: 1.35;
  text-wrap: balance;
}

.fc-sub {
  font-size: 13px;
  color: #94a3b8;
  margin-top: 5px;
}

@media (min-width: 768px) {
  .fc-title {
    font-size: 19px;
  }
}

/* --- Variante : titre détaché dans sa propre carte (les quatre pages) ---
   .fc-col empile la carte titre et la carte formulaire dans la cellule
   de droite du hero, avec un écart qui rend la séparation lisible. La
   carte du bas prend la hauteur restante pour rester alignée sur la
   colonne de gauche en desktop.
   Une page qui garderait le titre à l'intérieur de la carte formulaire
   ne porterait pas .fc-headcard et conserverait le trait de séparation
   défini par .fc-head — aucune n'est aujourd'hui dans ce cas. */
.fc-col {
  display: flex;
  flex-direction: column;
  gap: 14px;
}

.fc-col> :last-child {
  flex: 1 1 auto;
}

/* Le widget du formulaire annonce 800 px de large. Un élément de grille ou
   de flex ne rétrécit pas sous la largeur de son contenu (min-width: auto) :
   sans ces règles, la colonne prenait donc 800 px et débordait de l'écran
   sous 1100 px environ — carte coupée à droite, page qui défile de côté.
   min-width: 0 à chaque niveau laisse la colonne suivre la largeur
   disponible, et le widget est borné à celle de son conteneur. */
.hero-grid>*,
.fc-col>*,
#form-slot,
#form-slot-modal {
  min-width: 0;
}

heyflow-wrapper {
  display: block;
  max-width: 100%;
}

.fc-headcard {
  padding: 10px 22px;
  /* Ombre plus marquée que celle de .card : cette carte est basse et large,
     l'ombre par défaut s'y lisait à peine. Même teinte navy et même
     construction en trois couches — contact, portée, diffusion — pour rester
     dans le langage visuel des autres cartes, avec des valeurs plus fortes. */
  box-shadow:
    0 2px 4px rgba(2, 42, 106, .07),
    0 16px 32px -10px rgba(2, 42, 106, .22),
    0 40px 72px -26px rgba(2, 42, 106, .26);
}

/* Bordure lisible sur les deux cartes de la colonne de droite. .card la pose
   à 6 % d'opacité, ce qui la rend imperceptible sur le fond bleuté de la page :
   le contour n'était dessiné que par l'ombre. À 18 % le trait se voit sans
   cerner la carte. On reste sur le navy de la charte, donc aucune couleur
   nouvelle n'entre dans la palette. Ces règles passent après .card, à
   spécificité égale, et l'emportent donc. */
.fc-headcard,
.fc-body {
  border-color: rgba(2, 42, 106, .18);
}

/* dans sa propre carte, le trait sous le titre n'a plus d'objet */
.fc-headcard .fc-head {
  padding-bottom: 0;
  margin-bottom: 0;
  border-bottom: 0;
}

/* Le titre ayant quitté la carte formulaire, son espace intérieur est
   resserré. Réglé ici plutôt qu'avec les classes utilitaires p-6 / md:p-10 :
   le build Tailwind de ce fichier ne contient pas de md:p-6, et poser la
   règle sur #form-card la ferait déborder sur les autres pages. */
.fc-body {
  padding: 16px;
}

/* La hauteur plancher de #form-card servait à donner du corps à la carte
   quand le titre y figurait encore. Ici elle ne produisait plus que du vide
   autour du formulaire sur mobile : la carte épouse désormais son contenu.
   En desktop, .fc-col > :last-child la fait malgré tout s'étirer pour rester
   alignée sur la colonne de gauche. Sélecteur id + classe pour passer devant
   #form-card sans toucher aux autres pages. */
#form-card.fc-body {
  min-height: 0;
}

@media (min-width: 768px) {
  .fc-col {
    gap: 18px;
  }

  .fc-headcard {
    padding: 22px 32px;
  }

  .fc-body {
    padding: 24px;
  }
}

/* emplacement réservé au formulaire (Heyflow ou autre) */
#form-slot {
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.form-placeholder {
  border: 2px dashed #cfdaea;
  border-radius: 14px;
  background: #fbfcfe;
  padding: 34px 20px;
  text-align: center;
  color: #7b8aa3;
}

.form-placeholder b {
  display: block;
  color: var(--navy);
  font-size: 15px;
  margin-bottom: 8px;
}

.form-placeholder span {
  font-size: 13px;
  line-height: 1.6;
  display: block;
}

.form-placeholder code {
  display: inline-block;
  margin-top: 12px;
  font-size: 12px;
  background: #eef3fb;
  color: #40587f;
  padding: 4px 9px;
  border-radius: 6px;
}

/* --- popup formulaire ---
   Élément <dialog> natif : la fermeture par Échap, le piégeage du focus et
   le fond assombri sont assurés par le navigateur. Si showModal() n'existe
   pas, le script laisse le lien filer vers le formulaire du hero. */
.fmodal {
  width: min(560px, calc(100vw - 32px));
  max-height: calc(100vh - 48px);
  padding: 0;
  border: 0;
  border-radius: 18px;
  background: #fff;
  color: #334155;
  box-shadow: 0 30px 80px rgba(2, 42, 106, .28);
  overflow: hidden;
}

/* display n'est posé qu'à l'ouverture : sinon le dialogue resterait
   visible alors que l'agent utilisateur le masque avec display:none */
.fmodal[open] {
  display: flex;
  flex-direction: column;
  animation: fmodalIn .3s cubic-bezier(.22, .8, .3, 1);
}

@keyframes fmodalIn {
  from {
    opacity: 0;
    transform: translateY(14px) scale(.985);
  }

  to {
    opacity: 1;
    transform: none;
  }
}

.fmodal::backdrop {
  background: rgba(2, 20, 50, .55);
  animation: fadeIn .3s ease;
}

@keyframes fadeIn {
  from {
    opacity: 0;
  }

  to {
    opacity: 1;
  }
}

/* Blocage du défilement de fond, dérivé de l'état du dialogue lui-même.
   Aucun script ne pose ni ne retire ce verrou : il ne peut donc pas
   rester coincé et laisser la page immobile. Sur un navigateur sans
   :has(), le fond défile derrière le popup — sans gravité. */
html:has(.fmodal[open]) {
  overflow: hidden;
}

.fmodal-head {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 17px 20px;
  border-bottom: 1px solid #eef2f8;
  flex: 0 0 auto;
}

.fmodal-title {
  font-size: 16px;
  font-weight: 800;
  color: var(--navy);
  line-height: 1.35;
}

.fmodal-close {
  flex: 0 0 34px;
  width: 34px;
  height: 34px;
  border: 0;
  border-radius: 50%;
  background: #f1f5fa;
  color: #64748b;
  font-size: 20px;
  line-height: 1;
  cursor: pointer;
  transition: background .15s, color .15s;
}

.fmodal-close:hover {
  background: #e2e8f0;
  color: var(--navy);
}

.fmodal-body {
  padding: 22px 20px 24px;
  overflow-y: auto;
  flex: 1 1 auto;
}

/* en petit écran, le popup occupe tout l'affichage : un formulaire
   multi-étapes a besoin de la hauteur disponible */
@media (max-width: 560px) {
  .fmodal {
    width: 100%;
    max-width: 100%;
    height: 100%;
    max-height: 100%;
    inset: 0;
    margin: 0;
    border-radius: 0;
  }

  /* bouton de fermeture élargi : au doigt, 34 px est trop juste */
  .fmodal-close {
    flex-basis: 42px;
    width: 42px;
    height: 42px;
    font-size: 23px;
  }
}

@media (prefers-reduced-motion: reduce) {
  .fmodal[open] {
    animation: none;
  }

  .fmodal::backdrop {
    animation: none;
  }
}

/* logos administratifs sous le formulaire */
.fc-foot {
  margin-top: 26px;
  padding-top: 20px;
  border-top: 1px solid #eef2f8;
}

.fc-foot p {
  text-align: center;
  font-size: 9.5px;
  letter-spacing: .16em;
  text-transform: uppercase;
  color: #a3aec0;
  font-weight: 700;
  margin-bottom: 13px;
}

.fc-foot div {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 22px;
  flex-wrap: wrap;
}

.fc-foot img {
  height: 30px;
  width: auto;
}

@media (min-width: 768px) {
  .fc-foot img {
    height: 36px;
  }

  .fc-foot div {
    gap: 34px;
  }
}

/* Logos agrandis dans la carte formulaire de pac.html et ite.html. L'écart est resserré
   en même temps : les trois logos tiennent sur une ligne en 30px, à 38px ils
   passaient à la ligne sous l'effet du flex-wrap. Portée limitée à .fc-body,
   les autres pages gardent 30 / 36px. */
.fc-body .fc-foot img {
  height: 38px;
}

.fc-body .fc-foot div {
  gap: 14px;
}

@media (min-width: 768px) {
  .fc-body .fc-foot img {
    height: 48px;
  }

  .fc-body .fc-foot div {
    gap: 28px;
  }
}

/* Sous 375 px, les trois logos à 38 px ne tiennent plus sur une ligne et le
   dernier tombait seul en dessous. On les réduit, et la carte cède un peu de
   marge intérieure au formulaire, dont les boutons de choix sont à l'étroit. */
@media (max-width: 374px) {
  .fc-body {
    padding: 10px;
  }

  .fc-body .fc-foot img {
    height: 30px;
  }

  .fc-body .fc-foot div {
    gap: 12px;
  }
}

/* ==========================================================================
   6. SECTIONS DE CONTENU
   ========================================================================== */

/* --- en-tête de section --- */
.sec-head {
  text-align: center;
  max-width: 860px;
  margin: 0 auto 44px;
}

.sec-eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 10px;
  letter-spacing: .18em;
  text-transform: uppercase;
  font-weight: 800;
  color: var(--orange);
  background: rgba(244, 113, 36, .09);
  border: 1px solid rgba(244, 113, 36, .2);
  border-radius: 999px;
  padding: 6px 14px;
  margin-bottom: 16px;
}

.sec-title {
  font-size: 26px;
  line-height: 1.2;
  font-weight: 800;
  color: var(--navy);
}

.sec-title em {
  font-style: normal;
  color: var(--orange);
}

.sec-sub {
  font-size: 15px;
  line-height: 1.7;
  color: #64748b;
  margin-top: 14px;
}

/* emphase dans un chapô : le gras seul ne ressort pas sur du gris */
.sec-sub b {
  font-weight: 700;
  color: var(--navy);
}

/* Répartition équilibrée des lignes sur les textes centrés : évite qu'un
   montant ou un dernier mot se retrouve seul sur sa ligne. Sans effet sur
   les navigateurs qui ne connaissent pas la propriété. */
.sec-title,
.final-cta h2,
.cta-band h2 {
  text-wrap: balance;
}

/* Le chapô du bandeau CTA sort de cette liste depuis qu'il est en colonne :
   balance raccourcit toutes les lignes pour les égaliser, ce qui creusait un
   vide à droite du texte alors que la colonne est déjà bornée à 56ch. */

/* Les chapôs font plusieurs lignes : balance les raccourcissait toutes pour
   les égaliser, d'où un bloc nettement plus étroit que son conteneur. pretty
   laisse les lignes occuper toute la largeur disponible et ne retouche que
   la dernière, pour lui éviter de se réduire à un mot isolé. */
/* Chapô justifié. Trois précautions, sans lesquelles le rendu se dégrade :
   - text-wrap: balance rognerait les lignes avant que la justification ne
     les étire, les deux se neutralisent : on laisse le navigateur remplir ;
   - la dernière ligne reste centrée, sinon elle se colle à gauche sous un
     titre centré ;
   - la césure est indispensable, c'est elle qui évite que l'étirement des
     blancs se concentre sur les trois ou quatre espaces d'une ligne courte.
   Le texte du chapô est écrit court, sans mots très longs, pour donner au
   navigateur des points de coupure fréquents. */
.sec-sub {
  text-align: justify;
  text-align-last: center;
  hyphens: auto;
}

@media (min-width: 768px) {
  .sec-title {
    font-size: 34px;
  }
}

/* --- bloc solution : visuel + texte --- */
.sol {
  display: grid;
  gap: 32px;
  align-items: center;
}

@media (min-width: 900px) {
  .sol {
    grid-template-columns: 1fr 1fr;
    gap: 56px;
  }
}

/* alternance : visuel à droite, texte à gauche.
   Cible les enfants directs, pour fonctionner aussi bien avec une photo
   (.sol-media) qu'avec un schéma SVG dans un simple conteneur.
   Sur mobile le visuel repasse toujours au-dessus du texte. */
@media (min-width: 900px) {
  .sol-rev> :first-child {
    order: 2;
  }

  .sol-rev> :last-child {
    order: 1;
  }
}

/* Alignement des deux colonnes : la photo épouse la hauteur du texte,
   les deux blocs partagent donc le même bord haut et le même bord bas.
   Un schéma SVG, qui a son propre rapport de forme, reste centré dans
   la hauteur plutôt que d'être étiré. */
@media (min-width: 900px) {
  .sol {
    align-items: stretch;
  }

  .sol-media img,
  .sol-media .ph {
    height: 100%;
    aspect-ratio: auto;
  }

  .sol> :not(.sol-media):not(.sol-body) {
    display: flex;
    align-items: center;
  }
}

.sol-media {
  position: relative;
  border-radius: 20px;
  overflow: hidden;
}

.sol-media img {
  width: 100%;
  aspect-ratio: 4 / 3;
  object-fit: cover;
  display: block;
}

/* le placeholder garde le display:flex de .ph pour centrer son libellé */
.sol-media .ph {
  width: 100%;
  aspect-ratio: 4 / 3;
}

/* Entre 600 et 899 px la photo est empilée au-dessus du texte sur toute la
   largeur : en 4/3 elle occupait à elle seule un écran de tablette. Un
   format panoramique la ramène au rôle d'illustration. */
@media (min-width: 600px) and (max-width: 899px) {

  .sol-media img,
  .sol-media .ph {
    aspect-ratio: 16 / 8;
  }
}

.sol-media::after {
  content: "";
  position: absolute;
  inset: 0;
  border-radius: 20px;
  box-shadow: inset 0 0 0 1px rgba(2, 42, 106, .08);
  pointer-events: none;
}

.sol-badge {
  position: absolute;
  left: 16px;
  bottom: 16px;
  z-index: 2;
  background: rgba(10, 28, 61, .92);
  color: #fff;
  border-radius: 12px;
  padding: 10px 14px;
  backdrop-filter: blur(6px);
}

.sol-badge b {
  display: block;
  font-size: 19px;
  font-weight: 800;
  line-height: 1;
}

.sol-badge span {
  display: block;
  font-size: 11px;
  color: #9db4d6;
  margin-top: 4px;
}

.sol-body h2 {
  font-size: 25px;
  line-height: 1.22;
  font-weight: 800;
  color: var(--navy);
}

.sol-body h2 em {
  font-style: normal;
  color: var(--orange);
}

.sol-body>p {
  font-size: 15px;
  line-height: 1.75;
  color: #55637a;
  margin-top: 16px;
}

@media (min-width: 768px) {
  .sol-body h2 {
    font-size: 31px;
  }
}

/* intitulé discret coiffant une liste, quand la colonne n'a pas de titre
   propre : il annonce la liste sans concurrencer le H2 de la section */
.sol-lead {
  font-size: 10px;
  letter-spacing: .18em;
  text-transform: uppercase;
  font-weight: 800;
  color: #94a3b8;
}

/* l'interlettrage large fait passer l'intitulé sur deux lignes en dessous
   de 400 px : on le resserre plutôt que de le laisser se couper */
@media (max-width: 400px) {
  .sol-lead {
    letter-spacing: .1em;
  }
}

/* liste à puces cochées.
   Le <li> reste un bloc : en flex, chaque <b> deviendrait un élément flex
   et le texte se disloquerait en colonnes. La puce est donc positionnée. */
.bullets {
  margin-top: 24px;
  display: grid;
  gap: 13px;
}

.bullets li {
  position: relative;
  padding-left: 33px;
  font-size: 15px;
  line-height: 1.6;
  color: #475569;
}

.bullets li b {
  color: var(--navy);
}

.bullets li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 1px;
  width: 21px;
  height: 21px;
  border-radius: 50%;
  background-color: rgba(244, 113, 36, .13);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23F47124' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");
  background-size: 12px;
  background-repeat: no-repeat;
  background-position: center;
}

/* --- « comment ça marche » : étapes numérotées --- */
.how {
  display: grid;
  gap: 20px;
  margin-top: 40px;
}

@media (min-width: 700px) {
  .how {
    grid-template-columns: repeat(3, 1fr);
  }
}

.how>div {
  background: #fff;
  border: 1px solid #e9eef7;
  border-radius: 18px;
  padding: 26px 22px;
  transition: transform .25s cubic-bezier(.22, .8, .3, 1), box-shadow .25s, border-color .25s;
}

.how>div:hover {
  transform: translateY(-4px);
  border-color: #dbe6f5;
  box-shadow: 0 18px 38px rgba(2, 42, 106, .10);
}

.how i {
  display: flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  border-radius: 10px;
  margin-bottom: 16px;
  background: rgba(244, 113, 36, .11);
  color: var(--orange);
  font-style: normal;
  font-weight: 800;
  font-size: 14px;
}

.how b {
  display: block;
  font-size: 16px;
  font-weight: 800;
  color: var(--navy);
  margin-bottom: 8px;
}

.how p {
  font-size: 14px;
  line-height: 1.65;
  color: #6b7a90;
}

/* --- liste d'étapes numérotées, à côté d'un visuel --- */
.steps {
  counter-reset: step;
  display: grid;
  gap: 24px;
  margin-top: 28px;
}

.steps li {
  position: relative;
  padding-left: 54px;
  counter-increment: step;
}

.steps li::before {
  content: counter(step);
  position: absolute;
  left: 0;
  top: 0;
  width: 34px;
  height: 34px;
  border-radius: 11px;
  display: flex;
  align-items: center;
  justify-content: center;
  background: rgba(244, 113, 36, .11);
  color: var(--orange);
  font-weight: 800;
  font-size: 14px;
}

/* trait de liaison d'une étape à la suivante */
.steps li:not(:last-child)::after {
  content: "";
  position: absolute;
  left: 16px;
  top: 42px;
  bottom: -22px;
  width: 2px;
  background: linear-gradient(#f4d5c2, rgba(244, 213, 194, 0));
}

.steps b {
  display: block;
  font-size: 16px;
  font-weight: 800;
  color: var(--navy);
  margin-bottom: 6px;
}

.steps p {
  font-size: 14px;
  line-height: 1.65;
  color: #6b7a90;
}

/* --- cartes « critères d'éligibilité » --- */
.crit {
  display: grid;
  gap: 16px;
  margin-top: 40px;
}

@media (min-width: 620px) {
  .crit {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (min-width: 1000px) {
  .crit {
    grid-template-columns: repeat(4, 1fr);
  }
}

.crit>div {
  background: #fff;
  border: 1px solid #e9eef7;
  border-radius: 18px;
  padding: 24px 20px;
  transition: transform .25s cubic-bezier(.22, .8, .3, 1), box-shadow .25s, border-color .25s;
}

.crit>div:hover {
  transform: translateY(-4px);
  border-color: #dbe6f5;
  box-shadow: 0 18px 38px rgba(2, 42, 106, .10);
}

.crit svg {
  width: 28px;
  height: 28px;
  color: var(--navy);
  margin-bottom: 14px;
}

.crit b {
  display: block;
  font-size: 15px;
  font-weight: 800;
  color: var(--navy);
  margin-bottom: 7px;
}

.crit p {
  font-size: 13.5px;
  line-height: 1.6;
  color: #7b8aa3;
}

/* Seule section à sortir du gabarit commun : à quatre cartes par ligne,
   la laisse de 1152 px (max-w-6xl) ne laissait que 270 px par carte, et
   les descriptifs y tombaient sur cinq lignes. À 1400 px chaque carte
   passe à 330 px. Aucune media query n'est nécessaire : sous 1400 px le
   conteneur reste borné par la fenêtre, exactement comme avant. La règle
   passe après .max-w-6xl dans la feuille, à spécificité égale, et
   l'emporte donc.
   .sec-head est déjà plafonné à 860 px, le titre reste donc à sa largeur ;
   la mention légale est ramenée à la même laisse pour ne pas s'étaler sur
   toute la rangée. */
.aid-wrap {
  max-width: 1400px;
}

.aid-wrap .disp-note {
  max-width: 860px;
  margin-left: auto;
  margin-right: auto;
}

/* --- cartes « aides mobilisables » ---
   Une carte par dispositif : intitulé, ce qu'il couvre, le montant, puis
   le lien vers la source officielle. Même gabarit de carte que .crit —
   fond, bordure, rayon et levée au survol sont identiques — mais les
   cartes sont ici en colonne flex : le paragraphe pousse le montant et
   le lien en bas, si bien qu'ils s'alignent d'une carte à l'autre quel
   que soit le nombre de lignes du descriptif. */
.aid {
  display: grid;
  gap: 16px;
  margin-top: 40px;
}

@media (min-width: 620px) {
  .aid {
    grid-template-columns: repeat(2, 1fr);
  }
}

/* Quatre colonnes à partir de 1150 px seulement : en dessous, une carte
   descend sous 230 px, les intitulés et les montants y passent sur deux
   lignes. La grille reste alors en deux colonnes. */
@media (min-width: 1150px) {
  .aid {
    grid-template-columns: repeat(4, 1fr);
  }
}

.aid>div {
  display: flex;
  flex-direction: column;
  background: #fff;
  border: 1px solid #e9eef7;
  border-radius: 18px;
  padding: 24px 20px;
  transition: transform .25s cubic-bezier(.22, .8, .3, 1), box-shadow .25s, border-color .25s;
}

.aid>div:hover {
  transform: translateY(-4px);
  border-color: #dbe6f5;
  box-shadow: 0 18px 38px rgba(2, 42, 106, .10);
}

.aid b {
  display: block;
  font-size: 15px;
  font-weight: 800;
  color: var(--navy);
  margin-bottom: 7px;
}

.aid p {
  font-size: 13.5px;
  line-height: 1.6;
  color: #7b8aa3;
  /* occupe la hauteur restante : c'est ce qui aligne les montants */
  flex: 1 1 auto;
}

/* Montant : même pastille orange pâle que les numéros de .steps. Le texte
   est en --orange-d et non en --orange, plus lisible sur ce fond clair à
   cette taille, et déjà présent dans la palette. */
.aid i {
  display: block;
  font-style: normal;
  margin-top: 16px;
  padding: 9px 12px;
  border-radius: 10px;
  background: rgba(244, 113, 36, .11);
  color: var(--orange-d);
  font-size: 13px;
  font-weight: 800;
  line-height: 1.4;
  text-align: center;
}

/* Adresse de la source officielle, affichée telle quelle sous le montant.
   overflow-wrap: anywhere évite qu'une URL longue — celle de l'éco-PTZ
   fait 63 caractères — déborde de la carte : sans lui, une chaîne sans
   espace ne se coupe pas et élargit la colonne de la grille. */
.aid .src {
  display: block;
  margin-top: 12px;
  font-size: 11.5px;
  line-height: 1.5;
  color: #94a3b8;
  overflow-wrap: anywhere;
  /* Deux lignes réservées, la hauteur de la plus longue des quatre URL :
     les adresses courtes occupent la même place que les longues, donc les
     pastilles de montant retombent à la même hauteur d'une carte à
     l'autre au lieu de flotter chacune à la sienne. */
  min-height: 35px;
}

.aid a {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  margin-top: 16px;
  color: var(--orange);
  font-size: 13.5px;
  font-weight: 700;
}

/* même flèche qui glisse que sur les cartes .vert */
.aid a svg {
  transition: transform .22s ease;
}

.aid a:hover svg {
  transform: translateX(4px);
}

/* --- tableau des dispositifs --- */
.disp {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 12px;
}

@media (min-width: 700px) {
  .disp {
    grid-template-columns: repeat(3, 1fr);
  }
}

.disp a,
.disp div.d {
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: 10px;
  background: #fff;
  border: 1px solid #e6ecf5;
  border-radius: 14px;
  padding: 20px 14px;
  transition: transform .22s ease, box-shadow .22s ease, border-color .22s ease;
}

.disp div.d:hover {
  transform: translateY(-3px);
  border-color: #cfdcef;
  box-shadow: 0 14px 32px rgba(2, 42, 106, .10);
}

.disp img {
  height: 46px;
  width: auto;
}

.disp b {
  font-size: 12.5px;
  color: #64748b;
  font-weight: 600;
  text-align: center;
  line-height: 1.35;
}

.disp-note {
  text-align: center;
  font-size: 12px;
  color: #94a3b8;
  margin-top: 16px;
  line-height: 1.55;
}

/* Sous 560 px, deux colonnes laissaient la troisième carte seule sur sa
   ligne, avec une case vide à côté. On passe à une colonne, et la carte
   bascule en ligne — le logo à gauche, le libellé à droite — pour occuper
   la largeur au lieu d'empiler dans un bloc à moitié vide.
   Le passage en ligne impose aussi de reprendre le justify-content : centré,
   chaque carte centrait son propre couple visuel + libellé, dont la largeur
   dépend du texte. Les visuels se retrouvaient donc décalés d'une carte à
   l'autre au lieu de former une colonne. Caler sur le début les aligne, et
   avec des pastilles .disp-ico (46 px fixes) les libellés s'alignent aussi. */
@media (max-width: 560px) {
  .disp {
    grid-template-columns: 1fr;
    gap: 10px;
  }

  .disp a,
  .disp div.d {
    flex-direction: row;
    justify-content: flex-start;
    gap: 16px;
    padding: 14px 16px;
  }

  .disp b {
    text-align: left;
  }

  .disp img {
    flex: 0 0 auto;
    height: 40px;
  }
}

/* pastille d'icône, utilisée quand aucun logo officiel ne correspond
   au dispositif (ex. prime à l'autoconsommation, TVA réduite) */
.disp-ico {
  display: flex;
  align-items: center;
  justify-content: center;
  height: 46px;
  width: 46px;
  border-radius: 14px;
  flex: 0 0 auto;
  background: rgba(244, 113, 36, .10);
  color: var(--orange);
}

.disp-ico svg {
  width: 25px;
  height: 25px;
}

/* --- garanties --- */
.guar {
  display: grid;
  gap: 26px;
}

/* Passage direct de 1 à 3 colonnes, comme .vert et .disp : avec trois
   colonnes, un palier intermédiaire à deux laisserait toujours la dernière
   seule sur sa ligne. */
@media (min-width: 700px) {
  .guar {
    grid-template-columns: repeat(3, 1fr);
    gap: 34px;
  }
}

.guar>div {
  text-align: center;
}

/* Les trois logos ont la même hauteur de fichier (110 px) pour des largeurs
   qui vont de 192 à 281 px : on les cale sur la hauteur, comme dans .fc-foot
   et .disp. Les mettre à la largeur donnerait trois logos de tailles très
   différentes d'une colonne à l'autre. */
.guar img {
  display: block;
  height: 46px;
  width: auto;
  margin: 0 auto 14px;
}

.guar b {
  display: block;
  font-size: 14.5px;
  font-weight: 800;
  color: var(--navy);
  margin-bottom: 7px;
}

.guar p {
  font-size: 12.5px;
  line-height: 1.6;
  color: #7b8aa3;
}

/* --- cartes des 3 verticales (landing générale) --- */
.vert {
  display: grid;
  gap: 18px;
  margin-top: 44px;
}

/* Passage direct de 1 à 3 colonnes : avec trois cartes, un palier à deux
   colonnes laisserait toujours la dernière seule. Le seuil est à 700 px
   pour que la tablette en portrait (768) reçoive les trois colonnes
   plutôt que des cartes pleine largeur à la bande d'image étirée. */
@media (min-width: 700px) {
  .vert {
    grid-template-columns: repeat(3, 1fr);
  }
}

.vert a {
  display: flex;
  flex-direction: column;
  overflow: hidden;
  background: #fff;
  border: 1px solid #e6ecf5;
  border-radius: 20px;
  transition: transform .28s cubic-bezier(.22, .8, .3, 1), box-shadow .28s, border-color .28s;
}

.vert a:hover {
  transform: translateY(-6px);
  border-color: #d3e0f2;
  box-shadow: 0 26px 52px rgba(2, 42, 106, .14);
}

.vert-img {
  position: relative;
  height: 168px;
  overflow: hidden;
}

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

.vert-img .ph {
  width: 100%;
  height: 100%;
}

.vert-img i {
  position: absolute;
  top: 12px;
  left: 12px;
  font-style: normal;
  background: rgba(10, 28, 61, .9);
  color: #fff;
  font-size: 10px;
  font-weight: 800;
  letter-spacing: .14em;
  text-transform: uppercase;
  padding: 5px 10px;
  border-radius: 6px;
}

.vert-body {
  padding: 22px 22px 24px;
  flex: 1 1 auto;
  display: flex;
  flex-direction: column;
}

.vert-body b {
  display: block;
  font-size: 18px;
  font-weight: 800;
  color: var(--navy);
}

.vert-body p {
  font-size: 14px;
  line-height: 1.65;
  color: #6b7a90;
  margin-top: 10px;
  flex: 1 1 auto;
}

.vert-body span {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  margin-top: 18px;
  color: var(--orange);
  font-weight: 700;
  font-size: 14px;
}

.vert-body span svg {
  transition: transform .22s ease;
}

.vert a:hover .vert-body span svg {
  transform: translateX(4px);
}

/* --- bandeau CTA intermédiaire ---
   Barre d'action en deux colonnes : le texte à gauche, le bouton et la
   réassurance à droite. Le palier de bascule est à 860 px et non 768 :
   entre les deux, la colonne de texte descend sous 400 px et le titre y
   part en quatre lignes. La hauteur est réglée ici, et non par une
   utilitaire py-* sur la section, parce qu'elle change au même palier que
   les colonnes — les deux réglages restent ainsi côte à côte. */
.cta-band {
  /* fond transparent : la barre laisse passer celui de la page. Elle est
     encadrée de deux sections blanches, le bleu très clair du body suffit
     donc à la détacher sans qu'elle ait à porter sa propre couleur. */
  background: transparent;
  color: var(--navy);
  padding: 34px 0;
  border-top: 1px solid rgba(2, 42, 106, .08);
  border-bottom: 1px solid rgba(2, 42, 106, .08);
}

.cta-split {
  display: grid;
  gap: 24px;
  text-align: center;
}

.cta-split-txt h2 {
  font-size: 23px;
  line-height: 1.22;
  font-weight: 800;
  color: var(--navy);
}

.cta-split-txt p {
  margin: 12px auto 0;
  max-width: 56ch;
  font-size: 15px;
  line-height: 1.65;
  color: #64748b;
}

/* Les trois mentions passent avant le bouton : elles répondent aux
   objections (engagement, documents, qualification) juste avant le clic,
   plutôt que de le commenter après coup. L'écart entre les deux vient
   d'un gap et non d'une marge, pour rester indépendant de leur ordre. */
.cta-split-act {
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 18px;
}

/* Sur fond clair, le bouton blanc disparaissait : il reprend le orange des
   CTA du reste de la page. La couleur, l'ombre, le survol et l'état actif
   viennent des classes .bg-forest et .text-white posées dans le markup,
   comme pour les autres CTA — cette règle ne décrit que la forme.
   Le libellé ne se coupe pas : sur deux lignes, la pilule perdrait sa
   forme. Il tient dans la largeur d'un écran de 320 px, marges comprises. */
.cta-split-btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  font-weight: 800;
  font-size: 16px;
  line-height: 1;
  white-space: nowrap;
  border-radius: 999px;
  padding: 16px 30px;
}

.cta-reassure {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 10px 20px;
}

.cta-reassure span {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  font-size: 12.5px;
  color: #5b6f8d;
  font-weight: 600;
}

.cta-reassure span::before {
  content: "";
  width: 14px;
  height: 14px;
  flex: 0 0 14px;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23F47124' stroke-width='3.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M20 6 9 17l-5-5'/%3E%3C/svg%3E");
  background-size: 14px;
  background-repeat: no-repeat;
  background-position: center;
}

@media (min-width: 860px) {
  .cta-band {
    padding: 40px 0;
  }

  /* la colonne de droite est dimensionnée par son contenu (auto) : le
     bouton garde sa largeur naturelle et c'est le texte qui absorbe ce
     qui reste, quelle que soit la largeur de la fenêtre */
  .cta-split {
    grid-template-columns: minmax(0, 1fr) auto;
    align-items: center;
    gap: 44px;
    text-align: left;
  }

  .cta-split-txt h2 {
    font-size: 29px;
  }

  .cta-split-txt p {
    margin-left: 0;
    margin-right: 0;
  }

  .cta-split-act {
    align-items: flex-start;
  }

  /* en pile au-dessus du bouton : alignées sur sa gauche, les trois
     mentions se lisent comme une liste de conditions, pas comme une ligne
     de pied de bandeau */
  .cta-reassure {
    flex-direction: column;
    align-items: flex-start;
    gap: 9px;
  }
}

/* --- CTA final --- */
/* bloc large : le titre tient sur moins de lignes et respire davantage */
.final-cta {
  text-align: center;
  max-width: 960px;
  margin: 0 auto;
}

.final-cta h2 {
  font-size: 27px;
  line-height: 1.22;
  font-weight: 800;
  color: var(--navy);
}

.final-cta h2 em {
  font-style: normal;
  color: var(--orange);
}

/* le paragraphe reste plus étroit que le titre : au-delà, les lignes
   deviennent trop longues pour être lues confortablement */
.final-cta p {
  font-size: 15.5px;
  line-height: 1.7;
  color: #64748b;
  margin-top: 16px;
  margin-left: auto;
  margin-right: auto;
  max-width: 760px;
  /* même traitement que les chapôs de section : justifié et coupé. Le titre
     au-dessus garde text-wrap: balance, qui lui convient sur deux ou trois
     lignes ; sur ce paragraphe il annulerait la justification. */
  text-align: justify;
  text-align-last: center;
  hyphens: auto;
}

@media (min-width: 768px) {
  .final-cta h2 {
    font-size: 36px;
  }
}

/* Sous 600 px une ligne ne porte plus que six ou sept mots : la
   justification n'a plus assez de blancs à répartir et creuse des trous
   entre les mots. Les chapôs repassent centrés, comme leur titre. */
@media (max-width: 599px) {

  .sec-sub,
  .final-cta p {
    text-align: center;
    hyphens: manual;
  }
}

/* --- encart d'information --- */
.note-box {
  margin-top: 26px;
  background: rgba(244, 113, 36, .05);
  border-left: 4px solid var(--orange);
  border-radius: 0 8px 8px 0;
  padding: 16px 18px;
  color: var(--navy);
  font-weight: 600;
  font-size: 14px;
  line-height: 1.6;
}

/* le texte de l'encart est déjà semi-gras : l'emphase monte à 800 pour rester lisible */
.note-box b {
  font-weight: 800;
}

/* ==========================================================================
   7. FOOTER · COOKIES · PAGES LÉGALES
   ========================================================================== */
.ft {
  display: grid;
  gap: 26px;
}

@media (min-width: 820px) {
  .ft {
    grid-template-columns: 260px 1fr;
    gap: 48px;
  }
}

.ft-brand {
  display: flex;
  align-items: center;
  gap: 10px;
}

.ft-brand b {
  font-size: 15px;
  font-weight: 800;
  letter-spacing: .05em;
  color: #fff;
  display: block;
}

.ft-brand i {
  font-style: normal;
  font-size: 9px;
  letter-spacing: .15em;
  color: #8ea6cc;
  display: block;
  margin-top: 2px;
}

.ft-links {
  display: flex;
  flex-wrap: wrap;
  gap: 8px 20px;
  margin-top: 16px;
}

.ft-links a {
  color: #cfe0f7;
  font-size: 12px;
}

.ft-links a:hover {
  color: #fff;
  text-decoration: underline;
}

.ft-links button {
  color: #cfe0f7;
  font-size: 12px;
  background: none;
  border: 0;
  padding: 0;
  font-family: inherit;
  cursor: pointer;
}

.ft-links button:hover {
  color: #fff;
  text-decoration: underline;
}

.ft p {
  font-size: 11.5px;
  line-height: 1.7;
  color: #93a9c9;
}

.ft-copy {
  border-top: 1px solid rgba(255, 255, 255, .10);
  margin-top: 26px;
  padding-top: 16px;
  font-size: 11px;
  color: #7f95b6;
  text-align: center;
}

/* bandeau cookies */
.ck {
  position: fixed;
  left: 12px;
  right: 12px;
  bottom: 12px;
  z-index: 80;
  background: #fff;
  border: 1px solid #dde5f1;
  border-radius: 16px;
  box-shadow: 0 20px 50px rgba(2, 42, 106, .22);
  padding: 18px 20px;
  display: none;
  gap: 16px;
  align-items: center;
  flex-wrap: wrap;
}

.ck.on {
  display: flex;
}

.ck p {
  font-size: 12.5px;
  line-height: 1.6;
  color: #55637a;
  flex: 1 1 300px;
}

.ck p a {
  color: var(--navy);
  text-decoration: underline;
}

.ck div {
  display: flex;
  gap: 10px;
  flex-wrap: wrap;
}

.ck button {
  font-family: inherit;
  font-size: 13px;
  font-weight: 700;
  border-radius: 999px;
  padding: 10px 20px;
  border: 1px solid #d8e0ee;
  background: #fff;
  color: #55637a;
  transition: background .15s, color .15s, border-color .15s;
}

.ck button:hover {
  background: #f1f5fb;
  color: var(--navy);
}

.ck button.ok {
  background: var(--orange);
  border-color: var(--orange);
  color: #fff;
}

.ck button.ok:hover {
  background: var(--orange-d);
  border-color: var(--orange-d);
  color: #fff;
}

@media (min-width: 900px) {
  .ck {
    left: auto;
    right: 20px;
    bottom: 20px;
    max-width: 620px;
  }
}

/* cibles tactiles : au doigt, 44 px de haut est le minimum confortable */
@media (max-width: 899px) {
  .ck div {
    width: 100%;
  }

  .ck button {
    flex: 1 1 0;
    min-height: 44px;
  }
}

/* le bandeau cookies passe au-dessus du CTA collant mobile */
@media (max-width: 767px) {
  .ck.on~#sticky-cta {
    display: none;
  }
}

/* pages légales */
.legal {
  max-width: 780px;
  margin: 0 auto;
  padding: 48px 16px 72px;
}

.legal h1 {
  font-size: 30px;
  font-weight: 800;
  color: var(--navy);
  line-height: 1.2;
}

.legal h2 {
  font-size: 19px;
  font-weight: 800;
  color: var(--navy);
  margin-top: 38px;
  margin-bottom: 12px;
}

.legal p,
.legal li {
  font-size: 14.5px;
  line-height: 1.75;
  color: #55637a;
}

.legal p {
  margin-top: 12px;
}

.legal ul {
  margin-top: 12px;
  display: grid;
  gap: 8px;
}

.legal li {
  padding-left: 18px;
  position: relative;
}

.legal li::before {
  content: "";
  position: absolute;
  left: 0;
  top: 9px;
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--orange);
}

.legal a {
  color: var(--navy);
  text-decoration: underline;
}

.legal .maj {
  font-size: 12.5px;
  color: #94a3b8;
  margin-top: 8px;
}

.legal .todo {
  background: #fff8f3;
  border: 1px dashed #f0c3a3;
  border-radius: 10px;
  padding: 4px 8px;
  color: #b6511a;
  font-weight: 600;
  font-size: 13.5px;
}

/* ==========================================================================
   8. ANIMATIONS
   ========================================================================== */

/* IMPORTANT — tout ce qui masque un élément au départ est conditionné à la
   classe .anim, posée sur <html> par un court script en tête de page.
   Sans JavaScript, aucune règle d'opacité nulle ne s'applique : la page
   s'affiche entière et immobile, au lieu de rester blanche. */

@keyframes riseIn {
  from {
    opacity: 0;
    transform: translateY(16px);
  }

  to {
    opacity: 1;
    transform: none;
  }
}

/* --- apparition progressive des sections au scroll --- */
.anim .rv {
  opacity: 0;
  transform: translateY(18px);
  transition: opacity .6s ease, transform .6s cubic-bezier(.22, .8, .3, 1);
}

.anim .rv.in {
  opacity: 1;
  transform: none;
}

/* décalage en cascade pour les grilles */
.rv-d1 {
  transition-delay: .08s;
}

.rv-d2 {
  transition-delay: .16s;
}

.rv-d3 {
  transition-delay: .24s;
}

/* --- entrée du hero au chargement ---
   Pas d'observateur ici : le hero est visible d'emblée, l'animation part
   au chargement. Le délai se règle par la variable --d sur l'élément. */
.anim .anim-up {
  animation: riseIn .7s cubic-bezier(.22, .8, .3, 1) both;
  animation-delay: var(--d, 0s);
}

/* les lignes du bloc « jusqu'à X € » arrivent l'une après l'autre,
   une fois la colonne en place */
.anim .aide-list span {
  animation: riseIn .5s cubic-bezier(.22, .8, .3, 1) both;
}

.anim .aide-list span:nth-child(1) {
  animation-delay: .50s;
}

.anim .aide-list span:nth-child(2) {
  animation-delay: .58s;
}

.anim .aide-list span:nth-child(3) {
  animation-delay: .66s;
}

.anim .aide-list span:nth-child(4) {
  animation-delay: .74s;
}

/* --- photos : dézoom discret à l'apparition ---
   Le cadre a overflow:hidden, l'image ne déborde donc jamais. */
.anim .sol-media.rv img,
.anim .sol-media.rv .ph {
  transform: scale(1.06);
  transition: transform 1.1s cubic-bezier(.22, .8, .3, 1);
}

.anim .sol-media.rv.in img,
.anim .sol-media.rv.in .ph {
  transform: none;
}

/* --- listes : les items se déploient une fois leur bloc révélé --- */
.anim .bullets li,
.anim .steps li,
.anim .disp .d {
  opacity: 0;
  transform: translateY(9px);
  transition: opacity .5s ease, transform .5s cubic-bezier(.22, .8, .3, 1);
}

.anim .rv.in .bullets li,
.anim .rv.in .steps li,
.anim .rv.in .disp .d {
  opacity: 1;
  transform: none;
}

.anim .bullets li:nth-child(1),
.anim .steps li:nth-child(1),
.anim .disp .d:nth-child(1) {
  transition-delay: .06s;
}

.anim .bullets li:nth-child(2),
.anim .steps li:nth-child(2),
.anim .disp .d:nth-child(2) {
  transition-delay: .13s;
}

.anim .bullets li:nth-child(3),
.anim .steps li:nth-child(3),
.anim .disp .d:nth-child(3) {
  transition-delay: .20s;
}

.anim .bullets li:nth-child(4),
.anim .steps li:nth-child(4) {
  transition-delay: .27s;
}

.anim .bullets li:nth-child(5),
.anim .steps li:nth-child(5) {
  transition-delay: .34s;
}

.anim .bullets li:nth-child(6) {
  transition-delay: .41s;
}

/* --- Parcours en étapes : enchaînement lisible 1 → 2 → 3 ---
   Le décalage générique ci-dessus (.06s d'un item au suivant) convient à une
   liste à puces, où l'on veut juste éviter que tout surgisse d'un bloc. Sur
   les étapes, l'ordre est le propos : on l'étire pour qu'il se lise.

   La séquence entrelace les étapes et les traits qui les relient, de sorte
   que le regard soit conduit du 1 vers le 2 puis vers le 3 :
     0.00s  l'étape 1 monte
     0.30s  le trait 1→2 se trace
     0.60s  l'étape 2 monte
     0.90s  le trait 2→3 se trace
     1.20s  l'étape 3 monte
   Ces règles viennent après les précédentes et les emportent à spécificité
   égale ; les puces et les dispositifs gardent leur cadence courte. */
.anim .steps li:nth-child(1) {
  transition-delay: 0s;
}

.anim .steps li:nth-child(2) {
  transition-delay: .6s;
}

.anim .steps li:nth-child(3) {
  transition-delay: 1.2s;
}

/* Le numéro se déploie avec un léger dépassement, ce qui accroche l'œil au
   bon endroit au moment où l'étape arrive. transition-delay: inherit reprend
   le délai calculé sur le li : un seul endroit à modifier pour recaler toute
   la séquence. Le shorthand est posé avant, sinon il remettrait le délai à 0. */
.anim .steps li::before {
  transform: scale(.5);
  transition: transform .45s cubic-bezier(.34, 1.56, .64, 1);
  transition-delay: inherit;
}

.anim .rv.in .steps li::before {
  transform: none;
}

/* Le trait de liaison se trace du haut vers le bas, comme un fil que l'on
   déroule d'une étape à la suivante. */
.anim .steps li::after {
  transform: scaleY(0);
  transform-origin: top center;
  transition: transform .45s cubic-bezier(.4, 0, .2, 1);
}

.anim .rv.in .steps li::after {
  transform: scaleY(1);
}

.anim .steps li:nth-child(1)::after {
  transition-delay: .3s;
}

.anim .steps li:nth-child(2)::after {
  transition-delay: .9s;
}

/* --- boutons : reflet qui traverse au survol ---
   Exclut le CTA collant, dont le position:fixed ne doit pas être écrasé. */
a.bg-forest:not(.fixed),
button.bg-forest {
  position: relative;
  overflow: hidden;
}

a.bg-forest:not(.fixed)::after,
button.bg-forest::after {
  content: "";
  position: absolute;
  top: 0;
  bottom: 0;
  left: -45%;
  width: 32%;
  background: linear-gradient(100deg, transparent, hsla(0, 0%, 100%, .30), transparent);
  transform: skewX(-18deg);
  pointer-events: none;
  transition: left .6s cubic-bezier(.3, .7, .4, 1);
}

a.bg-forest:not(.fixed):hover::after,
button.bg-forest:hover::after {
  left: 125%;
}

/* CTA collant mobile : légère pulsation à l'apparition */
#sticky-cta {
  animation: ctaIn .4s cubic-bezier(.22, .8, .3, 1) both;
}

@keyframes ctaIn {
  from {
    opacity: 0;
    transform: translateY(14px);
  }

  to {
    opacity: 1;
    transform: none;
  }
}

/* --- respect du réglage système « animations réduites » --- */
@media (prefers-reduced-motion: reduce) {
  html {
    scroll-behavior: auto;
  }

  .anim .rv,
  .anim .anim-up,
  .anim .aide-list span,
  .anim .bullets li,
  .anim .steps li,
  .anim .steps li::before,
  .anim .steps li::after,
  .anim .disp .d {
    opacity: 1 !important;
    transform: none !important;
    transition: none !important;
    animation: none !important;
  }

  .anim .sol-media.rv img,
  .anim .sol-media.rv .ph {
    transform: none !important;
    transition: none !important;
  }

  a.bg-forest::after,
  button.bg-forest::after {
    display: none;
  }

  .fr path {
    animation: none !important;
  }

  .roof {
    transition: none;
  }

  .trust-stat::after {
    animation: none;
  }

  #sticky-cta {
    animation: none;
  }
}
/* ==========================================================================
   OPTIMISATION CONVERSION (sept. 2026)
   Ajouts communs aux quatre landings. Rien au-dessus n'a été modifié :
   supprimer ce bloc ramène le rendu d'origine (hors HTML).
   ========================================================================== */

/* --- CTA dans le header collant ---
   Le header reste à l'écran pendant tout le défilement : le bouton offre
   un point de conversion permanent, y compris en desktop où il n'y a pas
   de CTA collant. */
.hdr-right {
  display: flex;
  align-items: center;
  gap: 16px;
}

.hdr-cta {
  display: inline-flex;
  align-items: center;
  white-space: nowrap;
  font-weight: 800;
  font-size: 13.5px;
  color: #fff;
  border-radius: 999px;
  padding: 10px 18px;
  box-shadow: 0 6px 16px -6px rgba(244, 113, 36, .6);
}

/* en petit écran, le logo garde sa place : libellé court */
.hdr-cta .hc-s {
  display: none;
}

@media (max-width: 480px) {
  .hdr-cta {
    font-size: 13px;
    padding: 9px 15px;
  }

  .hdr-cta .hc-l {
    display: none;
  }

  .hdr-cta .hc-s {
    display: inline;
  }
}

/* --- sous-titre du H1 : la promesse concrète en une ligne --- */
.hero-sub {
  text-align: center;
  color: #475569;
  font-size: 15px;
  line-height: 1.5;
  margin: 10px auto 0;
  max-width: 60ch;
}

.hero-sub b {
  color: var(--navy);
}

@media (min-width: 768px) {
  .hero-sub {
    font-size: 17px;
  }
}

/* En mobile, le montant est déjà dans le H1 : le bloc « Jusqu'à X » le
   répétait et poussait le formulaire sous la ligne de flottaison. On le
   retire pour que le formulaire apparaisse dès l'arrivée sur la page. */
@media (max-width: 767px) {
  .hero-grid-alt .hero-aside {
    display: none;
  }
}

/* --- micro-réassurance sous les boutons --- */
.cta-micro {
  display: block;
  margin-top: 10px;
  font-size: 12.5px;
  font-weight: 600;
  color: #6b7d99;
}

.cta-micro::before {
  content: "🔒 ";
}

/* --- section « Êtes-vous éligible ? » (réutilise les cartes .crit) --- */
.crit b::before {
  content: "✓";
  display: inline-grid;
  place-items: center;
  width: 22px;
  height: 22px;
  margin-right: 8px;
  border-radius: 50%;
  background: rgba(22, 163, 74, .12);
  color: #16a34a;
  font-size: 13px;
  vertical-align: 1px;
}

/* --- FAQ : lève les dernières objections avant le CTA final --- */
.faq {
  max-width: 780px;
  margin: 36px auto 0;
  display: grid;
  gap: 12px;
}

.faq details {
  background: #fff;
  border: 1px solid #e3eaf5;
  border-radius: 14px;
  transition: box-shadow .2s, border-color .2s;
}

.faq details[open] {
  border-color: #cddbef;
  box-shadow: 0 12px 30px rgba(2, 42, 106, .08);
}

.faq summary {
  list-style: none;
  cursor: pointer;
  padding: 18px 52px 18px 20px;
  position: relative;
  font-weight: 800;
  font-size: 15px;
  line-height: 1.4;
  color: var(--navy);
}

.faq summary::-webkit-details-marker {
  display: none;
}

.faq summary::after {
  content: "+";
  position: absolute;
  right: 18px;
  top: 50%;
  transform: translateY(-50%);
  width: 26px;
  height: 26px;
  display: grid;
  place-items: center;
  border-radius: 50%;
  background: rgba(244, 113, 36, .1);
  color: var(--orange);
  font-size: 18px;
  font-weight: 800;
  transition: transform .2s;
}

.faq details[open] summary::after {
  transform: translateY(-50%) rotate(45deg);
}

.faq details p {
  padding: 0 20px 18px;
  font-size: 14.5px;
  line-height: 1.65;
  color: #64748b;
}

.faq details p b {
  color: var(--navy);
}

/* --- coût de l'attente, au-dessus du CTA final --- */
.final-cta .wait-note {
  display: inline-block;
  margin-top: 18px;
  padding: 10px 16px;
  border-radius: 10px;
  background: rgba(244, 113, 36, .08);
  color: var(--navy);
  font-weight: 700;
  font-size: 14px;
  text-align: center;
}

/* ==========================================================================
   HERO PV (pv.html) — formulaire à droite dès le haut de page
   ========================================================================== */
.hdr-live {
  display: inline-block;
  background: #e9f7ef;
  color: #1f9d55;
  padding: 4px 10px 4px 20px;
  border-radius: 999px;
  position: relative;
}

.hdr-live::before {
  content: "";
  position: absolute;
  left: 9px;
  top: 50%;
  width: 6px;
  height: 6px;
  margin-top: -3px;
  border-radius: 50%;
  background: #1f9d55;
  box-shadow: 0 0 0 3px rgba(31, 157, 85, .2);
}

.pvh {
  padding: 40px 0 64px;
}

.pvh-grid {
  display: grid;
  grid-template-columns: minmax(0, 1fr) 520px;
  grid-template-areas:
    "head form"
    "left form";
  grid-template-rows: auto 1fr;
  column-gap: 48px;
  align-items: start;
}

.pvh-head {
  grid-area: head;
}

.pvh-left {
  grid-area: left;
}

.pvh-form {
  grid-area: form;
}

.pvh-kicker {
  display: inline-block;
  background: #fff1e6;
  color: var(--orange-d);
  font-weight: 700;
  font-size: 11.5px;
  letter-spacing: .12em;
  text-transform: uppercase;
  padding: 6px 14px;
  border-radius: 999px;
  margin-bottom: 16px;
}

.pvh h1 {
  font-size: 42px;
  line-height: 1.12;
  font-weight: 800;
  color: var(--navy);
  text-wrap: balance;
}

.pvh h1 mark {
  background: var(--orange);
  color: #fff;
  padding: 0 10px;
  border-radius: 8px;
  box-decoration-break: clone;
  -webkit-box-decoration-break: clone;
  box-shadow: 0 6px 16px -6px rgba(244, 113, 36, .6);
}

.pvh-ast {
  font-size: .45em;
  font-weight: 700;
  color: #5f6b85;
  vertical-align: super;
  margin-left: 2px;
}

.pvh-sub {
  margin-top: 16px;
  font-size: 17px;
  line-height: 1.55;
  color: #5f6b85;
  max-width: 52ch;
}

.pvh-sub b {
  color: var(--navy);
}

.pvh-benefits {
  list-style: none;
  margin: 28px 0 26px;
  display: grid;
  gap: 14px;
}

.pvh-benefits li {
  display: flex;
  gap: 12px;
  align-items: flex-start;
  font-size: 15px;
  line-height: 1.45;
  color: #1c2740;
}

.pvh-benefits li i {
  flex: none;
  width: 28px;
  height: 28px;
  border-radius: 8px;
  background: #fff1e6;
  color: var(--orange-d);
  display: grid;
  place-items: center;
  font-style: normal;
  font-weight: 800;
  font-size: 13px;
}

.pvh-benefits li b {
  color: var(--navy);
}

.pvh-photo {
  position: relative;
  border-radius: 16px;
  overflow: hidden;
  height: 190px;
}

.pvh-photo img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}

.pvh-cap {
  position: absolute;
  right: 14px;
  bottom: 14px;
  background: rgba(255, 255, 255, .95);
  color: var(--navy);
  font-size: 12px;
  font-weight: 700;
  padding: 8px 12px;
  border-radius: 10px;
}

/* --- carte formulaire --- */
.pvh-form {
  position: relative;
  background: #fff;
  border-radius: 18px;
  box-shadow: 0 24px 60px rgba(2, 42, 106, .14), 0 0 0 1px #e3e8f2;
  padding: 24px 16px 8px;
  min-width: 0;
}

/* le badge « Résultat immédiat » dépasse de 13 px au-dessus de la carte :
   on le garde visible sous le header fixe après un clic sur un CTA */
#form-card.pvh-form {
  scroll-margin-top: 24px;
}

.pvh-tag {
  position: absolute;
  top: -13px;
  left: 24px;
  z-index: 2;
  background: #1f9d55;
  color: #fff;
  font-size: 12px;
  font-weight: 700;
  padding: 6px 12px;
  border-radius: 999px;
}

/* Le widget Heyflow annonce parfois une hauteur plus courte que son contenu
   (pied de formulaire sur deux lignes selon le navigateur) : la marge basse
   lui laisse la place de déborder sans sortir de la carte ni être coupé. */
.pvh-form #form-slot {
  min-height: 320px;
  padding-bottom: 28px;
}

.pvh-form heyflow-wrapper {
  display: block;
  max-width: 100%;
}

.pvh-trust {
  margin-top: 4px;
  padding-bottom: 12px;
  text-align: center;
  font-size: 12.5px;
  color: #5f6b85;
}

.pvh-stars {
  color: #f5b301;
  letter-spacing: 1px;
}

/* --- tablette et mobile : titre, puis formulaire, puis bénéfices --- */
@media (max-width: 1000px) {
  .pvh-grid {
    grid-template-columns: minmax(0, 1fr);
    grid-template-areas:
      "head"
      "form"
      "left";
    row-gap: 28px;
  }

  .pvh-head {
    text-align: center;
  }

  .pvh-sub {
    margin-left: auto;
    margin-right: auto;
  }

  .pvh-form {
    max-width: 620px;
    width: 100%;
    margin: 0 auto;
  }

  .pvh-left {
    max-width: 620px;
    width: 100%;
    margin: 0 auto;
  }

  .pvh-benefits {
    margin-top: 0;
  }
}

@media (max-width: 600px) {
  .pvh {
    padding: 18px 0 40px;
  }

  .pvh-grid {
    row-gap: 24px;
  }

  /* en mobile, chaque ligne gagnée remonte le formulaire : la pastille
     et la fin du sous-titre sont retirées */
  .pvh-kicker,
  .pvh-sub-more {
    display: none;
  }

  .pvh h1 {
    font-size: 27px;
  }

  .pvh-sub {
    font-size: 15px;
    margin-top: 10px;
  }

  .pvh-form {
    padding: 22px 8px 4px;
  }
}

/* Le surlignage du H1 PV (« aides 2027 ») reste d'un seul tenant au-dessus du mobile */
@media (min-width: 601px) {
  .pvh h1 mark {
    white-space: nowrap;
  }
}


/* ==========================================================================
   PV-2 — hero variante 2 (pv-2.html uniquement, préfixe .pv2)
   ========================================================================== */

/* desktop : la colonne gauche liste déjà les dispositifs */
@media (min-width: 768px) {
  .pv2 .pv2-trust {
    display: none;
  }
}

/* mobile : chaque ligne gagnée remonte le formulaire */
@media (max-width: 600px) {
  .pv2 .pv2-more {
    display: none;
  }

  .pv2 .trustbar {
    margin-top: 10px;
  }
}

/* --- colonne gauche --- */
.pv2-aside {
  background: var(--navy);
  border: 0;
  color: #fff;
}

.pv2-gains {
  padding: 22px 22px 20px;
}

.pv2-gains .aide-pill {
  margin-bottom: 12px;
}

.pv2-gains-t {
  font-size: 19px;
  line-height: 1.25;
  font-weight: 800;
  color: #fff;
}

.pv2-gains ul {
  list-style: none;
  margin: 16px 0 0;
  padding: 0;
  display: grid;
  gap: 10px;
}

.pv2-gains li {
  display: flex;
  align-items: center;
  gap: 12px;
  background: rgba(255, 255, 255, .06);
  border: 1px solid rgba(255, 255, 255, .08);
  border-radius: 12px;
  padding: 10px 12px;
}

.pv2-gains li b {
  flex: 0 0 64px;
  font-size: 18px;
  font-weight: 800;
  color: var(--orange);
  line-height: 1.1;
}

.pv2-gains li span {
  font-size: 12.5px;
  line-height: 1.4;
  color: #cddcf0;
}

.pv2-gains-f {
  margin-top: 14px;
  font-size: 12.5px;
  color: #9fb6d8;
  text-align: center;
}

.pv2-gains-f b {
  color: #fff;
}

.pv2-pic {
  position: relative;
  min-height: 170px;
}

.pv2-cap {
  position: absolute;
  left: 12px;
  bottom: 12px;
  background: rgba(255, 255, 255, .95);
  color: var(--navy);
  font-size: 12px;
  font-weight: 700;
  padding: 7px 11px;
  border-radius: 10px;
}

/* --- carte formulaire : seul élément du hero cerné d'orange --- */
.pv2-form {
  position: relative;
  overflow: visible;
  border: 2px solid var(--orange) !important;
  box-shadow:
    0 0 0 6px rgba(244, 113, 36, .12),
    0 24px 60px -12px rgba(2, 42, 106, .22);
  padding-top: 22px;
  scroll-margin-top: 24px;
}

.pv2-tag {
  position: absolute;
  top: -13px;
  left: 50%;
  transform: translateX(-50%);
  z-index: 2;
  white-space: nowrap;
  background: #1f9d55;
  color: #fff;
  font-size: 12px;
  font-weight: 800;
  letter-spacing: .02em;
  padding: 6px 14px;
  border-radius: 999px;
  box-shadow: 0 6px 14px -6px rgba(31, 157, 85, .7);
}

.pv2-tag::before {
  content: "";
  display: inline-block;
  width: 6px;
  height: 6px;
  margin: 0 7px 1px 0;
  border-radius: 50%;
  background: #fff;
  vertical-align: middle;
}

/* marge pour le badge qui dépasse au-dessus de la carte */
.pv2 .fc-col {
  padding-top: 6px;
}

@media (min-width: 900px) {
  .pv2 .hero-grid {
    grid-template-columns: 290px minmax(0, 1fr);
  }
}

/* ==========================================================================
   VARIANTE PV « formulaire centré » (pv-formulaire-centre.html)
   Texte centré en haut, un seul grand formulaire au milieu, sans colonne
   de gauche.
   ========================================================================== */
.pvh--center .pvh-grid {
  grid-template-columns: minmax(0, 1fr);
  grid-template-areas:
    "head"
    "form";
  row-gap: 30px;
}

.pvh--center .pvh-head {
  text-align: center;
  max-width: 860px;
  margin: 0 auto;
}

.pvh--center .pvh-sub {
  margin-left: auto;
  margin-right: auto;
}

.pvh--center .pvh-form {
  width: 100%;
  max-width: 760px;
  margin: 0 auto;
  padding: 30px 28px 10px;
}

.pvh--center .pvh-tag {
  left: 50%;
  transform: translateX(-50%);
  white-space: nowrap;
}

@media (max-width: 600px) {
  .pvh--center .pvh-grid {
    row-gap: 24px;
  }

  .pvh--center .pvh-form {
    padding: 24px 8px 4px;
  }
}

/* --- Variante centrée : pastilles d'aides, étapes et urgence sous le formulaire --- */
.pvh--center .pvh-grid {
  grid-template-areas:
    "head"
    "form"
    "after";
}

.pvc-after {
  grid-area: after;
  width: 100%;
  max-width: 760px;
  margin: 0 auto;
}

/* halo solaire discret derrière le haut de page */
.pvh--center {
  position: relative;
  overflow: hidden;
}

.pvh--center::before {
  content: "";
  position: absolute;
  top: -180px;
  right: -140px;
  width: 520px;
  height: 520px;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(255, 190, 90, .35), rgba(255, 190, 90, 0) 65%);
  pointer-events: none;
}

.pvh--center > * {
  position: relative;
}

.pvc-chips {
  list-style: none;
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 10px;
  margin: 18px 0 0;
  padding: 0;
}

.pvc-chips li {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  background: #fff;
  border: 1px solid #e3e8f2;
  border-radius: 999px;
  padding: 7px 14px 7px 7px;
  font-size: 13.5px;
  font-weight: 700;
  color: var(--navy);
  box-shadow: 0 4px 12px rgba(2, 42, 106, .06);
}

.pvc-chips i {
  width: 24px;
  height: 24px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: #fff1e6;
  color: var(--orange-d);
  font-style: normal;
  font-weight: 800;
  font-size: 12px;
}

.pvc-steps {
  list-style: none;
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 12px;
  margin: 0;
  padding: 0;
}

.pvc-steps li {
  display: flex;
  gap: 10px;
  align-items: flex-start;
  background: rgba(255, 255, 255, .7);
  border: 1px solid #e3e8f2;
  border-radius: 14px;
  padding: 14px;
}

.pvc-steps b {
  flex: none;
  width: 26px;
  height: 26px;
  border-radius: 50%;
  display: grid;
  place-items: center;
  background: var(--navy);
  color: #fff;
  font-size: 13px;
  font-weight: 800;
}

.pvc-steps span {
  font-size: 12.5px;
  line-height: 1.45;
  color: #5f6b85;
}

.pvc-steps strong {
  display: block;
  font-size: 13.5px;
  color: var(--navy);
  margin-bottom: 2px;
}

.pvc-alert {
  margin: 14px 0 0;
  padding: 11px 16px;
  border-radius: 12px;
  background: #fff7ed;
  border: 1px solid #fde2c8;
  color: #7c3d0a;
  font-size: 13px;
  line-height: 1.5;
  text-align: center;
}

.pvc-alert b {
  color: var(--orange-d);
}

@media (max-width: 700px) {
  .pvc-steps {
    grid-template-columns: 1fr;
    gap: 8px;
  }

  .pvc-steps li {
    padding: 10px 12px;
    align-items: center;
  }

  .pvc-steps strong {
    display: inline;
    margin: 0 4px 0 0;
  }
}

@media (max-width: 600px) {
  /* en mobile, les pastilles poussaient le formulaire sous la ligne de flottaison */
  .pvc-chips {
    display: none;
  }
}

/* --- Variante centrée : formulaire au format « rectangle » ---
   Plus large que haut, coins moins arrondis : il se lit comme un
   bandeau-outil plutôt que comme une carte. */
.pvh--center .pvh-form {
  max-width: 1040px;
  border-radius: 10px;
  padding: 26px 32px 6px;
  border-top: 4px solid var(--orange);
}

.pvh--center .pvh-form #form-slot {
  min-height: 0;
  padding-bottom: 20px;
}

.pvh--center .pvh-tag {
  top: -15px;
  border-radius: 6px;
}

.pvh--center .pvh-head,
.pvc-after {
  max-width: 1040px;
}

.pvc-steps li,
.pvc-alert {
  border-radius: 8px;
}

@media (max-width: 600px) {
  .pvh--center .pvh-form {
    padding: 24px 8px 4px;
  }
}

/* --- pv.html : les 3 étapes remplacent la photo dans la colonne de gauche --- */
.pvh-next-t {
  font-size: 11.5px;
  font-weight: 800;
  letter-spacing: .14em;
  text-transform: uppercase;
  color: #6b7d99;
  margin-bottom: 10px;
}

.pvh-next .pvc-steps {
  grid-template-columns: 1fr;
  gap: 8px;
}

.pvh-next .pvc-steps li {
  padding: 10px 12px;
  align-items: center;
  background: #fff;
}

.pvh-next .pvc-steps strong {
  display: inline;
  margin-right: 4px;
}

.pvh-next .pvc-alert {
  text-align: left;
}

.pvh-benefits {
  margin-bottom: 22px;
}

/* ==========================================================================
   HERO PV : fond quadrillé façon SaaS (pv.html et pv-formulaire-centre.html)
   Un quadrillage fin qui s'estompe vers les bords (masque radial) et deux
   halos de couleur : orange « soleil » en haut à droite, bleu de la marque
   en bas à gauche. Le tout derrière le contenu, sans toucher à la lisibilité.
   ========================================================================== */
.pvh {
  position: relative;
  overflow: hidden;
  isolation: isolate;
  background: linear-gradient(180deg, #f7f9fd 0%, #eef3fb 100%);
  border-bottom: 1px solid rgba(2, 42, 106, .06);
}

.pvh > * {
  position: relative;
}

/* quadrillage */
.pvh::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background-image:
    linear-gradient(rgba(2, 42, 106, .075) 1px, transparent 1px),
    linear-gradient(90deg, rgba(2, 42, 106, .075) 1px, transparent 1px);
  background-size: 44px 44px;
  background-position: center top;
  -webkit-mask-image: radial-gradient(ellipse 75% 70% at 50% 35%, #000 25%, transparent 80%);
  mask-image: radial-gradient(ellipse 75% 70% at 50% 35%, #000 25%, transparent 80%);
  pointer-events: none;
}

/* halos de couleur (remplace le halo seul de la variante centrée) */
.pvh::before,
.pvh--center::before {
  content: "";
  position: absolute;
  inset: 0;
  top: 0;
  right: 0;
  width: auto;
  height: auto;
  border-radius: 0;
  z-index: -2;
  background:
    radial-gradient(circle at 88% 8%, rgba(255, 176, 72, .30), transparent 32%),
    radial-gradient(circle at 6% 92%, rgba(59, 130, 246, .16), transparent 34%);
  pointer-events: none;
}

/* la carte formulaire se détache mieux sur le quadrillage */
.pvh .pvh-form {
  box-shadow: 0 30px 70px -20px rgba(2, 42, 106, .25), 0 0 0 1px #e3e8f2;
}

@media (max-width: 600px) {
  .pvh::after {
    background-size: 32px 32px;
  }
}

/* ==========================================================================
   HARMONISATION DES 3 LANDINGS PV (pv.html, pv-2.html, pv-formulaire-centre.html)
   ========================================================================== */

/* --- Quadrillage plus fin : cases de 28 px, trait plus clair ---
   Il devient une texture plutôt qu'un motif : on le perçoit sans qu'il
   accroche l'œil avant le titre et le formulaire. Étendu à pv-2.html. */
.pv2 {
  position: relative;
  overflow: hidden;
  isolation: isolate;
  background: linear-gradient(180deg, #f7f9fd 0%, #eef3fb 100%);
  border-bottom: 1px solid rgba(2, 42, 106, .06);
  padding-bottom: 40px !important;
}

.pv2 > * {
  position: relative;
}

.pvh::after,
.pv2::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -1;
  background-image:
    linear-gradient(rgba(2, 42, 106, .05) 1px, transparent 1px),
    linear-gradient(90deg, rgba(2, 42, 106, .05) 1px, transparent 1px);
  background-size: 28px 28px;
  background-position: center top;
  -webkit-mask-image: radial-gradient(ellipse 70% 65% at 50% 30%, #000 20%, transparent 78%);
  mask-image: radial-gradient(ellipse 70% 65% at 50% 30%, #000 20%, transparent 78%);
  pointer-events: none;
}

.pv2::before {
  content: "";
  position: absolute;
  inset: 0;
  z-index: -2;
  background:
    radial-gradient(circle at 88% 8%, rgba(255, 176, 72, .28), transparent 32%),
    radial-gradient(circle at 6% 92%, rgba(59, 130, 246, .14), transparent 34%);
  pointer-events: none;
}

@media (max-width: 600px) {
  .pvh::after,
  .pv2::after {
    background-size: 22px 22px;
  }
}

/* --- Formulaire mis en avant de la même façon sur les 3 pages ---
   Contour orange + halo orange : c'est l'élément le plus contrasté du
   haut de page, l'œil y va en premier (traitement repris de pv-2.html). */
.pvh .pvh-form {
  border: 2px solid var(--orange);
  box-shadow:
    0 0 0 6px rgba(244, 113, 36, .12),
    0 24px 60px -12px rgba(2, 42, 106, .22);
}

.pvh--center .pvh-form {
  border-top-width: 2px;
}

/* badge centré avec point blanc, identique à pv-2 */
.pvh .pvh-tag {
  left: 50%;
  transform: translateX(-50%);
  white-space: nowrap;
  font-weight: 800;
  letter-spacing: .02em;
  padding: 6px 14px;
  border-radius: 999px;
  box-shadow: 0 6px 14px -6px rgba(31, 157, 85, .7);
}

.pvh .pvh-tag::before {
  content: "";
  display: inline-block;
  width: 6px;
  height: 6px;
  margin: 0 7px 1px 0;
  border-radius: 50%;
  background: #fff;
  vertical-align: middle;
}

@media (max-width: 400px) {
  .pvh .pvh-tag {
    font-size: 11px;
    padding: 5px 11px;
  }
}

/* pv-2 : le formulaire démarre en haut de sa carte au lieu d'y être centré */
.pv2-form #form-slot {
  justify-content: flex-start;
}

/* --- pages légales : tableaux et bouton --- */
.legal-table {
  margin-top: 14px;
  overflow-x: auto;
  border: 1px solid #e3e8f2;
  border-radius: 12px;
  background: #fff;
}

.legal-table table {
  width: 100%;
  border-collapse: collapse;
  font-size: 13.5px;
  line-height: 1.55;
}

.legal-table th {
  text-align: left;
  background: #f3f6fc;
  color: var(--navy);
  font-weight: 800;
  padding: 10px 12px;
}

.legal-table td {
  padding: 10px 12px;
  color: #55637a;
  border-top: 1px solid #edf1f8;
  vertical-align: top;
}

.legal-btn {
  display: inline-block;
  color: #fff;
  font-weight: 800;
  border: 0;
  border-radius: 999px;
  padding: 12px 22px;
  cursor: pointer;
}

/* --- pv.html : en mobile, le formulaire directement sous le header ---
   La pastille, le H1 et le sous-titre restent dans le code (référencement,
   lecteurs d'écran, niveau de qualité Google Ads) mais ne s'affichent pas :
   le visiteur voit tout de suite la première question. */
@media (max-width: 767px) {
  .pvh--mform {
    padding-top: 22px;
  }

  .pvh--mform .pvh-head {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
  }

  .pvh--mform .pvh-grid {
    row-gap: 24px;
  }
}

/* --- Versions 2 (pv-2, pac-2, ite-2) : en mobile, le formulaire directement ---
   Titre et sous-titre masqués visuellement (lus par Google et les lecteurs
   d'écran), bandeau des dispositifs retiré : la première question apparaît
   juste sous le header. */
@media (max-width: 767px) {
  .pv2--mform h1,
  .pv2--mform .hero-sub {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    white-space: nowrap;
    border: 0;
  }

  .pv2--mform .pv2-trust {
    display: none;
  }

  .pv2--mform {
    padding-top: 22px !important;
  }

  .pv2--mform .hero-grid {
    margin-top: 0;
  }
}
