/* ==========================================================================
   §E37 — Pagine di autenticazione: accesso, registrazione, recupero password,
   invito. Tema allineato al sito di presentazione consergio.ai: verde foresta e
   menta, pannello di marca sul gradiente scuro, una famiglia sola (Ubuntu).

   §E33 la prima versione era avorio, inchiostro e ottone con i titoli in
   Newsreader, perche' quello era il sito di allora. Il sito e' stato rifatto in
   verde e ha eliminato il serif, quindi questo foglio l'ha seguito: i valori
   qui sotto vengono da `consergio_site/src/app/globals.css` (blocco `@theme`),
   che e' il mockup gia' corretto per il contrasto. Il `CLAUDE.md` di quel repo
   NON e' una fonte valida: descrive ancora il sistema avorio/ottone.

   Non e' una pagina come le altre: l'header del sito manda l'iscrizione a
   /signup/new, quindi chi arriva qui ha appena visto il verde.

   Tutto e' scoped sotto `.auth-page` (la classe del <body> del layout `auth`),
   esattamente come i guest_template_*.css: il pannello struttura e l'app ospite
   restano sul tema StayBell e questo file non li tocca. Per lo stesso motivo i
   token stanno qui e NON in un quarto blocco `:root` di application.css.

   Le viste continuano a usare il vocabolario `form__*` / `btn--*` di
   application.css: qui se ne riscrive solo l'aspetto, con selettori a
   specificita' 0,2,0 che battono le regole StayBell (0,1,0) senza !important.
   Quel prefisso `.auth-page ` non e' decorativo: application.css ridichiara le
   stesse classi in tre layer sovrapposti, e senza prefisso riprenderebbero la
   precedenza.
   ========================================================================== */

/* --- Ubuntu self-hosted (niente CDN: residenza dati UE, cfr. ADR-0005) -------
   Dichiarato qui e non ereditato da guest_template_green.css: una dipendenza
   fra due fogli scoped sarebbe invisibile e si romperebbe in silenzio. La
   duplicazione e' gia' la prassi (night e warm dichiarano entrambi JetBrains
   Mono) e il browser deduplica per `src`. */
