/* ================================================================
   auth.css — Habillage Connexion / Inscription (refonte session-5)
   D'après mockup-connexion(.mobile) + mockup-inscription(.mobile)
   Tout est scopé sous .auth-page pour ne pas impacter le reste du site
   (site.css reste chargé en parallèle).

   Dé-silotage (chantier esthétique auth) : auth.css ne redéfinit plus ses
   propres tokens de fondation — il hérite désormais de site.css (chargé avant).
   Plus de Dancing Script ni de vert/doré désynchronisés : couleurs, polices et
   rayon viennent du :root central. Les accents restent bordeaux + doré muté.
   ================================================================ */

.auth-page {
  /* 🔁 RECETTE 30/07 (Thomas, pt1) — « je me retrouve dans une page qui a l'ancien
     esthétique ». La feuille EST chargée et .auth-page EST posée : le défaut est que
     cette famille de composants a été figée au 20/06 et diverge depuis du tunnel, d'où
     vient l'utilisateur. Ici : un gris froid en dur au lieu du crème de la marque. */
  font-family:var(--ff-body); color:var(--clr-text); background:var(--c-page);
  font-size:14px; line-height:1.6;
  margin:0;            /* coquille auth = 1er enfant de <body> : pas de marge propre */
}
/* Retour Poune #2 — bande blanche en haut des pages connexion/inscription.
   Cause : la coquille auth est l'unique enfant de <body> ; son entête en est le
   premier bloc. Un margin-top hérité / collapsé (depuis la fondation site.css
   partagée) sur la coquille ou son entête remontait À TRAVERS le <body> (margin:0,
   sans bordure/padding) et peignait une bande blanche AU-DESSUS. On neutralise
   explicitement la marge haute de la chaîne d'entête pour que le premier bloc soit
   collé en haut du viewport.
   NB : le bloc concerné était le bandeau encre .auth-trust ; il a été retiré du
   markup le 28/07 (cf. l.64-66) et c'est désormais .auth-topbar. La règle reste
   utile telle quelle — elle vise l'entête, pas le bandeau.
   Strictement scopé .auth-page → aucune incidence sur les pages normales. */
.auth-page .auth-header { margin-top:0; } /* .auth-trust retiré du sélecteur (pt2 28/07) */
/* Verrou de premier ordre : le <body> des pages de la coquille auth (IDs uniques
   posés par index.php : page-login/compte_ajout/password/resetpwd/verifmail, et
   page-compte en visiteur déconnecté) ne réserve aucun espace haut. Empêche toute
   marge/padding de fondation de créer un liseré blanc avant le bandeau sombre.
   Scopé par ID de page auth → strictement sans effet sur les pages normales. */
#page-login, #page-compte_ajout, #page-password,
#page-resetpwd, #page-verifmail,
body:has(> .auth-page) { margin-top:0; padding-top:0; }
/* pt11 (retours 20/07) — bande blanche SOUS le footer des pages auth.
   Cause : la coquille auth est courte (carte de connexion ≈ 885 px) ; sur un
   viewport plus haut elle s'arrête avant le bas et laisse voir le <body>, qui
   est blanc, sous le footer sombre. Rien n'y était posé : ni hauteur minimale,
   ni fond de repli. Fix « sticky footer » standard — la coquille occupe au
   minimum la hauteur du viewport et le <main> absorbe le rab, ce qui pousse le
   footer en bas de l'écran. Le supplément d'espace est peint en #fafafa (fond
   de la coquille), pas en blanc.
   ⚠️ Scopé `body > .auth-page` VOLONTAIREMENT : la classe .auth-page est aussi
   posée sur des blocs IMBRIQUÉS qui n'ont rien d'une page (modale de connexion
   du panier — .cc-modal.auth-page, inc/panier.inc.php ; carte de conversion
   invité — .cc-convert-card.auth-page, inc/checkout_invite.inc.php). Un
   sélecteur `.auth-page` nu leur imposerait 100vh + flex et les casserait. */
