/**
 * Tunnel de réservation web — v0.6, habillage « application ».
 *
 * Relevé le 18/08 sur le parcours RÉEL de rdv.welcome-app.com (12 captures) :
 * accordéons par catégorie, `+` noir rond, pilule panier TAN, Suivant noir,
 * créneaux en chips grises à badge « +N € », étapes numérotées à barre
 * segmentée, récap à bande « Durée » grise et « Nouveau total » gras.
 * Palette = thème de l'app (LightModeTheme) : noir accent, tan #E8D9C4,
 * gris #F5F5F5, filets #ECECEC. Rouge réservé à l'erreur.
 *
 * ARCHITECTURE (décision du 18/08, arbitrée « stable d'abord ») :
 * page dédiée PLEIN ÉCRAN qui glisse depuis la droite — pas de bottom sheet :
 * une feuille + clavier iOS + scroll interne est le trio le plus fragile du
 * web mobile, et la page réplique un comportement déjà éprouvé par les
 * clientes sur rdv.welcome-app.com.
 */

/* 0.33.0 (09/10) — LA POLICE DE L'APP. La fiche ne charge qu'Archivo : le tunnel
   demandait Poppins et Playfair Display sans que personne ne les serve, et
   s'affichait dans la police du téléphone, ses titres en Georgia gras — le
   « style IA » que Nicolas relevait. Poppins vient maintenant de l'extension
   (`polices/`, sous-ensemble latin, ~12 Ko par graisse), sous un nom à elle :
   seule la page de réservation l'emploie, et le navigateur ne la télécharge
   qu'à son ouverture — la fiche et sa barre « Réserver » n'en paient rien. */
@font-face { font-family: "WT Poppins"; font-style: normal; font-weight: 400; font-display: swap;
	src: url("polices/poppins-400.woff") format("woff"); }
@font-face { font-family: "WT Poppins"; font-style: normal; font-weight: 500; font-display: swap;
	src: url("polices/poppins-500.woff") format("woff"); }
@font-face { font-family: "WT Poppins"; font-style: normal; font-weight: 600; font-display: swap;
	src: url("polices/poppins-600.woff") format("woff"); }

.wt-lanceur, .wt-page { 
	--wt-noir:#1A1A1A; --wt-gris:#8A8A8A; --wt-gris-t:#5F5F63; --wt-filet:#ECECEC;
	--wt-gris-c:#F5F5F5; --wt-tan:#E8D9C4; --wt-creme:#F9F5F0; --wt-erreur:#E31111;
	font-family: var(--welcome-sans, "Poppins", -apple-system, sans-serif);
	color: var(--wt-noir);
	font-size: 15px; line-height: 1.5;
	/* ⚠️ 07/09 — Retour de Nicolas : « les textes du tunnel sont écrits
	   beaucoup trop fins ». Mesuré en production sur la fiche : le tunnel
	   calculait `font-weight: 300`. Il n'avait JAMAIS posé sa graisse et
	   héritait donc du Poppins Light du thème, choisi pour de grands titres
	   éditoriaux — illisible à 13-15 px dans une interface. On la pose ici,
	   une fois, à la racine des deux îlots. */
	font-weight: 400;
}
.wt-page [hidden] { display: none !important; }

/* ⚠️ LE THÈME DU SITE HABILLE TOUS LES BOUTONS, ET PAS QU'EN COULEUR
   `button, [type="button"] { color:#CC3366; padding:.5rem 1rem;
   border:1px solid #CC3366; border-radius:3px }`.
   Deux dégâts constatés EN PROD (jamais sur un banc : une page nue n'a pas
   ces feuilles) — ① 20/08 : chevron de retour et chips de créneaux en ROSE ;
   ② 20/08, signalé par Nicolas : les `+` et `✓` des prestations **décalés**.
   Cause du ② mesurée : le padding 8/16 imposé laissait 2 px de large de boîte
   de contenu dans un bouton de 34 px — le glyphe sortait 7,1 px à droite du
   centre. D'où un RESET complet ici plutôt qu'un rustinage couleur.
   Spécificité 0,1,1 : passe devant `[type="button"]` (0,1,0). Tout bouton du
   tunnel qui veut son propre fond/padding est donc préfixé `.wt-page` ou
   `.wt-lanceur` plus bas (0,2,0) pour rester au-dessus du filet.
   NE PAS retirer sans revérifier EN PROD. */
.wt-page button, .wt-lanceur button {
	color: var(--wt-noir); padding: 0; border: 0; border-radius: 0; background: none;
}

