/* Talenta — stile (evoluzione Design V3: stessa palette, layout da app) */
:root{
  --bg:#f4f6f9; --card:#fff; --fg:#1c2733; --muted:#5c6b7a; --line:#e3e8ee;
  --ok:#1a7f4b; --okbg:#e5f5ec; --warn:#8a6d00; --warnbg:#fdf3d0;
  --err:#b3261e; --errbg:#fbe9e7; --accent:#0b57d0; --accent2:#083b8f;
  --chip:#eef2f7; --ombra:0 1px 2px rgba(16,24,40,.05),0 4px 16px rgba(16,24,40,.06);
}
@media(prefers-color-scheme:dark){:root{
  --bg:#14181d; --card:#1d232b; --fg:#e7edf3; --muted:#94a3b3; --line:#2b333d;
  --ok:#4cc38a; --okbg:#153023; --warn:#e5c454; --warnbg:#332b10;
  --err:#f2857c; --errbg:#3a1f1c; --accent:#7cacf8; --accent2:#a9c8fb;
  --chip:#252d37; --ombra:0 1px 2px rgba(0,0,0,.4),0 6px 20px rgba(0,0,0,.35);
}}
*{box-sizing:border-box;margin:0;padding:0}
html,body{height:100%}
/* app installata sul telefono: anche pagina e corpo prendono l'altezza vera (--app-h, vedi
   altezzaApp): col solo #app più alto, il corpo (overflow-x:hidden → scorre da sé) lo tagliava */
html,body{height:var(--app-h,100%)}
body{font:15px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;
  background:var(--bg);color:var(--fg)}
button{font:inherit;cursor:pointer}
a{color:var(--accent)}
.nascosto{display:none!important}

/* ---------- login ---------- */
#login{min-height:100%;display:flex;align-items:center;justify-content:center;padding:20px}
.login-card{background:var(--card);border:1px solid var(--line);border-radius:16px;
  box-shadow:var(--ombra);padding:34px 30px;width:min(380px,100%)}
.brand{display:flex;align-items:center;gap:10px;margin-bottom:6px}
.brand .logo{width:38px;height:38px;border-radius:10px;background:linear-gradient(135deg,var(--accent),var(--accent2));
  color:#fff;display:flex;align-items:center;justify-content:center;font-weight:800;font-size:19px}
.brand b{font-size:19px;letter-spacing:.02em}
.login-card .sotto{color:var(--muted);font-size:13px;margin-bottom:22px}
.login-card label{display:block;font-size:12.5px;font-weight:600;color:var(--muted);
  margin:12px 0 4px;text-transform:uppercase;letter-spacing:.05em}
.login-card input{width:100%;padding:10px 12px;border:1px solid var(--line);border-radius:9px;
  background:var(--bg);color:var(--fg);font:inherit}
.login-card input:focus{outline:2px solid var(--accent);outline-offset:-1px;border-color:transparent}
.login-card button{width:100%;margin-top:20px;padding:11px;border:0;border-radius:9px;
  background:var(--accent);color:#fff;font-weight:700}
.login-err{color:var(--err);font-size:13px;margin-top:10px;min-height:18px}
/* secondo passo (codice via email, v3) */
.login-info{background:var(--okbg);color:var(--ok);border-radius:9px;padding:9px 12px;font-size:13px;margin-top:14px}
.login-check{display:flex!important;align-items:center;gap:8px;text-transform:none!important;letter-spacing:0!important;
  font-weight:500!important;font-size:13px!important;margin-top:12px!important}
.login-check input{width:auto!important}
.login-card.login-passo2 label[for=l-utente],.login-card.login-passo2 label[for=l-password],
.login-card.login-passo2 #l-utente,.login-card.login-passo2 #l-password{display:none}
.login-secondario{background:none!important;color:var(--muted)!important;border:1px solid var(--line)!important;margin-top:8px!important}

/* ---------- shell ---------- */
/* safe-area iPhone (2026-08-10): bordi sopra/sotto per notch e home indicator */
#app{display:flex;flex-direction:column;height:100vh;height:100dvh}
/* webapp installata sull'iPhone (icona sulla schermata Home, barra di stato trasparente): iOS
   dà a 100dvh un'altezza più corta dello schermo e in fondo restava ~1 cm vuoto (Matteo dal
   telefono, 24/09/2026). --app-h lo scrive altezzaApp() in app.js: l'altezza vera dello schermo,
   solo in quel caso; altrove la variabile non esiste e vale 100dvh. */
#app{height:var(--app-h,100dvh)}
/* Intestazione su UNA riga (Matteo, 2026-08-23: su iPad, con tante schede, la barra
   andava a capo e rubava spazio di lavoro). Le schede scorrono di lato dentro la loro
   striscia invece di andare a capo — la tab attiva si porta in vista da sola
   (naviga() in app.js); brand, menu contesti e utente non si restringono. Solo sul
   telefono (≤600px) la striscia resta sulla seconda riga: lì una riga non ci sta. */
.topbar{display:flex;align-items:center;gap:14px;background:var(--card);
  border-bottom:1px solid var(--line);padding:10px 18px;flex-wrap:nowrap;
  padding-top:calc(10px + env(safe-area-inset-top))}
.topbar .brand,.topbar .btn-drawer,.topbar .utente-chip{flex:none}
.topbar .brand .logo{width:30px;height:30px;font-size:15px;border-radius:8px}
.topbar .brand b{font-size:16px}
.topbar .brand span{color:var(--muted);font-size:12.5px;margin-left:6px}
nav{display:flex;gap:4px;margin-left:8px;flex:1 1 auto;min-width:0;overflow-x:auto;flex-wrap:nowrap;
  scrollbar-width:none;-webkit-overflow-scrolling:touch}
nav::-webkit-scrollbar{display:none}
nav button{border:0;background:none;color:var(--muted);font-weight:600;font-size:14px;
  padding:7px 13px;border-radius:8px;flex:none;white-space:nowrap}
nav button.attiva{background:var(--chip);color:var(--fg)}
nav button:hover{color:var(--fg)}
.topbar .spazio{flex:0 0 0}   /* lo spazio lo prende la striscia delle schede; sul telefono torna flex:1 */
/* ☰ del drawer (v3): quadrato discreto a sinistra del brand */
.btn-drawer{width:34px;height:34px;border:1px solid var(--line);background:none;color:var(--muted);
  border-radius:8px;font-size:17px;line-height:1;display:inline-flex;align-items:center;justify-content:center;
  transition:background .15s,color .15s}
.btn-drawer:hover,.btn-drawer[aria-expanded=true]{background:var(--chip);color:var(--fg)}
.utente-chip{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--muted)}
.utente-chip .pallino{width:26px;height:26px;border-radius:50%;background:var(--chip);
  display:flex;align-items:center;justify-content:center;font-weight:700;color:var(--fg);font-size:12px}
.utente-chip button{border:1px solid var(--line);background:none;color:var(--muted);
  border-radius:7px;padding:4px 10px;font-size:12.5px}
/* Bottone ↻ (2026-08-19): quadrato subito a destra del logo (Matteo, 24/09/2026), gira mentre
   ricarica — il simbolo, non il bottone col suo riquadro */
#btn-refresh{flex:none;border:1px solid var(--line);background:none;color:var(--muted);border-radius:7px;
  width:34px;height:34px;font-size:15px;line-height:1;display:inline-flex;align-items:center;justify-content:center;cursor:pointer}
#btn-refresh:hover{background:var(--chip);color:var(--fg)}
#btn-refresh:disabled{opacity:.6}
#btn-refresh .ri{display:inline-block}
#btn-refresh.gira .ri{animation:gira-refresh .8s linear infinite}
@keyframes gira-refresh{to{transform:rotate(360deg)}}

.corpo{flex:1;display:flex;min-height:0}
main{flex:1;overflow-y:auto;padding:22px 26px;
  padding-bottom:calc(22px + env(safe-area-inset-bottom))}
main h1{font-size:20px;margin-bottom:2px}
main .sub{color:var(--muted);font-size:13px;margin-bottom:18px}

/* ---------- drawer dei contesti (Talenta v3, 23/09/2026) ----------
   Richiesta di Matteo: «un menu a scomparsa a sinistra per muovermi nei contesti: contesto
   principale, tipo Palladio, e possibilità di espanderlo nel menù e entrare nella sezione
   corretta». Lo disegna disegnaDrawer() in app.js (Oggi · un gruppo per contesto con le sue
   viste · Esci). Tre taglie: Mac = colonna in flusso prima di #main, aperta 236px o compressa
   a sole icone 56px (body.drawer-compresso, ☰ in topbar, scelta in localStorage); iPad =
   a scomparsa da sinistra con velo (body.drawer-aperto, z 27 sotto medagliere 44 e toast 60,
   sopra la chat sovrapposta 25); iPhone = stesso pannello a tutta altezza, aperto da «⋯ altro».
   Stato attivo con le variabili del tema; buio da prefers-color-scheme come il resto. */
#drawer{display:flex;flex-direction:column;flex:none;width:236px;min-height:0;background:var(--card);
  border-right:1px solid var(--line);overflow-y:auto;overflow-x:hidden;scrollbar-width:thin;
  transition:width .2s ease}
.dr-testa{display:none;align-items:center;justify-content:space-between;padding:12px 14px 6px 16px;flex:none}
.dr-brand{font-weight:800;font-size:16px;letter-spacing:.02em}
.dr-x{border:0;background:none;color:var(--muted);width:34px;height:34px;border-radius:9px;font-size:16px;
  line-height:1;display:inline-flex;align-items:center;justify-content:center}
.dr-x:hover{background:var(--chip);color:var(--fg)}
.dr-lista{flex:1;display:flex;flex-direction:column;gap:2px;padding:10px 8px}
.dr-sez{font-size:10.5px;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);font-weight:700;
  padding:10px 12px 4px;white-space:nowrap;overflow:hidden}
.dr-voce{display:flex;align-items:center;gap:10px;width:100%;min-height:40px;border:1px solid transparent;
  background:none;color:var(--fg);border-radius:10px;padding:7px 10px;font-size:14px;font-weight:600;
  text-align:left;white-space:nowrap;overflow:hidden;cursor:pointer;
  transition:background .15s,border-color .15s,color .15s;-webkit-tap-highlight-color:transparent}
