/* ===================================================================
   BASE DELLA ZONA CLIENT — condivisa da hub, app e pagine pubbliche.

   La landing è il riferimento del sistema visivo: qui si ripete la STESSA
   base tipografica che `landing.css` applica a #stageLanding, così l'app
   cliente non ha un secondo carattere e un secondo ritmo. Le regole di
   dettaglio restano nei fogli delle singole viste.

   Sistema tipografico (uguale in landing e app):
     testo           Inter · letter-spacing -.018em · line-height 1.5 · --lsoft
     display h1/h2   peso 450 · letter-spacing -.055em · --link
     titoli card     peso 600 · letter-spacing -.03em · --link
     micro-etichette IBM Plex Mono 600 9-10px · letter-spacing .13em · maiuscolo
   =================================================================== */
:root{
  /* Alias storici: i fogli dell'app (app.css, hub.css, v0-landing-app.css)
     nascono con questi nomi. Puntano ai token di tokens.css, quindi seguono
     il tema; non aggiungerne di nuovi, usare direttamente i --l… */
  --bg:var(--lbg);--bg2:var(--lbg2);--panel:var(--lpanel);--panel2:var(--lpanel2);
  --grid:var(--lline-soft);--line:var(--lline);--line2:var(--lline2);
  --white:var(--link);--soft:var(--lsoft);--dim:var(--ldim);--faint:var(--lfaint);
  --blue:var(--lblue);--blue-dim:var(--lblue-soft);--green:var(--lgreen);--amber:var(--lacc2);--red:var(--lred);
  --mono:var(--lmono);
  --sans:var(--lsans);
}
*{margin:0;padding:0;box-sizing:border-box}
html,body{min-height:100%;background:var(--lbg);color:var(--lsoft);
  font-family:var(--lsans);letter-spacing:-.018em;line-height:1.5;
  -webkit-font-smoothing:antialiased}
a{color:inherit;text-decoration:none}

/* Stessa base tipografica della landing anche dentro le due "stage" dell'app:
   senza questo l'app ereditava IBM Plex Mono senza crenatura, ed è il motivo
   per cui la gestione account sembrava di un altro prodotto. */
#stageHub,#stageApp{
  font-family:var(--lsans);letter-spacing:-.018em;line-height:1.5;
  color:var(--lsoft)}
#stageHub button,#stageHub input,#stageHub select,#stageHub textarea,
#stageApp button,#stageApp input,#stageApp select,#stageApp textarea{
  font-family:var(--lsans);letter-spacing:-.018em}

/* Micro-etichette. Le eyebrow di sezione seguono `.leyebrow` della landing e
   restano in Inter: possono contenere numeri. Il monospace è riservato alle
   etichette dei dati (`dt`), che sono sempre parole. */
#stageHub .eyebrow,#stageApp .eyebrow,
#stageHub .positions-eyebrow,#stageApp .positions-eyebrow,
#stageHub .idx,#stageApp .idx{
  font-family:var(--lsans);font-weight:600;letter-spacing:.12em;text-transform:uppercase}

/* stage router */
#stageHub,#stageApp{display:none}
#stageHub.active,#stageApp.active{display:block}
#stagePre.hidden{display:none}
#stageLanding{display:block}
#stageLanding.hidden{display:none}
html.lp,html.lp body{background:var(--lbg)}
/* app back-to-hub bar */
#appBack{position:fixed;left:0;top:0;z-index:600;display:none}
#stageApp.active #appBack{display:block}
/* accessibility: visible focus ring for keyboard navigation only */
:focus{outline:none}
:focus-visible{outline:2px solid var(--lacc);outline-offset:2px;border-radius:2px}
/* Diverse regole con un #id (es. `#stageApp .dbf-city{outline:none}`) vincevano
   per specificità sulla riga qui sopra e lasciavano campi e select senza alcun
   indicatore di focus: da tastiera non si capiva dove si era. Il focus ring è un
   requisito (WCAG 2.4.7), quindi qui vince sempre. */
:focus-visible{outline:2px solid var(--lacc) !important;outline-offset:2px !important}

/* Salto al contenuto: fuori schermo finché non prende il focus da tastiera.
   Senza, per arrivare alla vista corrente bisogna attraversare tutta la nav. */
.skip-link{position:fixed;left:12px;top:-64px;z-index:9999;background:var(--lacc,#8e9cff);
  color:#0b1020;padding:10px 16px;border-radius:8px;font-weight:600;font-size:14px;
  text-decoration:none;transition:top .15s}
.skip-link:focus{top:12px}

/* Elementi che erano <div>/<span> con un onclick: ora sono <button> (tastiera,
   ruolo, focus). Qui si tolgono gli stili UA del bottone; l'aspetto vero lo
   danno le regole più specifiche nei fogli caricati dopo questo. */
.mod .go,#statsTab,#statsPanel .ph .x,#statsPanel .statfoot .up,#statsPanel .statfoot .mng,
.sv-back,.sv-cards .cta,.fc-go,.cfg-back,.cfg-go,.ao-go,.ao-skip,.addon-back,.intel-x,
.fu-invite{
  background:none;border:0;padding:0;margin:0;color:inherit;font:inherit;
  text-align:inherit;cursor:pointer;-webkit-appearance:none;appearance:none}
/* Il link "unlock with an invite code" era un <a> senza href: non si poteva
   raggiungere da tastiera e lo screen reader non lo annunciava come comando. */
.fu-invite{text-decoration:underline}

/* ===================================================================
   Selettore di ateneo (scripts/university-picker.js)
   Il campo università non è più testo libero: si cerca nell'elenco
   verificato e si sceglie. Stile condiviso da onboarding (#stageHub) e
   area personale (#stageApp); i due contesti lo ritoccano nei propri fogli.
   =================================================================== */
.unipick{position:relative;display:block}
.unipick-list{position:absolute;left:0;right:0;top:calc(100% + 6px);z-index:60;
  max-height:288px;overflow-y:auto;padding:5px;border:1px solid var(--lline2);
  border-radius:var(--lr-sm,11px);background:var(--lpanel);
  box-shadow:0 18px 44px rgba(12,18,38,.16)}
.unipick-opt{display:flex;align-items:baseline;gap:10px;justify-content:space-between;
  padding:9px 11px;border-radius:8px;cursor:pointer;font-size:13.5px;color:var(--ltxt)}
.unipick-opt:hover,.unipick-opt.on{background:color-mix(in srgb,var(--lacc) 10%,transparent);
  color:var(--lacc-h)}
.unipick-name{min-width:0;letter-spacing:-.018em}
.unipick-cc{flex:none;color:var(--ldim);font:600 9px/1.2 var(--lmono);
  letter-spacing:.11em;text-transform:uppercase}
.unipick-empty{padding:11px;color:var(--ldim);font-size:13px}
.unipick-add{display:block;width:100%;margin-top:4px;padding:10px 11px;border:0;
  border-top:1px solid var(--lline);background:none;color:var(--lacc);
  font:600 12px var(--lsans);text-align:left;cursor:pointer}
.unipick-add:hover{color:var(--lacc-h);text-decoration:underline}
.unipick-note{margin-top:6px;color:var(--ldim);font-size:11.5px;letter-spacing:-.01em}
.unipick-ok{color:var(--lgreen);font-weight:600}
.unipick-warn{color:var(--lacc2,#b26a00);font-weight:600}
.unipick-link{border:0;padding:0;background:none;color:var(--lacc);
  font:inherit;text-decoration:underline;cursor:pointer}