/* ═══════════ LA BARRE COLLANTE SUR LA FICHE ═══════════ */
.wt-lanceur {
	position: fixed; bottom: 0; left: 0; right: 0; z-index: 90;
	display: flex; align-items: center; gap: 12px;
	/* 18 px en haut, pas 10 : le bouton touchait presque le bord (20/08). */
	padding: 18px 16px calc(14px + env(safe-area-inset-bottom, 0px));
	/* ⚠️ FOND PLEIN, PAS UN DÉGRADÉ (retour de Nicolas, 21/08 : « le bouton
	   n'est pas bien contenu dans le dialogue en bas et dépasse »).
	   Le dégradé `to top, crème 72%, transparent` laissait les 24 px du HAUT
	   quasi transparents — or le bouton commence à 18 px du haut. Son bord
	   supérieur flottait donc sur le fond de la page : à l'œil, il sortait de
	   la barre. Mesuré : bouton à 18 px du haut, opacité du fond à cet
	   endroit ≈ 0,76. Le fond plein règle ça, et rejoint le traitement déjà
	   retenu sur ordinateur. */
	background: var(--welcome-creme, #FAF6F1);
	border-top: 1px solid var(--wt-filet);
	box-shadow: 0 -6px 24px rgba(26, 26, 26, .10);
}
.wt-lanceur .wt-resume { flex: 1; min-width: 0; font-size: 12.5px; color: var(--wt-gris-t); line-height: 1.35; }
.wt-lanceur .wt-resume b { display: block; font-size: 14.5px; color: var(--wt-noir); font-weight: 600; }
.wt-lanceur .wt-btn-lanceur {
	background: var(--wt-noir); color: #fff; border: 0; border-radius: 999px;
	padding: 15px 26px; font: inherit; font-size: 15px; font-weight: 600; cursor: pointer;
}
@media (min-width: 900px) {
	/* Sur ordinateur la barre flotte au-dessus d'une page claire : le dégradé
	   ne suffisait pas à la détacher (20/08). Fond plein blanc cassé, filet et
	   ombre portée pour qu'on la lise comme un élément posé. */
	.wt-lanceur { left: 50%; right: auto; transform: translateX(-50%); width: 560px;
		background: #FCFAF7; border: 1px solid var(--wt-filet); border-bottom: 0;
		border-radius: 18px 18px 0 0; box-shadow: 0 -6px 28px rgba(0,0,0,.14); }
}

/* ═══════════ LA PAGE DE RÉSERVATION ═══════════ */
.wt-page {
	position: fixed; inset: 0; z-index: 100; background: #fff;
	transform: translateX(103%); transition: transform .28s ease;
	overflow-y: auto; -webkit-overflow-scrolling: touch; overscroll-behavior: contain;
}
body.wt-resa-ouverte .wt-page { transform: translateX(0); }
body.wt-resa-ouverte { overflow: hidden; }
@media (min-width: 900px) {
	.wt-page { left: 50%; right: auto; transform: translate(-50%, 0);
		/* 07/09 — `bottom: 3vh` imposait 94 vh de hauteur quel que soit le
		   contenu : 411 px de blanc mesurés sous le bouton de l'écran Adresse.
		   Le panneau épouse maintenant son contenu et plafonne à 94 vh. Il
		   reste accroché par le HAUT : centré, il sauterait verticalement à
		   chaque changement d'écran. */
		top: 3vh; bottom: auto; height: auto; max-height: 94vh; width: 480px;
		border-radius: 18px; opacity: 0; pointer-events: none; transition: opacity .2s ease;
		box-shadow: 0 20px 60px rgba(0,0,0,.35); }
	/* La règle mobile `translateX(0)` gagnerait en spécificité et décentrerait
	   le panneau : on la neutralise ici. */
	body.wt-resa-ouverte .wt-page { transform: translate(-50%, 0); opacity: 1; pointer-events: auto; }
	body.wt-resa-ouverte::after { content:""; position: fixed; inset: 0; z-index: 99; background: rgba(0,0,0,.4); }
}

/* — en-tête : mini hero comme rdv.welcome-app — */
.wt-entete { position: relative; border-bottom: 1px solid var(--wt-filet); padding: 14px 58px 12px 16px; }
/* Croix de fermeture À DROITE (20/08) : la flèche ‹ à gauche se lisait
   « étape précédente » alors qu'elle fermait tout le tunnel. */
.wt-page .wt-croix {
	position: absolute; right: 12px; top: 50%; transform: translateY(-50%);
	width: 36px; height: 36px; border-radius: 50%; border: 0; background: var(--wt-gris-c);
	font-size: 14px; cursor: pointer; display: grid; place-items: center;
	color: var(--wt-noir);
}
.wt-entete b { font-family: inherit; font-weight: 600; font-size: 18px; display: block; }
.wt-entete small { color: var(--wt-gris); font-size: 11.5px; }

/* — étapes : barre segmentée + titre numéroté — */
.wt-prog { display: flex; }
.wt-prog i { flex: 1; height: 2px; background: #E3E3E3; }
.wt-prog i.fait { background: var(--wt-noir); }
.wt-etape-titre { text-align: center; font-size: 14.5px; font-weight: 600; padding: 12px 0 4px; }
.wt-sous { text-align: center; margin: 0 16px 10px; font-size: 13px; color: var(--wt-gris); }

/* — écrans — */
.wt-ecran { display: none; padding-bottom: 8px; }
.wt-ecran.est-visible { display: block; }
.wt-ecran > h3 { font-family: inherit; font-size: 14px; font-weight: 500; color: var(--wt-gris-t);
	text-align: center; margin: 2px 16px 12px; }

/* — accordéons (catégories, jours) — */
.wt-acc { margin: 8px 14px; border: 1px solid var(--wt-filet); border-radius: 12px; background: #fff;
	box-shadow: 0 1px 3px rgba(0,0,0,.04); overflow: hidden; }
/* Le nom du jour est un REPÈRE de navigation, pas du texte courant : il
   porte un cran de plus que le reste (07/09). */
.wt-acc-tete { position: relative; padding: 14px; text-align: center; font-size: 15.5px;
	font-weight: 500; cursor: pointer; user-select: none; }
.wt-acc-tete::after { content: "▾"; position: absolute; right: 14px; color: #666; transition: transform .2s; }
.wt-acc.ouvert > .wt-acc-tete::after { transform: rotate(180deg); }
.wt-acc-corps { display: none; }
.wt-acc.ouvert > .wt-acc-corps { display: block; }

/* — lignes prestation — */
.wt-presta { padding: 10px 14px; border-top: 1px solid var(--wt-filet); display: flex; align-items: center; gap: 10px; }
.wt-presta .wt-titre { flex: 1; min-width: 0; cursor: pointer; }
.wt-presta .wt-titre b { font-size: 14.5px; font-weight: 600; display: block; }
.wt-presta .wt-titre small { color: var(--wt-gris); font-size: 13px; }
/* ⚠️ 07/09 — Retour de Nicolas : « les icônes plus ne sont pas bien
   centrées ». `place-items: center` centrait bien la BOÎTE de la ligne — mais
   le glyphe « + » de Poppins n'est pas centré dans la sienne : il s'appuie
   sur l'axe mathématique, plus haut que le centre optique. Aucun réglage de
   `line-height` ne rattrape ça proprement d'une police à l'autre.
   Les deux glyphes sont donc devenus des SVG, géométriquement centrés dans
   leur viewBox — la question ne se repose plus. */
.wt-page .wt-plus { width: 34px; height: 34px; padding: 0; border: 0; border-radius: 50%;
	background: var(--wt-noir); color: #fff; line-height: 1; cursor: pointer;
	flex: 0 0 auto; display: grid; place-items: center; }
.wt-page .wt-plus svg, .wt-page .wt-moins svg { display: block; }
.wt-vign { flex: 0 0 auto; width: 46px; height: 46px; border-radius: 8px;
	background: var(--wt-gris-c) center/cover no-repeat; }
.wt-vign-vide { display: grid; place-items: center; font-family: inherit; font-weight: 500;
	font-size: 19px; color: #B9A88F; background: var(--wt-creme); }

.wt-cat-lab { margin: 12px 16px 2px; font-size: 12.5px; color: var(--wt-gris);
	text-align: left; }
.wt-note-filtre { margin: 8px 14px; }
/* Le pas de quantité. ⚠️ Ce n'est PAS le sélecteur ×1..×5 retiré en v0.2.1 :
   celui-là envoyait `quantity: N`, que `create_web_appointment.js:940` refuse.
   Ici chaque unité part comme sa PROPRE ligne `quantity: 1` — exactement ce
   que fait `_model.addToItems(...)` dans l'app, appelé une fois par tap. */
.wt-pas { display: flex; align-items: center; gap: 8px; flex: 0 0 auto; }
.wt-page .wt-moins { width: 28px; height: 28px; padding: 0; border: 1.5px solid var(--wt-filet);
	border-radius: 50%; background: #fff; color: var(--wt-noir); line-height: 1;
	cursor: pointer; display: grid; place-items: center; }
.wt-nb { min-width: 14px; text-align: center; font-size: 14.5px; font-weight: 600; }

/* — cartes cadeaux : bannières, relevé sur `shop_page` le 20/08 — */
.wt-carte { margin: 10px 14px; border-radius: 12px; overflow: hidden;
	background: var(--wt-creme) center/cover no-repeat; }
.wt-carte-nue { background: linear-gradient(135deg, #F3E6D2, #E8D9C4); }
/* Le voile : sans lui, un intitulé sombre sur une photo sombre devient
   illisible — et la CF ne sert pas la couleur d'encre du modèle. */
.wt-carte-voile { display: flex; flex-direction: column; align-items: center; gap: 2px;
	padding: 16px 14px;
	/* Voile LÉGER, dégradé vers le bas : à 0,62 d'opacité il effaçait le doré
	   et la soie, c'est-à-dire tout l'intérêt de la carte. Ici le haut de
	   l'image reste net et le texte gagne son contraste par l'ombre blanche
	   ci-dessous plutôt qu'en noyant la photo. */
	background: linear-gradient(180deg, rgba(255,255,255,.06), rgba(255,255,255,.34)); }
.wt-carte b, .wt-carte em, .wt-carte small {
	text-shadow: 0 1px 3px rgba(255,255,255,.95), 0 0 10px rgba(255,255,255,.7); }
.wt-carte-pro { border: 1px solid rgba(90,65,34,.45); border-radius: 999px;
	padding: 2px 12px; font-size: 11.5px; color: #5B4122; background: rgba(255,255,255,.5); }
.wt-carte b { font-size: 16px; font-weight: 600; color: #4A3A28; margin-top: 6px; }
.wt-carte em { font-style: normal; font-size: 21px; font-weight: 700; color: #4A3A28; }
.wt-carte small { font-size: 11.5px; color: #6B5B45; }
.wt-carte .wt-pas { margin-top: 10px; }
/* Sur un fond photographique, un petit rond noir se perd : l'app utilise un
   bouton blanc plein, on fait pareil. */
.wt-page .wt-ajouter { background: #fff; color: var(--wt-noir); border: 0; border-radius: 999px;
	padding: 10px 26px; font: inherit; font-size: 14px; font-weight: 600; cursor: pointer;
	box-shadow: 0 2px 10px rgba(0,0,0,.16); }
.wt-pas-carte .wt-nb { color: var(--encre, #4A3A28); }
.wt-page .wt-pas-carte .wt-moins { background: rgba(255,255,255,.92); border-color: rgba(255,255,255,.92); }
/* Quand le modèle porte sa couleur d'encre (`text_color`, servie validée) :
   comme l'app — texte dans cette couleur, à même l'image, sans voile ni
   ombre. Le voile ne reste que pour les cartes SANS couleur définie. */
.wt-carte.a-encre .wt-carte-voile { background: none; backdrop-filter: none; }
.wt-carte.a-encre b, .wt-carte.a-encre em, .wt-carte.a-encre small {
	color: var(--encre); text-shadow: none; }
.wt-carte.a-encre .wt-carte-pro { color: var(--encre); border-color: currentColor;
	background: none; }

/* — options lieu / conditions : cartes radio — */
.wt-options { display: grid; gap: 10px; margin: 8px 14px; }

/* ═════════════════════════════════════════════════════════════════════
   v0.24 — LES ADRESSES LONGUES NE POUSSENT PLUS LE TUNNEL DE CÔTÉ
   ═════════════════════════════════════════════════════════════════════
   Défaut signalé le 26/08 sur « 2 Impasse de la Sauge, 11200
   Saint-André-de-Roquelongue, France » : une barre de défilement
   HORIZONTALE apparaissait sur tout le tunnel, et le détail de la carte
   « Chez moi » se coupait au bord.

   Mesuré en production : `.wt-options` faisait **507 px dans 452**, et
   `.wt-page` 521 dans 480.

   La cause n'est pas le texte, c'est une valeur par défaut de CSS :
   un enfant de grille (comme un enfant de flex) vaut `min-width: auto`,
   c'est-à-dire « je ne me rétrécis JAMAIS sous la largeur de mon
   contenu ». Une longue chaîne insécable élargit donc la piste, qui
   élargit la grille, qui élargit le tunnel. `min-width: 0` rend le droit
   de rétrécir ; `overflow-wrap: anywhere` donne au texte le droit d'aller
   à la ligne au lieu de forcer le passage.

   ⚠️ Le banc sur `faux-wp/page.html` NE reproduisait PAS le défaut : il
   n'a pas la feuille du thème. C'est la mesure sur la page réelle qui
   l'a montré. Correctif éprouvé en direct : 521 → 480, plus un seul
   élément en dépassement. */
.wt-options > *,
.wt-opt-groupe,
.wt-option > span,
.wt-adresse-bloc,
.wt-adresse-suggs { min-width: 0; }
.wt-option b,
.wt-option small { overflow-wrap: anywhere; }
.wt-option { display: flex; gap: 12px; align-items: flex-start; cursor: pointer;
	background: #fff; border: 1px solid var(--wt-filet); border-radius: 12px; padding: 14px 16px; }
.wt-option.est-choisie { border-color: var(--wt-noir); background: var(--wt-creme); }
.wt-option input { margin-top: 3px; width: 18px; height: 18px; accent-color: var(--wt-noir); flex: 0 0 auto; }

/* Cartes de lieu enrichies (v0.18) — la photo de l'établissement, comme
   dans l'application. 54 px : assez pour reconnaître la devanture, pas assez
   pour déséquilibrer la carte. */
.wt-lieu-photo { width: 54px; height: 54px; border-radius: 10px; object-fit: cover;
	flex: 0 0 auto; background: var(--wt-gris-c); border: 1px solid var(--wt-filet); }
/* 0.25.2 — l'épingle du carré sans photo était le caractère 📍 dans le JS.
   `wp-emoji-release.min.js` le convertit en <img class="emoji"> : la règle de
   la 0.25.1 le tient à 1em, mais un emoji de moins dans le tunnel est un
   piège de moins. Même masque SVG que la ligne d'adresse. */
span.wt-lieu-photo.est-vide { display: grid; place-items: center; }
span.wt-lieu-photo.est-vide::before {
	content: ""; width: 22px; height: 22px;
	background: #B9A88F;
	-webkit-mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M20%2010.5c0%206-8%2011.5-8%2011.5s-8-5.5-8-11.5a8%208%200%200%201%2016%200z'/%3E%3Ccircle%20cx='12'%20cy='10.2'%20r='2.9'/%3E%3C/svg%3E") center/contain no-repeat;
	        mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M20%2010.5c0%206-8%2011.5-8%2011.5s-8-5.5-8-11.5a8%208%200%200%201%2016%200z'/%3E%3Ccircle%20cx='12'%20cy='10.2'%20r='2.9'/%3E%3C/svg%3E") center/contain no-repeat;
}

/* Le bloc d'adresse « dans » la carte Chez moi : frère du label dans le DOM
   (un enfant volerait le focus, cf. reservation.js), soudé visuellement —
   coins du bas de la carte aplatis, bloc collé dessous, même bord. */
.wt-opt-groupe { display: block; }
/* Les coins du bas ne s'aplatissent que quand le bloc d'adresse est OUVERT :
   carte choisie ET bloc visible. Le sélecteur ~ suffit, ils sont frères. */
.wt-opt-groupe:has(.wt-adresse-bloc:not([hidden])) .wt-opt-home { border-radius: 12px 12px 0 0; }
.wt-adresse-bloc { margin: -1px 0 0; padding: 12px 14px 13px; background: var(--wt-creme);
	border: 1px solid var(--wt-noir); border-top: 1px dashed var(--wt-tan);
	border-radius: 0 0 12px 12px; }
.wt-adresse-bloc[hidden] { display: none; }
/* 07/09 — Retour de Nicolas : « la card est trop vers le haut, on ne voit que
   le bas ». Il voyait juste, littéralement. Quand la boutique n'offre qu'un
   seul lieu « à domicile », `demarrer()` MASQUE la carte de choix au-dessus
   (voir reservation.js) — et ce bloc, dessiné pour être le BAS de cette carte
   (bord haut pointillé, coins hauts carrés, marge négative de -1 px), restait
   une moitié de carte posée dans le vide. Seul, il redevient une carte
   entière. La classe est ajoutée par le JS, là où la carte est masquée. */
.wt-adresse-bloc--seul { margin-top: 0; border-top: 1px solid var(--wt-noir);
	border-radius: 12px; }
.wt-adresse-bloc input { width: 100%; padding: 12px 14px; background: #fff;
	border: 1px solid #DBDBDB; border-radius: 12px; color: var(--wt-noir);
	font-family: inherit; font-size: 16px; min-height: 48px; box-sizing: border-box; }
.wt-adresse-bloc input:focus { outline: 2px solid var(--wt-noir); outline-offset: 1px;
	border-color: transparent; }
.wt-adresse-suggs { display: flex; flex-direction: column; }
/* `white-space: normal` : un <button> hérite parfois du `nowrap` d'une
   feuille tierce — sur une page WordPress il y en a une trentaine. On le
   pose explicitement plutôt que d'espérer. */
.wt-page .wt-adresse-suggs button { text-align: left; padding: 11px 12px; font-size: 13.5px;
	background: #fff; border: 1px solid var(--wt-filet); border-top: 0; cursor: pointer;
	white-space: normal; overflow-wrap: anywhere; line-height: 1.4; }
.wt-page .wt-adresse-suggs button:first-child { border-top: 1px solid var(--wt-filet);
	border-radius: 10px 10px 0 0; margin-top: 8px; }
.wt-page .wt-adresse-suggs button:last-child { border-radius: 0 0 10px 10px; }
.wt-page .wt-adresse-suggs button:hover { background: var(--wt-gris-c); }
.wt-adresse-etat { display: block; margin-top: 6px; font-size: 12px; color: var(--wt-gris-t); }
/* Parité 33 (point b) : l'adresse au-dessus des lieux, alignée sur eux. */
#wt-e0 > .wt-adresse-bloc { margin: 8px 14px; }
/* Parité 33 (41-B5) : hors zone, « Voir les pros qui viennent à … » et
   « Changer d'adresse », sous le message. */
.wt-hors-zone { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 14px; margin-top: 10px; }
.wt-hors-zone .wt-btn { margin: 0; }

/* v0.22 — Le champ est en LECTURE SEULE pendant qu'on localise l'adresse
   (idem `readOnly: _resolving` du picker de l'application) : sans repère
   visuel, on croit à un champ gelé. */
.wt-page #wt-adresse-q.est-occupe { background: var(--wt-gris-c); color: var(--wt-gris-t); }

/* Le repli quand l'autocomplétion ne donne rien : demander le numéro de rue,
   ou basculer en saisie libre. */
.wt-adresse-aide {
	display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
	padding: 10px 12px; border: 1px solid var(--wt-filet); border-radius: 10px;
	background: #fff; font-size: 12.5px; color: var(--wt-gris-t);
}
.wt-adresse-aide span { flex: 1 1 160px; }
.wt-page .wt-adresse-aide button {
	font: inherit; font-size: 12.5px; font-weight: 600; color: var(--wt-noir);
	text-decoration: underline; cursor: pointer; background: none; padding: 0;
}
.wt-page .wt-adresse-aide .wt-btn {
	flex: 1 1 100%; text-decoration: none; color: #fff;
}
/* v0.21 — Le verdict de zone se pose ICI, sous le champ d'adresse. Un simple
   état de recherche reste en gris ; un blocage prend la crème et le tan, et
   assez de place pour se lire. */
.wt-adresse-etat.est-bloquant {
	margin-top: 8px; padding: 8px 10px; border-radius: 10px; font-size: 12.5px;
	line-height: 1.45; background: var(--wt-creme); border: 1px solid var(--wt-tan);
}
.wt-option b { display: block; font-size: 15px; font-weight: 600; }
.wt-option small { display: block; margin-top: 2px; font-size: 13px; color: var(--wt-gris-t); }

/* ═══════════════════════════════════════════════════════════════════════
   LA LIGNE D'ADRESSE D'UN ÉTABLISSEMENT (0.25.2)
   ═══════════════════════════════════════════════════════════════════════
   Retour de Nicolas, 31/08 : « la ligne "adresse communiquée après
   confirmation" ne se distingue pas assez ». Elle sortait dans le MÊME gris
   et la MÊME taille que la description écrite par la pro, juste en dessous —
   deux lignes grises empilées, dont l'œil ne sait pas laquelle porte le fait
   et laquelle porte l'argument de vente.

   Ce n'est pas une question de nuance de gris : deux gris qui se distinguent
   assez pour être lus se distinguent aussi mal l'un de l'autre, et l'un des
   deux tombe sous le seuil de contraste. C'est la FORME qui sépare ici.
   L'adresse devient une pastille ; la description reste une ligne de texte.

   ⚠️ Le pictogramme est une image CSS (masque SVG en data-URI), pas un
   caractère : `wp-emoji-release.min.js` convertit les emoji du DOM en
   `<img class="emoji">` — y compris dans ce qui est injecté après coup — et
   nous avons déjà payé ce défaut deux fois (2.10.2 puis 2.10.3). Rien dans
   `content:` ne doit ressembler à un emoji. */
.wt-option small.wt-lieu-adresse {
	display: flex; align-items: flex-start; gap: 6px;
	margin-top: 6px; font-size: 12.5px; line-height: 1.35;
	color: var(--wt-noir);
}
/* La pastille est réservée au MASQUAGE. Une vraie adresse est une adresse :
   l'enfermer dans une pastille la ferait passer pour un statut, et une
   adresse longue s'y replierait sur deux lignes dans un ovale — laid et
   faux. Ce qui se met en pastille ici, c'est ce qui n'est PAS une adresse. */
.wt-option small.wt-lieu-adresse.est-masquee {
	display: inline-flex; align-items: center;
	margin-top: 7px; padding: 4px 11px 4px 9px;
	border-radius: 999px;
	background: var(--wt-creme); border: 1px solid var(--wt-tan);
	font-weight: 500;
}
.wt-option small.wt-lieu-adresse::before {
	content: ""; flex: 0 0 auto; width: 12px; height: 12px;
	background: currentColor;
	-webkit-mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M20%2010.5c0%206-8%2011.5-8%2011.5s-8-5.5-8-11.5a8%208%200%200%201%2016%200z'/%3E%3Ccircle%20cx='12'%20cy='10.2'%20r='2.9'/%3E%3C/svg%3E") center/contain no-repeat;
	        mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M20%2010.5c0%206-8%2011.5-8%2011.5s-8-5.5-8-11.5a8%208%200%200%201%2016%200z'/%3E%3Ccircle%20cx='12'%20cy='10.2'%20r='2.9'/%3E%3C/svg%3E") center/contain no-repeat;
}
/* Le cadenas dit ce que le texte seul ne disait pas : l'adresse est cachée
   VOLONTAIREMENT, elle ne manque pas. */
.wt-option small.wt-lieu-adresse.est-masquee::before {
	-webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Crect%20x='4'%20y='10.5'%20width='16'%20height='10.5'%20rx='2.5'/%3E%3Cpath%20d='M8%2010.5V7a4%204%200%200%201%208%200v3.5'/%3E%3C/svg%3E");
	        mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Crect%20x='4'%20y='10.5'%20width='16'%20height='10.5'%20rx='2.5'/%3E%3Cpath%20d='M8%2010.5V7a4%204%200%200%201%208%200v3.5'/%3E%3C/svg%3E");
}
/* Les mots de la pro : secondaires, et lisibles — `--wt-gris-t` (#5F5F63)
   tient 6,4:1 sur blanc, là où `--wt-gris` (#8A8A8A) tombe à 3,5:1. */
.wt-option small.wt-lieu-desc { margin-top: 5px; font-size: 12.5px; }


/* — créneaux — */
.wt-periode { padding: 2px 14px 8px; }
.wt-periode h5 { font-size: 14.5px; font-weight: 600; margin: 8px 0; }
.wt-slots { display: flex; flex-wrap: wrap; gap: 10px; }
/* ⚠️ 07/09 — Retour de Nicolas : « les créneaux horaires ne sont pas bien
   centrés dans les petits containers ». Cause : `padding: 13px 0 7px`, une
   asymétrie de 6 px conçue pour laisser respirer la pastille de prix
   AU-DESSOUS de l'horaire. Sur une pro sans frais de déplacement, il n'y a
   pas de pastille : l'heure se retrouvait seule, poussée vers le haut.
   Centrage réel en flex, et `min-height` pour que les créneaux avec et sans
   pastille gardent la même hauteur sur une ligne. */
.wt-page .wt-slot { background: var(--wt-gris-c); color: var(--wt-noir); border: 0; border-radius: 12px; width: 100px;
	min-height: 46px; padding: 8px 6px; text-align: center; font: inherit; font-size: 14.5px;
	font-weight: 500; cursor: pointer;
	display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6px; }
.wt-page .wt-slot .wt-frais { display: inline-block; margin-top: 0; background: var(--wt-tan);
	border-radius: 999px; font-size: 10px; padding: 1px 8px; color: #6b5b3e; }
.wt-page .wt-slot:active { background: var(--wt-noir); color: #fff; }
.wt-vide { color: #A9A9A9; font-style: italic; font-size: 13.5px; text-align: center; padding: 8px 0; }

/* 0.26 — le chiffre sous l'horaire n'est plus un supplément mais le TOTAL de
   ce créneau : il porte donc le poids d'un prix, pas d'une pastille discrète. */
.wt-page .wt-slot .wt-frais-total { background: var(--wt-creme); color: var(--wt-noir);
	font-size: 11.5px; font-weight: 600; padding: 1px 9px; }

/* Les deux notes de l'écran des créneaux. « Rien à payer » est le seul endroit
   du tunnel où l'on annonce une bonne nouvelle : elle a droit à sa couleur. */
.wt-note-prix, .wt-note-libre { margin: 0 16px 10px; font-size: 13px; text-align: center; }
.wt-note-prix { color: var(--wt-gris-t); }
.wt-note-libre { color: #1E7A4B; background: #EFF8F2; border-radius: 12px;
	padding: 9px 12px; font-weight: 500; }

/* 0.26 — la bande de rappel, sous le fil des étapes. Discrète : elle rassure,
   elle ne doit pas concurrencer le formulaire qu'elle surplombe. */
.wt-rappel { margin: 0 16px 12px; padding: 9px 12px; background: var(--wt-creme);
	border-radius: 12px; font-size: 12.5px; color: var(--wt-gris-t);
	text-align: center; line-height: 1.5; }
.wt-rappel b { color: var(--wt-noir); font-weight: 600; }
.wt-rappel i { font-style: normal; color: var(--wt-tan); margin: 0 2px; }
/* Parité 33 (phase 2) : alignée sur les champs (elle collait au bord). */
.wt-tel-note { text-align: left; margin: -4px 16px 12px; }
/* Parité 33 (B1) — navigateur intégré (Instagram, Facebook…) : l'explication
   remplace les boutons Google et Apple, l'e-mail reste juste en dessous. */
.wt-integre { margin: 0 16px 14px; padding: 11px 13px; background: var(--wt-creme);
	border-radius: 12px; font-size: 13.5px; color: var(--wt-noir); line-height: 1.5; }
.wt-integre p { margin: 0; }
.wt-integre .wt-lien { margin-top: 8px; }
.wt-integre .wt-mini { margin-top: 6px; }

/* — formulaires — */
.wt-champ { display: block; margin: 0 16px 13px; }
.wt-champ span { display: block; font-size: 12.5px; color: var(--wt-gris-t); margin-bottom: 6px; }
.wt-champ input, .wt-champ select {
	width: 100%; padding: 12px 14px; background: #fff; border: 1px solid #DBDBDB; border-radius: 12px;
	color: var(--wt-noir); font-family: inherit; font-size: 16px; min-height: 48px; box-sizing: border-box; }
.wt-champ input:focus, .wt-champ select:focus { outline: 2px solid var(--wt-noir); outline-offset: 1px; border-color: transparent; }
/* Parité 33 (B9) — l'indicatif à gauche du numéro, comme dans l'app. Le
   conteneur est un <span> (seul élément admis dans un <label>) : on annule
   donc le style des intitulés `.wt-champ span`. */
.wt-champ .wt-tel-ligne { display: flex; gap: 8px; margin: 0; font-size: inherit; color: inherit; }
.wt-champ .wt-tel-ligne select { flex: 0 0 auto; width: auto; padding: 12px 10px; }
.wt-champ .wt-tel-ligne input { flex: 1 1 auto; min-width: 0; }

/* Questions de prestation (v0.12) — mêmes gabarits que `.wt-champ` : c'est
   le même geste pour la cliente, il n'y a pas de raison que ça n'en ait pas
   l'air. `font-size: 16px` n'est pas décoratif : en dessous, iOS zoome
   automatiquement à la mise au point et le tunnel se retrouve décadré. */
.wt-question { margin: 0 16px 14px; }
.wt-question label { display: block; font-size: 13px; color: var(--wt-gris-t);
	margin-bottom: 6px; line-height: 1.35; }
.wt-question textarea {
	width: 100%; padding: 12px 14px; background: #fff; border: 1px solid #DBDBDB;
	border-radius: 12px; color: var(--wt-noir); font-family: inherit; font-size: 16px;
	line-height: 1.4; box-sizing: border-box; resize: vertical; min-height: 62px; }
.wt-question textarea:focus { outline: 2px solid var(--wt-noir); outline-offset: 1px;
	border-color: transparent; }
.wt-question small { display: block; text-align: left; margin: 6px 0 0; }
.wt-requis { color: var(--wt-erreur); }

/* Photo d'une question (v0.13) — le bouton reprend le gabarit du `+` des
   prestations : fond clair, bord fin, coin arrondi. Volontairement DISCRET :
   la photo est facultative dans la règle de l'app (texte OU photo), et un
   bouton noir plein la ferait passer pour l'action principale de l'écran. */
.wt-photo { margin-top: 8px; }
.wt-page .wt-photo-btn { display: inline-flex; align-items: center; gap: 7px;
	background: var(--wt-gris-c); border: 1px solid var(--wt-filet); border-radius: 999px;
	padding: 8px 15px; font-size: 13.5px; font-weight: 600; color: var(--wt-noir); cursor: pointer; }
.wt-photo-vue { position: relative; display: inline-block; margin-top: 4px; }
.wt-photo-vue img { display: block; width: 82px; height: 82px; object-fit: cover;
	border-radius: 12px; border: 1px solid var(--wt-filet); background: var(--wt-gris-c); }
/* La croix chevauche le coin de la vignette : à l'intérieur elle masquerait
   la photo, à l'extérieur elle décalerait la ligne. */
.wt-page .wt-photo-retirer { position: absolute; top: -7px; right: -7px; width: 24px; height: 24px;
	padding: 0; border-radius: 50%; background: var(--wt-noir); color: #fff; font-size: 12px;
	line-height: 1; cursor: pointer; display: grid; place-items: center;
	box-shadow: 0 1px 4px rgba(0,0,0,.25); }
.wt-photo-etat { display: block; margin-top: 6px; font-size: 12px; color: var(--wt-gris); }
.wt-photo-etat.est-ok { color: #1E7F4F; }
.wt-photo-etat.est-ko { color: var(--wt-erreur); }

/* Acompte (v0.14) — le champ de carte est un iframe servi par Stripe : on ne
   peut pas l'habiller de l'extérieur, seulement lui donner de l'air et lui
   passer une `appearance` à la construction (cf. reservation.js). */
#wt-carte { margin: 14px 16px 4px; min-height: 44px; }
.wt-mini { font-size: 11.5px; margin-top: 10px; }
/* Le détail de l'acompte reprend le gabarit du récapitulatif, sans sa marge
   basse : le champ de carte vient juste dessous et doit s'y rattacher. */
#wt-paiement-detail { margin-bottom: 4px; }
/* Retour du 22/08 : « le solde se règle… » était collé à la ligne en
   surbrillance juste au-dessus. Un filet pointillé + de l'air : la phrase
   est une INFORMATION sur la suite, pas une ligne du décompte. */
#wt-paiement-detail .wt-mini { margin-top: 14px; padding-top: 12px;
	border-top: 1px dashed var(--wt-filet); }

/* L'attente du champ de carte (v0.17) */
.wt-attente { display: flex; align-items: center; justify-content: center; gap: 9px;
	margin: 18px 16px 6px; padding: 16px 14px; border: 1px dashed var(--wt-filet);
	border-radius: 12px; background: var(--wt-gris-c);
	font-size: 13px; color: var(--wt-gris-t); }
.wt-attente[hidden] { display: none; }
/* Variante sombre du sablier : le blanc de `.wt-tourne` (fait pour les
   boutons noirs) serait invisible sur ce fond clair. */
.wt-tourne-sombre { display: inline-block; width: 15px; height: 15px; flex: 0 0 auto;
	border: 2px solid var(--wt-gris); border-top-color: transparent; border-radius: 50%;
	animation: wt-rotation .8s linear infinite; }

/* La bande « à régler en ligne » du récapitulatif : elle se détache des
   totaux (fond crème, filet haut) parce qu'elle ne dit pas la même chose —
   les totaux disent ce que coûte la prestation, celle-ci ce qui part
   maintenant de la carte. */
.wt-acompte { margin-top: 10px; padding-top: 10px; border-top: 1px dashed var(--wt-filet); }
.wt-acompte .wt-ligne b { font-size: 15px; }
.wt-acompte .wt-ligne span { color: var(--wt-gris-t); }

/* L'annonce d'acompte (v0.16) — ton informatif, pas alarmant : fond crème du
   thème, pas de rouge. Le rouge du tunnel est réservé aux erreurs, et un
   acompte n'en est pas une : c'est une condition, annoncée tôt pour qu'elle
   ne surprenne pas au moment de payer. */
.wt-acompte-note { margin: 0 16px 10px; padding: 10px 12px; border-radius: 10px;
	background: var(--wt-creme); border: 1px solid var(--wt-tan);
	font-size: 12.5px; line-height: 1.4; color: var(--wt-gris-t); text-align: left; }
.wt-acompte-note b { color: var(--wt-noir); font-weight: 600; }
/* Dans la feuille du panier, la note est déjà dans une boîte : pas de marge
   latérale, et un peu d'air au-dessus du bouton « Terminer la sélection ». */
#wt-panier-acompte .wt-acompte-note { margin: 10px 0 0; }
.wt-onglets { display: flex; gap: 8px; margin: 4px 16px 16px; }
/* Les trois onglets du catalogue (Prestations / Boutique / Cartes cadeaux) :
   mêmes chips segmentées que `shop_page`. Vides = masqués par le JS. */
.wt-onglets-cat { margin: 2px 14px 6px; }
.wt-onglets-cat:empty { display: none; }
.wt-onglets button { flex: 1; background: #EFEFEF; color: #9B9B9B; border: 0; border-radius: 999px;
	padding: 10px; font: inherit; font-size: 13.5px; cursor: pointer; }
.wt-onglets button.est-actif { background: var(--wt-noir); color: #fff; font-weight: 500; }

/* — barre du bas (dans la page) — */
/* Deux rangées, et ce n'est pas un choix esthétique : à 390 px, pilule +
   « Retour » + « Continuer » réclament ~413 px et la pilule se coupait en deux
   lignes. La pilule prend donc toute la largeur, les deux boutons se rangent
   dessous à droite. */
.wt-actions { position: sticky; bottom: 0; display: flex; align-items: center; gap: 10px;
	justify-content: flex-end; flex-wrap: wrap;
	padding: 10px 14px calc(12px + env(safe-area-inset-bottom, 0px));
	background: linear-gradient(to top, #fff 75%, rgba(255,255,255,0)); }
/* ⚠️ PLUS AUCUN BOUTON FANTÔME (demande de Nicolas, 20/08).
   Relevé sur `shop_page` le même jour : l'app, elle, met bien un « Retour » en
   texte nu à côté d'un « Suivant » plein — c'est donc un ÉCART VOULU, pas un
   oubli. Ne pas le « corriger » en revenant au texte seul sous prétexte de
   coller à l'app. Le secondaire est un bouton plein gris, même gabarit que le
   primaire, pour que les deux se touchent aussi facilement du pouce. */
.wt-page .wt-lien { background: var(--wt-gris-c); color: var(--wt-noir); border: 0;
	border-radius: 14px; padding: 14px 22px; font: inherit; font-size: 14.5px;
	font-weight: 500; cursor: pointer; }
.wt-page .wt-cumul { flex: 1 0 100%; display: flex; align-items: center; justify-content: center; gap: 8px;
	white-space: nowrap; font: inherit; cursor: pointer; border: 0; color: var(--wt-noir);
	background: var(--wt-tan); border-radius: 999px; padding: 13px 10px;
	font-size: 13.5px; font-weight: 500; min-height: 46px; }
.wt-page .wt-cumul:empty { visibility: hidden; }
.wt-page .wt-btn { background: var(--wt-noir); color: #fff; border: 0; border-radius: 14px;
	padding: 14px 22px; font: inherit; font-size: 14.5px; font-weight: 500; cursor: pointer; }
.wt-btn:disabled { background: #E4E4E4; color: #A5A5A5; cursor: not-allowed; }

/* — connexion Google — */
/* Bouton PLEIN blanc, comme la carte cadeau déployée de l'app : la consigne du
   20/08 est « toujours des boutons pleins », et le blanc est aussi ce que
   demandent les règles d'image de Google pour son bouton clair. Préfixé
   `.wt-page` (0,2,0) pour passer devant le filet anti-thème. */
.wt-page .wt-btn-google {
	display: flex; align-items: center; justify-content: center; gap: 10px;
	width: calc(100% - 32px); margin: 0 16px 4px;
	background: #fff; color: var(--wt-noir); border: 1px solid var(--wt-filet);
	border-radius: 14px; padding: 13px 18px;
	font: inherit; font-size: 14.5px; font-weight: 500; cursor: pointer;
	box-shadow: 0 2px 10px rgba(0,0,0,.10);
}
.wt-page .wt-btn-google:disabled { color: #A5A5A5; cursor: not-allowed; box-shadow: none; }
.wt-btn-google .wt-g { flex: 0 0 auto; }

/* Le séparateur « ou » : un filet de chaque côté, sans image ni pseudo-contenu
   décoratif lu par les lecteurs d'écran. */
.wt-ou { display: flex; align-items: center; gap: 12px; margin: 12px 16px 14px;
	color: var(--wt-gris-t); font-size: 12.5px; }
.wt-ou::before, .wt-ou::after { content: ""; flex: 1; height: 1px; background: var(--wt-filet); }
.wt-ou[hidden] { display: none; }

/* — messages — */
.wt-msg { margin: 10px 16px; border-radius: 12px; padding: 12px 14px; font-size: 13.5px; border: 1px solid; }
.wt-msg.est-ko { background: #FDF2F2; border-color: rgba(227,17,17,.28); color: #9B1C1C; }
.wt-msg.est-ok { background: var(--wt-creme); border-color: var(--wt-tan); color: var(--wt-noir); }
.wt-msg.est-note { background: var(--wt-gris-c); border-color: var(--wt-filet); color: var(--wt-gris-t); }

/* — récapitulatif — */
.wt-recap { margin: 10px 14px; border: 1px solid var(--wt-filet); border-radius: 12px; padding: 14px; background: #fff; }
.wt-recap .wt-lab { color: #9B9B9B; font-size: 12.5px; margin-top: 10px; }
.wt-recap .wt-lab:first-child { margin-top: 0; }
.wt-recap .wt-val { font-size: 14.5px; font-weight: 600; }
.wt-recap .wt-ligne { display: flex; justify-content: space-between; gap: 12px; padding: 3px 0; font-size: 14px; }
.wt-recap .wt-bande { background: var(--wt-gris-c); margin: 10px -14px; padding: 10px 14px;
	display: flex; justify-content: space-between; font-weight: 600; }
.wt-recap .wt-totaux { background: var(--wt-gris-c); margin: 0 -14px -14px; padding: 10px 14px 14px; }
.wt-recap .wt-totaux .wt-ligne { color: #8A8A8A; }
.wt-recap .wt-totaux .wt-ligne.grand { color: var(--wt-noir); font-weight: 700; font-size: 15px; }

/* — consentements (#wt-conditions est un .wt-options) — */
#wt-conditions .wt-option b { font-weight: 500; font-size: 13.5px; }
#wt-conditions .wt-option small { font-size: 12px; }
#wt-conditions a { color: var(--wt-noir); }

/* — fin — */
.wt-fin { text-align: center; padding: 26px 20px 10px; }
.wt-fin h3 { font-family: inherit; font-weight: 600; font-size: 22px; margin: 8px 0; }
.wt-fin .wt-sous { text-align: center; }
/* Parité 33 (phase 2) — le chemin vers la page du rendez-vous. */
.wt-fin-suivi { margin: 16px 0 6px; display: flex; flex-direction: column; align-items: center; gap: 8px; }
.wt-fin-suivi .wt-btn { text-decoration: none; display: inline-block; }
.wt-fin-suivi small { font-size: 12.5px; color: var(--wt-gris-t); max-width: 300px; }
.wt-appli { margin: 18px 14px 6px; border: 1px solid var(--wt-filet); border-radius: 14px;
	background: var(--wt-creme); padding: 16px 14px; text-align: center; }
.wt-appli b { display: block; font-size: 15px; margin-bottom: 4px; }
.wt-appli small { display: block; color: var(--wt-gris-t); font-size: 13px; margin-bottom: 12px; }
/* Les deux magasins, de même poids, côte à côte (retour du 22/08 : le lien
   « Aussi sur Google Play » ne se voyait pas). `flex-wrap` plutôt qu'une
   média query : sur un écran étroit les deux boutons passent l'un sous
   l'autre tout seuls, et gardent la même largeur qu'à deux. */
.wt-appli .wt-stores { display: flex; flex-wrap: wrap; gap: 10px; justify-content: center; }
/* ⚠️ `box-sizing: border-box` n'est PAS global dans cette feuille : sans lui,
   `flex-basis` et `max-width` portent sur la boîte de CONTENU, et les 28 px de
   padding s'ajoutent par-dessus. Mesuré le 22/08 : des boutons annoncés à
   220 px en occupaient 248, d'où deux lignes là où deux colonnes tenaient.
   Base à 140 px + `min-width: 0` : les deux boutons tiennent côte à côte dès
   ~310 px de large, c'est-à-dire sur tous les téléphones courants. */
.wt-appli .wt-store { box-sizing: border-box; flex: 1 1 140px; min-width: 0; max-width: 230px;
	display: flex; align-items: center; justify-content: center; gap: 9px;
	background: var(--wt-noir); color: #fff;
	border-radius: 12px; padding: 9px 12px; text-decoration: none; }
/* `nowrap` : sans lui, « Google Play » se coupait en deux sur un écran de
   320 px et le bouton doublait de hauteur. Avec, le flex préfère renvoyer le
   second bouton à la ligne — deux boutons pleine largeur, lisibles, plutôt
   que deux boutons hauts au texte cassé. */
.wt-appli .wt-store span { display: block; text-align: left; line-height: 1.15; white-space: nowrap; }
/* `!important` : `.wt-appli small` impose un `display:block` centré avec une
   marge basse, qui décollerait le nom du magasin de son intitulé. */
.wt-appli .wt-store small { display: block !important; color: rgba(255,255,255,.78);
	font-size: 10.5px; margin: 0 !important; letter-spacing: .01em; }
.wt-appli .wt-store b { display: block; color: #fff; font-size: 15px; margin: 0;
	font-weight: 600; letter-spacing: -.01em; }
.wt-logo-store { width: 22px; height: 22px; flex: 0 0 auto; }
/* Sur un téléphone étroit (360 px et moins), le bloc perdait 96 px en marges
   et paddings empilés — `.wt-fin` (20+20), `.wt-appli` (14+14 de marge et
   14+14 de padding) —, et les deux boutons ne tenaient plus côte à côte à
   3 px près. On récupère ces pixels ici plutôt que de rétrécir le texte des
   magasins, qui doit rester lisible. */
@media (max-width: 420px) {
	.wt-fin { padding-left: 12px; padding-right: 12px; }
	.wt-appli { margin-left: 8px; margin-right: 8px; padding-left: 10px; padding-right: 10px; }
	.wt-appli .wt-stores { gap: 8px; }
	.wt-appli .wt-store { flex-basis: 120px; padding-left: 10px; padding-right: 10px; gap: 8px; }
}

/* — panier dépliable : la feuille « Récapitulatif » de l'app —
   `position: fixed` s'ancre ici sur .wt-page (elle porte un transform, qui
   fait d'elle le bloc conteneur) : plein écran sur mobile, bas du panneau
   sur desktop — exactement ce qu'on veut, sans média query. */
.wt-panier-voile { position: fixed; inset: 0; z-index: 110; background: rgba(0,0,0,.4); }
/* Dialogue CENTRÉ (20/08) : en feuille du bas, un panier de 3-4 lignes
   laissait une bande vide sous le total et rognait le titre en haut. Centré,
   la boîte fait la taille de son contenu — ce qui est justement ce qu'on veut
   pour un récapitulatif dont la longueur varie. */
.wt-panier-feuille { position: fixed; left: 50%; top: 50%; transform: translate(-50%, -50%);
	z-index: 111; background: #fff; width: min(92%, 420px);
	border-radius: 18px; padding: 14px 16px 16px;
	max-height: 78%; overflow-y: auto; box-shadow: 0 24px 60px rgba(0,0,0,.28); }
.wt-page .wt-panier-croix { position: absolute; right: 10px; top: 10px; }
.wt-panier-feuille h4 { font-family: inherit;
	font-size: 17px; font-weight: 600; text-align: center; margin: 0 0 10px; }
.wt-panier-ligne { display: flex; align-items: center; gap: 10px; padding: 9px 0;
	border-bottom: 1px solid var(--wt-filet); font-size: 14.5px; }
.wt-panier-ligne .wt-pl-titre { flex: 1; min-width: 0; }
.wt-page .wt-pl-retirer { width: 28px; height: 28px; padding: 0; border: 1.5px solid var(--wt-filet);
	border-radius: 50%; background: #fff; color: var(--wt-noir); font-size: 12px;
	cursor: pointer; display: grid; place-items: center; flex: 0 0 auto; }
.wt-panier-total { display: flex; justify-content: space-between; padding: 12px 0;
	font-weight: 700; font-size: 15.5px; }
.wt-page .wt-panier-fin { display: block; width: 100%; }

/* — signal bref, l'équivalent de la SnackBar de l'app — */
.wt-signal {
	position: fixed; left: 50%; bottom: 84px; transform: translate(-50%, 12px);
	background: #1A1A1A; color: #fff; border-radius: 10px; padding: 11px 18px;
	font-size: 13.5px; max-width: 84%; text-align: center; pointer-events: none;
	opacity: 0; transition: opacity .18s ease, transform .18s ease; z-index: 120;
}
.wt-signal.est-vu { opacity: 1; transform: translate(-50%, 0); }

/* — journal (?tunnel_debug=1) — */
.wt-journal { margin: 14px; }
.wt-journal pre { background: #111; color: #D8DEE9; border-radius: 12px; padding: 12px; font-size: 11px;
	line-height: 1.5; max-height: 220px; overflow: auto; margin: 0; white-space: pre-wrap; word-break: break-word; }
.wt-journal .j-ok { color: #8EE0B4; } .wt-journal .j-ko { color: #FF9A8F; } .wt-journal .j-app { color: #8AB4FF; }

.wt-remplace { display: none !important; }

/* 0.28 — la barre du lanceur avant le verdict du serveur. Elle est dans le
   DOM dès le chargement (les branchements en dépendent) mais elle ne dit
   RIEN tant qu'on ne sait pas si la boutique réserve vraiment. */
.wt-lanceur.wt-avant-verdict { display: none !important; }

/* La section « Réserver avec X » du thème, une fois le tunnel monté : elle ne
   sert plus qu'à trois choses invisibles — point de montage, source du prénom,
   ancre du repli. On masque donc son CONTENU, jamais l'élément lui-même
   (`#rdv` disparu = tunnel non monté du tout, cf. reservation.js:28). */
.wt-monte > * { display: none !important; }
.wt-monte { padding: 0 !important; margin: 0 !important; background: none !important; }

/* ⭐ 0.28 — L'EXCEPTION QUI MANQUAIT : le bandeau de retour du formulaire de
   demande. `capture_lead_web_v2` renvoie la visiteuse sur `?demande=envoyee#rdv`
   et le thème rend la confirmation À L'INTÉRIEUR de `#rdv` — donc la règle
   ci-dessus la masquait. Conséquence, depuis la Phase 4D : sur une fiche
   RÉSERVABLE, une femme qui envoyait sa demande depuis le bloc « Vous ne
   trouvez pas votre créneau ? » revenait sur une page où rien, nulle part, ne
   lui disait que c'était parti. Elle recommençait, ou elle partait.
   Le bandeau reste visible, et la carte retrouve ses marges quand il est là. */
.wt-monte > .wp-bandeau { display: block !important; }
.wt-monte:has(> .wp-bandeau) { padding: 20px 24px !important; background: var(--welcome-creme, #FAF6F1) !important; }

/* ═══════════ COHABITATION AVEC COMPLIANZ ═══════════
   Le bouton flottant « Gérer le consentement » recouvrait le lanceur (vu
   mobile 20/08, navigateur Messenger). On ne le SUPPRIME pas — c'est
   l'affordance RGPD de retrait du consentement — on le remonte au-dessus de
   la barre, et on le masque quand la page de résa est ouverte : son z-index
   (9998) passerait sinon PAR-DESSUS le tunnel (z 100).
   ⚠️ 0.28 — CETTE RÈGLE ÉTAIT PORTÉE PAR `body` SEUL, et son commentaire
   d'origine disait « cette feuille n'est chargée que sur les fiches à
   tunnel ». Ce n'est plus vrai : depuis 0.28 elle est chargée sur les ~595
   fiches. Telle quelle, elle aurait remonté le bouton de consentement de
   96 px sur 500 pages où aucun lanceur ne le gêne. Elle est donc conditionnée
   au MONTAGE RÉEL du tunnel (`wt-tunnel-monte`, posé par `poserDansLaPage`). */
body.wt-tunnel-monte .cmplz-manage-consent { bottom: 96px !important; }
body.wt-resa-ouverte .cmplz-manage-consent { display: none !important; }

/* ═══════════ QUE L'ATTENTE SE VOIE (20/08) ═══════════
   Connexion (~5 s) et recherche de créneaux (balayage de 14 jours) sont les
   deux temps morts du parcours. Sans repère, la cliente croit à un blocage. */
.wt-tourne { display: inline-block; width: 14px; height: 14px; margin-right: 8px;
	vertical-align: -2px; border: 2px solid currentColor; border-right-color: transparent;
	border-radius: 50%; animation: wt-rotation .7s linear infinite; }
@keyframes wt-rotation { to { transform: rotate(360deg); } }

/* Squelette des créneaux : la forme de ce qui arrive, pas un sablier. */
.wt-squelette { padding: 4px 14px 8px; }
.wt-sq-jour { display: block; height: 46px; border-radius: 12px; margin: 8px 0;
	background: var(--wt-gris-c); animation: wt-pulse 1.2s ease-in-out infinite; }
.wt-sq-chips { display: flex; flex-wrap: wrap; gap: 10px; margin-bottom: 10px; }
.wt-sq-chips i { display: block; width: 100px; height: 52px; border-radius: 12px;
	background: var(--wt-gris-c); animation: wt-pulse 1.2s ease-in-out infinite; }
.wt-sq-chips i:nth-child(2) { animation-delay: .15s; }
.wt-sq-chips i:nth-child(3) { animation-delay: .3s; }
.wt-sq-chips i:nth-child(4) { animation-delay: .45s; }
@keyframes wt-pulse { 0%,100% { opacity: 1; } 50% { opacity: .45; } }

/* ── v0.19 — QUAND IL N'Y A RIEN ────────────────────────────────────────
   Le rouge reste réservé à l'erreur (voir l'en-tête) : « aucun créneau »
   n'est pas une panne, c'est une information. D'où la crème et le tan, la
   même paire que les cartes de lieu choisies. */

/* L'avertissement porté par l'écran du lieu, avant le catalogue. */
.wt-dispo-alerte {
	margin: 0 16px 12px; padding: 10px 12px; border-radius: 12px;
	background: var(--wt-creme); border: 1px solid var(--wt-tan);
	color: var(--wt-gris-t); font-size: 13px; line-height: 1.45; text-align: left;
}

/* v0.20 — Deux tons pour la ligne de l'écran du lieu : une INFORMATION
   (les frais de déplacement, alors qu'il reste de la place) reste discrète ;
   un BLOCAGE (hors zone, agenda complet) prend la crème et le tan, comme les
   cartes de lieu choisies. Le rouge reste réservé à l'erreur. */
.wt-dispo-alerte { background: var(--wt-gris-c); border-color: var(--wt-filet); }
.wt-dispo-alerte.est-bloquant { background: var(--wt-creme); border-color: var(--wt-tan); }

/* L'écran des créneaux quand la sonde revient vide. */
.wt-rien { margin: 4px 14px 8px; padding: 18px 16px; border-radius: 12px;
	background: var(--wt-creme); border: 1px solid var(--wt-tan); text-align: center; }
.wt-rien b { display: block; font-size: 15px; font-weight: 600; color: var(--wt-noir); }
.wt-rien p { margin: 8px 0 0; font-size: 13.5px; line-height: 1.5; color: var(--wt-gris-t); }
.wt-rien-actions { display: flex; flex-direction: column; align-items: center;
	gap: 6px; margin-top: 16px; }
.wt-page .wt-rien-actions .wt-btn { width: 100%; max-width: 260px; }

/* Respect de « je ne veux pas d'animations » (réglage système). */
@media (prefers-reduced-motion: reduce) {
	.wt-tourne, .wt-tourne-sombre, .wt-sq-jour, .wt-sq-chips i { animation: none; }
}


/* ═══════════════════════════════════════════════════════════════════════
   LES EMOJI DU CONTENU DES PROS (0.25.1)
   ═══════════════════════════════════════════════════════════════════════
   Les descriptions de lieux et de prestations sont saisies par les pros et
   contiennent des emoji. `wp-emoji-release.min.js` les remplace par des
   <img class="emoji"> — y compris dans la modale, qu'il observe et convertit
   après son injection. La feuille WordPress qui leur donnait leur taille est
   dequeuée sur ce site depuis le 31/08 : sans la règle ci-dessous, un emoji
   de description s'affiche à SA TAILLE NATURELLE. Relevé à 307 px de large
   au milieu de l'écran « Où souhaitez-vous être servi ? ».
   Le tunnel porte sa propre copie pour ne dépendre d'aucune feuille de page.
   ⚠️ BLOC IDENTIQUE dans welcome-rdv-child/assets/pro.css — toute
   modification doit être reportée.
   ═══════════════════════════════════════════════════════════════════════ */
/* `.wt-page` est le conteneur racine de la modale — RELEVÉ dans le DOM en
   production, pas deviné : `div.wt-page > section#wt-e0 > … > img.emoji`.
   J'avais d'abord ajouté `.wt-feuille` et `#wt-modale`, qui n'existent pas. */
.wt-page img.emoji,
.wt-page img.wp-smiley {
	display: inline !important;
	width: 1em !important;
	height: 1em !important;
	margin: 0 .07em !important;
	padding: 0 !important;
	border: none !important;
	box-shadow: none !important;
	background: none !important;
	vertical-align: -.1em !important;
}

/* ═══════════ LES CONDITIONS ÉCRITES PAR LA PRO (0.27) ═══════════
   Elles vivent au-dessus des quatre documents de plateforme, sur l'écran
   « Conditions ». Encadrées et titrées à son prénom : la cliente doit voir
   d'un coup d'œil que ce qu'elle accepte là vient de la professionnelle,
   pas de Welcome. */
.wt-condpro { margin: 0 0 20px; padding: 14px 14px 4px;
	background: var(--wt-creme); border: 1px solid var(--wt-filet);
	border-radius: 12px; }
.wt-condpro__titre { margin: 0 0 12px; font-size: 14px; font-weight: 600;
	color: var(--wt-noir); }
.wt-condpro__item + .wt-condpro__item { margin-top: 16px; padding-top: 16px;
	border-top: 1px dashed var(--wt-tan); }
.wt-condpro__nom { margin: 0 0 7px; font-size: 13px; font-weight: 600;
	color: var(--wt-noir); }
/* ⚠️ Le texte est libre et va jusqu'à 11 855 signes en base. Sans cette
   boîte défilante, le plus long pousse la case à cocher hors de l'écran :
   la cliente ne peut plus réserver et ne comprend pas pourquoi.
   `pre-wrap` conserve les retours à la ligne de la pro — ses conditions
   sont presque toujours écrites en liste. */
.wt-condpro__texte { max-height: 190px; overflow-y: auto; margin: 0 0 4px;
	padding: 10px 12px; background: #fff; border: 1px solid var(--wt-filet);
	border-radius: 10px; font-size: 13.5px; line-height: 1.5;
	white-space: pre-wrap; overflow-wrap: anywhere; color: var(--wt-noir);
	/* ⚠️ Sur la capture du 07/09, le texte se coupait au milieu d'une phrase
	   SANS aucun signe qu'il continuait — Chromium masque ses ascenseurs tant
	   qu'on ne survole pas. On demandait donc d'accepter des conditions dont
	   la fin était invisible. L'ascenseur est rendu permanent, et un mot sous
	   la boîte le dit quand il y a vraiment de la suite (voir `est-defilant`). */
	scrollbar-width: thin; scrollbar-color: var(--wt-tan) transparent; }
.wt-condpro__texte::-webkit-scrollbar { width: 9px; }
.wt-condpro__texte::-webkit-scrollbar-thumb { background: var(--wt-tan);
	border-radius: 999px; border: 2px solid #fff; }
.wt-condpro__suite { margin: 0 0 10px; font-size: 12px; color: var(--wt-gris-t);
	display: none; }
.wt-condpro__item.est-defilant .wt-condpro__suite { display: block; }
.wt-condpro__texte:focus-visible { outline: 2px solid var(--wt-noir); outline-offset: 1px; }
.wt-condpro .wt-option { background: #fff; }

/* Parité 33 (phase 2, chantier 41 B3) : « Conditions de … acceptées le … ·
   Voir », la ligne verte du récapitulatif de l'app (fond #E7F5EC, encre
   #166534, `ConditionsAccepteesWidget`). */
.wt-cond-ok { display: flex; align-items: center; gap: 10px; margin: 14px 0 0;
	padding: 10px 6px 10px 12px; background: #E7F5EC; color: #166534;
	border-radius: 14px; font-size: 13px; font-weight: 500; line-height: 1.4; }
.wt-cond-ok svg { flex: 0 0 auto; }
.wt-cond-ok__texte { flex: 1; min-width: 0; }
.wt-page .wt-cond-ok__voir { flex: 0 0 auto; min-width: 44px; min-height: 36px;
	padding: 0 8px; border: 0; background: none; color: #166534; font: inherit;
	font-size: 13px; font-weight: 600; text-decoration: underline;
	text-underline-offset: 2px; cursor: pointer; }

/* La règle d'annulation que la pro n'a PAS rendue obligatoire : information
   au récapitulatif, sans case. Même choix que l'application, qui la montre
   dans « À propos » sans rien demander. */
.wt-annul-info { margin: 14px 0 0; padding: 12px 14px;
	background: var(--wt-creme); border-radius: 10px; }
.wt-annul-info b { display: block; margin: 0 0 5px; font-size: 13px; }
.wt-annul-info p { margin: 0; font-size: 13px; line-height: 1.5;
	white-space: pre-wrap; overflow-wrap: anywhere; color: var(--wt-gris-t); }

/* ═══ 21/09 — parité fiche / application (0.29.0) : « Voir plus » des
   prestations (T2), feuille « Infos & photos » (T3), commentaire libre (T4),
   code promo (T5), « Voir plus de créneaux » (T6), message d'accueil (S4),
   bouton Apple (T7). ═══ */
.wt-page .wt-voirplus { display: flex; align-items: center; gap: 5px; margin-top: 4px; padding: 0; width: max-content;
	border: 0; background: none; color: var(--wt-noir); font: inherit; font-size: 12.5px;
	text-decoration: underline; text-underline-offset: 2px; cursor: pointer; }
.wt-presta-detail { padding: 0 14px 12px; }
.wt-presta-desc { margin: 0 0 8px; font-size: 13.5px; color: var(--wt-gris); line-height: 1.5;
	white-space: pre-line; }
.wt-mini-galerie, .wt-lieu-galerie { display: flex; gap: 8px; overflow-x: auto; padding-bottom: 4px; }
.wt-mini-photo { flex: 0 0 auto; width: 60px; height: 60px; border-radius: 8px; object-fit: cover;
	background: var(--wt-gris-c); cursor: zoom-in; }
.wt-lieu-galerie .wt-mini-photo { width: 75px; height: 75px; }
.wt-vue { position: fixed; inset: 0; z-index: 130; background: rgba(0,0,0,.92); display: grid;
	place-items: center; cursor: zoom-out; }
.wt-vue img { max-width: 96vw; max-height: 92vh; border-radius: 10px; }
.wt-page .wt-lieu-infos { display: block; margin: -4px 0 6px 14px; padding: 0; border: 0; background: none;
	font: inherit; font-size: 13px; color: var(--wt-noir); text-decoration: underline;
	text-underline-offset: 2px; cursor: pointer; }
.wt-feuille-lab { margin: 12px 0 2px !important; font-size: 12.5px !important; font-weight: 600;
	color: var(--wt-gris-t); }
#wt-feuille-corps p { margin: 0 0 6px; font-size: 14px; line-height: 1.5; white-space: pre-line; text-align: left; }
/* Parité 33 (phase 2) : une feuille sans titre (fenêtre « espace pro ») ;
   la croix de fermeture ne doit pas mordre sur le texte. */
#wt-feuille-titre[hidden] + #wt-feuille-corps { padding-top: 26px; }
#wt-feuille-corps .wt-lieu-galerie { margin-bottom: 10px; }
.wt-code { margin: 14px 0 0; }
.wt-code .wt-champ { margin: 0; }
.wt-code-ligne { display: flex; gap: 8px; }
.wt-code-ligne input { flex: 1; min-width: 0; text-transform: uppercase; }
/* 0.30.1 — le sablier prend la place de l'ancien bouton « Appliquer ». */
.wt-code-etat { flex: 0 0 auto; display: flex; align-items: center; padding: 0 2px; }
.wt-code-etat[hidden] { display: none; }
.wt-code.est-applique { display: flex; justify-content: space-between; align-items: center; gap: 10px;
	padding: 10px 14px; border-radius: 12px; background: var(--wt-creme); font-size: 14px; }
.wt-commentaire { margin: 12px 0 0; }
.wt-commentaire .wt-champ { margin: 0; }
.wt-commentaire textarea { width: 100%; padding: 12px 14px; background: #fff; border: 1px solid #DBDBDB;
	border-radius: 12px; color: var(--wt-noir); font-family: inherit; font-size: 16px;
	box-sizing: border-box; resize: vertical; }
.wt-commentaire textarea:focus { outline: 2px solid var(--wt-noir); outline-offset: 1px; border-color: transparent; }
.wt-actions-plus { justify-content: center; padding-top: 0; }
/* Parité 33 (phase 2, chantier 41 B2) : Apple plein, Google clair, comme
   l'app (`_BoutonFournisseur`, `plein: true` pour Apple). */
.wt-page .wt-btn-apple { background: #000; color: #fff; border-color: #000; }
.wt-btn-apple svg { color: #fff; }
.wt-page .wt-btn-apple:disabled { background: #3a3a3a; color: #d0d0d0; }
/* Mot de passe : une ligne champ + œil ; message sous chaque champ. */
.wt-champ .wt-mdp-ligne { display: flex; gap: 8px; margin: 0; font-size: inherit; color: inherit; }
.wt-champ .wt-mdp-ligne input { flex: 1 1 auto; min-width: 0; }
.wt-page .wt-oeil { flex: 0 0 auto; width: 48px; min-height: 48px; padding: 0; display: grid;
	place-items: center; background: #fff; border: 1px solid #DBDBDB; border-radius: 12px;
	color: var(--wt-noir); cursor: pointer; }
.wt-page .wt-oeil:focus-visible { outline: 2px solid var(--wt-noir); outline-offset: 1px; }
.wt-champ .wt-err-champ { margin: 6px 0 0; color: var(--wt-erreur); font-size: 12.5px; }
.wt-champ .wt-aide-champ { margin: 6px 0 0; color: var(--wt-gris-t); font-size: 12px; }
.wt-astuce { margin: 2px 16px 10px; text-align: center; font-size: 13px; color: var(--wt-gris-t); }
.wt-liens-legaux { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px 14px;
	margin: 6px 16px 14px; font-size: 12px; }
.wt-liens-legaux a { color: var(--wt-gris-t); text-decoration: underline; text-underline-offset: 2px; }
.wt-feuille-info { text-align: center !important; font-weight: 500; }
/* Le prix d'une ligne du récap ne se coupe pas (« à partir de 60 € »). */
.wt-recap .wt-ligne > b { white-space: nowrap; flex: 0 0 auto; margin-left: 10px; }

/* ═══ 24/09 — vérification du numéro (0.30.0) : renvoi du code et aide,
   « mot de passe oublié », feuille « numéro déjà utilisé ». Les liens en
   texte sont l'exception à « toujours des boutons pleins » : ce sont des
   actions secondaires sous un champ, comme dans l'app (TextButton). ═══ */
.wt-page .wt-lien-texte { background: none; border: 0; padding: 0; margin: 0; font: inherit;
	font-size: 13px; font-weight: 500; color: var(--wt-noir); text-decoration: underline;
	text-underline-offset: 2px; cursor: pointer; }
.wt-page .wt-lien-texte:disabled { color: var(--wt-gris); text-decoration: none; cursor: default; }
.wt-mdp-oublie { margin: -6px 16px 12px; text-align: right; }
.wt-mdp-oublie[hidden] { display: none; }
.wt-renvoi { margin: -4px 16px 10px; font-size: 13px; color: var(--wt-gris-t); }
.wt-renvoi[hidden] { display: none; }
/* Parité 33 (A06) : le compte connecté au récapitulatif. */
.wt-compte-actif { margin: 14px 0 0; font-size: 13px; color: var(--wt-gris-t); }
.wt-rien-recu { margin: 0 16px 12px; border: 1px solid var(--wt-filet); border-radius: 12px;
	padding: 10px 14px; font-size: 13px; color: var(--wt-gris-t); background: #fff; }
.wt-rien-recu[hidden] { display: none; }
.wt-rien-recu summary { cursor: pointer; font-weight: 500; color: var(--wt-noir); }
.wt-rien-recu ul { margin: 8px 0 0; padding-left: 18px; }
.wt-rien-recu li { margin: 4px 0; line-height: 1.45; }
.wt-rien-recu p { margin: 10px 0 0; }
.wt-rien-recu a { color: var(--wt-noir); font-weight: 500; }
.wt-conflit { margin: 4px 16px 12px; border: 1px solid var(--wt-tan); background: var(--wt-creme);
	border-radius: 14px; padding: 14px; }
.wt-conflit[hidden] { display: none; }
.wt-conflit h4 { margin: 0 0 6px; font-size: 15px; font-weight: 600; color: var(--wt-noir); }
.wt-conflit p { margin: 0 0 6px; font-size: 13.5px; line-height: 1.45; color: var(--wt-noir); }
.wt-conflit .wt-conflit-note { color: var(--wt-gris-t); font-size: 13px; }
.wt-conflit-actions { display: flex; flex-direction: column; gap: 8px; margin-top: 10px; }
.wt-page .wt-conflit-actions .wt-btn, .wt-page .wt-conflit-actions .wt-lien,
.wt-page .wt-conflit-actions .wt-btn-google { width: 100%; margin: 0; box-sizing: border-box; }
.wt-conflit-actions .wt-conflit-aide { align-self: center; margin-top: 4px; }

/* ═══ 24/09 — récapitulatif (0.30.1) : le bloc gris des totaux affleure le
   bas de la carte par une marge basse NÉGATIVE (−14 px), qui annulait la marge
   haute du bloc qui le suit : « Code promo, carte cadeau… » collait au gris
   (vu par Nicolas). Les marges se fusionnent en s'additionnant : 30 − 14 = 16. */
.wt-recap .wt-totaux + .wt-code { margin-top: 30px; }
.wt-recap .wt-totaux + .wt-commentaire { margin-top: 28px; }

/* ═════════════════════════════════════════════════════════════════════
   Parité 33 (phase 4, L39-L55) — L'ÉTAPE « LIEU » DE L'APP
   ═════════════════════════════════════════════════════════════════════
   Trois sections séparées par « Ou », un bouton par lieu ; les lieux en
   établissement repliés sous « Voir lieu(x) ». */
.wt-option.wt-sect { flex-direction: column; align-items: stretch; gap: 10px; cursor: default; }
.wt-option.wt-sect > small { margin-top: -6px; }
.wt-page .wt-choisir { align-self: flex-start; padding: 10px 18px; font-size: 14px; border-radius: 12px; }
.wt-page .wt-sect-tete { display: flex; align-items: center; justify-content: space-between; gap: 10px;
	width: 100%; padding: 0; margin: 0; border: 0; background: none; font: inherit; color: inherit;
	text-align: left; cursor: pointer; }
.wt-sect-tete b { display: block; font-size: 15px; font-weight: 600; }
.wt-voir-lieux { flex: 0 0 auto; font-size: 13px; font-weight: 500; padding: 6px 12px; border-radius: 999px;
	background: var(--wt-tan); color: var(--wt-noir); }
.wt-sect-tete[aria-expanded="true"] .wt-voir-lieux { background: var(--wt-noir); color: #fff; }
.wt-lieux-liste { display: grid; gap: 10px; }
.wt-lieux-liste[hidden] { display: none; }
.wt-lieu-carte { display: flex; gap: 12px; align-items: flex-start; padding: 12px; border-radius: 12px;
	border: 1px solid var(--wt-filet); background: #fff; min-width: 0; }
.wt-lieu-carte.est-choisie { border-color: var(--wt-noir); background: var(--wt-creme); }
.wt-lieu-carte .wt-lieu-photo { width: 75px; height: 75px; }
.wt-lieu-carte img.wt-lieu-photo { cursor: zoom-in; }
.wt-lieu-texte { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; align-items: flex-start; }
.wt-lieu-texte b { display: block; font-size: 15px; font-weight: 600; overflow-wrap: anywhere; }
.wt-lieu-texte small { display: block; margin-top: 2px; font-size: 13px; color: var(--wt-gris-t); overflow-wrap: anywhere; }
.wt-lieu-texte small.wt-lieu-km { margin: 0 0 2px; font-size: 12.5px; }
.wt-lieu-texte small.wt-lieu-km[hidden] { display: none; }
.wt-page .wt-lieu-carte .wt-lieu-infos { margin: 6px 0 0; }
.wt-lieu-carte .wt-choisir { flex: 0 0 auto; align-self: center; }
.wt-lieu-texte small.wt-lieu-adresse { display: flex; align-items: flex-start; gap: 6px; margin-top: 6px;
	font-size: 12.5px; line-height: 1.35; color: var(--wt-noir); }
.wt-lieu-texte small.wt-lieu-adresse.est-masquee { display: inline-flex; align-items: center; margin-top: 7px;
	padding: 4px 11px 4px 9px; border-radius: 999px; background: var(--wt-creme);
	border: 1px solid var(--wt-tan); font-weight: 500; }
#wt-b0[hidden] { display: none; }
#wt-alerte-cat:empty { display: none; }
#wt-alerte-cat .wt-msg { margin: 10px 14px 0; }

/* Parité 33 (L72) — la croix d'effacement du champ d'adresse. */
.wt-adresse-champ { position: relative; }
.wt-adresse-champ input { padding-right: 44px; }
.wt-page .wt-adresse-effacer { position: absolute; right: 8px; top: 50%; transform: translateY(-50%);
	width: 30px; height: 30px; padding: 0; border: 0; border-radius: 50%; cursor: pointer;
	background: var(--wt-gris-c); color: var(--wt-noir); font: inherit; font-size: 14px; line-height: 30px; }
.wt-adresse-effacer[hidden] { display: none; }
/* Parité 33 (L08) — la panne dite sur la fiche, au-dessus du bouton d'origine. */
.wt-panne { margin: 0 0 12px; padding: 10px 12px; border-radius: 10px; font-size: 14px; line-height: 1.45;
	background: #FFF4E5; color: #5C3B00; }
.wt-panne-reessayer { padding: 0; border: 0; background: none; font: inherit; color: inherit;
	text-decoration: underline; cursor: pointer; }

/* Parité 33 (phase 4, lot 2) — catalogue. */
.wt-presta-desc { white-space: pre-line; }
.wt-vign[data-full] { cursor: zoom-in; }
.wt-carte-desc { margin: -2px 14px 14px; font-size: 13px; line-height: 1.45; color: var(--wt-gris-t);
	white-space: pre-line; }
.wt-panier-compte { margin: -4px 0 10px; font-size: 13px; color: var(--wt-gris-t); }
.wt-panier-groupe { margin: 12px 0 4px; font-size: 12.5px; font-weight: 600; color: var(--wt-gris-t);
	text-transform: none; }

/* Parité 33 (phase 4, lot 4) — questions et conditions. */
.wt-requis-msg { display: block; margin-top: 4px; font-size: 12.5px; color: var(--wt-erreur); }
.wt-requis-msg[hidden] { display: none; }
.wt-photo-vue img { cursor: zoom-in; }
.wt-cond-section { margin: 6px 2px 0; font-size: 13px; font-weight: 600; color: var(--wt-gris-t); }
.wt-cond-lire { display: inline-block; margin-top: 4px; font-size: 13px; color: var(--wt-noir);
	text-decoration: underline; text-underline-offset: 2px; }
.wt-page .wt-cond-aide-bouton { display: inline-block; margin-top: 4px; font-size: 13px; }
.wt-cond-aide[hidden] { display: none; }

/* Parité 33 (phase 4, lot 5) — compte. */
.wt-champ select { width: 100%; padding: 12px 14px; border: 1px solid var(--wt-filet); border-radius: 10px;
	background: #fff; font: inherit; color: var(--wt-noir); }
.wt-aide-numero { margin-top: 4px; }
.wt-aide-numero a { color: var(--wt-noir); text-decoration: underline; text-underline-offset: 2px; }
.wt-compte-actif .wt-val { margin-top: 2px; }
.wt-compte-actif p { margin: 6px 0 0; }

/* Parité 33 (phase 4, lot 6) — récapitulatif. */
.wt-recap-groupe { margin: 10px 0 2px; font-size: 12.5px; font-weight: 600; color: var(--wt-gris-t); }
.wt-recap-photo { display: block; width: 60px; height: 60px; margin: 6px 0; border-radius: 10px;
	object-fit: cover; cursor: zoom-in; border: 1px solid var(--wt-filet); }
.wt-page .wt-recap-infos { margin: 2px 0 8px; }
.wt-sous-b6 { margin: 6px 14px 0; text-align: right; color: var(--wt-gris-t); }
.wt-sous-b6:empty { display: none; }
#wt-code-saisie { text-transform: uppercase; }
#wt-feuille-corps .wt-champ textarea { width: 100%; box-sizing: border-box; padding: 10px 12px; font: inherit;
	font-size: 15px; border: 1px solid var(--wt-filet); border-radius: 10px; background: #fff; color: var(--wt-noir); }
.wt-page .wt-panier-fin.est-secondaire { background: var(--wt-gris-c); color: var(--wt-noir); }
#wt-comm-ajouter { width: 100%; margin-top: 4px; }

/* ═════════════════════════════════════════════════════════════════════
   0.32.0 (08/10) — REVUE DU DESIGN, demandée par Nicolas sur iPhone
   (navigateur de Messenger) : « les cards sont incompréhensibles, les
   boutons décalés », « la croix du dialogue est décalée et n'entre pas bien
   dedans », « le bouton Retour devrait être figé en bas à gauche tout le
   long du process ». Chaque écran a été capturé avant et après, au format
   iPhone, sur la vraie fiche de test : `bancs/navigateur/maquette-site.mjs`.
   Cette section vient en DERNIER : à spécificité égale, elle l'emporte.
   ═════════════════════════════════════════════════════════════════════ */

/* 1. LE PANNEAU EN COLONNE : l'écran affiché occupe toute la hauteur, la
   barre du bas se pose donc en bas de l'écran même quand le contenu est
   court (elle flottait sous le contenu, au milieu de la page). Sur
   ordinateur, le panneau épouse son contenu (hauteur auto) : rien ne change. */
.wt-page { display: flex; flex-direction: column; }
.wt-page > * { flex: 0 0 auto; min-width: 0; }
.wt-page > .wt-ecran.est-visible { display: flex; flex-direction: column; flex: 1 0 auto; }
.wt-ecran.est-visible > * { flex: 0 0 auto; min-width: 0; }

/* 2. LA BARRE DU BAS — « Retour » à gauche, le bouton de l'étape à droite
   (il prend la place qui reste : « Payer l'acompte de 49,09 € et valider le
   rdv » tient sur une ligne au lieu de passer sous « Retour »). Un fond plein
   et un filet : le dégradé laissait le contenu passer sous les boutons. */
.wt-page .wt-actions {
	position: sticky; bottom: 0; z-index: 6;
	display: flex; flex-wrap: wrap; align-items: center; justify-content: flex-start; gap: 10px;
	margin: auto 0 0; padding: 12px 16px calc(12px + env(safe-area-inset-bottom, 0px));
	background: #fff; border-top: 1px solid var(--wt-filet);
	box-shadow: 0 -8px 22px rgba(26, 26, 26, .06);
}
.wt-ecran.est-visible > .wt-actions { margin-top: auto; }
/* Une barre dont tous les boutons sont masqués disparaît (« Accéder à la
   réservation » une fois l'adresse retenue). */
.wt-page .wt-actions:not(:has(> :not([hidden]))) { display: none; }
.wt-page .wt-pied-principal { display: contents; }
.wt-page .wt-actions > .wt-lien {
	flex: 0 0 auto; display: inline-flex; align-items: center; gap: 2px;
	min-height: 50px; padding: 0 18px 0 12px; border-radius: 14px; box-sizing: border-box;
}
.wt-page .wt-actions > .wt-lien::before {
	content: ""; width: 20px; height: 20px; flex: 0 0 auto; background: currentColor;
	-webkit-mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2.2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M15%205l-7%207%207%207'/%3E%3C/svg%3E") center/contain no-repeat;
	        mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2.2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M15%205l-7%207%207%207'/%3E%3C/svg%3E") center/contain no-repeat;
}
.wt-page .wt-actions > .wt-btn,
.wt-page .wt-actions > .wt-pied-principal > .wt-btn {
	flex: 1 1 0; min-width: 0; min-height: 50px; box-sizing: border-box;
	padding: 12px 16px; border-radius: 14px; line-height: 1.25; text-align: center;
}
/* Hello impose `white-space: nowrap` à tout bouton : « Payer l'acompte de
   49,09 € et valider le rdv » était coupé à « … et valide ». Le texte d'un
   bouton du tunnel revient à la ligne ; la pilule du panier garde son nowrap
   (0,2,0, plus haut). */
.wt-page button { white-space: normal; }
/* La pilule du panier : une rangée à elle, au-dessus des deux boutons. */
.wt-page .wt-actions > .wt-cumul { order: -1; flex: 1 0 100%; margin: 0; }
/* La phrase de l'app sous le bouton de réservation, centrée sous la barre. */
.wt-page .wt-actions > .wt-sous-b6 { order: 3; flex: 1 0 100%; margin: -2px 0 0; text-align: center; }
/* « Voir plus » des créneaux : un bouton du contenu, pas une barre. */
.wt-page .wt-actions.wt-actions-plus {
	position: static; z-index: auto; margin: 4px 0 0; padding: 4px 16px 0;
	background: none; border: 0; box-shadow: none; justify-content: center;
}
.wt-page .wt-actions.wt-actions-plus > .wt-lien { padding: 0 22px; }
.wt-page .wt-actions.wt-actions-plus > .wt-lien::before { content: none; }
/* Sans le numéro de téléphone à l'écran, ni code à demander ni à vérifier. */
#wt-e3:has(#wt-bloc-tel[hidden]) :is(#wt-b-code, #wt-b4) { display: none !important; }

/* 3. LE SURVOL DU THÈME : Hello colore tout bouton survolé ou focalisé en rose
   (`[type=button]:hover, :focus` : #C36). Sur iPhone le survol RESTE après un
   toucher : « J'ai un compte » devenait rose. Les boutons du tunnel posés en
   0,2,0 passent déjà devant (le thème est chargé avant) ; les onglets
   n'avaient que 0,1,1 : relevés. Le texte des onglets inactifs passe aussi
   de #9B9B9B (2,4:1, on les croyait désactivés) au gris des textes (5,7:1). */
.wt-page .wt-onglets button,
.wt-page .wt-onglets button:is(:hover, :focus, :active) {
	background: #EFEFEF; color: var(--wt-gris-t); text-decoration: none;
}
.wt-page .wt-onglets button.est-actif,
.wt-page .wt-onglets button.est-actif:is(:hover, :focus, :active) {
	background: var(--wt-noir); color: #fff; font-weight: 500;
}
@media (hover: hover) {
	.wt-page .wt-btn:not(:disabled):not(.est-secondaire):hover { background: #333; }
	.wt-page .wt-lien:hover { background: #EAEAEA; }
}
.wt-page button:focus-visible { outline: 2px solid var(--wt-noir); outline-offset: 2px; }

/* 4. L'ÉTAPE « LIEU » : trois cartes de même forme. */
#wt-lieux.wt-options { display: grid; gap: 12px; margin: 14px 16px 6px; }
.wt-lieu-option {
	display: flex; flex-direction: column; gap: 14px; min-width: 0;
	padding: 16px; border: 1px solid var(--wt-filet); border-radius: 18px; background: #fff;
	box-shadow: 0 1px 3px rgba(26, 26, 26, .04);
}
.wt-lieu-option.est-choisie { border-color: var(--wt-noir); }
.wt-lieu-tete { display: flex; align-items: center; gap: 12px; min-width: 0; }
.wt-lieu-icone {
	flex: 0 0 auto; width: 44px; height: 44px; border-radius: 13px;
	display: grid; place-items: center; background: var(--wt-creme); color: var(--wt-noir);
	border: 1px solid #EFE6DA;
}
.wt-lieu-icone svg { display: block; }
.wt-lieu-titres { display: flex; flex-direction: column; min-width: 0; }
.wt-lieu-titres b { font-size: 16px; font-weight: 600; line-height: 1.3; color: var(--wt-noir); }
.wt-lieu-titres small { margin-top: 2px; font-size: 13px; line-height: 1.4; color: var(--wt-gris-t); overflow-wrap: anywhere; }
.wt-page .wt-lieu-option > .wt-choisir,
.wt-page .wt-lieu-option > .wt-sect-tete {
	display: flex; align-items: center; justify-content: center; gap: 8px;
	width: 100%; min-height: 48px; box-sizing: border-box; margin: 0;
	padding: 12px 16px; border-radius: 13px; font: inherit; font-size: 15px; font-weight: 600;
	align-self: stretch; cursor: pointer;
}
.wt-page .wt-lieu-option > .wt-choisir { background: var(--wt-noir); color: #fff; }
.wt-page .wt-lieu-option > .wt-sect-tete,
.wt-page .wt-lieu-option > .wt-sect-tete:is(:hover, :focus, :active) {
	background: var(--wt-gris-c); color: var(--wt-noir); border: 1px solid var(--wt-filet);
}
.wt-page .wt-lieu-option .wt-voir-lieux,
.wt-page .wt-lieu-option .wt-sect-tete[aria-expanded="true"] .wt-voir-lieux {
	padding: 0; border-radius: 0; background: none; color: inherit; font: inherit;
}
.wt-sect-tete .wt-chevron { transition: transform .2s ease; }
.wt-sect-tete[aria-expanded="true"] .wt-chevron { transform: rotate(180deg); }
.wt-choisir .wt-fleche { flex: 0 0 auto; }
/* Hors zone : la carte le dit, sans proposer un bouton qui mène au même refus. */
.wt-lieu-indispo { display: none; margin: -4px 0 0; font-size: 13px; color: var(--wt-gris-t); }
.wt-lieu-option.est-hors-zone .wt-lieu-indispo { display: block; }
.wt-lieu-option.est-hors-zone > .wt-choisir { display: none; }
.wt-lieu-option.est-hors-zone { background: var(--wt-gris-c); }

/* Les établissements, dépliés sous « Voir lieu(x) » : deux rangées par lieu. */
.wt-lieu-option .wt-lieux-liste { display: grid; gap: 10px; margin-top: -2px; }
.wt-lieu-option .wt-lieux-liste[hidden] { display: none; }
.wt-lieu-option .wt-lieu-carte {
	display: flex; flex-direction: column; align-items: stretch; gap: 12px;
	padding: 12px; border: 1px solid var(--wt-filet); border-radius: 14px; background: #fff;
}
.wt-lieu-option .wt-lieu-carte.est-choisie { border-color: var(--wt-noir); background: var(--wt-creme); }
.wt-lieu-haut { display: flex; gap: 12px; align-items: flex-start; min-width: 0; }
.wt-lieu-option .wt-lieu-carte .wt-lieu-photo { width: 64px; height: 64px; border-radius: 12px; flex: 0 0 auto; }
.wt-lieu-option .wt-lieu-texte { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 3px; }
.wt-lieu-option .wt-lieu-texte b { font-size: 15px; font-weight: 600; line-height: 1.3; }
.wt-lieu-option .wt-lieu-texte small.wt-lieu-adresse,
.wt-lieu-option .wt-lieu-texte small.wt-lieu-adresse.est-masquee {
	display: flex; align-items: flex-start; gap: 6px; margin: 0; padding: 0; border: 0; background: none;
	font-size: 13px; font-weight: 400; line-height: 1.4; color: var(--wt-gris-t);
}
.wt-lieu-option .wt-lieu-texte small.wt-lieu-adresse::before {
	content: ""; flex: 0 0 auto; width: 13px; height: 13px; margin-top: 3px; background: currentColor;
	-webkit-mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M20%2010.5c0%206-8%2011.5-8%2011.5s-8-5.5-8-11.5a8%208%200%200%201%2016%200z'/%3E%3Ccircle%20cx='12'%20cy='10.2'%20r='2.9'/%3E%3C/svg%3E") center/contain no-repeat;
	        mask: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Cpath%20d='M20%2010.5c0%206-8%2011.5-8%2011.5s-8-5.5-8-11.5a8%208%200%200%201%2016%200z'/%3E%3Ccircle%20cx='12'%20cy='10.2'%20r='2.9'/%3E%3C/svg%3E") center/contain no-repeat;
}
.wt-lieu-option .wt-lieu-texte small.wt-lieu-adresse.est-masquee::before {
	-webkit-mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Crect%20x='4'%20y='10.5'%20width='16'%20height='10.5'%20rx='2.5'/%3E%3Cpath%20d='M8%2010.5V7a4%204%200%200%201%208%200v3.5'/%3E%3C/svg%3E");
	        mask-image: url("data:image/svg+xml,%3Csvg%20xmlns='http://www.w3.org/2000/svg'%20viewBox='0%200%2024%2024'%20fill='none'%20stroke='%23000'%20stroke-width='2'%20stroke-linecap='round'%20stroke-linejoin='round'%3E%3Crect%20x='4'%20y='10.5'%20width='16'%20height='10.5'%20rx='2.5'/%3E%3Cpath%20d='M8%2010.5V7a4%204%200%200%201%208%200v3.5'/%3E%3C/svg%3E");
}
.wt-lieu-option .wt-lieu-texte small.wt-lieu-km { margin: 0; font-size: 12.5px; color: var(--wt-gris); }
.wt-lieu-option .wt-lieu-texte small.wt-lieu-km[hidden] { display: none; }
.wt-lieu-bas { display: flex; align-items: center; justify-content: flex-end; gap: 12px; }
.wt-page .wt-lieu-bas .wt-lieu-infos { margin: 0 auto 0 0; font-size: 13.5px; }
.wt-page .wt-lieu-bas .wt-choisir {
	flex: 0 0 auto; align-self: auto; margin: 0; min-height: 42px; padding: 10px 22px;
	border-radius: 12px; font-size: 14.5px; font-weight: 600;
}

/* 5. LES FENÊTRES (panier, « Infos & photos », informations complémentaires) :
   la croix héritait du `top: 50%` + `translateY(-50%)` de la croix d'en-tête —
   remontée de moitié, elle sortait par le haut de la fenêtre et s'y faisait
   rogner. Posée dans le coin, le titre lui laisse la place. */
.wt-panier-feuille { padding: 18px 18px 18px; border-radius: 20px; box-sizing: border-box; }
.wt-page .wt-panier-croix { top: 12px; right: 12px; transform: none; width: 34px; height: 34px; z-index: 1; }
.wt-panier-feuille h4 { padding: 4px 42px 0; margin-bottom: 14px; line-height: 1.3; }

/* 6. LA BULLE (« Prestation ajoutée ») : en bas, elle couvrait la pilule du
   panier ; posée sous l'en-tête. */
.wt-signal { top: 84px; bottom: auto; transform: translate(-50%, -10px); }
.wt-signal.est-vu { transform: translate(-50%, 0); }

/* 7. CARTES CADEAUX : la description dans la carte, sous le montant. */
.wt-carte .wt-carte-desc { display: block; margin: 4px 16px 0; font-size: 12.5px; line-height: 1.4;
	white-space: pre-line; text-align: center; }

/* 8. L'ÉCRAN DE FIN : le titre de l'étape répétait « Demande envoyée ». */
.wt-page:has(#wt-e7.est-visible) #wt-etape-titre { display: none; }

/* ═══════════════════════════════════════════════════════════════════════
   0.33.0 (09/10) — L'ÉCRAN D'ARRIVÉE (proposition 2 de la revue de la
   première page, choisie par Nicolas) : la pro d'abord, puis l'adresse dans
   une carte, puis ce que la pro propose. Polices et couleurs de l'app.
   ═══════════════════════════════════════════════════════════════════════ */
.wt-page { font-family: "WT Poppins", var(--welcome-sans, "Poppins"), -apple-system, sans-serif; }
.wt-page button, .wt-page input, .wt-page select, .wt-page textarea { font-family: inherit; }

/* L'en-tête : le cadenas devant « Réservation sécurisée · Welcome RDV ». */
.wt-page .wt-entete small { display: flex; align-items: center; gap: 5px; margin-top: 3px;
	font-size: 12.5px; color: var(--wt-gris); }
.wt-page .wt-entete small svg { flex: none; }
/* À l'arrivée, la pro dit qui elle est : l'en-tête ne garde que le cadenas
   et la croix, le titre de l'étape s'efface. Sans accueil, rien ne change. */
.wt-page.a-accueil:has(#wt-e0.est-visible) .wt-entete { border-bottom: 0; padding: 10px 58px 6px 16px; min-height: 40px; }
.wt-page.a-accueil:has(#wt-e0.est-visible) .wt-entete b,
.wt-page.a-accueil:has(#wt-e0.est-visible) #wt-etape-titre { display: none; }
.wt-page.a-accueil:has(#wt-e0.est-visible) .wt-entete small { margin-top: 10px; }

/* L'accueil : la photo, le prénom, le métier — ceux du haut de la fiche. */
.wt-accueil { text-align: center; padding: 22px 16px 20px; }
.wt-accueil-photo { display: block; width: 76px; height: 76px; margin: 0 auto 12px; border-radius: 50%;
	object-fit: cover; box-shadow: 0 0 0 3px #fff, 0 0 0 4px var(--wt-filet); }
.wt-accueil-nom { display: block; font-size: 24px; font-weight: 600; line-height: 1.2; color: var(--wt-noir); }
.wt-accueil-metier { display: block; margin-top: 4px; font-size: 14px; color: var(--wt-gris-t); }

/* L'adresse dans sa carte, le champ au style de l'app : gris, sans cadre,
   un repère de lieu devant. (Avant : un bloc crème cerclé de noir, sans un mot.) */
.wt-adresse-carte { margin: 0 16px; padding: 16px; border: 1px solid var(--wt-filet); border-radius: 14px; background: #fff; }
.wt-page:not(.a-accueil) .wt-adresse-carte { margin-top: 8px; }
.wt-adresse-titre { display: block; margin: 0 0 2px; font-size: 15px; font-weight: 600; color: var(--wt-noir); }
#wt-e0 .wt-adresse-carte .wt-sous { margin: 0 0 14px; text-align: left; font-size: 13.5px; line-height: 1.5;
	color: var(--wt-gris-t); }
#wt-e0 .wt-adresse-carte .wt-adresse-bloc { margin: 0; padding: 0; background: none; border: 0; border-radius: 0; }
#wt-e0 .wt-adresse-bloc input { min-height: 54px; padding: 14px 44px 14px 46px; background: var(--wt-gris-c);
	border: 0; border-radius: 12px; }
#wt-e0 .wt-adresse-bloc input::placeholder { color: var(--wt-gris); opacity: 1; }
#wt-e0 .wt-adresse-bloc input:focus { outline: 1.5px solid var(--wt-noir); outline-offset: 0; }
.wt-adresse-repere { position: absolute; left: 14px; top: 50%; transform: translateY(-50%); display: flex;
	color: var(--wt-noir); pointer-events: none; }

/* Ce que la pro propose, tant que l'adresse n'est pas donnée. */
.wt-offre { display: grid; gap: 10px; margin: 18px 22px 0; }
.wt-offre[hidden] { display: none; }
.wt-offre p { display: flex; align-items: center; gap: 10px; margin: 0; font-size: 14px; color: var(--wt-gris-t); }
.wt-offre svg { flex: none; color: var(--wt-noir); }
.wt-offre b { font-weight: 500; color: var(--wt-noir); }

/* Poppins est plus large que la police du téléphone : sans ces réglages,
   « Cartes cadeaux » passait sur deux lignes, et « Créer mon compte et
   continuer » aussi. Les onglets du catalogue prennent la largeur de leur mot,
   sans retour à la ligne ; les boutons de la barre du bas passent à 14 px (la
   taille des boutons de l'app) et « Retour » se resserre. */
.wt-page .wt-onglets-cat button { flex: 1 1 auto; white-space: nowrap; padding: 10px 11px; }
.wt-page .wt-actions > .wt-btn,
.wt-page .wt-actions > .wt-pied-principal > .wt-btn { padding: 12px; font-size: 14px; }
.wt-page .wt-actions > .wt-lien { padding: 0 14px 0 10px; }

/* 0.33.1 (Nicolas, 09/10) — tant que le tunnel n'a pas pris la main (WP Rocket
   attend un premier geste), la barre collante de la fiche montre son propre
   « Réserver », marron, qui menait à l'app. L'amorce retient maintenant ce
   toucher ; ici, le bouton prend le noir et la forme de celui du tunnel, pour
   que la relève ne se voie pas. Seul le lien vers la réservation change :
   « Demander un RDV » garde sa couleur. */
#wp-sticky a.wp-btn[href*="rdv.welcome-app.com/reservation/"] {
	background: #1A1A1A; padding: 15px 26px; font-size: 15px; font-weight: 600; opacity: 1;
}

/* 0.34.0 (Nicolas, 09/10) — le verdict de zone dès l'adresse, sur la carte
   « À domicile » (le vert des conditions acceptées de l'app). (0.35.0 : la carte
   « À domicile » reste devant, elle porte l'adresse.) */
.wt-lieu-zone { display: flex; align-items: center; gap: 6px; margin: -2px 0 12px; font-size: 13px; color: var(--wt-gris-t); }
.wt-lieu-zone[hidden] { display: none; }
.wt-lieu-zone.est-ok { color: #166534; font-weight: 500; }
.wt-lieu-zone svg { flex: none; }
/* Hors zone, quand la pro reçoit en établissement : ses lieux, dépliés juste dessous, sont la
   sortie à proposer ; « Voir les pros qui viennent à … » passe au gris des boutons secondaires. */
.wt-page #wt-voir-pros.est-secondaire,
.wt-page #wt-voir-pros.est-secondaire:is(:hover, :focus, :active) { background: var(--wt-gris-c); color: var(--wt-noir); }

/* 0.35.0 (Nicolas, 09/10) — l'adresse retenue passe dans la carte « À domicile »,
   avec « Modifier » ; sa carte se replie. Hors zone, le refus et « Voir les
   pros… » se disent dans cette carte. */
#wt-e0.a-adresse-retenue .wt-adresse-carte { display: none; }
.wt-page .wt-lieu-modifier { flex: none; align-self: center; margin-left: auto; padding: 7px 14px; border-radius: 999px;
	background: var(--wt-gris-c); color: var(--wt-noir); font-size: 13px; font-weight: 500; cursor: pointer; }
.wt-page .wt-lieu-modifier[hidden] { display: none; }
.wt-lieu-hz { margin: 0 0 4px; }
.wt-lieu-hz[hidden] { display: none; }
.wt-page .wt-lieu-hz .wt-btn { width: 100%; }
.wt-page .wt-lieu-hz .wt-btn.est-secondaire,
.wt-page .wt-lieu-hz .wt-btn.est-secondaire:is(:hover, :focus, :active) { background: var(--wt-gris-c); color: var(--wt-noir); }
/* Sur la carte grise du hors zone, « Modifier » et « Voir les pros… » (gris aussi)
   se fondaient dans le fond : blancs, cernés d'un filet. */
.wt-page .wt-lieu-option.est-hors-zone .wt-lieu-modifier,
.wt-page .wt-lieu-option.est-hors-zone .wt-lieu-hz .wt-btn.est-secondaire,
.wt-page .wt-lieu-option.est-hors-zone .wt-lieu-hz .wt-btn.est-secondaire:is(:hover, :focus, :active) {
	background: #fff; box-shadow: inset 0 0 0 1px var(--wt-filet); }