.dr-voce .dr-ico{font-size:18px;width:24px;text-align:center;flex:none;line-height:1}
.dr-voce .dr-nome{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis}
.dr-voce:hover{background:var(--chip)}
.dr-voce.attiva{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--card));color:var(--accent)}
.dr-ctx{display:flex;align-items:center;gap:2px}
.dr-ctx .dr-voce{flex:1}
.dr-chev{border:0;background:none;color:var(--muted);width:30px;height:34px;border-radius:8px;flex:none;
  font-size:18px;line-height:1;display:inline-flex;align-items:center;justify-content:center;
  transition:transform .2s ease,background .15s,color .15s}
.dr-chev:hover{background:var(--chip);color:var(--fg)}
.dr-chev[aria-expanded=true]{transform:rotate(90deg)}
.dr-viste{display:none;flex-direction:column;gap:1px;padding:2px 0 6px 14px}
.dr-gruppo.espanso .dr-viste{display:flex}
.dr-vista{min-height:34px;padding:5px 10px;font-size:13.5px;font-weight:500;color:var(--muted)}
.dr-vista .dr-ico{font-size:15px;width:22px}
.dr-vista:hover{color:var(--fg)}
.dr-piede{flex:none;padding:8px;border-top:1px solid var(--line)}
.dr-esci{color:var(--muted)}
/* in Home (Oggi) nessun contesto è acceso: solo la voce Oggi */
/* (24/09/2026) solo «Oggi»: prima la regola prendeva anche Smistamento e Utenti, che hanno la
   stessa classe, e in Home tutti e tre restavano contornati come selezionati */
body.in-home #drawer .dr-voce.attiva:not([data-home]){border-color:transparent;background:none;color:var(--fg)}
body.in-home #drawer .dr-vista.attiva{color:var(--muted)}
body.in-home #drawer .dr-voce[data-home]{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--card));color:var(--accent)}
.drawer-velo{display:none}
/* Mac: compresso a sole icone (il ☰ alterna, la scelta resta) */
@media(min-width:1181px){
  body.drawer-compresso #drawer{width:56px}
  body.drawer-compresso .dr-nome,body.drawer-compresso .dr-chev,body.drawer-compresso .dr-viste,
  body.drawer-compresso .dr-sez{display:none}
  body.drawer-compresso .dr-lista{padding:10px 6px}
  body.drawer-compresso .dr-voce{justify-content:center;padding:7px 0;gap:0}
  body.drawer-compresso .dr-piede{padding:8px 6px}
  /* drawer aperto + chat aperta (400px) in una finestra stretta: i KPI si stringono e il
     numero resta su una riga invece di mandare l'euro a capo (era la trappola delle 759-762) */
  body:not(.drawer-compresso) .corpo:has(#chat.aperta) .kpi{grid-template-columns:repeat(auto-fill,minmax(140px,1fr))}
  body:not(.drawer-compresso) .corpo:has(#chat.aperta) .kpi b{font-size:22px;white-space:nowrap}
}
/* iPad e iPhone: a scomparsa da sinistra, velo dietro, Esc e velo chiudono */
@media(max-width:1180px){
  #drawer{position:fixed;top:0;left:0;bottom:0;height:var(--app-h,100dvh);width:min(300px,86vw);z-index:27;
    transform:translateX(-105%);transition:transform .22s ease,box-shadow .22s ease;
    padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom)}
  /* l'ombra solo ad aperto: da chiuso sporgeva sul bordo sinistro della pagina (24/09/2026) */
  body.drawer-aperto #drawer{transform:none;box-shadow:12px 0 40px rgba(16,24,40,.28)}
  .dr-testa{display:flex}
  .drawer-velo{display:block;position:fixed;inset:0;z-index:25;background:rgba(16,24,40,.32);
    opacity:0;pointer-events:none;transition:opacity .2s;backdrop-filter:blur(1px);-webkit-backdrop-filter:blur(1px)}
  body.drawer-aperto .drawer-velo{opacity:1;pointer-events:auto}
}
@media(max-width:600px){
  #drawer{width:min(320px,88vw)}
  .dr-voce{min-height:44px;font-size:15px}
  .dr-vista{min-height:40px;font-size:14px}
}

/* ---------- componenti ---------- */
.kpi{display:grid;grid-template-columns:repeat(auto-fill,minmax(155px,1fr));gap:12px;margin:14px 0 20px}
.kpi .card{padding:14px 16px;min-width:0;overflow:hidden}
/* i testi lunghi (paniere, nomi di strategie) vanno a capo e non escono dal riquadro (Matteo, 24/09/2026) */
.kpi b{font-size:26px;display:block;line-height:1.2;overflow-wrap:anywhere;word-break:break-word}
.kpi b.kpi-testo{font-size:17px;line-height:1.3}
.kpi span{overflow-wrap:anywhere}
.kpi span{color:var(--muted);font-size:12.5px}
.card{background:var(--card);border:1px solid var(--line);border-radius:12px;
  box-shadow:var(--ombra);padding:16px;min-width:0}
/* EQUILIBRIO DEI RIQUADRI (regola di Matteo, 24/09/2026): «che si legga ma che non trasbordi,
   massima lettura, niente puntini». Dentro una card niente può uscire: i figli possono
   restringersi (min-width:0) e ogni testo va a capo se serve; i numeri e i titoli in
   grassetto prima si stringono un po' (adattaTestiCard in app.js, fino a 14px) e solo
   oltre vanno a capo. */
.card>*{min-width:0}
.card b,.card span,.card i,.card p,.card td,.card th,.card li,.card small,.card h2,.card h3{overflow-wrap:anywhere}
.card table{table-layout:auto;max-width:100%}
.card img,.card svg{max-width:100%}
.filtri{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin:4px 0 14px}
.filtri select,.filtri input[type=search]{padding:7px 10px;border:1px solid var(--line);
  border-radius:8px;background:var(--card);color:var(--fg);font:inherit;font-size:13.5px}
/* Vista Operazioni: macro-voci e conteggi per stato, cliccabili (filtro) — discreti */
.macro-ops{display:flex;gap:8px;flex-wrap:wrap;margin:10px 0 8px}
.macro-ops .macro{flex:1;min-width:120px;display:inline-flex;align-items:baseline;
  justify-content:center;gap:7px;border:1px solid var(--line);background:var(--card);
  color:var(--muted);border-radius:10px;padding:7px 12px;font:inherit;font-size:12.5px;
  font-weight:600;cursor:pointer}
.macro-ops .macro b{font-size:17px;color:var(--fg)}
.macro-ops .macro:hover{border-color:var(--accent)}
.macro-ops .macro.attiva{border-color:var(--accent);color:var(--fg);
  background:color-mix(in srgb,var(--accent) 8%,var(--card))}
.conta-stati{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 4px}
.conta-stati .cs{border:1px solid transparent;cursor:pointer;font:inherit;font-size:11.5px;
  font-weight:600;border-radius:20px;padding:3px 10px}
.conta-stati .cs b{font-weight:700}
.conta-stati .cs:hover{border-color:var(--accent)}
.conta-stati .cs.attiva{border-color:var(--accent);
  box-shadow:0 0 0 1px var(--accent) inset}
.chips{display:inline-flex;background:var(--chip);border-radius:9px;padding:3px;gap:2px}
.chips button{border:0;background:none;color:var(--muted);font-size:13px;font-weight:600;
  padding:5px 12px;border-radius:7px}
.chips button.attiva{background:var(--card);color:var(--fg);box-shadow:var(--ombra)}
.wrap{overflow-x:auto;background:var(--card);border:1px solid var(--line);
  border-radius:12px;box-shadow:var(--ombra)}
table{width:100%;border-collapse:collapse;font-size:13.5px}
th,td{text-align:left;padding:9px 12px;border-bottom:1px solid var(--line);vertical-align:middle}
th{font-size:11.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);
  position:sticky;top:0;background:var(--card)}
tr:last-child td{border-bottom:none}
tbody tr:hover td{background:color-mix(in srgb,var(--chip) 55%,transparent)}
.badge{display:inline-block;font-size:11.5px;font-weight:600;border-radius:20px;padding:2px 10px}
.b-ok{background:var(--okbg);color:var(--ok)} .b-warn{background:var(--warnbg);color:var(--warn)}
.b-err{background:var(--errbg);color:var(--err)} .b-info{background:var(--chip);color:var(--muted)}
.sem{display:inline-block;width:12px;height:12px;border-radius:50%;vertical-align:-1px}
.sem-Verde{background:var(--ok)} .sem-Giallo{background:var(--warn)} .sem-Rosso{background:var(--err)}
.btn{border:1px solid var(--line);background:var(--card);color:var(--fg);border-radius:8px;
  padding:6px 12px;font-size:13px;font-weight:600;text-decoration:none;display:inline-flex;
  align-items:center;gap:6px}
.btn:hover{border-color:var(--accent)}
.btn.primario{background:var(--accent);border-color:var(--accent);color:#fff}
.btn.disabilitato{opacity:.45;pointer-events:none}
.vuoto{color:var(--muted);text-align:center;padding:30px}
.avviso{background:var(--warnbg);color:var(--warn);border-radius:10px;padding:10px 14px;
  font-size:13px;margin-bottom:14px;position:relative}
/* avvisi chiudibili (2026-08-10): la ✕ in alto a destra — solo sugli avvisi
   informativi (avvisoHTML); errori e banner di stato non ce l'hanno */
.avviso .avviso-x{position:absolute;right:6px;top:50%;transform:translateY(-50%);
  border:0;background:none;color:inherit;cursor:pointer;font-size:13px;
  padding:4px 8px;border-radius:6px;opacity:.65}
.avviso .avviso-x:hover{opacity:1;background:rgba(0,0,0,.07)}
.avviso[data-avviso]{padding-right:34px}

/* ---------- scheda operazione ---------- */
.scheda-testa{display:flex;align-items:center;gap:14px;flex-wrap:wrap;margin-bottom:16px}
.scheda-testa h1{font-size:24px}
.torna{border:1px solid var(--line);background:var(--card);border-radius:8px;padding:6px 12px;
  font-size:13px;color:var(--muted)}
.prop-griglia{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:12px}
.prop{background:var(--card);border:1px solid var(--line);border-radius:12px;padding:12px 14px}
.prop .nome{font-size:11.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);margin-bottom:3px}
.prop .valore{font-size:14.5px;font-weight:600;overflow-wrap:anywhere}
.azioni{display:flex;gap:10px;flex-wrap:wrap;margin:18px 0}
.azioni .btn{padding:10px 16px;font-size:14px}