body > .auth-page {
  min-height:100vh;
  min-height:100dvh;   /* mobile : hauteur réelle, barre d'URL déduite */
  display:flex; flex-direction:column;
}
body > .auth-page > .auth-main { flex:1 0 auto; }
.auth-page *, .auth-page *::before, .auth-page *::after { box-sizing:border-box; }
.auth-page a { color:inherit; text-decoration:none; cursor:pointer; }
.auth-page img { max-width:100%; }
.auth-container { max-width:1200px; margin:0 auto; padding:0 24px; }

.auth-page .logo-img { height:46px; width:auto; display:block; }
.auth-page .logo-img.is-white { filter:brightness(0) invert(1); }

/* ================================================================ HEADER ALLÉGÉ ================================================================ */
.auth-header { }
/* .auth-trust / .auth-trust-center / .auth-trust-phone : SUPPRIMÉS (pt2, retours Thomas
   28/07). Bandeau encre « Spécialiste des vins du Rhône depuis 2003 » + téléphone, retiré
   du markup (index.php) en même temps que ses jumeaux .header-top et .m-promo. */

/* pt1 — filet de séparation sur le token de ligne fine du système (--c-line),
   comme les cartes du tunnel, au lieu du gris froid legacy --clr-border. */
.auth-topbar { background:var(--c-surface); border-bottom:1px solid var(--c-line); padding:14px 0; }
.auth-topbar .auth-container { display:flex; align-items:center; gap:20px; }
.auth-logo { flex-shrink:0; line-height:0; }
.auth-topbar-link { margin-left:auto; font-size:13px; }
.auth-topbar-link a { color:var(--clr-or-text); font-weight:700; }
.auth-topbar-link a:hover { text-decoration:underline; }
/* #13 — lien de bascule/retour déplacé dans le corps des cartes : topbar = logo centré seul. */
.auth-topbar .auth-container { justify-content: center; }
.auth-topbar-link { display: none; }

/* ================================================================ CONTINUITÉ TUNNEL (dest=panier) ================================================================
   Affichée seulement quand l'utilisateur vient du panier : on rejoue le fil
   d'étapes du tunnel (même grammaire visuelle que .cc-steps de tunnel.css, mais
   autonome — auth.css n'a pas accès à body.tunnel) + un rappel « panier conservé ».
   Audit UX tunnel #4 (continuité auth). */
/* pt1 — le fond clair passe du legacy --clr-bg-light (#F9F5EA) à la cible
   --c-bg-soft (#F4EFE4). Divergence connue et documentée entre les deux strates :
   côte à côte avec le tunnel, deux crèmes différents se voient. */
.auth-steps { background:var(--c-bg-soft); border-bottom:1px solid var(--c-border-struct); padding:16px 0; }
.auth-steps-list { display:flex; align-items:center; justify-content:center; list-style:none; margin:0; padding:0; }
/* 🔁 RECETTE 30/07 (Thomas, pt1) — LE symptôme le plus visible sur sa capture : la
   pastille d'étape franchie était VERTE (--clr-success, #2d6635) alors que le stepper
   du tunnel, dont ce fil rejoue la grammaire, la rend en ENCRE avec la coche en OR
   (cc_tunnel_stepper → .cc-step-item.is-done .cc-step-num). Le visiteur passait donc
   d'un jeu de composants à un autre en un clic. Le vert du système est réservé à la
   ligne de confiance et aux validations, pas à la progression.
   Les gris en dur (#aaa, #ccc) cèdent la place aux neutres du système. */