@font-face{font-family:'Ubuntu';font-style:normal;font-weight:400;font-display:swap;src:url("/assets/Ubuntu-400-latin-ext-da0c3556.woff2") format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
@font-face{font-family:'Ubuntu';font-style:normal;font-weight:400;font-display:swap;src:url("/assets/Ubuntu-400-latin-9ba093ac.woff2") format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'Ubuntu';font-style:normal;font-weight:500;font-display:swap;src:url("/assets/Ubuntu-500-latin-ext-238ab552.woff2") format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
@font-face{font-family:'Ubuntu';font-style:normal;font-weight:500;font-display:swap;src:url("/assets/Ubuntu-500-latin-8a72e79b.woff2") format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}
@font-face{font-family:'Ubuntu';font-style:normal;font-weight:700;font-display:swap;src:url("/assets/Ubuntu-700-latin-ext-2fe1d797.woff2") format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}
@font-face{font-family:'Ubuntu';font-style:normal;font-weight:700;font-display:swap;src:url("/assets/Ubuntu-700-latin-1b338a77.woff2") format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}

.auth-page {
  /* Palette del sito, nomi originali. I nomi --au-* restano quelli storici
     (avorio/inchiostro/ottone non avrebbero piu' senso), rinominati sui verdi. */
  --au-menta: #EEF7F2;
  --au-menta-2: #E9F6F0;
  --au-notte: #0E2A22;
  --au-cupo: #0A3F30;
  --au-verde: #0E5C45;
  /* Lo smeraldo su bianco sta a 2,81:1: sotto ogni soglia, anche quella dei
     display. Qui entra SOLO come decorazione (l'alone dell'aside). */
  --au-smeraldo: #2FAE7D;
  /* Menta soft per i segni sul fondo scuro: 7,49:1 sul verde cupo.
     §E37.1 — l'oro chiaro se n'e' andato con l'occhiello dell'aside, che era
     l'unico posto in cui il sistema lo ammetteva. Se tornasse un occhiello su
     verde scuro, il valore e' #F7D08A. */
  --au-menta-soft: #8FDCBB;

  --au-testo-soft: #3D5449;
  /* Sotto i 13px serve un grado piu' scuro: 5,13:1 invece di 3,60:1. */
  --au-testo-tenue: #5F7268;

  --au-linea: #DDEEE5;
  --au-linea-tenue: #EAF3EE;
  --au-linea-verde: #C2E0D1;

  /* La CTA e' il gradiente d'azione del sito. Finisce a #177A57 e non a
     #1F8A63 come nel mockup: il bianco su #1F8A63 sta a 4,31:1, sotto il 4,5
     del corpo, mentre su #177A57 sta a 5,31:1. */
  --au-grad-azione: linear-gradient(90deg, #0E5C45, #177A57);
  --au-grad-scuro: linear-gradient(120deg, #0A3F30, #0E5C45);
  --au-grad-hero: linear-gradient(160deg, #DCEFE5 0%, #E9F6F0 55%, #F2F9F6 100%);

  --au-danger: #C62828;
  --au-danger-bg: #FDECEC;
  --au-danger-line: #F3C9C9;
  /* Il verde di "andata bene" e quello di marca si somiglierebbero: il flash
     positivo prende la tinta del tema invece di un secondo verde a caso. */
  --au-ok-bg: var(--au-menta);
  --au-ok-fg: var(--au-verde);
  --au-ok-line: var(--au-linea-verde);

  /* Il padding orizzontale dell'aside e' una variabile perche' lo leggono piu'
     regole della colonna di marca. */
  --au-aside-pad-x: clamp(1.25rem, 4vw, 3.5rem);

  --au-r-card: 18px;
  --au-r-section: 14px;
  --au-r-field: 12px;
  /* I bottoni del sito sono pillole, i campi no: due raggi, non uno. */
  --au-r-btn: 999px;
  --au-ombra-foto: 0 30px 70px -30px rgba(14, 60, 45, 0.35);

  /* Una famiglia sola, come il sito: il peso e' l'unico segnale fra titolo e
     testo, ed e' il motivo per cui i display stanno a 700. */
  --au-sans: 'Ubuntu', system-ui, -apple-system, "Segoe UI", Arial, sans-serif;
  --au-display: var(--au-sans);
}


body.auth-page {
  margin: 0;
  background: var(--au-menta);
  color: var(--au-notte);
  font-family: var(--au-sans);
  line-height: 1.6;
  -webkit-font-smoothing: antialiased;
}

.auth-page :focus-visible { outline: 2px solid var(--au-verde); outline-offset: 3px; }

/* --- Impianto a due colonne ------------------------------------------------ */

.auth { display: grid; grid-template-columns: 1fr; min-height: 100vh; }

/* --- Colonna sinistra: pannello di marca ---------------------------------- */

.auth__aside {
  position: relative;
  overflow: hidden;
  background-color: var(--au-cupo);
  background-image: var(--au-grad-scuro);
  color: rgba(255, 255, 255, 0.78);
  padding: clamp(1.5rem, 5vw, 3.5rem) var(--au-aside-pad-x);
  display: flex;
  flex-direction: column;
  gap: 1.5rem;
}

/* Alone decorativo in alto a destra. Smeraldo: e' l'unico impiego che il
   sistema gli concede, perche' come testo starebbe a 2,81:1. */
.auth__aside::before {
  content: "";
  position: absolute;
  top: -30%;
  right: -18%;
  width: min(680px, 90%);
  aspect-ratio: 1;
  border-radius: 50%;
  background: radial-gradient(circle, rgba(47, 174, 125, 0.22), rgba(47, 174, 125, 0) 68%);
  pointer-events: none;
}

.auth__aside > * { position: relative; }

/* The way out, first in the aside: on phones the aside is the top band, so the
   link is the first thing on the page there too. `align-self` keeps the hit
   area on the words instead of stretching it across the whole column.
   White at 78% is the same value the bullet list uses — around 5,6:1 on the
   worst end of the gradient (#0E5C45), above the 4,5 these 14px ask for. */
.auth__back {
  align-self: flex-start;
  display: inline-flex;
  align-items: center;
  gap: 0.4rem;
  color: rgba(255, 255, 255, 0.78);
  font-size: 0.88rem;
  font-weight: 500;
  text-decoration: none;
  transition: color 0.18s;
}

.auth__back svg { flex: 0 0 auto; }
.auth__back:hover { color: #fff; }

/* The page-wide focus ring is forest green: on this dark panel it would be all
   but invisible. This is the only focusable element the aside has, and the mint
   stands at 7,49:1 on the gradient. */
.auth-page .auth__back:focus-visible { outline-color: var(--au-menta-soft); }

.auth__logo { display: block; width: 200px; max-width: 60%; height: auto; }

.auth__claim {
  margin: 0;
  font-family: var(--au-display);
  /* §E37.1 — 400 era il peso del serif: un Newsreader a 400 si distingueva da
     solo. Con una famiglia sola il peso e' l'UNICO segnale che separa un titolo
     dal testo attorno, quindi i display stanno a 700 come sul sito. Non e' un
     vezzo: a 400 questo titolo pesava meno delle label sotto. */
  font-weight: 700;
  font-size: clamp(1.7rem, 3vw, 2.6rem);
  line-height: 1.12;
  letter-spacing: -0.015em;
  color: #fff;
  text-wrap: balance;
}

.auth__points { list-style: none; margin: 0; padding: 0; display: grid; gap: 0.7rem; }

.auth__points li {
  display: flex;
  align-items: flex-start;
  gap: 0.6rem;
  font-size: 0.95rem;
  color: rgba(255, 255, 255, 0.78);
}

.auth__points svg { flex: 0 0 auto; margin-top: 2px; color: var(--au-menta-soft); }

.auth__note {
  margin: 0;
  padding-top: 1rem;
  border-top: 1px solid rgba(255, 255, 255, 0.14);
  font-size: 0.82rem;
  /* Era 0.55, che bastava sul pannello piatto #14133A. Il gradiente sale fino a
     #0E5C45 e li' il bianco al 55% scende a 3,58:1, sotto il 4,5 che questi
     13px chiedono. Al 72% sta a 4,98:1 sull'estremo peggiore. */
  color: rgba(255, 255, 255, 0.72);
}

/* Foto dell'hero del sito, stesso ritaglio ad arco (clipPath #auth-arco, reso
   inline dal partial). Va a filo del bordo destro del pannello — annullando il
   padding — perché è così che è ancorata nel sito: il taglio deve mordere verso
   il testo, non galleggiare in mezzo. `margin-top: auto` la spinge in fondo e si
   prende lo spazio che il testo non usa. */
/* §E37 — il sito ha abbandonato il ritaglio ad arco: l'hero e' un rettangolo
   arrotondato. Niente piu' margine negativo: la foto e' un riquadro dentro il
   pannello, come sul sito, non una banda a filo del bordo.
   Il 52/21 nasceva dal rapporto NATIVO della prima foto (2080x840), cosi' il
   ritaglio restava quello deciso nel file. La foto e' poi stata sostituita con
   una 1376x768 (1,80:1), quindi ora il rapporto e' una forma decisa QUI e
   `object-fit: cover` toglie circa il 14% sopra e altrettanto sotto. Regge
   perche' il soggetto e' centrato; se la foto cambia ancora, questo e' il
   numero da rivedere insieme all'inquadratura. */
.auth__foto {
  position: relative;
  margin-top: auto;
  aspect-ratio: 52 / 21;
  max-height: 40vh;
  border-radius: 22px;
  overflow: hidden;
  box-shadow: var(--au-ombra-foto);
}

/* The source is 16:9 and the frame is panoramic, so `cover` trims ~28% of the
   height. Pulling the focus down keeps the bell — the subject — whole against
   the bottom edge; centring would slice off its base. */
.auth__foto img {
  width: 100%;
  height: 100%;
  display: block;
  object-fit: cover;
  /* 75% leaves the receptionist's head clear of the top crop and the bell's
     base clear of the bottom one. */
  object-position: center 75%;
}

/* Sul sito questa foto va SENZA velo, ma li' sta su fondo bianco. Qui il
   pannello e' verde scuro e una foto luminosa senza velo si stacca come un
   adesivo: il velo la lega al fondo senza spegnerla. */
.auth__foto::after {
  content: "";
  position: absolute;
  inset: 0;
  background: rgba(14, 42, 34, 0.12);
  pointer-events: none;
}

/* --- Colonna destra: il form ---------------------------------------------- */

.auth__main {
  display: flex;
  /* §E37.1 — colonna, per reggere il pannello PIU' la riga legale sotto. Era
     `flex` in riga con un figlio solo centrato da `margin: auto`; un secondo
     figlio ci sarebbe finito affianco. */
  flex-direction: column;
  justify-content: center;
  padding: clamp(2rem, 5vw, 4rem) clamp(1.25rem, 4vw, 2.5rem);
  /* La fascia con cui il sito apre le pagine interne. Non arriva al bianco (si
     ferma a #F2F9F6) cosi' il pannello bianco ci si stacca sopra: e' il pattern
     "card bianca sulla sezione menta". */
  background-image: var(--au-grad-hero);
  /* Container NOMINATO: .form__cards-col ne dichiara già uno anonimo, e la
     regola anonima di application.css che impila le .form__grid strette si
     risolve su quello. Col nome le due query non si intercettano.
     Sta qui e non sul pannello: il pannello non può interrogare la propria
     larghezza per deciderla: la misura utile è lo spazio disponibile. */
  container-type: inline-size;
  container-name: auth-col;
}

/* `margin: auto` e non `align-items: center`: centra il pannello quando ci sta,
   ma sui form lunghi (registrazione) non ne taglia la testa fuori dallo scroll. */
.auth__panel {
  width: 100%;
  max-width: 30rem;
  /* Il centraggio verticale ora lo fa `justify-content` sulla colonna: qui
     resta il solo centraggio orizzontale. */
  margin: 0 auto;
  background: #fff;
  border: 1px solid var(--au-linea);
  border-radius: var(--au-r-card);
  padding: clamp(1.7rem, 3vw, 2.5rem);
}

/* A colonna singola resta stretto: un campo di testo largo 670px si legge male.
   Cresce solo quando le due colonne stanno davvero dentro (vedi sotto). */
.auth__panel--wide { max-width: 42rem; }

/* --- Selettore di lingua ---------------------------------------------------
   Sta nel flusso, sopra il pannello, e non in posizione assoluta nell'angolo:
   sotto i 1000px la colonna del brand sparisce e il pannello sale, e un angolo
   assoluto gli finirebbe sopra proprio dove il form comincia. */
.auth__topbar {
  display: flex;
  justify-content: flex-end;
  /* NON `margin: 0 auto`: un margine automatico sull'asse trasversale annulla lo
     stretch del flex e la barra si restringerebbe al contenuto, centrandosi.
     Deve tenere tutta la colonna, con il selettore spinto a destra. */
  margin: 0 0 0.9rem;
  /* Serve al menu, che si apre in assoluto: senza, il primo antenato posizionato
     sarebbe la colonna e il pannello si aprirebbe al bordo della pagina. */
  position: relative;
  z-index: 5;
}

.auth__lang { position: relative; }

.auth__lang > summary {
  cursor: pointer;
  /* `list-style: none` piu' la pseudo-classe WebKit: il triangolino nativo di
     `details` si toglie in due modi diversi a seconda del motore. */
  list-style: none;
  display: inline-flex;
  align-items: center;
  gap: 6px;
  padding: 6px 10px;
  border-radius: 999px;
  border: 1px solid var(--au-linea);
  background: rgba(255, 255, 255, 0.75);
  color: var(--au-verde);
}

.auth__lang > summary::-webkit-details-marker { display: none; }
.auth__lang > summary:hover { background: #fff; border-color: var(--au-linea-verde); }

.auth__lang-code { font-size: 0.82rem; font-weight: 600; letter-spacing: 0.04em; }
.auth__lang-caret { font-size: 0.7em; opacity: 0.7; }

/* Allineato a DESTRA: il selettore sta al bordo destro della colonna, e un menu
   allineato a sinistra uscirebbe dal viewport. */
.auth__lang-menu {
  position: absolute;
  right: 0;
  z-index: 30;
  margin: 8px 0 0;
  padding: 6px;
  min-width: 11rem;
  list-style: none;
  background: #fff;
  border: 1px solid var(--au-linea);
  border-radius: var(--au-r-card);
  box-shadow: 0 10px 30px rgba(14, 42, 34, 0.14);
}

.auth__lang-menu li { margin: 0; }

.auth__lang-item {
  display: block;
  padding: 8px 10px;
  border-radius: 8px;
  color: var(--au-notte);
  /* Sottolineatura via: sono voci di un menu, non rimandi dentro un testo. */
  text-decoration: none;
  font-size: 0.9rem;
}

.auth__lang-item:hover { background: var(--au-linea-tenue); }
.auth__lang-item.is-current { font-weight: 700; color: var(--au-verde); }

/* Dati societari. `--au-testo-tenue` (#5F7268) qui NON basta: sul capo scuro del
   gradiente hero sta a 4,28:1, sotto il 4,5 che questi 12px chiedono. Il grado
   piu' scuro ci sta a 6,84:1. */
.auth-page .auth__legal {
  margin: 1.5rem 0 0;
  text-align: center;
  font-size: 0.76rem;
  line-height: 1.6;
  color: var(--au-testo-soft);
}

/* --- Form a due colonne (registrazione) ----------------------------------- */

/* .form__cards passa a due colonne a 1100px di VIEWPORT, ma qui la colonna del
   form è molto più stretta della finestra: a 1280px si otterrebbero due colonne
   da 288px. La soglia va letta dallo spazio disponibile, non dalla finestra. */
.auth-page .form__cards { grid-template-columns: 1fr; }

@container auth-col (min-width: 51rem) {
  /* Sopra i ~1050px di contenuto le colonne superano i 520px e le coppie di
     campi restano affiancate (ci pensa la @container di application.css). */
  .auth__panel--wide { max-width: 72rem; }

  .auth-page .form__cards {
    grid-template-columns: repeat(2, minmax(0, 1fr));
    align-items: start;
  }

  /* Il pannello a due colonne è largo oltre 1100px: una CTA a tutta larghezza
     smetterebbe di leggersi come un bottone. */
  .auth-page .form__actions { max-width: 26rem; margin-inline: auto; }
}

/* application.css azzera il margine delle sole .panel__section: qui le card
   sono .form__section, e l'ultima di ogni colonna si porterebbe dietro il
   proprio margine sommato al gap della griglia. */
.auth-page .form__cards-col > .form__section { margin: 0; }

/* --- Sezione facoltativa richiudibile ------------------------------------- */

.auth-page .form__sep { border-top-color: var(--au-linea); }
.auth-page .form__collapse-summary { color: var(--au-testo-soft); }
.auth-page .form__collapse-summary:hover { color: var(--au-verde); }

.auth-page .signup__title {
  margin: 0.35rem 0 0.6rem;
  font-family: var(--au-display);
  /* Stessa ragione del claim: display a 700. */
  font-weight: 700;
  font-size: clamp(1.8rem, 3.4vw, 2.4rem);
  line-height: 1.12;
  letter-spacing: -0.015em;
  color: var(--au-notte);
  text-wrap: balance;
}

.auth-page .signup__subtitle {
  margin: 0 0 1.8rem;
  color: var(--au-testo-soft);
  font-size: 1rem;
  line-height: 1.6;
}

.auth__eyebrow {
  display: inline-flex;
  align-items: center;
  margin: 0;
  font-size: 0.72rem;
  font-weight: 500;
  letter-spacing: 0.16em;
  text-transform: uppercase;
  color: var(--au-verde);
}


/* Rimando all'altra strada (accesso <-> registrazione), staccato dal form. */
/* `.form__link` si centra da solo con `align-self`, ma solo dentro
   `.form__actions`, che e' flex. Qui il link sta in un <p>, dove `align-self`
   non ha effetto: il centraggio lo deve fare la riga. */
.auth-page .signup__alt {
  margin: 1.5rem 0 0;
  padding-top: 1.1rem;
  border-top: 1px solid var(--au-linea);
  font-size: 0.9rem;
  color: var(--au-testo-soft);
  text-align: center;
}

/* --- Campi ---------------------------------------------------------------- */

.auth-page .form__input {
  width: 100%;
  padding: 0.82rem 1rem;
  border: 1px solid var(--au-linea);
  border-radius: var(--au-r-field);
  background: #fff;
  color: var(--au-notte);
  font-family: var(--au-sans);
  font-size: 0.96rem;
  box-shadow: none;
  transition: border-color 0.15s, box-shadow 0.15s, background 0.15s;
}

.auth-page .form__input:focus {
  outline: none;
  border-color: var(--au-verde);
  background: #fff;
  box-shadow: 0 0 0 3px rgba(14, 92, 69, 0.14);
}

.auth-page .form__input::placeholder { color: var(--au-testo-soft); opacity: 0.7; }

/* §E41 — Campo password con il pulsante che la mostra in chiaro.
   Il padding a destra dell'input non e' decorativo: senza, una password lunga
   scorre sotto al pulsante e non si legge proprio mentre la si sta rileggendo. */
.auth-page .form__password { position: relative; }
.auth-page .form__password .form__input { padding-right: 2.9rem; }

.auth-page .form__password-toggle {
  position: absolute;
  top: 50%;
  right: 0.5rem;
  transform: translateY(-50%);
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 2rem;
  height: 2rem;
  padding: 0;
  border: 0;
  border-radius: 8px;
  background: transparent;
  color: var(--au-testo-tenue);
  cursor: pointer;
  transition: color 0.15s, background 0.15s;
}

.auth-page .form__password-toggle:hover { color: var(--au-verde); background: var(--au-menta); }

/* Stesso anello del focus dei campi: il pulsante sta dentro l'input, e due
   trattamenti diversi a un centimetro di distanza si notano. */
.auth-page .form__password-toggle:focus-visible {
  outline: none;
  color: var(--au-verde);
  box-shadow: 0 0 0 3px rgba(14, 92, 69, 0.14);
}

/* §E37.1 — era 600, che con Inter era un peso vero e con Ubuntu non esiste:
   il browser risaliva al piu' vicino superiore e le rendeva a 700, piu' marcate
   di quanto qualcuno avesse deciso. 500 e' il valore di `.field label` sul sito,
   di cui questa regola e' gia' una copia (stesso corpo, stesso margine). */
.auth-page .form__label {
  display: block;
  margin: 0 0 0.4rem;
  font-size: 0.86rem;
  font-weight: 500;
  color: var(--au-notte);
}

.auth-page .form__hint {
  margin: 0.4rem 0 0;
  font-size: 0.82rem;
  line-height: 1.5;
  color: var(--au-testo-soft);
}

.auth-page .form__row { margin: 0 0 1.2rem; }
.auth-page .form__row:last-child { margin-bottom: 0; }

/* Il gap verticale lo dà già il margine della riga: senza azzerare il row-gap
   le coppie affiancate, una volta impilate sul mobile, si distanziano il doppio. */
.auth-page .form__grid { gap: 0 1rem; }

.auth-page .form__row--check { display: flex; align-items: flex-start; gap: 0.6rem; }
.auth-page .form__row--check .form__label { margin: 0; font-weight: 400; font-size: 0.9rem; }
.auth-page input[type="checkbox"] { accent-color: var(--au-verde); width: 1rem; height: 1rem; margin-top: 0.2rem; }

.auth-page .form__section {
  border: 1px solid var(--au-linea);
  border-radius: var(--au-r-section);
  background: var(--au-menta);
  padding: 1.4rem 1.3rem;
  margin: 0 0 1.4rem;
}

.auth-page .form__legend {
  padding: 0 0.5rem;
  font-size: 0.82rem;
  font-weight: 500;
  letter-spacing: 0.14em;
  text-transform: uppercase;
  color: var(--au-verde);
}

.auth-page .form__errors {
  margin: 0 0 1.4rem;
  padding: 1rem 1.1rem;
  border: 1px solid var(--au-danger-line);
  border-radius: var(--au-r-card);
  background: var(--au-danger-bg);
  color: var(--au-danger);
  font-size: 0.92rem;
}

/* Anche questo chiedeva 600. Qui il 700 lo vogliamo davvero — e' l'unica riga
   di intestazione del blocco — quindi si dichiara invece di ereditarlo. */
.auth-page .form__errors-title { margin: 0 0 0.5rem; font-weight: 700; }
.auth-page .form__errors ul { margin: 0; padding-left: 1.1rem; }

/* --- Azioni --------------------------------------------------------------- */

/* Colonna e non riga: il pannello è stretto, e la CTA a tutta larghezza è
   quella del sito (il submit del modulo contatti è `w-full`). */
.auth-page .form__actions {
  display: flex;
  flex-direction: column;
  align-items: stretch;
  gap: 0.9rem;
  margin-top: 1.6rem;
}

/* La regola M3 di application.css (`height: 40px; padding: 0 22px`) non è mai
   annullata da StayBell: qui va riscritta, o il bottone resta basso e stretto. */
.auth-page .btn {
  height: auto;
  padding: 0.95rem 1.7rem;
  border: 1px solid transparent;
  border-radius: var(--au-r-btn);
  font-family: var(--au-sans);
  font-size: 0.95rem;
  font-weight: 500;
  letter-spacing: 0;
  box-shadow: none;
  transition: background 0.18s, border-color 0.18s, color 0.18s;
}

/* Il gradiente d'azione del sito. `background-image` e non `background`: la
   regola StayBell che questo blocco batte usa la forma corta, e lasciarle il
   colore di fondo evita un lampo di indaco se il gradiente non dipinge. */
.auth-page .btn--primary {
  background-color: var(--au-verde);
  background-image: var(--au-grad-azione);
  color: #fff;
}
/* Qui il `filter` lo vogliamo: e' lo hover del sito. La versione precedente lo
   azzerava per spegnere il `brightness` di application.css, che ora torna utile. */
.auth-page .btn--primary:hover { filter: brightness(1.12); }

.auth-page .btn--ghost { background: transparent; border-color: var(--au-linea); color: var(--au-notte); }
.auth-page .btn--ghost:hover { background: transparent; border-color: var(--au-verde); }

.auth-page .form__link {
  align-self: center;
  color: var(--au-notte);
  border-bottom: 1px solid var(--au-verde);
  padding-bottom: 2px;
  font-size: 0.9rem;
  font-weight: 500;
  text-decoration: none;
  transition: color 0.18s, border-color 0.18s;
}

.auth-page .form__link:hover { color: var(--au-verde); border-color: var(--au-verde); }

/* Link dentro il testo del form — i documenti legali della registrazione e
   l'informativa dell'invito. Senza questa regola restano sul blu di default del
   browser, l'unico colore fuori palette che resterebbe in pagina. */
.auth-page .auth__panel a:not(.btn):not(.form__link) {
  color: var(--au-verde);
  text-decoration: underline;
  text-underline-offset: 2px;
}

.auth-page .auth__panel a:not(.btn):not(.form__link):hover { color: var(--au-notte); }

/* --- Flash ---------------------------------------------------------------- */

/* Nel layout `auth` i flash stanno dentro la colonna del form, non a tutta
   pagina come nel layout `application`: qui perdono la fascia e diventano note. */
.auth-page .flash {
  margin: 0 0 1.4rem;
  padding: 0.9rem 1.1rem;
  border-radius: var(--au-r-card);
  border: 1px solid transparent;
  text-align: left;
  font-size: 0.92rem;
  font-weight: 500;
}

.auth-page .flash--notice { background: var(--au-ok-bg); border-color: var(--au-ok-line); color: var(--au-ok-fg); }
.auth-page .flash--alert { background: var(--au-danger-bg); border-color: var(--au-danger-line); color: var(--au-danger); }

/* --- Desktop -------------------------------------------------------------- */

@media (min-width: 1000px) {
  /* Il tetto evita che su monitor molto larghi il pannello prenda oltre 1000px
     per poche righe di testo, togliendoli alla colonna del form. */
  .auth { grid-template-columns: minmax(400px, min(42%, 40rem)) 1fr; }

  /* `align-self: start` + altezza piena: l'area di griglia cresce con la colonna
     destra (la registrazione è lunga), il pannello resta fermo mentre si scorre. */
  .auth__aside { position: sticky; top: 0; align-self: start; height: 100vh; gap: 2rem; }
  .auth__logo { width: 236px; }
  .auth__claim { margin-top: 0.5rem; }
}

/* Sotto il breakpoint il pannello è una fascia compatta: logo e claim bastano a
   dare la marca, l'elenco dei punti ruberebbe solo la prima schermata al form. */
@media (max-width: 999px) {
  .auth__points, .auth__note, .auth__foto { display: none; }
  .auth__claim { font-size: 1.35rem; }
  .auth__aside { gap: 1rem; }
}

/* Schermi bassi (portatili 13", finestre affiancate): fra la foto e il form
   vince il form. Il pannello resta con logo, claim e punti. */
@media (min-width: 1000px) and (max-height: 760px) {
  .auth__foto { display: none; }
  .auth__note { margin-top: auto; }
}
