/* ============================================================
   LA SCHERMATA D'ACCESSO (`src/js/core/login-*.js`)

   Due metà: la porta a sinistra, il quadrante a destra
   (`login-quadrante.css`), che sotto ai 980px sparisce. È un foglio
   condiviso perché la porta non è una pagina: la disegna il nucleo, prima
   di qualunque pagina. Prefisso `lg-`; `login-alert` e `login-err` restano
   dei due canali dei messaggi, come prima.
   ============================================================ */
.lg-shell{height:100vh;height:100dvh;overflow-y:auto;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.15fr);background:var(--bg);color:var(--text);}
.lg-shell.solo{grid-template-columns:1fr;}
.lg-pane{display:flex;flex-direction:column;padding-block:28px;padding-inline:clamp(16px,5vw,64px);min-height:100vh;box-sizing:border-box;}
.lg-top{display:flex;align-items:center;justify-content:space-between;gap:12px;}
.lg-mid{flex:1;display:flex;align-items:center;justify-content:center;padding-block:32px;}
.lg-box{width:100%;max-width:400px;}
.lg-foot{display:flex;justify-content:flex-end;color:var(--muted);font-size:11.5px;}

.lg-logo{display:flex;align-items:center;gap:10px;min-width:0;}
.lg-logo .brand-mark{width:34px;height:34px;}
.lg-brand{font-family:'Bricolage Grotesque','Inter',system-ui,sans-serif;font-weight:800;font-size:23px;letter-spacing:-.045em;line-height:1;white-space:nowrap;}
.lg-studio{font-size:11px;font-weight:700;padding:3px 9px;border-radius:999px;background:var(--track);color:var(--neutral-ink);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;}
.lg-help-wrap{position:relative;}
.lg-help{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font:inherit;font-size:12.5px;font-weight:600;background:none;border:none;border-radius:8px;padding:6px 8px;cursor:pointer;}
.lg-help:hover{background:var(--hover);color:var(--text);}
.lg-help svg{width:15px;height:15px;}
.lg-help-pop{position:absolute;right:0;top:calc(100% + 6px);z-index:5;width:260px;background:var(--card);border:1px solid var(--border);border-radius:12px;box-shadow:var(--shadow-lift);padding:12px 14px;font-size:12.5px;line-height:1.5;color:var(--neutral-ink);}

/* ---- i testi ---- */
.lg-view{animation:lg-entra .28s ease-out;}
@keyframes lg-entra{from{opacity:.3;transform:translateX(8px);}to{opacity:1;transform:none;}}
.lg-eyebrow{font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.6px;color:var(--primary-dark);margin:0 0 10px;display:flex;align-items:center;gap:6px;}
.lg-eyebrow svg{width:13px;height:13px;}
.lg-view h1{font-size:30px;font-weight:800;letter-spacing:-.8px;line-height:1.1;margin:0 0 8px;text-wrap:balance;}
.lg-lede{color:var(--muted);font-size:13.5px;line-height:1.55;margin:0 0 26px;}
.lg-lede strong{color:var(--text);font-weight:600;}
.lg-note{font-size:12px;color:var(--muted);margin:8px 0 0;line-height:1.45;}
.lg-foot-note{text-align:center;color:var(--muted);font-size:12.5px;margin:24px 0 0;}
.lg-foot-note.lg-ask{margin-top:8px;}
.lg-mail{display:inline-flex;align-items:center;gap:6px;background:var(--card);border:1px solid var(--border);border-radius:8px;padding:2px 9px;font-weight:600;color:var(--text);font-size:12.5px;vertical-align:middle;}
.lg-mail svg{width:13px;height:13px;color:var(--muted);}
.lg-back{display:inline-flex;align-items:center;gap:6px;color:var(--muted);font:inherit;font-size:12.5px;font-weight:600;background:none;border:none;cursor:pointer;padding:6px 8px 6px 4px;margin:0 0 18px -4px;border-radius:8px;}
.lg-back:hover{color:var(--text);background:var(--hover);}
.lg-back svg{width:15px;height:15px;}
.lg-hero{width:52px;height:52px;border-radius:15px;background:var(--primary-soft);color:var(--primary-dark);display:flex;align-items:center;justify-content:center;margin-bottom:18px;}
.lg-hero svg{width:24px;height:24px;}