.auth-step { display:flex; align-items:center; gap:8px; font-size:13px; font-weight:600; color:var(--c-text); }
.auth-step.active { color:var(--clr-or-text); }
.auth-step.done { color:var(--c-accent-text); }
.auth-step-num { width:26px; height:26px; border-radius:50%; background:var(--c-border-strong); color:#fff; display:flex; align-items:center; justify-content:center; font-size:12px; font-weight:700; flex-shrink:0; }
.auth-step.active .auth-step-num { background:var(--c-ink); }
.auth-step.done .auth-step-num { background:var(--c-ink); color:var(--c-accent); }
.auth-step-sep { margin:0 14px; color:var(--c-border-strong); font-size:18px; }
.auth-resume { background:var(--c-surface); border-bottom:1px solid var(--c-line); padding:12px 0; }
.auth-resume .auth-container { display:flex; align-items:center; justify-content:center; gap:8px; font-size:13.5px; color:var(--clr-text-dark); }
.auth-resume svg { color:var(--clr-or); flex-shrink:0; }
.auth-resume strong { color:var(--clr-or-text); }
.auth-resume-kept { color:var(--clr-success); font-weight:600; }
@media (max-width:600px) {
  .auth-steps { padding:12px 0; }
  .auth-steps-list { flex-wrap:nowrap; }
  .auth-step { gap:5px; font-size:11px; }
  .auth-step span:not(.auth-step-num) { white-space:nowrap; }
  .auth-step-num { width:22px; height:22px; font-size:11px; }
  .auth-step-sep { margin:0 5px; font-size:14px; }
  .auth-resume .auth-container { font-size:12px; padding-left:16px; padding-right:16px; line-height:1.4; }
}

/* ================================================================ ENVELOPPE FORMULAIRES ================================================================ */
.auth-page .signup-wrap { padding:40px 0 60px; }

/* FORMULAIRE */
.auth-page .signup-form { padding:40px 44px; display:flex; flex-direction:column; position:relative; }
.auth-page .form-title { font-family:var(--ff-title); font-size:24px; font-weight:700; color:var(--clr-text-dark); line-height:1.2; margin:0; }
.auth-page .form-subtitle { font-size:13.5px; color:var(--clr-text); margin-top:7px; margin-bottom:24px; }
.auth-page .form-subtitle .chrono { color:var(--clr-or-text); font-weight:700; }

/* Boutons sociaux */
/* box-sizing:border-box + line-height:1 (chantier hauteur réelle boutons) : sans eux,
   le padding 10+10 s'empile sur min-height:44 → 64px rendus au lieu de la cible 44px.
   Vaut pour .btn-social ET .btn-primary ci-dessous. */
.auth-page .social-btns { display:flex; flex-direction:column; gap:11px; }
.auth-page .btn-social {
  display:flex; align-items:center; justify-content:center; gap:11px;
  box-sizing:border-box; line-height:1;
  width:100%; min-height:var(--btn-min-h); padding:var(--btn-pad-y) var(--btn-pad-x); border-radius:var(--radius-s);
  font-family:var(--ff-body); font-size:var(--btn-font); font-weight:var(--btn-weight); letter-spacing:var(--btn-letter);
  cursor:pointer; border:1.5px solid var(--clr-border); background:#fff; color:var(--clr-text-dark);
  transition:transform .12s, box-shadow .18s, border-color .18s; position:relative;
}
.auth-page .btn-social:hover { transform:translateY(-1px); box-shadow:0 6px 16px -8px rgba(0,0,0,.35); border-color:#aaa; }
.auth-page .btn-social .soc-ico { width:20px; height:20px; flex-shrink:0; }
.auth-page .btn-social.facebook { background:#1877F2; border-color:#1877F2; color:#fff; }
.auth-page .btn-social.facebook:hover { background:#1568d8; border-color:#1568d8; }
/* État désactivé « Bientôt » (OAuth pas encore branché côté serveur).
   padding-right réserve la place du badge .soon-badge (absolute, à droite) :
   sans ça le libellé centré venait le chevaucher sur écran étroit. */
.auth-page .btn-social.is-soon { cursor:not-allowed; opacity:.6; padding-right:80px; }
.auth-page .btn-social.is-soon:hover { transform:none; box-shadow:none; border-color:var(--clr-border); }
.auth-page .btn-social.is-soon.facebook:hover { background:#1877F2; border-color:#1877F2; }
.auth-page .btn-social .soon-badge {
  position:absolute; right:12px; top:50%; transform:translateY(-50%);
  font-size:9.5px; font-weight:700; letter-spacing:.5px; text-transform:uppercase;
  background:rgba(0,0,0,.12); color:inherit; border-radius:0; padding:3px 8px;
}
.auth-page .btn-social.facebook .soon-badge { background:rgba(255,255,255,.25); }

.auth-page .or-divider { display:flex; align-items:center; gap:14px; margin:22px 0; color:#aaa; font-size:12px; font-weight:600; text-transform:uppercase; letter-spacing:1px; }
.auth-page .or-divider::before, .auth-page .or-divider::after { content:''; flex:1; height:1px; background:var(--clr-border); }

/* Champs */
.auth-page .field-group { display:flex; flex-direction:column; gap:6px; margin-bottom:15px; }
.auth-page .field-group label { font-size:11.5px; font-weight:700; text-transform:uppercase; letter-spacing:.5px; color:var(--clr-text-dark); display:flex; align-items:center; justify-content:space-between; }
.auth-page .field-group label .forgot { color:var(--clr-or-text); font-weight:700; text-transform:none; letter-spacing:0; font-size:11.5px; }
.auth-page .field-group label .forgot:hover { text-decoration:underline; }
.auth-page .field-group label .opt { color:#aaa; font-weight:600; text-transform:none; letter-spacing:0; font-size:11px; }
/* Lien « Mot de passe oublié » sorti du <label> (a11y : un <a> dans un <label for>
   vole le focus du champ au clic). Conserve l'alignement label / lien à droite. */
.auth-page .field-group .label-row { display:flex; align-items:center; justify-content:space-between; }
.auth-page .field-group .label-row label { display:block; }
.auth-page .field-group .label-row .forgot { color:var(--clr-or-text); font-weight:700; text-transform:none; letter-spacing:0; font-size:11.5px; }
.auth-page .field-group .label-row .forgot:hover { text-decoration:underline; }
.auth-page .input-wrap { position:relative; }
/* Retour 12/06 #2 — pictos des champs = jeu d'icônes maison (cc_icon) au lieu
   d'émojis universels (✉️ 🔒 👤). Trait neutre et discret, centré dans le champ. */
.auth-page .input-wrap .in-ico { position:absolute; left:13px; top:50%; transform:translateY(-50%); display:inline-flex; align-items:center; line-height:0; color:#8a8a8a; }
.auth-page .input-wrap .in-ico svg { width:18px; height:18px; display:block; }
.auth-page .input-wrap .in-eye { position:absolute; right:10px; top:50%; transform:translateY(-50%); display:inline-flex; align-items:center; line-height:0; cursor:pointer; color:#7a7a7a; background:none; border:none; padding:2px; }
.auth-page .input-wrap .in-eye:hover { color:#555; }
/* R2 — œil / œil barré : l'icône affichée reflète l'état (masqué = œil ouvert
   « cliquez pour voir » ; révélé = œil barré « cliquez pour masquer »). */
.auth-page .in-eye .eye-hide { display:none; }
.auth-page .in-eye.is-revealed .eye-show { display:none; }
.auth-page .in-eye.is-revealed .eye-hide { display:inline-block; }
.auth-page .form-input {
  width:100%; padding:12px 14px 12px 40px;
  /* #3 (retours Thomas 10/07) — les champs de saisie suivent le réglage BO
     sharp/soft comme les boutons (rayon en dur 0 → token). */
  border:1.5px solid var(--clr-border); border-radius:var(--radius-s);
  font-family:var(--ff-body); font-size:14.5px; color:var(--clr-text-dark);
  outline:none; transition:border-color .2s, box-shadow .2s; background:#fff;
}
.auth-page .form-input:focus { border-color:var(--clr-or); box-shadow:0 0 0 3px rgba(184,138,62,.1); }
/* Vague AUTH (messages système, 20/07) — .form-input.filled (vert #b0c8b0) et
   .form-input.error (#d14) RETIRÉS : code mort. Aucun JS ne pose ces classes
   (les pages login/inscription/reset focalisent le champ mais ne le colorent
   pas ; les erreurs passent par le bandeau .erreur). Supprime deux valeurs en
   dur hors palette or/encre. */

.auth-page .remember-row { display:flex; align-items:center; gap:9px; font-size:13px; color:var(--clr-text); margin:2px 0 18px; cursor:pointer; }
/* pt4 (retours 20260722) : `accent-color` retiré — MORT (site.css dénative les cases en
   appearance:none), la teinte encre vient de la règle globale. Reste la taille. */
.auth-page .remember-row input { width:16px; height:16px; flex-shrink:0; }

.auth-page .btn-primary {
  display:flex; align-items:center; justify-content:center; gap:8px;
  width:100%; background:var(--clr-ink); color:#fff; border:none; cursor:pointer;
  box-sizing:border-box; line-height:1;
  min-height:var(--btn-min-h);
  padding:var(--btn-pad-y) var(--btn-pad-x); border-radius:var(--radius-s);
  font-family:var(--ff-body); font-size:var(--btn-font); font-weight:var(--btn-weight); letter-spacing:var(--btn-letter);
  box-shadow:var(--btn-shadow);
  transition:background .2s, transform .12s; margin-top:4px;
}
.auth-page .btn-primary:hover { background:var(--clr-ink-dark); transform:translateY(-1px); }
.auth-page .btn-ghost-text { display:block; text-align:center; font-size:12.5px; color:var(--clr-text); margin-top:14px; }
/* Doctrine « affordance au repos » (29/07) — ce lien est devenu la SEULE sortie de
   l'écran « Mot de passe oublié ? » (le `.back-step` du haut a été retiré). Il ne
   pouvait donc plus rester souligné au seul `:hover` : au tactile, il n'y a pas de
   survol, l'affordance n'arrivait JAMAIS. Même grammaire que `.back-step` ci-dessous
   (l.212-226) et que `.cc-link-sec` (site.css:1475-1488) : OR + SOULIGNÉ au repos
   (trait 1 px, offset 3 px, 45 %), encre + trait plein au survol. Taille montée à
   13,5 px — c'est une cible tactile, plus une mention de bas de carte. */
.auth-page .btn-ghost-text a {
  color:var(--clr-or-text); font-weight:700; font-size:13.5px;
  text-decoration:underline; text-decoration-thickness:1px; text-underline-offset:3px;
  text-decoration-color:color-mix(in srgb, currentColor 45%, transparent);
}
.auth-page .btn-ghost-text a:hover { color:var(--clr-ink-dark); text-decoration-color:currentColor; }
.auth-page .legal-note { font-size:11px; color:#999; margin-top:16px; line-height:1.5; }
.auth-page .legal-note a { color:var(--clr-or-text); text-decoration:underline; }
/* Doctrine « flèche » (28/07) — le « ← » a été retiré du libellé de ce lien
   (password.inc.php:181) : un glyphe ne signale jamais qu'un texte est cliquable.
   Sans lui, le lien n'avait PLUS AUCUNE affordance au repos — `.auth-page .back-step`
   (0,2,0) posait `--clr-text`, soit exactement la couleur du texte courant, et
   `.auth-page a` (l.55, (0,1,1)) supprimait le soulignement. Au tactile, donc sans
   survol, rien ne le distinguait d'un paragraphe. On lui donne l'affordance de système
   du corollaire : OR + SOULIGNÉ au repos, encre + trait plein au survol — même
   grammaire que `.cc-link-sec` (site.css:1475-1488), trait 1 px, offset 3 px, 45 %. */
.auth-page .back-step {
  display:inline-flex; align-items:center; gap:5px; font-size:12.5px;
  color:var(--clr-or-text); font-weight:600; margin-bottom:16px; align-self:flex-start;
  text-decoration:underline; text-decoration-thickness:1px; text-underline-offset:3px;
  text-decoration-color:color-mix(in srgb, currentColor 45%, transparent);
}
.auth-page .back-step:hover { color:var(--clr-ink-dark); text-decoration-color:currentColor; }

/* Exigences mot de passe (liste live sous le champ) */
.auth-page .pwd-reqs { display:flex; flex-direction:column; gap:4px; margin-top:9px; }
.auth-page .pwd-req { font-size:11.5px; color:#999; display:flex; align-items:center; gap:6px; }
.auth-page .pwd-req .rq-mark { width:15px; text-align:center; }
/* Vague AUTH (messages système, 20/07) — critère satisfait : la classe .ok est
   désormais posée par le JS (setReq, pages inscription + reset) EN LIEU ET PLACE
   de l'ancienne couleur inline en dur (deux verts divergents #2d7a3a / #2d6635).
   Couleur tokenisée sur le vert AA --fb-ok-tx (#245A2C). Exception assumée
   « affordance de saisie » (arbitrage Thomas 20/07) : le vert de validation
   reste plus lisible que l'or sur une checklist live. L'état .ko (rouge) et le
   bloc .pwd-match (champ de confirmation supprimé en D9) étaient MORTS → retirés. */
.auth-page .pwd-req.ok { color:var(--fb-ok-tx); }

.auth-page .newsletter-opt { display:flex; align-items:flex-start; gap:9px; font-size:12.5px; color:var(--clr-text); margin:6px 0 18px; cursor:pointer; }
.auth-page .newsletter-opt input { width:16px; height:16px; margin-top:2px; flex-shrink:0; } /* pt4 : idem, accent-color mort retiré */

/* Vague AUTH (messages système, 20/07) — bandeau d'erreur basculé de Direction A
   (pastille ronde encre 30px, définie globalement dans site.css) vers Direction B :
   carte blanche, filet rouge à gauche, icône cercle-exclamation INLINE rouge.
   Rendu identique à la brique erreur du tunnel (.cc-cart-alert.cc-step-error).
   CSS-only, scopé .auth-page → compte / avis gardent l'ancien look jusqu'à leur
   vague. Couvre aussi les conteneurs JS #login-js-error / #signup-js-error /
   #reset-js-error (même classe .erreur).
   ⚠️ display:block volontaire (pas flex) + icône en ::before ABSOLU : le JS de
   validation force `box.style.display='block'` à l'affichage → un display:flex
   serait écrasé et casserait l'alignement icône/texte. Le layout block survit. */
.auth-page .erreur {
  display:block; position:relative; box-sizing:border-box;
  background:#fff; border:1px solid #e7ded0; border-left:3px solid var(--fb-no-tx);
  border-radius:var(--radius-m); padding:12px 15px 12px 44px; margin:0 0 18px;
  color:var(--clr-ink); font-weight:400; font-size:14px; line-height:1.45; text-align:left;
}
/* Override complet de la pastille globale (site.css .erreur::before) : on annule
   le rond encre (border-radius, background-color, 30px) et on pose une icône plate
   rouge de 20px CENTRÉE verticalement (top:50% + translateY, comme le .erreur
   global B2) — rétrofit alignement 21/07. Centrage en absolu (pas flex) car le JS
   force box.style.display='block' à l'affichage : un flex serait écrasé. */
.auth-page .erreur::before {
  content:""; position:absolute; left:15px; top:50%; transform:translateY(-50%);
  width:20px; height:20px; border-radius:0; background-color:transparent;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23A33327' stroke-width='2.2' stroke-linecap='round'%3E%3Ccircle cx='12' cy='12' r='9'/%3E%3Cpath d='M12 8v5M12 16h.01'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:center; background-size:contain;
}
.auth-page .erreur a { color:var(--clr-ink); font-weight:700; text-decoration:underline; text-underline-offset:2px; }

/* I4 — pas d'état d'erreur natif pendant la frappe : on neutralise le style
   :invalid du navigateur (ex. halo rouge Firefox sur un e-mail encore partiel).
   Les erreurs sont signalées par notre validation JS FR à la soumission. */
.auth-page .form-input:invalid { box-shadow:none; }

/* C4 — message du défi Turnstile, rendu juste au-dessus du widget.
   Vague AUTH (messages système, 20/07) — registre ATTENTION (obstacle à franchir,
   pas une erreur ; arbitrage Thomas 20/07) : brique Direction B ENCRE (carte
   blanche + filet encre + icône triangle attention encre, servie par cc_icon
   dans le markup login.inc.php). Remplace l'ambre en dur (#8a5a00 / #fff8e6 /
   #f0d28a), hors palette or/encre. Aligné sur la doctrine attention = encre. */
.auth-page .turnstile-msg { display:flex; align-items:center; gap:9px; font-size:13.5px; font-weight:600; color:var(--clr-ink); background:#fff; border:1px solid #e7ded0; border-left:3px solid var(--clr-ink); border-radius:var(--radius-m); padding:11px 14px; margin:4px 0 10px; text-align:left; }
.auth-page .turnstile-msg svg { flex:0 0 auto; }

/* Adresse de confirmation (password reset / verifmail) */
.auth-page .sent-to { display:inline-block; background:var(--clr-bg-light); border:1px solid var(--c-border-struct); border-radius:0; padding:9px 18px; font-family:var(--ff-title); font-size:14px; color:var(--clr-text-dark); margin-bottom:22px; }
.auth-page .sent-steps { text-align:left; font-size:13.5px; color:var(--clr-text); line-height:1.7; margin-bottom:24px; padding:0; }
.auth-page .sent-steps li { margin-left:18px; }
.auth-page .resend-note { font-size:12.5px; color:#999; margin-top:18px; }
.auth-page .resend-note a { color:var(--clr-or-text); font-weight:700; }
.auth-page .resend-note a:hover { text-decoration:underline; }

/* ================================================================ FOOTER ALLÉGÉ ================================================================ */
/* 🔁 RECETTE 30/07 (Thomas, pt1) — pied de page en gris NEUTRE en dur, à côté de
   l'encre CHAUDE de tout le reste du site. Deux noirs différents sur deux pages
   successives, c'est exactement ce qui se lit comme « ancien ». */
.auth-footer { background:var(--c-ink); color:var(--clr-text-on-ink); padding:28px 0; font-size:12.5px; }
.auth-footer .auth-container { display:flex; align-items:center; justify-content:space-between; gap:12px; flex-wrap:wrap; }
.auth-footer a { color:rgba(255,255,255,.78); }
.auth-footer a:hover { color:#fff; text-decoration:underline; }

.auth-page .fade-up { animation:authFadeUp .5s ease both; }
@keyframes authFadeUp { from{opacity:0;transform:translateY(10px)} to{opacity:1;transform:translateY(0)} }

/* ===== COQUILLE CENTRÉE (refonte hiérarchie 2026-06-20) ===== */
/* 🔁 RECETTE 30/07 (Thomas, pt1) — la carte était à ANGLES VIFS (border-radius:0) à
   côté des .cc-card du tunnel qui sont à --radius-m. Incohérence interne assumée :
   les CHAMPS de cette même feuille avaient déjà été passés au token (cf. plus haut,
   commentaire « rayon en dur 0 → token »), pas leur carte. Et l'ombre était teintée
   prune (rgba(61,16,32,…)) au lieu de l'encre du système. */
.auth-page .auth-card{ max-width:430px; margin:0 auto; background:var(--c-surface);
  border:1px solid var(--c-line); border-radius:var(--radius-m);
  box-shadow:0 18px 50px -22px rgba(36,26,18,.40); overflow:hidden; }
.auth-page .auth-card .signup-form{ padding:36px 40px; }
.auth-page .auth-card .form-title{ text-align:center; font-size:23px; margin:0; }
.auth-page .auth-accroche{ text-align:center; font-family:var(--ff-title); font-style:italic;
  font-size:14.5px; color:var(--clr-text); margin:8px 0 22px; }
.auth-page .auth-card .form-subtitle{ text-align:center; margin:8px 0 22px; }
.auth-page .auth-card .back-step{ align-self:center; margin-bottom:10px; }
.auth-page .auth-card .or-divider{ margin:20px 0; }
.auth-page .auth-reassure{ display:flex; align-items:center; justify-content:center; gap:8px 14px;
  flex-wrap:wrap; margin-top:20px; padding-top:16px; border-top:1px solid var(--c-line);
  font-size:11.5px; color:#8a7d6a; }
.auth-page .auth-reassure .ar-item{ display:inline-flex; align-items:center; gap:6px; white-space:nowrap; }
.auth-page .auth-reassure .ar-sep{ color:#d8cdbb; }
.auth-page .res-badge-flat{ margin:0 auto 12px; display:flex; justify-content:center; color:var(--clr-or); }
.auth-page .res-badge-flat svg{ width:40px; height:40px; }

/* ================================================================ RESPONSIVE ================================================================ */
@media (max-width:480px) {
  .auth-container { padding:0 14px; }
  .auth-page .signup-wrap { padding:18px 0 30px; }
  .auth-page .signup-form { padding:24px 18px; }
  /* .auth-trust / .auth-trust-center / .auth-trust-phone : résidus mobiles SUPPRIMÉS
     (28/07) — orphelins du bandeau encre retiré du markup, cf. l.64-66. */
  .auth-footer .auth-container { justify-content:center; text-align:center; }
}