/* ---------- corpo scheda (contenuto pagina Notion) ---------- */
#op-costi{margin-top:22px}
.op-corpo{margin-top:22px;max-width:840px;font-size:14px}
.op-corpo details.tendina,#op-costi details.tendina{background:var(--card);border:1px solid var(--line);
  border-radius:12px;box-shadow:var(--ombra);margin-bottom:12px}
.op-corpo summary,#op-costi summary{cursor:pointer;font-weight:700;font-size:14.5px;padding:12px 16px;
  list-style:none;display:flex;align-items:center;gap:9px}
.op-corpo summary::-webkit-details-marker,#op-costi summary::-webkit-details-marker{display:none}
.op-corpo summary::before,#op-costi summary::before{content:"▸";color:var(--muted);transition:transform .15s}
.op-corpo details[open]>summary::before,#op-costi details[open]>summary::before{transform:rotate(90deg)}
.op-corpo .tendina-corpo,#op-costi .tendina-corpo{padding:4px 20px 16px;border-top:1px solid var(--line)}
.op-corpo .tendina-corpo details.tendina,#op-costi .tendina-corpo details.tendina{box-shadow:none;margin-top:10px}
.op-corpo h3{font-size:16.5px;margin:14px 0 4px}
.op-corpo h4{font-size:15px;margin:12px 0 3px}
.op-corpo h5{font-size:12px;text-transform:uppercase;letter-spacing:.05em;
  color:var(--muted);margin:14px 0 3px}
.op-corpo p{margin:7px 0;overflow-wrap:anywhere}
.op-corpo ul,.op-corpo ol{margin:7px 0;padding-left:22px}
.op-corpo li{margin:3px 0}
.op-corpo blockquote{border-left:3px solid var(--line);padding-left:12px;
  color:var(--muted);margin:8px 0}
.op-corpo hr{border:0;border-top:1px solid var(--line);margin:14px 0}
.op-corpo .callout{background:var(--chip);border:1px solid var(--line);
  border-radius:12px;padding:12px 16px;margin:10px 0;font-weight:600}

/* ---------- Clio: cruscotto, agenda, todo ---------- */
h2.sezione{font-size:15px;margin:26px 0 10px}
h2.sezione .alb-ver{font-weight:400}
.alb-ver{color:var(--muted);font-size:11.5px;margin-right:8px}
.agenda-giorno{padding:6px 16px;max-width:720px;margin-bottom:6px}
.evento{display:flex;align-items:baseline;gap:12px;padding:9px 0;border-bottom:1px solid var(--line);flex-wrap:wrap}
.evento:last-child{border-bottom:none}
.evento-ora{font-size:12.5px;font-weight:700;color:var(--accent);min-width:92px}
.evento-luogo{color:var(--muted);font-size:12.5px}
.todo-imp{color:#eab308}
.todo-fatte{margin-top:8px}
.todo-fatte summary{cursor:pointer;color:var(--muted);font-size:12.5px}
/* ---------- home (solo multi-contesto: l'ingresso di Matteo) ---------- */
.brand.cliccabile{cursor:pointer}
body.in-home #chat,body.in-home #chat-toggle{display:none}
.home-hero{margin:18px 0 26px}
.home-hero h1{font-size:30px;margin-bottom:4px}
.home-data{color:var(--muted);font-size:14px}
.home-griglia{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));
  gap:18px;max-width:1100px}
/* composer delle chat a tutta pagina (Consulente, The Herbalist, Efesto) — nato con la
   chat di Luce in Home del 2026-08-08, che dalla v3 non c'è più */
.hl-invio{display:flex;align-items:flex-end;gap:8px}
.hl-invio textarea{flex:1;padding:11px 14px;border:1px solid var(--line);border-radius:10px;
  background:var(--bg);color:var(--fg);font:inherit;resize:none;max-height:120px}
.hl-invio textarea:focus{outline:2px solid var(--accent);outline-offset:-1px}
.hl-invio #cons-allega,.hl-invio #cons-mic{background:var(--bg);color:var(--muted);
  border:1px solid var(--line);border-radius:10px;padding:9px 11px;font-size:15px;cursor:pointer}
.hl-invio #cons-allega:hover,.hl-invio #cons-mic:hover{border-color:var(--accent);color:var(--accent)}
.hl-invio #cons-mic.rec{background:#d93025;color:#fff;border-color:#d93025;
  animation:pulsa 1.1s infinite}
.hl-invio button:disabled{opacity:.5;cursor:progress}
.hl-nota{color:var(--muted);font-size:12px;margin-top:8px}
.home-card{position:relative;background:var(--card);border:1px solid var(--line);
  border-radius:16px;padding:20px;cursor:pointer;overflow:hidden;
  transition:transform .15s,box-shadow .15s,border-color .15s}
.home-card::before{content:"";position:absolute;inset:0 0 auto 0;height:4px;
  background:linear-gradient(90deg,var(--hc1),var(--hc2))}
.home-card:hover{transform:translateY(-3px);box-shadow:0 10px 28px rgba(0,0,0,.18);
  border-color:var(--hc1)}
.hc-icona{width:52px;height:52px;border-radius:14px;display:flex;align-items:center;
  justify-content:center;font-size:26px;margin-bottom:12px;
  background:linear-gradient(135deg,var(--hc1),var(--hc2))}
.hc-testa{display:flex;align-items:baseline;gap:8px;margin-bottom:6px}
.hc-testa b{font-size:18px}
.hc-testa span{color:var(--muted);font-size:12.5px;text-transform:uppercase;letter-spacing:.05em}
.home-card p{color:var(--muted);font-size:13.5px;line-height:1.5;margin-bottom:14px;min-height:40px}
.hc-chips{display:flex;flex-wrap:wrap;gap:8px}
.hc-chips button{border:1px solid var(--line);background:var(--bg);color:var(--fg);
  border-radius:999px;padding:5px 13px;font-size:12.5px;font-weight:600;cursor:pointer}
.hc-chips button:hover{border-color:var(--hc1);color:var(--hc1)}
@media(max-width:1020px){.home-hero h1{font-size:24px}.home-griglia{grid-template-columns:1fr}}

/* ---------- dashboard Plutarco: P.Iva + Better Life (2026-08-08) ----------
   Colori serie VALIDATI (dataviz: banda L, CVD, contrasto): coppia light
   #0f9d58/#f29900 (con etichette dirette + tabella), dark #2fa46e/#b58e2b.
   Palette categorica a 4 (2026-08-19, per torte e linee multi-serie):
   VALIDATA col validatore dataviz, tutte le coppie PASS — light su bianco,
   dark su #1d232b. «Altro» nelle torte è neutro (residuo, non entità).
   --cat5 (2026-09-03, PRG-059): la quinta linea del Patrimonio è la sezione
   SOCIETÀ, e prende il grafite della sua scheda — così la linea e la card si
   riconoscono come la stessa cosa. */
