/* SANIPURE — landing « Votre demande de prise en charge » (appel manqué).
 * Interface d'application : formulaire sur une seule page (1.4.0), barre d'action collante.
 * Mobile d'abord, sans dépendance. Design System SANIPURE 2026 (noir, jaune, Manrope). */
@font-face { font-family: "Manrope"; font-weight: 200 800; font-display: swap; src: url("fonts/manrope-latin-var.woff2") format("woff2"); }

:root {
  --noir: #111111; --nuit: #0B0B0B; --anthracite: #1C1C1C; --jaune: #FFAE00; --jaune-clair: #FFC94D; --jaune-voile: #FFF7E3; --blanc: #FFFFFF;
  --fond: #F4F4F2; --ligne: #E4E4E0; --ligne-forte: #CFCFCA; --gris-400: #A9A9A5; --gris-600: #6B6B67; --gris-700: #4E4E4B;
  --erreur: #C9252C; --erreur-fond: #FDECEC; --ok: #1F7A4D;
  --police: "Manrope", system-ui, -apple-system, "Segoe UI", Roboto, sans-serif;
  --r-s: 12px; --r-m: 16px; --r-l: 22px; --r-xl: 28px; --pilule: 999px;
  --ease: cubic-bezier(.22, 1, .36, 1); --ressort: cubic-bezier(.34, 1.56, .64, 1);
  --ombre-carte: 0 1px 2px rgba(17,17,17,.04), 0 10px 30px -18px rgba(17,17,17,.28);
  --gouttiere: 20px;
}
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
body { margin: 0; font-family: var(--police); font-size: 16px; line-height: 1.55; color: var(--noir); background: var(--fond); -webkit-font-smoothing: antialiased; }
img, svg { display: block; max-width: 100%; }
button, input, textarea, select { font: inherit; color: inherit; }
a { color: inherit; }
:focus-visible { outline: 2px solid var(--noir); outline-offset: 2px; box-shadow: 0 0 0 5px var(--jaune); border-radius: 8px; }
.masque { position: absolute !important; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; }
[hidden] { display: none !important; }

/* =====================================================================
   ACCUEIL — écran d'ouverture (mobile) / panneau fixe (ordinateur)
   ===================================================================== */
.accueil { position: relative; isolation: isolate; overflow: hidden; overflow: clip; min-height: 100vh; min-height: 100svh; background: radial-gradient(75% 40% at 50% 28%, rgba(255,174,0,.2), rgba(255,174,0,0) 70%), var(--nuit); color: var(--blanc); display: flex; flex-direction: column; padding: 0 var(--gouttiere) calc(24px + env(safe-area-inset-bottom)); }
.accueil__photo { /* technicien détouré (fond transparent) sur halo jaune */
  position: absolute; z-index: -2; inset: 52px 0 auto 0; height: min(58svh, 520px);
  background-image: url("img/technicien-bras-croises.png");
  background-image: image-set(url("img/technicien-bras-croises.avif") type("image/avif"), url("img/technicien-bras-croises.webp") type("image/webp"), url("img/technicien-bras-croises.png") type("image/png"));
  background-size: auto 100%; background-position: 50% 0; background-repeat: no-repeat;
  -webkit-mask-image: linear-gradient(180deg, #000 0%, #000 60%, transparent 100%); mask-image: linear-gradient(180deg, #000 0%, #000 60%, transparent 100%);
  animation: photo-entree 1.2s var(--ease) both;
}
.accueil::before { content: ""; position: absolute; z-index: -1; inset: 0; background: linear-gradient(180deg, rgba(11,11,11,.6) 0, rgba(11,11,11,0) 96px); }
/* Fine trame : ambiance « protection » */
.accueil::after { content: ""; position: absolute; z-index: -1; inset: 0; pointer-events: none; opacity: .5;
  background-image: linear-gradient(rgba(255,255,255,.035) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,.035) 1px, transparent 1px);
  background-size: 28px 28px; -webkit-mask-image: radial-gradient(90% 60% at 70% 25%, #000 20%, transparent 75%); mask-image: radial-gradient(90% 60% at 70% 25%, #000 20%, transparent 75%); }

.accueil__haut { display: flex; align-items: center; justify-content: space-between; gap: 12px; height: 64px; padding-top: env(safe-area-inset-top); }
.accueil__logo { width: 124px; height: auto; }
.accueil__appel { display: inline-flex; align-items: center; gap: 8px; min-height: 40px; padding: 0 14px 0 10px; border-radius: var(--pilule); background: rgba(17,17,17,.55); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); box-shadow: inset 0 0 0 1px rgba(255,255,255,.16); text-decoration: none; font-size: 13px; font-weight: 700; white-space: nowrap; }
.accueil__appel svg { width: 16px; height: 16px; color: var(--jaune); }

.accueil__corps { margin-top: auto; padding-top: clamp(170px, 38svh, 380px); display: flex; flex-direction: column; animation: monte .8s .1s var(--ease) both; }
.accueil h1 { margin: 14px 0 0; font-size: clamp(2rem, 1.55rem + 2.2vw, 2.6rem); line-height: 1.06; font-weight: 800; letter-spacing: -.035em; max-width: 13ch; text-wrap: balance; }
.accueil h1 span { color: var(--jaune); }
.accueil__rassurance { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px 14px; margin: 12px 0 0; font-size: 13px; font-weight: 650; color: rgba(255,255,255,.74); }
.accueil__rassurance span::before { content: "✓"; margin-right: 5px; color: var(--jaune); font-weight: 900; }
.accueil__intro { margin: 12px 0 0; max-width: 34ch; color: rgba(255,255,255,.74); font-size: 15.5px; line-height: 1.55; }

.parcours { display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px; margin: 20px 0 0; padding: 0; list-style: none; }
.parcours li { display: flex; flex-direction: column; gap: 8px; padding: 10px 10px 11px; border-radius: var(--r-m); background: rgba(255,255,255,.06); box-shadow: inset 0 0 0 1px rgba(255,255,255,.1); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); transition: background-color .3s, box-shadow .3s; }
.parcours__num { display: grid; place-items: center; width: 24px; height: 24px; border-radius: 50%; font-size: 12px; font-weight: 800; color: rgba(255,255,255,.8); box-shadow: inset 0 0 0 1.5px rgba(255,255,255,.35); transition: background-color .3s, color .3s, box-shadow .3s; }
.parcours__txt b { display: block; font-size: 12.5px; line-height: 1.25; font-weight: 750; }
.parcours__txt small { display: none; }
.parcours li[aria-current="step"] .parcours__num, .parcours li.est-faite .parcours__num { background: var(--jaune); color: var(--noir); box-shadow: none; }
.parcours li.est-faite .parcours__num { font-size: 0; }
.parcours__num { position: relative; }
.parcours li.est-faite .parcours__num::after { content: ""; position: absolute; left: 50%; top: 50%; width: 9px; height: 5px; border: solid var(--noir); border-width: 0 0 2px 2px; transform: translate(-50%, -70%) rotate(-45deg); }

.accueil__action { margin-top: 12px; padding-top: 10px; position: sticky; bottom: calc(12px + env(safe-area-inset-bottom)); z-index: 3; background: linear-gradient(180deg, rgba(11,11,11,0), var(--nuit) 45%); } /* bouton toujours visible sur les petits écrans */
.bouton--accueil { width: 100%; }

/* Mobile : l'accueil reste épuré, les étapes servent de repère sur ordinateur seulement */
@media (max-width: 1023px) { .parcours { display: none; } }

/* =====================================================================
   VOLET — barre d'application, écrans, barre d'action
   ===================================================================== */
.volet { min-height: 100vh; min-height: 100svh; display: flex; flex-direction: column; background: var(--fond); }
/* Mobile : l'accueil d'abord, puis le formulaire en plein écran */
@media (max-width: 1023px) {
  .app:not(.est-lance) .volet { display: none; }
  .app.est-lance .accueil { display: none; }
}