/* ---- chi torna ---- */
.lg-remembered{display:flex;align-items:center;gap:12px;border:1px solid var(--border);border-radius:12px;padding:10px 12px;background:var(--card);margin-bottom:16px;}
.lg-av{width:34px;height:34px;border-radius:50%;background:var(--primary);color:var(--on-accent);display:flex;align-items:center;justify-content:center;font-size:13px;font-weight:700;flex-shrink:0;}
.lg-who{flex:1;min-width:0;}
.lg-who b{display:block;font-size:13px;}
.lg-who span{font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;display:block;}

/* ---- i campi ---- */
.lg-field{margin-bottom:14px;}
.lg-field-h{display:flex;align-items:baseline;justify-content:space-between;gap:8px;margin-bottom:6px;}
.lg-field-h label{font-size:11.5px;font-weight:700;color:var(--muted);text-transform:uppercase;letter-spacing:.3px;}
.lg-wrap{position:relative;display:flex;align-items:center;}
.lg-lead{position:absolute;left:12px;width:16px;height:16px;color:var(--dim);pointer-events:none;transition:color .15s;}
.lg-wrap:focus-within .lg-lead{color:var(--primary);}
.lg-input{width:100%;box-sizing:border-box;border:1px solid var(--border);border-radius:10px;padding:11px 12px 11px 38px;font:inherit;font-size:14px;color:var(--text);background:var(--field);transition:border-color .15s,box-shadow .15s,background .15s;}
.lg-input::placeholder{color:var(--dim);}
.lg-input:hover{border-color:var(--primary-mid);}
.lg-input:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft);background:var(--card);}
.lg-input.trail{padding-right:44px;}
.lg-input[aria-invalid="true"]{border-color:var(--red);}
.lg-input[aria-invalid="true"]:focus{box-shadow:0 0 0 3px var(--red-soft);}
.lg-area{padding-left:12px;resize:none;}
.lg-code{text-transform:uppercase;letter-spacing:1px;font-variant-numeric:tabular-nums;}
.lg-eye{position:absolute;right:6px;width:32px;height:32px;border-radius:8px;border:none;background:transparent;color:var(--muted);display:inline-flex;align-items:center;justify-content:center;cursor:pointer;}
.lg-eye:hover{background:var(--hover);color:var(--text);}
.lg-eye svg{width:16px;height:16px;}
/* Il posto dell'errore c'è sempre: vuoto non occupa spazio. */
.login-fielderr:empty{display:none;}
.login-err{display:flex;align-items:center;gap:5px;font-size:12px;margin:6px 0 0;color:var(--red-dark);font-weight:500;line-height:1.45;}
.login-err svg{width:13px;height:13px;flex-shrink:0;}
.login-err.warn{color:var(--amber-dark);}

.lg-check{display:flex;align-items:center;gap:8px;font-size:13px;cursor:pointer;user-select:none;position:relative;margin:4px 0 20px;}
.lg-check input{position:absolute;opacity:0;width:18px;height:18px;margin:0;cursor:pointer;}
.lg-chk{width:18px;height:18px;border-radius:6px;border:1.5px solid var(--dim);display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;background:var(--card);box-sizing:border-box;transition:background .15s,border-color .15s;}
.lg-chk svg{width:12px;height:12px;color:var(--on-accent);opacity:0;}
.lg-check input:checked + .lg-chk{background:var(--primary);border-color:var(--primary);}
.lg-check input:checked + .lg-chk svg{opacity:1;}
.lg-check input:focus-visible + .lg-chk{box-shadow:0 0 0 3px var(--primary-soft);}