:root{--serie1:#0f9d58;--serie2:#f29900;
  --cat1:#1a73e8;--cat2:#f29900;--cat3:#0f9d58;--cat4:#b02c8f;--cat5:#5f6368}
@media(prefers-color-scheme:dark){:root{--serie1:#2fa46e;--serie2:#b58e2b;
  --cat1:#5c94ec;--cat2:#b58e2b;--cat3:#2fa46e;--cat4:#c25daa;--cat5:#9aa0a6}}
.kpi .card.evidenza{border-color:var(--serie1);
  background:color-mix(in srgb,var(--serie1) 9%,var(--card))}
.kpi .card.evidenza b{color:var(--serie1)}
.kpi .card.attenzione{border-color:var(--serie2);
  background:color-mix(in srgb,var(--serie2) 10%,var(--card))}
.grafico{margin:6px 0 14px}
.graf-titolo{font-weight:700;font-size:14px;margin-bottom:12px}
.graf-nota{color:var(--muted);font-size:12px;margin-top:12px;border-top:1px solid var(--line);padding-top:10px}
.barre{display:flex;align-items:flex-end;gap:10px;height:170px;padding-top:6px}
.colonna{flex:1;max-width:64px;display:flex;flex-direction:column;align-items:center;
  justify-content:flex-end;height:100%;gap:4px;min-width:0}
.col-val{font-size:12.5px;font-weight:700}
.barra{width:100%;max-width:34px;background:var(--serie1);border-radius:4px 4px 0 0;
  transition:opacity .15s}
.colonna:hover .barra{opacity:.75}
.col-lab{font-size:11.5px;color:var(--muted);white-space:nowrap}
.col-chip{font-size:10.5px;min-height:18px;white-space:nowrap}
.due-colonne{display:grid;grid-template-columns:1fr 1fr;gap:14px;margin:6px 0 14px}
@media(max-width:1020px){.due-colonne{grid-template-columns:1fr}}
.fun-riga{display:flex;align-items:center;gap:10px;padding:5px 0}
.fun-nome{width:92px;font-size:12.5px;color:var(--muted);flex:none;line-height:1.2;overflow-wrap:anywhere}
.fun-track{flex:1;background:var(--chip);border-radius:5px;height:18px;overflow:hidden}
.fun-bar{height:100%;background:var(--serie1);border-radius:0 4px 4px 0}
.fun-val{width:86px;flex:none;font-size:12.5px;font-weight:700;text-align:right}
.fun-val i{color:var(--muted);font-weight:400;font-style:normal}
.fun-esiti{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.legenda{display:flex;gap:16px;font-size:12.5px;color:var(--muted);margin-bottom:10px}
.dot{display:inline-block;width:10px;height:10px;border-radius:3px;margin-right:5px;vertical-align:-1px}
.dot-pagati{background:var(--serie1)} .dot-dapagare{background:var(--serie2)}
.pg-riga{display:flex;align-items:center;gap:10px;padding:4px 0}
.pg-track{flex:1;display:flex;gap:2px;height:20px}   /* 2px: lo spacer tra segmenti */
.pg-seg{height:100%;border-radius:4px;font-size:11.5px;font-weight:700;color:#fff;
  display:flex;align-items:center;justify-content:center;min-width:18px}
.pg-pagati{background:var(--serie1)} .pg-dapagare{background:var(--serie2)}
/* dettaglio piccolo dentro un riquadro KPI (es. composizione premi fine anno) */
.kpi .kpi-det{display:block;margin-top:3px;font-style:normal;font-size:11px;opacity:.85}
/* blocco «Statistiche attuali da confermare» (Matteo, 2026-08-11) */
.sa-riga{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-bottom:12px}
.sa-riga label{font-size:13.5px;font-weight:600}
.sa-riga input{width:110px;padding:8px 11px;border:1px solid var(--line);border-radius:9px;
  background:var(--card);color:var(--fg);font:inherit}
.sa-riga input:disabled{color:var(--muted);background:var(--bg)}
.sa-riga button{padding:8px 14px;border:1px solid var(--line);border-radius:9px;
  background:var(--accent);color:#fff;font-size:13.5px}
.sa-fun{display:flex;flex-wrap:wrap;gap:6px 18px;font-size:12.5px;color:var(--muted)}
.sa-fun b{color:var(--fg);font-size:13.5px}
.sa-fun i{font-style:normal}
.riga-premio{display:flex;align-items:center;gap:10px;padding:7px 0;
  border-bottom:1px solid var(--line);font-size:13.5px;flex-wrap:wrap}
.riga-premio:last-child{border-bottom:none}
.riga-premio b.pos{margin-left:auto;color:var(--ok)}
.riga-premio b.neg{margin-left:auto;color:var(--err)}
/* trattenute a monte: NON sono penalita' (regola di Matteo 2026-08-11), quindi
   niente rosso — colore neutro, restano allineate a destra come le altre */
.riga-premio b.neu{margin-left:auto;color:var(--muted)}
.riga-premio .badge{margin-left:auto}
.riga-evidenza td{background:color-mix(in srgb,var(--serie1) 7%,transparent)}

/* ---------- Clienti P.Iva (2026-08-19): card cliente in rilievo come il
   NETTO TOTALE, col bottone Apri; tendina anno nel titolo Fatture ---------- */
.clienti-griglia{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));
  gap:12px;margin:6px 0 20px;max-width:780px}
.clienti-griglia .card b{font-size:26px;display:block;line-height:1.2}
.clienti-griglia .card span{color:var(--muted);font-size:12.5px}
.clienti-griglia .card.evidenza{border-color:var(--serie1);
  background:color-mix(in srgb,var(--serie1) 9%,var(--card))}
.clienti-griglia .card.evidenza b{color:var(--serie1)}
.clienti-griglia .kpi-det{display:block;margin-top:3px;font-style:normal;font-size:11px;opacity:.85}
.cliente-apri{margin-top:10px}
h2.sezione select{margin-left:8px;padding:4px 8px;border:1px solid var(--line);
  border-radius:8px;background:var(--card);color:var(--fg);font:inherit;
  font-size:13px;font-weight:600;cursor:pointer}

/* ---------- Cash Flow & Patrimonio (2026-08-19): grafici SVG, Kiyosaki,
   conti cliccabili, chat Consulente ---------- */
.grafico-svg{width:100%;height:auto;display:block}
.gr-linea{stroke:var(--line);stroke-width:1}
.gr-testo{fill:var(--muted);font-size:11px}
.gr-etich{fill:var(--fg);font-size:11.5px;font-weight:700}
.bd-clic{cursor:pointer}
.bd-clic:hover rect{opacity:.75}
.riga-clic{cursor:pointer}
.riga-clic .btn{pointer-events:none}
.torta-flex{display:flex;gap:18px;align-items:center;flex-wrap:wrap}
.torta-svg{width:190px;max-width:45%;flex:none;height:auto}
.torta-tot{fill:var(--fg);font-size:19px;font-weight:800}
.torta-legenda{flex:1;min-width:200px}
.torta-legenda .dot{flex:none}
.torta-nome{width:auto;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
/* blocco Libertà finanziaria (Kiyosaki) */
.kiyo{border-top:4px solid var(--serie1)}
.kiyo-griglia{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px}
.kiyo-cella b{font-size:24px;display:block;line-height:1.2}
.kiyo-cella span{color:var(--muted);font-size:12.5px;display:block}
.kiyo-cella .kpi-det{display:block;margin-top:3px;font-style:normal;font-size:11px;opacity:.85}
.kiyo-input{margin:8px 0 0}
.kiyo-input input{width:130px}
.kiyo-track{display:block;background:var(--chip);border-radius:6px;height:12px;
  margin-top:8px;overflow:hidden}
.kiyo-bar{display:block;height:100%;background:var(--serie1);border-radius:6px;
  transition:width .3s}
/* conti a blocchi cliccabili */
.conti-griglia{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));
  gap:12px;margin:6px 0 14px}
.conto-card{cursor:pointer;transition:transform .15s,border-color .15s}
.conto-card:hover{transform:translateY(-2px);border-color:var(--accent)}
.conto-card b{font-size:20px;display:block}
.conto-card b .conto-val{font-style:normal;font-size:12px;color:var(--muted);font-weight:600}
.conto-card>span{color:var(--muted);font-size:13px;display:block;margin:2px 0 10px}
.conto-piede{display:flex;align-items:center;gap:8px;justify-content:space-between}
.conto-piede .btn{pointer-events:none}
/* chat Consulente Patrimonio: a tutto schermo dentro #main */
body.in-consulente #chat,body.in-consulente #chat-toggle{display:none!important}
/* chat laterale via del tutto (2026-08-22): Manuel ed Elisa su Palladio «fino a nuovo
   ordine», e sempre in The Herbalist (il consulto si fa a tutta pagina). Diverso da
   .chat-chiusa, dove il pannello e' chiuso ma il bottone 💬 resta a riaprirlo. */
body.senza-chat #chat,body.senza-chat #chat-toggle{display:none!important}
.cons-shell{display:flex;flex-direction:column;height:100%;max-width:900px;margin:0 auto}
.cons-msgs{flex:1;min-height:200px;background:var(--card);border:1px solid var(--line);
  border-radius:14px;box-shadow:var(--ombra);margin-bottom:12px}
#cons-pulisci{border:1px solid var(--line);background:var(--bg);color:var(--muted);
  border-radius:999px;padding:5px 10px;font-size:15px;cursor:pointer}
#cons-pulisci:hover{border-color:var(--accent);color:var(--accent)}
#cons-pulisci:disabled{opacity:.5;cursor:progress}
#cons-invia{border:0;background:var(--accent);color:#fff;border-radius:10px;
  padding:0 18px;height:41px;font-weight:700;font-size:15px;cursor:pointer}
#cons-invia:disabled{opacity:.5;cursor:progress}
@media(max-width:1020px){.torta-svg{max-width:100%}.cons-shell{height:auto}
  .cons-msgs{min-height:40vh}}

/* ---------- pagina Routine (2026-08-10) ---------- */
.rout-card{padding:6px 18px;max-width:840px}
.rout-riga{display:flex;gap:14px;padding:13px 0;border-bottom:1px solid var(--line)}
.rout-riga:last-child{border-bottom:none}
.rout-icona{font-size:24px;line-height:1.3;flex:none}
.rout-corpo{min-width:0}
.rout-testa{display:flex;align-items:baseline;gap:9px;flex-wrap:wrap}
.rout-testa b{font-size:14.5px}
.rout-quando{color:var(--muted);font-size:12.5px}
.rout-corpo p{color:var(--muted);font-size:13px;line-height:1.5;margin:3px 0 4px}
.rout-meta{font-size:12px;color:var(--muted);opacity:.85}

.log-righe{list-style:none;padding:0}
.log-righe li{padding:6px 0;border-bottom:1px solid var(--line);font-size:13px;color:var(--muted)}
.log-righe li:last-child{border-bottom:none}

/* ---------- chat ---------- */
#chat{width:360px;display:flex;flex-direction:column;border-left:1px solid var(--line);
  background:var(--card);min-height:0}
.chat-testa{display:flex;align-items:center;gap:8px;padding:12px 14px;border-bottom:1px solid var(--line)}
.chat-testa b{font-size:14px}
.chat-testa span{color:var(--muted);font-size:11.5px}
.chat-testa .spazio{flex:1}
.chat-testa button{border:1px solid var(--line);background:none;color:var(--muted);
  border-radius:7px;padding:3px 9px;font-size:12px;cursor:pointer}
.chat-testa button:hover{border-color:var(--accent);color:var(--accent)}
/* 🧹 Pulisci: stessa icona e stessa forma della chat di Luce (Matteo, 2026-08-10) */
#chat-nuova{border-radius:999px;padding:4px 9px;font-size:14px}
#chat-nuova:disabled{opacity:.5;cursor:progress}
.chat-msgs{flex:1;overflow-y:auto;padding:14px;display:flex;flex-direction:column;gap:10px}
.msg{max-width:88%;padding:9px 12px;border-radius:14px;font-size:13.5px;white-space:pre-wrap;
  overflow-wrap:anywhere}
.msg.mio{align-self:flex-end;background:var(--accent);color:#fff;border-bottom-right-radius:4px}
.msg.suo{align-self:flex-start;background:var(--chip);border-bottom-left-radius:4px}
.msg.errore{align-self:flex-start;background:var(--errbg);color:var(--err)}
.msg.attesa{align-self:flex-start;color:var(--muted);background:var(--chip);font-style:italic}
.msg.storico{opacity:.72}   /* scambi ripristinati dallo storico (2026-08-10) */
/* riga «nuova conversazione» (2026-08-11): dove il modello perde la memoria di
   quel che sta sopra — non è una bolla, è un taglio del filo */
.msg.filo{align-self:stretch;max-width:none;background:none;padding:10px 0 4px;
  color:var(--muted);font-size:11.5px;text-align:center;border-top:1px dashed var(--line);
  border-radius:0}
.chat-invio{display:flex;gap:8px;padding:12px;border-top:1px solid var(--line)}
.chat-invio textarea{flex:1;resize:none;border:1px solid var(--line);border-radius:10px;
  padding:9px 11px;font:inherit;font-size:13.5px;background:var(--bg);color:var(--fg);height:44px}
.chat-invio button{border:0;background:var(--accent);color:#fff;border-radius:10px;
  padding:0 16px;font-weight:700}
.chat-invio button:disabled{opacity:.5;cursor:progress}
#chat-allega,#chat-mic{background:transparent;color:var(--muted,#5c6b7a);font-size:17px;
  padding:6px 8px;border:1px solid var(--line);border-radius:10px;cursor:pointer}