.barre-app { position: sticky; top: 0; z-index: 40; background: rgba(17,17,17,.94); -webkit-backdrop-filter: blur(16px) saturate(140%); backdrop-filter: blur(16px) saturate(140%); color: var(--blanc); padding: env(safe-area-inset-top) 12px 10px; }
.barre-app__ligne { display: flex; align-items: center; gap: 8px; height: 56px; }
.barre-app__retour, .barre-app__appel { flex: none; display: grid; place-items: center; width: 42px; height: 42px; border: 0; border-radius: 50%; background: rgba(255,255,255,.08); color: var(--blanc); cursor: pointer; transition: background-color .2s, transform .15s var(--ease); -webkit-tap-highlight-color: transparent; }
.barre-app__retour:hover, .barre-app__appel:hover { background: rgba(255,255,255,.16); }
.barre-app__retour:active, .barre-app__appel:active { transform: scale(.94); }
.barre-app__retour svg, .barre-app__appel svg { width: 20px; height: 20px; }
.barre-app__appel { margin-left: auto; color: var(--jaune); box-shadow: inset 0 0 0 1.5px rgba(255,174,0,.5); background: transparent; }
.barre-app__logo { width: 112px; height: auto; margin-left: 4px; }
.progression__q { white-space: nowrap; color: rgba(255,255,255,.62); }

.progression { display: grid; grid-template-columns: repeat(2, 1fr); gap: 5px; margin: 2px 4px 0; }
.progression span { height: 4px; border-radius: 4px; background: rgba(255,255,255,.16); overflow: hidden; position: relative; }
.progression span::after { content: ""; position: absolute; inset: 0; border-radius: inherit; background: linear-gradient(90deg, var(--jaune), var(--jaune-clair)); transform: scaleX(var(--p, 0)); transform-origin: left; transition: transform .6s var(--ease); }
.progression__texte { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin: 8px 4px 0; font-size: 12.5px; font-weight: 600; color: rgba(255,255,255,.7); }
.progression__texte b { color: var(--blanc); }

.ecrans { flex: 1; display: flex; flex-direction: column; width: 100%; max-width: 640px; margin-inline: auto; padding: 22px var(--gouttiere) 8px; }

/* Écran : une question à la fois, transition directionnelle */
.ecran { outline: none; }
.ecran.entre-avant { animation: glisse-avant .45s var(--ease) both; }
.ecran.entre-arriere { animation: glisse-arriere .45s var(--ease) both; }
.ecran > h2, .feuille-tete > h2, .confirmation h2 { margin: 0; font-size: clamp(1.5rem, 1.3rem + 1vw, 1.875rem); line-height: 1.14; font-weight: 800; letter-spacing: -.03em; text-wrap: balance; outline: none; }
.ecran > h2:focus-visible, .feuille-tete > h2:focus-visible, .confirmation h2:focus-visible { outline: none; box-shadow: none; } /* focus posé pour les lecteurs d'écran, sans cadre visible */
.aide { margin: 8px 0 0; color: var(--gris-600); font-size: 15px; }
.question { margin: 22px 0 0; padding: 0; border: 0; min-width: 0; }
.question legend, .question .libelle, .champ label { display: block; padding: 0; margin-bottom: 10px; font-size: 1rem; font-weight: 750; letter-spacing: -.01em; }
.facultatif { display: inline-block; margin-left: 4px; font-size: 12.5px; font-weight: 600; color: var(--gris-600); letter-spacing: 0; }
.groupe { margin-top: 4px; animation: apparait .4s var(--ease) both; }
.groupe--accent { margin-top: 18px; padding: 16px; border-radius: var(--r-m); background: var(--blanc); box-shadow: var(--ombre-carte), inset 3px 0 0 var(--jaune); }
.groupe--accent .champ label { margin-bottom: 8px; }
/* Écran de devis en 3 parties (1.2.0) */
.partie { margin-top: 30px; padding-top: 22px; border-top: 1px solid var(--ligne); }
.partie:first-of-type { margin-top: 22px; }
.partie__titre { display: flex; align-items: center; gap: 10px; margin: 0; font-size: 1.125rem; font-weight: 800; letter-spacing: -.02em; }
.partie__num { flex: none; display: grid; place-items: center; width: 28px; height: 28px; border-radius: 50%; background: var(--noir); color: var(--jaune); font-size: 14px; font-weight: 800; }
.partie__titre + .question { margin-top: 16px; }
.insecable { white-space: nowrap; }

