:root {
  --blu: #1E3A8A; --blu2: #2563EB; --blu-l: #DBEAFE;
  --verde: #166534; --verde-l: #DCFCE7;
  --rosso: #DC2626; --rosso-l: #FEF2F2;
  --arancio: #D97706; --arancio-l: #FFFBEB;
  --viola: #6D28D9; --viola-l: #F5F3FF;
  --bg: #F1F5F9; --border: #E2E8F0; --bordo-campo: #CBD5E1;
  --testo: #1E293B; --muted: #475569;
  --radius: 10px; --shadow: 0 1px 4px rgba(0,0,0,0.08);
  --nav-h: 54px;
}

*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body {
  font-family: system-ui, -apple-system, sans-serif;
  background: var(--bg); color: var(--testo);
  font-size: 15px; line-height: 1.5;
  min-height: 100vh;
}

.skip-link {
  position: absolute; top: -100%; left: 8px;
  background: var(--blu); color: #fff;
  padding: 8px 16px; border-radius: 0 0 8px 8px;
  font-weight: 600; z-index: 100; text-decoration: none;
}
.skip-link:focus { top: 0; }

/* ═══════════ LOGIN ═══════════ */
.login-screen {
  min-height: 100vh;
  display: flex; align-items: center; justify-content: center;
  background: linear-gradient(135deg, var(--blu) 0%, #1e40af 100%);
  padding: 20px;
}
.login-box {
  background: #fff; border-radius: 16px;
  padding: 40px 36px; width: 100%; max-width: 380px;
  box-shadow: 0 8px 32px rgba(0,0,0,0.18);
}
.login-box h1 {
  font-size: 22px; font-weight: 800; color: var(--blu); margin-bottom: 4px;
}
.login-box h1 span { color: var(--blu2); }
.login-box .subtitle {
  font-size: 13px; color: var(--muted); margin-bottom: 28px;
}
.form-grp { margin-bottom: 14px; }
.form-grp label {
  display: block; font-size: 12px; font-weight: 600;
  margin-bottom: 4px; color: var(--muted);
  text-transform: uppercase; letter-spacing: 0.4px;
}
.form-grp input {
  width: 100%; padding: 10px 12px;
  border: 1px solid var(--border); border-radius: 8px;
  font-size: 14px; transition: border-color 0.15s;
}
.form-grp input:focus {
  outline: none; border-color: var(--blu2);
  box-shadow: 0 0 0 3px rgba(37,99,235,0.15);
}
.btn-login {
  width: 100%; padding: 11px;
  background: var(--blu); color: #fff;
  border: none; border-radius: 8px;
  font-size: 15px; font-weight: 700;
  cursor: pointer; margin-top: 6px; transition: background 0.15s;
}
.btn-login:hover { background: var(--blu2); }
.btn-login:focus-visible { outline: 3px solid var(--blu2); outline-offset: 2px; }
/* Chi ha dimenticato la password: a chi chiederla (Step 10). */
.login-aiuto { margin: 16px 0 0; font-size: 13px; color: var(--muted); text-align: center; }

/* ═══════════ FLASH/ERROR ═══════════ */
.flash {
  padding: 10px 14px; border-radius: 8px;
  font-size: 13px; font-weight: 600;
  margin-bottom: 14px;
}
.flash.error { background: var(--rosso-l); color: var(--rosso); border: 1px solid var(--rosso); }
.flash.warning { background: var(--arancio-l); color: var(--arancio); border: 1px solid var(--arancio); }
.flash.info { background: var(--blu-l); color: var(--blu); border: 1px solid var(--blu2); }
.flash.success { background: var(--verde-l); color: var(--verde); border: 1px solid var(--verde); }
/* Lo stesso errore dentro il modulo ricompilato (modulo-respinto.js): in
   una finestra aperta quello in cima alla pagina resta coperto. */
.flash.modulo-respinto-msg { margin: 0 0 12px; font-weight: 600; }

/* ═══════════ NAV ═══════════ */
nav.topbar {
  background: #fff; border-bottom: 1px solid var(--border);
  height: var(--nav-h); display: flex; align-items: center;
  padding: 0 20px; gap: 12px; position: sticky; top: 0; z-index: 10;
}
/* La segreteria nel profilo di un tutor: si vede su ogni pagina. */
.striscia-profilo {
  position: sticky; top: var(--nav-h); z-index: 9;
  display: flex; align-items: center; justify-content: space-between;
  flex-wrap: wrap; gap: 8px 12px; padding: 8px 20px;
  background: var(--arancio-l); color: var(--testo);
  border-bottom: 2px solid var(--arancio); font-size: 14px;
}
.striscia-profilo form { margin: 0; }
.btn-striscia {
  min-height: 40px; padding: 6px 14px; border-radius: 8px; cursor: pointer;
  background: #B45309; color: #fff; border: none; font-weight: 700;
  font-size: 14px;
}
.btn-striscia:focus-visible { outline: 3px solid var(--blu2); outline-offset: 2px; }
@media (max-width: 640px) {
  .striscia-profilo { padding: 8px 16px; }
}
.nav-brand { font-weight: 800; font-size: 16px; color: var(--blu); }
.nav-brand span { color: var(--blu2); }
.nav-spacer { flex: 1; }
.nav-links { display: flex; align-items: center; gap: 4px; margin-left: 14px; }
.nav-link {
  padding: 6px 12px; border-radius: 7px;
  font-size: 13px; font-weight: 600; color: var(--muted);
  text-decoration: none; transition: background 0.15s, color 0.15s;
}
.nav-link:hover { background: var(--blu-l); color: var(--blu); }
.nav-link.is-active { background: var(--blu); color: #fff; }
.nav-user { display: flex; align-items: center; gap: 8px; font-size: 13px; color: var(--muted); }
.badge { padding: 2px 9px; border-radius: 20px; font-size: 11px; font-weight: 700; }
.badge.tutor { background: var(--blu-l); color: var(--blu); }
.badge.segreteria { background: #FCE7F3; color: #9D174D; }
.btn-exit {
  padding: 5px 12px; border: 1px solid var(--border);
  border-radius: 6px; background: transparent; font-size: 13px;
  cursor: pointer; color: var(--testo);
}
.btn-exit:hover { background: var(--rosso-l); border-color: var(--rosso); color: var(--rosso); }

.bell-wrap { position: relative; display: inline-block; margin-right: 6px; }
.bell-btn {
  position: relative;
  width: 38px; height: 38px;
  border: 1px solid var(--border); border-radius: 8px;
  background: #fff; cursor: pointer;
  font-size: 18px; line-height: 1;
  display: inline-flex; align-items: center; justify-content: center;
}
.bell-btn:hover { background: var(--blu-l); border-color: var(--blu2); }
.bell-btn:focus-visible { outline: 3px solid var(--blu2); outline-offset: 2px; }
.bell-count {
  position: absolute; top: -5px; right: -5px;
  background: var(--rosso); color: #fff;
  border-radius: 10px; min-width: 18px; height: 18px;
  font-size: 11px; font-weight: 800;
  display: inline-flex; align-items: center; justify-content: center;
  padding: 0 5px;
}
.bell-panel {
  position: absolute; top: 46px; right: 0;
  width: 280px; max-width: 90vw;
  background: #fff; border: 1px solid var(--border);
  border-radius: 10px; box-shadow: 0 8px 24px rgba(0,0,0,0.15);
  z-index: 50;
  overflow: hidden;
}
.bell-head {
  padding: 10px 14px;
  background: var(--blu); color: #fff;
  font-size: 13px; font-weight: 700;
}
.bell-list { list-style: none; padding: 0; margin: 0; }
.bell-item {
  display: flex; flex-direction: column; gap: 1px;
  padding: 10px 14px;
  border-bottom: 1px solid var(--border);
  font-size: 13px;
}
.bell-item:last-child { border-bottom: none; }
.bell-tipo {
  font-size: 10px; font-weight: 800; letter-spacing: 0.5px;
  text-transform: uppercase; color: var(--muted);
}
.bell-studente .bell-tipo { color: var(--blu); }
.bell-tutor .bell-tipo { color: #9D174D; }
.bell-docente .bell-tipo { color: var(--verde); }
.bell-name { font-weight: 700; }
.bell-ctx { font-size: 12px; color: var(--muted); }
.bell-empty {
  padding: 14px; text-align: center;
  color: var(--muted); font-size: 13px;
}
.bell-eta { color: var(--muted); font-weight: 500; }

.card-avvisi-stato {
  margin-top: 8px; padding: 6px 10px;
  border-radius: 6px; font-size: 12px;
  display: flex; align-items: center; gap: 6px;
  border-left: 4px solid;
}
.card-avvisi-stato[hidden] { display: none; }

.card-note-tutor {
  margin-top: 8px; padding: 6px 10px;
  border-radius: 6px; font-size: 12px;
  display: flex; align-items: center; gap: 6px;
  border-left: 4px solid #CA8A04;
  background: #FEF9C3; color: #854D0E;
}
.card-note-tutor[hidden] { display: none; }
.card-note-tutor.is-nuova { background: #FDE68A; border-left-color: #B45309; }
.note-nuove { font-weight: 800; color: #9A3412; }
.card-nota-classe {
  margin-top: 8px; padding: 6px 10px;
  border-radius: 6px; font-size: 12px;
  display: flex; align-items: center; gap: 6px;
  border-left: 4px solid var(--muted);
  background: #F1F5F9; color: var(--muted);
}
.card-nota-classe[hidden] { display: none; }
.corso-card.has-nota-classe .card-nota-classe {
  border-left-color: var(--rosso); background: var(--rosso-l); color: #991B1B;
}

.ora-uscita {
  display: inline-flex; align-items: center; gap: 3px;
  padding: 3px 8px; border-radius: 12px;
  background: #EDE9FE; color: #6D28D9;
  font-size: 12px; font-weight: 700;
}

.btn-nota-view {
  padding: 5px 10px; border-radius: 6px;
  border: 1px solid #CA8A04; background: #FEF9C3; color: #854D0E;
  font-size: 12px; font-weight: 700; cursor: pointer;
  display: inline-flex; align-items: center; gap: 4px;
}
.btn-nota-view:hover { background: #FEF3C7; border-color: #B45309; }
.modale-nota-studente {
  font-weight: 700; font-size: 14px; margin-bottom: 10px;
  color: var(--blu);
}
.modale-nota-testo {
  background: var(--bg); padding: 12px; border-radius: 8px;
  font-size: 14px; line-height: 1.6;
  white-space: pre-wrap; word-wrap: break-word;
  max-height: 60vh; overflow-y: auto;
}

.card-lezioni {
  margin-top: 8px;
  display: flex; flex-direction: column; gap: 6px;
  border-top: 1px dashed var(--border);
  padding-top: 8px;
}
.card-lezioni[hidden] { display: none; }
.lez-row {
  padding: 6px 9px; border-radius: 6px;
  background: var(--bg);
  font-size: 12px;
}
.lez-row.is-in-corso {
  background: var(--verde-l);
  border-left: 3px solid var(--verde);
}
.lez-head { display: flex; align-items: baseline; gap: 5px; flex-wrap: wrap; }
.lez-docente { font-weight: 700; color: var(--testo); }
.lez-materia { color: var(--muted); font-weight: 600; }
.lez-orario { color: var(--muted); margin-top: 1px; }
.lez-in-corso {
  color: var(--verde); font-weight: 700;
  text-transform: uppercase; font-size: 11px; letter-spacing: 0.4px;
}
.card-avvisi-stato.is-non-vis {
  background: #FEF3C7; color: #92400E; border-left-color: #B45309;
}
.card-avvisi-stato.is-vis {
  background: var(--verde-l); color: var(--verde); border-left-color: var(--verde);
}
.btn-back {
  display: inline-flex; align-items: center; gap: 4px;
  padding: 5px 12px; margin-left: 6px;
  border: 1px solid var(--border); border-radius: 7px;
  background: #fff; color: var(--testo);
  font-size: 13px; font-weight: 600; text-decoration: none;
  transition: background 0.15s, color 0.15s, border-color 0.15s;
}
.btn-back:hover { background: var(--blu-l); color: var(--blu); border-color: var(--blu2); }
.btn-back:focus-visible { outline: 3px solid var(--blu2); outline-offset: 2px; }
.btn-back .arrow { font-size: 15px; line-height: 1; }
@media (max-width: 640px) {
  .btn-back .label { display: none; }
  .btn-back { padding: 5px 9px; }
}

/* Il pulsante che riporta all'elenco classi tiene la sua etichetta
   anche sul telefono: da solo, la freccia non direbbe dove porta. */
@media (max-width: 640px) {
  .btn-classi .label { display: inline; }
}

/* ═══════════ SCELTA CLASSE (tutor multi-classe) ═══════════ */
.scelta-classi {
  list-style: none; display: grid; gap: 12px;
  margin-top: 20px;
}
.scelta-classe-card {
  display: flex; align-items: center; gap: 16px;
  padding: 18px 20px; text-decoration: none;
  background: #fff; border: 1px solid var(--border);
  border-radius: var(--radius); box-shadow: var(--shadow);
  color: var(--testo);
  transition: border-color 0.15s, box-shadow 0.15s, transform 0.15s;
}
.scelta-classe-card:hover {
  border-color: var(--blu2); box-shadow: 0 4px 14px rgba(37, 99, 235, 0.14);
  transform: translateY(-1px);
}
.scelta-classe-card:focus-visible {
  outline: 3px solid var(--blu2); outline-offset: 2px;
}
/* Il CUP è l'identificativo con cui il tutor riconosce la classe. */
.sc-cup {
  flex: 0 0 auto; min-width: 74px; padding: 10px 14px;
  background: var(--blu-l); color: var(--blu);
  border-radius: 10px; text-align: center;
  font-size: 20px; font-weight: 800; letter-spacing: 0.5px;
}
.sc-body { flex: 1 1 auto; display: flex; flex-direction: column; gap: 3px; }
.sc-indirizzo { font-size: 16px; font-weight: 700; }
.sc-meta { font-size: 13px; color: var(--muted); }
.sc-arrow { flex: 0 0 auto; font-size: 26px; color: var(--muted); line-height: 1; }

/* Anno chiuso: la card resta cliccabile — lo storico si consulta — ma
   spenta, perché non è lì che si lavora oggi. */
.scelta-classe-card.is-archiviata { background: #F8FAFC; }
.scelta-classe-card.is-archiviata .sc-cup {
  background: #E2E8F0; color: #475569;
}
.scelta-classe-card.is-archiviata .sc-indirizzo { color: #475569; }
.sezione-archivio { margin-top: 28px; }
.sezione-archivio h3 { font-size: 17px; margin: 0 0 2px; }

@media (max-width: 640px) {
  .scelta-classe-card { padding: 14px 16px; gap: 12px; }
  .sc-cup { min-width: 60px; padding: 8px 10px; font-size: 17px; }
  .sc-indirizzo { font-size: 15px; }
}

/* ═══════════ CONTENT ═══════════ */
.content { padding: 24px 20px; max-width: 1100px; width: 100%; margin: 0 auto; }
.page-header h2 { font-size: 22px; font-weight: 800; }
.page-header p { font-size: 14px; color: var(--muted); margin-top: 3px; }
.card {
  background: #fff; border: 1px solid var(--border);
  border-radius: var(--radius); padding: 20px;
  box-shadow: var(--shadow); margin-top: 20px;
}

/* ═══════════ DASHBOARD ═══════════ */
.data-badge {
  display: inline-block; margin-top: 8px;
  background: var(--blu-l); color: var(--blu);
  padding: 4px 14px; border-radius: 20px;
  font-size: 13px; font-weight: 700;
}
.data-badge.data-badge-alt {
  background: #FEF3C7; color: #92400E;
}

.page-header-row { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
/* Pezzo 16: un account con una o due sedi vede solo quelle, e lo legge. */
.sedi-account { flex-basis: 100%; margin: 4px 0 10px; font-size: 14px; color: var(--muted); }
.page-title-inline {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  font-size: 22px; font-weight: 800;
}
.data-pill {
  display: inline-block; padding: 5px 14px;
  border-radius: 999px; font-size: 14px; font-weight: 700;
  border: 2px solid;
}
.data-pill-oggi {
  background: var(--verde-l); color: var(--verde); border-color: var(--verde);
  box-shadow: 0 0 0 3px rgba(22,101,52,0.15);
}
.data-pill-passato {
  background: var(--bg); color: var(--muted); border-color: var(--border);
}
.data-pill-futuro {
  background: #EDE9FE; color: #6D28D9; border-color: #6D28D9;
}
.grid1 { display: grid; grid-template-columns: 1fr; gap: 20px; }
.grid2 { display: grid; grid-template-columns: 1fr 1fr; gap: 20px; }
.azioni-tutor { margin: 20px 0 24px; }
.azione-card {
  display: flex; flex-direction: column; align-items: center;
  background: #fff; border: 2px solid var(--border);
  border-radius: 14px; padding: 28px 20px; text-align: center;
  text-decoration: none; color: var(--testo);
  transition: all 0.18s; box-shadow: var(--shadow);
}
.azione-card:hover { transform: translateY(-3px); box-shadow: 0 8px 24px rgba(0,0,0,0.11); }
.azione-card .ico { font-size: 40px; margin-bottom: 10px; }
.azione-card h3 { font-size: 18px; font-weight: 700; margin-bottom: 6px; }
.azione-card p { font-size: 13px; color: var(--muted); }
.azione-card.presenze { border-color: var(--verde); }
.azione-card.presenze:hover { background: var(--verde-l); }
.azione-card.presenze h3 { color: var(--verde); }
.azione-card.docenti-card { border-color: #6D28D9; }
.azione-card.docenti-card:hover { background: #EDE9FE; }
.azione-card.docenti-card h3 { color: #6D28D9; }
/* Lista 24/09 (D32): la nota di classe per la segreteria. */
.azione-card.nota-classe-card { border-color: var(--rosso); }
.azione-card.nota-classe-card:hover { background: var(--rosso-l); }
.azione-card.nota-classe-card h3 { color: var(--rosso); }
.nota-classe-form textarea { width: 100%; font-size: 16px; }
.nota-classe-aiuto { font-size: 12px; margin-top: 6px; }
/* Lista 24/09 (D31): esito dell'invio della nota di un allievo. */
.pc-nota-esito { font-size: 12px; font-weight: 700; color: var(--verde); align-self: center; }
.pc-nota-esito[hidden] { display: none; }
.pc-nota-errore { font-size: 12px; color: var(--rosso); margin: 6px 0 0; }
.pc-nota-errore[hidden] { display: none; }

.stats-giornata {
  display: grid; grid-template-columns: repeat(4, 1fr);
  gap: 12px; margin: 20px 0 8px;
}
.stats-giornata .stato-giornata { grid-column: 1 / -1; }
/* Contatori compatti: sono un riepilogo di servizio, il protagonista
   della sezione è lo stato "Presenze di oggi" qui sotto. */
.stat-card {
  background: #fff; border: 1px solid var(--border);
  border-radius: 8px; padding: 9px 11px;
  box-shadow: var(--shadow);
  display: flex; flex-direction: column; gap: 1px;
}
.stat-num { font-size: 18px; font-weight: 800; color: var(--testo); line-height: 1.1; }
.stat-lbl { font-size: 10px; font-weight: 700; color: var(--muted);
  text-transform: uppercase; letter-spacing: 0.4px; }
.stat-card.presenti { border-left: 3px solid var(--verde); }
.stat-card.presenti .stat-num { color: var(--verde); }
.stat-card.assenti { border-left: 3px solid var(--rosso); }
.stat-card.assenti .stat-num { color: var(--rosso); }
.stat-card.ritardi { border-left: 3px solid var(--arancio); }
.stat-card.ritardi .stat-num { color: var(--arancio); }

/* È l'informazione che il tutor cerca per prima: barra a tutta larghezza,
   testo grande e bordo marcato, non una pillola fra le altre. */
.stato-giornata {
  display: flex; align-items: center; gap: 12px;
  padding: 11px 16px; border-radius: 10px;
  font-size: 15px; font-weight: 600;
  border: 2px solid var(--border);
  margin-top: 2px;
}
.stato-giornata strong { font-weight: 800; }
.stato-giornata .stato-dot {
  width: 11px; height: 11px; border-radius: 50%; display: inline-block;
  flex: 0 0 auto;
}
.stato-giornata.stato-vuoto { background: #F1F5F9; color: var(--muted); }
.stato-giornata.stato-vuoto .stato-dot { background: #94A3B8; }
.stato-giornata.stato-parziale { background: var(--arancio-l); color: var(--arancio); border-color: var(--arancio); }
.stato-giornata.stato-parziale .stato-dot { background: var(--arancio); }
.stato-giornata.stato-completo { background: var(--verde-l); color: var(--verde); border-color: var(--verde); }
.stato-giornata.stato-completo .stato-dot { background: var(--verde); }

.card-title {
  font-size: 11px; font-weight: 700; color: var(--muted);
  text-transform: uppercase; letter-spacing: 0.5px; margin-bottom: 10px;
}
.muted-text { color: var(--muted); font-size: 13px; }

/* ═══════════ FORM PRESENZE ═══════════ */
.form-presenze-actions { display: flex; gap: 10px; margin-bottom: 14px; flex-wrap: wrap; }
.btn-mass {
  padding: 7px 14px; border: 1px solid var(--border); border-radius: 8px;
  background: #fff; font-size: 13px; font-weight: 600; cursor: pointer;
  color: var(--testo);
}
.btn-mass:hover { background: var(--blu-l); border-color: var(--blu2); color: var(--blu); }

/* ═══════════ FORM PRESENZE — CARD MODE ═══════════ */
.form-presenze-cards { background: transparent; box-shadow: none; padding: 0; border: none; }
.presenze-list {
  list-style: none; padding: 0; margin: 14px 0 0;
  display: flex; flex-direction: column; gap: 10px;
}
/* Ogni studente è una scheda ben delimitata: banda colorata a sinistra
   (grigia finché non si sceglie lo stato) e ombra, così si distingue a
   colpo d'occhio dove finisce una card e comincia la successiva. */
.presenza-card {
  background: #fff; border: 1px solid var(--border);
  border-left: 5px solid var(--bordo-campo);
  border-radius: 12px;
  padding: 16px 18px;
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.07);
  transition: border-color 0.15s;
}
.presenza-card[data-stato="presente"] { border-left-color: var(--verde); }
.presenza-card[data-stato="ritardo"] { border-left-color: var(--arancio); }
.presenza-card[data-stato="assente"] { border-left-color: var(--rosso); }
.pc-head {
  margin-bottom: 12px; padding-bottom: 10px;
  border-bottom: 1px solid var(--border);
}
.pc-nome { font-weight: 800; font-size: 16px; }

.pc-stati {
  display: flex; gap: 8px; flex-wrap: wrap;
  margin-bottom: 10px;
}
/* Bottoni generosi: 44px è la soglia comoda per il tocco. */
.pc-stato {
  flex: 1; min-width: 96px; min-height: 44px;
  padding: 10px 12px; border-radius: 8px;
  border: 2px solid var(--bordo-campo); background: #fff;
  font-size: 15px; font-weight: 700; cursor: pointer;
  color: var(--muted);
  transition: all 0.12s;
}
.pc-stato:hover { background: var(--bg); }
.pc-stato.pc-pre[aria-pressed="true"] {
  background: var(--verde-l); color: var(--verde); border-color: var(--verde);
}
.pc-stato.pc-rit[aria-pressed="true"] {
  background: var(--arancio-l); color: var(--arancio); border-color: var(--arancio);
}
.pc-stato.pc-ass[aria-pressed="true"] {
  background: var(--rosso-l); color: var(--rosso); border-color: var(--rosso);
}

.pc-extra[hidden] { display: none; }
.pc-ora-wrap[hidden], .pc-uscita-wrap[hidden] { display: none; }
.pc-ora-wrap, .pc-uscita-wrap {
  display: flex; align-items: center; gap: 10px;
  margin-bottom: 8px;
}
.pc-ora-wrap label, .pc-uscita-wrap label {
  font-size: 12px; font-weight: 700; color: var(--muted);
  text-transform: uppercase; letter-spacing: 0.4px;
}
/* L'uscita anticipata sta sotto i pulsanti e riprende il viola del
   pulsante che la apre, così si lega visivamente a esso. */
.pc-uscita-wrap { margin-top: 8px; margin-bottom: 0; }
.pc-uscita-wrap label { color: #6D28D9; }
.pc-uscita-input[data-time-wheel] { border-color: #C4B5FD; }
/* Dimensioni e font dell'input orario arrivano da input[data-time-wheel]
   (44px, 16px): qui si regola solo la larghezza dentro la riga flex. */

.pc-actions {
  display: flex; gap: 8px; flex-wrap: wrap;
}
.pc-btn-nota, .pc-btn-uscita {
  padding: 10px 14px; min-height: 44px; border-radius: 8px;
  border: 1px solid var(--bordo-campo); background: #fff;
  font-size: 14px; font-weight: 600; cursor: pointer;
  color: var(--testo);
  display: inline-flex; align-items: center; gap: 6px;
}
.pc-btn-nota:hover, .pc-btn-uscita:hover { background: var(--bg); }
.pc-btn-nota[data-has-nota] {
  background: #FEF9C3; border-color: #CA8A04; color: #854D0E;
}
.pc-btn-uscita[aria-pressed="true"] {
  background: #EDE9FE; border-color: #6D28D9; color: #6D28D9;
}
.pc-btn-uscita[hidden] { display: none; }

.pc-popover-nota {
  margin-top: 10px; padding: 12px;
  background: var(--bg); border: 1px solid var(--border);
  border-radius: 8px;
}
.pc-popover-nota[hidden] { display: none; }
.pc-popover-nota label {
  display: block; font-size: 12px; font-weight: 700;
  color: var(--muted); text-transform: uppercase; letter-spacing: 0.4px;
  margin-bottom: 4px;
}
.pc-nota-text {
  width: 100%; padding: 10px 12px;
  border: 1px solid var(--bordo-campo); border-radius: 8px;
  font: inherit; font-size: 16px; resize: vertical;
}
.pc-nota-text:focus {
  outline: none; border-color: var(--blu2);
  box-shadow: 0 0 0 3px rgba(37, 99, 235, 0.16);
}
.pc-popover-actions {
  display: flex; gap: 8px; justify-content: flex-end;
  margin-top: 8px;
}

.tab-presenze { width: 100%; border-collapse: collapse; font-size: 14px; }
.tab-presenze th, .tab-presenze td {
  padding: 9px 8px; border-bottom: 1px solid var(--border); text-align: left;
  vertical-align: middle;
}
.tab-presenze th {
  font-size: 11px; color: var(--muted); font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.4px;
}
.tab-presenze .col-studente { font-weight: 600; min-width: 180px; }
.sel-stato, .inp-ora, .inp-nota {
  padding: 7px 9px; border: 1px solid var(--border); border-radius: 6px;
  font-size: 13px; background: #fff; width: 100%;
}
.sel-stato:focus, .inp-ora:focus, .inp-nota:focus {
  outline: none; border-color: var(--blu2);
  box-shadow: 0 0 0 2px rgba(37,99,235,0.15);
}
.inp-ora[hidden] { display: none; }

.form-footer {
  display: flex; justify-content: flex-end; gap: 10px;
  margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--border);
}
.btn-salva { width: auto; padding: 10px 22px; }

/* ═══════════ TABELLA STUDENTI ═══════════ */
.tab-studenti { width: 100%; border-collapse: collapse; font-size: 14px; }
.tab-studenti th, .tab-studenti td {
  padding: 9px 10px; border-bottom: 1px solid var(--border); text-align: left;
}
.tab-studenti th {
  font-size: 11px; color: var(--muted); font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.4px;
}
.tab-studenti td.num { font-variant-numeric: tabular-nums; color: var(--muted); }
.tab-studenti .col-perc { width: 38%; }
.link-studente { color: var(--blu); font-weight: 600; text-decoration: none; }
.link-studente:hover { text-decoration: underline; }
.perc-bar {
  display: inline-block; width: calc(100% - 50px); height: 8px;
  background: var(--border); border-radius: 6px; overflow: hidden;
  vertical-align: middle; margin-right: 8px;
}
.perc-fill { display: block; height: 100%; background: var(--verde); }
.perc-val { font-size: 12px; font-weight: 700; color: var(--testo); vertical-align: middle; }

/* ═══════════ LE PAGINE DELLA CLASSE (pagina iniziale del tutor) ═══════════ */
/* Lista 24/09 (pezzo 6): allievi, docenti e giornate passate hanno una
   pagina ciascuno; nella pagina iniziale restano riquadri bassi, in riga
   al computer e uno sotto l'altro sul telefono. Il quarto, «Calendario
   registri», e' il pezzo 7: sul telefono sta sotto «Giornate passate». */
.classe-sezioni {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px;
}
.sezione-link {
  display: flex; align-items: center; gap: 10px;
  min-height: 56px; padding: 10px 14px;
  background: #fff; border: 1px solid var(--border);
  border-radius: 12px; box-shadow: var(--shadow);
  text-decoration: none; color: var(--testo);
  transition: background 0.15s, box-shadow 0.15s;
}
.sezione-link:hover { background: var(--bg); box-shadow: 0 4px 14px rgba(0,0,0,0.09); }
.sezione-link:focus-visible { outline: 2px solid var(--blu2); outline-offset: 2px; }
.sezione-ico { font-size: 22px; line-height: 1; flex-shrink: 0; }
.sezione-nome { font-weight: 700; font-size: 15px; }
.sezione-num {
  min-width: 28px; padding: 2px 9px; border-radius: 20px;
  background: var(--blu-l); color: var(--blu);
  font-size: 13px; font-weight: 800; text-align: center;
  font-variant-numeric: tabular-nums;
}
.sezione-arrow { margin-left: auto; font-size: 22px; color: var(--muted); }

/* ═══════════ DOCENTI DELLA CLASSE (pagina «Docenti» del tutor) ═══════════ */
.lista-docenti { list-style: none; }
.docente-item {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 6px; border-bottom: 1px solid var(--border);
  text-decoration: none; color: var(--testo);
  min-height: 44px;
}
.docente-item:hover { background: var(--bg); }
.lista-docenti li:last-child .docente-item { border-bottom: none; }
.doc-avatar {
  width: 38px; height: 38px; border-radius: 50%; flex-shrink: 0;
  background: var(--viola-l); color: var(--viola);
  display: flex; align-items: center; justify-content: center;
  font-size: 14px; font-weight: 800; letter-spacing: 0.5px;
}
.doc-body { flex: 1; display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.doc-nome { font-weight: 700; font-size: 14px; }
.doc-meta { font-size: 12px; color: var(--muted); }
.doc-arrow { font-size: 22px; color: var(--muted); }
.docente-item:focus-visible {
  outline: 2px solid var(--viola); outline-offset: 2px; border-radius: 8px;
}
.profile-avatar-docente { background: var(--viola-l); color: var(--viola); }

/* Un docente insegna più materie: ognuna è un chip a sé, così si legge
   "Italiano" "Storia" e non un'unica stringa "Italiano, Storia". */
.chip-materia {
  display: inline-block;
  background: var(--viola-l); color: var(--viola);
  padding: 2px 10px; border-radius: 20px;
  font-size: 11px; font-weight: 700;
  /* I titoli veri arrivano a cento caratteri («UC14 - Predisposizione,
     igiene e sicurezza…»): su una riga sola uscirebbero dallo schermo
     del telefono. */
  white-space: normal; max-width: 100%; overflow-wrap: anywhere;
}
.chip-materia.is-archiviata { background: #F1F5F9; color: var(--muted); }
.materie-chips { display: flex; flex-wrap: wrap; gap: 6px; }

/* ═══════════ STORICO GIORNATE ═══════════ */
.lista-storico { list-style: none; }
.storico-item {
  display: flex; align-items: center; gap: 12px;
  padding: 10px 6px; border-bottom: 1px solid var(--border);
  text-decoration: none; color: var(--testo);
}
.storico-item:hover { background: var(--bg); }
.storico-data { font-weight: 700; font-variant-numeric: tabular-nums; min-width: 95px; }
.storico-lezioni { margin-left: auto; font-size: 12px; color: var(--muted); }
.stato-pill {
  padding: 2px 10px; border-radius: 20px;
  font-size: 11px; font-weight: 700; text-transform: uppercase; letter-spacing: 0.3px;
}
.stato-pill.stato-vuoto { background: #F1F5F9; color: var(--muted); }
.stato-pill.stato-parziale { background: var(--arancio-l); color: var(--arancio); }
.stato-pill.stato-completo { background: var(--verde-l); color: var(--verde); }

/* ═══════════ FORM LEZIONI ═══════════ */
.lezioni-form { max-width: 780px; margin-top: 20px; }
/* Ogni docente è una scheda a sé: sfondo bianco che stacca dalla pagina,
   banda viola a sinistra e numerazione automatica, così a colpo d'occhio
   si capisce dove finisce un blocco e comincia il successivo. */
#blocchi-container { counter-reset: docente; }
.docente-block {
  counter-increment: docente;
  border: 1px solid var(--border);
  border-left: 5px solid var(--viola);
  border-radius: 12px;
  padding: 12px 16px; margin-bottom: 14px; background: #fff;
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.07);
}
.db-hdr {
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px; margin-bottom: 8px;
}
.db-label {
  font-size: 14px; font-weight: 800; color: var(--viola);
  text-transform: uppercase; letter-spacing: 0.6px;
}
/* "Docente" → "Docente 1", "Docente 2", … anche sui blocchi aggiunti
   dal JS: il contatore CSS si aggiorna da solo. */
.db-label::after { content: " " counter(docente); }
.btn-rm {
  background: var(--rosso-l); color: var(--rosso);
  border: none; border-radius: 6px; padding: 4px 10px;
  font-size: 12px; font-weight: 600; cursor: pointer; font-family: inherit;
}
.btn-rm:hover { background: var(--rosso); color: #fff; }
.btn-rm:focus-visible { outline: 2px solid var(--rosso); outline-offset: 1px; }
.btn-rm[hidden] { display: none; }
/* Coppie di campi affiancati nel blocco docente: docente+materia,
   ora ingresso+ora uscita. Su mobile si impilano (vedi 640px). */
.form-row-2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-bottom: 12px; }
/* Lista 24/09 (Tutor 5): il riquadro di un docente e' basso. I quattro
   campi che si compilano sempre stanno in una riga (docente, materia,
   ingresso, uscita); argomento e note, facoltativi, in una parte che si
   apre. Sul telefono docente e materia prendono la riga intera, gli orari
   stanno affiancati. Gli orari restano a 44px e 16px (iOS). */
.db-campi {
  display: grid; gap: 8px 10px;
  grid-template-columns: minmax(0, 1.6fr) minmax(0, 1.6fr) minmax(0, 1fr) minmax(0, 1fr);
}
.db-campi .form-group { margin-bottom: 0; }
.db-campi .form-group label { margin-bottom: 4px; }
.db-dettagli { margin-top: 8px; }
.db-dettagli > summary {
  cursor: pointer; font-size: 13px; font-weight: 700; color: var(--viola);
  padding: 6px 0; min-height: 32px; list-style-position: inside;
}
.db-dettagli[open] > summary { margin-bottom: 6px; }
.db-dettagli .form-group { margin-bottom: 10px; }
@media (max-width: 900px) {
  .db-campi { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); }
}
@media (max-width: 640px) {
  .db-campi .db-docente, .db-campi .db-materia { grid-column: 1 / -1; }
}
.form-group { margin-bottom: 14px; }
.form-group label {
  display: block; font-size: 12px; font-weight: 700;
  margin-bottom: 6px; color: var(--muted);
  text-transform: uppercase; letter-spacing: 0.4px;
}
.form-group label.required::after { content: ' *'; color: var(--rosso); }
/* Campi generosi e ben delimitati: 44px di altezza per il tocco e
   font 16px, sotto il quale iOS Safari zooma da solo al focus. */
.form-group select,
.form-group input,
.form-group textarea {
  width: 100%; padding: 10px 12px; min-height: 44px;
  border: 1px solid var(--bordo-campo); border-radius: 8px;
  font-size: 16px; background: #fff; font-family: inherit;
  color: var(--testo);
}
.form-group textarea { min-height: 64px; line-height: 1.45; }
.form-group select:hover,
.form-group input:hover,
.form-group textarea:hover { border-color: var(--viola); }
.form-group select:focus,
.form-group input:focus,
.form-group textarea:focus {
  outline: none; border-color: var(--viola);
  box-shadow: 0 0 0 3px rgba(109, 40, 217, 0.16);
}
.form-group ::placeholder { color: #94A3B8; }
.btn-aggiungi {
  display: block; width: 100%; padding: 10px;
  border: 2px dashed var(--border); border-radius: 8px;
  background: transparent; font-size: 14px; font-weight: 600;
  color: var(--muted); cursor: pointer; margin-bottom: 20px;
}
.btn-aggiungi:hover:not(:disabled) { border-color: var(--viola); color: var(--viola); background: var(--viola-l); }
.btn-viola-bg { background: #6D28D9; }
.btn-viola-bg:hover { background: #7C3AED; }

.warning-box {
  border-left: 4px solid var(--arancio);
  background: var(--arancio-l);
}
.warning-box h2 { color: var(--arancio); margin-bottom: 8px; }
.placeholder-section p { color: var(--muted); font-size: 14px; }

/* ═══════════ DETTAGLIO GIORNATA ═════��═════ */
.doc-row-storico {
  background: #fff; border: 1px solid var(--border);
  border-radius: 8px; padding: 14px 16px; margin-bottom: 10px;
}
.doc-row-storico:last-child { margin-bottom: 0; }
.drs-nome { font-weight: 700; font-size: 14px; color: var(--blu); margin-bottom: 3px; }
.drs-ore { font-size: 12px; color: var(--muted); margin-bottom: 6px; }
.drs-arg { font-size: 13px; color: var(--testo); }
.drs-note { font-size: 12px; color: var(--muted); font-style: italic; margin-top: 3px; }
/* Chi ha scritto la riga per ultimo, e quando (Step 11). */
.firma-riga { font-size: 11px; color: var(--muted); margin-top: 3px; }
.drs-actions {
  display: flex; gap: 12px; align-items: center;
  margin-top: 8px; padding-top: 8px;
  border-top: 1px dashed var(--border);
}
.btn-link-danger { color: var(--rosso); }
.btn-link-danger:hover { color: #991b1b; }

/* ─── Selettore data dettaglio corso ─── */
.date-selector {
  display: flex; align-items: flex-end; gap: 14px;
  margin-bottom: 14px;
}
.date-selector label {
  display: flex; flex-direction: column; gap: 4px;
  font-size: 12px; font-weight: 600; color: var(--muted);
  text-transform: uppercase; letter-spacing: 0.4px;
}
.date-selector input[type="date"] {
  padding: 7px 10px; border: 1px solid var(--border);
  border-radius: 7px; font-size: 14px; background: #fff;
}
.date-selector input[type="date"]:focus {
  outline: none; border-color: var(--blu2);
  box-shadow: 0 0 0 3px rgba(37,99,235,0.15);
}

.stato { display: inline-block; padding: 2px 8px; border-radius: 20px; font-size: 11px; font-weight: 700; }
.stato.presente { background: var(--verde-l); color: var(--verde); }
.stato.assente { background: var(--rosso-l); color: var(--rosso); }
.stato.ritardo { background: var(--arancio-l); color: var(--arancio); }
.stato.uscita_anticipata { background: #FFF7ED; color: #C2410C; }
.stato.da-segnare { background: #fff; color: var(--arancio); border: 1px dashed var(--arancio); white-space: nowrap; }
.stato.non-segnato { background: #F1F5F9; color: var(--muted); white-space: nowrap; }

.tab-dettaglio { width: 100%; border-collapse: collapse; font-size: 14px; }
.tab-dettaglio th, .tab-dettaglio td {
  padding: 9px 8px; border-bottom: 1px solid var(--border); text-align: left;
}
.tab-dettaglio th {
  font-size: 11px; color: var(--muted); font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.4px;
}

.dettaglio-actions {
  display: flex; gap: 10px; flex-wrap: wrap; margin-top: 20px;
}
.btn-outline {
  padding: 8px 16px; border: 1px solid var(--border); border-radius: 8px;
  background: transparent; font-size: 13px; font-weight: 600;
  cursor: pointer; color: var(--testo); text-decoration: none; display: inline-block;
}
.btn-outline:hover { background: var(--blu-l); border-color: var(--blu2); color: var(--blu); }

/* ═══════════ SCHEDA STUDENTE ═══════════ */
.profile-header { display: flex; align-items: center; gap: 20px; margin-bottom: 24px; flex-wrap: wrap; }
.profile-avatar {
  width: 64px; height: 64px; border-radius: 50%;
  background: var(--blu-l); color: var(--blu);
  display: flex; align-items: center; justify-content: center;
  font-size: 24px; font-weight: 800; flex-shrink: 0;
}
.profile-info h2 { font-size: 22px; font-weight: 800; margin-bottom: 2px; }
.profile-info .profile-meta { font-size: 13px; color: var(--muted); }
.profile-info .profile-stato { margin-top: 6px; }
.profile-stats { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; margin-bottom: 24px; }
.profile-stat {
  background: #fff; border: 1px solid var(--border);
  border-radius: var(--radius); padding: 14px 16px;
  box-shadow: var(--shadow); text-align: center;
}
.profile-stat .ps-val { font-size: 26px; font-weight: 800; line-height: 1; }
.profile-stat .ps-lbl { font-size: 11px; color: var(--muted); margin-top: 4px; }

.anagrafica-grid { gap: 10px; }
.anagrafica-campo { padding: 6px 0; }
.anagrafica-label {
  display: block; font-size: 11px; color: var(--muted);
  text-transform: uppercase; letter-spacing: 0.3px; margin-bottom: 2px;
}
.anagrafica-value { font-size: 14px; font-weight: 500; }

.bes-card { border-left: 4px solid var(--arancio); }

.chart-container {
  position: relative; height: 180px;
  background: #fff; border: 1px solid var(--border);
  border-radius: var(--radius); padding: 16px;
  box-shadow: var(--shadow); overflow: hidden;
}
.chart-bars { display: flex; align-items: flex-end; gap: 3px; height: 120px; padding-top: 10px; }
.chart-bar-wrap { flex: 1; display: flex; flex-direction: column; align-items: center; gap: 4px; min-width: 0; }
.chart-bar { width: 100%; border-radius: 3px 3px 0 0; min-height: 2px; }
.chart-bar.hi { background: var(--verde); }
.chart-bar.mid { background: var(--arancio); }
.chart-bar.lo { background: var(--rosso); }
.chart-bar.empty { background: var(--border); }
.chart-label {
  font-size: 9px; color: var(--muted);
  writing-mode: vertical-rl; text-orientation: mixed;
  transform: rotate(180deg); max-height: 40px; overflow: hidden;
}

/* `position: relative`: vedi `.gest-table-wrap` (8-bis). */
.table-wrap { overflow-x: auto; -webkit-overflow-scrolling: touch; position: relative; }
.form-presenze { overflow-x: auto; }

.note-item { padding: 10px 0; border-bottom: 1px solid var(--border); }
.note-item:last-child { border-bottom: none; }
.note-date { font-size: 11px; color: var(--muted); font-weight: 600; }
.note-text { font-size: 13px; margin-top: 2px; }

.cert-item {
  padding: 8px 0; border-bottom: 1px solid var(--border);
  font-size: 13px; display: flex; align-items: center; gap: 8px;
}
.cert-item:last-child { border-bottom: none; }
.cert-check { color: var(--verde); font-size: 16px; }

/* ═══════════ DASHBOARD SEGRETERIA ═══════════ */
.seg-stats {
  display: grid; grid-template-columns: repeat(4, 1fr);
  gap: 12px; margin-bottom: 24px; margin-top: 20px;
}
.seg-stat {
  background: #fff; border: 1px solid var(--border);
  border-radius: var(--radius); padding: 16px 18px;
  box-shadow: var(--shadow);
  display: flex; flex-direction: column; gap: 4px;
}
.seg-val { font-size: 28px; font-weight: 800; line-height: 1; }
.seg-lbl { font-size: 12px; color: var(--muted); }
.seg-ok { color: var(--verde); }
.seg-ko { color: var(--arancio); }

.seg-sezione { margin-bottom: 32px; }
.seg-sezione-header {
  display: flex; align-items: center; gap: 12px;
  margin-bottom: 16px; flex-wrap: wrap;
  padding: 12px 16px; border-radius: 10px;
  border-left: 5px solid;
}
.seg-sezione-header h3 {
  font-size: 22px; font-weight: 800;
  text-transform: uppercase; letter-spacing: 0.6px;
}
.seg-sezione-presenza .seg-sezione-header {
  background: var(--blu-l); border-left-color: var(--blu);
}
.seg-sezione-presenza .seg-sezione-header h3 { color: var(--blu); }
.seg-sezione-tirocinio .seg-sezione-header {
  background: #FCE7F3; border-left-color: #9D174D;
}
.seg-sezione-tirocinio .seg-sezione-header h3 { color: #9D174D; }
.seg-counter {
  font-size: 14px; color: #fff;
  background: currentColor; padding: 3px 12px;
  border-radius: 12px; font-weight: 700; min-width: 28px;
  text-align: center;
}
.seg-sezione-presenza .seg-counter { background: var(--blu); color: #fff; }
.seg-sezione-tirocinio .seg-counter { background: #9D174D; color: #fff; }

.seg-grid3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 14px; }

.corso-card {
  background: #fff; border: 1px solid var(--border);
  border-radius: var(--radius); padding: 16px;
  box-shadow: var(--shadow); text-decoration: none; color: var(--testo);
  display: flex; flex-direction: column; gap: 6px;
  transition: border-color 0.15s, box-shadow 0.15s;
}
.corso-card:hover {
  border-color: var(--blu2);
  box-shadow: 0 4px 12px rgba(37,99,235,0.12);
}
.corso-card:focus-visible { outline: 3px solid var(--blu2); outline-offset: 2px; }
.corso-card.rt-pulse {
  animation: rtPulse 1.2s ease-out;
}
@keyframes rtPulse {
  0%   { box-shadow: 0 0 0 0 rgba(37,99,235,0.45); }
  70%  { box-shadow: 0 0 0 8px rgba(37,99,235,0); }
  100% { box-shadow: var(--shadow); }
}
@media (prefers-reduced-motion: reduce) {
  .corso-card.rt-pulse { animation: none; }
}
/* Lista 24/09 (D32): una nota di classe non ancora vista dalla
   segreteria fa pulsare il riquadro finche' non si apre la classe. */
.corso-card.has-nota-classe {
  border: 2px solid var(--rosso);
  animation: notaClassePulse 1.6s ease-in-out infinite;
}
@keyframes notaClassePulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(220,38,38,0.45); }
  50%      { box-shadow: 0 0 0 9px rgba(220,38,38,0); }
}
@media (prefers-reduced-motion: reduce) {
  .corso-card.has-nota-classe { animation: none; box-shadow: 0 0 0 3px rgba(220,38,38,0.35); }
}
.corso-card h3 { font-size: 15px; font-weight: 700; }
/* Lista 24/09 (D37): la sede sul riquadro e un titolo per sede. */
.corso-card h3 .corso-sede {
  display: inline-block; margin-left: 4px; padding: 1px 8px;
  border-radius: 999px; background: #F1F5F9; color: var(--muted);
  font-size: 12px; font-weight: 700; vertical-align: 1px;
}
.seg-sede + .seg-sede { margin-top: 18px; }
.seg-sede-titolo {
  display: flex; align-items: center; gap: 8px; margin: 4px 0 10px;
  font-size: 14px; font-weight: 800; color: var(--testo);
}
.seg-sede-n {
  min-width: 22px; padding: 1px 7px; border-radius: 20px; text-align: center;
  background: var(--border); color: var(--muted); font-size: 12px; font-weight: 700;
}
.corso-meta { font-size: 12px; color: var(--muted); }
/* Ore del corso (Step 8) */
.ore-corso { font-size: 12px; color: var(--muted); }
.ore-corso strong { color: var(--text, inherit); }
.ore-corso.is-in-arrivo { color: #92400E; background: #FEF3C7; border-radius: 6px;
  padding: 2px 6px; }
.profile-info .ore-corso { font-size: 13px; margin-top: 6px; }
.avviso-20 { background: #FEF3C7; border: 1px solid #FDE68A; color: #92400E;
  border-radius: 10px; padding: 10px 14px; margin: 0 0 16px; font-size: 14px; }
.avviso-20 p + p { margin-top: 4px; }
.avviso-20 a { color: inherit; }
.assenze-ore { margin-bottom: 20px; }
.assenze-ore.is-vicino { border-left: 4px solid #F59E0B; }
.assenze-ore.is-oltre { border-left: 4px solid var(--rosso, #DC2626); }
.senza-presenze { font-size: 11px; display: block; }
.sc-periodo { display: flex; gap: 10px; align-items: flex-end; flex-wrap: wrap;
  margin-bottom: 8px; font-size: 13px; }
.sc-periodo label { display: flex; flex-direction: column; gap: 2px; }
.sc-periodo-nota { margin-bottom: 10px; }
.pill-stato.is-oltre { background: #FEE2E2; color: #991B1B; }
@media (max-width: 640px) {
  .sc-periodo { flex-direction: column; align-items: stretch; }
}
.tutor-warning { color: var(--arancio); font-weight: 600; }
.corso-info {
  display: flex; gap: 8px; align-items: center; flex-wrap: wrap;
}
.corso-orario {
  display: inline-flex; align-items: center; gap: 4px;
  font-size: 12px; font-weight: 700; color: var(--blu);
  background: var(--blu-l); padding: 2px 10px; border-radius: 12px;
}
.corso-allievi { font-size: 12px; color: var(--muted); }

.presenze-label {
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 12px; border-radius: 6px;
  font-size: 12px; font-weight: 600; width: 100%;
}
.presenze-label .pl-dot {
  width: 8px; height: 8px; border-radius: 50%; display: inline-block;
}
.presenze-vuoto { background: var(--border); color: var(--muted); }
.presenze-vuoto .pl-dot { background: #94A3B8; }
.presenze-parziale { background: var(--arancio-l); color: var(--arancio); border: 1px solid rgba(217,119,6,0.3); }
.presenze-parziale .pl-dot { background: var(--arancio); }
.presenze-completo { background: var(--verde-l); color: var(--verde); border: 1px solid rgba(22,101,52,0.3); }
.presenze-completo .pl-dot { background: var(--verde); }

.corso-summary {
  display: grid; grid-template-columns: repeat(4, 1fr); gap: 14px;
  padding: 16px 20px;
}
.corso-summary .cs-item {
  display: flex; flex-direction: column; gap: 2px;
}
.corso-summary .cs-lbl { font-size: 11px; font-weight: 700; color: var(--muted); text-transform: uppercase; letter-spacing: 0.3px; }
.corso-summary .cs-val { font-size: 16px; font-weight: 700; color: var(--testo); }

/* ═══════════ GESTIONE (tab) ═══════════ */
.gest-tabs {
  display: flex; flex-wrap: wrap; gap: 2px;
  border-bottom: 1px solid var(--border);
  margin-top: 18px; margin-bottom: 20px;
}
.gest-tab {
  padding: 10px 18px; font-size: 14px; font-weight: 600;
  color: var(--muted); text-decoration: none;
  border: 1px solid transparent; border-bottom: none;
  border-radius: 8px 8px 0 0;
  margin-bottom: -1px; transition: background 0.15s, color 0.15s;
}
.gest-tab:hover { background: var(--blu-l); color: var(--blu); }
.gest-tab.is-active {
  background: #fff; color: var(--blu);
  border-color: var(--border);
  border-bottom: 1px solid #fff;
}
.gest-panel .card h3 { font-size: 17px; font-weight: 700; margin-bottom: 6px; }
.gest-head {
  display: flex; justify-content: space-between; align-items: center;
  flex-wrap: wrap; gap: 10px; margin-bottom: 14px;
}
/* `position: relative` (8-bis): le etichette `.sr-only` dentro le righe
   sono posizionate in assoluto; senza un antenato posizionato sfuggivano
   allo scorrimento e allargavano la pagina (magazzino: 442 px su un
   telefono da 390). Cosi' restano dentro la tabella che scorre. */
.gest-table-wrap { overflow-x: auto; position: relative; }
.gest-table {
  width: 100%; border-collapse: collapse; font-size: 14px;
}
.gest-table th, .gest-table td {
  text-align: left; padding: 10px 12px;
  border-bottom: 1px solid var(--border);
  vertical-align: middle;
}
.gest-table th {
  font-size: 12px; font-weight: 700; color: var(--muted);
  text-transform: uppercase; letter-spacing: 0.3px;
}
.gest-table tr.is-inactive { opacity: 0.55; }
.gest-cell-nome { font-weight: 700; }
.gest-col-actions { white-space: nowrap; text-align: right; }
.gest-col-actions .btn-link,
.gest-col-actions .btn-link-muted {
  margin-left: 6px;
}
.tutor-warning {
  background: var(--arancio-l); color: var(--arancio);
  padding: 2px 10px; border-radius: 12px;
  font-size: 12px; font-weight: 700;
}
.stato-pill {
  padding: 2px 10px; border-radius: 12px;
  font-size: 12px; font-weight: 700;
}
.stato-pill.is-on { background: var(--verde-l); color: var(--verde); }
.stato-pill.is-off { background: var(--border); color: var(--muted); }
/* Lista 24/09 (pezzo 8): l'account principale della segreteria. */
.stato-pill.is-principale { background: var(--blu-l); color: var(--blu); margin-left: 6px; }
.classe-pill {
  display: inline-block; padding: 2px 8px; margin-right: 3px;
  border-radius: 10px; background: var(--blu-l); color: var(--blu);
  font-size: 11px; font-weight: 700;
}
.banner-tirocinio {
  display: flex; align-items: center; gap: 14px;
  background: #FCE7F3; border: 1px solid #9D174D;
  border-left: 5px solid #9D174D; border-radius: 10px;
  padding: 14px 18px; margin: 20px 0;
  color: #831843;
}
.banner-tirocinio .banner-icon { font-size: 28px; line-height: 1; }
.banner-tirocinio strong { display: block; font-size: 16px; margin-bottom: 2px; }
.banner-tirocinio p { font-size: 13px; margin: 0; color: #831843; opacity: 0.85; }

/* Classe archiviata: grigia, non allarmante. Non è un errore, è uno
   stato — quel che manca sono i pulsanti, e il banner dice perché. */
.banner-archiviata {
  background: #F1F5F9; border: 1px solid #94A3B8;
  border-left: 5px solid #475569; border-radius: 10px;
  padding: 14px 18px; margin: 18px 0;
  color: #334155; font-size: 14px; line-height: 1.5;
}
.banner-archiviata strong { color: #1E293B; }

/* Step 11: qualcosa e' cambiato mentre la pagina era aperta (dettaglio
   del giorno della segreteria, nuova classe sulla dashboard del tutor). */
.banner-aggiornato {
  display: flex; flex-wrap: wrap; align-items: center; gap: 8px 16px;
  background: #EFF6FF; border: 1px solid #BFDBFE;
  border-left: 5px solid var(--blu); border-radius: 10px;
  padding: 12px 16px; margin: 16px 0;
  color: #1E3A8A; font-size: 14px; line-height: 1.5;
}
.banner-aggiornato[hidden] { display: none; }
.banner-aggiornato p { margin: 0; flex-basis: 100%; }
.banner-aggiornato a { color: var(--blu); font-weight: 600; }

.banner-auguri, .banner-compleanno-studente {
  display: flex; align-items: center; gap: 14px;
  border-radius: 10px; padding: 14px 18px;
  margin: 16px 0;
  border-left: 5px solid;
}
.banner-auguri .banner-icon, .banner-compleanno-studente .banner-icon {
  font-size: 30px; line-height: 1;
}
.banner-auguri {
  background: #FEF3C7; border-color: #B45309; color: #78350F;
}
.banner-auguri strong { font-size: 18px; display: block; margin-bottom: 2px; }
.banner-auguri p { font-size: 14px; margin: 0; color: #78350F; opacity: 0.9; }
.banner-compleanno-studente {
  background: #DBEAFE; border-color: var(--blu); color: var(--blu);
}
.banner-compleanno-studente strong { font-size: 15px; display: block; margin-bottom: 2px; }

.avvisi-tutor { display: flex; flex-direction: column; gap: 8px; margin: 16px 0; }
.avvisi-tutor[hidden] { display: none; }
.avviso-card {
  display: flex; align-items: center; gap: 14px;
  padding: 14px 16px; border-radius: 10px;
  background: #fff; border: 1px solid var(--border);
  text-decoration: none; color: var(--testo);
  box-shadow: var(--shadow);
  transition: border-color 0.15s, box-shadow 0.15s, transform 0.1s;
}
.avviso-card:hover {
  border-color: var(--blu2);
  box-shadow: 0 4px 12px rgba(37,99,235,0.18);
  transform: translateY(-1px);
}
.avviso-card.is-unread {
  background: #FEF9C3; border-color: #CA8A04; border-left: 5px solid #CA8A04;
}
.avviso-card.is-just-arrived {
  animation: avviso-pulse 0.7s ease-out 2;
}
@keyframes avviso-pulse {
  0% { box-shadow: 0 0 0 0 rgba(202,138,4,0.55); }
  70% { box-shadow: 0 0 0 12px rgba(202,138,4,0); }
  100% { box-shadow: 0 0 0 0 rgba(202,138,4,0); }
}
.avviso-card .avviso-icon { font-size: 22px; line-height: 1; }
.avviso-card .avviso-body { flex: 1; display: flex; flex-direction: column; gap: 2px; }
.avviso-card strong { font-size: 14px; letter-spacing: 0.4px; }
.avviso-meta { font-size: 12px; color: var(--muted); }
.avviso-badge {
  background: #CA8A04; color: #fff;
  padding: 1px 7px; border-radius: 10px;
  font-size: 10px; font-weight: 800; text-transform: uppercase;
}
.avviso-arrow { font-size: 22px; color: var(--muted); }
.avviso-dettaglio .avviso-testo {
  font-size: 15px; line-height: 1.6; white-space: pre-wrap;
}

.avvisi-segreteria { margin-top: 20px; }
.avvisi-head {
  display: flex; align-items: center; gap: 10px; margin-bottom: 12px;
}
.avvisi-head h3 { font-size: 16px; font-weight: 700; }
.avvisi-counter {
  background: var(--blu); color: #fff;
  padding: 2px 10px; border-radius: 12px;
  font-size: 12px; font-weight: 700;
}
.avviso-form { padding: 12px; background: var(--bg); border-radius: 8px; margin-bottom: 14px; }
.avviso-form textarea {
  width: 100%; padding: 8px 10px;
  border: 1px solid var(--border); border-radius: 7px;
  font: inherit; resize: vertical;
}
.avviso-form-actions {
  display: flex; justify-content: space-between; align-items: center;
  flex-wrap: wrap; gap: 10px; margin-top: 8px;
}
.avvisi-elenco { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: 10px; }
.avviso-row {
  padding: 12px 14px; border-radius: 8px;
  background: #fff; border: 1px solid var(--border);
}
.avviso-row.is-nuovo { border-left: 4px solid #CA8A04; background: #FEFCE8; }
.avviso-row.is-letto { border-left: 4px solid var(--verde); }
.avviso-row-meta {
  display: flex; align-items: center; gap: 8px; flex-wrap: wrap;
  font-size: 12px; margin-bottom: 6px;
}
.avviso-row-data { font-weight: 700; color: var(--muted); }
.avviso-row-testo { font-size: 14px; line-height: 1.5; white-space: pre-wrap; margin-bottom: 6px; }
.btn-link-danger { color: var(--rosso); }
.storico-cerca {
  margin-top: 16px; padding-top: 14px;
  border-top: 1px solid var(--border);
}
.storico-cerca label {
  display: block; font-size: 12px; font-weight: 700;
  color: var(--muted); text-transform: uppercase; letter-spacing: 0.4px;
  margin-bottom: 6px;
}
.storico-cerca-row {
  display: flex; gap: 8px; align-items: stretch;
}
.storico-cerca-row input[type="date"] {
  flex: 1; padding: 8px 10px;
  border: 1px solid var(--border); border-radius: 7px;
  font-size: 14px;
}
.storico-cerca-row input[type="date"]:focus {
  outline: none; border-color: var(--blu2);
  box-shadow: 0 0 0 3px rgba(37,99,235,0.15);
}
.storico-cerca-row .btn-primary { white-space: nowrap; }
.checkbox-group {
  display: flex; flex-direction: column; gap: 6px;
  padding: 8px 10px; border: 1px solid var(--border);
  border-radius: 8px; background: var(--bg);
}
.checkbox-item {
  display: flex; align-items: center; gap: 8px;
  font-size: 13px; cursor: pointer;
}
/* Classe già di un altro tutor: si vede, non si spunta. */
.checkbox-item.is-disabled { opacity: 0.5; cursor: not-allowed; }
.checkbox-item.is-disabled input { cursor: not-allowed; }
/* La riga che dice chi la segue. Non sbiadita come la casella: è
   l'unica cosa utile di quella riga, ed è da lì che si prosegue. */
.checkbox-nota {
  display: block; margin: -2px 0 4px 24px;
  font-size: 12px; color: var(--muted);
}
.checkbox-nota strong { color: var(--testo); }
.checkbox-nota a { color: var(--blu); }
.checkbox-item input[type="checkbox"] {
  width: 16px; height: 16px; accent-color: var(--blu2);
  cursor: pointer;
}
.field-help { font-size: 12px; margin-top: 4px; }
.inline-form { display: inline; }

.btn-primary {
  padding: 8px 16px; background: var(--blu); color: #fff;
  border: none; border-radius: 7px;
  font-size: 13px; font-weight: 700; cursor: pointer;
  transition: background 0.15s;
}
.btn-primary:hover { background: var(--blu2); }
.btn-outline {
  padding: 7px 14px; background: transparent;
  border: 1px solid var(--border); border-radius: 7px;
  font-size: 13px; font-weight: 600; color: var(--testo);
  cursor: pointer; text-decoration: none;
}
.btn-outline:hover { background: var(--bg); }
.btn-link, .btn-link-muted {
  background: none; border: none; padding: 4px 2px;
  font-size: 13px; font-weight: 600; cursor: pointer;
}
.btn-link { color: var(--blu2); }
.btn-link:hover { text-decoration: underline; }
.btn-link-muted { color: var(--muted); }
.btn-link-muted:hover { color: var(--rosso); text-decoration: underline; }

/* ─── Modali ─── */
.modal {
  position: fixed; inset: 0; z-index: 200;
  display: flex; align-items: flex-start; justify-content: center;
  padding: 40px 16px; overflow-y: auto;
}
.modal[hidden] { display: none; }
.modal-backdrop {
  position: absolute; inset: 0;
  background: rgba(15, 23, 42, 0.5);
}
.modal-dialog {
  position: relative; background: #fff;
  border-radius: 12px; width: 100%; max-width: 460px;
  box-shadow: 0 20px 48px rgba(0,0,0,0.2);
  padding: 22px;
}
.modal-head {
  display: flex; justify-content: space-between; align-items: center;
  margin-bottom: 16px;
}
.modal-head h3 { font-size: 18px; font-weight: 800; color: var(--testo); }
.modal-close {
  background: none; border: none; font-size: 24px;
  line-height: 1; cursor: pointer; color: var(--muted);
  padding: 0 4px;
}
.modal-close:hover { color: var(--testo); }
.modal-dialog .form-grp select,
.modal-dialog .form-grp textarea,
.modal-dialog .form-grp input[type="text"],
.modal-dialog .form-grp input[type="email"],
.modal-dialog .form-grp input[type="tel"],
.modal-dialog .form-grp input[type="date"],
.modal-dialog .form-grp input[type="password"] {
  width: 100%; padding: 9px 11px;
  border: 1px solid var(--border); border-radius: 7px;
  font-size: 14px; background: #fff;
}
.modal-dialog .form-grp select:focus,
.modal-dialog .form-grp input:focus,
.modal-dialog .form-grp textarea:focus {
  outline: none; border-color: var(--blu2);
  box-shadow: 0 0 0 3px rgba(37,99,235,0.15);
}
.field-help { font-size: 12px; margin-top: 4px; }
.modal-actions {
  display: flex; justify-content: flex-end; gap: 10px; margin-top: 18px;
}
body.has-modal { overflow: hidden; }

.pwd-note { font-size: 13px; color: var(--muted); margin: 10px 0; }
.pwd-box {
  display: flex; align-items: center; gap: 10px;
  background: var(--bg); border: 1px dashed var(--border);
  border-radius: 8px; padding: 12px 14px; margin: 10px 0 4px;
}
.pwd-box code {
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 16px; font-weight: 700; color: var(--blu);
  flex: 1; word-break: break-all;
}

/* ─── Modale wide e form a sezioni (studenti) ─── */
.modal-dialog.modal-wide { max-width: 720px; }
.form-sec {
  border: 1px solid var(--border); border-radius: 10px;
  padding: 14px 16px 10px; margin-bottom: 14px;
}
.form-sec legend {
  font-size: 12px; font-weight: 700; color: var(--blu);
  text-transform: uppercase; letter-spacing: 0.5px;
  padding: 0 6px;
}
.form-grid-2 {
  display: grid; grid-template-columns: 1fr 1fr; gap: 12px 14px;
}
.form-grid-2 .form-grp { margin-bottom: 0; }
.form-grid-2 .form-grp-full { grid-column: 1 / -1; }

/* ─── Filtri elenco ─── */
.gest-filters {
  display: flex; flex-wrap: wrap; gap: 12px 16px;
  align-items: flex-end; margin-bottom: 14px;
}
.gest-filters label {
  display: flex; flex-direction: column; gap: 4px;
  font-size: 12px; font-weight: 600; color: var(--muted);
  text-transform: uppercase; letter-spacing: 0.4px;
}
.gest-filters select {
  padding: 7px 10px; border: 1px solid var(--border);
  border-radius: 7px; font-size: 14px; background: #fff;
  min-width: 160px;
}
/* Lista 24/09 (pezzo 11): la casella «Cerca», come i menu accanto. */
.gest-filters input[type="search"] {
  padding: 7px 10px; border: 1px solid var(--border);
  border-radius: 7px; font-size: 14px; background: #fff;
  min-width: 200px; text-transform: none; letter-spacing: 0;
  font-weight: 400; color: var(--testo);
}
.gest-filters input[type="search"]:focus,
.gest-filters select:focus {
  outline: none; border-color: var(--blu2);
  box-shadow: 0 0 0 3px rgba(37,99,235,0.15);
}

/* ─── Badge BES/DSA ─── */
.bes-badge {
  display: inline-block; padding: 2px 9px;
  border-radius: 10px; font-size: 11px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.3px;
}
.bes-badge.bes-dsa { background: var(--arancio-l); color: var(--arancio); }
.bes-badge.bes-bes { background: var(--blu-l); color: var(--blu); }

/* ─── Codice fiscale: spia nel form, avviso nella scheda ─── */
/* Nessuno dei due blocca: segnalano soltanto che c'è da correggere. */
.cf-esito {
  margin: 4px 0 0; font-size: 12px; font-weight: 600; line-height: 1.4;
}
.cf-esito.is-ok   { color: var(--verde); }
.cf-esito.is-warn { color: var(--arancio); }

.cf-badge {
  display: inline-block; margin-left: 6px; padding: 2px 8px;
  border-radius: 10px; font-size: 11px; font-weight: 700;
  text-transform: uppercase; letter-spacing: 0.3px;
  background: var(--arancio-l); color: var(--arancio);
  vertical-align: middle;
}

/* ─── Stato studente (pill varianti) ─── */
.stato-pill.stato-attivo     { background: var(--verde-l); color: var(--verde); }
.stato-pill.stato-ritirato   { background: var(--rosso-l); color: var(--rosso); }
.stato-pill.stato-trasferito { background: var(--arancio-l); color: var(--arancio); }
.gest-table tr.is-inactive td { opacity: 0.55; }

.muted-text { color: var(--muted); }

/* ─── Scheda studente segreteria: liste con eliminazione ─── */
.cert-item-row { justify-content: flex-start; }
.cert-item-row .cert-desc { flex: 1; }
.cert-item-row .cert-date { font-size: 11px; }
.note-head {
  display: flex; justify-content: space-between; align-items: center;
  margin-bottom: 2px;
}
.inline-form { display: inline; margin: 0; }
.btn-icon-del {
  background: none; border: none;
  color: var(--muted); font-size: 18px; line-height: 1;
  cursor: pointer; padding: 2px 6px; border-radius: 4px;
}
.btn-icon-del:hover { color: var(--rosso); background: var(--rosso-l); }

.mini-form {
  margin-top: 14px; padding-top: 14px;
  border-top: 1px dashed var(--border);
  display: flex; flex-direction: column; gap: 10px;
}
.mini-form .form-grp { margin-bottom: 0; }
.mini-form input[type="text"],
.mini-form input[type="date"],
.mini-form textarea {
  width: 100%; padding: 8px 10px;
  border: 1px solid var(--border); border-radius: 7px;
  font-size: 13px; background: #fff; font-family: inherit;
}
.mini-form input:focus,
.mini-form textarea:focus {
  outline: none; border-color: var(--blu2);
  box-shadow: 0 0 0 3px rgba(37,99,235,0.15);
}
.mini-form .btn-primary { align-self: flex-start; }

/* ═══════════ ERROR PAGES ═══════════ */
.error-page {
  text-align: center; padding: 60px 20px; max-width: 480px; margin: 40px auto;
}
.error-page .error-code {
  font-size: 84px; font-weight: 800; color: var(--blu);
  line-height: 1; letter-spacing: -2px;
}
.error-page h2 {
  font-size: 22px; font-weight: 800; margin: 12px 0 8px;
}
.error-page p { color: var(--muted); margin-bottom: 24px; }
.error-page .btn-login { display: inline-block; width: auto; padding: 10px 24px; text-decoration: none; }

@media (max-width: 900px) {
  /* 8-bis: minmax(0, 1fr) e non 1fr. Con 1fr la colonna si allarga fino
     alla tabella piu' larga che contiene («Ultimi movimenti» del
     magazzino: 714 px su un telefono da 390), invece di lasciarla
     scorrere di lato nel suo riquadro. */
  .grid2 { grid-template-columns: minmax(0, 1fr); }
  .classe-sezioni { grid-template-columns: repeat(2, 1fr); }
  .stats-giornata { grid-template-columns: repeat(2, 1fr); }
  .seg-stats { grid-template-columns: repeat(2, 1fr); }
  .seg-grid3 { grid-template-columns: repeat(2, 1fr); }
  .corso-summary { grid-template-columns: repeat(2, 1fr); }
  .tab-presenze, .tab-dettaglio, .tab-studenti { font-size: 13px; }
}
@media (max-width: 640px) {
  .login-box { padding: 30px 24px; }
  .content { padding: 16px 14px; }
  nav.topbar { padding: 0 12px; gap: 8px; }
  .nav-brand { font-size: 14px; }
  .nav-user span.nome-utente { display: none; }
  .nav-links { margin-left: 6px; }
  .nav-link { padding: 5px 9px; font-size: 12px; }
  /* Lista 24/09 (8-bis): la barra della segreteria su due righe. Su una
     sola — marchio, tre voci di menu, compleanni, ruolo, Esci — arrivava
     a 450-500 px e «Esci» cadeva fuori dallo schermo. In alto marchio e
     account, sotto il menu a tutta larghezza. */
  nav.topbar.topbar-segreteria {
    flex-wrap: wrap; height: auto; row-gap: 6px; padding: 8px 12px;
  }
  .topbar-segreteria .nav-links {
    order: 10; flex-basis: 100%; margin-left: 0;
    display: grid; grid-template-columns: repeat(3, 1fr); gap: 6px;
  }
  .topbar-segreteria .nav-link { text-align: center; padding: 7px 4px; font-size: 13px; }
  .gest-tab { padding: 8px 12px; font-size: 13px; }
  .gest-table th, .gest-table td { padding: 8px 8px; font-size: 13px; }
  .gest-col-actions { text-align: left; white-space: normal; }
  .gest-col-actions .btn-link,
  .gest-col-actions .btn-link-muted { margin-left: 0; margin-right: 10px; }
  .modal-dialog { padding: 18px; }
  .modal-dialog.modal-wide { max-width: 100%; }
  .form-grid-2 { grid-template-columns: 1fr; }
  .gest-filters { flex-direction: column; align-items: stretch; }
  .gest-filters select,
  .gest-filters input[type="search"] { min-width: 0; width: 100%; font-size: 16px; }
  .seg-stats { grid-template-columns: 1fr 1fr; gap: 8px; }
  .seg-stat { padding: 12px 14px; }
  .seg-val { font-size: 24px; }
  .seg-grid3 { grid-template-columns: 1fr; gap: 10px; }
  .corso-summary { grid-template-columns: 1fr 1fr; gap: 10px; padding: 14px 16px; }
  .corso-summary .cs-val { font-size: 15px; }
  .form-row-2 { grid-template-columns: 1fr; }
  .profile-stats { grid-template-columns: 1fr 1fr; }
  .profile-header { gap: 12px; }
  .profile-avatar { width: 48px; height: 48px; font-size: 18px; }
  .tab-presenze th, .tab-presenze td,
  .tab-dettaglio th, .tab-dettaglio td { padding: 7px 5px; font-size: 12px; }
  .tab-presenze .col-studente { min-width: 120px; }
  .sel-stato, .inp-ora, .inp-nota { font-size: 12px; padding: 6px 7px; }
  .azione-card { padding: 18px 14px; }
  .azione-card .ico { font-size: 30px; }
  .azione-card h3 { font-size: 15px; }
  .classe-sezioni { grid-template-columns: 1fr; gap: 8px; }
  .sezione-link { min-height: 50px; }
  .storico-item { gap: 8px; padding: 8px 4px; font-size: 13px; }
  .storico-data { min-width: 75px; font-size: 13px; }
  .docente-block { padding: 10px 12px; border-left-width: 4px; }
  .dettaglio-actions { flex-direction: column; }
  .dettaglio-actions .btn-outline { text-align: center; }
}
@media (max-width: 380px) {
  .login-box { padding: 24px 18px; }
  /* 8-bis: il ruolo si capisce dal menu; sui telefoni stretti fa posto. */
  .topbar-segreteria .nav-user .badge { display: none; }
  .content { padding: 12px 10px; }
  .profile-stats { grid-template-columns: 1fr; }
  .stat-card { padding: 10px 12px; }
  .stat-num { font-size: 22px; }
  .seg-stats { grid-template-columns: 1fr; }
  .corso-summary { grid-template-columns: 1fr; }
  .azione-card { padding: 14px 10px; }
  .form-presenze-actions { flex-direction: column; }
  .btn-mass { width: 100%; text-align: center; }
}

/* Import calendario */
.gest-head-actions { display: flex; gap: 10px; flex-wrap: wrap; }
.import-card { max-width: 640px; }
.import-preview { max-width: 820px; }
.import-preview h3 { font-size: 18px; margin-bottom: 4px; }
.import-stats {
  display: grid; grid-template-columns: repeat(5, 1fr);
  gap: 12px; margin: 18px 0;
}
.imp-stat {
  display: flex; flex-direction: column; gap: 4px;
  padding: 12px; background: var(--bg-soft, #f6f7fb);
  border-radius: 8px; text-align: center;
}
.imp-stat .imp-val { font-size: 22px; font-weight: 700; }
.imp-stat .imp-lbl { font-size: 12px; color: var(--muted, #64748b); }
.imp-stat.imp-warn { background: #fff7ed; }
.imp-stat.imp-warn .imp-val { color: #c2410c; }
.import-alert {
  padding: 12px 14px; border-radius: 8px;
  background: #fff7ed; border: 1px solid #fed7aa;
  margin: 12px 0; font-size: 14px;
}
.import-alert ul { margin: 8px 0 0 20px; }
.import-alert-error { background: #fef2f2; border-color: #fecaca; }
.import-alert-warn { background: #fffbeb; border-color: #fde68a; }
.import-errori { max-height: 220px; overflow-y: auto; }
.import-actions {
  display: flex; gap: 10px; justify-content: flex-end;
  margin-top: 20px; flex-wrap: wrap;
}
.imp-page-head {
  display: flex; justify-content: space-between; align-items: flex-start;
  gap: 12px; flex-wrap: wrap;
}
.imp-sez { margin: 22px 0 8px; font-size: 15px; }
.imp-dal { max-width: 220px; }
.imp-classi td, .imp-classi th { white-space: nowrap; }
.imp-classe-det { margin: 10px 0; padding: 10px 12px; border: 1px solid var(--border);
  border-radius: 8px; font-size: 14px; }
.imp-classe-det ul { margin: 6px 0 0 20px; }
.imp-scelte { display: grid; grid-template-columns: 1fr 1fr; gap: 4px 16px; }
.imp-scelte select { width: 100%; }
details.import-alert summary, .imp-classe-det summary, .imp-storico summary { cursor: pointer; }
.imp-storico { padding: 12px 0; border-bottom: 1px solid var(--border); }
.imp-storico:last-child { border-bottom: 0; }
.imp-storico p { margin: 6px 0; font-size: 14px; }
.imp-storico-classe { margin: 8px 0 0 12px; font-size: 14px; }
.imp-storico-classe ul { margin: 4px 0 0 20px; }
.sc-header-action { margin-left: auto; align-self: flex-start; }
@media (max-width: 900px) {
  .imp-scelte { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
  .import-stats { grid-template-columns: 1fr 1fr; }
  .imp-dal { max-width: none; }
  .sc-header-action { margin-left: 0; }
  .import-actions { flex-direction: column-reverse; }
  .import-actions form, .import-actions form button { width: 100%; }
}

/* ═══════════ POLISH (Phase 10.5) ═══════════ */

/* Focus visibili coerenti su tutti gli elementi interattivi:
   navigazione da tastiera resta percorribile su ogni pagina. */
.nav-link:focus-visible,
.btn-exit:focus-visible,
.btn-mass:focus-visible,
.btn-outline:focus-visible,
.btn-primary:focus-visible,
.btn-aggiungi:focus-visible,
.btn-rm:focus-visible,
.gest-tab:focus-visible,
.azione-card:focus-visible,
.link-studente:focus-visible,
.storico-item:focus-visible,
.modal-close:focus-visible,
.btn-icon-del:focus-visible,
.btn-link:focus-visible,
.btn-link-muted:focus-visible {
  outline: 2px solid var(--blu2);
  outline-offset: 2px;
  border-radius: 4px;
}
.btn-rm:focus-visible { outline-color: var(--rosso); }
.btn-link-muted:focus-visible { outline-color: var(--muted); }

/* Riga storico interattiva: feedback visivo coerente al keyboard nav. */
.storico-item:focus-visible { background: var(--bg); }

/* 380px: ulteriori rifiniture lasciate scoperte. */
@media (max-width: 380px) {
  .import-stats { grid-template-columns: 1fr; }
  .modal-dialog { padding: 16px; }
  .modal { padding: 16px 8px; }
  /* Tabs scrollabili orizzontalmente quando troppi su schermo stretto. */
  .gest-tabs { flex-wrap: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .gest-tab { white-space: nowrap; flex-shrink: 0; }
  /* Tabella gestione più compatta. */
  .gest-table th, .gest-table td { padding: 7px 6px; font-size: 12px; }
  /* Date selector dettaglio corso: full-width per evitare wrapping rotto. */
  .date-selector { flex-direction: column; align-items: stretch; }
  .date-selector input[type="date"] { width: 100%; }
}

/* ═════════════ Scheda classe ═════════════ */
.gest-link {
  color: var(--blu); font-weight: 700; text-decoration: none;
}
.gest-link:hover, .gest-link:focus-visible {
  text-decoration: underline;
}
.form-actions {
  display: flex; gap: 10px; justify-content: flex-end;
  margin-top: 16px; padding-top: 14px; border-top: 1px solid var(--border);
}

/* — Header scheda classe — */
.sc-header { padding-bottom: 8px; }
.sc-avatar {
  font-size: 20px; font-weight: 800;
  letter-spacing: 0.5px;
  background: linear-gradient(135deg, var(--blu) 0%, #5673c4 100%);
  color: #fff; padding: 0 14px; min-width: 64px;
}
.sc-tutor {
  display: inline-flex; align-items: center; gap: 6px;
  margin-left: 10px;
}

/* — KPI strip — */
.kpi-strip {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  gap: 12px;
  margin-bottom: 20px;
}
.kpi-card {
  background: #fff; border: 1px solid var(--border);
  border-radius: 12px;
  padding: 14px 16px;
  box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04);
}
.kpi-value {
  font-size: 26px; font-weight: 800; color: var(--blu);
  line-height: 1.1;
}
.kpi-label {
  font-size: 12px; text-transform: uppercase;
  letter-spacing: 0.4px; color: var(--muted);
  margin-top: 4px; font-weight: 700;
}
.kpi-sub {
  font-size: 11px; color: var(--muted); margin-top: 4px;
}

/* — Layout 2-col anagrafica + statistiche — */
.scheda-grid {
  display: grid;
  grid-template-columns: 1.6fr 1fr;
  gap: 20px;
  margin-bottom: 20px;
}
.sc-form-grid {
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 14px 18px;
}
.sc-grp-tutor { grid-column: 1 / -1; }

/* Il tutor ha un form suo, staccato dall'anagrafica: una riga sola,
   che a schermo stretto si impila invece di stringere il menu.
   `display: flex` esplicito perche' il form porta anche `.inline-form`,
   che e' `display: inline`: senza, gap, wrap e flex qui sotto non
   varrebbero niente e a telefono il pulsante si allargherebbe da solo
   accanto a un menu rimasto stretto. */
.sc-form-tutor { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.sc-form-tutor select { min-width: 260px; flex: 1 1 260px; }
.sc-tutor-campo { display: flex; flex-direction: column; gap: 2px; }
.sc-tutor-campo span {
  font-size: 11px; font-weight: 700; color: var(--muted);
  text-transform: uppercase; letter-spacing: 0.3px;
}
.sc-tutor-motivo { flex: 1 1 200px; }
.sc-tutor-disattivato { display: inline-block; margin: 0 0 10px; }
.sc-materiale-fuori {
  margin-top: 14px; padding: 10px 14px; border-radius: 10px;
  background: var(--arancio-l);
}
.sc-materiale-fuori ul { margin: 6px 0 8px 18px; padding: 0; }
.sc-sub-title { font-weight: 700; font-size: 13px; margin: 0; }
.sc-storico-tutor { margin-top: 14px; }
.sc-storico-tutor summary,
.sc-storico-docenti summary,
.sc-docente-togli summary { cursor: pointer; font-weight: 700; font-size: 13px; }
.sc-storico-tutor .tab-percorso,
.sc-storico-docenti .tab-percorso { margin-top: 8px; }
.sc-docente-togli { margin-top: 8px; }
.sc-docente-togli summary { color: var(--muted); font-weight: 600; }
.sc-form-date {
  display: flex; align-items: flex-end; gap: 10px; flex-wrap: wrap;
  margin-top: 6px;
}
@media (max-width: 640px) {
  .sc-form-tutor { width: 100%; }
  .sc-form-tutor select { min-width: 0; flex: 1 1 100%; }
  .sc-tutor-campo, .sc-tutor-campo input { width: 100%; }
  .sc-form-tutor button { width: 100%; }
}
.sc-form .form-grp label {
  font-weight: 700; font-size: 12px; color: var(--muted);
  text-transform: uppercase; letter-spacing: 0.3px;
}

/* — Statistiche — */
.sc-stats-list {
  margin: 0; padding: 0;
  display: flex; flex-direction: column;
  gap: 8px;
}
.sc-stats-list > div {
  display: flex; justify-content: space-between; align-items: center;
  padding: 8px 10px; border-radius: 8px;
  background: var(--bg-soft, #f6f7fb);
}
.sc-stats-list dt {
  font-size: 12px; color: var(--muted); font-weight: 600;
  margin: 0;
}
.sc-stats-list dd {
  margin: 0; font-weight: 700; font-size: 14px;
}

/* — Pills di stato giornata — */
.pill-stato {
  display: inline-block;
  padding: 2px 10px; border-radius: 12px;
  font-size: 12px; font-weight: 700;
  white-space: nowrap;
}
.pill-stato-completo, .pill-stato-complete { background: var(--verde-l); color: var(--verde); }
.pill-stato-parziale { background: #FEF3C7; color: #92400E; }
.pill-stato-vuoto { background: var(--border); color: var(--muted); }
.pill-tirocinio {
  display: inline-block; padding: 2px 10px; border-radius: 12px;
  font-size: 12px; font-weight: 700;
  background: #FCE7F3; color: #9D174D;
}

/* — Sezioni section — */
.sc-section { margin-bottom: 20px; }
.sc-section-head { margin-bottom: 8px; }
.sc-section-head .card-title { margin: 0; }

/* — Studenti table — */
.sc-students-table tbody tr:hover { background: var(--bg-soft, #f6f7fb); }
.sc-avatar-sm {
  display: inline-flex; align-items: center; justify-content: center;
  width: 30px; height: 30px; border-radius: 50%;
  background: var(--blu-l); color: var(--blu);
  font-size: 11px; font-weight: 800;
}
.sc-students-na { margin-top: 16px; }
.sc-students-na summary { cursor: pointer; padding: 6px 0; }

/* — Docenti della classe: rimozione e aggiunta — */
.chip-remove {
  display: inline-flex; align-items: center; justify-content: center;
  width: 22px; height: 22px; padding: 0;
  background: transparent; border: none; cursor: pointer;
  color: var(--blu); font-size: 18px; line-height: 1;
  border-radius: 50%;
  transition: background 0.12s, color 0.12s;
}
.chip-remove:hover, .chip-remove:focus-visible {
  background: #DC2626; color: #fff; outline: none;
}
.add-docente-form {
  /* In basso: il campo data ha l'etichetta sopra ed e' piu' alto. */
  display: flex; gap: 10px; align-items: flex-end;
  flex-wrap: wrap;
}
.add-docente-form select {
  flex: 1; min-width: 220px;
  padding: 8px 10px; border: 1px solid var(--border);
  border-radius: 8px; font-size: 14px; background: #fff;
}
.add-docente-form select:focus { outline: none; border-color: var(--blu2); }

/* — Anagrafica read-only — */
.sc-section-head-row {
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px; margin-bottom: 12px;
}
.btn-sm {
  padding: 5px 12px; font-size: 12px;
}
/* Stile "spec sheet": label muted sx, valore bold dx, divider sottile. */
.anagrafica-list {
  margin: 0; padding: 0;
  display: flex; flex-direction: column;
}
.anagrafica-list > div {
  display: flex; justify-content: space-between; align-items: center;
  gap: 16px;
  padding: 12px 4px;
  border-bottom: 1px solid var(--border);
  min-height: 28px;
}
.anagrafica-list > div:last-child { border-bottom: none; }
.anagrafica-list > div:hover { background: #F8FAFC; }
.anagrafica-list dt {
  margin: 0; font-size: 13px; color: var(--muted);
  font-weight: 500;
  flex-shrink: 0;
}
.anagrafica-list dd {
  margin: 0; font-weight: 700; font-size: 15px;
  color: var(--testo); text-align: right;
  line-height: 1.3; word-break: break-word;
}
.anagrafica-list dd .muted-text { font-weight: 400; font-style: italic; font-size: 14px; }

.sc-section-head-row .btn-outline.btn-sm {
  padding: 5px 14px; font-size: 12px;
  background: #fff; color: var(--blu); border-color: var(--blu-l);
}
.sc-section-head-row .btn-outline.btn-sm:hover {
  background: var(--blu-l); border-color: var(--blu);
}

/* — Cronologia table — */
.sc-cronologia-table tbody tr:hover { background: var(--bg-soft, #f6f7fb); }

/* — Lista studenti non attivi (fallback) — */
.studenti-classe-list {
  list-style: none; padding: 0; margin: 8px 0 0 0;
  display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
  gap: 6px 14px;
}
.studenti-classe-list li {
  display: flex; align-items: center; gap: 8px;
  padding: 6px 0;
}
.studenti-classe-list a {
  color: var(--testo); text-decoration: none;
}
.studenti-classe-list a:hover, .studenti-classe-list a:focus-visible {
  color: var(--blu); text-decoration: underline;
}

/* — Bottone Chiudi classe — */
.btn-danger {
  display: inline-block; padding: 9px 18px;
  background: #DC2626; color: #fff;
  border: 1px solid #DC2626; border-radius: 8px;
  font-weight: 700; font-size: 14px; cursor: pointer;
}
.btn-danger:hover { background: #B91C1C; border-color: #B91C1C; }
.sc-actions { justify-content: flex-end; }

/* — Breakpoint — */
@media (max-width: 900px) {
  .kpi-strip { grid-template-columns: repeat(2, 1fr); }
  .scheda-grid { grid-template-columns: 1fr; }
}
@media (max-width: 640px) {
  .kpi-strip { grid-template-columns: 1fr 1fr; gap: 8px; }
  .kpi-value { font-size: 22px; }
  .sc-form-grid { grid-template-columns: 1fr; }
  .studenti-classe-list { grid-template-columns: 1fr; }
  .form-actions { flex-direction: column-reverse; }
  .form-actions button { width: 100%; }
  .add-docente-form { flex-direction: column; align-items: stretch; }
  .add-docente-form button { width: 100%; }
}
@media (max-width: 380px) {
  .sc-avatar { font-size: 16px; min-width: 52px; padding: 0 10px; }
  .kpi-card { padding: 10px 12px; }
}

/* ═══════════ SELETTORE ORARIO A ROTELLE (time-wheel.js) ═══════════ */
:root { --tw-item-h: 44px; } /* deve combaciare con ITEM_H nel JS */

/* Input agganciato alla rotella: tap target comodo (44px) e font 16px,
   che impedisce a iOS Safari lo zoom automatico al focus. */
input[data-time-wheel] {
  min-height: 44px; font-size: 16px; cursor: pointer;
  padding: 8px 12px; border: 1px solid var(--border);
  border-radius: 8px; background: #fff; color: var(--testo);
  font-variant-numeric: tabular-nums; width: 100%;
}
input[data-time-wheel]:hover { border-color: var(--blu2); }
/* Nelle card presenze l'input sta in riga con la label: niente 100%. */
.pc-ora-input[data-time-wheel],
.pc-uscita-input[data-time-wheel] {
  width: auto; min-width: 104px; flex: 0 0 auto;
}

body.tw-open { overflow: hidden; } /* blocca lo scroll dietro il pannello */

.tw-overlay {
  position: fixed; inset: 0; z-index: 200;
  display: flex; align-items: center; justify-content: center;
  background: rgba(15, 23, 42, 0.55); padding: 16px;
}
.tw-overlay[hidden] { display: none; }

.tw-sheet {
  background: #fff; border-radius: 16px; width: 100%; max-width: 320px;
  box-shadow: 0 12px 40px rgba(0,0,0,0.28); overflow: hidden;
}
.tw-head {
  display: flex; align-items: center; justify-content: space-between;
  gap: 12px; padding: 14px 18px; border-bottom: 1px solid var(--border);
}
.tw-title {
  font-size: 13px; font-weight: 700; color: var(--muted);
  text-transform: uppercase; letter-spacing: 0.4px;
}
.tw-preview {
  font-size: 20px; font-weight: 800; color: var(--blu);
  font-variant-numeric: tabular-nums;
}

.tw-cols {
  position: relative; display: flex; align-items: center;
  justify-content: center; gap: 4px; padding: 8px 0;
}
/* Banda che evidenzia la riga centrale (quella selezionata). */
.tw-band {
  position: absolute; left: 12px; right: 12px; top: 50%;
  height: var(--tw-item-h); transform: translateY(-50%);
  background: var(--blu-l); border-radius: 8px; pointer-events: none;
}
.tw-sep {
  font-size: 22px; font-weight: 800; color: var(--blu);
  position: relative; z-index: 1;
}

.tw-col {
  position: relative; z-index: 1;
  height: calc(var(--tw-item-h) * 5); width: 84px; overflow-y: auto;
  scroll-snap-type: y mandatory; -webkit-overflow-scrolling: touch;
  scrollbar-width: none; overscroll-behavior: contain;
  /* Padding = (altezza colonna − altezza item) / 2: permette al primo
     e all'ultimo valore di raggiungere il centro. */
  padding: calc(var(--tw-item-h) * 2) 0;
}
.tw-col::-webkit-scrollbar { display: none; }
.tw-col:focus-visible { outline: 2px solid var(--blu2); outline-offset: -2px; border-radius: 8px; }
.tw-list { list-style: none; }

.tw-item {
  height: var(--tw-item-h); scroll-snap-align: center;
  display: flex; align-items: center; justify-content: center;
  font-size: 19px; color: var(--muted); cursor: pointer;
  font-variant-numeric: tabular-nums;
  transition: color 0.12s, font-weight 0.12s;
}
.tw-item.is-sel { color: var(--blu); font-weight: 800; font-size: 21px; }

.tw-actions {
  display: flex; gap: 10px; padding: 12px 16px 16px;
  border-top: 1px solid var(--border);
}
.tw-actions button { flex: 1; min-height: 44px; font-size: 15px; }

/* Su mobile diventa un pannello a comparsa dal basso: il pollice
   arriva comodo, e la rotella resta lontana dalla tastiera. */
@media (max-width: 640px) {
  .tw-overlay { align-items: flex-end; padding: 0; }
  .tw-sheet {
    max-width: none; border-radius: 18px 18px 0 0;
    padding-bottom: env(safe-area-inset-bottom, 0);
  }
  .tw-col { width: 96px; }
  .tw-item { font-size: 20px; }
}
@media (max-width: 380px) {
  .tw-col { width: 80px; }
  .tw-head { padding: 12px 14px; }
}
@media (prefers-reduced-motion: reduce) {
  .tw-item { transition: none; }
}

/* ═══════════ INVENTARIO ═══════════ */

/* Gli avvisi di scorta stanno sopra ogni altra cosa, contatori
   compresi: sono l'unico blocco della pagina che chiede di agire. */
.inv-avvisi {
  background: var(--arancio-l);
  border: 2px solid var(--arancio);
  border-radius: var(--radius);
  padding: 14px 16px;
  margin-bottom: 18px;
}
.inv-avvisi-title {
  font-size: 15px; font-weight: 800; color: var(--arancio);
  display: flex; align-items: center; gap: 8px; margin-bottom: 10px;
}
.inv-avvisi-list { list-style: none; display: grid; gap: 8px; }
.inv-avviso {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
  background: #fff; border: 1px solid var(--arancio);
  border-radius: 8px; padding: 10px 12px;
  font-size: 14px;
}
.inv-avviso.is-esaurito { border-color: var(--rosso); background: var(--rosso-l); }
.inv-avviso-testo { flex: 1 1 320px; }
.inv-avviso-da {
  display: inline-block; margin-left: 6px;
  font-size: 12px; font-weight: 700; color: var(--muted);
  background: #fff; border: 1px solid var(--bordo-campo);
  border-radius: 999px; padding: 1px 8px;
}
.inv-avviso.is-esaurito .inv-avviso-da { background: #fff; }

.inv-stats { grid-template-columns: repeat(4, 1fr); }

/* Filtri: una riga sola finche' ci sta, poi vanno a capo da soli. */
.inv-filtri {
  display: flex; align-items: flex-end; gap: 12px; flex-wrap: wrap;
  padding-bottom: 14px; margin-bottom: 4px;
  border-bottom: 1px solid var(--border);
}
.inv-filtri .form-grp { margin-bottom: 0; }
.inv-filtri select, .inv-filtri input[type="search"] {
  height: 38px; padding: 0 10px;
  border: 1px solid var(--bordo-campo); border-radius: 8px;
  background: #fff; font-size: 14px; font-family: inherit;
}
.inv-filtro-cerca { flex: 1 1 200px; }
.inv-filtro-cerca input { width: 100%; }
.inv-filtro-check {
  display: flex; align-items: center; gap: 6px;
  font-size: 13px; color: var(--muted); height: 38px;
}
.inv-filtri-azioni { display: flex; align-items: center; gap: 10px; }

.inv-table .num, .inv-mov-table .num { text-align: right; white-space: nowrap; }
.inv-unita { font-size: 12px; color: var(--muted); }
.muted-num { color: var(--muted); }
.inv-sku {
  display: inline-block; margin-left: 6px;
  font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
  font-size: 11px; color: var(--muted);
  background: var(--bg); border-radius: 4px; padding: 1px 5px;
}
.inv-badge-indirizzo {
  display: inline-block;
  font-size: 12px; font-weight: 700;
  background: var(--viola-l); color: var(--viola);
  border-radius: 999px; padding: 2px 10px;
}
/* Pezzo 14: di quale sede (o «Estetista · Eboli») e' il prodotto. */
.inv-dove {
  display: inline-block; margin-left: 6px;
  font-size: 12px; color: var(--muted); white-space: nowrap;
}

/* Tre stati, tre colori: pieno, in riserva, finito. */
.scorta-pill {
  display: inline-block; font-size: 12px; font-weight: 700;
  border-radius: 999px; padding: 2px 10px; white-space: nowrap;
}
.scorta-disponibile { background: var(--verde-l); color: var(--verde); }
.scorta-sotto_soglia { background: var(--arancio-l); color: var(--arancio); }
.scorta-esaurito { background: var(--rosso-l); color: var(--rosso); }

/* Movimenti: il segno e' l'informazione principale della riga. */
.mov-pill {
  display: inline-block; font-size: 11px; font-weight: 700;
  border-radius: 999px; padding: 2px 9px; white-space: nowrap;
}
.mov-pill-prelievo { background: var(--rosso-l); color: var(--rosso); }
.mov-pill-restituzione { background: var(--blu-l); color: var(--blu); }
.mov-pill-rifornimento { background: var(--verde-l); color: var(--verde); }
.mov-pill-rettifica { background: var(--viola-l); color: var(--viola); }
.mov-pill-carico_iniziale { background: var(--border); color: var(--muted); }
.mov-delta { font-weight: 800; font-variant-numeric: tabular-nums; }
.mov-delta.is-entrata { color: var(--verde); }
.mov-delta.is-uscita { color: var(--rosso); }
.mov-data { white-space: nowrap; font-size: 13px; color: var(--muted); }
.mov-chi { font-size: 13px; }
.mov-causale { font-size: 13px; max-width: 260px; }
.mov-note { display: block; color: var(--muted); font-size: 12px; }
.mov-finito { display: block; font-size: 12px; font-weight: 700; }

/* Scheda prodotto */
.inv-testata { align-items: start; }
.inv-giacenza { border-left: 4px solid var(--border); }
.inv-giacenza.scorta-disponibile { border-left-color: var(--verde); }
.inv-giacenza.scorta-sotto_soglia { border-left-color: var(--arancio); }
.inv-giacenza.scorta-esaurito { border-left-color: var(--rosso); }
.inv-giacenza-num {
  font-size: 34px; font-weight: 800; line-height: 1.1; margin-bottom: 6px;
}
.inv-giacenza-num .inv-unita { font-size: 15px; font-weight: 600; }
.inv-giacenza-stato { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.inv-sotto-da {
  margin-top: 10px; padding: 8px 10px;
  background: var(--arancio-l); color: var(--arancio);
  border-radius: 8px; font-size: 13px; font-weight: 600;
}
.inv-azioni { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin-top: 14px; }
.inv-descrizione { margin-top: 10px; font-size: 14px; color: var(--muted); }
.inv-quadratura {
  margin-top: 12px; padding-top: 10px; border-top: 1px solid var(--border);
  font-size: 13px; color: var(--muted);
}

.inv-classifica { list-style: none; display: grid; gap: 8px; }
.inv-classifica li {
  display: flex; align-items: baseline; justify-content: space-between;
  gap: 12px; padding-bottom: 6px; border-bottom: 1px solid var(--border);
}
.inv-classifica-val { font-weight: 700; white-space: nowrap; }

/* Anteprima del calcolo nei modali: si guarda, non decide niente.
   Il numero valido e' quello che rifa' il backend. */
.calcolo-box {
  background: var(--blu-l); color: var(--blu);
  border-radius: 8px; padding: 9px 12px; margin-bottom: 14px;
  font-size: 14px; font-weight: 600;
}
.calcolo-box.is-errore { background: var(--rosso-l); color: var(--rosso); }
.modal-oggetto {
  font-size: 14px; font-weight: 700; margin-bottom: 14px;
  padding-bottom: 10px; border-bottom: 1px solid var(--border);
}
.form-hint {
  font-size: 12px; color: var(--muted);
  background: var(--bg); border-radius: 8px;
  padding: 8px 10px; margin-bottom: 14px;
}
.form-row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; }
.conferma-intro {
  font-size: 14px; margin-bottom: 14px;
  background: var(--arancio-l); color: var(--arancio);
  border-radius: 8px; padding: 10px 12px;
}
.dl-conferma { display: grid; gap: 8px; margin-bottom: 16px; }
.dl-conferma > div {
  display: flex; justify-content: space-between; gap: 14px;
  padding-bottom: 6px; border-bottom: 1px solid var(--border);
}
.dl-conferma dt { font-size: 13px; color: var(--muted); }
.dl-conferma dd { font-size: 14px; font-weight: 700; text-align: right; }
.modal-actions { display: flex; justify-content: flex-end; gap: 10px; }
.btn-sm { padding: 6px 12px; font-size: 13px; }

@media (max-width: 900px) {
  .inv-stats { grid-template-columns: repeat(2, 1fr); }
  .mov-causale { max-width: none; }
}
@media (max-width: 640px) {
  .inv-filtri { flex-direction: column; align-items: stretch; }
  .inv-filtri .form-grp, .inv-filtri select, .inv-filtri input[type="search"] { width: 100%; }
  .inv-filtri-azioni { justify-content: space-between; }
  .form-row2 { grid-template-columns: 1fr; }
  .inv-avviso { align-items: stretch; }
  .inv-avviso .btn-primary { width: 100%; }
  .inv-giacenza-num { font-size: 28px; }
}
@media (max-width: 380px) {
  .inv-stats { grid-template-columns: 1fr; }
  .modal-actions { flex-direction: column-reverse; }
  .modal-actions > * { width: 100%; }
}

/* ═══════════ INVENTARIO TUTOR ═══════════ */

.inventario-card .ico { background: var(--viola-l); }

/* Lista 24/09 (pezzo 12): il magazzino del tutor in tre tasti. */
.mag-tasti {
  display: grid; grid-template-columns: repeat(3, minmax(0, 1fr));
  gap: 16px; margin: 20px 0 24px;
}
.mag-tasto h3 { display: inline-flex; align-items: center; gap: 8px; }
.azione-card.mag-prodotti { border-color: var(--viola); }
.azione-card.mag-prodotti h3 { color: var(--viola); }
.azione-card.mag-restituisci { border-color: var(--blu2); }
.azione-card.mag-restituisci h3 { color: var(--blu); }
/* Pezzo 13: il magazzino della segreteria, quattro tasti in due righe. */
.mag-tasti-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); }
.azione-card.mag-carico { border-color: var(--verde); }
.azione-card.mag-carico h3 { color: var(--verde); }
.mag-conti { font-variant-numeric: tabular-nums; }
/* «Si consuma / va restituito» nel modulo del prodotto. */
.inv-tipo { border: 0; padding: 0; margin: 0 0 14px; }
.inv-tipo legend { font-size: 13px; font-weight: 700; margin-bottom: 6px; }
/* Pezzo 16: le sedi di un account della segreteria. */
.sedi-scelta { border: 0; padding: 0; margin: 0 0 14px; }
.sedi-scelta legend { font-size: 13px; font-weight: 700; margin-bottom: 6px; color: inherit; text-transform: none; letter-spacing: 0; padding: 0; }
.inv-tipo-scelta {
  display: flex; align-items: flex-start; gap: 8px;
  padding: 8px 10px; margin-bottom: 6px;
  border: 1px solid var(--border); border-radius: 8px;
  font-size: 13px; cursor: pointer;
}
.inv-tipo-scelta input { margin-top: 3px; }
.inv-tipo-cella { font-size: 13px; white-space: nowrap; }

/* Prodotti: una riga per prodotto, tutta toccabile. */
.mag-cerca { display: flex; align-items: center; gap: 10px; margin-bottom: 14px; }
.mag-cerca label { font-size: 13px; font-weight: 700; color: var(--muted); }
.mag-cerca input {
  flex: 1 1 auto; min-width: 0; height: 44px; padding: 0 12px; font-size: 16px;
  border: 1px solid var(--bordo-campo); border-radius: 8px; font-family: inherit;
}
.mag-lista { list-style: none; display: grid; gap: 8px; }
.mag-riga {
  display: flex; align-items: center; gap: 10px; width: 100%;
  min-height: 56px; padding: 10px 14px; text-align: left;
  background: #fff; border: 1px solid var(--border);
  border-left: 4px solid var(--border); border-radius: 10px;
  font: inherit; color: var(--testo);
}
button.mag-riga { cursor: pointer; transition: background 0.15s; }
button.mag-riga:hover { background: var(--bg); }
button.mag-riga:focus-visible { outline: 2px solid var(--blu2); outline-offset: 2px; }
.mag-riga.scorta-bordo-disponibile { border-left-color: var(--verde); }
.mag-riga.scorta-bordo-sotto_soglia { border-left-color: var(--arancio); }
.mag-riga.is-esaurito { border-left-color: var(--rosso); opacity: 0.6; }
.mag-riga-testo { display: flex; flex-direction: column; flex: 1 1 auto; min-width: 0; }
.mag-riga-num { font-weight: 800; white-space: nowrap; font-variant-numeric: tabular-nums; }
.prod-nome { font-size: 15px; font-weight: 700; }
.prod-descr { font-size: 13px; color: var(--muted); margin-top: 2px; }

/* Le finestrelle: quantita' con − e +, 44px e 16px (sotto i 16px iOS
   Safari zooma al focus). */
.mag-disp { font-size: 14px; color: var(--muted); margin-bottom: 12px; }
.mag-contatore { display: flex; align-items: center; gap: 8px; }
.mag-contatore .btn-outline {
  width: 48px; height: 44px; padding: 0; font-size: 22px; font-weight: 800;
}
.mag-contatore input[type="number"] {
  width: 90px; height: 44px; padding: 0 10px; font-size: 18px; font-weight: 700;
  text-align: center; border: 1px solid var(--bordo-campo); border-radius: 8px;
  font-family: inherit;
}
.prod-resto { font-size: 12px; font-weight: 600; color: var(--verde); margin-top: 6px; min-height: 16px; }
.prod-resto.is-errore { color: var(--rosso); }
.mag-avviso { font-size: 13px; }
.reso-azioni { display: flex; gap: 8px; }
.mov-pill-finito { background: var(--border); color: var(--testo); }

.reso-list { list-style: none; display: grid; gap: 10px; }
.reso-card {
  display: flex; align-items: center; justify-content: space-between;
  gap: 14px; flex-wrap: wrap;
  border: 1px solid var(--border); border-radius: 10px; padding: 12px 14px;
}
.reso-info { flex: 1 1 260px; }
.reso-conti { font-size: 13px; color: var(--muted); margin-top: 4px; }
.reso-max { color: var(--blu); }
.reso-form { display: flex; align-items: center; gap: 8px; }
.reso-form input[type="number"] {
  width: 90px; height: 44px; padding: 0 10px; font-size: 16px;
  border: 1px solid var(--bordo-campo); border-radius: 8px; font-family: inherit;
}

.mov-list { list-style: none; display: grid; gap: 8px; }
.mov-item {
  display: flex; align-items: center; gap: 10px; flex-wrap: wrap;
  padding-bottom: 8px; border-bottom: 1px solid var(--border);
  font-size: 14px;
}
.mov-item-nome { font-weight: 600; flex: 1 1 auto; }
.mov-item-data { font-size: 12px; color: var(--muted); }
.mov-item .mov-note { flex-basis: 100%; }

.sr-only {
  position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px;
  overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
}

@media (max-width: 640px) {
  .mag-tasti { grid-template-columns: minmax(0, 1fr); gap: 12px; }
  .reso-card { align-items: stretch; }
  .reso-azioni { width: 100%; }
  .reso-azioni .btn-outline, .reso-azioni .btn-primary { flex: 1 1 0; min-height: 44px; }
  .reso-form { width: 100%; }
  .reso-form input[type="number"] { flex: 1 1 auto; width: auto; }
}

/* Scorciatoie e cronologia */
.inv-scorciatoie { display: flex; gap: 8px; flex-wrap: wrap; margin-bottom: 16px; }
.inv-scorciatoia {
  font-size: 13px; font-weight: 600; text-decoration: none;
  color: var(--muted); background: #fff;
  border: 1px solid var(--border); border-radius: 999px;
  padding: 5px 14px;
}
.inv-scorciatoia:hover { border-color: var(--blu2); color: var(--blu); }
.inv-scorciatoia.is-active {
  background: var(--blu); border-color: var(--blu); color: #fff;
}
.inv-vedi-tutti { margin-top: 10px; text-align: right; }

.cron-filtri { padding-bottom: 14px; border-bottom: 1px solid var(--border); }
.cron-filtri-riga {
  display: grid; grid-template-columns: repeat(4, 1fr);
  gap: 12px; margin-bottom: 12px;
}
.cron-filtri .form-grp { margin-bottom: 0; }
.cron-filtri select,
.cron-filtri input[type="date"],
.cron-filtri input[type="search"] {
  width: 100%; height: 38px; padding: 0 10px;
  border: 1px solid var(--bordo-campo); border-radius: 8px;
  background: #fff; font-size: 14px; font-family: inherit;
}
.cron-filtri-azioni {
  display: flex; align-items: center; gap: 12px; flex-wrap: wrap;
}
.cron-cerca { grid-column: span 2; }

.cron-pagine {
  display: flex; align-items: center; justify-content: center;
  gap: 14px; margin-top: 16px;
}
.cron-pagine-stato { font-size: 13px; color: var(--muted); }

@media (max-width: 900px) {
  .cron-filtri-riga { grid-template-columns: repeat(2, 1fr); }
  .cron-cerca { grid-column: span 2; }
}
@media (max-width: 640px) {
  .cron-filtri-riga { grid-template-columns: 1fr; }
  .cron-cerca { grid-column: auto; }
  .cron-filtri-azioni { justify-content: space-between; }
}

/* Evidenziazione real-time, oltre alle card corso della dashboard.
   Sulle righe di tabella il box-shadow non si vede (il <tr> non ha un
   box proprio): li' si accende lo sfondo e poi sfuma. */
.stat-card.rt-pulse,
.inv-avvisi.rt-pulse {
  animation: rtPulse 1.2s ease-out;
}
tr.rt-pulse > td {
  animation: rtRiga 1.4s ease-out;
}
@keyframes rtRiga {
  0%   { background: var(--blu-l); }
  100% { background: transparent; }
}
@media (prefers-reduced-motion: reduce) {
  .stat-card.rt-pulse,
  .inv-avvisi.rt-pulse,
  tr.rt-pulse > td { animation: none; }
}


/* ═══════════ MATERIE (Step 3) ═══════════ */
/* Scheda classe: un docente per riga, con le materie che insegna QUI. */
.sc-doc-intro { font-size: 13px; margin-bottom: 10px; }
.sc-docenti { list-style: none; display: flex; flex-direction: column; gap: 10px; margin-bottom: 14px; }
.sc-docente {
  border: 1px solid var(--border); border-radius: var(--radius);
  padding: 10px 12px; background: #fff;
}
.sc-docente.is-inactive { opacity: 0.75; }
.sc-docente-head { display: flex; align-items: center; gap: 10px; }
.sc-docente-head .chip-avatar {
  display: inline-flex; align-items: center; justify-content: center;
  width: 28px; height: 28px; border-radius: 50%;
  background: var(--blu); color: #fff;
  font-size: 11px; font-weight: 800; flex-shrink: 0;
}
.sc-docente-nome { flex: 1; min-width: 0; font-weight: 700; color: var(--blu); }
.sc-docente-materie { margin: 8px 0 0 38px; }
.sc-docente-edit { margin: 8px 0 0 38px; }
.sc-docente-edit summary {
  cursor: pointer; font-size: 13px; font-weight: 600; color: var(--blu2);
  padding: 4px 0;
}
.sc-docente-edit form { display: flex; flex-direction: column; gap: 8px; margin-top: 6px; }
.sc-docente-edit .btn-sm { align-self: flex-start; }
.sc-docente-vuoto { font-size: 13px; margin: 8px 0 0 38px; }
.badge-attenzione {
  display: inline-block; padding: 2px 10px; border-radius: 20px;
  background: var(--arancio-l); color: var(--arancio);
  font-size: 11px; font-weight: 700;
}
/* Il catalogo ha una ventina di titoli lunghi: nel modale docente la
   lista scorre invece di allungare la finestra oltre lo schermo. */
.checkbox-group-scroll { max-height: 260px; overflow-y: auto; }
.avviso-rinomina { color: var(--arancio); font-weight: 600; }
.label-secondaria { display: block; margin-top: 10px; font-size: 13px; }
.gest-intro { font-size: 13px; margin: -4px 0 12px; }
.gest-table td.num, .gest-table th.num {
  text-align: right; font-variant-numeric: tabular-nums; white-space: nowrap;
}
@media (max-width: 640px) {
  .sc-docente-materie, .sc-docente-edit, .sc-docente-vuoto { margin-left: 0; }
}

/* ═══════════ PROGRAMMAZIONE (Step 4) ═══════════ */
.nota-libera { font-size: 13px; margin: 0 0 10px; }
/* Stato delle lezioni: in corso → svolta, o non tenuta (segreteria). */
.stato-lez {
  display: inline-block; padding: 1px 8px; border-radius: 20px;
  font-size: 11px; font-weight: 700; margin-left: 8px; white-space: nowrap;
}
.stato-lez-in-corso { background: var(--blu-l); color: var(--blu); }
.stato-lez-svolta { background: var(--verde-l); color: var(--verde); }
.stato-lez-non-tenuta { background: #F1F5F9; color: var(--muted); text-decoration: line-through; }
.previste-oggi { margin-bottom: 14px; }
.previste-lista { list-style: none; display: flex; flex-direction: column; gap: 6px; }
.prevista-riga { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; font-size: 14px; }
.prevista-orario { font-variant-numeric: tabular-nums; font-weight: 700; min-width: 92px; }
.prevista-chi { flex: 1; min-width: 160px; }
.programmazione-giorno { margin-bottom: 14px; }
.conferma-seg { margin: 6px 0; font-size: 13px; }
.conferma-seg summary { cursor: pointer; color: var(--blu2); font-weight: 600; }
.conferma-seg form { display: flex; flex-direction: column; gap: 6px; margin-top: 6px; }
.conferma-seg textarea { width: 100%; padding: 6px 8px; border: 1px solid var(--bordo-campo); border-radius: 6px; font: inherit; }
.conferma-seg .btn-sm { align-self: flex-start; }
.storico-conferme { margin: 8px 0 0 18px; display: flex; flex-direction: column; gap: 4px; }
/* Correzioni delle presenze (Step 11). */
.badge-corretta {
  display: inline-block; padding: 1px 8px; border-radius: 20px;
  background: var(--arancio-l); color: var(--arancio);
  font-size: 11px; font-weight: 700;
}
.correzioni-presenza { margin-top: 4px; font-size: 12px; }
.correzioni-presenza summary { cursor: pointer; }
.correzioni-presenza .storico-conferme { font-weight: 400; }
.nota-correzione { font-size: 13px; margin: 0 0 10px; }
.nota-valori-corretti { font-size: 12px; margin: 6px 0 10px; }
.riga-non-segnata td { background: #F8FAFC; }
/* Lista 24/09 (D32): le note di classe nella pagina della classe. */
.note-classe-giorno { border-left: 4px solid var(--rosso); }
.note-classe-lista { list-style: none; display: flex; flex-direction: column; gap: 10px; margin: 0; padding: 0; }
.nota-classe { padding: 10px 12px; border-radius: 8px; background: var(--bg); }
.nota-classe-testa { display: flex; flex-wrap: wrap; align-items: center; gap: 8px;
  font-size: 12px; color: var(--muted); font-weight: 600; }
.nota-classe-testo { margin: 4px 0 0; font-size: 14px; line-height: 1.5;
  white-space: pre-wrap; word-wrap: break-word; }
/* Lista 24/09: una nota (o una riga) appena arrivata nella pagina della
   classe si illumina per qualche secondo, poi torna normale. */
tr.appena-arrivata > td, .nota-classe.appena-arrivata {
  animation: appenaArrivata 4s ease-out;
}
@keyframes appenaArrivata {
  0%, 30% { background: #FDE68A; }
  100%    { background: transparent; }
}
@media (prefers-reduced-motion: reduce) {
  tr.appena-arrivata > td, .nota-classe.appena-arrivata { animation: none; outline: 2px solid #F59E0B; }
}
.pill-nuova { display: inline-block; padding: 1px 7px; border-radius: 20px;
  background: var(--rosso); color: #fff; font-size: 10px; font-weight: 800;
  text-transform: uppercase; letter-spacing: .4px; vertical-align: middle; }
.presenze-mancanti { font-size: 13px; margin: 0 0 10px; padding: 8px 12px;
  border-radius: 8px; background: var(--arancio-l); color: var(--testo);
  border-left: 3px solid var(--arancio); }
.modale-correzione-chi { margin: 0 0 12px; line-height: 1.5; }
.lezioni-eliminate { margin-top: 14px; padding-top: 10px; border-top: 1px dashed var(--border); font-size: 13px; }
.lezioni-eliminate .card-subtitle { font-size: 12px; font-weight: 700; color: var(--muted); margin: 0; }
.sosp-tutte { margin-bottom: 6px; }
.sosp-lista { list-style: none; display: flex; flex-direction: column; gap: 12px; }
.sosp-gruppo { border-bottom: 1px solid var(--border); padding-bottom: 10px; }
.sosp-testa { display: flex; flex-wrap: wrap; gap: 10px; align-items: baseline; }
.sosp-meta { font-size: 12px; margin: 2px 0 6px; }
.sosp-conflitti { margin: 6px 0 6px 18px; font-size: 13px; }
.sosp-dettaglio { font-size: 13px; margin-top: 6px; }
.sosp-dettaglio ul { margin-left: 18px; }
.sosp-archivio summary { cursor: pointer; }

/* Passo 3: piani di studio per indirizzo e anno. */
.piano-card { margin-top: 16px; }
.piano-table th.piano-anno { text-align: center; white-space: nowrap; }
.piano-classi { display: block; font-size: 11px; font-weight: 400; white-space: normal; }
.piano-vuoto {
  display: inline-block; margin-top: 2px; padding: 0 6px; border-radius: 10px;
  font-size: 10px; font-weight: 700; background: var(--arancio-l); color: var(--arancio);
}
.piano-cella { text-align: center; }
.piano-cella input { width: 20px; height: 20px; accent-color: var(--blu2); }
.piano-gruppo th {
  text-align: left; font-size: 12px; text-transform: uppercase; letter-spacing: .03em;
  color: var(--muted); background: var(--bg);
}
@media (max-width: 640px) {
  .piano-table .gest-cell-nome { min-width: 160px; }
}

/* Corsi: indirizzo, materie e anni in una pagina sola. */
.corsi-azioni-ind { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.corsi-uso { display: block; font-size: 11px; }
.corsi-salva { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; margin-top: 12px; }
.corsi-aggiungi { margin-top: 18px; padding-top: 14px; border-top: 1px solid var(--border); }
.corsi-aggiungi-riga { display: flex; gap: 12px; flex-wrap: wrap; align-items: flex-end; }
.corsi-aggiungi-riga .form-grp { flex: 1 1 220px; margin: 0; min-width: 0; }
/* 8-bis: i titoli delle materie arrivano a cento caratteri e il menu si
   allargava con loro, oltre lo schermo del telefono. Chiuso si accorcia;
   aperto mostra il titolo intero. */
.corsi-aggiungi-riga select { width: 100%; max-width: 100%; }
.corsi-anni { border: none; padding: 0; display: flex; gap: 10px; align-items: center; flex: 0 0 auto; }
.corsi-anni legend { font-size: 12px; color: var(--muted); }
.corsi-archiviati { list-style: none; display: flex; flex-direction: column; gap: 6px; }
.corsi-archiviati li { display: flex; gap: 10px; align-items: center; }

/* Percorso dell'allievo: le iscrizioni, una riga per periodo (Step 5). */
.tab-percorso { width: 100%; border-collapse: collapse; font-size: 14px; }
.tab-percorso th {
  text-align: left; padding: 6px 10px; font-size: 12px; text-transform: uppercase;
  letter-spacing: .03em; color: var(--muted); border-bottom: 1px solid var(--border);
}
.tab-percorso td { padding: 8px 10px; border-bottom: 1px solid var(--border); }
.tab-percorso tr:last-child td { border-bottom: none; }
.tab-percorso .riga-aperta { background: var(--blu-l); }
.isc-pill {
  display: inline-block; padding: 1px 8px; border-radius: 10px;
  font-size: 11px; font-weight: 700; background: var(--bg); color: var(--muted);
}
.isc-attiva { background: var(--verde-l); color: var(--verde); }
.isc-ritirata { background: var(--rosso-l); color: var(--rosso); }
.isc-trasferita { background: var(--arancio-l); color: var(--arancio); }
.isc-conclusa { background: var(--blu-l); color: var(--blu); }
.isc-motivo { display: block; font-size: 11px; margin-top: 2px; }
.ric-badge {
  display: inline-block; padding: 0 6px; border-radius: 10px; font-size: 10px;
  font-weight: 700; background: var(--arancio-l); color: var(--arancio);
}
.percorso-azioni { display: flex; gap: 12px; flex-wrap: wrap; margin-top: 14px; }
.percorso-chiuso { margin-top: 14px; }
.azione-isc {
  flex: 1 1 260px; border: 1px solid var(--border); border-radius: 8px; padding: 10px 12px;
}
.azione-isc > summary {
  cursor: pointer; font-weight: 700; font-size: 14px; color: var(--blu2);
}
.azione-isc[open] > summary { margin-bottom: 10px; }

/* Anagrafica e iscrizione che non tornano (Step 12, parte 1): riquadro
   giallo in Gestione › Studenti e nella scheda classe, segno accanto al
   nome, e nella scheda dell'allievo cosa non torna con i pulsanti. */
.da-sistemare {
  margin: 0 0 16px; border: 1px solid #FCD34D; border-radius: var(--radius);
  background: #FEF3C7; color: #78350F;
}
.da-sistemare > summary {
  cursor: pointer; padding: 10px 14px; display: flex; flex-wrap: wrap;
  align-items: baseline; gap: 4px 10px;
}
.da-sistemare-titolo { font-weight: 800; font-size: 15px; }
.da-sistemare-sotto { font-size: 13px; }
.da-sistemare-list { list-style: none; margin: 0; padding: 0 14px 10px; }
.da-sistemare-list li {
  display: flex; justify-content: space-between; align-items: center; gap: 12px;
  padding: 10px 0; border-top: 1px solid #FCD34D; font-size: 14px;
}
.da-sistemare-list .btn-link { white-space: nowrap; }
.da-sistemare-testo { min-width: 0; overflow-wrap: anywhere; }
.pill-da-sistemare {
  display: inline-block; margin-left: 6px; padding: 1px 8px; border-radius: 10px;
  font-size: 11px; font-weight: 700; background: #FEF3C7; color: #92400E;
  white-space: nowrap; vertical-align: middle;
}
.coerenza-box {
  margin: 0 0 14px; padding: 12px 14px; border-radius: var(--radius);
  border: 1px solid #FCD34D; background: #FEF3C7; color: #78350F;
}
.coerenza-titolo { margin: 0 0 6px; font-weight: 800; font-size: 14px; }
.coerenza-list { margin: 0 0 10px 18px; padding: 0; font-size: 14px; line-height: 1.5; }
.coerenza-consiglio { display: block; font-size: 13px; font-style: italic; }
.coerenza-azione { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; }
.coerenza-azione .muted-text { font-size: 13px; color: #78350F; }
.coerenza-nota { margin: 8px 0 0; font-size: 13px; color: #78350F; }

/* Passaggio di anno, dalla scheda classe. */
.sc-passaggio-nota { margin-bottom: 12px; }
.sc-passaggio-form .grid2 { gap: 12px; }
.sc-fermi {
  border: 1px solid var(--border); border-radius: 8px; padding: 10px 12px; margin: 12px 0;
}
.sc-fermi legend { font-size: 12px; color: var(--muted); padding: 0 4px; }
.sc-fermo-item { display: flex; align-items: center; gap: 8px; padding: 3px 0; font-size: 14px; }
.sc-fermo-item input { width: 18px; height: 18px; accent-color: var(--blu2); }
.sc-anni-passati { margin-top: 14px; }

@media (max-width: 640px) {
  .da-sistemare-list li { flex-direction: column; align-items: flex-start; }
  .percorso-azioni { flex-direction: column; }
  /* In colonna la base di 260px diventava l'altezza: «Rientra dal…»
     chiuso era un riquadro vuoto alto come mezzo schermo. */
  .azione-isc { flex: 0 0 auto; }
  .tab-percorso { font-size: 13px; }
  .tab-percorso th, .tab-percorso td { padding: 6px; }
}

/* ═══════════ Scheda classe a sezioni (Step 9) ═══════════
   L'indice riusa le linguette di Gestione. Con JS si vede una sezione
   alla volta (scheda-classe.js); senza, restano tutte in fila. */
.sc-indice { margin-top: 8px; }
.sc-indice .gest-tab { display: inline-flex; align-items: center; gap: 6px; }
.sc-indice-num {
  display: inline-block; min-width: 20px; padding: 1px 6px;
  border-radius: 999px; font-size: 11px; font-weight: 700; text-align: center;
  background: var(--border); color: var(--muted);
}
.sc-indice-num.is-attenzione { background: #FEF3C7; color: #92400E; }
.sc-sezione { margin-bottom: 8px; }
.sc-sezione-titolo { font-size: 18px; font-weight: 800; margin: 18px 0 12px; }
/* A linguette il titolo e' gia' la linguetta accesa: resta per chi
   legge con lo screen reader. */
.sc-a-sezioni .sc-sezione-titolo {
  position: absolute; width: 1px; height: 1px; overflow: hidden;
  clip: rect(0 0 0 0); white-space: nowrap;
}
.sc-da-guardare-list { list-style: none; margin: 0; padding: 0; }
.sc-da-guardare-list li {
  display: flex; justify-content: space-between; align-items: center; gap: 12px;
  padding: 10px 12px; margin-bottom: 6px; border-radius: 8px;
  background: var(--arancio-l); font-size: 14px;
}
.sc-materiale-avviso {
  margin-top: 14px; padding: 10px 14px; border-radius: 10px;
  background: var(--arancio-l); font-size: 14px;
}
.sc-materiale-list { margin: 6px 0 12px 18px; padding: 0; font-size: 14px; }
.sc-nota { margin-top: 12px; font-size: 13px; }
.sc-registro-barra {
  display: flex; justify-content: space-between; align-items: flex-end;
  gap: 16px; flex-wrap: wrap;
}
.sc-stats-card .sc-stats-list {
  display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr));
}
.sc-avvisi { list-style: none; margin: 0; padding: 0; }
.sc-avviso { padding: 10px 0; border-bottom: 1px solid var(--border); }
.sc-avviso:last-child { border-bottom: 0; }
.sc-avviso-meta {
  display: flex; gap: 8px; align-items: center; flex-wrap: wrap;
  font-size: 12px; font-weight: 700; color: var(--muted);
}
.sc-avviso-testo { margin: 4px 0 0; font-size: 14px; white-space: pre-line; }

@media (max-width: 640px) {
  /* Nove linguette non stanno in una riga: scorrono di lato invece di
     andare a capo in tre righe. */
  .sc-indice { flex-wrap: nowrap; overflow-x: auto; -webkit-overflow-scrolling: touch; }
  .sc-indice .gest-tab { white-space: nowrap; padding: 10px 12px; }
  .sc-registro-barra { flex-direction: column; align-items: stretch; }
  .sc-da-guardare-list li { flex-direction: column; align-items: flex-start; }
}

/* Anno di corso accanto al CUP nelle card della dashboard. */
.corso-card h3 .corso-anno {
  display: inline-block; margin-left: 6px; padding: 1px 8px;
  border-radius: 999px; background: var(--blu-l); color: var(--blu);
  font-size: 12px; font-weight: 700; vertical-align: 1px;
}
.sc-chiusura-form { display: flex; align-items: center; gap: 12px; flex-wrap: wrap; }
.sc-chiusura-form .checkbox-item { flex: 1 1 320px; }

/* ═══════════ Calendario della classe (Step 9) ═══════════
   Griglia del mese sul computer; sul telefono diventa un elenco dei
   soli giorni che hanno qualcosa. Colori della dashboard: aula azzurro,
   tirocinio rosa. */
.cal-head {
  display: flex; justify-content: space-between; align-items: flex-start;
  gap: 16px; flex-wrap: wrap; margin-bottom: 16px;
}
.cal-head h2 { margin: 0 0 4px; }
.cal-mesi { display: flex; gap: 6px; flex-wrap: wrap; margin-bottom: 16px; }
.cal-mese {
  display: flex; flex-direction: column; align-items: center; min-width: 58px;
  padding: 6px 8px; border: 1px solid var(--border); border-radius: 8px;
  background: #fff; text-decoration: none; color: var(--testo);
}
.cal-mese:hover { border-color: var(--blu2); }
.cal-mese.is-active { background: var(--blu); border-color: var(--blu); color: #fff; }
.cal-mese.is-vuoto:not(.is-active) { color: var(--muted); background: var(--bg); }
.cal-mese-nome { font-size: 12px; font-weight: 700; text-transform: uppercase; }
.cal-mese-ore { font-size: 11px; }
.cal-barra { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; }
.cal-titolo { margin: 0; font-size: 18px; font-weight: 800; text-transform: capitalize; min-width: 150px; text-align: center; }
.cal-totali { margin: 12px 0; font-size: 13px; color: var(--muted); display: flex; gap: 8px 14px; flex-wrap: wrap; align-items: center; }
.cal-leg { font-weight: 700; padding: 1px 8px; border-radius: 999px; }
.cal-leg-aula { background: var(--blu-l); color: var(--blu); }
.cal-leg-tirocinio { background: #FCE7F3; color: #9D174D; }
.cal-leg-segnate { background: var(--verde-l); color: var(--verde); }
.cal-vuoto-nota { margin-bottom: 12px; }
.cal-griglia { border: 1px solid var(--border); border-radius: 10px; overflow: hidden; }
.cal-riga { display: grid; grid-template-columns: repeat(7, minmax(0, 1fr)); }
.cal-riga + .cal-riga { border-top: 1px solid var(--border); }
.cal-gs {
  padding: 6px 8px; font-size: 12px; font-weight: 700; color: var(--muted);
  text-transform: uppercase; background: var(--bg);
}
.cal-cella {
  display: flex; flex-direction: column; gap: 4px; min-height: 92px;
  padding: 6px; border-left: 1px solid var(--border);
  text-decoration: none; color: var(--testo); background: #fff; min-width: 0;
}
.cal-riga > :first-child { border-left: 0; }
.cal-cella.is-fuori { background: var(--bg); }
.cal-cella.is-libero { background: #FAFBFC; }
a.cal-cella:hover { outline: 2px solid var(--blu2); outline-offset: -2px; }
.cal-cella.is-passato { opacity: 0.7; }
.cal-cella.is-oggi { box-shadow: inset 0 0 0 2px var(--blu); opacity: 1; }
.cal-num { font-size: 13px; font-weight: 800; display: flex; gap: 4px; align-items: center; }
.cal-gs-mobile { display: none; }
.cal-segnate {
  margin-left: auto; font-size: 11px; padding: 0 5px; border-radius: 999px;
  background: var(--verde-l); color: var(--verde);
}
.cal-blocco {
  display: flex; flex-direction: column; padding: 3px 5px; border-radius: 5px;
  background: var(--blu-l); color: var(--blu); font-size: 11px; line-height: 1.3;
  border-left: 3px solid var(--blu);
}
.cal-blocco.is-tirocinio { background: #FCE7F3; color: #9D174D; border-left-color: #9D174D; }
.cal-orario { font-weight: 700; }
.cal-cosa, .cal-materia { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.cal-materia { color: var(--muted); }

@media (max-width: 900px) {
  .cal-cella { min-height: 80px; padding: 4px; }
  .cal-materia { display: none; }
}
@media (max-width: 640px) {
  .cal-griglia { border: 0; border-radius: 0; }
  .cal-riga { display: block; }
  .cal-riga + .cal-riga { border-top: 0; }
  .cal-intestazione, .cal-cella.is-fuori, .cal-cella.is-libero { display: none; }
  .cal-cella {
    min-height: 0; border: 1px solid var(--border); border-radius: 8px;
    margin-bottom: 8px; padding: 8px 10px;
  }
  .cal-gs-mobile { display: inline; font-weight: 700; color: var(--muted); }
  .cal-materia { display: block; }
  .cal-cosa, .cal-materia { white-space: normal; }
  .cal-blocco { font-size: 13px; }
  .cal-titolo { min-width: 0; flex: 1; }
}
.sc-cal-azioni { display: flex; gap: 8px; flex-wrap: wrap; }

/* ═══════════ CALENDARIO REGISTRI DEL TUTOR (lista 24/09, pezzo 7) ═══════════ */
/* Un elenco dei giorni, come sul registro di carta: la data a sinistra,
   i blocchi a destra (orario · docente, sotto la materia). Sul telefono
   la data va sopra. Stessi colori del calendario della segreteria. */
.cr-card .cal-barra { margin-bottom: 12px; }
.btn-outline.is-disabled { opacity: 0.35; pointer-events: none; }
/* Ogni giornata e' un riquadro a se', staccato dagli altri (richiesta
   dell'utente dopo il pezzo 7): fondo grigio chiaro, i blocchi bianchi
   sopra. Oggi in azzurro. */
.cr-giorni { list-style: none; margin: 0; padding: 0; display: grid; gap: 12px; }
.cr-giorno {
  display: grid; grid-template-columns: 140px 1fr; gap: 12px;
  padding: 12px; background: #F8FAFC;
  border: 1px solid var(--bordo-campo); border-radius: 10px;
}
.cr-giorno.is-oggi { background: var(--blu-l); border-color: var(--blu2); }
.cr-data { display: flex; align-items: baseline; gap: 6px; flex-wrap: wrap; }
.cr-gs { font-size: 12px; font-weight: 700; color: var(--muted); text-transform: uppercase; }
.cr-num { font-weight: 800; font-variant-numeric: tabular-nums; }
.cr-oggi {
  font-size: 11px; font-weight: 700; padding: 0 7px; border-radius: 999px;
  background: var(--blu); color: #fff;
}
.cr-blocchi { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.cr-blocco {
  display: grid; grid-template-columns: 100px 1fr; gap: 10px;
  padding: 5px 8px; border-radius: 6px; border-left: 3px solid var(--blu);
  background: #fff; font-size: 14px;
}
.cr-blocco.is-tirocinio { background: #FCE7F3; color: #9D174D; border-left-color: #9D174D; }
.cr-orario { font-weight: 700; font-variant-numeric: tabular-nums; }
.cr-cosa { display: flex; flex-direction: column; min-width: 0; }
.cr-chi { font-weight: 700; overflow-wrap: anywhere; }
.cr-materia { font-size: 13px; color: var(--muted); overflow-wrap: anywhere; }
.cr-vuoto { padding: 12px 0; }
@media (max-width: 640px) {
  .cr-giorno { grid-template-columns: 1fr; gap: 8px; padding: 10px; }
  .cr-blocco { grid-template-columns: 90px 1fr; gap: 8px; font-size: 13px; }
}
.sc-cal-azioni a { display: inline-block; text-decoration: none; }
.sc-avviso-form { margin-bottom: 14px; padding-bottom: 14px; border-bottom: 1px solid var(--border); }
.sc-avviso-elimina { margin-left: auto; }
.sc-avviso.is-scaduto { opacity: 0.65; }

/* Finestra studente con la classe gia' fissata (scheda classe, Step 9). */
.form-grp .form-label {
  display: block; font-size: 12px; font-weight: 600; margin-bottom: 4px;
  color: var(--muted); text-transform: uppercase; letter-spacing: 0.4px;
}
.campo-fisso {
  margin: 0; padding: 9px 12px; border: 1px dashed var(--bordo-campo);
  border-radius: 7px; background: var(--bg); font-size: 14px;
}
.form-aiuto { margin: 4px 0 0; font-size: 12px; }

/* Scheda docente della segreteria (Step 9). */
.sd-materie { margin-top: 8px; }
.sd-riassunto { margin: 0 0 10px; font-size: 13px; }
.sd-classi .gest-cell-nome .muted-text { display: block; font-weight: 400; font-size: 12px; }

/* Scheda allievo della segreteria: dai totali allo storico (Step 10). */
.ss-giorni { display: block; font-size: 12px; font-weight: 500; margin-top: 2px; }

/* ═══════════ TUTORIAL DEL REGISTRO (lista 24/09, pezzo 9) ═══════════ */
/* Tasto in fondo alla pagina iniziale del tutor: largo quanto la pagina,
   staccato dai riquadri della classe. */
.tutorial-link { margin-top: 16px; }

.tut-elenco { list-style: none; margin: 0; padding: 0; display: grid; gap: 12px; }
.tut-voce {
  background: #fff; border: 1px solid var(--border); border-radius: 12px;
  box-shadow: var(--shadow); overflow: hidden;
}
.tut-titolo {
  display: flex; align-items: center; gap: 12px;
  min-height: 60px; padding: 12px 16px;
  text-decoration: none; color: var(--testo);
  scroll-margin-top: 12px;
}
.tut-titolo:hover { background: var(--bg); }
.tut-titolo:focus-visible { outline: 2px solid var(--blu2); outline-offset: -2px; }
.tut-play {
  flex-shrink: 0; width: 36px; height: 36px; border-radius: 50%;
  display: grid; place-items: center;
  background: var(--blu-l); color: var(--blu); font-size: 14px;
}
.tut-titolo.is-aperto .tut-play { background: var(--blu); color: #fff; }
.tut-nome { font-weight: 700; font-size: 16px; overflow-wrap: anywhere; }
.tut-player { padding: 0 12px 12px; }
.tut-player video {
  display: block; width: 100%; max-height: 75vh;
  border-radius: 8px; background: #000;
}
.tut-errore { margin: 0; color: var(--rosso); font-size: 14px; }

/* Gestione › Tutorial */
.tut-col-ordine { width: 90px; white-space: nowrap; }
.tut-sposta { display: flex; gap: 4px; }
.tut-sposta .btn-outline { min-width: 34px; padding: 4px 8px; }
.tut-sposta .btn-outline:disabled { opacity: 0.35; cursor: default; }
/* Sul telefono la tabella scorre di lato, come le altre della Gestione,
   invece di spezzare nomi e date lettera per lettera. */
.tut-tabella { min-width: 680px; }
.tut-file-nome { display: block; }
.tut-file .muted-text { display: block; font-size: 12px; }
.carica-stato { margin: 4px 0 12px; }
.carica-stato progress { width: 100%; height: 12px; accent-color: var(--blu2); }
.carica-stato p { margin: 4px 0 0; font-size: 13px; }
.form-errore { margin: 4px 0 12px; color: var(--rosso); font-size: 14px; }
[data-tab="tutorial"] a.btn-link { text-decoration: none; }

/* ═══════════ UN MESE ALLA VOLTA (lista 24/09, pezzo 11) ═══════════ */
/* La barra ‹ mese › delle schede allievo e docente: quella del calendario,
   piu' piccola; il conteggio accanto al mese resta minuscolo. */
.mese-barra { margin: 4px 0 12px; }
.mese-titolo { font-size: 16px; margin: 0; }
.mese-titolo .muted-text { text-transform: none; font-weight: 500; font-size: 13px; }
/* Pagina del giorno e scheda classe: il resto degli avvisi. */
.avvisi-tutti { margin: 10px 0 0; }
.sc-altri-avvisi { margin-top: 8px; }
.sc-altri-avvisi > summary { cursor: pointer; display: inline-block; margin-bottom: 8px; }

/* ═══════════ STATISTICHE DELLA SCUOLA (lista 24/09, pezzo 15) ═══════════ */

/* I filtri stanno chiusi: la riga dice gia' cosa si guarda. */
.stat-filtri { padding: 0; margin-bottom: 16px; }
.stat-filtri > summary {
  display: flex; flex-wrap: wrap; align-items: baseline; gap: 4px 10px;
  padding: 12px 16px; cursor: pointer; list-style: none; min-height: 44px;
}
.stat-filtri > summary::-webkit-details-marker { display: none; }
.stat-filtri > summary::after { content: "▾"; margin-left: auto; color: var(--muted); }
.stat-filtri[open] > summary::after { content: "▴"; }
.stat-filtri-titolo { font-weight: 700; color: var(--blu); }
.stat-filtri-scelti { font-size: 13px; color: var(--muted); }
.stat-filtri-modulo { padding: 4px 16px 16px; border-bottom: 0; margin: 0; }
.stat-filtri-modulo input[type="date"] {
  height: 38px; padding: 0 10px;
  border: 1px solid var(--bordo-campo); border-radius: 8px;
  background: #fff; font-size: 14px; font-family: inherit;
}
.stat-filtri-modulo select { max-width: 280px; }

.stat-kpi-vicini { border-left: 4px solid var(--arancio); }
.stat-kpi-oltre { border-left: 4px solid var(--rosso); }

.stat-tasti { grid-template-columns: repeat(4, minmax(0, 1fr)); }
.stat-tasto h3 { color: var(--blu); font-size: 16px; }
.stat-tasto .ico { font-size: 32px; }

.stat-nota { font-size: 13px; margin: 0 0 14px; max-width: 80ch; }
.stat-vuoto { color: var(--verde); font-weight: 600; margin: 0; }
.stat-table .num { text-align: right; white-space: nowrap; font-variant-numeric: tabular-nums; }
.gest-table.stat-table th, .gest-table.stat-table td { padding: 10px 10px; }
/* Le intestazioni vanno a capo: con nove colonne, su una riga sola la
   tabella usciva dalla scheda anche al computer. */
.gest-table.stat-table thead th { white-space: normal; vertical-align: bottom; font-size: 11px; }
.gest-table.stat-table th[scope="row"] {
  text-transform: none; letter-spacing: 0; font-size: 14px;
  color: var(--testo); font-weight: 700; min-width: 110px;
}
.card-title .stat-titolo-nota {
  text-transform: none; letter-spacing: 0; font-weight: 400; font-size: 12px;
}
.stat-classe-sub { display: block; font-size: 12px; font-weight: 400; color: var(--muted); }
.stat-perc { display: inline-flex; align-items: center; gap: 8px; white-space: nowrap; }
.stat-perc .perc-bar { width: 70px; margin-right: 0; }
.stat-griglia td, .stat-griglia th { padding-left: 8px; padding-right: 8px; }
.stat-date { display: flex; flex-wrap: wrap; gap: 4px; margin-top: 4px; }
.stat-data {
  display: inline-block; padding: 2px 6px; border-radius: 6px;
  background: var(--bg); font-size: 12px; font-variant-numeric: tabular-nums;
}

@media (max-width: 900px) {
  .stat-tasti { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}
@media (max-width: 640px) {
  .stat-filtri-modulo input[type="date"], .stat-filtri-modulo select { width: 100%; max-width: none; }
  .stat-tasti { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  .stat-tasto { padding: 14px 16px; }
  .stat-tasto .ico { font-size: 26px; margin-bottom: 4px; }
  .stat-perc .perc-bar { width: 60px; }
}

/* ═══════════ DOTAZIONI E CONSEGNE (Step 13) ═══════════ */

.azione-card.dot-tasto-magazzino { border-color: var(--viola); }
.azione-card.dot-tasto-magazzino h3 { color: var(--viola); }
.azione-card.dot-tasto-consegne { border-color: var(--verde); }
.azione-card.dot-tasto-consegne h3 { color: var(--verde); }
.azione-card.dot-tasto-pacchetti { border-color: var(--arancio); }
.azione-card.dot-tasto-pacchetti h3 { color: var(--arancio); }
.azione-card.dot-tasto-movimenti { border-color: var(--blu2); }
.azione-card.dot-tasto-movimenti h3 { color: var(--blu); }

.dot-articolo.is-inactive { opacity: 0.7; }
.dot-articolo .gest-head { flex-wrap: wrap; gap: 6px 10px; }
/* Una cella della scorta: quante ce ne sono e, sotto, quante ne servono. */
.dot-cella { vertical-align: top; }
.dot-ci-sono { display: block; font-size: 16px; font-variant-numeric: tabular-nums; }
.dot-servono, .dot-mancano { display: block; font-size: 12px; white-space: nowrap; }
.dot-servono { color: var(--muted); }
.dot-mancano { color: var(--rosso); font-weight: 700; }
.dot-da-definire td { color: var(--arancio); font-style: italic; }
.dot-taglie { list-style: none; display: grid; gap: 6px; margin-bottom: 12px; }
.dot-taglie li { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; }
.dot-taglie li.is-inactive strong { opacity: 0.6; }
.dot-riga-modulo { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin-top: 6px; }
.dot-riga-modulo input[type="text"] { max-width: 160px; height: 36px; padding: 0 8px; font-size: 16px;
  border: 1px solid var(--bordo-campo); border-radius: 8px; font-family: inherit; }
.dot-dettagli summary { cursor: pointer; color: var(--blu2); font-size: 13px; }
.dot-elenco { list-style: disc; padding-left: 20px; display: grid; gap: 4px; }
.dot-q { width: 80px; height: 40px; padding: 0 8px; font-size: 16px; text-align: right;
  border: 1px solid var(--bordo-campo); border-radius: 8px; font-family: inherit; }
.dot-info { background: var(--blu-l); color: var(--blu); border-left: 4px solid var(--blu2); }
.dot-stato-completa { background: var(--verde-l); color: var(--verde); }
.dot-stato-parziale { background: var(--arancio-l); color: var(--arancio); }
.dot-stato-da_iniziare { background: var(--rosso-l); color: var(--rosso); }
.dot-stato-nessuna { background: var(--border); color: var(--muted); }
.dot-pos-uscito { background: var(--border); color: var(--muted); }
.dot-pos-classe_chiusa { background: var(--arancio-l); color: var(--arancio); }
.dot-pos-iscritto { background: var(--verde-l); color: var(--verde); }
.dot-da-definire-testo { color: var(--arancio); font-style: italic; }
.dot-kit { display: block; font-size: 12px; color: var(--muted); }
.dot-moduli { display: grid; gap: 8px; margin-top: 12px; }
.dot-moduli > details { border: 1px solid var(--border); border-radius: 8px; padding: 8px 12px; }
.dot-moduli > details > summary { cursor: pointer; font-weight: 700; color: var(--blu2); }
.dot-moduli form { margin-top: 10px; }
.dot-annullata { opacity: 0.6; }
.dot-num-neg { color: var(--rosso); }
.dot-num-pos { color: var(--verde); }
.dot-sotto { font-size: 14px; font-weight: 700; margin: 16px 0 6px; }
.dot-azioni-classe { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 12px; }
.dot-conti { list-style: none; display: flex; flex-wrap: wrap; gap: 8px 16px; margin: 4px 0 12px; font-size: 14px; }
.dot-conti li { display: inline-flex; align-items: center; gap: 6px; }
.dot-classi { list-style: none; display: grid; gap: 6px; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); }
.dot-classi a { display: block; padding: 10px 12px; border: 1px solid var(--border); border-radius: 8px; background: #fff; }
.dot-classi a:hover { background: var(--bg); }
.dot-classi .muted-text { display: block; font-size: 12px; }
.dot-taglie-classe select { height: 36px; font-size: 16px; }
.dot-operazioni { list-style: none; display: grid; gap: 10px; }
.dot-op { border: 1px solid var(--border); border-left: 4px solid var(--verde); border-radius: 8px; padding: 10px 12px; }
.dot-op-reso { border-left-color: var(--arancio); }
.dot-op-cambio { border-left-color: var(--blu2); }
.dot-op-storno { border-left-color: var(--rosso); }
.dot-op-testa { display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: baseline; }
.dot-op-righe { list-style: none; margin: 6px 0; display: grid; gap: 2px; }
.dot-in-piu { margin: 10px 0; }
.dot-consegna-allievo { border: 1px solid var(--border); border-radius: 8px; padding: 10px 12px; }
.dot-consegna-allievo + .dot-consegna-allievo { margin-top: 8px; }
.dot-consegna-riga { display: flex; flex-wrap: wrap; align-items: center; gap: 8px 12px; margin-top: 6px; }
.dot-consegna-riga select { height: 40px; font-size: 16px; }
.dot-disponibili { font-size: 13px; color: var(--muted); }
.dot-numeri { list-style: none; display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 10px; }
.dot-numeri a, .dot-numeri li > strong { color: inherit; }
.dot-numeri li { background: var(--bg); border-radius: 8px; padding: 10px 12px; font-size: 13px; }
.dot-numeri li strong { display: block; font-size: 22px; font-variant-numeric: tabular-nums; }
.dot-numeri-piccoli { margin-top: 10px; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); }
.dot-numeri-piccoli li strong { display: inline; font-size: 15px; }
@media (max-width: 640px) {
  .dot-numeri { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .dot-numeri-piccoli { grid-template-columns: minmax(0, 1fr); }
}
.dot-collegamenti { display: flex; flex-wrap: wrap; gap: 6px 16px; margin-top: 6px; font-size: 14px; }

/* I campi delle pagine delle dotazioni: alti per il dito, 16 px (sotto,
   iOS Safari ingrandisce al tocco). I filtri hanno i loro. */
.dot-pagina form:not(.inv-filtri) select,
.dot-pagina .dot-riga-modulo input[type="text"],
.dot-pagina form:not(.inv-filtri) .form-grp input[type="text"],
.dot-pagina form:not(.inv-filtri) .form-grp input[type="date"] {
  min-height: 40px; padding: 6px 10px; font-size: 16px; font-family: inherit;
  border: 1px solid var(--bordo-campo); border-radius: 8px; background: #fff;
}
.dot-pagina form:not(.inv-filtri) .form-grp select { width: 100%; }
.dot-classi a, .dot-numeri a { text-decoration: none; }
.dot-classi a strong, .dot-numeri a strong { color: var(--blu); }
.dot-classi a:hover strong, .dot-numeri a:hover { text-decoration: underline; }