#chat-mic.rec{background:#d93025;color:#fff;border-color:#d93025;animation:pulsa 1.1s infinite}
@keyframes pulsa{50%{opacity:.55}}
.chat-allegati{display:flex;flex-wrap:wrap;gap:6px;padding:8px 12px 0;border-top:1px solid var(--line)}
.chip-allegato{display:inline-flex;align-items:center;gap:6px;font-size:12px;
  background:var(--chip);border:1px solid var(--line);border-radius:999px;
  padding:3px 8px;max-width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.chip-allegato button{border:0;background:transparent;cursor:pointer;font-size:11px;
  color:var(--muted,#5c6b7a);padding:0 2px}
.chat-off{padding:14px 12px;border-top:1px solid var(--line);text-align:center;
  font-size:13px;color:var(--muted,#5c6b7a);font-style:italic}
#chat-toggle{display:none;position:fixed;right:18px;bottom:calc(18px + env(safe-area-inset-bottom));z-index:20;width:54px;height:54px;
  border-radius:50%;border:0;background:var(--accent);color:#fff;font-size:22px;box-shadow:var(--ombra)}
/* «Apri in sessione» (PRG-046, 2026-08-25): link dall'hero di ogni Panoramica alla
   sessione remota del contesto (URL da SYSTEM/remote/stato/<agente>.json — arriva
   solo a Matteo, quindi gli Utenti non lo vedono mai); e la riga sopra il campo di
   testo della chat che rimanda alla sessione per le richieste lunghe. */
a.apri-sessione{font-size:.55em;vertical-align:middle;text-decoration:none;white-space:nowrap}
/* bottone «Mappa del sistema» nell'hero della Home (Matteo, 2026-08-27) */
.hl-nota a{color:var(--accent);font-weight:600;text-decoration:none}
/* chat richiudibile (2026-08-08): la ✕ chiude, il 💬 flottante riapre */
body.chat-chiusa #chat{display:none!important}
body.chat-chiusa:not(.in-home) #chat-toggle{display:block}
/* trascinamento file: bordo evidenziato mentre trascini */
body.trascinando #chat{outline:2px dashed var(--accent);outline-offset:-6px}
body.trascinando.chat-chiusa main,body.trascinando #main{outline:2px dashed var(--accent);outline-offset:-6px}
/* in Home il bersaglio è il riquadro di Luce, non tutta la pagina */
body.trascinando.in-home #main{outline:0}

/* ---------- mobile ---------- */
@media(max-width:1020px){
  #chat{position:fixed;inset:auto 0 0 0;height:72vh;height:72dvh;width:100%;z-index:15;
    border-left:0;border-top:1px solid var(--line);border-radius:16px 16px 0 0;
    box-shadow:0 -8px 30px rgba(0,0,0,.25);transform:translateY(105%);transition:transform .25s;
    padding-bottom:env(safe-area-inset-bottom)}
  #chat.aperta{transform:none}
  #chat-toggle{display:block}
  main{padding:16px;padding-bottom:calc(16px + env(safe-area-inset-bottom))}
  /* campo di testo a tutta larghezza, bottoni sotto (Matteo, 2026-08-10) —
     vale per la chat di Luce in Home e per la chat dei contesti */
  .hl-invio,.chat-invio{flex-wrap:wrap}
  .hl-invio textarea,.chat-invio textarea{flex:1 1 100%;order:-1}
  #chat-invia{margin-left:auto}
  nav button{padding:7px 11px}
}
/* tablet e finestre medie (iPad verticale e orizzontale, MacBook con finestra stretta):
   intestazione compatta su una riga — sottotitolo del brand e nome utente nascosti,
   così la striscia delle schede ha spazio (2026-08-23) */
@media(min-width:601px) and (max-width:1180px){
  .topbar{gap:10px;padding-left:12px;padding-right:12px}
  .topbar .brand span,.utente-chip #u-nome{display:none}
}
/* telefono (lotto E della v3, richiesta di Matteo del 23/09/2026: «fruibilità Mac, iPad e
   iPhone perfetta»): UNA riga sola — ☰, brand, la giornata, ↻, Esci. La striscia delle
   schede in alto NON c'è più: le viste stanno nel drawer che apre il ☰ (dal 24/09/2026; prima
   una barra di icone in basso, tolta su richiesta di Matteo). Fino al
   22/09 la striscia stava su una seconda riga e le schede si tagliavano («nica», «conomico»). */
@media(max-width:600px){
  /* niente traboccamenti orizzontali: su iPhone un elemento più largo dello schermo allarga
     il viewport di layout e fa saltare TUTTE le regole del telefono (visto al collaudo con
     la select dei contesti larga quanto l'opzione più lunga) */
  html,body{overflow-x:hidden}
  /* spazi al minimo sul telefono (Matteo, 24/09/2026: «schermo ridotto, minimizzare gli spazi
     vuoti mantenendo la lettura»): 2px sopra oltre la fascia di stato, mai dentro */
  .topbar{flex-wrap:nowrap;gap:8px;padding:2px 12px 6px;padding-top:calc(2px + env(safe-area-inset-top))}
  main{padding-top:12px;padding-left:12px;padding-right:12px}
  .topbar .spazio{display:none}
  .topbar .brand{gap:8px}
  /* niente schede in alto; il ☰ a sinistra del logo apre il drawer (24/09/2026: la barra in
     basso con «⋯ altro» è stata tolta); il chip utente si porta a destra da solo */
  nav#nav{display:none}
  .topbar .utente-chip{margin-left:auto}
  .topbar .brand span,.utente-chip #u-nome,.utente-chip .pallino{display:none}
  .utente-chip{gap:6px}
  .utente-chip button{min-height:36px;padding:6px 9px}
}

/* ---------- smistamento file: descrizione contenuto + cestino (2026-08-19) ---------- */
.smist-desc{color:var(--muted);font-size:12.5px}
.smist-desc.attesa{font-style:italic;opacity:.8}
.smist-cestino{border:0;background:none;cursor:pointer;font-size:15px;padding:2px 6px;
  border-radius:7px;line-height:1}
.smist-cestino:hover{background:var(--errbg)}
.smist-cestino:disabled{opacity:.4;cursor:default}
.cest-svuota{margin-left:10px;font-size:12px;font-weight:600;padding:4px 10px;border:1px solid #e0a9a6;
  background:var(--errbg);color:#c5221f;border-radius:8px;cursor:pointer;vertical-align:middle}
.cest-svuota:hover{filter:brightness(.96)}
.cest-svuota:disabled{opacity:.4;cursor:default}

/* Premi maturati e non pagati (Matteo, 2026-08-20): stanno nel blocco
   "da pagare" perché sono la stessa cosa dei contratti non incassati —
   soldi raggiunti che l'azienda non ha ancora messo in un invito. */
.card.premi-non-pagati{border-color:var(--serie2)}

/* Salti rapidi fra le viste di Clio (Matteo, 2026-08-25): Agenda, Todo,
   Vista Cicli, Quadranti e Battle Plan si linkano a vicenda (clioSaltiHTML in app.js). */
.clio-salti{display:flex;gap:10px;flex-wrap:wrap;margin-top:14px}
.clio-salti.compatta{margin:0;gap:6px}
.clio-salti.compatta .btn{padding:4px 9px}

/* --- Conto Economico nella scheda operazione (2026-08-25) --- */
.sub-inline { font-size: .72em; font-weight: 400; color: var(--muted, #80868b); }

/* ---------- Dashboard Palladio (2026-08-26) ---------- */
.dash-kpi-griglia{display:grid;grid-template-columns:repeat(auto-fit,minmax(215px,1fr));
  gap:12px;margin:16px 0 4px}
.dash-kpi{display:flex;gap:12px;align-items:center;background:var(--card);
  border:1px solid var(--line);border-radius:14px;padding:14px 16px;box-shadow:var(--ombra)}
.dash-kpi-icona{font-size:22px;width:42px;height:42px;border-radius:11px;display:flex;
  align-items:center;justify-content:center;background:var(--bg);flex:none}
.dash-kpi.k-eff .dash-kpi-icona{background:var(--okbg)}
.dash-kpi.k-stima .dash-kpi-icona{background:color-mix(in srgb,var(--accent) 12%,var(--card))}
.dash-kpi-num{font-size:21px;font-weight:800;letter-spacing:-.01em;line-height:1.15}
.dash-kpi-nome{font-size:12.5px;font-weight:600;color:var(--muted)}
.dash-kpi-sotto{font-size:11.5px;color:var(--muted);margin-top:2px}
.dash-graf-griglia{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));
  gap:12px;margin-top:12px}
.dash-graf{padding:14px 16px}
.dash-graf-titolo{font-weight:700;font-size:14.5px}
.dash-graf-sotto{font-size:11.5px;color:var(--muted);margin:2px 0 10px}
.dash-svg{width:100%;height:auto;display:block}
.dash-barra{fill:var(--accent)}
.dash-barra:hover{fill:var(--accent2)}
.dash-griglia{stroke:var(--line);stroke-width:1;stroke-dasharray:3 4}
.dash-base{stroke:var(--line);stroke-width:1.5}
.dash-mese{fill:var(--muted);font-size:9.5px;text-anchor:middle}
.dash-vuoto{font-size:12px;color:var(--muted);text-align:center;padding:6px 0 2px;font-style:italic}
.dash-na{color:var(--muted);font-size:12px;font-style:italic}

/* Dashboard Conto Deposito (2026-08-29): card della scheda Patrimonio che si
   apre, colonne di importi allineate a destra, riga del totale e riga vuota. */
.card.clic{cursor:pointer;transition:border-color .15s}
.card.clic:hover{border-color:var(--acc,#0b57d0)}
td.num,th.num{text-align:right;white-space:nowrap}
tr.tot td{border-top:2px solid var(--bordo,#d7dbe0);font-weight:600}
td.vuoto-riga{color:var(--muted);text-align:center;padding:14px}

/* ---------- Ufficio Tecnico (2026-09-03, PRG-088) ----------
   Menù espandibili annidati: livello territoriale → tipologia → scheda. Poco
   invasivo per richiesta di Matteo: nessuna tabella, una riga per scheda, il
   dettaglio si apre solo se serve. Da telefono le righe vanno a capo da sole
   (summary in flex-wrap): non c'è niente che scorra di lato. */
.ut-pallino{display:inline-block;width:10px;height:10px;border-radius:50%;flex:none}
.ut-verde{background:var(--ok)} .ut-arancio{background:var(--warn)}
.ut-rosso{background:var(--err)} .ut-grigio{background:var(--muted)}
.dash-kpi.ut-k-verde .dash-kpi-icona{background:var(--okbg)}
.dash-kpi.ut-k-arancio .dash-kpi-icona{background:var(--warnbg)}
.dash-kpi.ut-k-rosso .dash-kpi-icona{background:var(--errbg)}

.ut-liv{background:var(--card);border:1px solid var(--line);border-radius:12px;
  box-shadow:var(--ombra);margin-bottom:10px}
.ut-liv>summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:10px;
  flex-wrap:wrap;padding:12px 16px;font-size:14.5px}
.ut-liv>summary::-webkit-details-marker{display:none}
.ut-liv>summary::before{content:"▸";color:var(--muted);transition:transform .15s;flex:none}
.ut-liv[open]>summary::before{transform:rotate(90deg)}
.ut-liv>summary:hover{background:color-mix(in srgb,var(--chip) 45%,transparent);border-radius:12px}
.ut-liv-sotto{color:var(--muted);font-size:12.5px}
.ut-liv-n{color:var(--muted);font-size:11.5px;background:var(--chip);border-radius:20px;
  padding:2px 9px;white-space:nowrap}
.ut-liv-sem{display:inline-flex;gap:10px;margin-left:auto}
.ut-mini-n{display:inline-flex;align-items:center;gap:4px;font-size:12px;
  font-weight:600;color:var(--muted)}
.ut-liv-corpo{padding:2px 14px 12px;border-top:1px solid var(--line)}
.ut-liv-vuoto>summary b,.ut-liv-vuoto>summary .ut-liv-sotto{color:var(--muted)}

.ut-tip{margin-top:10px}
.ut-tip>summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:9px;
  flex-wrap:wrap;font-size:12px;font-weight:700;text-transform:uppercase;
  letter-spacing:.05em;color:var(--muted);padding:8px 4px}
.ut-tip>summary::-webkit-details-marker{display:none}
.ut-tip>summary::before{content:"▸";transition:transform .15s;flex:none}
.ut-tip[open]>summary::before{transform:rotate(90deg)}
.ut-tip-corpo{border-left:2px solid var(--line);padding-left:10px;margin-left:4px}

.ut-scheda{border-bottom:1px solid var(--line)}
.ut-scheda:last-child{border-bottom:none}
.ut-scheda>summary{cursor:pointer;list-style:none;display:flex;align-items:center;gap:9px;
  flex-wrap:wrap;padding:9px 6px;font-size:13.5px;border-radius:8px}
.ut-scheda>summary::-webkit-details-marker{display:none}
.ut-scheda>summary:hover{background:color-mix(in srgb,var(--chip) 55%,transparent)}
.ut-scheda>summary::after{content:"Apri";color:var(--muted);font-size:11.5px;
  border:1px solid var(--line);border-radius:7px;padding:1px 7px;margin-left:auto;flex:none}
.ut-scheda[open]>summary::after{content:"Chiudi"}
.ut-id{font-variant-numeric:tabular-nums;font-weight:700;font-size:12.5px;
  color:var(--muted);flex:none}
.ut-tema{font-weight:600;overflow-wrap:anywhere;flex:1 1 260px;min-width:0}
.ut-prof{font-size:11.5px;color:var(--muted);background:var(--chip);
  border-radius:20px;padding:2px 9px;max-width:100%;overflow-wrap:anywhere}
.ut-data{font-size:11.5px;color:var(--muted);white-space:nowrap}
.ut-corpo{padding:2px 6px 14px 25px;font-size:13px}
.ut-campo{display:flex;gap:8px;margin:4px 0;overflow-wrap:anywhere}
.ut-campo>span{color:var(--muted);font-size:11.5px;text-transform:uppercase;
  letter-spacing:.05em;flex:none;min-width:112px;padding-top:1px}
.ut-corpo .btn{margin-top:9px}

.ut-card{padding:6px 16px}
.ut-prof-riga{display:flex;gap:14px;flex-wrap:wrap;align-items:baseline;
  padding:11px 0;border-bottom:1px solid var(--line)}
.ut-prof-riga:last-child{border-bottom:none}
/* il ruolo può essere lungo («SUE — Sportello Unico per l'Edilizia del Comune»):
   va a capo invece di allargare la pagina di lato (collaudo telefono 2026-09-03) */
.ut-prof-ruolo{font-weight:700;font-size:13.5px;flex:0 1 auto;min-width:0;
  display:inline-flex;align-items:center;gap:8px;flex-wrap:wrap;overflow-wrap:anywhere}
.ut-prof-dati{font-size:13px;color:var(--muted);overflow-wrap:anywhere}
.ut-prof-dati b{color:var(--fg)}
.ut-prof-note{font-size:12px;margin-top:2px}
.ut-dacompilare{font-style:italic}
.ut-storico summary b{color:var(--muted)}
/* i 3 contatori sulla card della Panoramica */
.ut-mini{display:inline-flex;gap:9px;align-items:center;margin-right:auto}
@media(max-width:600px){
  .ut-liv-sem{margin-left:0;width:100%}
  .ut-scheda>summary::after{margin-left:0}
  .ut-campo{flex-direction:column;gap:0}
  .ut-campo>span{min-width:0}
}

/* ==================== Lotto E — rifinitura Mac · iPad · iPhone ====================
   Richiesta di Matteo del 23/09/2026: «fruibilità Mac, iPad e iPhone perfetta; pulita,
   chiara, veloce, reattiva; più figa con qualche animazione, basta che non appesantisca;
   se possibile un pizzico di gamificazione». Qui il foglio base: le correzioni mobile
   viste al collaudo con gli screenshot (KPI che andavano a capo, ID spezzati nelle
   tabelle, bottoni sotto i 40px), la barra in basso del telefono, le transizioni. */

/* --- transizioni leggere: cambio vista (classe messa da naviga() in app.js), hover
   morbido su card e bottoni, pressione col dito. Tutto sotto i 200 ms. --- */
#main.vista-entra{animation:vista-entra .18s ease}
@keyframes vista-entra{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
.btn,nav button,.chips button,.hc-chips button,.macro-ops .macro,.conta-stati .cs{
  transition:border-color .15s,background .15s,color .15s,transform .12s,box-shadow .15s}
.btn:active,.hc-chips button:active,nav button:active{transform:scale(.97)}
.btn.primario:hover{filter:brightness(1.06)}
.card{transition:border-color .15s,box-shadow .15s}
.kpi .card:hover,.dash-kpi:hover{border-color:color-mix(in srgb,var(--accent) 45%,var(--line))}
.dash-kpi{transition:border-color .15s,transform .15s}
.kpi b,.dash-kpi-num,.conto-card b,.kiyo-cella b,.clienti-griglia .card b{font-variant-numeric:tabular-nums}
/* anche su Mac con la chat aperta (main ≈ 990px) «71.608,95 €» andava a capo su cinque
   colonne da 190px: colonne un po' più larghe (quattro per riga lì) e numero che si
   adatta alla finestra, mai spezzato */
.kpi{grid-template-columns:repeat(auto-fill,minmax(190px,1fr))}
.kpi b{font-size:clamp(20px,1.7vw,26px);white-space:nowrap}
/* i contatori che salgono (naviga() → contaKpi): niente salti di larghezza */
.kpi b.conta{will-change:contents}

/* --- colonne secondarie delle tabelle: chi disegna una tabella marca con .col-sec
   le colonne che sul telefono si possono perdere (zona, note, date secondarie);
   sotto i 600px spariscono e la riga resta leggibile senza scorrere di lato. --- */
@media(max-width:600px){
  th.col-sec,td.col-sec{display:none}
  table{font-size:13px}
  th,td{padding:8px 9px}
  .filtri select,.filtri input[type=search]{min-height:40px}
}
/* ID (PD-0000) e date nella prima colonna non si spezzano su due righe — anche su iPad,
   dove al collaudo l'elenco Acquisizione mostrava «PD-» sopra e «0000» sotto */
@media(max-width:1180px){
  .wrap th:first-child,.wrap td:first-child{white-space:nowrap}
}

/* --- KPI sul telefono: due colonne fisse e numero su UNA riga — al collaudo «71.608,95 €»,
   «50.000,00 €» e «10.000,00 €» mandavano l'euro a capo (P.Iva, Investimenti, Società). --- */
@media(max-width:600px){
  .kpi{grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}
  .kpi .card{padding:12px 12px;min-width:0}
  .kpi b{font-size:clamp(17px,5vw,24px);white-space:nowrap;letter-spacing:-.01em}
  .kpi span{font-size:12px}
  .clienti-griglia .card b,.kiyo-cella b,.conto-card b{font-size:clamp(17px,5vw,24px);white-space:nowrap}
  .dash-kpi-num{font-size:clamp(17px,5vw,21px);white-space:nowrap}
  .home-hero h1{font-size:26px}
  .scheda-testa h1{font-size:21px}
  /* bottoni sotto il pollice: mai meno di 40px (Matteo, 23/09/2026) */
  .btn,.torna,.chips button,.hc-chips button,.utente-chip button,.todo-aggiungi select,
  .sa-riga button,#cons-pulisci{min-height:40px}
  .azioni .btn{min-height:44px}
  .macro-ops .macro{min-height:42px}
  .conta-stati .cs{min-height:32px;display:inline-flex;align-items:center}
  /* grafici a barre CSS (P.Iva): le etichette dei mesi si diradano invece di sovrapporsi */
  .barre{gap:5px}
  .col-lab{font-size:10px}
  .colonna:nth-child(even) .col-lab{visibility:hidden}
  .torta-flex{flex-direction:column;align-items:stretch}
  .torta-svg{max-width:220px;margin:0 auto}
  .fun-nome{width:74px;font-size:12px}
  .fun-val{width:76px;font-size:12px}
  .due-colonne{gap:12px}
  /* la pagina finisce sopra il bottone della chat (la barra in basso non c'è più, 24/09/2026) */
  main{padding-bottom:calc(76px + env(safe-area-inset-bottom))}
  body #chat-toggle{bottom:calc(16px + env(safe-area-inset-bottom));width:50px;height:50px;font-size:20px;z-index:19}
}


/* animazioni spente per chi le preferisce ridotte (impostazione di sistema) */
@media(prefers-reduced-motion:reduce){
  #main.vista-entra{animation:none}
  .btn,nav button,.chips button,.hc-chips button,.macro-ops .macro,.conta-stati .cs,.card,.dash-kpi,
  .home-card,.conto-card,#drawer,.drawer-velo,.dr-chev,.dr-voce,.btn-drawer{transition:none}
  .home-card:hover,.conto-card:hover{transform:none}
}

/* ==================== Talenta v3 — rifinitura del 23/09/2026 (giro critico sugli screenshot) ==================== */

/* --- T2: la striscia delle schede trabocca senza dirlo. Un chevron con sfumatura a destra
   (#nav-piu, lo mette controllaNavTrabocco() in app.js) compare solo quando le schede non ci
   stanno; a fine corsa si gira e riporta all'inizio. Sul telefono la striscia non c'è. --- */
#nav-piu{display:none;flex:none;align-self:stretch;width:44px;margin-left:-34px;padding-left:18px;
  border:0;background:linear-gradient(90deg,transparent,var(--card) 45%);color:var(--muted);
  font-size:22px;line-height:1;cursor:pointer;position:relative;z-index:1;border-radius:0 8px 8px 0}
#nav-piu.visibile{display:inline-flex;align-items:center;justify-content:flex-end;padding-right:6px}
#nav-piu:hover{color:var(--fg)}
@media(max-width:600px){#nav-piu{display:none!important}}

/* --- T3: tabelle a card sul telefono. Le marca `t-card` etichettaTabella() (app.js), che copia
   il testo dei <th> in data-label dei <td>. Palladio non passa di qui. --- */
@media(max-width:600px){
  table.t-card,table.t-card tbody,table.t-card tr{display:block;width:100%}
  table.t-card thead{display:none}
  table.t-card tr{padding:9px 12px;border-bottom:1px solid var(--line)}
  table.t-card tr:last-child{border-bottom:0}
  table.t-card td{display:flex;justify-content:space-between;align-items:baseline;gap:12px;
    padding:3px 0;border:0;text-align:right;white-space:normal!important;overflow-wrap:anywhere}
  table.t-card td::before{content:attr(data-label);color:var(--muted);font-size:10.5px;
    text-transform:uppercase;letter-spacing:.05em;font-weight:600;flex:none;text-align:left;max-width:45%}
  table.t-card td:not([data-label])::before{content:none}
  table.t-card td[data-lungo]{flex-direction:column;align-items:flex-start;text-align:left;gap:2px}
  table.t-card td[data-lungo]::before{max-width:none}
  table.t-card td:not([data-label]){justify-content:flex-start;text-align:left}
  table.t-card td:empty{display:none}
  table.t-card td.col-sec{display:flex}      /* nelle card c'è posto anche per le colonne secondarie */
  table.t-card td .btn{margin-left:auto}
  table.t-card tbody tr:hover td{background:none}
  .wrap:has(table.t-card){overflow-x:visible}
}

/* --- sezioni ripiegabili (<details class="det-sezione">): statistiche P.Iva/Better Life, uscite
   fisse e movimenti da categorizzare del Cash Flow, come-si-accende degli Affitti --- */
details.det-sezione{margin:18px 0 10px}
details.det-sezione>summary{cursor:pointer;list-style:none;font-size:15px;font-weight:700;
  display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;padding:6px 0}
details.det-sezione>summary::-webkit-details-marker{display:none}
details.det-sezione>summary::before{content:"▸";color:var(--muted);transition:transform .15s;flex:none}
details.det-sezione[open]>summary::before{transform:rotate(90deg)}
details.det-sezione>summary .alb-ver{font-weight:400}
details.det-sezione>summary b{font-weight:800}
details.det-sezione>.wrap,details.det-sezione>.card,details.det-sezione>.kpi{margin-top:8px}
details.det-sezione h2.sezione{margin-top:10px}

/* --- Patrimonio: snapshot in attesa della rigenerazione, riga «immobili a reddito: nessuno» --- */
.patr-stale{color:var(--warn);font-weight:600}
.patr-stale::after{content:"";display:inline-block;width:9px;height:9px;margin-left:6px;border-radius:50%;
  border:2px solid var(--warn);border-top-color:transparent;animation:gira-refresh .9s linear infinite;vertical-align:-1px}
.patr-riga-vuota{margin:-8px 0 14px}

/* --- Crypto: le tre viste (chips in testa) — sul telefono non si impilano --- */
.crypto-viste{margin:2px 0 14px;gap:10px}
.crypto-viste .chips{flex-wrap:nowrap;overflow-x:auto;max-width:100%;scrollbar-width:none}
.crypto-viste .chips::-webkit-scrollbar{display:none}
.crypto-viste .chips button{white-space:nowrap}

/* --- Investimenti di Capitale: una card per contratto (≤5 contratti) --- */
.cap-griglia{display:grid;grid-template-columns:repeat(auto-fill,minmax(420px,1fr));gap:14px}
@media(max-width:600px){.cap-griglia{grid-template-columns:1fr}}
.cap-card{display:flex;flex-direction:column;gap:10px}
.cap-testa{display:flex;align-items:flex-start;gap:12px}
.cap-id{font-size:17px;font-variant-numeric:tabular-nums}
.cap-contro{margin-top:2px;font-size:13.5px}
.cap-capitale{margin-left:auto;text-align:right}
.cap-capitale b{display:block;font-size:22px;font-variant-numeric:tabular-nums;white-space:nowrap}
.cap-righe{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px 14px;
  padding:10px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.cap-righe>div{display:flex;flex-direction:column;min-width:0}
.cap-righe span{font-size:10.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:600}
.cap-righe b{font-size:13.5px;font-weight:600;overflow-wrap:anywhere}
.cap-sez{font-size:11.5px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted);font-weight:700;margin-top:2px}
.cap-lista{display:flex;flex-direction:column}
.cap-voce{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;font-size:13px;padding:6px 0;border-bottom:1px dashed var(--line)}
.cap-voce:last-child{border-bottom:0}

/* --- Società: il blocco unico quando la società è una sola --- */
.soc-unica{cursor:pointer;max-width:760px;transition:border-color .15s}
.soc-unica:hover{border-color:var(--accent)}
.soc-testa{display:flex;align-items:center;gap:14px}
.soc-testa .hc-icona{width:44px;height:44px;font-size:22px;margin:0;border-radius:12px;flex:none}
.soc-testa b{font-size:18px}
.soc-numeri{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:12px;margin-top:14px;
  padding-top:14px;border-top:1px solid var(--line)}
.soc-n b{display:block;font-size:clamp(19px,1.6vw,24px);line-height:1.2;font-variant-numeric:tabular-nums;white-space:nowrap}
.soc-n span{color:var(--muted);font-size:12.5px}
.soc-n .kpi-det{display:block;margin-top:3px;font-style:normal;font-size:11px;opacity:.85}
.soc-n.evidenza b{color:var(--serie1)}
@media(max-width:600px){.soc-numeri{grid-template-columns:1fr}.soc-n b{white-space:normal}}

/* --- Efesto a fucina vuota: un blocco solo, grande --- */
.fucina-vuota{max-width:760px;margin:6px 0 14px}
.fucina-vuota .idea-grande{padding:28px}
.fucina-vuota .idea-grande .hc-icona{width:64px;height:64px;font-size:32px}
.fucina-vuota .idea-grande .hc-testa b{font-size:22px}
.fucina-vuota .idea-grande p{font-size:14.5px;min-height:0}
.efesto-turno{margin-bottom:14px}

/* --- Chirone: log leggibile --- */
.log-righe li{color:var(--fg)}
.log-righe .log-data{color:var(--muted);font-variant-numeric:tabular-nums;margin-right:4px}
.log-resto{display:inline;color:var(--muted)}
.log-resto>summary{display:inline;cursor:pointer;color:var(--accent);font-size:12px;list-style:none}
.log-resto>summary::-webkit-details-marker{display:none}
.log-resto[open]>summary{display:block;margin-top:4px}
.log-resto[open]{display:block;margin-top:2px;line-height:1.55;white-space:pre-wrap}

/* --- Affitti vuoti: una riga di stato --- */
.affitti-vuoto{font-size:14px;line-height:1.55;color:var(--muted);max-width:760px}
.affitti-vuoto b{color:var(--fg)}

/* Cash Flow › Uscite fisse: tasti piccoli sulle righe (23/09/2026) */
.btn.piccolo{padding:3px 9px;font-size:12px;border-radius:7px;line-height:1.3}
td.cf-azioni{white-space:nowrap;text-align:right}

/* Laboratorio crypto: i cinque numeri in testa, verdi o rossi (23/09/2026) */
.lab-cinque .lab-pos{color:var(--ok)!important}
.lab-cinque .lab-neg{color:var(--err)!important}
.lab-cinque i.kpi-det.lab-pos,.lab-cinque i.kpi-det.lab-neg{font-weight:700}

/* sottovoci nel menu a sinistra (Crypto › fisco, Laboratorio Crypto — 23/09/2026) */
.dr-vista.dr-figlia{padding-left:30px;min-height:30px;font-size:12.5px}
.dr-vista.dr-figlia .dr-ico{font-size:13px}
body.drawer-compresso .dr-vista.dr-figlia{padding-left:10px}
/* sottomenu apribili (Crypto, P.Iva › Better Life, Società › Talenta Holding — 24/09/2026) */
.dr-sotto .dr-figlie{display:none;flex-direction:column;gap:1px}
.dr-sotto.espanso .dr-figlie{display:flex}
.dr-chev-v{width:26px;height:30px;font-size:15px}
body.drawer-compresso .dr-sotto .dr-figlie{display:none}

/* login da fuori: il saluto del passo 2 (23/09/2026) */
.login-ciao{background:var(--chip);border-radius:12px;padding:12px 14px;font-size:14px;line-height:1.5;margin:4px 0 10px}
.login-ciao b{font-size:16px}
.login-info:empty{display:none}

/* ==================== MODALITÀ DEMO e sezione Utenti (24/09/2026) ==================== */
.demo-badge{display:inline-block;margin-left:6px;padding:1px 8px;border-radius:20px;font-size:11px;font-weight:700;
  letter-spacing:.04em;background:var(--warnbg);color:var(--warn);vertical-align:middle}
body.in-demo #main{position:relative}
body.in-demo.in-test #main::before{content:"PALLADIO · TEST · il tuo ambiente di prova con dati simulati · le migliorie si registrano con 💡 Suggerisci e passano nell'Ufficiale con la tua approvazione"}
body.in-demo #main::before{content:"MODALITÀ DEMO · numeri fittizi, uguali per tutti · qui niente si scrive davvero";
  display:block;margin:0 0 12px;padding:6px 12px;border-radius:8px;font-size:12px;font-weight:600;
  background:var(--warnbg);color:var(--warn);border:1px dashed color-mix(in srgb,var(--warn) 45%,transparent)}
.ut-testa h1{margin-bottom:4px}
.ut-testa .sub{max-width:900px}
.ut-lista{display:flex;flex-direction:column;gap:12px;margin:14px 0}
.ut-card{padding:0;overflow:hidden}
.ut-card>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:12px;padding:12px 16px;flex-wrap:wrap}
.ut-card>summary::-webkit-details-marker{display:none}
.ut-card>summary::before{content:"▸";color:var(--muted);width:12px;flex:none}
.ut-card[open]>summary::before{content:"▾"}
.ut-avatar{width:34px;height:34px;border-radius:50%;background:var(--accent);color:#fff;display:inline-flex;align-items:center;
  justify-content:center;font-weight:700;flex:none}
.ut-titolo{display:flex;flex-direction:column;min-width:0;flex:1}
.ut-titolo b{font-size:16px}
.ut-email{color:var(--muted);font-size:13px}
.ut-mail{border:none;background:none;color:var(--muted);cursor:pointer;font-size:13px;padding:0 4px}
.ut-mail:hover{color:var(--accent)}
.ut-riass{display:flex;gap:6px;flex-wrap:wrap}
.ut-wrap{border:none;border-top:1px solid var(--line);border-radius:0}
.ut-albero th.ut-col,.ut-albero td.ut-col{text-align:center;width:100px;white-space:nowrap}
.ut-albero td.ut-nome{white-space:normal}
.ut-albero tr.ut-ctx td{border-top:1px solid var(--line);padding-top:10px;padding-bottom:8px}
.ut-albero tr.ut-vista td{padding-top:4px;padding-bottom:4px;color:var(--muted);font-size:13px}
.ut-albero tr.ut-vista td.ut-nome{padding-left:34px}
.ut-ramo{color:var(--line);margin-right:4px}
.ut-esp{border:1px solid var(--line);background:var(--card);color:var(--muted);border-radius:6px;width:24px;height:24px;
  cursor:pointer;margin-right:6px;font-size:12px}
.ut-esp:hover{border-color:var(--accent);color:var(--accent)}
.ut-ico{margin-right:2px}
.ut-tit{color:var(--muted);margin-left:8px;font-size:12px}
.ut-cb{width:18px;height:18px;accent-color:var(--accent);cursor:pointer}
.ut-cb:disabled{cursor:not-allowed;opacity:.35}
.ut-statocol{font-size:12.5px}
.ut-stato{display:inline-block;border-radius:20px;padding:2px 9px;font-weight:600;font-size:11.5px;margin-right:6px}
.ut-stato.ok{background:var(--okbg,#e6f4ea);color:var(--ok,#137333)}
.ut-stato.attesa{background:var(--warnbg);color:var(--warn)}
.ut-stato.muto{background:var(--chip);color:var(--muted)}
.ut-note{color:var(--muted);font-size:12px;margin-top:4px}
.ut-prompt{padding:3px 9px;font-size:12px}
.ut-piede{margin-top:18px}
.ut-accessi{margin-top:16px}                                  /* Accessi Demo (PRG-176) */
.ut-accessi-tab td{font-size:13px;overflow-wrap:anywhere}
.ut-acc{border-top:1px solid var(--line);padding:0 16px}      /* Accessi per utente (PRG-178) */
.ut-acc>summary{list-style:none;cursor:pointer;display:flex;align-items:center;gap:7px;flex-wrap:wrap;
  padding:9px 0;font-size:13px;color:var(--muted)}
.ut-acc>summary::-webkit-details-marker{display:none}
.ut-acc>summary::before{content:"▸";flex:none}
.ut-acc[open]>summary::before{content:"▾"}
.ut-acc>summary b{color:var(--fg)}
.ut-acc-corpo{padding-bottom:10px}
.ut-acc-tab small{color:var(--muted)}
.ut-piede code{font-size:12px}
.ut-foglio{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:60;display:flex;align-items:center;justify-content:center;padding:16px}
.ut-foglio-card{max-width:720px;width:100%;max-height:90vh;overflow:auto}
.ut-foglio-card h2{margin-top:0}
.ut-prompt-testo{width:100%;min-height:200px;font:13px/1.45 ui-monospace,Menlo,monospace;border:1px solid var(--line);border-radius:8px;
  padding:10px;background:var(--bg);color:var(--fg);resize:vertical}
.ut-foglio-azioni{display:flex;gap:8px;margin-top:10px;justify-content:flex-end}
@media (max-width:600px){
  .ut-albero th.ut-col,.ut-albero td.ut-col{width:58px}
  .ut-albero tr.ut-vista td.ut-nome{padding-left:18px}
  .ut-riass{width:100%}
}

/* ⚙ grandezza del testo (Matteo, 24/09/2026): 1 = com'è (il minimo), 2 e 3 più grandi. zoom sui
   contenitori che scorrono (pagina, menu, messaggi e riga di scrittura della chat): righe,
   riquadri e bottoni crescono con le scritte e non escono dallo schermo */
body[data-testo-app="2"] #main,body[data-testo-app="2"] #drawer .dr-lista,
body[data-testo-app="2"] #chat .cv-msgs,body[data-testo-app="2"] #chat .cv-invio,body[data-testo-app="2"] #gioco{zoom:1.1}
body[data-testo-app="3"] #main,body[data-testo-app="3"] #drawer .dr-lista,
body[data-testo-app="3"] #chat .cv-msgs,body[data-testo-app="3"] #chat .cv-invio,body[data-testo-app="3"] #gioco{zoom:1.2}
/* Esci sta solo in fondo al menu a sinistra (Matteo, 24/09/2026): il bottone in alto resta nel
   DOM (lo usa la voce Esci del drawer) ma non si vede */
.utente-chip #btn-logout{display:none}
/* ⚙ in fondo al menu: i tre gradini sotto la voce */
.dr-gradini{display:flex;gap:6px;padding:4px 4px 8px}
.dr-gradini button{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;gap:2px;height:58px;
  border:1px solid var(--line);border-radius:10px;background:var(--bg);color:var(--fg);cursor:pointer;padding:5px 2px}
.dr-gradini button b{line-height:1}
.dr-gradini button span{font-size:10.5px;color:var(--muted);white-space:nowrap}
.dr-gradini button.attivo{border-color:var(--accent);background:color-mix(in srgb,var(--accent) 10%,var(--card));color:var(--accent)}
.dr-impost{color:var(--muted)}
.dr-impost.aperta{color:var(--fg)}
@media(min-width:1181px){body.drawer-compresso .dr-gradini{display:none}}
/* 🎭 Demo + Funzioni / ↩ Torna all'app (24/09/2026): per gli Utenti sopra i contesti, per
   Matteo in fondo; acceso (in Demo) si colora come il badge DEMO */
#drawer .dr-demo{margin:6px 0;border:1px dashed var(--line);color:var(--muted)}
#drawer .dr-demo:hover{color:var(--fg)}
#drawer .dr-demo.attiva{border-style:solid;border-color:#d4a017;background:color-mix(in srgb,#d4a017 12%,var(--card));color:#8a6500}
/* i link da dare, in cima alla sezione Utenti (24/09/2026) */
.ut-link{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px;margin:14px 0 16px}
.ut-link-voce{display:grid;grid-template-columns:1fr auto;gap:4px 10px;align-items:center;padding:12px 14px}
.ut-link-voce b{grid-column:1/-1;font-size:13px;text-transform:uppercase;letter-spacing:.05em;color:var(--muted)}
.ut-link-voce a{font-weight:700;overflow-wrap:anywhere}
.ut-link-voce small{grid-column:1/-1;color:var(--muted);font-size:12px}
.ut-link-voce.spento{opacity:.7;border-style:dashed}
.ut-link-voce .sub{grid-column:1/-1}
/* in Demo + Funzioni «La tua giornata» (todo, agenda, email veri) non si vede */
body.modo-demo #btn-gioco{display:none!important}

/* Ingresso pubblico della Demo: le regole (Matteo, 25/09/2026) */
.demo-regole { list-style: none; margin: 4px 0 14px; padding: 10px 12px; border-radius: 10px;
  background: rgba(127,127,127,.10); font-size: .92em; line-height: 1.5; text-align: left; }
.demo-regole li { margin: 2px 0; }

/* Crypto › Strategie Operative (Matteo, 29/09/2026): un blocco per strategia, bordato,
   e il grafico P/L a quattro barre con il numero in cima */
.crypto-strat{border:1px solid var(--line, rgba(127,127,127,.25));border-radius:14px;padding:14px 14px 4px;margin:4px 0 18px;background:var(--card, transparent)}
.crypto-strat .cs-testa{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.crypto-strat .cs-testa h3{margin:0;font-size:17px}
.cs-pl-filtri{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-bottom:10px}
.cs-pl-filtri .chips button{font-size:12px}
.cs-pl-date{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--muted)}
.cs-pl-date input{font-size:12px;padding:3px 5px;max-width:130px}
.cs-pl-barre{display:flex;align-items:stretch;gap:10px;height:200px;padding-top:6px}
.cs-pl-col{flex:1;min-width:0;display:flex;flex-direction:column;align-items:center;justify-content:flex-end}
.cs-pl-num{font-size:12px;font-weight:700;white-space:nowrap;margin-bottom:4px}
.cs-pl-bar{width:62%;max-width:70px;border-radius:5px 5px 0 0;min-height:2px}
.cs-pl-lab{font-size:11px;color:var(--muted);margin-top:6px;text-align:center;line-height:1.2;min-height:2.4em}
.cs-pl-sep{width:1px;background:var(--muted);opacity:.35;margin:0 4px}
@media (max-width:600px){ .cs-pl-barre{gap:4px;height:170px} .cs-pl-num{font-size:10.5px} .cs-pl-bar{width:78%} }
.cs-kv{font-style:normal;font-weight:700;color:var(--fg)}
/* «🎓 Insegna a Clio» in testa alle dashboard di Clio (02/10/2026) */
.btn.clio-insegna{font-weight:600}

/* Menu a tendina: «Apri» / «Chiudi» scritto accanto al titolo, su tablet e Mac (Matteo,
   05/10/2026: la freccina sola non dice all'utente che il blocco si espande). Sul telefono
   no: lì lo spazio serve al titolo. La scheda Utenti ha già il suo chip, qui sopra. */
@media(min-width:601px){
  details:not(.ut-scheda)>summary::after,.lu-sez-testa::after{content:"Chiudi";color:var(--muted);
    font-size:11.5px;font-weight:500;border:1px solid var(--line);border-radius:7px;padding:1px 7px;
    margin-left:8px;flex:none;white-space:nowrap;align-self:center}
  details:not(.ut-scheda):not([open])>summary::after,.lu-sez.chiusa .lu-sez-testa::after{content:"Apri"}
}