/* ---------- Tuiles (choix principal avec icône) ---------- */
.tuiles { display: grid; gap: 10px; grid-template-columns: repeat(2, minmax(0, 1fr)); }
.tuile { position: relative; display: flex; flex-direction: column; align-items: flex-start; justify-content: space-between; gap: 12px; min-height: 108px; padding: 14px; border-radius: var(--r-l); background: var(--blanc); box-shadow: var(--ombre-carte), inset 0 0 0 1.5px transparent; cursor: pointer; transition: box-shadow .2s, transform .2s var(--ease), background-color .2s; -webkit-tap-highlight-color: transparent; animation: apparait .5s var(--ease) both; }
.tuiles .tuile:nth-child(2) { animation-delay: .03s; } .tuiles .tuile:nth-child(3) { animation-delay: .06s; } .tuiles .tuile:nth-child(4) { animation-delay: .09s; }
.tuiles .tuile:nth-child(5) { animation-delay: .12s; } .tuiles .tuile:nth-child(6) { animation-delay: .15s; } .tuiles .tuile:nth-child(7) { animation-delay: .18s; } .tuiles .tuile:nth-child(8) { animation-delay: .21s; }
.tuile:hover { transform: translateY(-1px); box-shadow: 0 2px 4px rgba(17,17,17,.05), 0 16px 34px -18px rgba(17,17,17,.4), inset 0 0 0 1.5px var(--ligne-forte); }
.tuile:active { transform: scale(.97); }
.tuile input, .ligne-choix input, .pastille input { position: absolute; opacity: 0; width: 1px; height: 1px; pointer-events: none; }
.tuile .ico { display: grid; place-items: center; width: 44px; height: 44px; border-radius: 14px; background: var(--fond); color: var(--noir); transition: background-color .25s, color .25s, transform .35s var(--ressort); }
.tuile .ico svg { width: 24px; height: 24px; }
.tuile__txt { font-size: 15px; font-weight: 720; line-height: 1.25; letter-spacing: -.01em; padding-right: 4px; }
.tuile__txt small { display: block; margin-top: 3px; font-size: 12.5px; font-weight: 550; color: var(--gris-600); letter-spacing: 0; }
.tuile input[type=checkbox] ~ .coche { border-radius: 7px; } /* cases à cocher : choix multiples */
.coche { position: absolute; top: 12px; right: 12px; width: 22px; height: 22px; border-radius: 50%; box-shadow: inset 0 0 0 1.5px var(--ligne-forte); display: grid; place-items: center; transition: background-color .2s, box-shadow .2s; }
.tuile:has(input:checked) { background: var(--jaune-voile); box-shadow: 0 14px 30px -20px rgba(255,174,0,.9), inset 0 0 0 2px var(--noir); }
.tuile:has(input:checked) .ico { background: var(--noir); color: var(--jaune); transform: scale(1.06); }
/* Icônes réalistes des nuisibles (1.3.2 : images Canva et images fournies par l'exploitant, fond blanc) : fondues dans la pastille (multiply), plus grandes */
.tuile .ico--photo { width: 56px; height: 56px; background: var(--fond) var(--img) center / 100% no-repeat; background-blend-mode: multiply; }
.tuile:has(input:checked) .ico--photo { background: var(--jaune-voile) var(--img) center / 100% no-repeat; background-blend-mode: multiply; }
.ico--punaises { --img: url(img/nuisibles/punaises.webp); }
.ico--cafards { --img: url(img/nuisibles/cafards.webp); }
.ico--rats { --img: url(img/nuisibles/rats.webp); }
.ico--souris { --img: url(img/nuisibles/souris.webp); }
.ico--fourmis { --img: url(img/nuisibles/fourmis.webp); }
.ico--puces { --img: url(img/nuisibles/puces.webp); }
.ico--anthrenes { --img: url(img/nuisibles/anthrenes.webp); }
.ico--poissons_argent { --img: url(img/nuisibles/poissons-argent.webp); }
.ico--desinfection { --img: url(img/nuisibles/desinfection.webp); }
.ico--mites { --img: url(img/nuisibles/mites.webp); } /* 1.4.1 : papillon de nuit recadré dans l'image d'origine « autres » */
.ico--contrat_annuel { --img: url(img/nuisibles/contrat-annuel.webp); }
.ico--autres { --img: url(img/nuisibles/autres.webp); }
:is(.tuile, .ligne-choix):has(input:checked) .coche { background: var(--noir); box-shadow: none; animation: pop .45s var(--ressort); }
:is(.tuile, .ligne-choix):has(input:checked) .coche::after { content: ""; width: 10px; height: 5.5px; border: solid var(--jaune); border-width: 0 0 2.2px 2.2px; transform: translateY(-1px) rotate(-45deg); }
:is(.tuile, .ligne-choix, .pastille):has(input:focus-visible) { outline: 2px solid var(--noir); outline-offset: 2px; }
.tuiles--3 { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; }
.tuiles--2 { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.tuile--compacte { min-height: 96px; padding: 12px 10px; gap: 10px; }
.tuile--compacte .ico { width: 38px; height: 38px; border-radius: 12px; }
.tuile--compacte .ico svg { width: 21px; height: 21px; }
.tuile--compacte .tuile__txt { font-size: 13.5px; }
.tuile--compacte .coche { top: 10px; right: 10px; width: 20px; height: 20px; }

/* ---------- Lignes (choix unique en liste) ---------- */
.lignes { display: grid; gap: 8px; }
.ligne-choix { position: relative; display: flex; align-items: center; min-height: 58px; padding: 14px 52px 14px 18px; border-radius: var(--r-m); background: var(--blanc); box-shadow: var(--ombre-carte); font-size: 15.5px; font-weight: 680; cursor: pointer; transition: box-shadow .2s, transform .2s var(--ease), background-color .2s; -webkit-tap-highlight-color: transparent; animation: apparait .45s var(--ease) both; }
.lignes .ligne-choix:nth-child(2) { animation-delay: .03s; } .lignes .ligne-choix:nth-child(3) { animation-delay: .06s; } .lignes .ligne-choix:nth-child(4) { animation-delay: .09s; } .lignes .ligne-choix:nth-child(5) { animation-delay: .12s; }
.ligne-choix:hover { box-shadow: 0 2px 4px rgba(17,17,17,.05), 0 14px 30px -18px rgba(17,17,17,.4), inset 0 0 0 1.5px var(--ligne-forte); }
.ligne-choix:active { transform: scale(.985); }
.ligne-choix .coche { top: 50%; right: 16px; transform: translateY(-50%); }
.ligne-choix:has(input:checked) { background: var(--jaune-voile); box-shadow: inset 0 0 0 2px var(--noir); }

/* ---------- Pastilles (précisions, choix secondaires) ---------- */
.pastilles { display: flex; flex-wrap: wrap; gap: 8px; }
.pastille { position: relative; display: inline-flex; align-items: center; min-height: 46px; padding: 10px 16px; border-radius: var(--pilule); background: var(--blanc); box-shadow: inset 0 0 0 1.5px var(--ligne); font-size: 14.5px; font-weight: 650; line-height: 1.25; cursor: pointer; transition: box-shadow .2s, background-color .2s, color .2s, transform .15s var(--ease); -webkit-tap-highlight-color: transparent; }
.pastille:hover { box-shadow: inset 0 0 0 1.5px var(--gris-600); }
.pastille:active { transform: scale(.96); }
.pastille:has(input:checked) { background: var(--noir); color: var(--blanc); box-shadow: inset 0 0 0 1.5px var(--noir); }
.pastille--multi span::before { content: ""; display: inline-grid; place-items: center; width: 16px; height: 16px; margin-right: 8px; border-radius: 5px; box-shadow: inset 0 0 0 1.5px var(--ligne-forte); vertical-align: -3px; font-size: 11px; font-weight: 900; line-height: 1; }
.pastille--multi:has(input:checked) span::before { content: "✓"; background: var(--jaune); color: var(--noir); box-shadow: none; }
.pastille[aria-pressed="true"] { background: var(--noir); color: var(--blanc); box-shadow: inset 0 0 0 1.5px var(--noir); }
button.pastille { border: 0; font: inherit; font-size: 14.5px; font-weight: 650; color: var(--noir); }
.pastilles--suite { margin-top: 12px; }

/* ---------- Champs ---------- */
.champs { display: grid; gap: 16px; }
.champs--2 { grid-template-columns: 1fr; }
.champs--cp { grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); gap: 10px; align-items: end; }
.champ { display: grid; gap: 0; min-width: 0; }
.champ label { margin-bottom: 8px; font-size: 14.5px; }
.champ input, .champ textarea { width: 100%; min-height: 56px; padding: 15px 16px; border: 0; border-radius: var(--r-m); background: var(--blanc); box-shadow: inset 0 0 0 1.5px var(--ligne-forte); font-size: 17px; transition: box-shadow .2s, background-color .2s; -webkit-appearance: none; appearance: none; }
.champ textarea { min-height: 128px; resize: vertical; line-height: 1.5; }
.champ input::placeholder, .champ textarea::placeholder { color: #8E8E89; }
.champ input:hover, .champ textarea:hover { box-shadow: inset 0 0 0 1.5px var(--gris-600); }
.champ input:focus, .champ textarea:focus { outline: none; box-shadow: inset 0 0 0 2px var(--noir), 0 0 0 4px rgba(255,174,0,.45); }
.champ--erreur input, .champ--erreur textarea { box-shadow: inset 0 0 0 2px var(--erreur); background: var(--erreur-fond); }
.champ--ok input { box-shadow: inset 0 0 0 1.5px var(--ok); }
.champ--etroit { max-width: 200px; }
.champ--suite { margin-top: 16px; }
.saisie-unite { position: relative; }
.saisie-unite input { padding-right: 96px; }
.saisie-unite .unite { position: absolute; right: 16px; top: 50%; transform: translateY(-50%); font-size: 15px; font-weight: 700; color: var(--gris-600); pointer-events: none; }
.saisie-unite--grande input { min-height: 72px; font-size: 30px; font-weight: 750; letter-spacing: -.02em; padding-right: 72px; }
.saisie-unite--grande input::placeholder { font-weight: 600; color: #B5B5B0; }
.saisie-unite--grande .unite { font-size: 22px; color: var(--noir); }
.message-erreur { display: flex; gap: 6px; align-items: flex-start; margin: 8px 0 0; font-size: 14px; font-weight: 650; color: var(--erreur); }
.message-erreur::before { content: "!"; flex: none; display: grid; place-items: center; width: 18px; height: 18px; border-radius: 50%; background: var(--erreur); color: var(--blanc); font-size: 12px; font-weight: 800; margin-top: 1px; }
.erreur-groupe { margin-top: 10px; }
.secoue { animation: secoue .42s var(--ease); }
.note-confiance { display: flex; gap: 10px; align-items: flex-start; margin: 20px 0 0; font-size: 13px; color: var(--gris-600); line-height: 1.45; }
.note-confiance svg { flex: none; width: 16px; height: 16px; margin-top: 1px; color: var(--noir); }
.lien-discret { background: none; border: 0; padding: 8px 0; color: var(--noir); font-weight: 700; font-size: 14px; text-decoration: underline; text-underline-offset: 3px; cursor: pointer; min-height: 44px; }

/* ---------- Photos ---------- */
.photos__zone { display: flex; align-items: center; gap: 14px; padding: 14px 16px; border-radius: var(--r-l); background: var(--blanc); box-shadow: var(--ombre-carte), inset 0 0 0 1.5px var(--ligne); border: 0; cursor: pointer; min-height: 72px; font-weight: 720; transition: box-shadow .2s; }
.photos__zone:hover { box-shadow: var(--ombre-carte), inset 0 0 0 1.5px var(--gris-600); }
.photos__zone:focus-within { box-shadow: inset 0 0 0 2px var(--noir), 0 0 0 4px rgba(255,174,0,.45); }
.photos__ico { flex: none; display: grid; place-items: center; width: 44px; height: 44px; border-radius: 14px; background: var(--noir); color: var(--jaune); }
.photos__ico svg { width: 22px; height: 22px; }
.photos__zone small { display: block; font-weight: 550; color: var(--gris-600); font-size: 13px; }
.photos__liste { display: grid; grid-template-columns: repeat(auto-fill, minmax(84px, 1fr)); gap: 8px; margin: 10px 0 0; padding: 0; list-style: none; }
.photos__liste:empty { display: none; }
.photos__liste li { position: relative; aspect-ratio: 1; border-radius: var(--r-s); overflow: hidden; background: var(--ligne); animation: pop .4s var(--ressort); }
.photos__liste img { width: 100%; height: 100%; object-fit: cover; }
.photos__liste button { position: absolute; top: 4px; right: 4px; width: 32px; height: 32px; border: 0; border-radius: 50%; background: rgba(17,17,17,.8); color: var(--blanc); font-size: 18px; line-height: 1; cursor: pointer; display: grid; place-items: center; }
.photos__etat { font-size: 13px; color: var(--gris-600); margin: 6px 0 0; }
.photos__etat:empty { display: none; }

/* ---------- Récapitulatif ---------- */
.recap { margin: 0; padding: 4px 16px; border-radius: var(--r-l); background: var(--blanc); box-shadow: var(--ombre-carte); }
.recap__ligne { display: grid; grid-template-columns: 1fr auto; gap: 2px 12px; align-items: center; padding: 12px 0; border-top: 1px solid var(--ligne); }
.recap__ligne:first-child { border-top: 0; }
.recap dt { grid-column: 1; font-size: 12.5px; font-weight: 650; color: var(--gris-600); }
.recap dd { grid-column: 1; margin: 0; font-size: 15px; font-weight: 700; line-height: 1.35; overflow-wrap: anywhere; }
.recap__modifier { grid-column: 2; grid-row: 1 / span 2; border: 0; background: var(--fond); border-radius: var(--pilule); padding: 8px 12px; min-height: 36px; font-size: 13px; font-weight: 750; cursor: pointer; transition: background-color .2s; }
.recap__modifier:hover { background: var(--ligne); }

/* ---------- Information RGPD ---------- */
.rgpd { margin: 22px 0 0; font-size: 12.5px; color: var(--gris-600); line-height: 1.5; }
.rgpd a { color: var(--noir); }

/* ---------- Barre d'action (collée en bas) ---------- */
.barre { position: sticky; bottom: 0; z-index: 30; padding: 18px var(--gouttiere) calc(12px + env(safe-area-inset-bottom)); background: linear-gradient(180deg, rgba(244,244,242,0) 0, var(--fond) 18px); }
.barre__in { max-width: 584px; margin-inline: auto; display: flex; gap: 10px; }
.bouton { position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 12px; min-height: 58px; padding: 0 24px; border: 0; border-radius: var(--pilule); background: var(--jaune); color: var(--noir); font-weight: 800; font-size: 17px; letter-spacing: -.01em; cursor: pointer; transition: transform .15s var(--ease), box-shadow .25s, opacity .2s; flex: 1; box-shadow: 0 12px 28px -14px rgba(255,174,0,.95); overflow: hidden; white-space: nowrap; -webkit-tap-highlight-color: transparent; }
.bouton::after { content: ""; position: absolute; inset: 0; background: linear-gradient(110deg, transparent 30%, rgba(255,255,255,.45) 50%, transparent 70%); transform: translateX(-120%); }
.bouton.est-pret::after { animation: reflet 1.1s var(--ease) .1s; }
.bouton:hover { box-shadow: 0 16px 34px -14px rgba(255,174,0,1); }
.bouton:active { transform: scale(.98); }
.bouton[disabled] { opacity: .7; cursor: progress; }
.bouton .fleche { display: grid; place-items: center; width: 34px; height: 34px; border-radius: 50%; background: var(--noir); color: var(--jaune); transition: transform .3s var(--ressort); }
.bouton.est-pret .fleche { transform: translateX(3px); }
.bouton--retour { flex: none; gap: 6px; padding: 0 20px 0 14px; background: var(--blanc); color: var(--noir); box-shadow: inset 0 0 0 1.5px var(--ligne-forte); font-size: 15px; font-weight: 750; }
.bouton--retour::after { display: none; }
.bouton--retour:hover { box-shadow: inset 0 0 0 1.5px var(--noir); }
.bouton--retour svg { flex: none; }
@media (max-width: 419px) { .bouton--retour { width: 58px; padding: 0; } .bouton--retour span { display: none; } }
@media (max-width: 359px) {
  .barre__in { gap: 8px; }
  .barre .bouton:not(.bouton--retour) { font-size: 15px; padding: 0 12px; gap: 6px; }
  .barre .bouton .fleche { width: 28px; height: 28px; }
  .bouton--retour { width: 48px; }
}
.chargement { width: 18px; height: 18px; border-radius: 50%; border: 2.5px solid rgba(255,174,0,.3); border-top-color: var(--jaune); animation: tourne .8s linear infinite; }

/* ---------- Alertes ---------- */
.alerte { display: flex; gap: 12px; margin-top: 18px; padding: 14px 16px; border-radius: var(--r-m); background: var(--erreur-fond); color: #7A1015; font-size: 15px; box-shadow: inset 0 0 0 1px rgba(201,37,44,.25); }
.alerte--info { background: #FFF6E0; color: #5A3D00; box-shadow: inset 0 0 0 1px rgba(255,174,0,.45); }
.alerte b { display: block; }
.alerte a { color: inherit; font-weight: 700; }
.alerte__action { margin: 6px 0 0; }
.alerte a[href^="tel:"] { display: inline-block; padding: 6px 0; white-space: nowrap; }
.alerte .lien-discret { color: inherit; font-size: 15px; }

/* ---------- Confirmation ---------- */
.confirmation { animation: monte .6s var(--ease) both; }
/* 1.6.2 (30/10/2026) : validation verte façon déverrouillage Face ID (iPhone), sur fond blanc, sans le visage :
   l'anneau puis la coche se tracent en vert, avec un léger rebond et une onde verte */
.confirmation__badge { --vert: #34C759; position: relative; width: 76px; height: 76px; margin: 4px 0 18px; border-radius: 50%; background: var(--blanc); color: var(--vert); box-shadow: 0 14px 34px -14px rgba(17,17,17,.3), inset 0 0 0 1px rgba(17,17,17,.06); animation: badge-ok .6s .7s var(--ressort) both; }
.confirmation__badge::after { content: ""; position: absolute; inset: 0; border-radius: 50%; box-shadow: 0 0 0 2px var(--vert); opacity: 0; pointer-events: none; animation: onde-verte 1s .75s var(--ease) forwards; }
.confirmation__badge svg { width: 100%; height: 100%; overflow: visible; }
.confirmation__badge .anneau { stroke: var(--vert); stroke-dasharray: 183; stroke-dashoffset: 183; animation: trace .6s .15s var(--ease) forwards; }
.confirmation__badge .trait { stroke: var(--vert); stroke-dasharray: 40; stroke-dashoffset: 40; animation: trace .4s .6s var(--ease) forwards; }
@keyframes badge-ok { 0% { transform: scale(1); box-shadow: 0 14px 34px -14px rgba(17,17,17,.3), inset 0 0 0 1px rgba(17,17,17,.06); } 45% { transform: scale(1.08); } 100% { transform: scale(1); box-shadow: 0 16px 36px -14px rgba(52,199,89,.5), inset 0 0 0 1px rgba(17,17,17,.06); } }
@keyframes onde-verte { 0% { opacity: .6; transform: scale(1); } 100% { opacity: 0; transform: scale(1.55); } }
.suite { margin: 22px 0 0; padding: 0; list-style: none; counter-reset: s; }
.suite li { counter-increment: s; position: relative; padding: 0 0 18px 44px; }
.suite li::before { content: counter(s); position: absolute; left: 0; top: 0; display: grid; place-items: center; width: 30px; height: 30px; border-radius: 50%; background: var(--blanc); box-shadow: inset 0 0 0 1.5px var(--ligne-forte); font-size: 13px; font-weight: 800; }
.suite li::after { content: ""; position: absolute; left: 14.25px; top: 34px; bottom: 4px; width: 1.5px; background: var(--ligne-forte); }
.suite li:last-child::after { display: none; }
.suite li.est-faite::before { content: "✓"; background: var(--jaune); box-shadow: none; }
.suite b { display: block; font-size: 15px; }
.suite span { display: block; font-size: 14px; color: var(--gris-600); }
.confirmation .recap { margin-top: 6px; }
.complement { margin-top: 18px; }
.complement .photos { margin-top: 12px; }
.complement__envoi { margin: 14px 0 0; display: flex; }
.confirmation__urgence { margin: 18px 0 0; font-size: 14px; color: var(--gris-600); }
.confirmation__urgence a { color: var(--noir); font-weight: 750; }

.pied { margin: auto 0 0; padding-top: 32px; text-align: center; font-size: 12.5px; color: var(--gris-600); }
.pied a { color: var(--noir); }

/* ---------- Animations ---------- */
@keyframes glisse-avant { from { opacity: 0; transform: translateX(28px); } to { opacity: 1; transform: none; } }
@keyframes glisse-arriere { from { opacity: 0; transform: translateX(-28px); } to { opacity: 1; transform: none; } }
@keyframes apparait { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
@keyframes monte { from { opacity: 0; transform: translateY(18px); } to { opacity: 1; transform: none; } }
@keyframes photo-entree { from { opacity: 0; transform: scale(1.04); } to { opacity: 1; transform: none; } }
@keyframes pop { 0% { transform: scale(.6); } 100% { transform: scale(1); } }
@keyframes onde { 0% { opacity: .7; transform: scale(.6); } 100% { opacity: 0; transform: scale(1.9); } }
@keyframes secoue { 0%, 100% { transform: none; } 20% { transform: translateX(-6px); } 40% { transform: translateX(5px); } 60% { transform: translateX(-3px); } 80% { transform: translateX(2px); } }
@keyframes reflet { to { transform: translateX(120%); } }
@keyframes trace { to { stroke-dashoffset: 0; } }
@keyframes tourne { to { transform: rotate(360deg); } }
.ligne-choix .coche { animation: none; }
.ligne-choix:has(input:checked) .coche { animation: pop-centre .45s var(--ressort); }
@keyframes pop-centre { 0% { transform: translateY(-50%) scale(.6); } 100% { transform: translateY(-50%) scale(1); } }
@media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation-duration: .01ms !important; animation-delay: 0s !important; transition-duration: .01ms !important; } }

/* ---------- Petits écrans ---------- */
@media (max-width: 359px) {
  :root { --gouttiere: 16px; }
  .tuiles { gap: 8px; }
  .tuile { min-height: 100px; padding: 12px; }
  .tuile__txt { font-size: 14px; }
  .tuiles--3 { grid-template-columns: 1fr; }
  .tuiles--3 .tuile--compacte { flex-direction: row; align-items: center; justify-content: flex-start; min-height: 58px; padding-right: 44px; }
  .tuiles--3 .tuile--compacte .coche { top: 50%; transform: translateY(-50%); }
  .tuiles--3 .tuile--compacte:has(input:checked) .coche { animation-name: pop-centre; }
  .parcours__txt b { font-size: 11.5px; }
  .barre-app__logo { width: 100px; }
}
/* Téléphones peu hauts (iPhone SE…) : le bouton de l'accueil reste visible sans défiler */
@media (max-width: 1023px) and (max-height: 740px) {
  .accueil__corps { padding-top: clamp(130px, 30svh, 300px); }
  .accueil h1 { font-size: 1.85rem; }
  .parcours { margin-top: 16px; }
  .accueil__action { margin-top: 8px; }
}
@media (min-width: 560px) {
  :root { --gouttiere: 28px; }
  .champs--2 { grid-template-columns: 1fr 1fr; }
  .tuiles:not(.tuiles--3):not(.tuiles--2) { grid-template-columns: repeat(auto-fill, minmax(150px, 1fr)); }
  }

/* =====================================================================
   ORDINATEUR : panneau de marque à gauche, application à droite
   ===================================================================== */
@media (min-width: 1024px) {
  body { background: var(--nuit); }
  .app { display: grid; grid-template-columns: minmax(400px, 5fr) 7fr; }
  .accueil { position: sticky; top: 0; height: 100vh; min-height: 0; padding: 0 48px 36px; }
  .accueil { background: radial-gradient(60% 40% at 72% 78%, rgba(255,174,0,.18), rgba(255,174,0,0) 70%), var(--nuit); }
  .accueil__photo { inset: auto 0 0 auto; width: 100%; height: calc(100% - 480px); min-height: 280px; background-position: 100% 100%; -webkit-mask-image: linear-gradient(90deg, transparent 0%, #000 38%); mask-image: linear-gradient(90deg, transparent 0%, #000 38%); }
  .accueil::before { background: linear-gradient(90deg, rgba(11,11,11,.88) 0%, rgba(11,11,11,.4) 45%, rgba(11,11,11,0) 70%); }
    .accueil__haut { height: 88px; }
  .accueil__logo { width: 136px; }
  .accueil__corps { margin-top: 0; padding-top: 7vh; flex: 1; }
  .accueil h1 { font-size: clamp(2.25rem, 1.2rem + 1.9vw, 3rem); max-width: 11ch; }
  .accueil__intro { max-width: 26ch; font-size: 16px; }
  .parcours { grid-template-columns: 1fr; gap: 0; margin-top: 34px; max-width: 290px; }
  .parcours li { flex-direction: row; align-items: center; gap: 14px; padding: 12px 0; border-radius: 0; background: none; box-shadow: none; -webkit-backdrop-filter: none; backdrop-filter: none; border-top: 1px solid rgba(255,255,255,.1); }
  .parcours li:last-child { border-bottom: 1px solid rgba(255,255,255,.1); }
  .parcours__num { flex: none; width: 30px; height: 30px; font-size: 13px; }
  .parcours__txt b { font-size: 15px; color: rgba(255,255,255,.7); transition: color .3s; }
  .parcours__txt small { display: block; font-size: 12.5px; color: rgba(255,255,255,.5); }
  .parcours li[aria-current="step"] .parcours__txt b, .parcours li.est-faite .parcours__txt b { color: var(--blanc); }
  .accueil__action { display: none; }
  .accueil__rassurance { justify-content: flex-start; margin-top: 22px; font-size: 13.5px; }

  .volet { border-radius: 30px 0 0 30px; min-height: 100vh; }
  .barre-app { background: rgba(244,244,242,.88); color: var(--noir); padding: 18px 40px 14px; border-radius: 30px 0 0 0; }
  .barre-app__ligne { display: none; }
  .progression__q { color: var(--gris-600); }
  .barre-app__logo, .barre-app__appel { display: none; }
  .barre-app__retour { background: var(--blanc); color: var(--noir); box-shadow: inset 0 0 0 1.5px var(--ligne); }
  .barre-app__retour:hover { background: var(--blanc); box-shadow: inset 0 0 0 1.5px var(--noir); }
  .barre-app__ligne, .progression, .progression__texte { max-width: 584px; margin-inline: auto; }
  .progression span { background: var(--ligne); }
  .progression span::after { background: linear-gradient(90deg, var(--noir), #3A3A3A); }
  .progression__texte { color: var(--gris-600); }
  .progression__texte b { color: var(--noir); }
  .ecrans { padding-top: 34px; }
  .tuiles:not(.tuiles--3):not(.tuiles--2) { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .tuile { min-height: 124px; }
}
@media (min-width: 1024px) and (max-width: 1199px) {
  .tuiles:not(.tuiles--3):not(.tuiles--2) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (min-width: 1024px) and (max-height: 760px) {
  .parcours__txt small { display: none; }
  .accueil__corps { padding-top: 3vh; }
}

/* =====================================================================
   MODE INTÉGRÉ (1.3.0) : /demande/?integre=1 affiché dans /contact/ et /devis/
   (cadre à hauteur automatique : ni accueil, ni barres fixes, fond transparent)
   ===================================================================== */
html.est-integre { --gouttiere: 8px; } /* la page qui affiche le formulaire a déjà ses marges ; 8 px gardent les ombres visibles */
html.est-integre body, html.est-integre .volet { background: transparent; }
html.est-integre .accueil, html.est-integre .barre-app__ligne, html.est-integre .pied { display: none !important; }
html.est-integre .app { display: block; }
html.est-integre .volet { display: flex !important; min-height: 0; border-radius: 0; }
html.est-integre .barre-app { position: static; padding: 4px var(--gouttiere) 0; border-radius: 0; background: transparent; color: var(--noir); -webkit-backdrop-filter: none; backdrop-filter: none; }
html.est-integre .progression, html.est-integre .progression__texte { max-width: 592px; margin-inline: auto; }
html.est-integre .progression span { background: var(--ligne); }
html.est-integre .progression span::after { background: linear-gradient(90deg, var(--noir), #3A3A3A); }
html.est-integre .progression__texte, html.est-integre .progression__q { color: var(--gris-600); }
html.est-integre .progression__texte b { color: var(--noir); }
html.est-integre .ecrans { padding-top: 18px; }
html.est-integre .barre { position: static; background: none; padding-top: 8px; }
html.est-integre .barre__in { max-width: 592px; margin-inline: auto; }

/* =====================================================================
   BESOINS (1.4.0, 23/10/2026) : formulaire sur une seule page ; boutons rectangulaires
   façon application, photo d'origine en monochrome à gauche (noir sur jaune une fois choisi)
   ===================================================================== */
.question--besoin legend { margin-bottom: 12px; }
.choix-besoin { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 8px; }
.choix { position: relative; display: flex; align-items: center; gap: 9px; min-height: 58px; padding: 7px 10px 7px 7px; border-radius: 14px; background: var(--blanc); box-shadow: inset 0 0 0 1.5px var(--ligne); cursor: pointer; -webkit-tap-highlight-color: transparent; transition: background-color .2s, box-shadow .2s, color .2s, transform .15s; }
.choix:hover { box-shadow: inset 0 0 0 1.5px var(--ligne-forte); }
.choix:active { transform: scale(.98); }
.choix input { position: absolute; opacity: 0; width: 1px; height: 1px; pointer-events: none; }
.choix__ico { position: relative; flex: none; display: grid; place-items: center; width: 44px; height: 44px; border-radius: 11px; background: var(--fond); color: var(--noir); overflow: hidden; transition: background-color .2s, color .2s; }
.choix__ico svg { width: 24px; height: 24px; }
.choix__ico--photo::before { content: ""; position: absolute; inset: 1px; background: var(--img) center / contain no-repeat; filter: grayscale(1) contrast(1.12); mix-blend-mode: multiply; }
.choix__txt { flex: 1; min-width: 0; font-size: 14px; font-weight: 700; line-height: 1.2; letter-spacing: -.01em; }
.choix__etat { flex: none; display: grid; place-items: center; width: 20px; height: 20px; border-radius: 6px; box-shadow: inset 0 0 0 1.5px var(--ligne-forte); transition: background-color .2s, box-shadow .2s; }
.choix:has(input:checked) { background: var(--noir); color: var(--blanc); box-shadow: 0 12px 26px -16px rgba(17,17,17,.7); }
.choix:has(input:checked) .choix__ico { background: var(--jaune); color: var(--noir); }
.choix:has(input:checked) .choix__etat { background: var(--jaune); box-shadow: none; animation: pop .45s var(--ressort); }
.choix:has(input:checked) .choix__etat::after { content: ""; width: 9px; height: 5px; border: solid var(--noir); border-width: 0 0 2px 2px; transform: translateY(-1px) rotate(-45deg); }
.choix:has(input:focus-visible) { outline: 2px solid var(--noir); outline-offset: 2px; }
@media (max-width: 359px) { .choix-besoin { grid-template-columns: 1fr; } }
@media (min-width: 560px) { .choix-besoin { grid-template-columns: repeat(3, minmax(0, 1fr)); } }
@media (min-width: 1024px) and (max-width: 1199px) { .choix-besoin { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (prefers-reduced-motion: reduce) { .choix, .choix__etat { transition: none; animation: none !important; } }
/* 1.4.0 : sans indicateur d'étapes, la barre du haut ne sert plus que sur téléphone (logo et appel) */
@media (min-width: 1024px) { .barre-app { display: none; } }
html.est-integre .barre-app { display: none; }
/* 1.4.1 (23/10/2026) : titre et phrase de l'accueil sur téléphone ; logo Certibiocide dans l'en-tête du téléphone */
.titre-ordi { display: none; }
@media (min-width: 1024px) { .titre-mobile { display: none; } .titre-ordi { display: inline; } }
html.est-integre .titre-mobile { display: none; }
html.est-integre .titre-ordi { display: inline; }
/* 1.4.1 : case des pastilles à choix multiples alignée sur le texte (« À quel(s) endroit(s) ? ») */
.pastille--multi span { display: inline-flex; align-items: center; }
/* 1.4.1 : code postal et ville toujours à la même hauteur, même avec un message d'erreur ou un libellé sur deux lignes
   (grille commune : libellés, champs, messages ; chaque bloc .champ garde sa classe d'erreur pour les styles) */
.champs--cp { grid-template-rows: auto auto auto; align-items: start; row-gap: 0; }
.champs--cp > .champ { display: contents; }
.champs--cp > .champ > label { grid-row: 1; align-self: end; }
.champs--cp > .champ > input { grid-row: 2; }
.champs--cp > .champ > .message-erreur { grid-row: 3; }
.champs--cp > .champ:first-child > * { grid-column: 1; }
.champs--cp > .champ:last-child > * { grid-column: 2; }
/* 1.4.1 : ligne d'aide sous une question (type de mites) */
.question__aide { margin: -4px 0 12px; font-size: 13.5px; line-height: 1.45; color: var(--gris-600); }
/* 1.4.1 : « Vous êtes » — une ligne qui s'ouvre (liste déroulante, même aspect que les champs) */
.champ select { width: 100%; min-height: 56px; padding: 15px 46px 15px 16px; border: 0; border-radius: var(--r-m); background: var(--blanc) url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23111' stroke-width='2.4' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='m6 9 6 6 6-6'/%3E%3C/svg%3E") right 16px center / 18px no-repeat; box-shadow: inset 0 0 0 1.5px var(--ligne-forte); font-size: 17px; font-weight: 600; color: var(--noir); -webkit-appearance: none; appearance: none; cursor: pointer; transition: box-shadow .2s; }
.champ select:hover { box-shadow: inset 0 0 0 1.5px var(--gris-600); }
.champ select:focus { outline: none; box-shadow: inset 0 0 0 2px var(--noir), 0 0 0 4px rgba(255,174,0,.45); }
/* =====================================================================
   1.4.2 (23/10/2026) : contrôle qualité mobile
   ===================================================================== */
.barre-app__appel { width: 44px; height: 44px; }                                         /* cible tactile de 44 px (recommandation Apple) */
.champ input::placeholder, .champ textarea::placeholder { color: #73736E; }             /* exemples lisibles : contraste 4,7:1 au lieu de 3,3:1 */
.facultatif, .rgpd, .pied { font-size: 13px; }                                           /* plus de texte sous 13 px */
@media (max-width: 359px) {                                                               /* petits téléphones : les besoins restent sur 2 colonnes */
  .choix-besoin { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 6px; }
  .choix { gap: 7px; padding: 6px 8px 6px 6px; min-height: 54px; }
  .choix__ico { width: 36px; height: 36px; border-radius: 10px; }
  .choix__txt { font-size: 13px; }
  .choix__etat { width: 18px; height: 18px; }
}
@media (max-width: 299px) { .choix-besoin { grid-template-columns: 1fr; } }
@media (orientation: landscape) and (max-height: 500px) {                                 /* téléphone à l'horizontale : en-tête et barre d'envoi plus compacts */
  .barre-app__ligne { height: 48px; }
  .barre { padding-top: 10px; padding-bottom: calc(8px + env(safe-area-inset-bottom)); }
  .barre .bouton { min-height: 48px; }
}
/* =====================================================================
   1.4.3 (23/10/2026) : logo plus grand, libellés longs des besoins (la pastille du technicien passe dans l'en-tête de feuille en 1.5.0)
   ===================================================================== */
.barre-app__logo { width: 140px; }
@media (max-width: 374px) { .barre-app__logo { width: 120px; } }
@media (max-width: 339px) { .barre-app__logo { width: 110px; } }
/* un mot long (« Anthrènes ») n'est jamais coupé : s'il ne tient pas, le script réduit sa taille juste assez (même avec un texte agrandi par le téléphone) */
.choix__txt { overflow-wrap: normal; -webkit-hyphens: manual; hyphens: manual; }
@media (min-width: 360px) and (max-width: 400px) {                                       /* téléphones courants : plus de place pour le libellé */
  .choix { gap: 8px; padding: 6px 9px 6px 6px; }
  .choix__ico { width: 40px; height: 40px; }
  .choix__etat { width: 18px; height: 18px; }
}
.choix-besoin.choix-besoin--colonne { grid-template-columns: 1fr; }                     /* dernier recours (texte très agrandi sur petit écran), posé par le script */
/* =====================================================================
   1.5.0 (23/10/2026) : design « application moderne » (esprit du parcours de devis Verisure)
   feuille blanche à grands coins arrondis sur un bandeau sombre, en-tête centré, progression, filets fins
   ===================================================================== */
body, .volet { background: #FFFFFF; }
/* bandeau sombre sous l'en-tête, feuille blanche à grands coins arrondis par-dessus */
.bandeau-photo { height: 96px; background: radial-gradient(70% 120% at 50% 100%, rgba(255,174,0,.38), rgba(255,174,0,0) 70%), #111111; }
.ecrans { position: relative; z-index: 1; margin-top: -28px; padding-top: 4px; border-radius: 28px 28px 0 0; background: #FFFFFF; box-shadow: 0 -12px 30px -20px rgba(0,0,0,.45); }
.feuille-tete { text-align: center; padding-top: 4px; }
.feuille-tete__badge { display: block; width: 76px; height: 76px; margin: -46px auto 10px; border-radius: 50%; background: var(--jaune) url("img/technicien-pastille.webp") center / cover no-repeat; box-shadow: 0 0 0 4px #FFFFFF, 0 14px 28px -14px rgba(0,0,0,.55); }
.feuille-tete__libelle { display: inline-block; padding: 5px 12px; border-radius: 999px; background: #FFF4D6; color: #7A5200; font-size: 13px; font-weight: 800; letter-spacing: .02em; }
.feuille-tete h2 { margin-top: 12px; text-align: center; font-size: clamp(1.6rem, 1.35rem + 1.2vw, 2rem); }
.feuille-tete .aide { text-align: center; max-width: 34ch; margin-inline: auto; text-wrap: balance; }
.avancement { display: flex; align-items: center; gap: 12px; margin: 20px 0 0; }
.avancement__barre { flex: 1; height: 6px; border-radius: 999px; background: #EDEDEA; overflow: hidden; }
.avancement__barre span { display: block; width: 0; height: 100%; border-radius: inherit; background: var(--jaune); transition: width .35s var(--ease); }
.avancement b { min-width: 42px; text-align: right; font-size: 14px; font-weight: 800; }
/* sections : filets fins et plus d'air */
.partie { margin-top: 26px; padding-top: 24px; border-top: 1px solid #EFEFEC; }
.partie__titre { font-size: 1.2rem; }
.partie__num { width: 30px; height: 30px; background: #111; color: var(--jaune); }
/* choix des besoins : cartes à filet fin ; choisies : filet noir, fond crème, case noire */
.choix { border-radius: 12px; background: #FFFFFF; box-shadow: inset 0 0 0 1px #D8D8D4; }
.choix:hover { box-shadow: inset 0 0 0 1px #9E9E99; }
.choix__ico { background: #F6F6F3; }
.choix:has(input:checked) { background: #FFF8E6; color: var(--noir); box-shadow: inset 0 0 0 2px var(--noir); }
.choix:has(input:checked) .choix__ico { background: var(--jaune); }
.choix:has(input:checked) .choix__etat { background: var(--noir); }
.choix:has(input:checked) .choix__etat::after { border-color: var(--jaune); }
/* pastilles et champs : filets fins, angles plus nets */
.pastille { box-shadow: inset 0 0 0 1px #D8D8D4; }
.pastille:has(input:checked) { background: #FFF8E6; color: var(--noir); box-shadow: inset 0 0 0 2px var(--noir); }
.champ input, .champ textarea, .champ select { border-radius: 12px; box-shadow: inset 0 0 0 1px #CFCFCB; }
.photos__zone { border-radius: 14px; box-shadow: none; border: 1px dashed #CFCFCB; background: #FCFCFB; }
/* barre d'envoi : fond blanc et mention de réassurance */
.barre { background: linear-gradient(180deg, rgba(255,255,255,0) 0, #FFFFFF 20px); }
.barre__in { flex-wrap: wrap; justify-content: center; }
.barre__in::after { content: "Gratuit et sans engagement"; flex-basis: 100%; text-align: center; margin-top: 6px; font-size: 12.5px; font-weight: 600; color: var(--gris-600); }
/* ordinateur : la photo est déjà dans le panneau de gauche */
@media (min-width: 1024px) {
  .bandeau-photo { display: none; }
  .ecrans { margin-top: 0; padding-top: 34px; box-shadow: none; border-radius: 0; }
  .feuille-tete__badge { display: none; }
}
html.est-integre .bandeau-photo, html.est-integre .feuille-tete__badge { display: none; }
html.est-integre .ecrans { margin-top: 0; box-shadow: none; border-radius: 0; background: transparent; }   /* /contact/ et /devis/ : la page hôte garde son fond */
/* =====================================================================
   1.5.1 (24/10/2026) : pilule « note Google + Certibiocide » à la place du logo Certibiocide
   note de la fiche Google SANIPURE (Lyon) relevée le 24/10/2026 : 4,9/5
   1.6.2 (30/10/2026) : note et étoiles seulement, sans le nombre d'avis
   ===================================================================== */
/* 1.6.0 : pilule toujours sur une ligne (G Google, note, étoiles, filet, Certibiocide) */
.avis-pilule { flex: none; display: inline-flex; align-items: center; gap: 10px; min-height: 38px; padding: 6px 14px 6px 10px; border-radius: 999px; color: var(--blanc); line-height: 1; white-space: nowrap;
  background: linear-gradient(180deg, rgba(255,255,255,.13), rgba(255,255,255,.04)); box-shadow: inset 0 0 0 1px rgba(255,255,255,.16), inset 0 1px 0 rgba(255,255,255,.14), 0 12px 26px -16px rgba(0,0,0,.9); -webkit-backdrop-filter: blur(10px); backdrop-filter: blur(10px); }
.avis-pilule__note { display: inline-flex; align-items: center; gap: 6px; }
.avis-pilule__g { flex: none; width: 17px; height: 17px; }
.avis-pilule__note b { font-size: 15px; font-weight: 800; letter-spacing: .01em; }
.avis-pilule__etoiles { flex: none; width: 68px; height: 13px; fill: #FBBC04; }             /* jaune des étoiles Google */
.avis-pilule__certi { display: block; flex: none; width: auto; height: 20px; padding-left: 10px; border-left: 1px solid rgba(255,255,255,.22); box-sizing: content-box; }
@media (max-width: 349px) { .avis-pilule { gap: 8px; padding-inline: 8px 12px; } }
/* ordinateur (panneau de gauche) : à droite du logo dès 1280 px, en dessous entre 1024 et 1279 px */
.avis-pilule--large { background: rgba(11,12,13,.45); }
@media (min-width: 1024px) {
  .accueil__haut { flex-wrap: wrap; height: auto; min-height: 88px; row-gap: 12px; padding-block: 18px 6px; }
}
/* un seul fond sombre sur téléphone : l'en-tête et le bandeau sous l'en-tête ont exactement la même couleur
   (#1F1F1F = teinte affichée jusqu'ici par l'en-tête, noir à 94 % sur fond blanc ; le bandeau était plus foncé, #111111) */
:root { --entete: #1F1F1F; }
.barre-app { background: var(--entete); -webkit-backdrop-filter: none; backdrop-filter: none; }
.bandeau-photo { background: radial-gradient(70% 120% at 50% 100%, rgba(255,174,0,.38), rgba(255,174,0,0) 70%), var(--entete); }
/* =====================================================================
   1.6.0 (24/10/2026) : pilule sur une ligne, progression collée en haut, aspect « application » plus premium
   ===================================================================== */
/* téléphone : la pilule est centrée sur le bandeau sombre, sous l'en-tête (logo et appel) ; fine trame lumineuse comme sur le panneau de l'ordinateur */
.bandeau-photo { position: relative; isolation: isolate; display: flex; justify-content: center; align-items: flex-start; height: 128px; padding: 14px 16px 0; box-sizing: border-box; }
@media (min-width: 1024px) { .bandeau-photo { display: none; } }   /* ordinateur : la pilule et le technicien sont dans le panneau de gauche */
.bandeau-photo::before { content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none;
  background-image: linear-gradient(rgba(255,255,255,.05) 1px, transparent 1px), linear-gradient(90deg, rgba(255,255,255,.05) 1px, transparent 1px); background-size: 24px 24px;
  -webkit-mask-image: radial-gradient(75% 95% at 50% 100%, #000 15%, transparent 78%); mask-image: radial-gradient(75% 95% at 50% 100%, #000 15%, transparent 78%); }
.feuille-tete__badge { box-shadow: 0 0 0 4px #FFFFFF, 0 0 0 6px rgba(255,174,0,.35), 0 18px 34px -12px rgba(255,140,0,.55); }
.feuille-tete__libelle { background: linear-gradient(180deg, #FFF8E4, #FFEDC2); box-shadow: inset 0 0 0 1px rgba(255,164,0,.35); }
/* progression : collée en haut de l'écran pendant le défilement (sous l'en-tête sur téléphone), verre dépoli */
.avancement { position: sticky; top: var(--haut-collant, 0px); z-index: 25; display: flex; align-items: center; gap: 12px; margin: 16px calc(-1 * var(--gouttiere)) 0; padding: 10px var(--gouttiere);
  background: rgba(255,255,255,.86); -webkit-backdrop-filter: blur(14px) saturate(160%); backdrop-filter: blur(14px) saturate(160%); transition: box-shadow .25s; }
.avancement.est-collee { box-shadow: 0 1px 0 rgba(17,17,17,.06), 0 16px 26px -22px rgba(17,17,17,.55); }
.avancement__libelle { display: none; flex: none; font-size: 13px; font-weight: 800; letter-spacing: .01em; }
.avancement.est-collee .avancement__libelle { display: inline; }
.avancement__barre { height: 8px; background: #EDEDE9; box-shadow: inset 0 1px 2px rgba(17,17,17,.08); }
.avancement__barre span { position: relative; overflow: hidden; background: linear-gradient(90deg, #FFCF5C, #FFAE00 55%, #FF9100); box-shadow: 0 0 12px rgba(255,150,0,.55); }
.avancement__barre span::after { content: ""; position: absolute; inset: 0; background: linear-gradient(90deg, transparent, rgba(255,255,255,.6), transparent); transform: translateX(-100%); animation: balaye 2.6s var(--ease) infinite; }
@keyframes balaye { 0%, 35% { transform: translateX(-100%); } 100% { transform: translateX(100%); } }
.avancement b { font-variant-numeric: tabular-nums; min-width: 46px; }
html.est-integre .avancement { position: static; margin-inline: 0; padding-inline: 0; background: none; -webkit-backdrop-filter: none; backdrop-filter: none; }
/* numéros des parties : pastille sombre en relief, halo jaune */
.partie__num { background: radial-gradient(circle at 30% 25%, #3A3A3A, #0B0B0B 72%) #0B0B0B; box-shadow: 0 0 0 4px rgba(255,174,0,.16); }
/* choix des besoins et pastilles : cartes en relief léger ; choisies : filet orangé lumineux, fond crème dégradé */
.choix { border-radius: 16px; box-shadow: inset 0 0 0 1px #E0E0DB, 0 1px 2px rgba(17,17,17,.04); transition: box-shadow .2s, background-color .2s, transform .15s var(--ease); }
.choix:hover { box-shadow: inset 0 0 0 1px #BDBDB7, 0 10px 20px -16px rgba(17,17,17,.4); }
.choix:active { transform: scale(.985); }
.choix__ico { border-radius: 12px; }
.choix:has(input:checked) { background: linear-gradient(180deg, #FFFCF4, #FFF3D6); box-shadow: inset 0 0 0 2px #FFA400, 0 14px 28px -18px rgba(255,140,0,.85); }
.choix:has(input:checked) .choix__ico { background: linear-gradient(135deg, #FFD466, #FFAE00); }
.pastille:has(input:checked) { background: linear-gradient(180deg, #FFFCF4, #FFF3D6); box-shadow: inset 0 0 0 2px #FFA400, 0 10px 22px -16px rgba(255,140,0,.8); }
/* champs : coins plus doux, focus lumineux ; un champ en erreur garde son filet rouge (il était recouvert depuis la 1.5.0) */
.champ input, .champ textarea, .champ select { border-radius: 14px; box-shadow: inset 0 0 0 1px #D6D6D1, inset 0 1px 2px rgba(17,17,17,.04); }
.champ input:focus, .champ textarea:focus, .champ select:focus { outline: none; box-shadow: inset 0 0 0 1.5px #FFA400, 0 0 0 4px rgba(255,174,0,.22); }
.champ--erreur input, .champ--erreur textarea, .champ--erreur select { box-shadow: inset 0 0 0 2px var(--erreur); }
/* bouton principal : dégradé or, relief, reflet qui passe régulièrement, flèche dans un disque noir */
.bouton:not(.bouton--retour) { border-radius: 18px; background: linear-gradient(135deg, #FFD25E 0%, #FFAE00 50%, #FF9A00 100%); letter-spacing: -.015em;
  box-shadow: 0 16px 32px -14px rgba(255,140,0,.85), inset 0 1px 0 rgba(255,255,255,.65), inset 0 -2px 0 rgba(150,70,0,.16); }
.bouton:not(.bouton--retour):hover { box-shadow: 0 20px 38px -14px rgba(255,140,0,.95), inset 0 1px 0 rgba(255,255,255,.65), inset 0 -2px 0 rgba(150,70,0,.16); }
.bouton:not(.bouton--retour)::after { animation: reflet-boucle 5s var(--ease) 1.5s infinite; }
@keyframes reflet-boucle { 0%, 72% { transform: translateX(-120%); } 100% { transform: translateX(120%); } }
.bouton .fleche { box-shadow: inset 0 1px 0 rgba(255,255,255,.14), 0 4px 10px -4px rgba(17,17,17,.6); }
.bouton--retour { border-radius: 18px; background: rgba(255,255,255,.92); box-shadow: inset 0 0 0 1px #D6D6D1; }
/* barre d'envoi : verre dépoli au-dessus du contenu, comme une barre d'application */
.barre { padding-top: 12px; background: rgba(255,255,255,.8); -webkit-backdrop-filter: blur(16px) saturate(160%); backdrop-filter: blur(16px) saturate(160%); box-shadow: 0 -1px 0 rgba(17,17,17,.06); }
html.est-integre .barre { background: none; -webkit-backdrop-filter: none; backdrop-filter: none; box-shadow: none; }
@media (prefers-reduced-motion: reduce) { .bouton::after, .avancement__barre span::after { animation: none !important; } }

