:root {
  /* ---- Palette CADACADEMY/ICMQ, rivista in verde-teal (vedi mockup
     "Esempio5/6" approvati nel canvas grafico) al posto del blu
     istituzionale originale. Tutte le regole sotto usano queste variabili,
     quindi il resto del file eredita il nuovo colore senza bisogno di
     toccare ogni singola regola. ---- */
  --primary:#0E3331;--primary-dark:#082220;--accent:#1F6F62;--accent-light:#E7F3EF;
  --success:#1a7f3c;--success-light:#e6f4ec;--warning:#b45309;--warning-light:#fef3c7;
  --danger:#b91c1c;--danger-light:#fee2e2;--gray-50:#F5F6F8;--gray-100:#f3f4f6;
  --gray-200:#e5e7eb;--gray-400:#9ca3af;--gray-600:#4b5563;--gray-800:#1f2937;
  --white:#fff;--radius:10px;
  --shadow:0 1px 2px rgba(15,23,31,.04),0 10px 28px rgba(15,23,31,.06);
  --font:'Inter',-apple-system,'Segoe UI',system-ui,sans-serif;
  /* Sidebar/topbar chiare con nav a pillola attiva, ispirate al riferimento
     "Esempio5/6": --sb-bg/--sb-bg-soft/--sb-border pilotano sia .sidebar
     sia .app-topbar, che condividono questi token. */
  --sb-bg:#FFFFFF;--sb-bg-soft:#EEF6F4;--sb-border:rgba(15,23,31,.08);
  --radius-lg:16px;
}
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
body{font-family:var(--font);font-size:15px;color:var(--gray-800);background:var(--gray-50);min-height:100vh}
.hidden{display:none!important}
/* AUTH */
.auth-wrap{display:flex;align-items:center;justify-content:center;min-height:100vh;background:linear-gradient(135deg,var(--primary) 0%,var(--accent) 100%)}
.auth-card{background:#fff;border-radius:var(--radius-lg);padding:40px 36px;box-shadow:0 8px 40px rgba(0,0,0,.2);width:100%;max-width:420px;margin:24px}
.logo-mark{display:inline-block;background:var(--primary);color:#fff;font-size:18px;font-weight:800;letter-spacing:1px;padding:10px 18px;border-radius:var(--radius);margin-bottom:10px}
.logo-mark span.lm-cad{color:#fff;font-weight:900}
.logo-mark span.lm-academy{color:rgba(255,255,255,.8);font-weight:500;letter-spacing:2px}
.logo-sub{font-size:13px;color:var(--gray-600)}
.auth-title{font-size:20px;font-weight:700;color:var(--primary);margin:24px 0 20px}
.fg{margin-bottom:16px}
.fg label{display:block;font-size:13px;font-weight:600;color:var(--gray-600);margin-bottom:6px}
.fg input:not([type="checkbox"]):not([type="radio"]),.fg select,.fg textarea{width:100%;padding:10px 14px;border:1.5px solid var(--gray-200);border-radius:var(--radius);font-size:14px;font-family:var(--font);outline:none;transition:border-color .2s;background:#fff}
.fg input:not([type="checkbox"]):not([type="radio"]):focus,.fg select:focus,.fg textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(31,111,98,.14)}
/* Senza questa regola i checkbox/radio annidati in un .fg ereditavano
   width:100%+padding dalla riga sopra (pensata per input testuali),
   gonfiando il riquadro cliccabile a piena larghezza e spingendo
   l'etichetta lontano dal quadratino (visibile es. nella scheda
   "Nuovo esaminatore" → ODV associati / Profilo Esperto). */
.fg input[type="checkbox"],.fg input[type="radio"]{width:16px;height:16px;flex-shrink:0;accent-color:var(--accent)}
.fg textarea{min-height:100px;resize:vertical}
.btn{display:inline-flex;align-items:center;gap:8px;padding:10px 20px;border:none;border-radius:var(--radius);font-size:14px;font-weight:600;font-family:var(--font);cursor:pointer;transition:all .2s;text-decoration:none}
.btn:disabled{opacity:.55;cursor:not-allowed}
.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-dark)}
.btn-accent{background:var(--accent);color:#fff}.btn-accent:hover:not(:disabled){background:#184f45}
.btn-success{background:var(--success);color:#fff}
.btn-danger{background:var(--danger);color:#fff}
.btn-ghost{background:transparent;color:var(--accent);border:1.5px solid var(--accent)}.btn-ghost:hover:not(:disabled){background:var(--accent-light)}
.btn-sm{padding:5px 12px;font-size:13px}
.btn-full{width:100%;justify-content:center;padding:12px}
.err{background:var(--danger-light);color:var(--danger);border-radius:var(--radius);padding:10px 14px;font-size:13px;margin-bottom:14px}
.ok{background:var(--success-light);color:var(--success);border-radius:var(--radius);padding:10px 14px;font-size:13px}
/* APP */
.app-wrap{display:flex;min-height:100vh}
/* Sidebar chiara con voci a "pillola" quando attive, come nel mockup di
   riferimento — al posto della sidebar scura con indicatore a barra
   laterale della veste grafica precedente. */
.sidebar{width:240px;background:var(--sb-bg);color:var(--gray-800);display:flex;flex-direction:column;flex-shrink:0;border-right:1px solid var(--sb-border)}
.sb-logo{padding:24px 20px;border-bottom:1px solid var(--sb-border)}
.sb-logo .t{font-size:22px;font-weight:800;letter-spacing:2px;color:var(--primary)}
.sb-logo .r{font-size:11px;opacity:.65;text-transform:uppercase;letter-spacing:1px;margin-top:2px;color:var(--gray-600)}
.sb-odv-name{font-size:20px;font-weight:800;color:var(--primary);letter-spacing:.5px;padding:6px 0 4px;line-height:1.2}
.sb-nav{flex:1;padding:16px 12px}
.nav-item{display:flex;align-items:center;gap:10px;padding:11px 14px;font-size:14px;font-weight:500;color:var(--gray-600);cursor:pointer;transition:all .15s;border-radius:12px;margin-bottom:2px}
.nav-item:hover{background:var(--sb-bg-soft);color:var(--primary)}
.nav-item.active{background:var(--primary);color:#fff;box-shadow:0 4px 14px rgba(14,51,49,.24)}
.nav-badge{margin-left:auto;background:#e63946;color:#fff;font-size:11px;font-weight:700;line-height:1;padding:3px 7px;border-radius:10px;box-shadow:0 0 0 2px #fff;animation:nav-badge-pulse 1.8s ease-in-out infinite}
@keyframes nav-badge-pulse{0%,100%{box-shadow:0 0 0 2px #fff}50%{box-shadow:0 0 0 4px rgba(230,57,70,.35)}}
/* Bagliore "sessioni attive" nella topbar ODV/ICMQ (17/09/2026): segnala
   che almeno un candidato ha una prova (scritto/Specifica/pratica) in
   corso in questo momento — vedi activeSessionsNow()/updateActiveSessionsGlow()
   in app.js. Nascosto (.hidden) quando il conteggio e' zero. */
.active-sessions-glow{cursor:pointer;display:inline-flex;align-items:center;gap:6px;font-size:13px;font-weight:700;color:#065f46;background:#d1fae5;padding:7px 13px;border-radius:999px;animation:active-sessions-glow-pulse 1.8s ease-in-out infinite}
.active-sessions-glow:hover{background:#bbf7d0}
@keyframes active-sessions-glow-pulse{0%,100%{box-shadow:0 0 0 0 rgba(16,185,129,.45)}50%{box-shadow:0 0 0 6px rgba(16,185,129,0)}}
/* Campanella notifiche in-piattaforma (topbar ODV) — sostituisce le email
   di notifica fine prova 1/2, vedi submitTest()/submitPratica(). */
.notif-wrap{position:relative}
.notif-bell{position:relative;background:var(--gray-100);border:1px solid var(--sb-border);color:var(--gray-800);border-radius:var(--radius);padding:6px 11px;font-size:16px;cursor:pointer;line-height:1}
.notif-bell:hover{background:var(--sb-bg-soft)}
.notif-badge{position:absolute;top:-7px;right:-7px;margin-left:0}
.notif-panel{position:absolute;top:calc(100% + 8px);right:0;width:340px;max-height:420px;overflow-y:auto;background:#fff;border-radius:var(--radius);box-shadow:0 10px 32px rgba(0,0,0,.28);z-index:200;text-align:left;color:#1a1a1a}
.notif-panel-head{padding:12px 16px;font-size:12px;font-weight:700;color:#6b7280;text-transform:uppercase;letter-spacing:.5px;border-bottom:1px solid #f3f4f6}
.notif-item{padding:12px 16px;border-bottom:1px solid #f3f4f6;font-size:13px;line-height:1.5;cursor:pointer}
.notif-item:hover{background:#f9fafb}
.notif-item:last-child{border-bottom:none}
.notif-item.unread{background:var(--accent-light)}
.notif-item-time{font-size:11px;color:#9ca3af;margin-top:4px}
.notif-empty{padding:24px 16px;text-align:center;color:#9ca3af;font-size:13px}
/* Menu laterale candidato: le 4 fasi restano indicatori di stato (non
   navigabili in avanti, come nel flusso a step precedente) — solo "Verifica
   Sistema" è liberamente accessibile in qualunque momento. */
.nav-step-dot{display:inline-flex;align-items:center;justify-content:center;width:20px;height:20px;border-radius:50%;background:var(--gray-200);color:var(--gray-600);font-size:11px;font-weight:700;flex-shrink:0}
.nav-item.locked{opacity:.45}
.nav-item.locked:hover{background:var(--sb-bg-soft);color:var(--gray-600)}
.nav-item.done .nav-step-dot{background:var(--success);color:#fff}
.nav-item.active .nav-step-dot{background:#fff;color:var(--primary)}
/* Intestazione di sezione non cliccabile (es. "Sessioni Esame") e relative
   sotto-voci indentate, per raggruppare più pagine sotto un'unica voce. */
.nav-section-label{padding:14px 14px 4px;font-size:11px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:var(--gray-400)}
.nav-section-label:first-child{padding-top:2px}
.nav-ico{width:17px;height:17px;flex-shrink:0}
.nav-item-sub{padding-left:32px;font-size:13px}
.sb-foot{padding:16px 20px;border-top:1px solid var(--sb-border);font-size:12px;color:var(--gray-600)}
.sb-foot .logout{cursor:pointer;text-decoration:underline;display:inline-block;margin-top:4px}
/* Header orizzontale: nome, meet, cambia password, esci — sempre visibili
   in alto. Riscritto in chiaro (bianco, testo scuro) al posto della barra
   scura piena, per lo stesso motivo della sidebar sopra. */
.app-topbar{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;background:var(--sb-bg);border-bottom:1px solid var(--sb-border);padding:20px 28px;font-size:13px;color:var(--gray-600);position:sticky;top:0;z-index:20}
.app-topbar-brand{flex-shrink:0}
.app-topbar-brand-name{font-size:33px;font-weight:800;color:var(--primary);letter-spacing:.2px;line-height:1.2}
.app-topbar-brand-sub{font-size:10.5px;color:var(--gray-400);text-transform:uppercase;letter-spacing:1px;margin-top:2px}
.app-topbar-user{display:flex;align-items:center;justify-content:flex-end;text-align:right;gap:14px;flex-wrap:wrap}
.app-topbar-name{font-weight:700;color:var(--gray-800);font-size:15px}
.app-topbar-action{cursor:pointer;color:var(--accent);font-weight:600;padding:8px 14px;border-radius:999px;background:var(--accent-light);text-decoration:none}
.app-topbar-action:hover{background:#dcece7}
.app-topbar-action.logout{color:var(--danger);background:var(--danger-light)}
.app-topbar-action.logout:hover{background:#fbd5d5}
.main{flex:1;padding:32px;overflow-y:auto;background:var(--gray-50)}
.ph{margin-bottom:24px}.pt{font-size:24px;font-weight:800;color:var(--primary);letter-spacing:-.2px}.ps{font-size:14px;color:var(--gray-600);margin-top:4px}
.card{background:#fff;border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:24px;margin-bottom:20px;border:1px solid var(--gray-100)}
.ct{font-size:16px;font-weight:700;color:var(--primary);margin-bottom:16px}
.stats{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:16px;margin-bottom:20px}
.stat{background:#fff;border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:20px;text-align:center;border:1px solid var(--gray-100)}
.stat .n{font-size:32px;font-weight:800;color:var(--primary)}
.stat .l{font-size:12px;color:var(--gray-600);margin-top:4px}
/* ---- STAT GRAFICHE (gauge ad anello + icon-card) ---- */
.stats-graphic{display:flex;gap:16px;flex-wrap:wrap;margin-bottom:20px;align-items:stretch}
.gauge-card{flex:0 0 190px;background:#fff;border:1px solid var(--gray-100);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:20px;display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center}
.gauge-ring{width:120px;height:120px}
.gauge-wrap{position:relative;width:120px;height:120px}
.gauge-center{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;font-size:26px;font-weight:800;color:var(--gray-800)}
.gauge-label{margin-top:10px;font-size:12px;font-weight:700;color:var(--gray-600);text-transform:uppercase;letter-spacing:.5px}
.istat-row{flex:1;display:flex;gap:16px;flex-wrap:wrap;min-width:280px}
.istat-card{flex:1;min-width:140px;background:#fff;border:1px solid var(--gray-100);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:18px;transition:box-shadow .15s,transform .15s}
.istat-card:hover{box-shadow:0 4px 8px rgba(15,23,31,.06),0 16px 32px rgba(15,23,31,.08);transform:translateY(-1px)}
.istat-icon{width:36px;height:36px;border-radius:10px;display:flex;align-items:center;justify-content:center;font-size:16px;margin-bottom:10px}
.istat-label{font-size:11px;font-weight:700;color:var(--gray-600);text-transform:uppercase;letter-spacing:.5px;margin-bottom:4px}
.istat-value{font-size:26px;font-weight:800;color:var(--gray-800)}
@media(max-width:900px){.gauge-card{flex:1 1 100%}}
table{width:100%;border-collapse:collapse;font-size:14px}
thead{background:var(--gray-50)}
th{padding:10px 14px;text-align:left;font-size:12px;font-weight:600;color:var(--gray-600);text-transform:uppercase;letter-spacing:.5px;border-bottom:2px solid var(--gray-200)}
td{padding:12px 14px;border-bottom:1px solid var(--gray-100);vertical-align:middle}
tr:last-child td{border-bottom:none}
tbody tr{transition:background .1s}
tbody tr:hover{background:var(--gray-50)}
.badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:12px;font-weight:600}
.b-pending{background:var(--gray-100);color:var(--gray-600)}
.b-progress{background:var(--accent-light);color:var(--primary)}
.b-pass{background:var(--success-light);color:var(--success)}
.b-fail{background:var(--danger-light);color:var(--danger)}
.b-wait{background:var(--warning-light);color:var(--warning)}
.b-warn{background:#fef3c7;color:#92400e} /* 29/09/2026: classe gia' usata in app.js ma mai definita */
/* CANDIDATO */
.cand-header{background:var(--primary);color:#fff;padding:16px 32px;display:flex;justify-content:space-between;align-items:center}
.cand-body{max-width:820px;margin:32px auto;padding:0 24px}
.steps{display:flex;margin-bottom:32px}
.step{flex:1;display:flex;flex-direction:column;align-items:center;position:relative}
.step:not(:last-child)::after{content:'';position:absolute;top:15px;left:calc(50% + 16px);right:calc(-50% + 16px);height:2px;background:var(--gray-200);z-index:0}
.step.done:not(:last-child)::after{background:var(--success)}
.step-circle{width:32px;height:32px;border-radius:50%;background:var(--gray-200);color:var(--gray-600);font-size:13px;font-weight:700;display:flex;align-items:center;justify-content:center;position:relative;z-index:1}
.step.active .step-circle{background:var(--primary);color:#fff}
.step.done .step-circle{background:var(--success);color:#fff}
.step-label{font-size:11px;color:var(--gray-600);margin-top:6px;text-align:center;font-weight:500}
.step.active .step-label{color:var(--primary);font-weight:700}
.step.done .step-label{color:var(--success)}
.welcome-card{background:#fff;border-radius:var(--radius-lg);padding:40px;box-shadow:var(--shadow);text-align:center}
.exam-badge{display:inline-block;background:var(--accent-light);color:var(--primary);font-weight:700;font-size:18px;padding:8px 20px;border-radius:999px;margin-bottom:16px}
.rules-box{background:var(--gray-50);border-radius:var(--radius);padding:20px 24px;text-align:left;margin:20px 0 28px;font-size:14px;line-height:1.8}
.test-hdr{background:#fff;border-radius:var(--radius);padding:16px 24px;box-shadow:var(--shadow);margin-bottom:16px;display:flex;justify-content:space-between;align-items:center}
.ans-nav{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:16px}
.ans-dot{width:30px;height:30px;border-radius:50%;background:var(--gray-200);color:var(--gray-600);font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;cursor:pointer;transition:all .15s}
.ans-dot.answered{background:var(--primary);color:#fff}
.ans-dot.current{outline:3px solid var(--accent)}
.progress-wrap{height:6px;background:var(--gray-200);border-radius:999px;margin-bottom:16px}
.progress-fill{height:100%;background:var(--primary);border-radius:999px;transition:width .3s}
.q-card{background:#fff;border-radius:var(--radius);box-shadow:var(--shadow);padding:24px;margin-bottom:16px}
.q-num{font-size:12px;font-weight:600;color:var(--accent);margin-bottom:8px;text-transform:uppercase}
.q-text{font-size:15px;font-weight:600;margin-bottom:16px;line-height:1.5}
.opt-label{display:flex;align-items:flex-start;gap:12px;padding:12px 16px;border:1.5px solid var(--gray-200);border-radius:var(--radius);cursor:pointer;transition:all .15s;font-size:14px;line-height:1.5;margin-bottom:8px}
.opt-label:hover{border-color:var(--accent);background:var(--accent-light)}
.opt-label.selected{border-color:var(--primary);background:var(--accent-light);font-weight:600;color:var(--primary)}
.opt-label input{margin-top:2px;flex-shrink:0;accent-color:var(--primary)}
.test-nav{display:flex;justify-content:space-between;margin-top:16px}
.result-card{background:#fff;border-radius:var(--radius-lg);padding:40px;box-shadow:var(--shadow);text-align:center}
.result-score{font-size:48px;font-weight:800;color:var(--primary);margin:16px 0}
.pratica-instr{background:var(--accent-light);border-left:4px solid var(--primary);padding:20px 24px;border-radius:0 var(--radius) var(--radius) 0;margin-bottom:24px;font-size:14px;line-height:1.7}
.rich-editor{min-height:160px;max-height:380px;border:1.5px solid var(--gray-200);border-radius:var(--radius);padding:12px 14px;font-size:14px;line-height:1.7;overflow-y:auto;background:#fff;outline:none;cursor:text}
.rich-editor:empty::before{content:attr(data-placeholder);color:#9ca3af;pointer-events:none}
.rich-editor:focus{border-color:var(--accent);box-shadow:0 0 0 3px rgba(31,111,98,.14)}
.rich-content table,.pratica-instr table,.rich-editor table{border-collapse:collapse;width:100%;margin:10px 0;font-size:13px}
.rich-content table td,.rich-content table th,.pratica-instr table td,.pratica-instr table th,.rich-editor table td,.rich-editor table th{border:1px solid #d1d5db;padding:6px 10px;vertical-align:top}
.rich-content table th,.pratica-instr table th,.rich-editor table th{background:#f3f4f6;font-weight:600}
.rich-content p,.pratica-instr p,.rich-editor p{margin:4px 0}
.rich-content ul,.rich-content ol,.pratica-instr ul,.pratica-instr ol{padding-left:20px;margin:6px 0}
.rich-content strong,.rich-editor strong{font-weight:700}
.rich-content img,.pratica-instr img,.rich-editor img{max-width:100%;height:auto;border-radius:6px;display:block;margin:8px 0}
.rich-editor-toolbar{display:flex;gap:2px;margin-bottom:6px;flex-wrap:wrap}
.rich-editor-toolbar button{border:1px solid var(--gray-200);background:#fff;border-radius:4px;padding:3px 8px;font-size:12px;cursor:pointer;line-height:1.4}
.rich-editor-toolbar button:hover{background:var(--gray-50)}
.pratica-card{background:#fff;border:1.5px solid var(--gray-200);border-radius:var(--radius);margin-bottom:10px;overflow:hidden;transition:box-shadow .15s}
.pratica-card:hover{box-shadow:0 2px 12px rgba(0,0,0,.08)}
.pratica-header{display:flex;align-items:center;gap:12px;padding:14px 18px;cursor:pointer;user-select:none}
.pratica-chevron{font-size:12px;color:var(--gray-400);transition:transform .2s;flex-shrink:0}
.pratica-chevron.open{transform:rotate(90deg)}
.pratica-body{display:none;border-top:1px solid var(--gray-100);padding:16px 20px 18px}
.pratica-body.open{display:block}
.pratica-instr-text{font-size:13px;color:#374151;white-space:pre-wrap;line-height:1.65;max-height:300px;overflow-y:auto;padding-right:4px}
.pratica-instr-text.expanded{max-height:none}
.upload-zone{border:2px dashed var(--gray-400);border-radius:var(--radius);padding:32px;text-align:center;cursor:pointer;transition:all .2s;background:var(--gray-50)}
.upload-zone:hover{border-color:var(--accent);background:var(--accent-light)}
/* ---- EXAM SECURITY MODE ---- */
body.exam-mode *{user-select:none!important;-webkit-user-select:none!important}
body.exam-mode img{pointer-events:none;-webkit-user-drag:none}
#exam-fs-warn{position:fixed;inset:0;background:rgba(0,0,0,.88);z-index:99999;display:flex;align-items:center;justify-content:center;flex-direction:column;color:#fff;text-align:center;padding:40px}
.ap-stat-box{border:1.5px solid var(--gray-200);border-radius:var(--radius);padding:14px 16px;background:#fff;transition:all .3s}
.ap-stat-icon{font-size:22px;margin-bottom:6px}
.ap-stat-label{font-size:11px;font-weight:600;text-transform:uppercase;letter-spacing:.5px;color:var(--gray-400);margin-bottom:4px}
.ap-stat-val{font-size:13px;font-weight:600;color:#374151}
.upload-zone.has-file{border-color:var(--success);background:var(--success-light)}
.upload-zone.drag-over{border-color:var(--primary);background:var(--accent-light);transform:scale(1.01)}
.final-stamp{display:inline-block;border:4px solid;border-radius:var(--radius);padding:12px 32px;font-size:22px;font-weight:800;letter-spacing:2px;text-transform:uppercase;margin:24px 0}
.final-stamp.pass{color:var(--success);border-color:var(--success)}
.final-stamp.fail{color:var(--danger);border-color:var(--danger)}
.modal-overlay{position:fixed;inset:0;background:rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;z-index:1000;padding:20px}
.modal{background:#fff;border-radius:var(--radius-lg);padding:32px;max-width:580px;width:100%;box-shadow:0 8px 40px rgba(0,0,0,.2)}
.modal-title{font-size:18px;font-weight:700;color:var(--primary);margin-bottom:20px}
.modal-actions{display:flex;gap:12px;justify-content:flex-end;margin-top:20px}
@media(max-width:768px){.sidebar{display:none}.main{padding:20px 16px}.stats{grid-template-columns:1fr 1fr}
  /* Il candidato, a differenza dei pannelli admin, deve poter accedere al
     percorso esame e a "Verifica Sistema" anche da mobile: niente sidebar
     nascosta, diventa una barra orizzontale scorrevole in alto. */
  #view-candidato .app-wrap{flex-direction:column}
  #view-candidato .sidebar{display:flex;flex-direction:row;width:100%;overflow-x:auto;align-items:center}
  #view-candidato .sb-logo{border-bottom:none;border-right:1px solid var(--sb-border);flex-shrink:0}
  #view-candidato .sb-nav{display:flex;flex-direction:row;padding:8px;flex-shrink:0}
  #view-candidato .nav-item{white-space:nowrap;border-radius:10px}
  #view-candidato .nav-item.active{box-shadow:0 4px 14px rgba(14,51,49,.24)}
  #view-candidato .app-topbar{padding:8px 16px;gap:10px}
}
/* ---- CALENDARIO ---- */
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:4px}
.cal-head{text-align:center;font-size:12px;font-weight:700;color:#6b7280;padding:6px 2px;text-transform:uppercase;letter-spacing:.5px}
.cal-cell{min-height:80px;background:#f9fafb;border-radius:6px;padding:6px 4px;border:1px solid #e5e7eb;position:relative;cursor:default}
.cal-cell.cal-empty{background:transparent;border-color:transparent}
.cal-cell.cal-today{background:var(--accent-light);border-color:#a9c9c2}
.cal-day-num{font-size:12px;font-weight:700;color:#374151;margin-bottom:4px}
.cal-today .cal-day-num{color:var(--primary);background:var(--primary);color:#fff;display:inline-block;width:22px;height:22px;border-radius:50%;text-align:center;line-height:22px}
.cal-evt{font-size:11px;padding:2px 5px;border-radius:4px;margin-bottom:2px;cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;font-weight:600;transition:opacity .15s}
.cal-evt:hover{opacity:.75}
.cal-dot-active{background:var(--accent-light);color:var(--primary)}
.cal-dot-pass{background:#d1fae5;color:#065f46}
.cal-dot-fail{background:#fee2e2;color:#991b1b}
/* ---- Widget dashboard ODV (statistiche, sessioni odierne, andamento
   mensile, esami per fase, esito complessivo) ---- */
.dash-grid{display:grid;grid-template-columns:1fr 360px;gap:20px;align-items:start}
@media(max-width:1100px){.dash-grid{grid-template-columns:1fr}}
.dash-flat-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:16px;margin-bottom:20px}
.dash-flat-stat{background:#fff;border:1px solid var(--gray-100);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:18px}
.dash-flat-stat-top{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:14px}
.dash-flat-stat-icon{width:32px;height:32px;border-radius:9px;display:flex;align-items:center;justify-content:center;font-size:15px}
.dash-flat-stat-val{font-size:28px;font-weight:800;color:var(--gray-800)}
.dash-today-card{background:var(--primary);color:#fff;border-radius:var(--radius-lg);padding:16px 18px;margin-bottom:10px}
.dash-today-card .dt-name{font-weight:700;font-size:14.5px;margin-bottom:4px}
.dash-today-card .dt-meta{font-size:12px;opacity:.85}
.dash-tabbar{display:flex;gap:6px;margin-bottom:14px;flex-wrap:wrap}
.dash-tab-btn{border:none;background:var(--gray-100);color:var(--gray-600);font-family:var(--font);font-size:12.5px;font-weight:600;padding:7px 14px;border-radius:999px;cursor:pointer}
.dash-tab-btn.active{background:var(--primary);color:#fff}
.dash-donut{width:110px;height:110px;border-radius:50%;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.dash-donut-hole{width:70px;height:70px;border-radius:50%;background:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center}
.dash-donut-hole .dh-n{font-size:18px;font-weight:800;color:var(--gray-800)}
.dash-donut-hole .dh-l{font-size:9px;color:var(--gray-400);text-transform:uppercase;letter-spacing:.4px}
.dash-legend-dot{width:9px;height:9px;border-radius:50%;display:inline-block;margin-right:6px}
.dash-mini-pair{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin-bottom:20px}
.dash-mini-card{background:#fff;border:1px solid var(--gray-100);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:16px}
.dash-mini-card .dm-label{font-size:12px;color:var(--gray-600);margin-bottom:6px}
.dash-mini-card .dm-val{font-size:22px;font-weight:800}
/* ---- Widget "Gestione esami" (ODV) e "Risultati e Analisi" (esaminatore) ---- */
.dash-2col{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin-bottom:20px}
@media(max-width:900px){.dash-2col{grid-template-columns:1fr}}
.seg-bar{display:flex;height:14px;border-radius:999px;overflow:hidden;background:var(--gray-100);margin:10px 0}
.seg-bar-legend{display:flex;gap:16px;flex-wrap:wrap;font-size:12.5px;color:var(--gray-600)}
.heat-grid{display:grid;grid-template-columns:auto repeat(4,1fr);gap:6px;align-items:center;font-size:12.5px}
.heat-cell{height:26px;border-radius:6px;display:flex;align-items:center;justify-content:center;font-size:11.5px;font-weight:700;color:#fff}
.heat-legend{display:flex;gap:14px;flex-wrap:wrap;font-size:11.5px;color:var(--gray-600);margin-top:10px}
.priority-badge{display:inline-block;padding:3px 10px;border-radius:999px;font-size:11.5px;font-weight:700}
.priority-urgente{background:var(--danger-light);color:var(--danger)}
.priority-alta{background:var(--warning-light);color:var(--warning)}
.priority-media{background:var(--gray-100);color:var(--gray-600)}