/* ---- i pulsanti ---- */
.lg-block{width:100%;justify-content:center;box-sizing:border-box;padding:11px 16px;font-size:13.5px;position:relative;overflow:hidden;}
.lg-view a.btn{text-decoration:none;}
.lg-alt{margin-top:12px;}
.lg-actions{display:flex;flex-direction:column;gap:10px;}
.lg-view .btn-primary{box-shadow:0 6px 14px color-mix(in srgb,var(--primary) 25%,transparent);}
.lg-view .btn-primary:hover{background:var(--primary-deep);}
.lg-view .btn:disabled{opacity:.55;cursor:not-allowed;}
/* In attesa: una barra che scorre sul fondo, al posto di una rotella. */
.lg-view .btn.loading::after{content:"";position:absolute;left:0;bottom:0;height:3px;width:40%;border-radius:3px;background:color-mix(in srgb,var(--on-accent) 85%,transparent);animation:lg-barra 1s ease-in-out infinite;}
.lg-view .btn-soft.loading::after,.lg-view .btn-ghost.loading::after{background:var(--primary);}
@keyframes lg-barra{0%{transform:translateX(-100%);}100%{transform:translateX(260%);}}
.lg-google{width:100%;box-sizing:border-box;justify-content:center;gap:9px;background:var(--card);border:1px solid var(--border);color:var(--text);padding:12px 16px;font-size:14px;box-shadow:var(--shadow);text-decoration:none;}
.lg-google:hover{background:var(--hover);box-shadow:var(--shadow-lift);}
.lg-google svg{flex-shrink:0;}
.lg-divider{display:flex;align-items:center;gap:12px;margin:22px 0;color:var(--muted);font-size:10.5px;font-weight:700;text-transform:uppercase;letter-spacing:.4px;}
.lg-divider::before,.lg-divider::after{content:"";flex:1;height:1px;background:var(--border);}
.lg-textlink{background:none;border:none;padding:0;color:var(--primary-dark);font:inherit;font-weight:600;font-size:12.5px;cursor:pointer;display:inline-flex;align-items:center;gap:5px;text-decoration:none;}
.lg-textlink:hover{text-decoration:underline;}
.lg-textlink svg{width:14px;height:14px;}
.lg-textlink:disabled{color:var(--muted);cursor:default;text-decoration:none;}
.lg-textlink:focus-visible,.lg-back:focus-visible,.lg-help:focus-visible,.lg-eye:focus-visible{outline:none;box-shadow:0 0 0 3px var(--primary-soft);border-radius:6px;}

/* ---- i due canali dei messaggi ----
   Sotto al campo, quello che non torna in quello che hai scritto; nel
   riquadro in cima, quello che è successo quando abbiamo provato. Le
   coppie di §2 — fondo tenue più inchiostro forte — si rovesciano da sole
   di notte. */
.login-alert{display:flex;gap:10px;align-items:flex-start;border-radius:12px;padding:11px 13px;font-size:12.5px;line-height:1.5;margin-bottom:18px;animation:lg-cade .25s ease-out;}
.login-alert svg{width:16px;height:16px;flex-shrink:0;margin-top:1px;}
.login-alert strong{display:block;font-weight:700;margin-bottom:1px;}
.login-alert .lg-textlink{color:inherit;text-decoration:underline;font-size:inherit;}
.login-alert.errore{background:var(--red-soft);color:var(--red-dark);}
.login-alert.avviso{background:var(--amber-soft);color:var(--amber-dark);}
.login-alert.info{background:var(--primary-soft);color:var(--primary-dark);}
@keyframes lg-cade{from{opacity:.4;transform:translateY(-4px);}to{opacity:1;transform:none;}}

/* ---- le sei cifre ---- */
.lg-otp{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;margin-bottom:8px;}
.lg-otp-in{width:100%;box-sizing:border-box;aspect-ratio:1/1.12;border:1px solid var(--border);border-radius:12px;text-align:center;font:inherit;font-size:22px;font-weight:700;color:var(--text);background:var(--field);font-variant-numeric:tabular-nums;transition:border-color .15s,box-shadow .15s,background .15s;padding:0;}
.lg-otp-in:focus{outline:none;border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-soft);background:var(--card);}
.lg-otp-in.filled{border-color:var(--primary-mid);background:var(--card);}
.lg-otp.invalid .lg-otp-in{border-color:var(--red);animation:lg-scuoti .35s;}
@keyframes lg-scuoti{25%{transform:translateX(-4px);}75%{transform:translateX(4px);}}
.lg-paste{display:flex;align-items:center;gap:5px;margin:0 0 16px;}
.lg-paste svg{width:13px;height:13px;}
.lg-otp-foot{display:flex;flex-direction:column;gap:8px;align-items:center;}

.lg-toast{position:fixed;left:50%;top:calc(18px + env(safe-area-inset-top,0px));transform:translateX(-50%);z-index:60;background:var(--inverse);color:var(--on-inverse);border-radius:12px;padding:10px 14px;font-size:12.5px;font-weight:500;box-shadow:var(--shadow-lift);max-width:calc(100vw - 32px);animation:lg-cade .25s ease-out;}


/* ---- la scheda del primo ingresso ----
   La scelta della password dopo un link o una provvisoria (`password-first.js`)
   resta nella scheda di prima: una colonna sola, al centro. */
.login-screen{height:100vh;height:100dvh;overflow-y:auto;display:flex;align-items:safe center;justify-content:center;
  background:var(--bg);padding:24px;}
.login-card{width:100%;max-width:380px;background:var(--card);border:1px solid var(--border);
  border-radius:16px;padding:30px 28px;box-shadow:var(--shadow);}
.login-brand{display:flex;align-items:center;gap:10px;margin-bottom:22px;}
.login-card h1{font-size:21px;font-weight:800;letter-spacing:-.02em;margin:0 0 6px;}
.login-note{font-size:13px;color:var(--muted);margin:0 0 20px;line-height:1.5;}
.login-card form{display:flex;flex-direction:column;gap:7px;}
.login-card label{font-size:11.5px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--muted);}
.login-card input{border:1px solid var(--border);border-radius:10px;padding:10px 12px;font-size:14px;
  font-family:inherit;background:var(--card);color:var(--text);width:100%;box-sizing:border-box;}
.login-card input:focus{outline:2px solid var(--primary-mid);outline-offset:1px;border-color:var(--primary);}
.login-card .btn{justify-content:center;margin-top:6px;padding:11px 14px;}
.login-card > .btn{width:100%;box-sizing:border-box;}
.login-card a.btn{text-decoration:none;}
.login-hint{font-size:12px;color:var(--muted);margin:2px 0 0;line-height:1.45;}
.login-ask{margin:18px 0 0;text-align:center;font-size:12.5px;color:var(--muted);}
.login-ask .login-link{display:inline;width:auto;margin:0;font-size:inherit;}

.login-card input[aria-invalid="true"]{border-color:var(--red);}
.login-card .btn:disabled{opacity:.55;cursor:default;}

.login-link{display:block;width:100%;margin:16px 0 0;padding:0;border:0;background:none;
  font-family:inherit;font-size:12.5px;color:var(--primary-dark);text-align:center;cursor:pointer;
  text-decoration:underline;text-underline-offset:2px;}
.login-link:hover{color:var(--primary-deep);}
.login-link:disabled{color:var(--muted);cursor:default;text-decoration:none;}
.login-link:focus-visible{outline:2px solid var(--primary-mid);outline-offset:3px;border-radius:6px;}


@media (max-width:980px){ .lg-shell{grid-template-columns:1fr;} .lg-visual{display:none;} }
@media (max-width:640px){
  .lg-pane{padding-block:18px;}
  .lg-mid{padding-block:24px;align-items:flex-start;}
  .lg-studio{display:none;}
}
@media (max-width:420px){
  .lg-view h1{font-size:26px;}
  .lg-otp{gap:6px;}
  .lg-otp-in{font-size:19px;border-radius:10px;}
}
@media (prefers-reduced-motion:reduce){
  .lg-view,.login-alert,.lg-toast,.lg-otp.invalid .lg-otp-in{animation:none;}
  .lg-view .btn.loading::after{animation:none;width:100%;}
}
