:root{
  --ini:#0b3d5c; --ini2:#12628f; --acc:#e08a1e; --bg:#eef2f5; --card:#fff;
  --ok:#2e7d32; --ko:#c0392b; --line:#d5dee5; --txt:#1c2a33;
  /* ===== COLORI DEI TIPI DI DATO — PUNTO UNICO (rilievo 8/6 Morvillo, 08/09/2026) =====
     azzurro = Consuntivo · giallo = Forecast · marrone = Previsionale.
     Sono letti da dashboard.js (getComputedStyle) e usati da grafici, legende, bordi delle
     tabelle dei Fogli e della pagina Forecast: si cambiano SOLO qui. */
  --col-consuntivo:#4fa3d8; --col-consuntivo-scuro:#1f6f9f; --col-consuntivo-chiaro:#a9d3ee; --col-consuntivo-bg:#eaf4fb;
  --col-forecast:#f2c94c;   --col-forecast-scuro:#c9a227;   --col-forecast-chiaro:#f9e59a;   --col-forecast-bg:#fff8dc;
  --col-previsionale:#8b5a2b; --col-previsionale-scuro:#5e3a19; --col-previsionale-chiaro:#c49a6c; --col-previsionale-bg:#f3ebe3;
}
/* legenda unica dei tipi di dato (stessa in Panoramica, Fogli, Forecast) */
.leg-tipi{display:flex;flex-wrap:wrap;gap:6px 18px;align-items:center;margin:8px 0;padding:8px 12px;
  background:#fff;border:1px solid var(--line);border-radius:8px;font-size:12.5px;color:#33414f}
.leg-tipi .lt-lab{font-weight:700;color:var(--ini)}
.leg-tipi .lt-item{display:inline-flex;align-items:center;gap:7px}
.leg-tipi .lt-dot{width:14px;height:14px;border-radius:3px;display:inline-block;border:1px solid rgba(0,0,0,.15)}
.lt-dot.consuntivo,.fo-leg-tab-consuntivo .fo-leg-dot{background:var(--col-consuntivo)}
.lt-dot.forecast,.fo-leg-tab-forecast .fo-leg-dot{background:var(--col-forecast)}
.lt-dot.previsionale,.fo-leg-tab-previsionale .fo-leg-dot{background:var(--col-previsionale)}
.leg-tipi .lt-note{color:#6a7a86;font-size:11.5px;flex-basis:100%}
*{box-sizing:border-box}
body{margin:0;font-family:"Segoe UI",system-ui,Arial,sans-serif;background:var(--bg);color:var(--txt);font-size:14px}
.brand{font-weight:800;letter-spacing:.5px;color:var(--ini)}
.brand span{color:var(--acc)}
.brand small{font-weight:400;color:#7a8a96;font-size:.65em;letter-spacing:0}

/* login */
.login-body{display:flex;min-height:100vh;align-items:center;justify-content:center;
  background:linear-gradient(135deg,#0b3d5c,#12628f)}
.login-card{background:#fff;padding:34px 34px 24px;border-radius:14px;width:340px;box-shadow:0 18px 50px rgba(0,0,0,.3)}
.login-card .brand{font-size:26px;text-align:center}
.login-card .subtitle{text-align:center;color:#607685;margin:4px 0 18px}
.login-card label{display:block;margin:12px 0;font-size:12px;color:#54636e}
.login-card input{width:100%;padding:10px;margin-top:4px;border:1px solid var(--line);border-radius:8px;font-size:15px}
.login-card button{width:100%;padding:11px;margin-top:16px;background:var(--ini);color:#fff;border:0;border-radius:8px;font-size:15px;cursor:pointer}
.login-card button:hover{background:var(--ini2)}
.login-card .foot{text-align:center;color:#9fb0bb;font-size:11px;margin-top:16px}
.alert{background:#fdecec;color:var(--ko);padding:9px 12px;border-radius:8px;font-size:13px;border:1px solid #f3c2c2}

/* topbar */
.topbar{display:flex;justify-content:space-between;align-items:center;background:#fff;padding:10px 18px;border-bottom:3px solid var(--ini);position:sticky;top:0;z-index:20}
.topbar .brand{font-size:20px}
.topbar-right{display:flex;align-items:center;gap:14px;font-size:13px}
.datainfo{color:#607685;font-size:12px}
.user{color:var(--ini);font-weight:600}
.logout{color:#8a97a1;text-decoration:none}
.logout:hover{color:var(--ko)}
.btn-refresh{background:var(--acc);color:#fff;border:0;padding:6px 12px;border-radius:7px;cursor:pointer;font-weight:600}
.btn-refresh:hover{filter:brightness(1.06)}

.refresh-bar{height:20px;background:#dfe8ee;position:relative;margin:0;overflow:hidden}
.refresh-bar .rb-inner{height:100%;width:0;background:linear-gradient(90deg,var(--ini2),var(--acc));transition:width .3s}
.refresh-bar .rb-txt{position:absolute;left:12px;top:1px;font-size:12px;color:#243b48}
.hidden{display:none}

.note-metodo{background:#fff6e8;border-left:4px solid var(--acc);padding:9px 16px;font-size:12.5px;color:#5a4a2e}
.note-metodo em{font-style:normal;font-weight:600}

.tabs{display:flex;gap:2px;background:var(--ini);padding:0 10px;flex-wrap:wrap}
.tab{background:transparent;color:#cfe0ec;border:0;padding:11px 16px;cursor:pointer;font-size:13.5px;border-bottom:3px solid transparent}
.tab:hover{color:#fff}
.tab.active{color:#fff;border-bottom-color:var(--acc);font-weight:600}

.filtri{background:#fff;padding:12px 18px;border-bottom:1px solid var(--line)}
.fgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:12px 16px;align-items:end}
.fgrid label{display:flex;flex-direction:column;font-size:11px;font-weight:600;color:#54636e;gap:4px}
/* barra filtri RIFATTA (richiesta signore 03/09): tutti i campi come controlli VERI e
   UNIFORMI — stessa altezza (38px), stesso bordo/radius, larghezze coerenti nella griglia. */
.fgrid select,.fgrid input,.fgrid .chipsel{height:38px;padding:0 10px;border:1px solid var(--line);
  border-radius:8px;font-size:13px;background:#fff;width:100%;color:var(--txt)}
.fgrid input{padding:0 10px}
.fgrid select:focus,.fgrid input:focus,.fgrid .chipsel.open{outline:none;border-color:var(--ini2);
  box-shadow:0 0 0 3px rgba(18,98,143,.15)}
/* i vecchi <select multiple> nativi (minuscoli) sono nascosti: sopra ci va il chip-select */
.fgrid select[multiple]{display:none}
.fbtns{display:flex;align-items:center;gap:12px;margin-top:14px;padding-top:12px;
  border-top:1px solid var(--line);flex-wrap:wrap;position:sticky;bottom:0}
/* interruttore "ordina voci per importo / alfabetico" (Conto economico, A3 13/09/2026) */
.ord-voci{display:flex;align-items:center;gap:6px;font-size:12px;font-weight:600;
  color:#54636e;margin-left:auto}
.ord-sel{height:30px;padding:0 8px;border:1px solid var(--line);border-radius:6px;
  font-size:12.5px;background:#fff;color:var(--txt)}

/* ============ CHIP MULTISELECT (Mese, Clinica, Onere, Tipo dato) ============
   Campo a chip con menu a tendina e ricerca interna: sostituisce il <select multiple>
   nativo (input minuscolo). Progressive enhancement: tiene in sync il <select> sottostante,
   cosi' tutta la logica di lettura filtri resta invariata. */
.chipsel{display:flex;align-items:center;flex-wrap:wrap;gap:4px;cursor:pointer;position:relative;
  min-height:38px;height:auto;padding:3px 30px 3px 8px}
.chipsel::after{content:"▾";position:absolute;right:10px;top:50%;transform:translateY(-50%);
  color:#8a97a1;font-size:11px;pointer-events:none}
.chipsel .cs-ph{color:#9aa7b1;font-size:13px;padding:4px 2px}
.chipsel .cs-chip{display:inline-flex;align-items:center;gap:5px;background:var(--ini);color:#fff;
  border-radius:12px;padding:2px 6px 2px 9px;font-size:12px;font-weight:600;max-width:100%}
.chipsel .cs-chip b{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:150px}
.chipsel .cs-chip .cs-x{cursor:pointer;font-weight:700;opacity:.8;line-height:1}
.chipsel .cs-chip .cs-x:hover{opacity:1}
.chipsel .cs-chip.disabled{background:#b9c4cc}
/* 3.49.1 (rilievo JM 02/11): il riquadro dei filtri resta alto quanto gli altri campi.
   Le pasticche stanno su UNA riga e si accorciano coi puntini; oltre 2 voci il widget mostra
   una sola pasticca riassuntiva (dashboard.js, CS_MAX_CHIP). Niente overflow:hidden sul
   riquadro: la tendina (.cs-pop) e' sua figlia e verrebbe tagliata. */
.fgrid .chipsel{flex-wrap:nowrap;min-width:0}
.fgrid .chipsel .cs-chip{flex:0 1 auto;min-width:0}
.fgrid .chipsel .cs-chip b{min-width:0;max-width:none}
.chipsel .cs-chip.cs-riass{background:var(--ini2)}
.cs-pop{position:absolute;z-index:60;top:calc(100% + 4px);left:0;min-width:240px;max-width:340px;
  background:#fff;border:1px solid var(--line);border-radius:10px;box-shadow:0 12px 34px rgba(0,0,0,.16);
  padding:8px;display:none}
.cs-pop.open{display:block}
.cs-pop .cs-search{width:100%;height:34px;padding:0 10px;border:1px solid var(--line);border-radius:7px;
  font-size:13px;margin-bottom:6px}
.cs-pop .cs-list{max-height:230px;overflow:auto}
/* Tendine ad ALBERO (Livelli dei costi / dei ricavi), 16/09/2026 — rilievo di JM: la lista
   mostrava madre e figlie con la stessa grafica (il rientro dell'etichetta veniva tolto da
   .trim()) e in un riquadro da cinque righe su oltre duecento voci: sembrava che ci fosse
   solo il primo livello. Ora le figlie rientrano sotto la loro categoria, la categoria e' in
   grassetto e la lista e' piu' alta. */
.cs-pop .cs-list.cs-albero{max-height:340px}
/* i due selettori per riga sono necessari come sopra: dentro `.fgrid` le voci ereditano da
   `.fgrid .cs-pop label.cs-opt`, che e' piu' specifico e altrimenti rimangerebbe il rientro */
.cs-pop .cs-opt.cs-madre,.fgrid .cs-pop label.cs-opt.cs-madre{font-weight:600;background:#f4f8fb;margin-top:2px}
.cs-pop .cs-opt.cs-madre.sel,.fgrid .cs-pop label.cs-opt.cs-madre.sel{background:#e6f0f8}
.cs-pop .cs-opt.cs-figlia,.fgrid .cs-pop label.cs-opt.cs-figlia{padding-left:30px;position:relative}
.cs-pop .cs-opt.cs-figlia::before{content:"";position:absolute;left:14px;top:0;bottom:0;
  border-left:2px solid #d4dee6}
.cs-pop .cs-nota{font-size:11.5px;color:#607685;padding:6px 8px 0;line-height:1.35;
  border-top:1px solid var(--line);margin-top:4px}
/* Spunta LATERALE (rilievo 2 Morvillo): la casella sta a fianco del nome, sulla stessa riga.
   Prima la voce ereditava da `.fgrid label` il layout a colonna (casella sopra, nome sotto,
   centrati) e la spunta non si vedeva come tale. Le voci selezionate sono evidenziate. */
.cs-pop .cs-opt,.fgrid .cs-pop label.cs-opt{display:flex;flex-direction:row;align-items:center;justify-content:flex-start;
  gap:9px;padding:6px 8px;border-radius:6px;cursor:pointer;font-size:13px;font-weight:400;color:var(--txt);text-transform:none}
.cs-pop .cs-opt:hover{background:#eef4f8}
.cs-pop .cs-opt input{width:16px;height:16px;margin:0;flex:none;accent-color:var(--ini);cursor:pointer}
.cs-pop .cs-opt.sel{background:#e6f0f8;font-weight:600;color:var(--ini)}
.cs-pop .cs-opt .cs-check{margin-left:auto;color:var(--ok);font-weight:700;font-size:13px}
.cs-pop .cs-count{font-size:11.5px;color:#607685;padding:2px 8px 6px}
.cs-pop .cs-opt.disabled{opacity:.5;cursor:not-allowed}
.cs-pop .cs-opt.disabled .cs-sub{color:#b0392b;font-size:11px;margin-left:auto}
.cs-pop .cs-empty{color:#9aa7b1;font-size:12px;padding:8px;text-align:center}
.cs-pop .cs-actions{display:flex;justify-content:space-between;margin-top:6px;padding-top:6px;border-top:1px solid var(--line)}
.cs-pop .cs-actions a{font-size:12px;color:var(--ini2);cursor:pointer;font-weight:600}
/* menu e filtri v2: scorciatoie per trimestre nel filtro Mese (vanno a capo sotto le azioni) */
.cs-pop .cs-actions{flex-wrap:wrap;gap:4px 10px}
.cs-pop .cs-actions a.cs-scorc{font-weight:500;color:#40566b}
/* colonna Chiusura attesa (colore del Forecast) e colonne di confronto fra anni */
table.pa-grid th.pa-th-chius{border-bottom:3px solid var(--col-forecast)}
table.pa-grid td.pa-chius{background:var(--col-forecast-bg)}
table.pa-grid tr.pa-soc td.pa-chius{background:#0f5679}
table.pa-grid th.pa-th-conf{text-align:right;min-width:120px}
table.pa-grid td.pa-confpct.pa-neg{color:#a4262c}
table.pa-grid td.pa-confpct.pa-pos{color:#1d6b32}
.pa-crit{background:var(--col-forecast-bg);border-left:4px solid var(--col-forecast);padding:6px 10px;border-radius:0 6px 6px 0}
.pa-crit:empty{display:none}
/* selezione del budget (11/09/2026) */
.pa-bsel{background:#fff7e6;border-left:4px solid #d08a00;padding:6px 10px;border-radius:0 6px 6px 0}
.pa-bsel:empty{display:none}
table.pa-grid td.pa-budget{background:#f6f3ec}
table.pa-grid tr.pa-soc td.pa-budget{background:#0f5679}
.bg-selbox{margin:0 6px 0 0;vertical-align:middle;width:15px;height:15px;cursor:pointer}
.bg-selbox:disabled{cursor:not-allowed}
table.bg-grid tr.bg-escluso td{opacity:.5}
table.bg-grid tr.bg-escluso td.bg-c1 b,table.bg-grid tr.bg-escluso .bg-sc-lab{text-decoration:line-through}
.bg-sel-str{margin-left:8px;font-size:11px;font-weight:400;white-space:nowrap}
.bg-sel-str button{font-size:11px;padding:1px 6px;margin-left:2px;border:1px solid #c9ccd1;background:#fff;border-radius:4px;cursor:pointer}
table.bg-grid tr.bg-tot-sel td{font-weight:700;background:#fff7e6}
.bg-sel-info{color:#5b4a1f}
.bg-sel-info:empty,#bgSelStato:empty{display:none}
.btn-apply{background:var(--ini);color:#fff;border:0;padding:8px 18px;border-radius:7px;cursor:pointer;font-weight:600}
.btn-reset{background:#e3eaef;color:#41525d;border:0;padding:8px 14px;border-radius:7px;cursor:pointer}
.exports{margin-left:auto;font-size:13px;color:#54636e}
.exports a{color:var(--ini2);font-weight:600;text-decoration:none;margin:0 2px}
.exports a:hover{text-decoration:underline}
.exports em{font-style:normal;color:#9fb0bb;font-size:11px}

/* Layout FLUIDO ~90% della finestra (richiesta signore 03/09): via il contenitore
   centrato stretto. Le pagine occupano ~90% con un minimo di respiro laterale, cap
   a 2000px sui monitor molto larghi per non spezzare la leggibilita'. */
main{padding:16px 0 40px;width:90%;max-width:2000px;margin:0 auto}
.note-metodo,.filtri{padding-left:5vw;padding-right:5vw}
.tabs{padding-left:calc(5vw - 10px);padding-right:calc(5vw - 10px)}
@media(min-width:2223px){/* oltre la soglia il cap 2000px vince: allinea le bande */
  .note-metodo,.filtri{padding-left:calc((100vw - 2000px)/2);padding-right:calc((100vw - 2000px)/2)}
  .tabs{padding-left:calc((100vw - 2000px)/2 - 10px);padding-right:calc((100vw - 2000px)/2 - 10px)}
}
.kpi-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:12px;margin-bottom:16px}
.kpi{background:#fff;border-radius:10px;padding:14px 16px;box-shadow:0 2px 6px rgba(20,60,90,.06);border-top:3px solid var(--ini2)}
.kpi .k-lab{font-size:11px;color:#7a8a96;text-transform:uppercase;letter-spacing:.4px}
.kpi .k-val{font-size:22px;font-weight:800;color:var(--ini);margin-top:3px}
.kpi .k-sub{font-size:11px;color:#98a6b0;margin-top:2px}

.panel{display:none}
.panel.active{display:block}
/* Punto 1: grafici impaginati in verticale/responsive, sempre dentro la larghezza
   della pagina (griglia auto-fit che scende a 1 colonna quando serve), mai scroll
   orizzontale. Ogni canvas si adatta al proprio container con altezza fissa. */
.charts2{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:14px}
.chart-box{background:#fff;border-radius:10px;padding:14px 16px;margin-bottom:14px;box-shadow:0 2px 6px rgba(20,60,90,.06);overflow:hidden;min-width:0}
.chart-box h3{margin:0 0 10px;font-size:14px;color:var(--ini)}
.chart-box canvas{display:block;width:100%!important;max-width:100%;height:300px!important;max-height:300px}

.tablewrap{background:#fff;border-radius:10px;padding:6px;overflow:auto;box-shadow:0 2px 6px rgba(20,60,90,.06)}
/* Punto 2: colonne dimensionate sul contenuto reale (niente colonne vuote larghe):
   table-layout auto + larghezza automatica, la tabella non stira le colonne oltre il
   contenuto. Numeri a destra, testo a sinistra. */
table.dtable{width:auto;max-width:100%;border-collapse:collapse;font-size:12.5px;table-layout:auto}
table.dtable th,table.dtable td{padding:6px 9px;border-bottom:1px solid #eef2f5;text-align:left;white-space:nowrap}
table.dtable th{background:var(--ini);color:#fff;position:sticky;top:0;cursor:pointer;user-select:none}
table.dtable th:hover{background:var(--ini2)}
table.dtable td.num,table.dtable th.num{text-align:right;font-variant-numeric:tabular-nums}
/* Punto 1b (Mario 03/09): intestazioni e righe di subtotale vanno A CAPO invece di
   troncare/allargare la colonna. I NUMERI restano su una riga (mai spezzati) e
   allineati a destra, cosi' l'allineamento numerico non cambia dopo il wrap. */
table.dtable th{white-space:normal;overflow-wrap:anywhere;vertical-align:bottom}
table.dtable td.num{white-space:nowrap}
table.dtable tr.ct-subtotal td,table.dtable tr.ct-total td{white-space:normal;overflow-wrap:anywhere}
table.dtable tr.ct-subtotal td.num,table.dtable tr.ct-total td.num{white-space:nowrap}
table.dtable tr:nth-child(even) td{background:#f6f9fb}
.pos{color:var(--ok);font-weight:600}
.neg{color:var(--ko);font-weight:600}
.badge{font-size:10px;padding:1px 6px;border-radius:9px;background:#e3eaef;color:#41525d}
.badge.prev{background:#fdecd3;color:#8a5a12}
.badge.cons{background:#d9ecdb;color:#1f5b23}
.pager{display:flex;gap:6px;align-items:center;padding:8px 6px;font-size:12px;color:#54636e}
.pager button{border:1px solid var(--line);background:#fff;border-radius:6px;padding:3px 9px;cursor:pointer}
.qnote{background:#fff;border-radius:10px;padding:12px 16px;font-size:13px;box-shadow:0 2px 6px rgba(20,60,90,.06)}
.foot-app{padding:14px 18px;color:#8a97a1;font-size:11.5px;text-align:center;border-top:1px solid var(--line)}

/* ====================== follow-up R2/R3/R5/R6 ====================== */
/* help / spiegazioni (R6) */
.pagehelp{background:#fff;border:1px solid var(--line);border-left:4px solid var(--acc);
  border-radius:8px;padding:12px 16px;margin:0 0 14px}
.pagehelp h2{margin:0 0 6px;color:var(--ini);font-size:18px}
.pagehelp p{margin:4px 0;color:#3f4f5a;line-height:1.5}
.pagehelp .warn,.pagehelp .src-note{font-size:12px;color:#7a5a12;background:#fdf6e8;padding:6px 10px;border-radius:6px;display:inline-block;margin-top:6px}
.chart-help,.kpi-legend,.filtri-help{color:#5a6a75;font-size:12px;line-height:1.5;margin:2px 0 8px}
.kpi-legend{background:#fff;border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin:8px 0}
.filtri-help{margin:0 0 10px}
.hint{display:inline-block;width:15px;height:15px;line-height:15px;text-align:center;border-radius:50%;
  background:#c9d6df;color:#33454f;font-size:10px;font-weight:700;cursor:help;margin-left:3px}
/* Tooltip "ricco" agganciato al punto interrogativo (rilievo 7 Morvillo): il disclaimer sui
   mesi non occupa piu' spazio in pagina; compare al passaggio del mouse, al fuoco da tastiera
   o al tocco (classe .open da JS per il mobile). Il testo e' quello di prima, identico. */
.hint.hint-tip{position:relative;overflow:visible;background:var(--ini2);color:#fff}
.hint.hint-tip .tip-box{display:none;position:absolute;left:-8px;top:22px;z-index:90;width:340px;max-width:min(340px,calc(100vw - 40px));
  background:#fff;color:#3f4f5a;border:1px solid var(--line);border-left:4px solid var(--acc);border-radius:8px;
  box-shadow:0 10px 30px rgba(0,0,0,.18);padding:9px 12px;font-size:12px;font-weight:400;line-height:1.45;
  text-align:left;text-transform:none;white-space:normal;cursor:auto}
.hint.hint-tip:hover .tip-box,.hint.hint-tip:focus .tip-box,.hint.hint-tip.open .tip-box{display:block}
.hint.hint-tip .tip-box b{color:#5a4409}
.hint.hint-tip .tip-box p{margin:4px 0}

/* fogli (R2) - Morvillo 02/09 18:15: pulsanti di selezione foglio disposti in
   ORIZZONTALE in testa alla griglia (non più colonna a sinistra), così tutta la
   larghezza resta alla tabella per vedere gen-dic + Totale/Budget/Delta. */
.fogli-layout{display:block}
.fogli-menu{display:flex;flex-direction:row;flex-wrap:wrap;gap:6px;margin:0 0 12px}
.foglio-link{text-align:left;padding:7px 12px;border:1px solid var(--line);background:#fff;border-radius:8px;
  cursor:pointer;font-size:13px;color:var(--ini)}
.foglio-link:hover{background:#f2f7fb}
.foglio-link.active{background:var(--ini);color:#fff;border-color:var(--ini)}
.fogli-view{min-width:0}
.tablewrap.wide{overflow-x:auto}
/* R3 (Morvillo 02/09 18:15): resize colonne su TUTTE le colonne + larghezza
   persistente. Le larghezze sono governate da un <colgroup> con table-layout:fixed
   (impostato via JS): così trascinare una maniglia agisce sulla colonna reale, non
   solo sull'intestazione. Le celle troncano il testo eccedente (si allarga la colonna
   per vederlo tutto). */
table.xlsx{border-collapse:collapse;font-size:12px;width:auto}
table.xlsx td{border:1px solid #dbe4ea;padding:3px 7px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
table.xlsx td:empty{padding:2px 3px}
table.xlsx td.num{text-align:right;font-variant-numeric:tabular-nums}
table.xlsx tr.x-title td{background:var(--ini);color:#fff;font-weight:700}
table.xlsx tr.x-header td{background:#d0e2ec;font-weight:700;color:var(--ini)}
table.xlsx tr.x-subtotal td{background:#eef4f8;font-weight:700}
table.xlsx tr.x-blank td{border:0;height:8px;background:transparent}
/* Morvillo 02/09 18:20 ("veroli"): i valori di luglio ricostruiti/integrati dalla
   sorgente NON sono rettifiche manuali dell'utente, quindi NON vanno evidenziati in
   giallo (l'evidenziazione gialla = inserimento manuale, che qui non c'è). Restano
   valori normali; l'origine "integrazione autorizzata" è consultabile solo passando
   il mouse (tooltip), senza alcun colore. Il valore numerico NON cambia. */
table.xlsx td.x-recon{background:inherit;box-shadow:none;font-weight:inherit}
table.xlsx tr.x-subtotal td.x-recon{background:inherit}
.box-nd{background:#fdf6e8;border:1px solid #f0dcae;color:#7a5a12;padding:10px 14px;border-radius:8px}
/* R3: intestazioni Fogli a capo automatico + colonne ridimensionabili (drag).
   NB: nessun max-width qui: le larghezze sono governate dal <colgroup> (table-layout
   fixed) e trascinando la maniglia la colonna deve poter crescere liberamente. */
table.xlsx tr.x-header td,table.xlsx tr.x-title td{
  white-space:normal;word-break:break-word;vertical-align:bottom;
  min-width:40px;position:relative}
.col-resizer{position:absolute;top:0;right:0;width:7px;height:100%;cursor:col-resize;
  user-select:none;background:linear-gradient(to right,transparent,rgba(11,61,92,.28))}
.col-resizer:hover{background:linear-gradient(to right,transparent,var(--acc))}
/* R4: colonne TOTALE / BUDGET / DELTA evidenziate nella griglia Fogli */
table.xlsx td.x-tot{background:#e3eff7;font-weight:700}
table.xlsx tr.x-header td.x-tot{background:#bcd6e8;color:var(--ini)}
table.xlsx tr.x-subtotal td.x-tot{background:#d3e4f0}

/* ---- Punto 1a (Mario 03/09): titolo di griglia FUORI dal flusso delle colonne ----
   Il titolo del foglio e' una banda a larghezza piena (cella colspan su tutte le
   colonne visibili), allineata a sinistra, sempre mostrata per intero: NON dipende
   piu' dal numero/larghezza delle colonne (prima si troncava/andava a capo nella sola
   prima colonna). */
table.xlsx tr.x-title td.x-title-cell{
  text-align:left;white-space:normal;word-break:break-word;overflow:visible;text-overflow:clip;
  background:var(--ini);color:#fff;font-weight:700;padding:6px 10px;font-size:13px}
/* ---- Punto 1b (Mario 03/09): righe di subtotale della griglia Fogli a capo (no troncamento) ---- */
table.xlsx tr.x-subtotal td{white-space:normal;word-break:break-word;overflow:visible;text-overflow:clip}
table.xlsx tr.x-subtotal td.num{white-space:nowrap}   /* i numeri non si spezzano */

/* ---- Punto 2 (Santarelli 03/09): VISTA ANNUALE dei Fogli su UNA pagina, senza scroll
   orizzontale. table-layout:fixed + width:100% costringe l'intera griglia dentro il
   contenitore; le colonne descrittive costanti sono nascoste via JS; i numeri sono
   abbreviati (k/M) col valore pieno nel tooltip. Il testo va a capo, i numeri no. */
.fogli-modeswitch{display:flex;align-items:center;gap:7px;margin:0 0 8px;flex-wrap:wrap}
.fogli-modeswitch .fms-lab{font-size:12px;color:#54636e}
.fogli-modeswitch .mode-btn{padding:5px 13px;border:1px solid var(--line);background:#fff;
  border-radius:7px;cursor:pointer;font-size:12.5px;color:var(--ini)}
.fogli-modeswitch .mode-btn:hover{background:#f2f7fb}
.fogli-modeswitch .mode-btn.active{background:var(--ini);color:#fff;border-color:var(--ini);font-weight:600}
table.xlsx.annual{table-layout:fixed;width:100%;font-size:10.5px}
table.xlsx.annual td{padding:2px 4px;white-space:normal;word-break:break-word;overflow:hidden;text-overflow:clip}
table.xlsx.annual td.num{white-space:nowrap;font-variant-numeric:tabular-nums}
table.xlsx.annual tr.x-header td{font-size:10px;padding:3px 4px;vertical-align:bottom}
table.xlsx.annual tr.x-title td.x-title-cell{font-size:12.5px}
/* R5/R6: Dettaglio conti - subtotali per onere e totale generale in grassetto */
table.dtable tr.ct-subtotal td{background:#eef4f8!important;font-weight:700;border-top:1px solid #cdd9e2}
table.dtable tr.ct-total td{background:#d0e2ec!important;font-weight:800;color:var(--ini);
  border-top:2px solid var(--ini2);font-size:13px}

/* rettifiche (R3) */
.rett-form{background:#fff;border:1px solid var(--line);border-radius:10px;padding:14px 16px;margin-bottom:14px}
.rf-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:10px 14px}
.rf-grid label{display:flex;flex-direction:column;font-size:12px;color:#54636e;gap:3px}
.rf-grid input,.rf-grid select{padding:7px;border:1px solid var(--line);border-radius:7px;font-size:13px}
.rf-grid label.chk{flex-direction:row;align-items:center;gap:6px}
.rf-grid .chk-note{color:#8a97a1;font-size:11px}
.rf-btns{margin-top:12px;display:flex;align-items:center;gap:10px}
.rt-msg{font-size:13px}
.rt-msg.ok{color:var(--ok)} .rt-msg.err{color:var(--ko)}
tr.row-prov td{background:#fff7e6}
button.mini{font-size:11px;padding:3px 7px;border:1px solid var(--line);background:#fff;border-radius:6px;cursor:pointer;margin-right:3px}
button.mini:hover{background:#f2f7fb}
button.mini.danger{color:var(--ko);border-color:#f0c4c4}
.badge.prov{background:#f4a825;color:#3a2b00}
.badge.ok{background:#cfe8d0;color:#1e5720}

/* glossario (R6) */
dl.glossario{background:#fff;border:1px solid var(--line);border-radius:10px;padding:16px 20px;columns:2;column-gap:34px}
dl.glossario dt{font-weight:700;color:var(--ini);margin-top:10px;break-after:avoid}
dl.glossario dd{margin:0 0 6px;color:#3f4f5a;line-height:1.45}
.metodo-note{background:#fff;border:1px solid var(--line);border-radius:10px;padding:14px 20px;margin-top:14px}
.metodo-note h3{color:var(--ini);margin:0 0 8px}
.metodo-note li{margin:5px 0;line-height:1.5;color:#3f4f5a}

/* refresh msg (R4) */
.refresh-msg{margin:0 18px 6px;padding:8px 12px;border-radius:8px;font-size:13px}
.refresh-msg.ok{background:#e6f4e6;color:#1e5720;border:1px solid #b8ddb9}
.refresh-msg.info{background:#eaf2f8;color:#1a4a6b;border:1px solid #bcd6e8}
.refresh-msg.err{background:#fdecec;color:var(--ko);border:1px solid #f3c2c2}

/* modal storico */
.modal{position:fixed;inset:0;background:rgba(0,0,0,.45);display:flex;align-items:center;justify-content:center;z-index:60}
.modal.hidden{display:none}
.modal-box{background:#fff;border-radius:12px;max-width:760px;width:92%;max-height:80vh;overflow:auto;padding:0}
.modal-head{display:flex;justify-content:space-between;align-items:center;padding:12px 18px;border-bottom:1px solid var(--line);position:sticky;top:0;background:#fff}
.modal-head span{font-weight:700;color:var(--ini)}
.modal-head button{border:0;background:none;font-size:18px;cursor:pointer;color:#8a97a1}
#storicoBody{padding:14px 18px}
@media(max-width:900px){.rf-grid{grid-template-columns:repeat(2,1fr)}dl.glossario{columns:1}.fogli-layout{flex-direction:column}.fogli-menu{flex-direction:row;flex-wrap:wrap}}

/* ====================== R9.1 testata aggiornamento ====================== */
.datainfo.agg{color:#3f4f5a}
.datainfo.agg b{color:var(--ini);font-weight:700}
.datainfo.check{color:#8a97a1;font-weight:400}
.datainfo.check b{color:#607685;font-weight:600}
/* R9.3 -> rilievo 7 Morvillo (08/09/2026): la nota sui mesi non sta piu' sotto il selettore
   ma nel tooltip del punto interrogativo (.hint-tip). Lo stile resta per compatibilita'. */
.mese-nota{display:none}

/* ====================== R9.2 tabelle full-width / responsive ====================== */
/* Desktop: le dtable stanno dentro la pagina (width auto, mai oltre il contenitore) e
   non generano scroll orizzontale. Sotto la breakpoint mobile diventano schede: ogni
   riga e' un blocco, ogni cella mostra "Etichetta: valore" (data-label), cosi' nessuna
   colonna sparisce e non serve scorrere in orizzontale. */
.tablewrap{overflow-x:auto}
@media(max-width:680px){
  main{padding:12px 10px 34px;width:auto}
  /* su mobile il respiro laterale 5vw diventa un margine fisso piccolo: niente overflow */
  .note-metodo,.filtri{padding-left:10px;padding-right:10px}
  .tabs{padding-left:4px;padding-right:4px}
  .fgrid{grid-template-columns:1fr}
  .cs-pop{max-width:calc(100vw - 24px);min-width:0}
  /* topbar: su mobile va a capo per non sforare la larghezza */
  .topbar{flex-wrap:wrap;gap:6px}
  .topbar-right{flex-wrap:wrap;gap:8px;row-gap:4px}
  .kpi-row{grid-template-columns:1fr}
  .tablewrap{overflow-x:hidden;padding:4px}
  table.dtable{width:100%;display:block}
  table.dtable thead{position:absolute;left:-9999px;top:-9999px}     /* intestazioni nascoste ma nel DOM */
  table.dtable tbody{display:block;width:100%}
  table.dtable tr{display:block;width:100%;margin:0 0 10px;border:1px solid var(--line);
    border-radius:9px;overflow:hidden;background:#fff}
  table.dtable tr:nth-child(even) td{background:transparent}
  table.dtable td{display:flex;justify-content:space-between;align-items:baseline;gap:12px;
    width:100%;white-space:normal;text-align:right;border-bottom:1px solid #eef2f5;padding:7px 11px}
  table.dtable td:last-child{border-bottom:0}
  table.dtable td::before{content:attr(data-label);flex:0 0 44%;text-align:left;
    font-weight:600;color:#54636e;font-size:11.5px;white-space:normal}
  table.dtable td.num{text-align:right;justify-content:space-between}
  /* subtotali/totali (Dettaglio conti): banda piena, ben distinta come scheda */
  table.dtable tr.ct-subtotal,table.dtable tr.ct-total{background:#eef4f8}
  table.dtable tr.ct-total{border-color:var(--ini2)}
  table.dtable tr.ct-subtotal td:empty,table.dtable tr.ct-total td:empty{display:none} /* niente righe vuote */
  table.dtable tr.ct-subtotal td::before,table.dtable tr.ct-total td::before{color:#41525d}
  .kpi-row{grid-template-columns:1fr}
  .fgrid{grid-template-columns:1fr}
  .pager{justify-content:center}
}

/* Forecast mensile (delega ini-forecast-mensile-deploy) */
.quadra-note{background:#fff8dc;border:1px solid #efe0a8;border-left:4px solid var(--col-forecast);
  padding:10px 14px;border-radius:8px;margin:8px 0 14px;font-size:.95rem;line-height:1.5;}
.muted{color:#888;font-style:italic;}

/* --- Fogli: riepilogo filtri attivi + stato vuoto (delega ini-fogli-filtri-forecast-form) --- */
.fogli-filtri-attivi{background:#eef5fb;border:1px solid #cfe0ef;border-left:4px solid var(--ini2);
  padding:7px 12px;border-radius:8px;margin:0 0 10px;font-size:12.5px;color:#33495a;display:flex;
  align-items:center;flex-wrap:wrap;gap:6px}
.fogli-filtri-attivi .ffa-lab{font-weight:700;color:var(--ini)}
.fogli-filtri-attivi .ffa-chip{background:var(--ini);color:#fff;padding:2px 8px;border-radius:9px;font-weight:600}
.fogli-filtri-attivi .ffa-reset{margin-left:auto;border:1px solid var(--line);background:#fff;
  border-radius:6px;padding:2px 9px;cursor:pointer;color:var(--ini2);font-weight:600}
.fogli-filtri-attivi .ffa-reset:hover{background:#f2f7fb}
td.fogli-empty{text-align:center;color:#7a5a12;background:#fdf6e8;padding:16px;font-size:13.5px}
td.fogli-empty .fogli-empty-reset{margin-left:10px}

/* --- Forecast: riga con rettifica manuale + pannello CRUD --- */
tr.row-rett td{background:#f4f0fa}
.fc-crud{margin-top:22px;border-top:2px solid var(--line);padding-top:12px}
.fc-crud h3{color:var(--ini);margin:14px 0 8px;font-size:15px}

/* ==== Provenienza dati + note Fogli + perimetro filtrato (delega followup-1) ==== */
.prov-legenda{display:flex;flex-wrap:wrap;gap:6px 16px;align-items:center;margin:8px 0;padding:8px 12px;
  background:#f4f7fb;border:1px solid #dde5f0;border-radius:8px;font-size:12.5px;color:#33414f}
.prov-legenda .pl-lab{font-weight:700;color:#1f2d3a}
.prov-legenda .pl-item{display:inline-flex;align-items:center;gap:6px}
.prov-legenda .pl-dot{width:11px;height:11px;border-radius:50%;display:inline-block;flex:0 0 auto}
/* stessi colori della legenda unica (azzurro consuntivo / marrone previsionale) */
.pl-cons .pl-dot{background:var(--col-consuntivo)}
.pl-prev .pl-dot{background:var(--col-previsionale)}
.pl-fore .pl-dot{background:var(--col-forecast)}
.pl-rett .pl-dot{background:#e6a700}
.fogli-note{margin:8px 0;padding:9px 12px;border-radius:8px;font-size:12.5px;line-height:1.45;
  background:#fff8e6;border:1px solid #f0e0b0;color:#5a4a1f}
.fogli-note.vd{background:#fdeeee;border-color:#f0c9c9;color:#7a2f2f}
.fogli-perimetro{margin:8px 0;padding:9px 12px;border-radius:8px;background:#eef6ee;border:1px solid #c7e2c7;
  font-size:12.5px;color:#26492a}
.fogli-perimetro .fp-lab{font-weight:700;margin-right:6px}
.fogli-perimetro .fp-sub{color:#5a7a5c;font-size:11.5px}
.fogli-perimetro .fp-mesi{display:flex;flex-wrap:wrap;gap:4px 12px;margin:5px 0}
.fogli-perimetro .fp-m{white-space:nowrap}
.fogli-perimetro .fp-tot{font-size:13.5px}
/* N1: il totale è di UN blocco solo, dichiarato nell'etichetta e scegliibile dal selettore */
.fogli-perimetro .fp-blk{color:var(--ini)}
.fogli-perimetro .fp-selwrap{margin-left:10px;font-size:11.5px;color:#3d5f40}
.fogli-perimetro .fp-sel{margin-left:4px;font-size:11.5px;padding:2px 4px;border-radius:5px;
  border:1px solid #c7e2c7;background:#fff;color:#26492a;max-width:280px}
/* W1/E12: maniglia per aprire/richiudere un blocco del foglio */
table.xlsx .x-blk-toggle{cursor:pointer;user-select:none;display:inline-block;
  min-width:14px;text-align:center;opacity:.85;font-size:11px}
table.xlsx .x-blk-toggle:hover{opacity:1}
table.xlsx tr.x-header .x-blk-toggle{color:var(--ini);margin-right:3px}
.hidden{display:none !important}

/* ===== A) Rettifiche manuali — toolbar/contatore/stato-vuoto/pallino (delega guida-tutorial-filtri) ===== */
.rett-toolbar{display:flex;justify-content:space-between;align-items:flex-end;gap:12px;flex-wrap:wrap;margin:14px 0 4px}
.rett-filtri{display:flex;gap:12px;align-items:flex-end;flex-wrap:wrap}
.rett-filtri label{display:flex;flex-direction:column;font-size:12px;color:#54636e;gap:3px}
.rett-filtri select,.rett-filtri input{padding:7px 8px;border:1px solid var(--line);border-radius:7px;font-size:13px;min-width:150px}
.rett-count{font-weight:700;color:var(--ini);background:#eaf2f8;border:1px solid #cfe0ec;border-radius:20px;padding:5px 14px;white-space:nowrap}
.rett-nota-filtri{margin:2px 0 8px;font-size:12px}
.rett-empty{background:#f6f9fb;border:1px dashed var(--line);border-radius:10px;padding:22px;text-align:center;color:#607685;font-size:14px;margin:8px 0}
.rett-dot{color:#e0b021;font-size:15px;margin-right:5px;cursor:help;vertical-align:middle}
.rett-gestisci{margin-left:8px;font-size:12px;color:var(--ini2);text-decoration:underline;cursor:pointer}
tr.row-rett td{background:#fff9e6}
.muted{color:#9fb0bb}
.pos{color:var(--ok)} .neg{color:var(--ko)}

/* ===== C) Guida ===== */
#tab-guida .guida-wrap{display:grid;grid-template-columns:250px 1fr;gap:26px;align-items:start}
.guida-nav{position:sticky;top:70px;background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px 12px;max-height:calc(100vh - 90px);overflow:auto}
.guida-nav h4{margin:6px 8px;color:var(--ini);font-size:12px;text-transform:uppercase;letter-spacing:.5px}
.guida-nav a{display:block;padding:6px 10px;border-radius:7px;color:#40525e;text-decoration:none;font-size:13px;border-left:3px solid transparent}
.guida-nav a:hover{background:#f0f5f9}
.guida-nav a.active{background:#eaf2f8;color:var(--ini);border-left-color:var(--acc);font-weight:600}
.guida-body{min-width:0}
.guida-sec{background:#fff;border:1px solid var(--line);border-radius:12px;padding:22px 26px;margin-bottom:18px;scroll-margin-top:74px}
.guida-sec h3{margin-top:0;color:var(--ini);border-bottom:2px solid #eef2f5;padding-bottom:8px}
.guida-sec h4{color:var(--ini2);margin-bottom:4px}
.guida-sec .esempio{background:#f6f9fb;border-left:4px solid var(--acc);padding:12px 16px;border-radius:0 8px 8px 0;margin:12px 0}
.guida-sec .attenzione{background:#fdf3e7;border-left:4px solid #d98b2b;padding:10px 14px;border-radius:0 8px 8px 0;margin:10px 0;font-size:13px}
.guida-sec img{max-width:100%;border:1px solid var(--line);border-radius:8px;margin:12px 0;display:block;box-shadow:0 4px 14px rgba(0,0,0,.08)}
.guida-sec .shot-cap{font-size:12px;color:#7a8a96;margin:-6px 0 12px}
.guida-legenda span.dot{display:inline-block;width:12px;height:12px;border-radius:50%;margin-right:6px;vertical-align:middle}
.guida-iter{counter-reset:it}
.guida-iter li{margin:8px 0;padding-left:6px}
.guida-iter a{color:var(--ini2)}
.guida-cta{display:flex;gap:12px;flex-wrap:wrap;margin:10px 0 20px}
.guida-cta a,.guida-cta button{background:var(--ini);color:#fff;border:0;border-radius:8px;padding:11px 18px;font-size:14px;cursor:pointer;text-decoration:none;display:inline-flex;align-items:center;gap:8px}
.guida-cta a:hover,.guida-cta button:hover{background:var(--ini2)}
.guida-cta .ghost{background:#fff;color:var(--ini);border:1px solid var(--ini)}
@media(max-width:1000px){#tab-guida .guida-wrap{grid-template-columns:1fr}.guida-nav{position:static;max-height:none}}

/* header tutorial button */
.btn-tutorial{background:var(--acc);color:#fff;border:0;border-radius:8px;padding:7px 13px;font-size:13px;cursor:pointer;font-weight:600}
.btn-tutorial:hover{filter:brightness(1.05)}

.filtri-nota{margin:6px 2px 0;font-size:12px;color:#54636e;background:#f6f9fb;border-left:3px solid var(--acc);padding:6px 10px;border-radius:0 6px 6px 0}

/* avviso data competenza vs bilancio di verifica, accanto ad "Azzera filtri" (task 3, 18/09/2026) */
.avviso-competenza{font-size:11px;color:#7a8792;font-style:italic;margin-left:8px;display:inline-block}
@media (max-width:600px){.avviso-competenza{display:block;margin:6px 0 0}}

/* mobile: form rettifica/forecast e toolbar filtri a colonna singola (no taglio orizzontale a 375px) */
@media(max-width:560px){
  .rf-grid{grid-template-columns:1fr}
  .rf-grid input,.rf-grid select{min-width:0;width:100%}
  .rett-toolbar{flex-direction:column;align-items:stretch}
  .rett-filtri{flex-direction:column;align-items:stretch}
  .rett-filtri label{width:100%}
  .rett-filtri select,.rett-filtri input{min-width:0;width:100%}
  .guida-cta{flex-direction:column}
}

/* ---- FASE 2: colonne evidenziate dal filtro Confronto / dal filtro Anno ---- */
.dtable th.cmp-hl{ background:#e8f1f8; color:#0b3c5d; }
.dtable td.cmp-hl{ background:#f4f9fc; }
/* ---- FASE 2: mesi parziali nel Forecast mensile ---- */
.dtable tr.row-parziale td{ background:#fffaf0; }
.fm-parziale{ display:block; margin-top:.35rem; color:#8a6d1f; }
.fm-regola{ display:inline-block; margin-top:.35rem; margin-left:.4rem;
            border-bottom:1px dotted #8a6d1f; color:#8a6d1f; cursor:help; }


/* ================== FASE 3 — W3/E22: Fogli scorrevoli, intestazione fissa, zoom ==================
   Prima il contenitore della griglia non aveva altezza massima: cresceva quanto tutta la
   tabella (3.692 px su SCOSTAMENTI GROTTAFERRATA) e la sua barra di scorrimento orizzontale
   finiva in fondo a una pagina alta 4.664 px. Ora la griglia ha una propria finestra di
   scorrimento (verticale e orizzontale), l'intestazione con i mesi resta appiccicata in alto
   e un selettore di zoom cambia la dimensione del testo. */
.tablewrap.fogli-scroll{max-height:calc(100vh - 260px);overflow:auto;position:relative;--fz:1}
/* intestazione dei blocchi appiccicata in alto: scorrendo si vede sempre a che mese
   corrisponde la colonna che si sta leggendo. Ogni blocco ha la sua intestazione: quella del
   blocco corrente copre la precedente man mano che si scende. */
.tablewrap.fogli-scroll table.xlsx tr.x-header td{position:sticky;top:0;z-index:4;
  background:#d0e2ec;box-shadow:0 1px 0 #9fbdd0}
.tablewrap.fogli-scroll table.xlsx tr.x-header td.x-tot{background:#bcd6e8}
/* zoom: la dimensione del carattere della griglia e' un multiplo (--fz) impostato dal
   selettore. Vale per tutte le parti della griglia (celle, intestazioni, titoli). */
.tablewrap.fogli-scroll table.xlsx{font-size:calc(12px * var(--fz))}
.tablewrap.fogli-scroll table.xlsx.annual{font-size:calc(10.5px * var(--fz))}
.tablewrap.fogli-scroll table.xlsx.annual tr.x-header td{font-size:calc(10px * var(--fz))}
.tablewrap.fogli-scroll table.xlsx tr.x-title td.x-title-cell{font-size:calc(13px * var(--fz))}
.tablewrap.fogli-scroll table.xlsx.annual tr.x-title td.x-title-cell{font-size:calc(12.5px * var(--fz))}
.fogli-modeswitch .fogli-zoom-lab{margin-left:10px}
.fogli-modeswitch .fogli-zoom{padding:5px 8px;border:1px solid var(--line);border-radius:7px;
  font-size:12.5px;color:var(--ini);background:#fff;cursor:pointer}
@media(max-width:680px){
  .tablewrap.fogli-scroll{max-height:none;overflow:auto}
}

/* ================== FASE 3 — W2/E21: nota di riconciliazione dell'andamento per mese ==========
   Il grafico per mese usa per forza le righe MENSILI, i KPI della stessa scheda usano la base
   annuale/YTD: la differenza fra i due totali va detta a schermo, non lasciata intuire. */
.andamento-nota{margin:10px 0 0;padding:9px 12px;border-radius:8px;font-size:12px;line-height:1.55;
  background:#f2f7fb;border:1px solid #cfe0ec;color:#33454f}
.andamento-nota.warn-diff{background:#fdf6e8;border-color:#f0dcae;color:#7a5a12}
.andamento-nota b{font-weight:700}

/* ================== FASE 3 — W4/E26: stato vuoto parlante (Dettaglio prestazioni) ============ */
/* NB: table.dtable td e' white-space:nowrap - senza forzare il ritorno a capo il
   messaggio (una riga sola lunga) allargherebbe la tabella oltre lo schermo e
   spingerebbe fuori vista le ultime colonne dell'intestazione. */
table.dtable td.tbl-empty-msg,.tbl-empty-msg{background:#fdf6e8;border:1px solid #f0dcae;
  color:#7a5a12;padding:14px 16px;border-radius:8px;font-size:13px;line-height:1.6;
  text-align:left;white-space:normal;overflow-wrap:anywhere}
.tbl-empty-msg strong{color:#5a4409}
.tbl-empty-msg .btn-reset{margin-top:8px}

/* ==================================================================================
   FASE 3 - pagina "Fogli (come l'Excel)" operativa: tre tabelle con i mesi in colonna.
   Intestazione fissa (sticky), prima colonna congelata, colonne ridimensionabili.
   ================================================================================== */
.fogli-subtabs{display:flex;gap:8px;margin:0 0 12px;flex-wrap:wrap}
/* rilievo 5 Morvillo: rimasta una sola sotto-vista, la barra non serve piu'. `display:flex`
   qui sopra vince sull'attributo `hidden` del browser, percio' serve dirlo. */
.fogli-subtabs[hidden]{display:none}
.fogli-subtabs .subtab{background:#f1f3f6;border:1px solid #d7dce3;border-radius:8px;
  padding:7px 14px;font-size:14px;cursor:pointer;color:#334}
.fogli-subtabs .subtab.active{background:#1f4e79;border-color:#1f4e79;color:#fff;font-weight:600}

.fo-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;
  background:#f7f9fb;border:1px solid #e2e7ee;border-radius:8px;padding:8px 10px;margin-bottom:10px}
.fo-toolbar .fo-lab{font-size:13px;color:#445;display:inline-flex;align-items:center;gap:5px}
.fo-toolbar .fo-sel{padding:4px 6px;border:1px solid #ccd3dc;border-radius:6px;font-size:13px;background:#fff}
.fo-sep{width:1px;height:20px;background:#dde2e9;display:inline-block}
.fo-selinfo{font-size:12px;color:#667}
.btn-sm{background:#1f4e79;color:#fff;border:0;border-radius:6px;padding:5px 10px;
  font-size:13px;cursor:pointer}
.btn-sm.ghost{background:#fff;color:#1f4e79;border:1px solid #b9c6d6}
.btn-sm.danger{background:#a02a2a}
.btn-sm:disabled{background:#b6bec8;cursor:not-allowed}

.fo-legenda{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:#556;margin:6px 0 8px}
.fo-leg{display:inline-flex;align-items:center;gap:6px;max-width:340px}
.fo-leg-dot{width:12px;height:12px;border-radius:3px;display:inline-block;flex:0 0 auto;border:1px solid #bbb}
.fo-leg-rettifica .fo-leg-dot{background:#fff3b0;border-color:#e0c65a}
.fo-leg-parziale .fo-leg-dot{background:repeating-linear-gradient(45deg,#eee,#eee 3px,#ccc 3px,#ccc 6px)}
.fo-leg-approvato .fo-leg-dot{background:#ddf3dd;border-color:#8fc48f}
.fo-leg-forecast-prev .fo-leg-dot{background:#e8f1fb;border-color:#9dbfe0}

.fo-stato{font-size:12.5px;color:#556;margin:4px 0 10px}
.fo-stato.ok{color:#1d6b32}
.fo-stato.ko{color:#a02a2a;font-weight:600}

.fo-alert{background:#fff8e6;border:1px solid #e6c86a;border-radius:8px;padding:10px 12px;margin-bottom:12px}
/* rettifiche orfane: avviso piu' forte del giallo delle riconciliazioni — qui c'e' del
   lavoro dell'operatore che rischia di non essere piu' agganciato a nessuna cella */
.fo-alert-orfane{background:#fdecea;border-color:#d9534f}
.fo-alert-orfane .fo-alert-tit{color:#a3231f}
.fo-alert-orfane .fo-orf-nota{color:#7a1d1a;margin-top:6px;font-size:12px}
.fo-alert-tit{font-weight:700;color:#8a6100;margin-bottom:6px}
.fo-alert-riga{display:flex;gap:10px;flex-wrap:wrap;align-items:center;
  padding:6px 0;border-top:1px dashed #e6d5a8;font-size:13px}
.fo-alert-dove{font-weight:600;color:#333}
.fo-alert-vals{color:#555}
.fo-alert-act{display:flex;gap:6px;margin-left:auto}

.fo-tabella{margin:0 0 26px}
.fo-tit{margin:0 0 4px;font-size:17px;color:#1f4e79}
.fo-tit-tot{font-size:13px;font-weight:400;color:#667;margin-left:8px}
.fo-nota-nc{font-size:12.5px;color:#8a6100;margin:2px 0 6px}
.fo-scroll{overflow:auto;max-height:62vh;border:1px solid #dfe4ea;border-radius:8px;background:#fff}
/* v3.32.0 (23/09/2026) — B1 dell'audit del 21/09: la terza tabella delle Griglie Operative
   traboccava dal suo riquadro e l'ultima colonna (Δ Previsionale-Budget, l'etichetta piu'
   lunga delle tre tabelle: 127 px contro 111 e 108) finiva mezza fuori con una barra di
   scorrimento per 3 px. Misura a 1920x1080 sulla produzione 3.31.1: tabella 1 e 2 larghe
   1709 px in un riquadro da 1709, tabella 3 larga 1712.
   Causa: `width:max-content` chiede al browser la larghezza IDEALE del contenuto (1712) e
   niente le dice di fermarsi al riquadro; `min-width:100%` alza il minimo, non abbassa il
   massimo. Il contenuto ci sta: il min-content della stessa tabella e' 1709, cioe' esattamente
   il riquadro.
   Rimedio: `max-width:100%`. E' il rimedio gia' scelto con la 3.28.0 per la pagina
   «Registrazioni senza centro di costo» — far stare la tabella nella pagina invece di
   allargare la pagina — nella sua forma minima, perche' qui non serve ritagliare nessun testo.
   `max-width` non puo' comprimere una tabella sotto il suo min-content: su schermi stretti
   (misurato a 1366: min-content 1709 in un riquadro da 1210) la pagina continua a scorrere in
   orizzontale esattamente come prima, e nessuna cella viene schiacciata.
   Provato PRIMA del rilascio iniettando la regola nella produzione (sola lettura):
   `deploy/prova_rimedio_traboccamento.py` -> 1920: traboccamento 3 -> 0 px, ultima colonna
   dentro il riquadro, 166 righe e 20 colonne identiche, 0 celle schiacciate. */
table.fo-grid{border-collapse:separate;border-spacing:0;width:max-content;min-width:100%;
  max-width:100%;font-size:11.5px}
table.fo-grid th,table.fo-grid td{border-right:1px solid #eceff3;border-bottom:1px solid #eceff3;
  padding:4px 5px;white-space:nowrap}
table.fo-grid th{position:relative}
/* intestazione FISSA */
table.fo-grid thead th{position:sticky;top:0;z-index:3;background:#eef2f7;color:#22405f;
  font-weight:600;text-align:center;box-shadow:0 1px 0 #d5dce5}
/* prime CINQUE colonne CONGELATE, nell'ordine chiesto dal cliente (rilievo 1, 08/09/2026):
   spunta | Anno | Struttura | Onere | Conto aggregato (con descrizione). Lo scorrimento
   `left` di ognuna e' calcolato da fogli_operativi.js (congelaColonne) perche' le colonne
   sono anche ridimensionabili. */
table.fo-grid th.fo-th-riga,table.fo-grid td.fo-th-riga{position:sticky;z-index:2;
  background:#fafbfc;text-align:left;white-space:normal;vertical-align:top}
table.fo-grid .fo-c1{left:0;width:30px;min-width:30px;max-width:34px;text-align:center;padding:5px 4px}
table.fo-grid .fo-c2{min-width:52px;max-width:64px;text-align:center;color:#5a6b78;font-variant-numeric:tabular-nums}
table.fo-grid .fo-c3{min-width:120px;max-width:190px;font-weight:600;color:#243b53}
table.fo-grid .fo-c4{min-width:84px;max-width:150px;font-weight:600;color:#3a5670}
table.fo-grid .fo-c5{min-width:190px;max-width:320px}
/* bordo colorato coerente con la legenda unica (azzurro/giallo/marrone) */
.fo-tabella{border-left:7px solid #ccc;padding-left:10px;border-radius:4px}
.fo-tabella.fo-col-consuntivo{border-left-color:var(--col-consuntivo)}
.fo-tabella.fo-col-forecast{border-left-color:var(--col-forecast)}
.fo-tabella.fo-col-previsionale{border-left-color:var(--col-previsionale)}
.fo-tabella .fo-tit .fo-tit-dot{display:inline-block;width:13px;height:13px;border-radius:3px;margin-right:7px;vertical-align:-1px;border:1px solid rgba(0,0,0,.15)}
.fo-col-consuntivo .fo-tit-dot{background:var(--col-consuntivo)}
.fo-col-forecast .fo-tit-dot{background:var(--col-forecast)}
.fo-col-previsionale .fo-tit-dot{background:var(--col-previsionale)}
.fo-col-consuntivo .fo-scroll{border-color:var(--col-consuntivo)}
.fo-col-forecast .fo-scroll{border-color:var(--col-forecast)}
.fo-col-previsionale .fo-scroll{border-color:var(--col-previsionale)}
.fo-col-consuntivo table.fo-grid thead th{background:var(--col-consuntivo-bg)}
.fo-col-forecast table.fo-grid thead th{background:var(--col-forecast-bg)}
.fo-col-previsionale table.fo-grid thead th{background:var(--col-previsionale-bg)}
.fo-sync{font-size:12px;color:#33414f;background:#eef6ee;border:1px solid #c7e2c7;border-radius:8px;padding:6px 10px;margin:4px 0 8px}
.fo-sync b{color:#26492a}
table.fo-grid thead th.fo-th-ang{z-index:4;background:#e6ecf3}
table.fo-grid tfoot th.fo-th-riga{background:#eef2f7;font-weight:700}
table.fo-grid tfoot td,table.fo-grid tfoot th{position:sticky;bottom:0;z-index:2;background:#eef2f7;font-weight:700}
.fo-riga-conto{display:block;font-weight:600;color:#243b53}
.fo-riga-meta{display:block;font-size:11px;color:#7a8798}
.fo-sel-riga{margin:0;vertical-align:middle}
/* subtotali per ONERE: sono righe di sola lettura, i totali generali non li usano */
table.fo-grid tr.fo-subtot td{background:#eef4f8;font-weight:700;border-top:1px solid #cdd9e2;
  text-align:right;font-variant-numeric:tabular-nums}
table.fo-grid tr.fo-subtot td.fo-th-riga{text-align:left;color:#22405f}
.fo-subtot-n{font-weight:400;font-size:11px;color:#7a8798}
/* Sotto-riga APA della Specialistica SSN (Punto 6 ondata 4, 19/09/2026): grigia e in corsivo,
   non selezionabile, non conta in nessun subtotale/totale (quelli restano quelli di sempre,
   calcolati riga per riga dal motore prima che questa riga venga anche solo disegnata). */
table.fo-grid tr.fo-ssn-sub td{background:#f4f5f7;color:#6b7280;font-style:italic;
  border-top:1px dashed #d5dae1;text-align:right;font-variant-numeric:tabular-nums}
table.fo-grid tr.fo-ssn-sub td.fo-th-riga{text-align:left}
.fo-ssn-lab{font-weight:400;font-style:italic;color:#6b7280}
table.fo-grid tr.fo-ssn-sub td.fo-cmp{background:#eef0f3}
/* Nota accanto all'etichetta della sotto-riga (21/09/2026): dice PERCHE' Budget e Δ di QUELLA
   voce sono vuoti, cioe' perche' la pagina Budget non ha la riga di quella sotto-categoria
   (AMBULATORIALI SSN, 4 voci). Sta sulla stessa riga dell'etichetta e non allarga la colonna:
   `white-space:normal` perche' la cella dell'etichetta e' l'unica che puo' andare a capo senza
   spingere fuori riquadro le colonne dei mesi (criterio B1 della 3.28.1). */
table.fo-grid tr.fo-ssn-sub th.fo-ssn-lab{white-space:normal}
table.fo-grid tr.fo-ssn-sub .fo-ssn-nota{font-style:normal;font-weight:400;color:#9aa1ab;
  font-size:.86em}
/* 3.29.1 - la casella col TRATTINO su una sotto-riga per voce: stesso grigio piu' chiaro con
   cui le altre tabelle (`td.agg-vuoto`) dicono «qui non c'e' un valore», cosi' il trattino di
   una voce non ripartita non si legge come uno zero. Il carattere e' quello che `num()` mette
   gia' oggi per un valore assente: qui cambia solo il colore. */
table.fo-grid tr.fo-ssn-sub td.fo-cmp-vuoto{color:#8a99a8}
/* 3.47.0 - riga di riepilogo «somma critiche e indistinte perché soggette ad osmosi» (JM
   27/10/2026), sotto la voce Indistinte: corsivo su fondo tenue AZZURRO (le voci sono grigie),
   testo piu' scuro e bordo pieno sopra/sotto, cosi' si legge come riepilogo e non come voce.
   Solo lettura: non entra in nessun subtotale/totale. */
table.fo-grid tr.fo-osmosi td,table.fo-grid tr.fo-osmosi th{background:#e8f1fb;color:#1f3b57;
  font-style:italic;border-top:1px solid #9dbbd8;border-bottom:1px solid #9dbbd8;
  text-align:right;font-variant-numeric:tabular-nums}
table.fo-grid tr.fo-osmosi td.fo-th-riga,table.fo-grid tr.fo-osmosi th.fo-th-riga{text-align:left}
table.fo-grid tr.fo-osmosi td.fo-cmp{background:#dde9f6}
table.fo-grid tr.fo-osmosi th.fo-osmosi-lab{font-weight:600;white-space:normal}
table.fo-grid tr.fo-osmosi .fo-ssn-nota{font-style:normal;font-weight:400;color:#6b84a0;font-size:.86em}
/* RAGGRUPPAMENTI ANNIDATI struttura > onere (brief 08/09/2026): intestazione cliccabile che
   richiude il blocco, subtotale di onere, totale di struttura. Le intestazioni non portano
   numeri: gli importi stanno una volta sola, nelle righe di riepilogo. */
table.fo-grid tr.fo-grp-head{cursor:pointer;user-select:none}
table.fo-grid tr.fo-grp-head td{background:#dfe9f3;font-weight:700;color:#1c3a5b;
  border-top:1px solid #b9cbdc}
table.fo-grid tr.fo-grp-struttura td{background:#cfe0f0;text-transform:none;font-size:13px}
table.fo-grid tr.fo-grp-head:hover td{background:#c4d8ec}
table.fo-grid tr.fo-grp-head:focus{outline:2px solid #2f6fa8;outline-offset:-2px}
.fo-tog{display:inline-block;width:14px;color:#2f6fa8;font-weight:700}
td.fo-grp-hint{text-align:left !important;font-weight:400;font-size:11px;color:#5a7086;cursor:pointer}
table.fo-grid tr.fo-tot-str td{background:#dce8f4;font-weight:700;border-top:2px solid #9db9d4;
  text-align:right;font-variant-numeric:tabular-nums}
table.fo-grid tr.fo-tot-str td.fo-th-riga{text-align:left;color:#173453}
table.fo-grid tr.fo-tot-str td.fo-cmp{background:#d3e2f1}
/* Blocco SOCIETA' (documento cliente 10/09/2026): sta un gradino SOPRA la struttura nella
   gerarchia, quindi e' un gradino piu' scuro. Va scritto dopo le regole di fo-grp-head e
   fo-tot-str: stessa specificita', vince l'ultima. */
table.fo-grid tr.fo-grp-societa td{background:#12628f;color:#fff;font-weight:700;font-size:13px}
table.fo-grid tr.fo-grp-societa:hover td{background:#0f5679}
table.fo-grid tr.fo-grp-societa td .fo-subtot-n,
table.fo-grid tr.fo-grp-societa td.fo-grp-hint{color:#dbeafe}
table.fo-grid tr.fo-grp-societa .fo-tog{color:#fff}
table.fo-grid tr.fo-tot-soc td{background:#c2d9ec;font-weight:700;border-top:2px solid #12628f;
  border-bottom:2px solid #12628f}
table.fo-grid tr.fo-tot-soc td.fo-th-riga{text-align:left;color:#0f3552}
.fo-azi{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:9px;
  background:rgba(255,255,255,.2);font-size:11px;font-variant-numeric:tabular-nums}
/* colonne di confronto: Budget, consuntivo dell'anno prima, scostamenti */
table.fo-grid th.fo-th-cmp{background:#e7eef6}
table.fo-grid td.fo-cmp{text-align:right;font-variant-numeric:tabular-nums;background:#f7fafd}
table.fo-grid td.fo-delta-pos{color:#1d6b32}
table.fo-grid td.fo-delta-neg{color:#a4262c}
/* R12 (D6-bis, 20/09/2026): Δ Forecast-Budget che porta il valore della sotto-categoria
   Specialistica SSN invece del solo aggregato contabile. Un filo sottostante, non un altro
   colore: il verde/rosso del segno deve restare leggibile. Il suggerimento dice la fonte e
   il valore contabile di partenza. */
table.fo-grid td.fo-delta-ssn{text-decoration:underline dotted #5b5bd6;text-underline-offset:3px}
table.fo-grid tr.fo-subtot td.fo-cmp{background:#e6eef5}
table.fo-grid td.fo-td{text-align:right;font-variant-numeric:tabular-nums;cursor:cell}
table.fo-grid td.fo-td:hover{outline:2px solid #b9d2ee;outline-offset:-2px}
td.fo-vuota{color:#c2c8d0}
td.fo-tot,th.fo-tot{background:#f4f6f9;font-weight:600}
/* EVIDENZA GIALLA PERMANENTE della rettifica manuale: resta anche dopo la conferma e
   sparisce SOLO al consolidamento. Non ha nulla a che vedere con le celle x-recon della
   replica Excel (integrazione da sorgente), che restano volutamente NON gialle. */
td.fo-rettificata{background:#fff3b0 !important;box-shadow:inset 0 0 0 1px #e0c65a}
/* mese PARZIALE: visibile ma NON calcolato */
td.fo-parziale{background:repeating-linear-gradient(45deg,#f6f6f6,#f6f6f6 4px,#e9e9e9 4px,#e9e9e9 8px);
  color:#8a8a8a;font-style:italic}
td.fo-approvato{background:#ddf3dd}
td.fo-da-prev{background:#f2f7fd;color:#2c5b8a}
.fo-approva{margin-left:6px;border:0;background:#1d6b32;color:#fff;border-radius:4px;
  font-size:11px;padding:0 5px;cursor:pointer;line-height:16px}
.fo-resize{position:absolute;top:0;right:0;width:6px;height:100%;cursor:col-resize;user-select:none}
.fo-caricamento{color:#667;font-size:13px;padding:10px}

/* ------------------------------------------------------------------- modali F3 */
.fo-modal{position:fixed;inset:0;background:rgba(20,30,45,.45);z-index:9000;
  display:flex;align-items:flex-start;justify-content:center;padding:36px 12px;overflow:auto}
.fo-modal.hidden{display:none}
.fo-modal-box{background:#fff;border-radius:10px;padding:18px 20px;max-width:620px;width:100%;
  box-shadow:0 12px 40px rgba(0,0,0,.28)}
.fo-modal-box.large{max-width:1000px}
.fo-modal-box h3{margin:0 0 6px;color:#1f4e79}
.fo-modal-box h4{margin:14px 0 4px;font-size:13px;color:#556}
.fo-modal-box .fo-lab{display:block;margin:8px 0;font-size:13px;color:#445}
.fo-modal-box .fo-lab input{display:block;width:100%;padding:6px 8px;margin-top:3px;
  border:1px solid #ccd3dc;border-radius:6px;font-size:14px}
.fo-modal-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}
.fo-hint{font-size:12.5px;color:#667;margin:4px 0 8px}
.fo-avviso{color:#8a6100;font-size:12.5px}
.fo-cella-info{font-size:13px;color:#334;background:#f7f9fb;border-radius:6px;padding:8px;margin-bottom:6px}
.fo-badge-giallo{background:#fff3b0;border:1px solid #e0c65a;border-radius:4px;padding:0 5px;font-size:11px}
.fo-storico{max-height:170px;overflow:auto;font-size:12px;color:#556;
  border:1px solid #eceff3;border-radius:6px;padding:6px}
.fo-storico-riga{padding:2px 0;border-bottom:1px dashed #eee}
.fo-anteprima{max-height:230px;overflow:auto;border:1px solid #eceff3;border-radius:6px}
.fo-anteprima table{width:100%;border-collapse:collapse;font-size:12px}
.fo-anteprima th,.fo-anteprima td{border-bottom:1px solid #f0f0f0;padding:3px 6px;text-align:left}
.fo-raggr-nuovo{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:8px}
.fo-raggr-nuovo input{padding:5px 7px;border:1px solid #ccd3dc;border-radius:6px;font-size:13px}
.fo-raggr-lista{max-height:340px;overflow:auto}
table.fo-raggr-tab{width:100%;border-collapse:collapse;font-size:12.5px}
table.fo-raggr-tab th,table.fo-raggr-tab td{border-bottom:1px solid #eee;padding:3px 5px}
table.fo-raggr-tab input{width:100%;padding:3px 5px;border:1px solid #dde2e9;border-radius:4px;font-size:12.5px}

.app-version{position:fixed;right:8px;bottom:6px;font-size:10.5px;color:#8a94a2;
  background:rgba(255,255,255,.9);border-radius:4px;padding:2px 6px;z-index:50;pointer-events:none}

/* --------------------------------------------------- adattamento a schermi stretti */
/* ======================= pagina BUDGET (rilievo 11 Morvillo, 08/09/2026) ======================= */
.bg-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;background:#f7f9fb;border:1px solid #e2e7ee;
  border-radius:8px;padding:8px 10px;margin-bottom:10px}
.bg-toolbar .bg-dirty{font-size:12.5px;color:#8a6100;font-weight:600}
.bg-toolbar .bg-dirty.zero{color:#667;font-weight:400}
.bg-scroll{overflow:auto;max-height:68vh;border:1px solid #dfe4ea;border-radius:8px;background:#fff}
table.bg-grid{border-collapse:separate;border-spacing:0;width:max-content;min-width:100%;font-size:13px}
table.bg-grid th,table.bg-grid td{border-right:1px solid #eceff3;border-bottom:1px solid #eceff3;padding:4px 8px;white-space:nowrap}
table.bg-grid thead th{position:sticky;top:0;z-index:3;background:#e6ecf3;color:#22405f;font-weight:600;text-align:center}
table.bg-grid th.bg-c1,table.bg-grid td.bg-c1{position:sticky;left:0;z-index:2;background:#fafbfc;text-align:left;min-width:300px;max-width:420px;white-space:normal}
table.bg-grid thead th.bg-c1{z-index:4}
table.bg-grid tr.bg-struttura td{background:#e7eef6;font-weight:700;color:var(--ini)}
table.bg-grid tr.bg-onere td{background:#f2f6fa;font-weight:600;color:#3a5670}
table.bg-grid tr.bg-conto td.bg-c1{padding-left:34px}
table.bg-grid tr.bg-onere td.bg-c1{padding-left:18px}
table.bg-grid td.bg-cell{text-align:right;font-variant-numeric:tabular-nums;min-width:120px}
table.bg-grid td.bg-cell input{width:118px;text-align:right;padding:3px 6px;border:1px solid #ccd3dc;border-radius:5px;font-size:13px;font-variant-numeric:tabular-nums}
table.bg-grid td.bg-cell input.dirty{border-color:#e0a800;background:#fff8dc}
table.bg-grid td.bg-cell input.ko{border-color:#a02a2a;background:#fdecec}
table.bg-grid td.bg-cell input:disabled{background:#f3f4f6;color:#8a94a2}
table.bg-grid td.bg-cell .bg-excel{display:block;font-size:10.5px;color:#8a6d1f}
table.bg-grid td.bg-sub{text-align:right;font-variant-numeric:tabular-nums;color:#3a5670}
/* SOTTO-CATEGORIE del budget (ibride: catalogo condiviso + locali) e righe di totale */
table.bg-grid tr.bg-sottocat td.bg-c1{padding-left:58px}
table.bg-grid tr.bg-sottocat td{background:#fbfcfe}
table.bg-grid tr.bg-sc-base td.bg-c1{font-style:italic;color:#6b7c8f}
.bg-sc-lab{font-weight:600;color:#2b4763}
.bg-sc-amb{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:9px;font-size:10px;
  text-transform:uppercase;letter-spacing:.03em}
.bg-sc-amb.condivisa{background:#dff0e0;color:#1d6b32}
.bg-sc-amb.locale{background:#fdeedd;color:#8a5a1f}
.bg-sc-cod{margin-left:6px;font-size:10.5px;color:#9aa7b5}
select.bg-sc-add{margin-left:8px;font-size:11px;max-width:230px;vertical-align:middle}
table.bg-grid tr.bg-conto.ha-sotto td.bg-tot-voce{text-align:right;font-weight:700;
  font-variant-numeric:tabular-nums;background:#f4f8fc;color:#22405f}
table.bg-grid tr.bg-tot-str td{background:#dce8f4;font-weight:700;color:#173453;
  text-align:right;font-variant-numeric:tabular-nums;border-top:2px solid #9db9d4}
table.bg-grid tr.bg-tot-str td.bg-c1{text-align:left}
table.bg-grid tfoot tr.bg-tot-gen td{background:#cfe0f0;font-weight:800;color:#12314f;
  text-align:right;font-variant-numeric:tabular-nums}
table.bg-grid tfoot tr.bg-tot-gen td.bg-c1{text-align:left}
.bg-rev{max-height:60vh;overflow:auto}
.bg-rev table{width:100%;border-collapse:collapse;font-size:12px;margin:6px 0 14px}
.bg-rev th,.bg-rev td{border-bottom:1px solid #e6ebf1;padding:4px 6px;text-align:left}
.bg-rev-tit{margin:14px 0 4px;font-size:13px;color:#22405f}
.bg-rev-dupl{border:1px solid #f0d9b8;background:#fffaf2;border-radius:6px;padding:8px 10px;margin:6px 0}
.bg-rev-dupl button{margin-top:6px}
table.bg-grid tfoot td{position:sticky;bottom:0;background:#eef2f7;font-weight:700;z-index:2;text-align:right}
table.bg-grid tfoot td.bg-c1{text-align:left}
/* LE TRE MIGLIORIE DELLA PAGINA BUDGET (22/09/2026). La freccia e' l'unico punto che apre e
   chiude (punto 1): da qui in poi e' un tasto vero, si vede che lo e' e si raggiunge da tastiera.
   Il cursore «mano» e' stato tolto dalla riga, che non e' piu' cliccabile. */
.bg-tog{display:inline-block;width:18px;color:#3a5670;font-size:12px;cursor:pointer;text-align:center;border-radius:4px;line-height:16px;user-select:none}
.bg-tog:hover{background:#cfdceb;color:var(--ini)}
.bg-tog:focus-visible{outline:2px solid var(--ini);outline-offset:1px}
/* punto 3: la societa' che contabilizza la struttura, accanto al nome */
.bg-soc{margin-left:8px;font-size:11px;font-weight:400;color:#5a6875;white-space:nowrap}
.bg-soc::before{content:"· "}
/* punto 2: un blocco chiuso lo dice a chiare lettere — non e' una struttura vuota */
.bg-chiuso{margin-left:8px;font-size:11px;font-weight:600;color:#8a5a00;background:#fff4d6;border:1px solid #e8d08a;border-radius:4px;padding:1px 6px;white-space:nowrap}
/* punto 2: «Apri tutto» era un tasto scolorito come gli altri dodici della barra */
#bgApriTutti{background:var(--ini);color:#fff;border-color:var(--ini);font-weight:600}
#bgApriTutti:hover{filter:brightness(1.12)}
.bg-doc{margin-left:8px;font-size:11.5px;color:var(--ini2);border:1px solid #cfe0ec;background:#fff;border-radius:10px;padding:1px 8px;cursor:pointer;white-space:nowrap}
.bg-doc:hover{background:#eaf2f8}
.bg-doc.has{background:#e6f4e6;border-color:#b8ddb9;color:#1e5720}
.bg-meta{font-size:10.5px;color:#7a8798;display:block}
.bg-doclist{max-height:280px;overflow:auto;border:1px solid #eceff3;border-radius:6px;margin:6px 0}
.bg-doclist table{width:100%;border-collapse:collapse;font-size:12.5px}
.bg-doclist th,.bg-doclist td{border-bottom:1px solid #f0f0f0;padding:4px 6px;text-align:left;vertical-align:top}
.bg-upload{display:grid;grid-template-columns:repeat(2,1fr);gap:8px 12px;background:#f7f9fb;border:1px solid #e2e7ee;border-radius:8px;padding:10px}
.bg-upload label{display:flex;flex-direction:column;font-size:12px;color:#54636e;gap:3px}
.bg-upload input,.bg-upload select{padding:5px 7px;border:1px solid #ccd3dc;border-radius:6px;font-size:13px}
.bg-upload .full{grid-column:1/-1}
.bg-storico{max-height:200px;overflow:auto;font-size:12px;color:#556;border:1px solid #eceff3;border-radius:6px;padding:6px;margin-top:8px}
.bg-tipo{font-size:10.5px;padding:1px 6px;border-radius:8px;background:#e3eaef;color:#41525d;text-transform:uppercase}
.bg-tipo.delibera{background:#dbeafe;color:#1e3a8a}
.bg-tipo.contratto{background:#dcfce7;color:#14532d}
@media (max-width:900px){
  .bg-upload{grid-template-columns:1fr}
  table.bg-grid th.bg-c1,table.bg-grid td.bg-c1{min-width:200px}
}
.fm-fo-wrap{margin-top:18px}
.fm-fo-wrap h3{color:var(--ini);font-size:15px;margin:10px 0 6px}

@media (max-width:900px){
  .fo-toolbar{gap:6px}
  table.fo-grid .fo-c3{min-width:100px;max-width:150px}
  table.fo-grid .fo-c4{min-width:70px;max-width:110px}
  table.fo-grid .fo-c5{min-width:140px;max-width:190px}
  .fo-scroll{max-height:56vh}
  .fo-modal-box{padding:14px}
}
@media (max-width:430px){
  .fogli-subtabs .subtab{padding:6px 9px;font-size:12.5px}
  .fo-toolbar{padding:6px}
  .fo-toolbar .fo-sel,.btn-sm{font-size:12px}
  table.fo-grid{font-size:11.5px}
  table.fo-grid th,table.fo-grid td{padding:4px 5px}
  table.fo-grid .fo-c2{min-width:44px;max-width:54px}
  table.fo-grid .fo-c3{min-width:90px;max-width:120px;white-space:normal}
  table.fo-grid .fo-c4{min-width:60px;max-width:90px}
  table.fo-grid .fo-c5{min-width:112px;max-width:136px;white-space:normal}
  .fo-riga-meta{font-size:9.5px}
  .fo-legenda{gap:8px;font-size:11px}
  .fo-leg{max-width:100%}
  .fo-alert-riga{font-size:12px}
  .fo-alert-act{margin-left:0}
  .app-version{font-size:9px}
}

/* ======================= PANORAMICA — tabella a tre livelli (08/09/2026) =======================
   Riusa il linguaggio visivo dei Fogli (fo-grid, fo-grp-head, fo-tot-str, intestazione
   congelata): qui ci sono solo le poche regole che i Fogli non hanno — micro-barra dello
   scostamento, indentazione dei tre livelli, dettaglio mensile espanso sotto la riga. */
.pa-tabella{margin:22px 0 10px}
.pa-toolbar{display:flex;align-items:center;gap:8px;flex-wrap:wrap;margin:6px 0 8px}
.pa-legenda{display:flex;gap:14px;flex-wrap:wrap;font-size:12px;color:#5a6b78;margin-left:auto}
.pa-leg-item{display:inline-flex;align-items:center;gap:5px}
.pa-leg-bar{display:inline-block;width:26px;height:7px;border-radius:3px}
.pa-leg-bar.neg{background:#e2a0a3}
.pa-leg-bar.pos{background:#9ccfa8}
.pa-leg-att{border-left:3px solid #a4262c;padding-left:6px}
.pa-leg-rett{display:inline-block;font-size:12px;color:#7a6200;background:#fff3b0;
  border:1px solid #e0c65a;border-radius:6px;padding:2px 8px;margin:4px 0 0}
.pa-scroll{max-height:70vh}
table.pa-grid{width:100%;min-width:720px}
table.pa-grid .pa-c1{left:0;min-width:280px;max-width:520px}
table.pa-grid th.pa-th-ord{cursor:pointer;user-select:none;text-align:right;min-width:132px}
table.pa-grid th.pa-c1{cursor:pointer;user-select:none}
table.pa-grid th.pa-th-ord:focus,table.pa-grid th.pa-c1:focus{outline:2px solid #2f6fa8;outline-offset:-2px}
.pa-ord-off{color:#9aa8b6;font-size:11px}
.pa-ord-on{color:#12628f;font-size:11px}
table.pa-grid td.pa-num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap}
table.pa-grid tr.pa-l2 td.pa-c1{padding-left:26px}
table.pa-grid tr.pa-l3 td.pa-c1{padding-left:46px;font-weight:400}
table.pa-grid tr.pa-l2 td{background:#e9f0f7;font-weight:600}
table.pa-grid tr.pa-l3 td{background:#fff}
table.pa-grid tr.pa-l3:hover td{background:#f4f8fc}
.pa-ind1{border-left:3px solid #cfe0f0}
.pa-ind2{border-left:3px solid #e6eef5}
.pa-conto{font-weight:600;color:#243b53}
/* --- GERARCHIA A SEI LIVELLI (documento cliente 10/09/2026) ---------------------------
   Gruppo > Societa' > Struttura > Onere > Conto aggregato > Conto di contabilita' generale.
   Il rientro cresce di 20px per livello e il fondo si schiarisce scendendo: la profondita'
   si legge senza contare le frecce. La SOCIETA' e' l'unico livello con fondo scuro e testo
   chiaro, perche' e' il cappello di tutto il blocco. */
table.pa-grid tr.pa-soc td{background:#12628f;color:#fff;font-weight:700}
table.pa-grid tr.pa-soc:hover td{background:#0f5679}
table.pa-grid tr.pa-soc td.pa-c1{padding-left:8px}
table.pa-grid tr.pa-soc .fo-subtot-n,table.pa-grid tr.pa-soc .pa-mtog{color:#dbeafe}
table.pa-grid tr.pa-soc .fo-tog{color:#fff}
.pa-azi{display:inline-block;margin-left:6px;padding:1px 6px;border-radius:9px;
  background:rgba(255,255,255,.18);font-size:11px;font-variant-numeric:tabular-nums}
table.pa-grid tr.pa-l1 td.pa-c1{padding-left:22px}
table.pa-grid tr.pa-l4 td.pa-c1{padding-left:66px;font-weight:400}
table.pa-grid tr.pa-l4 td{background:#f7fafc;color:#40566b}
table.pa-grid tr.pa-l4:hover td{background:#eef4f9}
table.pa-grid tr.pa-l4-somma td{background:#eef4f9;font-style:italic}
.pa-ind3{border-left:3px solid #f0f4f8}
.pa-codice{font-family:ui-monospace,"Cascadia Mono",Consolas,monospace;font-size:12px;
  font-weight:600;color:#2f6fa8}
.pa-apribile{cursor:pointer}
table.pa-grid td.pa-vuoto{color:#b6c2ce}
.pa-scarto{color:#a4262c;font-size:11px}
.pa-quadra{color:#1d6b32;font-size:11px}
table.pa-grid td.pa-delta.pa-neg .pa-dv,table.pa-grid td.pa-deltapct.pa-neg{color:#a4262c;font-weight:600}
table.pa-grid td.pa-delta.pa-pos .pa-dv,table.pa-grid td.pa-deltapct.pa-pos{color:#1d6b32;font-weight:600}
table.pa-grid td.pa-attenzione{box-shadow:inset 3px 0 0 currentColor}
/* micro-barra proporzionale: colpo d'occhio sugli scostamenti grossi, il numero resta accanto */
.pa-bar{display:inline-block;width:56px;height:7px;background:#eef1f4;border-radius:3px;
  margin-right:7px;vertical-align:middle;overflow:hidden}
.pa-bar i{display:block;height:100%;border-radius:3px}
.pa-bar i.neg{background:#d9787c}
.pa-bar i.pos{background:#5fa876}
.pa-mtog{margin-left:8px;border:1px solid #c6d2de;background:#fff;color:#2f6fa8;border-radius:6px;
  font-size:11px;padding:1px 6px;cursor:pointer}
.pa-mtog:hover{background:#eaf2fa}
tr.pa-mesi td{background:#fbfcfe !important;padding:0 !important}
.pa-mesi-box,.pa-mesi-fuori{overflow:auto;padding:8px 10px}
table.pa-mesi-tab{border-collapse:collapse;font-size:12px;width:max-content;min-width:100%}
table.pa-mesi-tab caption{text-align:left;font-size:11.5px;color:#5a6b78;padding:0 0 5px}
table.pa-mesi-tab th,table.pa-mesi-tab td{border:1px solid #e4e9ee;padding:3px 8px;white-space:nowrap}
table.pa-mesi-tab thead th{background:#eef2f7;color:#22405f;font-weight:600;text-align:center}
table.pa-mesi-tab .pa-mlab{background:#f6f8fa;text-align:left;font-weight:600;color:#33414f}
table.pa-mesi-tab .pa-mlab-consuntivo{border-left:3px solid var(--col-consuntivo)}
table.pa-mesi-tab .pa-mlab-previsionale{border-left:3px solid var(--col-previsionale)}
table.pa-mesi-tab td.pa-mnum{text-align:right;font-variant-numeric:tabular-nums}
table.pa-mesi-tab tr.pa-mrow-delta td{font-weight:600}
table.pa-mesi-tab td.pa-neg{color:#a4262c}
table.pa-mesi-tab td.pa-pos{color:#1d6b32}
.pa-vuota{color:#6b7784;font-style:italic;padding:12px 4px}
@media (max-width:900px){
  .pa-legenda{margin-left:0}
  table.pa-grid{min-width:560px}
  table.pa-grid .pa-c1{min-width:180px}
  table.pa-grid th.pa-th-ord{min-width:96px;font-size:12px}
  .pa-bar{width:28px}
}


/* ---- interruttore EXTRACONTABILI (non bollate) — brief JM 09/09/2026 ----------------
   Non e' un filtro di perimetro ma un cambio della regola di calcolo: deve restare
   visibile e, quando e' acceso, dichiararsi con una fascia che non si puo' non vedere. */
.f-extra{display:inline-flex;align-items:center;gap:.5rem;margin:.6rem 0 .2rem;padding:.4rem .7rem;
  border:1px solid #c9d4e2;border-radius:6px;background:#f6f9fc;font-size:.92rem;cursor:pointer}
.f-extra input{width:1rem;height:1rem;cursor:pointer}
.f-extra .f-extra-testo{font-weight:600;color:#243b53}
.f-extra.attivo{border-color:#b8860b;background:#fdf6e3}
.extra-banner{margin:.5rem 0 0;padding:.55rem .8rem;border-left:4px solid #b8860b;
  background:#fdf6e3;color:#5c4405;border-radius:4px;font-size:.9rem}
.extra-banner[hidden]{display:none}

/* ---- salvataggio della rettifica manuale SENZA ricarica (brief JM 10/09/2026) ----
   Segnale discreto sulla cella appena salvata: alone verde che sfuma da solo, cosi'
   l'operatore vede l'esito senza perdere il punto in cui stava lavorando. */
@keyframes fo-salvata-fade{
  0%  {box-shadow:inset 0 0 0 2px #1a7f37;background:#d8f3e0}
  70% {box-shadow:inset 0 0 0 2px #1a7f37;background:#e9f9ef}
  100%{box-shadow:none;background:inherit}
}
td.fo-salvata{animation:fo-salvata-fade 2.2s ease-out 1}
@media (prefers-reduced-motion: reduce){
  td.fo-salvata{animation:none;box-shadow:inset 0 0 0 2px #1a7f37}
}
/* Esito dentro il modale della cella: l'avviso in cima alla pagina non si vedrebbe. */
.fo-cella-esito{font-size:13px;border-radius:6px;padding:8px 10px;margin:6px 0;
  display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.fo-cella-esito.hidden{display:none}
.fo-cella-esito-txt{flex:1 1 auto}
.fo-cella-esito.info{background:#eef4fb;color:#234;border:1px solid #cfe0f2}
.fo-cella-esito.ok{background:#e9f9ef;color:#14532d;border:1px solid #a7dfbc}
.fo-cella-esito.ko{background:#fdecec;color:#8a1c1c;border:1px solid #f3bcbc}


/* ============================================================================
   RAGGRUPPAMENTI A TRE LIVELLI — Onere > Raggruppamento conto > Conti di
   contabilita' generale (documento cliente 10/09/2026).
   ============================================================================ */

/* --- terzo livello dentro le tabelle dei Fogli --- */
.fo-dett-tog {
  background: none; border: 0; cursor: pointer; padding: 0 4px 0 0;
  font-size: .85em; line-height: 1; color: var(--muted, #6b7280);
}
.fo-dett-tog:hover { color: var(--fg, #111); }
.fo-dett-tog:focus-visible { outline: 2px solid var(--accent, #2b6cb0); outline-offset: 1px; }
.fo-dett-vuoto { display: inline-block; width: 14px; }
.fo-riga-ncg {
  display: inline-block; margin-left: 6px; padding: 0 5px; border-radius: 8px;
  font-size: .72em; background: rgba(43,108,176,.10); color: var(--accent, #2b6cb0);
  vertical-align: middle;
}
tr.fo-riga-cg > td { background: rgba(0,0,0,.025); font-size: .92em; }
tr.fo-riga-cg .fo-cel-cg { padding-left: 26px; }
tr.fo-riga-cg .fo-cg-cod {
  font-family: ui-monospace, "Cascadia Mono", Consolas, monospace; font-size: .9em;
  color: var(--muted, #6b7280); margin-right: 8px;
}
tr.fo-riga-cg .fo-cg-descr { color: var(--fg, #111); }
tr.fo-riga-cg .fo-td-cg { color: #374151; }
tr.fo-cg-nota > td { font-style: italic; color: var(--muted, #6b7280); font-size: .9em; }

/* --- pannello Raggruppamenti --- */
.fo-rg-onere-blocco { margin: 0 0 14px; }
.fo-rg-onere-tit {
  margin: 0 0 6px; padding: 4px 8px; border-radius: 5px;
  background: rgba(43,108,176,.10); font-size: .95rem;
}
.fo-rg-conta { font-weight: 400; font-size: .8em; color: var(--muted, #6b7280); }
table.fo-rg-tab { width: 100%; border-collapse: collapse; }
table.fo-rg-tab > thead th {
  text-align: left; font-size: .78rem; text-transform: uppercase;
  letter-spacing: .03em; color: var(--muted, #6b7280); padding: 2px 4px;
  border-bottom: 1px solid rgba(0,0,0,.12);
}
table.fo-rg-tab td { padding: 2px 4px; vertical-align: middle; }
table.fo-rg-tab input { width: 100%; box-sizing: border-box; }
.fo-rg-tog button {
  background: none; border: 0; cursor: pointer; font-size: .9em;
  color: var(--muted, #6b7280); padding: 0 2px;
}
.fo-rg-tog button:focus-visible { outline: 2px solid var(--accent, #2b6cb0); }
.fo-rg-ord input { max-width: 60px; }
.fo-rg-n { white-space: nowrap; font-size: .8em; color: var(--muted, #6b7280); }
.fo-rg-az { white-space: nowrap; }
tr.fo-rg-figli > td { padding: 2px 4px 10px 26px; }
table.fo-rg-cgtab { width: 100%; border-collapse: collapse; background: rgba(0,0,0,.02); }
table.fo-rg-cgtab th {
  text-align: left; font-size: .72rem; text-transform: uppercase; letter-spacing: .03em;
  color: var(--muted, #6b7280); padding: 2px 6px;
}
table.fo-rg-cgtab td { padding: 2px 6px; font-size: .88rem; }
table.fo-rg-cgtab .fo-rg-cod {
  font-family: ui-monospace, "Cascadia Mono", Consolas, monospace; white-space: nowrap;
}
table.fo-rg-cgtab select { max-width: 260px; }
.fo-rg-orfani .fo-rg-onere-tit { background: rgba(200,30,30,.12); }
.fo-rg-vuoto td { font-style: italic; color: var(--muted, #6b7280); }
.fo-raggr-nuovo select { min-width: 150px; }

@media (max-width: 700px) {
  table.fo-rg-cgtab select { max-width: 100%; }
  tr.fo-rg-figli > td { padding-left: 8px; }
  .fo-raggr-nuovo { flex-wrap: wrap; }
}

/* Su schermo stretto (375px) il pannello dei raggruppamenti non si taglia: scorre in
   orizzontale dentro il suo riquadro, come gia' fanno le tabelle dei Fogli. */
.fo-rg-scroll { overflow-x: auto; -webkit-overflow-scrolling: touch; }
.fo-rg-scroll > table.fo-rg-tab { min-width: 520px; }
.fo-rg-scroll > table.fo-rg-cgtab { min-width: 460px; }
tr.fo-rg-figli > td > table.fo-rg-cgtab { min-width: 440px; }

/* ======================= ONDATA 2 — cinque schede e viste di secondo livello =======================
   Il menu di primo livello (.tabs) ha cinque voci sole; sotto compare la riga delle VISTE
   della scheda aperta. E' volutamente piu' leggera del menu: deve leggersi come "dentro
   questa scheda", non come un secondo menu di pari grado. */
.subtabs-nav{display:flex;flex-wrap:wrap;gap:6px;background:#eef3f7;border-bottom:1px solid #d7e0e8;
  padding:8px calc(5vw);}
.subtabs-nav[hidden]{display:none}
.subtabs-nav .subtab{background:#fff;border:1px solid #cdd8e1;border-radius:999px;
  padding:5px 14px;font-size:12.5px;color:#34505f;cursor:pointer;line-height:1.5}
.subtabs-nav .subtab:hover{border-color:#8fb0c6;color:#0b3d5c}
.subtabs-nav .subtab.active{background:#0b3d5c;border-color:#0b3d5c;color:#fff;font-weight:600}

/* Criterio del FORECAST: sta sotto la barra dei filtri e si vede solo quando il tipo dato
   forecast e' attivo. Colore del forecast (giallo/ambra), come nelle legende dei grafici. */
.forecast-criterio{margin:6px 2px 0;font-size:12.5px;color:#5a4210;background:#fff8e8;
  border-left:3px solid #f0b429;padding:7px 10px;border-radius:0 6px 6px 0}
.forecast-criterio[hidden]{display:none}
.badge.fore{background:#fdf1cd;color:#7a5a06}

/* Subtotali per periodo */
.subtot-box{background:#fff;border-radius:10px;padding:14px 16px;margin-bottom:14px;
  box-shadow:0 2px 6px rgba(20,60,90,.06);overflow:hidden;min-width:0}
.subtot-box h3{margin:0 0 6px;font-size:14px;color:var(--ini)}
.subtot-box[hidden]{display:none}

/* SOCIETA': la ragione sociale si legge PER ESTESO. Nessun troncamento, nessun ellissi:
   va a capo dentro la cella (decisione del committente del 10/09/2026). */
.soc-cell{display:inline-block;white-space:normal;word-break:break-word;max-width:26em;line-height:1.35}
td .soc-cell{font-size:12.5px}

@media (max-width:820px){
  .subtabs-nav{padding:7px 12px}
  .subtabs-nav .subtab{padding:5px 10px;font-size:12px}
  .soc-cell{max-width:none}
}

/* scarto fra le due basi, dichiarato dentro il riquadro del criterio forecast */
.forecast-criterio .fc-scarto{display:inline-block;margin-top:4px;color:#6b5220;font-size:12px}

/* il riquadro del grafico quando non ha nulla da disegnare: niente cornice vuota */
.chart-box.chart-vuoto canvas{display:none}
.chart-box .box-nd{margin:6px 0 0;font-size:13px}

/* Registro import previsionale — presidio anti-doppio caricamento (10/09/2026) */
.fo-storico-annullato { opacity: .55; text-decoration: line-through; }
.fo-mini {
  font-size: 11px; padding: 1px 6px; margin-left: 6px; cursor: pointer;
  border: 1px solid var(--bordo, #c9ced6); border-radius: 4px; background: #fff;
}
.fo-mini:hover { background: #f3f5f8; }

/* ====== CONTO ECONOMICO — pagina 1 (ondata 1, 13/09/2026) ======
   Classi tutte con prefisso `ce-`: non toccano nessuno stile delle pagine esistenti. */
.ce-sintesi{display:flex;flex-wrap:wrap;gap:.5rem;margin:.6rem 0}
.ce-kpi{background:#f4f6f9;border:1px solid #e0e5ec;border-radius:6px;padding:.35rem .6rem;font-size:.9rem}
.ce-kpi b{display:block;font-size:.75rem;color:#5a6472;font-weight:600}
.ce-kpi-forte{background:#eef6ee;border-color:#cfe3cf}
#ceTabella .ce-c1{min-width:16.5rem;text-align:left}
#ceTabella tr.ce-macro td{background:#eceff4;font-weight:700}
#ceTabella tr.ce-cat td{background:#f7f9fc;font-weight:600}
#ceTabella tr.ce-cat.ce-fuori td{color:#6b7280;font-style:italic}
#ceTabella tr.ce-voce td.ce-c1{padding-left:2rem}
#ceTabella tr.ce-sep td{border:0;height:.6rem;background:transparent}
#ceTabella tr.ce-tot td{font-weight:600;background:#fafbfc}
#ceTabella tr.ce-margine td{font-weight:700;background:#eef6ee;border-top:2px solid #cfe3cf}
#ceTabella tr.ce-netto td{border-top:2px solid #d5dae1}
/* «Conto economico riclassificato» (20/09/2026): stessa resa dei margini del Conto economico
   (.ce-margine), piu' l'Utile netto in massimo rilievo (.ce-finale, oro) — e' la ragione
   per cui la pagina esiste, deve staccarsi da tutto il resto. */
#cerTabella{font-size:.92em}
#cerTabella td:first-child{text-align:left}
#cerTabella tr.ce-margine td{font-weight:700;background:#eef6ee;border-top:2px solid #cfe3cf}
#cerTabella tr.ce-finale td{font-weight:800;background:#fbf1d2;border-top:3px double #cbab4a;font-size:1.05em}
#cerTabella tr.ce-riclass-conti-wrap td{padding:0;background:#fafbfd}
.ce-riclass-subtbl{width:100%;border-collapse:collapse}
.ce-riclass-subtbl td{padding:.25rem 1.6rem;border-bottom:1px dashed #e2e6eb;color:#374151;font-size:.92em}
.ce-riclass-apri{border:0;background:none;cursor:pointer;font-size:.8em;padding:0 .3rem 0 0;color:#475569}
.ce-riclass-quadra{margin:.6rem 0;padding:.5rem .8rem;border-radius:6px;font-size:13px;font-weight:600}
.ce-riclass-quadra.ok{background:#eaf6ec;border-left:4px solid #2e7d32;color:#1b5e20}
.ce-riclass-quadra.ko{background:#fdecea;border-left:4px solid #b71c1c;color:#7f1d1d}
.ce-riclass-quadra.hidden{display:none}
.ce-exp,.ce-exp-g,.ce-exp-m,.ce-drill{border:1px solid #cbd2db;background:#fff;border-radius:4px;cursor:pointer;
  width:1.4rem;height:1.4rem;line-height:1;padding:0;font-size:.85rem}
.ce-tag{font-size:.7rem;background:#fdf3e3;border:1px solid #ecd9b5;border-radius:4px;padding:0 .3rem}
/* Albero a tre gradini (16/09/2026): il rientro dice il livello, il fondo dice il subtotale. */
#ceTabella tr.ce-gruppo td{background:#f1f4f8;font-weight:700}
#ceTabella tr.ce-gruppo td.ce-c1{padding-left:1.1rem}
#ceTabella tr.ce-cat.ce-l2 td.ce-c1{padding-left:1.1rem}
#ceTabella tr.ce-cat.ce-l3 td.ce-c1{padding-left:2.2rem}
#ceTabella tr.ce-cat.ce-l3 td{background:#fafbfd}
#ceTabella tr.ce-voce.ce-l3 td.ce-c1{padding-left:2.9rem}
#ceTabella tr.ce-voce.ce-l4 td.ce-c1{padding-left:4rem}
/* «Forecast del conto economico» (3.15.6, ex «Previsionale»): stesso albero, stessa resa. */
/* 15 colonne numeriche (due piu' del Conto economico): la prima colonna va a capo prima,
   cosi' a 1920 px Previsto, Consuntivo e Scarto restano in vista senza scorrere (3.15.7). */
#cepTabella{font-size:.88em}
#cepTabella .ce-c1{min-width:12rem;text-align:left}
#cepTabella tr.ce-macro td{background:#eceff4;font-weight:700}
#cepTabella tr.ce-cat td{background:#f7f9fc;font-weight:600}
#cepTabella tr.ce-cat.ce-fuori td{color:#6b7280;font-style:italic}
#cepTabella tr.ce-voce td.ce-c1{padding-left:2rem}
#cepTabella tr.ce-sep td{border:0;height:.6rem;background:transparent}
#cepTabella tr.ce-tot td{font-weight:600;background:#fafbfc}
#cepTabella tr.ce-margine td{font-weight:700;background:#eef6ee;border-top:2px solid #cfe3cf}
#cepTabella tr.ce-netto td{border-top:2px solid #d5dae1}
#cepTabella tr.ce-gruppo td{background:#f1f4f8;font-weight:700}
#cepTabella tr.ce-gruppo td.ce-c1{padding-left:1.1rem}
#cepTabella tr.ce-cat.ce-l2 td.ce-c1{padding-left:1.1rem}
#cepTabella tr.ce-cat.ce-l3 td.ce-c1{padding-left:2.2rem}
#cepTabella tr.ce-cat.ce-l3 td{background:#fafbfd}
#cepTabella tr.ce-voce.ce-l3 td.ce-c1{padding-left:2.9rem}
#cepTabella tr.ce-voce.ce-l4 td.ce-c1{padding-left:4rem}
/* 3.15.8 — spunte di selezione, voci fuori dai conti, mesi confermati e metodo */
#cepTabella input.cep-sel{width:13px;height:13px;margin:0 .3rem 0 0;vertical-align:-2px;cursor:pointer}
#cepTabella input.cep-sel:disabled{cursor:not-allowed}
#cepTabella tr.cep-esclusa td{color:#9aa1ab;background:#fbfbfb}
#cepTabella tr.cep-esclusa td:not(.ce-c1):not(.ce-dim){text-decoration:line-through;text-decoration-color:#c7ccd3}
.cep-tag-escl{background:#fff1e6;color:#9a4b12;border-color:#f3c9a6}
.cep-metodo-box{margin:.6rem 0 .4rem;padding:.6rem .8rem;border:1px solid #dfe4ea;border-radius:8px;background:#fbfcfe}
.cep-metodo-box .fgrid{margin-bottom:.4rem}
/* la casella dei mesi confermati cresce in altezza invece di debordare sulle righe sotto */
#cepMetodoBox .fgrid .chipsel{height:auto;min-height:38px;padding:4px 26px 4px 8px}
#cepMetodoBox .chipsel .cs-chip b{max-width:4em}
.cep-imp-riga,.cep-sel-riga{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem;margin:.25rem 0}
.cep-sel-tit{font-weight:600}
.cep-storico{max-height:14rem;overflow:auto;font-size:.85em;margin-top:.4rem;padding:.4rem .6rem;border:1px solid #e5e7eb;border-radius:6px;background:#fff}
@media(max-width:560px){.cep-imp-riga,.cep-sel-riga{flex-direction:column;align-items:stretch}}
/* pagina aggregata: colonna dell'anno in corso = forecast, dettaglio di «altri ricavi» */
.agg-fc{display:inline-block;margin-left:.3rem;padding:0 .35rem;border-radius:4px;background:#e7f0fb;color:#1d4f8a;font-size:.75em;font-weight:600}
.agg-tbl tr.agg-dett td{font-size:.85em;color:#374151;background:#fafbfd}
.agg-tbl tr.agg-dett td.agg-dett-voce{padding-left:1.6rem}
.agg-tbl tr.agg-dett.agg-dett-fuori td{color:#8a929c;font-style:italic}
.agg-tbl .agg-dett-tog{margin-left:.35rem;font-size:.8em;padding:0 .35rem;cursor:pointer;border:1px solid #cbd5e1;border-radius:4px;background:#fff}
/* RICHIESTA 2 del documento «DCG 20-09-26» (JM, 20/09/2026): il dettaglio del Forecast si apre
   e si chiude cliccando la VOCE («altri ricavi», «Costi della produzione»), non piu' da una riga
   in piu' che a tabella chiusa sembrava una riga vuota. La voce deve dunque VEDERSI che e' un
   tasto: puntatore a mano, sfondo che risponde al passaggio, indicatore ▸/▾ che gira. */
.agg-tbl th.agg-voce.agg-voce-apri{cursor:pointer;user-select:none}
.agg-tbl th.agg-voce.agg-voce-apri:hover{background:#eaf2fa;color:var(--ini)}
.agg-tbl th.agg-voce.agg-voce-apri:focus-visible{outline:2px solid var(--ini2);outline-offset:-2px}
.agg-tbl th.agg-voce.agg-voce-apri.aperta{background:#e7f0fb;color:var(--ini);font-weight:600}
.agg-tbl th.agg-voce.agg-voce-apri .agg-apribile-ind{color:var(--ini2);font-weight:700}
tbody.agg-totale th.agg-voce.agg-voce-apri:hover{background:#e3edf6}
tbody.agg-totale th.agg-voce.agg-voce-apri.aperta{background:#dfeaf6}
/* righe di QUADRATURA (20/09/2026): il «di cui» sotto «Costi della produzione». Non sono
   addendi del prospetto — la riga madre li contiene gia' — quindi niente grassetto e
   niente sfondo da riga vera: corsivo grigio, rientrate, come una nota di lettura. */
.agg-tbl tr.agg-quadratura th.agg-voce,.agg-tbl tr.agg-quadratura td{background:#fafbfd;
  font-size:.85em;font-style:italic;color:#4b5563;font-weight:400}
.agg-tbl tr.agg-quadratura th.agg-voce{padding-left:1.6rem}
tbody.agg-totale tr.agg-quadratura th.agg-voce,tbody.agg-totale tr.agg-quadratura td{background:#f2f4f8}
.agg-provenienza{font-size:.9em}
.agg-tbl th.agg-perimetro.agg-per-aperto{vertical-align:top;padding-top:.6rem}
.agg-provenienza li{margin:.15rem 0}
.ce-tag-liv{background:#eef2f7;border-color:#d5dce6;color:#4b5563;font-weight:500}
.ce-livelli{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .5rem;margin:.2rem 0 .5rem}
.ce-livelli-tit{font-size:.85rem;font-weight:600;color:#374151}
.ce-livelli button{border:1px solid #cbd2db;background:#fff;border-radius:4px;cursor:pointer;
  padding:.2rem .6rem;font-size:.85rem}
.ce-livelli button.attivo{background:#0b1f3a;border-color:#0b1f3a;color:#fff}
.ce-livelli-nota{font-size:.78rem}
@media(max-width:560px){.ce-livelli-nota{flex-basis:100%}}
#ceDrill h3{margin-top:1.2rem}
#ceDrill h4{margin:.8rem 0 .3rem}


/* ===== TRE MACRO-SEZIONI + voci di servizio (ondata 1-bis, 13/09/2026) ==============
   La barra ha due gruppi: a sinistra le TRE sezioni, a destra «Guida» e «Glossario e
   note», che non sono sezioni ma devono restare a un click da qualunque punto. Su
   schermo stretto i due gruppi vanno a capo INTERI, non spezzati a meta' parola: il
   nome lungo della terza sezione e' quello che, senza questa regola, rompeva il menu
   a 375 px. */
#tabsTop{display:flex;flex-wrap:wrap;align-items:center;gap:.35rem .75rem;row-gap:.4rem}
#tabsTop .tabs-macro{display:flex;flex-wrap:wrap;gap:.35rem;flex:1 1 auto;min-width:0}
#tabsTop .tabs-util{display:flex;flex-wrap:wrap;gap:.35rem;margin-left:auto;flex:0 0 auto}
#tabsTop .tab{white-space:normal;text-align:left;line-height:1.25;max-width:100%}
/* le voci di servizio si distinguono a colpo d'occhio dalle sezioni: piu' piccole,
   senza riempimento, cosi' nessuno le scambia per una quarta sezione */
#tabsTop .tab-util{font-size:.88em;font-weight:500;opacity:.85;padding-top:.35rem;padding-bottom:.35rem}
#tabsTop .tab-util.active{opacity:1}
@media (max-width:900px){
  #tabsTop .tabs-util{margin-left:0;width:100%;border-top:1px solid rgba(0,0,0,.08);padding-top:.35rem}
}
@media (max-width:420px){
  #tabsTop .tabs-macro{flex-direction:column;align-items:stretch}
  #tabsTop .tabs-macro .tab{width:100%}
}
/* rimandi della terza sezione (contenitore dichiarato, ondata 1-bis) */
.agg-rimandi{margin:.6rem 0 .8rem 1.1rem;padding:0;line-height:1.6}
.agg-rimandi li{margin:.35rem 0}

/* ---- TERZA SEZIONE, ondata 2: «Ricavi, costi operativi e margine operativo aggregato».
   Il prospetto del cliente ha tre segni grafici che vanno riprodotti, perche' sono il modo
   in cui lo legge: i negativi in rosso, il totale del Valore della produzione in evidenza,
   il margine operativo su fondo grigio. Nient'altro: nessuna colorazione decorativa. */
table.agg-tbl{width:100%;border-collapse:collapse}
table.agg-tbl th,table.agg-tbl td{border:1px solid #cfd9e2;padding:5px 9px;font-size:13px}
table.agg-tbl thead th{background:#eef3f7;text-align:center;font-weight:700}
table.agg-tbl thead th:first-child,table.agg-tbl thead th:nth-child(2){text-align:left}
th.agg-perimetro{background:#f7fafc;vertical-align:middle;text-align:center;font-weight:700;
  min-width:190px;max-width:230px;white-space:normal;line-height:1.35}
th.agg-voce{text-align:left;font-weight:500;background:#fff;white-space:nowrap}
/* indicatore discreto di apertura su "altri ricavi"/"Costi della produzione" (task 5, 18/09/2026) */
.agg-apribile-ind{color:#8a99a8;font-size:.85em}
td.agg-num{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
td.agg-num.neg{color:var(--ko);font-weight:600}
td.agg-vuoto{color:#8a99a8;text-align:right}
/* COLONNA Δ (25/09/2026, richiesta di Mario Morvillo). Una riga verticale la stacca dalle
   colonne degli anni: e' una grandezza diversa (una differenza, non un saldo) e a colpo
   d'occhio si deve vedere che la tabella finisce li'. Il colore segue il SEGNO, come gia'
   fa il resto della dashboard (`.pos`/`.neg`): non e' un giudizio di merito. */
th.agg-delta-col,td.agg-delta{border-left:2px solid #9fb3c4;background:#fbfcfe}
td.agg-delta{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
td.agg-delta.pos{color:var(--ok);font-weight:600}
td.agg-delta.neg{color:var(--ko);font-weight:600}
.agg-delta-pct{font-size:.85em;font-weight:400}
tr.agg-margine td.agg-delta{background:#d9d9d9}
tr.agg-dett td.agg-delta{background:#f7f9fc}
tr.agg-budget th.agg-voce,tr.agg-budget td{font-weight:700}
tr.agg-subtotale th.agg-voce,tr.agg-subtotale td{font-weight:700;border-top:2px solid #9fb3c4}
tr.agg-margine th.agg-voce,tr.agg-margine td{background:#d9d9d9;font-weight:700;
  border-top:2px solid #7f8c99}
tbody.agg-totale th.agg-perimetro{background:#e8eef4}
tbody.agg-totale th.agg-voce,tbody.agg-totale td{background:#f4f8fb}
tbody.agg-totale tr.agg-margine th.agg-voce,tbody.agg-totale tr.agg-margine td{background:#c9c9c9}
td.agg-apri{cursor:pointer}
td.agg-apri:hover{outline:2px solid #5b9bd5;outline-offset:-2px}
.agg-ast{color:#b06a00;font-weight:700;cursor:help}
#aggDrill{margin-top:1rem;background:#fff;border-radius:10px;padding:10px;
  box-shadow:0 2px 6px rgba(20,60,90,.06)}
#agg-guida-in-pagina{margin-top:1.2rem}
@media(max-width:820px){
  table.agg-tbl th,table.agg-tbl td{font-size:12px;padding:4px 6px}
  th.agg-perimetro{min-width:110px}
  th.agg-voce{white-space:normal}
}

/* ---- 3.15.0 (call 15/09/2026) ---- */
.agg-provvisorio{margin:.6rem 0;padding:.55rem .8rem;border-left:4px solid #c98a00;background:#fff7e6;
  border-radius:6px;font-size:13px;color:#5a4300}
.agg-prov{display:inline-block;margin-left:4px;padding:0 6px;border-radius:8px;background:#fff1cc;
  color:#7a5600;font-size:11px;font-weight:600;vertical-align:middle}
/* Budget: allega per anno, elimina sotto-categoria, totali coerenti con la pagina aggregata */
table.bg-grid td.bg-cell .bg-cell-in{display:inline-flex;align-items:center;gap:3px;justify-content:flex-end}
table.bg-grid td.bg-cell input{width:110px}
.bg-doc-anno{border:1px solid #cfe0ec;background:#fff;border-radius:8px;padding:0 4px;font-size:11px;line-height:18px;
  cursor:pointer;color:#6b7c8d;min-width:22px}
.bg-doc-anno.has{background:#e9f5ec;border-color:#9fd1ad;color:#1d6b35}
.bg-doc-anno b{margin-left:1px;font-weight:700}
.bg-doc-anno:hover{border-color:var(--ini2)}
.bg-sc-del{margin-left:8px;font-size:11px;color:#a02a2a;border:1px solid #efc6c6;background:#fff;border-radius:8px;
  padding:0 6px;cursor:pointer}
.bg-sc-del:hover{background:#fdecec}
table.bg-grid tfoot tr.bg-tot-excel td{background:#f6f6f2;color:#6b5a1f;font-weight:600}
table.bg-grid tfoot tr.bg-tot-ssn td{background:#eef6ff;color:#12314f;font-weight:700}
table.bg-grid tfoot tr td.bg-c1{text-align:left}
tr.bg-doc-sel td{background:#fff7e6}
/* 3.16.0: documenti del budget separati per anno (una linguetta per anno) */
.bg-doc-anni{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin:4px 0 10px}
.bg-doc-anno-tab{border:1px solid #b8c7d3;background:#fff;color:#0b3d5c;border-radius:14px;padding:3px 12px;font-size:.9em;cursor:pointer}
.bg-doc-anno-tab b{margin-left:4px;font-weight:700}
.bg-doc-anno-tab.active{background:#0b3d5c;border-color:#0b3d5c;color:#fff}
.bg-doc-anno-tab:focus-visible{outline:2px solid #2b6cb0;outline-offset:1px}
/* note in fondo alla pagina (call 15/09/2026, punto 4) */
.note-pagina{margin-top:1.4rem;padding-top:.9rem;border-top:1px dashed #cfd9e2}
.note-pagina > *{margin-top:.6rem}
.note-fondo-globali{padding:0 5vw 1rem}
.note-fondo-globali .filtri-help,.note-fondo-globali .filtri-nota,.note-fondo-globali .forecast-criterio{font-size:12px;color:#54636e;margin:.5rem 0}
/* barre filtri DENTRO una pagina (Conto economico, Previsionale): stessa grafica della barra generale */
.panel .filtri.filtri-pagina{padding:12px 18px;border:1px solid var(--line);border-radius:10px;margin:0 0 12px}
.filtri-pagina .f-extra{margin-top:12px}
.avviso,.avviso-filtri{margin:.6rem 0;padding:.5rem .8rem;border-left:4px solid #5b9bd5;background:#f2f7fc;border-radius:6px;font-size:13px}
.avviso.hidden,.avviso-filtri.hidden{display:none}
.avviso.agg-provvisorio{border-left-color:#c98a00;background:#fff7e6;color:#5a4300}
/* Analisi con le 10 colonne della call (15/09/2026): intestazioni su due righe e micro-barre corte,
   cosi' a 1920px la tabella entra tutta senza scorrere di lato */
table.pa-grid th.pa-th-ord{min-width:88px;white-space:normal;line-height:1.2;vertical-align:bottom}
table.pa-grid th.pa-th-ord[data-tipo="pct"]{min-width:62px}
table.pa-grid .pa-c1{min-width:220px}
table.pa-grid td.pa-num{padding-left:6px;padding-right:6px}
.pa-bar{width:30px}
/* righe SOCIETA' (fondo blu scuro): gli scostamenti rossi/verdi non si leggevano, ora in tinta chiara */
table.pa-grid tr.pa-soc td.pa-delta .pa-dv,table.pa-grid tr.pa-soc td.pa-deltapct,table.pa-grid tr.pa-soc td.pa-confpct{color:#fff}
table.pa-grid tr.pa-soc td.pa-delta.pa-neg .pa-dv,table.pa-grid tr.pa-soc td.pa-deltapct.pa-neg,table.pa-grid tr.pa-soc td.pa-confpct.pa-neg{color:#ffc4c4}
table.pa-grid tr.pa-soc td.pa-delta.pa-pos .pa-dv,table.pa-grid tr.pa-soc td.pa-deltapct.pa-pos,table.pa-grid tr.pa-soc td.pa-confpct.pa-pos{color:#b8f0c4}
/* 3.15.10 — Forecast del conto economico: celle dei mesi previsti modificabili a mano
   (stesso aspetto delle celle della pagina Budget: bordo giallo = cambiata e non salvata) */
.cep-mod-riga{display:flex;flex-wrap:wrap;align-items:center;gap:.45rem;margin:.35rem 0 .15rem}
.cep-mod-riga .bg-dirty{font-size:12.5px;color:#8a6100;font-weight:600}
.cep-mod-riga .bg-dirty.zero{color:#667;font-weight:400}
.cep-legenda{display:flex;flex-wrap:wrap;gap:.3rem 1rem;font-size:.82em;margin:.2rem 0 .1rem;color:#444}
.cep-leg{display:inline-block;width:.95em;height:.95em;border-radius:3px;vertical-align:-2px;border:1px solid #c9d2dd}
.cep-leg-mod{background:#e3efff;border-color:#4a7fc1;box-shadow:inset 3px 0 0 #2f6db5}
.cep-leg-conf{background:#f1f3f5}
.cep-leg-sosp{background:#fff;border:1px dashed #b26a00}
#cepTabella td.cep-mod{background:#e3efff;box-shadow:inset 3px 0 0 #2f6db5;font-weight:600}
#cepTabella td.cep-mod-agg{background:#eef4fc;box-shadow:inset 3px 0 0 #8fb0d9}
#cepTabella td.cep-sosp{outline:1px dashed #b26a00;outline-offset:-2px}
#cepTabella.cep-edit td.cep-conf{background:#f1f3f5;color:#5d6570}
#cepTabella td.cep-in{padding:1px 2px;white-space:nowrap}
#cepTabella td.cep-in input{width:100%;min-width:0;box-sizing:border-box;text-align:right;font:inherit;
  font-variant-numeric:tabular-nums;padding:1px 3px;border:1px solid #d5dbe3;border-radius:4px;background:#fff}
#cepTabella td.cep-in.cep-mod input{background:#e3efff;border-color:#4a7fc1}
#cepTabella td.cep-in input.dirty{border-color:#e0a800;background:#fff8dc}
#cepTabella td.cep-in input.ko{border-color:#a02a2a;background:#fdecec}
#cepTabella .cep-in-box{display:flex;align-items:center;gap:1px}
#cepTabella button.cep-rip{border:0;background:none;padding:0 1px;cursor:pointer;color:#2f6db5;font-size:.9em;line-height:1}
#cepTabella button.cep-rip:hover{color:#123e73}
.cep-tag-mod{background:#e3efff;color:#1f4f8a;border-color:#a9c4e6}
@media(max-width:560px){.cep-mod-riga{flex-direction:column;align-items:stretch}}
/* 3.15.11 — colonne Anno e Clinica/Struttura (richiesta Morvillo 17/09/2026): prime due colonne
   del Conto economico e del Forecast CE, ferme a sinistra quando si scorre in orizzontale.
   `--ce-dim1` = larghezza reale della colonna Anno, misurata dal JS dopo il disegno. */
#ceTabella .ce-dim,#cepTabella .ce-dim{position:sticky;z-index:2;background:#fff;text-align:left;white-space:nowrap}
#ceTabella thead th.ce-dim,#cepTabella thead th.ce-dim{z-index:3}
/* il riquadro ha 6px di margine interno: le celle ferme si fermano DENTRO quel margine e a sinistra si
   intravedevano le cifre che scorrono (visto a 375 px). Niente margine a sinistra per queste due tabelle. */
.tablewrap:has(> #ceTabella),.tablewrap:has(> #cepTabella){padding-left:0}
#ceTabella .ce-anno,#cepTabella .ce-anno{left:0;min-width:3.4rem;font-variant-numeric:tabular-nums}
#ceTabella .ce-strutt,#cepTabella .ce-strutt{left:var(--ce-dim1,3.9rem);min-width:6.5rem;max-width:8.5rem;
  white-space:normal;line-height:1.15;overflow-wrap:anywhere;box-shadow:inset -2px 0 0 #d5dae1}
#ceTabella tr.ce-blocco td,#cepTabella tr.ce-blocco td{background:#dfe8f3;font-weight:700;color:#1f3b5a;
  border-top:3px solid #9fb6d0}
#ceTabella tr.ce-complessivo td,#cepTabella tr.ce-complessivo td{background:#1f3b5a;color:#fff;font-weight:700;
  border-top:4px solid #1f3b5a}
#ceTabella tr.ce-quad td,#cepTabella tr.ce-quad td{background:#fff8e6;color:#7a5200;font-style:italic}
@media(max-width:560px){
  #ceTabella .ce-anno,#cepTabella .ce-anno{min-width:2.6rem;font-size:.85em}
  #ceTabella .ce-strutt,#cepTabella .ce-strutt{min-width:5.5rem;max-width:6.5rem;font-size:.85em}
  #ceTabella .ce-c1{min-width:13rem}
}

/* ===== 3.17.0 — quarta sezione «Specialistica SSN» ===== */
.ssn-wrap{overflow-x:auto}
.ssn-tbl{font-size:.82em;white-space:nowrap}
.ssn-tbl th.ssn-c1,.ssn-tbl td.ssn-c1{position:sticky;left:0;background:#fff;z-index:1;min-width:17rem;max-width:26rem;overflow:hidden;text-overflow:ellipsis;text-align:left}
.ssn-tbl thead th.ssn-c1{background:inherit;z-index:2}
.ssn-tbl td.ssn-l2{padding-left:1.1rem}
.ssn-tbl td.ssn-l3{padding-left:2.2rem}
.ssn-tbl td.ssn-l4{padding-left:3.4rem;color:#555}
.ssn-tbl tr.ssn-anno td{font-weight:700;background:#e8eef5}
.ssn-tbl tr.ssn-sede td{font-weight:700;background:#f4f7fb}
.ssn-tbl tr.ssn-totale td{font-weight:700;background:#dfe7f1;border-top:2px solid #1f3a5f}
.ssn-tbl td.ssn-fine,.ssn-tbl th.ssn-fine{background-clip:padding-box}
.ssn-tbl th.ssn-totale{border-left:2px solid #1f3a5f}
.ssn-tbl td.ssn-vuota{background:repeating-linear-gradient(45deg,#fafafa,#fafafa 4px,#f1f1f1 4px,#f1f1f1 8px)}
.ssn-tbl td.ssn-neg{color:#b42318;font-weight:600}
/* R10 (Morvillo 19/09/2026 22:32, autorizzata da JM il 20/09) — «i valori negativi devono
   essere scritti in rosso, su tutte le tabelle della pagina». `.ssn-neg` vale ora anche sulla
   tabella riassuntiva degli abbattimenti («Tabella R»), che ha una classe sua.
   `.ssn-sforato` e' il SEGNALE DIVERSO che c'era gia': la colonna «Budget residuo» positiva
   (= budget superato). Prima usava lo stesso rosso dei negativi; ora ha la sua veste — rosso
   su fondo chiaro — cosi' a colpo d'occhio si distingue «numero negativo» da «budget sforato».
   Le righe di riepilogo (anno/sede/totale) hanno un fondo proprio con specificita' maggiore:
   vanno elencate, altrimenti il loro sfondo coprirebbe quello dello sforamento. */
.ssn-rtab td.ssn-neg{color:#b42318;font-weight:600}
/* Il quinto livello (tabellina delle impegnative, 3.25.0) e' arrivato DOPO la R10: le sue
   righe ereditano gia' il rosso da «.ssn-tbl td.ssn-neg» perche' vivono dentro la griglia,
   ma il TOTALE in fondo e' un <th> e restava nero. Stessa classe, nessuna classe nuova. */
.ssn-imp-tab tfoot th.ssn-neg{color:#b42318}
.ssn-tbl td.ssn-sforato,.ssn-tbl tr.ssn-anno td.ssn-sforato,.ssn-tbl tr.ssn-sede td.ssn-sforato,.ssn-tbl tr.ssn-totale td.ssn-sforato{color:#b42318;font-weight:700;background:#fdeceb}
.ssn-tg{width:1.35rem;height:1.35rem;line-height:1;padding:0;border:1px solid #9aa7b8;border-radius:3px;background:#fff;cursor:pointer;font-weight:700}
.ssn-tg-vuoto{display:inline-block;width:1.35rem}
/* ---- quinto livello: le impegnative abbattute di una branca (ondata 4 punto 1) --------
   Il bottone della branca si distingue da quello di apertura dei livelli (fondo azzurrino):
   apre un dettaglio che arriva dal server, non un sotto-albero gia' in pagina. Il riquadro
   e' una tabella dentro la cella, larga quanto la griglia, con la somma in fondo. */
.ssn-imp-tg{background:#eef3fb;border-color:#5b7fb9;color:#1f3d6b}
.ssn-tbl td.ssn-imp-box{background:#f7f9fc;border-left:3px solid #5b7fb9;padding:.5rem .7rem .6rem 2.6rem;white-space:normal}
.ssn-tbl td.ssn-imp-box>strong{display:block;margin-bottom:.35rem}
.ssn-imp-tab{font-size:.82em;width:auto;min-width:32rem;margin:0}
.ssn-imp-tab thead th{background:#5b7fb9;color:#fff;white-space:nowrap}
.ssn-imp-tab td,.ssn-imp-tab th{padding:.15rem .5rem}
.ssn-imp-tab td.num,.ssn-imp-tab th.num{text-align:right;min-width:7rem}
.ssn-imp-tab tfoot th{background:#eef3fb;font-weight:700;border-top:2px solid #5b7fb9}
.ssn-imp-nota,.ssn-imp-vuoto{margin:.35rem 0 0;font-size:.8em;color:#555}
.ssn-tit-r{margin:1.4rem 0 .4rem}
#ssnRiassunto{display:flex;flex-wrap:wrap;gap:0 1.2rem;align-items:flex-start}
.ssn-r-blocco{min-width:0;max-width:100%;margin:0 0 1.2rem;overflow-x:auto}
.ssn-rtab{font-size:.82em;white-space:nowrap}
.ssn-rtab caption{text-align:left;font-weight:700;padding:.3rem 0}
.ssn-rtab thead th{background:#5b5bd6;color:#fff}
.ssn-rtab td.ssn-rtot{font-weight:600}
.ssn-rtab tr.ssn-rtotali td{font-weight:700;border-top:2px solid #333}
.ssn-osmosi ul{margin:.3rem 0 0 1.2rem}
/* 3.44.0: ricette non contate al momento (INI CANISTRO, senza fattura) */
.ssn-nc-el{margin-top:.35rem}
.ssn-nc-el summary{cursor:pointer;font-weight:600}
.ssn-nc-el .tablewrap{max-height:340px;overflow:auto;margin-top:.35rem}
.ssn-nc-tbl{font-size:.82rem}
.ssn-nc-tbl th,.ssn-nc-tbl td{padding:.15rem .5rem;white-space:nowrap}
.ssn-nc-tbl tfoot td{font-weight:700;border-top:1px solid #999}
.ssn-rtab td.num,.ssn-rtab th.num,.ssn-tbl td.num,.ssn-tbl th.num{text-align:right}
.ssn-rtab th.num,.ssn-rtab td.num{min-width:7.5rem}

/* ---- IL CRITERIO, SCRITTO IN PAGINA (ondata 1, 17/09/2026 — correzione 3) -------------
   Il confronto coi bilanci del controllo di gestione ha mostrato che lo scarto piu' grosso
   non era un errore di calcolo ma un criterio non dichiarato. Il riquadro e' aperto di
   partenza (si puo' chiudere, e resta chiuso solo per quella visita) e sta sopra i numeri,
   non in fondo alla pagina: chi legge deve incontrarlo prima di trarre conclusioni. */
.criterio-box{margin:.6rem 0 .8rem;padding:.55rem .8rem;border:1px solid #cdd7e3;
  border-left:4px solid #0b1f3a;background:#f7f9fc;border-radius:4px;font-size:.88rem}
.criterio-box>summary{cursor:pointer;color:#0b1f3a}
.criterio-box>summary::marker{color:#0b1f3a}
.criterio-voci{margin:.45rem 0 .2rem;padding-left:1.1rem}
.criterio-voci li{margin:.15rem 0}
.criterio-nota{margin:.35rem 0 0;color:#4b5563;font-style:italic}
.criterio-quota{margin:.35rem 0 0;font-weight:600;color:#5c4405}
.criterio-quota[hidden]{display:none}
/* Registrazioni senza centro di costo: contrassegno sulla riga, oltre all'etichetta che la
   voce porta gia' nel nome. Colore diverso dal «fuori margine» per non confondere le due
   cose (una e' la fonte del dato, l'altra la sua riclassificazione). */
.ce-tag-scdc{background:#eef4ff;border-color:#c3d4f0;color:#1d3f73;font-weight:500}
#ceTabella tr.ce-scdc td.ce-c1{border-left:3px solid #7ba1dd}

/* ---- Specialistica SSN: le tre tabelle Consuntivo/Forecast/Previsionale (3.19.4) ----
   Rettifica della 3.19.0 chiesta da JM il 18/09/2026: le tre tabelle NON usano piu' la resa
   delle Griglie Operative (.fo-*) ma la veste di sempre della sezione (.ssn-*, quella della
   3.18.1, identica alla griglia del portale qui sotto). Percio' qui non c'e' nessuno stile di
   tabella: ci sono solo l'inquadratura dei tre blocchi e i tre segni che le tabelle nuove
   devono saper dire — cella prevista, cella reale, cella corretta a mano. */
.ssn-tit-g{margin:1.1rem 0 .3rem}
.ssn-tit-p{margin:1.6rem 0 .4rem;padding-top:.9rem;border-top:1px solid #e2e6ee}
.ssn-griglie-nota{margin:.1rem 0 .5rem}
.ssn-note{margin:.2rem 0 .2rem 1.1rem;padding:0}
.ssn-note li{margin:.15rem 0}
.ssn-blocco{margin:.9rem 0 1.4rem}
.ssn-tit-t{margin:.2rem 0 .35rem;font-size:1rem}

/* Forecast: si deve VEDERE dove il numero e' un dato reale e dove e' una previsione. */
td.ssn-fc-prev{background:#eef4fb}
td.ssn-fc-reale{background:transparent}
/* Previsionale: la cella corretta a mano resta gialla, come le rettifiche delle Griglie. */
td.ssn-rett{background:#fff6d8;font-weight:600}
/* Le celle del Previsionale che si possono correggere: doppio clic. */
td.ssn-cell-edit{cursor:cell}
td.ssn-cell-edit:hover{outline:1px solid #9bb7de;outline-offset:-1px}

/* ============================================================================================
   v3.28.0 — «Registrazioni senza centro di costo»: impaginazione
   Richiesta 1 del documento «DCG 20-09-26» (JM, 20/09/2026):
     «Migliorare l'impaginazione della pagina "registrazioni senza centro di costo" [...] da
      migliorare in UX e impaginazione.»

   Che cosa non andava, misurato a 1920x1080 sulla produzione del 20/09 (v3.27.0):
     - la tabella misurava 1801 px dentro una pagina larga 1728 -> traboccava a destra e la
       colonna IMPORTO, la sola che dice quanto manca alla contabilita' analitica, finiva FUORI
       dallo schermo: per vederla bisognava scorrere in orizzontale;
     - per tentare di farla stare, il browser spezzava le intestazioni a meta' parola
       («Ann/o/prot/ocol/lo», «Rig/he/di/pri/ma/not/a») e le faceva alte 125 px, quasi cinque
       righe di tabella buttate;
     - le 509 registrazioni stavano una sotto l'altra: pagina alta 15.946 px, intestazione via
       al primo scatto di rotella e riga del TOTALE in fondo al chilometro;
     - la riga del totale non aveva nemmeno uno stile suo: si leggeva come una riga qualunque;
     - le intestazioni avevano il puntatore a mano come se si potesse ordinare, e non si puo'.

   Qui si tocca SOLO la presentazione: nessun numero, nessuna colonna, nessun filtro, nessun
   ordinamento dei dati. Gli export XLSX/CSV restano quelli di prima, col testo intero.
   ============================================================================================ */

/* le due spiegazioni affiancate invece che incolonnate: stessa roba, meta' altezza (127 -> ~78) */
.scdc-pagina .pagehelp.scdc-help{padding:9px 14px;margin:0 0 9px}
.scdc-pagina .pagehelp.scdc-help h2{font-size:17px;margin:0 0 4px}
.scdc-pagina .scdc-help-col{display:grid;grid-template-columns:1fr 1fr;gap:2px 26px}
.scdc-pagina .pagehelp.scdc-help p{margin:0;font-size:12.5px;line-height:1.42}

/* barra dei filtri compatta: il nome del filtro e il suo «?» sulla STESSA riga (prima il
   pallino andava a capo e ogni etichetta occupava due righe), campi un filo piu' bassi. */
.scdc-pagina .filtri.scdc-filtri{padding:9px 14px;margin:0 0 9px}
.scdc-filtri .fgrid{gap:8px 14px;grid-template-columns:repeat(auto-fill,minmax(178px,1fr))}
.scdc-filtri .fgrid label{flex-direction:row;flex-wrap:wrap;align-items:center;gap:4px}
.scdc-filtri .fgrid label > select,.scdc-filtri .fgrid label > input,
.scdc-filtri .fgrid label > .chipsel{flex:1 0 100%}
.scdc-filtri .fgrid select,.scdc-filtri .fgrid input,.scdc-filtri .fgrid .chipsel{height:33px}
.scdc-filtri .fazioni{margin-top:8px}
.scdc-pagina .avviso{margin:0 0 8px;padding:7px 12px;font-size:12.5px}
.scdc-pagina .scdc-riepilogo{margin:0 0 5px;font-size:12px}

/* Il riquadro alto quanto lo schermo: l'elenco scorre dentro, con intestazione e totale fermi.
   E' lo stesso mestiere di `.tablewrap.fogli-scroll` delle Griglie Operative — stessa casa,
   stesso modo di fare. Il 330 px tolto e' quanto occupano barra, schede, spiegazione, filtri
   e avvisi: sotto i 320 px di elenco non si scende, altrimenti su uno schermo corto il
   riquadro diventa una feritoia. */
.tablewrap.scdc-scroll{max-height:max(320px,calc(100vh - 330px));overflow:auto;padding:0;
  position:relative;scrollbar-gutter:stable}
table.dtable.scdc-tab{width:100%;font-size:12px}
table.dtable.scdc-tab th,table.dtable.scdc-tab td{padding:4px 8px}
/* le intestazioni vanno a capo fra una PAROLA e l'altra, mai a meta' parola: da 125 px a ~44 */
table.dtable.scdc-tab th{white-space:normal;overflow-wrap:normal;word-break:normal;hyphens:none;
  vertical-align:middle;cursor:default;font-size:11px;line-height:1.22;font-weight:600;
  z-index:3;box-shadow:inset 0 -1px 0 rgba(255,255,255,.22)}
table.dtable.scdc-tab th:hover{background:var(--ini)}   /* non si ordina: niente finta reazione */
table.dtable.scdc-tab td{vertical-align:top}
table.dtable.scdc-tab tbody tr:hover td{background:#eef5fa}

/* le tre colonne di testo libero: ritagliate coi puntini, il testo intero nel suggerimento.
   Il ritaglio sta su uno <span> perche' su una <td> in `table-layout:auto` la larghezza
   massima e' solo un consiglio e il browser la ignora quando il contenuto e' piu' largo. */
.scdc-tab .scdc-clip{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.scdc-tab td[data-col=voce] .scdc-clip{max-width:230px}
.scdc-tab td[data-col=causale] .scdc-clip{max-width:130px}
.scdc-tab td[data-col=sezione] .scdc-clip{max-width:150px}
.scdc-tab td[data-col=creata_il],.scdc-tab td[data-col=modificata_il],
.scdc-tab td[data-col=datapn]{font-variant-numeric:tabular-nums}
.scdc-tab td.muted{font-style:italic;font-size:11px}

/* la riga del TOTALE: ferma in fondo al riquadro e riconoscibile come totale */
.scdc-tab tbody tr.tot td{position:sticky;bottom:0;z-index:2;background:#d0e2ec;
  font-weight:800;color:var(--ini);border-top:2px solid var(--ini2);white-space:nowrap}
.scdc-tab tbody tr.tot:hover td{background:#d0e2ec}
.scdc-tab tbody tr.tot td.agg-num.neg{color:var(--ko)}

/* schermi piu' stretti: il riquadro si allunga e la tabella torna a scorrere in orizzontale
   (meglio scorrere che leggere numeri schiacciati), le spiegazioni tornano incolonnate. */
@media(max-width:1500px){
  .scdc-pagina .scdc-help-col{grid-template-columns:1fr}
  .scdc-tab td[data-col=voce] .scdc-clip{max-width:190px}
}
@media(max-width:900px){
  .tablewrap.scdc-scroll{max-height:none}
  .scdc-tab tbody tr.tot td{position:static}
}

/* v3.29.2 — pagina Budget, riga «− di cui ESCLUSO dalla selezione» (neo 2, JM 21/09/2026).
   Sta fra il TOTALE GENERALE (tutto il budget a mano) e il TOTALE NEI NUMERI (le sole voci
   con la spunta) e rende leggibile il salto fra i due: stesso grigio-avviso della riga Excel,
   numero in negativo, cosi' la colonna si legge come una sottrazione e non come un errore. */
table.bg-grid tfoot tr.bg-tot-escl td{background:#faf1f1;color:#8a3a3a;font-weight:600}
table.bg-grid tfoot tr.bg-tot-escl td.bg-c1{text-align:left;font-weight:600}

/* ===================== PANNELLO DI GESTIONE UTENTI (INI-47, 23/09/2026) =====================
   Pagina a se' (/admin/utenti), non una scheda della dashboard: e' un'amministrazione, non una
   lettura di numeri, e tenerla fuori dalle schede evita che un filtro o un link vecchio ci
   finisca dentro per sbaglio. Riusa testata, colori e bottoni della dashboard. */
body.pag-utenti{background:var(--bg);color:var(--txt)}
.utenti-wrap{max-width:1180px;margin:14px auto 40px;padding:0 18px}
.ut-box{background:var(--card);border:1px solid var(--line);border-radius:10px;padding:14px 16px;margin-bottom:18px}
.ut-box h2{margin:0;font-size:17px;color:var(--ini)}
.ut-box-head{display:flex;align-items:center;justify-content:space-between;gap:14px;flex-wrap:wrap;margin-bottom:10px}
.ut-nota{font-size:12px;color:#5b6b78;max-width:620px}
table.ut-tab{width:100%;border-collapse:collapse;font-size:13px}
table.ut-tab th{background:#f3f7fa;color:var(--ini);text-align:left;padding:8px 10px;border-bottom:2px solid var(--line);font-weight:600}
table.ut-tab td{padding:8px 10px;border-bottom:1px solid #eef2f5;vertical-align:top}
table.ut-tab tr.ut-sospeso td{background:#fbf4f4;color:#7c6a6a}
.ut-vuoto{text-align:center;color:#7c8a95;padding:16px}
.ut-sedi-cell{max-width:360px}
.ut-liv{display:inline-block;padding:2px 8px;border-radius:12px;font-size:12px}
.ut-liv-r{background:#eaf2f8;color:#1a4a6b;border:1px solid #bcd6e8}
.ut-liv-w{background:#fdf1e2;color:#8a5212;border:1px solid #f0d3ad}
.ut-stato-on{color:var(--ok);font-weight:600}
.ut-stato-off{color:var(--ko);font-weight:600}
.ut-badge{display:inline-block;background:#eef2f5;border:1px solid var(--line);border-radius:10px;padding:1px 7px;font-size:11px;color:#4a5a66;margin-left:4px}
.ut-badge-aitanor{background:var(--ini);color:#fff;border-color:var(--ini)}
.ut-azioni-col{white-space:nowrap;text-align:right}
button.ut-az{background:#fff;border:1px solid var(--line);border-radius:6px;padding:4px 9px;font-size:12px;cursor:pointer;color:var(--ini)}
button.ut-az:hover{background:#f3f7fa}
button.ut-az-stop{border-color:#e8c4c0;color:var(--ko)}
button.ut-az-go{border-color:#bfe0c0;color:var(--ok)}
button.ut-az:disabled{opacity:.5;cursor:default}
.ut-op{display:inline-block;padding:1px 8px;border-radius:10px;font-size:12px;background:#eef2f5;border:1px solid var(--line)}
.ut-op-crea{background:#e6f4e6;border-color:#b8ddb9;color:#1e5720}
.ut-op-clona{background:#eaf2f8;border-color:#bcd6e8;color:#1a4a6b}
.ut-op-disattiva{background:#fbeceb;border-color:#e8c4c0;color:#8a2d22}
.ut-op-riattiva{background:#e6f4e6;border-color:#b8ddb9;color:#1e5720}
.ut-footer{text-align:center;color:#7c8a95;font-size:12px;padding:0 0 26px}
.btn-primario{background:var(--ini);color:#fff;border:0;border-radius:8px;padding:8px 14px;font-size:13px;cursor:pointer;text-decoration:none;display:inline-block}
.btn-primario:hover{background:var(--ini2)}
.btn-secondario{background:#fff;color:var(--ini);border:1px solid var(--line);border-radius:8px;padding:8px 14px;font-size:13px;cursor:pointer}
/* la finestra: una sola per crea/clona/permessi/password, i campi che non servono spariscono */
.ut-modal{position:fixed;inset:0;background:rgba(12,30,44,.45);display:flex;align-items:flex-start;justify-content:center;z-index:60;overflow:auto;padding:30px 12px}
.ut-modal.hidden{display:none}
.ut-modal-box{background:#fff;border-radius:12px;max-width:640px;width:100%;padding:18px 20px;box-shadow:0 12px 40px rgba(0,0,0,.25)}
.ut-modal-box h3{margin:0 0 12px;color:var(--ini);font-size:18px}
.ut-modal-err{background:#fbeceb;border:1px solid #e8c4c0;color:#8a2d22;border-radius:8px;padding:8px 10px;font-size:13px;margin-bottom:10px}
.ut-modal-err.hidden{display:none}
.ut-campo{display:block;margin-bottom:14px;font-size:13px;color:var(--txt)}
.ut-campo.hidden{display:none}
.ut-campo input[type=text],.ut-campo input[type=password]{display:block;width:100%;box-sizing:border-box;margin-top:5px;padding:8px 10px;border:1px solid var(--line);border-radius:7px;font-size:14px}
.ut-campo small{display:block;color:#6b7a86;font-size:12px;margin-top:4px}
fieldset.ut-campo{border:1px solid var(--line);border-radius:8px;padding:10px 12px}
fieldset.ut-campo legend{font-weight:600;color:var(--ini);padding:0 6px}
fieldset.ut-campo label{display:block;margin:3px 0}
.ut-check-tutte{font-weight:600;margin-bottom:6px !important}
.ut-sedi{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:2px 12px;max-height:210px;overflow:auto;border-top:1px dashed var(--line);padding-top:6px}
.ut-sedi.ut-sedi-spente{opacity:.45}
/* 3.40.0 - pagine visibili per utente */
.ut-pagine{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:2px 12px;border-top:1px dashed var(--line);padding-top:6px}
.ut-pagine.ut-sedi-spente{opacity:.45}
.ut-pag-sez{grid-column:1/-1;font-weight:600;font-size:.85em;color:#56697a;margin-top:6px}
.ut-pagine-cell{max-width:320px}
.ut-modal-azioni{display:flex;justify-content:flex-end;gap:10px;margin-top:6px}
@media(max-width:760px){
  .ut-azioni-col{text-align:left;white-space:normal}
  table.ut-tab{font-size:12px}
}
.topbar-right .link-utenti{color:var(--ini);text-decoration:none;border:1px solid var(--line);border-radius:7px;padding:5px 10px;font-size:13px;background:#fff}
.topbar-right .link-utenti:hover{background:#f3f7fa}

/* 3.39.0 — finestra «Ordine delle voci» delle Griglie Operative */
.fo-ordine-lista{max-height:60vh;overflow:auto;margin:8px 0}
.fo-ord-blocco h4{margin:10px 0 4px;font-size:14px;color:#1f3b5b}
.fo-ord-ol{margin:0;padding-left:28px}
.fo-ord-voce{display:flex;align-items:center;gap:6px;padding:3px 4px;border-bottom:1px solid #eef2f6}
.fo-ord-voce .fo-ord-nome{flex:1}
.fo-ord-voce .btn-sm{padding:2px 8px;min-width:32px}
.fo-ord-voce.fo-ord-mosso{background:#fff8e1}

/* ====================== STAMPA / PDF (richiesta 3, mail Morvillo 28/09/2026 17:14) ======================
   Pulsante «PDF» -> window.print() (dashboard.js, avviaStampa()). #printHeader e' invisibile a
   schermo (.print-only) e viene riempito appena prima della stampa con pagina, filtri, data/ora
   e versione. In stampa si vede SOLO l'intestazione e il pannello attivo: menu, barre filtri,
   pulsanti e avvisi non pertinenti sono nascosti. */
.print-only{display:none}
@media print{
  @page{size:A4 landscape;margin:8mm}
  body *{visibility:hidden}
  #printHeader,#printHeader *,.panel.active,.panel.active *{visibility:visible}
  #printHeader{display:block!important;position:absolute;top:0;left:0;width:100%;
    border-bottom:1px solid #333;padding-bottom:3mm;margin-bottom:5mm}
  #printHeader .ph-titolo{font-size:14pt;font-weight:bold;color:#000}
  #printHeader .ph-filtri,#printHeader .ph-meta{font-size:8.5pt;color:#333;margin-top:1mm}
  .panel.active{position:absolute;top:26mm;left:0;width:100%}
  .panel:not(.active){display:none!important}
  header.topbar,#tabsTop,#subTabs,#filtriBox,.fbtns,.app-version,.exports,.btn-stampa,
  .pagehelp,.guida-sec,#agg-guida-in-pagina,.criterio-box summary,
  .panel.active button,.panel.active select,.panel.active input,.panel.active a.btn-sm,
  .panel.active a.btn-primario,.panel.active a.btn-secondario,.panel.active .btn-sm,
  .panel.active .fo-toolbar,.panel.active .bg-toolbar,.panel.active [id$="Toolbar"],
  .panel.active .exports,.panel.active .avviso-filtri,.panel.active .fbtns{
    display:none!important}
  table{width:100%!important;font-size:8.5pt;border-collapse:collapse}
  thead{display:table-header-group}
  tr{break-inside:avoid;page-break-inside:avoid}
  .tablewrap{overflow:visible!important}
}

/* ===== POSTI LETTO (3.42.0, mail Morvillo 13/10/2026) — quinta sezione ===== */
.pl-revisione{background:#f3f8f3;border:1px solid #cfe3cf;border-left:4px solid #2e7d32;border-radius:8px;
  padding:8px 14px;margin:0 0 12px;font-size:13.5px;color:#234}
.pl-revisione strong{color:#1b5e20}
.pl-tit{margin:16px 0 8px;font-size:15px;color:var(--ini)}
.pl-riep-wrap{overflow:auto;margin-bottom:6px}
table.pl-riep{border-collapse:collapse;font-size:13.5px;background:#fff}
table.pl-riep th,table.pl-riep td{border:1px solid #dfe4ea;padding:6px 14px}
table.pl-riep thead th{background:#e6ecf3;color:#22405f;font-weight:600}
table.pl-riep tbody th{text-align:left;background:#fafbfc;font-weight:600}
table.pl-riep td{text-align:right;font-variant-numeric:tabular-nums}
table.pl-riep .pl-riep-tot{background:#cfe0f0;font-weight:800;color:#12314f}
.pl-chk{font-size:12.5px;color:#345;display:inline-flex;align-items:center;gap:5px}
table.pl-grid{border-collapse:separate;border-spacing:0;width:100%;font-size:13px}
table.pl-grid th,table.pl-grid td{border-right:1px solid #eceff3;border-bottom:1px solid #eceff3;padding:5px 9px;vertical-align:top}
table.pl-grid thead th{position:sticky;top:0;z-index:3;background:#e6ecf3;color:#22405f;font-weight:600;text-align:center}
table.pl-grid th.pl-c1,table.pl-grid td.pl-c1{text-align:left;min-width:300px}
table.pl-grid td.pl-num{text-align:right;font-variant-numeric:tabular-nums;width:130px;white-space:nowrap}
table.pl-grid td.pl-note{min-width:280px;color:#3a4a5c}
table.pl-grid tr.pl-struttura td{background:#e7eef6;font-weight:700;color:var(--ini);cursor:pointer}
table.pl-grid tr.pl-struttura .pl-soc{font-weight:400;color:#5b6f85;font-size:12px;margin-left:8px}
table.pl-grid tr.pl-struttura .pl-freccia{display:inline-block;width:16px}
table.pl-grid tr.pl-atti td{background:#fbfcfe;font-size:12.5px;color:#3a4a5c}
table.pl-grid tr.pl-atti td.pl-c1,table.pl-grid tr.pl-branca td.pl-c1{padding-left:30px}
table.pl-grid tr.pl-atti td.pl-c1{font-style:italic;color:#6b7c8f}
table.pl-grid tr.pl-vuota td{color:#9aa6b3}
table.pl-grid tfoot td{position:sticky;bottom:0;background:#cfe0f0;font-weight:800;color:#12314f;z-index:2}
table.pl-grid input.pl-in{width:84px;text-align:right;padding:3px 6px;border:1px solid #ccd3dc;border-radius:5px;
  font-size:13px;font-variant-numeric:tabular-nums}
table.pl-grid textarea.pl-in-note,table.pl-grid textarea.pl-in-atti{width:100%;box-sizing:border-box;padding:3px 6px;
  border:1px solid #ccd3dc;border-radius:5px;font-size:12.5px;font-family:inherit;line-height:1.35;resize:vertical;display:block}
table.pl-grid .dirty{border-color:#e0a800!important;background:#fff8dc}
table.pl-grid .ko{border-color:#a02a2a!important;background:#fdecec}
.pl-stampa{display:none}
@media print{
  .pl-stampa{display:inline!important}
  .pl-scroll{max-height:none!important;overflow:visible!important;border:0}
  table.pl-grid thead th,table.pl-grid tfoot td{position:static}
  #tab-posti-letto .pl-revisione{display:block}
}

/* 3.43.0 — Posti letto: revisioni a colonne (l'ultima, in vigore, in evidenza) */
table.pl-grid thead tr+tr th{top:33px}
table.pl-grid th.pl-rev-th{font-size:12px;line-height:1.3;min-width:200px}
table.pl-grid th.pl-rev-ultima{background:#d5ead1;color:#1d4d1a}
table.pl-grid td.pl-rev-ultima{background:#f3faf1}
table.pl-grid tr.pl-struttura td.pl-rev-ultima{background:#dcefd8}
table.pl-grid td.pl-rev-vecchia{color:#5d6b79}
table.pl-grid td.pl-cambiato{background:#fff2cc !important;color:#5a4300;font-weight:600}
table.pl-grid .pl-asterisco{margin-left:2px;color:#b07c00}
table.pl-grid td.pl-cambiato input{background:#fff7dc;border-color:#e1b84a}
table.pl-grid tfoot td.pl-rev-ultima{background:#cfe6c9}
table.pl-riep tr.pl-riep-vigore td,table.pl-riep tr.pl-riep-vigore th{background:#eef7ec}
table.pl-riep tr.pl-riep-rev td,table.pl-riep tr.pl-riep-rev th{color:#5d6b79;font-weight:400}
table.pl-riep tr.pl-riep-rev .pl-riep-tot{background:#e9eff6;font-weight:600}
.pl-rev-info{font-size:12.5px;color:#5b6f85;margin-left:6px}
@media print{table.pl-grid td.pl-cambiato{background:#fff2cc !important;-webkit-print-color-adjust:exact;print-color-adjust:exact}}

/* 3.43.0 — profilo, password dimenticata, nuova password */
.prof-wrap{max-width:880px;margin:24px auto;padding:0 16px}
.prof-box{background:#fff;border:1px solid #dfe4ea;border-radius:8px;padding:18px 22px;margin-bottom:18px}
.prof-box h2{margin:0 0 10px;font-size:18px;color:var(--ini,#1f4e79)}
.prof-box dl{display:grid;grid-template-columns:180px 1fr;gap:6px 12px;margin:0}
.prof-box dt{color:#5b6f85}
.prof-box dd{margin:0;font-weight:600}
.prof-form label{display:block;margin:10px 0 4px;font-size:13.5px;color:#22405f}
.prof-form input{display:block;margin-top:4px;width:100%;max-width:420px;padding:8px 10px;border:1px solid #c9d3de;border-radius:5px;font-size:14px}
.prof-form button{margin-top:14px}
.prof-msg{margin-top:10px;font-size:13.5px}
.prof-msg.ok{color:#1d6b2a}
.prof-msg.ko{color:#a52a2a}
.prof-regole{font-size:12.5px;color:#5b6f85;margin:6px 0 0}
.prof-forza{height:6px;max-width:420px;background:#eceff3;border-radius:3px;margin-top:6px;overflow:hidden}
.prof-forza span{display:block;height:100%;width:0;background:#c0392b;transition:width .2s}
table.prof-acc{border-collapse:collapse;width:100%;font-size:13px}
table.prof-acc th,table.prof-acc td{border-bottom:1px solid #eceff3;padding:5px 8px;text-align:left}
table.prof-acc th{background:#f3f6fa;color:#22405f}
.login-card .login-link{display:block;margin-top:12px;font-size:13px;text-align:center}
.login-card .login-ok{background:#e9f6ec;color:#1d6b2a;border:1px solid #bfe3c7;padding:10px;border-radius:5px;font-size:13.5px;margin-bottom:10px}
.topbar .profilo-link{color:inherit;margin-right:10px;text-decoration:underline}
.ut-badge-pl{background:#d5ead1;color:#1d4d1a}
.ut-ev-login_ko,.ut-ev-bloccato,.ut-ev-csrf_ko,.ut-ev-recupero_link_ko{color:#a52a2a;font-weight:600}
.ut-ev-login_ok{color:#1d6b2a}

/* ===== sesta sezione «Farmacia» (3.44.0, richiesta del cliente 02/10/2026) ===== */
#faFiltri .fgrid{grid-template-columns:repeat(auto-fill,minmax(190px,1fr))}
#faFiltri input[type=month],#faFiltri input#fa_principio,#faFiltri input#fa_cerca{width:100%;box-sizing:border-box}
.fa-scroll{max-height:72vh}
table.fa-grid{border-collapse:separate;border-spacing:0;width:100%;font-size:12.5px}
table.fa-grid th,table.fa-grid td{border-right:1px solid #eceff3;border-bottom:1px solid #eceff3;padding:4px 7px;vertical-align:top}
table.fa-grid thead th{position:sticky;top:0;z-index:3;background:#e6ecf3;color:#22405f;font-weight:600;text-align:center;white-space:nowrap}
table.fa-grid td.fa-num{text-align:right;font-variant-numeric:tabular-nums;white-space:nowrap;min-width:84px}
table.fa-grid tr.fa-struttura td{background:#cfe0f0;font-weight:800;color:#12314f}
table.fa-grid tr.fa-farmacia td{background:#dce8f4;font-weight:700;color:#173a5e}
table.fa-grid tr.fa-uop td{background:#e8f0f8;font-weight:700;color:var(--ini);cursor:pointer}
table.fa-grid tr.fa-uop .fa-freccia{display:inline-block;width:15px}
table.fa-grid tr.fa-principio td{background:#f3f6fa;font-weight:600;color:#22405f}
table.fa-grid tr.fa-riga td{background:#fff;color:#2b3a4a}
table.fa-grid td.fa-conf{min-width:260px}
table.fa-grid .fa-forma{display:inline-block;background:#eef3f8;border:1px solid #d5e0eb;border-radius:4px;padding:0 5px;font-size:11.5px;color:#30506f}
table.fa-grid .fa-stato{display:inline-block;background:#fff4cc;border:1px solid #f0d27a;border-radius:4px;padding:0 5px;font-size:11px;color:#7a5a00}
table.fa-grid tfoot td{position:sticky;bottom:0;background:#b8d0e8;font-weight:800;color:#12314f;z-index:2}
table.fa-grid tr.hidden{display:none}
.fa-agg{margin:8px 0}
@media print{
  .fa-scroll{max-height:none!important;overflow:visible!important;border:0}
  table.fa-grid thead th,table.fa-grid tfoot td{position:static}
  table.fa-grid{font-size:9.5px}
  #faFiltri,#faAvviso{display:none!important}
  table.fa-grid tr.fa-uop .fa-freccia{display:none}
}

/* 3.47.0 — Occupazione letti (dentro Posti letto) */
.ol-cards{display:flex;gap:12px;flex-wrap:wrap;margin:8px 0 12px}
.ol-card{background:#fff;border:1px solid #dfe4ea;border-radius:8px;padding:10px 18px;min-width:130px}
.ol-card b{display:block;font-size:24px;color:var(--ini);font-variant-numeric:tabular-nums}
.ol-card span{font-size:12px;color:#556}
.ol-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(420px,1fr));gap:16px;align-items:start}
.ol-sub{margin:10px 0 6px;font-size:13.5px;color:#22405f}
.ol-scroll{max-height:380px}
.ol-bar{display:inline-block;width:90px;height:9px;background:#e1e6ec;border-radius:5px;vertical-align:middle;margin-right:6px;overflow:hidden}
.ol-bar i{display:block;height:100%;background:#2e86c1}
.ol-Occupato{color:#b03a2e;font-weight:600}.ol-Libero{color:#1e8449;font-weight:600}.ol-Senza{color:#b9770e;font-weight:600}
.ol-note{font-size:12px;color:#456;margin:10px 0 0;padding-left:18px}.ol-note li{margin:3px 0}

.ol-tot th,.ol-tot td{font-weight:700;background:#eef3f9}
.ol-pl{background:#fff7dc}
.ol-delta{text-align:right;font-variant-numeric:tabular-nums}
.ol-dpos{color:#000;font-weight:700}
.ol-dneg{color:#c0392b}
.ol-dzero{color:#556}
.ol-leg{font-size:12px;color:#456;margin:6px 0 0}.ol-leg b{padding:1px 6px;border-radius:4px}
/* «Aggiorna» in Gestione struttura (3.52.0) */
#olAgg:disabled{background:#b6bec8;cursor:not-allowed}
.ol-agg-st{font-size:12.5px;color:#345}
.ol-agg-st.carico::before{content:"";display:inline-block;width:11px;height:11px;margin-right:6px;vertical-align:-1px;
  border:2px solid #9db3c8;border-top-color:var(--ini);border-radius:50%;animation:olgira .8s linear infinite}
@keyframes olgira{to{transform:rotate(360deg)}}
.ol-agg-err{margin:6px 0 0;padding:6px 10px;font-size:13px;color:#8a1f17;background:#fdecea;border-left:4px solid #b03a2e;border-radius:0 6px 6px 0}
.ol-agg-err.hidden{display:none}

/* Filtro Struttura a scelta multipla (3.53.0) */
.ol-multi{display:inline-block;position:relative;vertical-align:middle}
.ol-multi summary{cursor:pointer;border:1px solid #c9d3dc;border-radius:6px;padding:4px 10px;background:#fff;list-style:none;min-width:140px}
.ol-multi-box{position:absolute;z-index:20;background:#fff;border:1px solid #c9d3dc;border-radius:6px;padding:6px 10px;min-width:100%;
  box-shadow:0 4px 12px rgba(0,0,0,.12);white-space:nowrap}
.ol-multi-box label{display:block;padding:2px 0;cursor:pointer}
/* Ricoveri ordinari – struttura (era «Reparti per piano»; richiesta di Mario Morvillo 28/10/2026): tabella a tutta larghezza, tutte le righe visibili, nessuno scorrimento interno */
.pl-riep-wrap.ol-scroll{max-height:none;overflow:visible}
.ol-scroll table.pl-riep{width:100%;font-size:15px}
.ol-scroll table.pl-riep th,.ol-scroll table.pl-riep td{padding:8px 16px}
.ol-scroll table.pl-riep thead th{font-size:15px;position:sticky;top:0;z-index:2}
.ol-scroll table.pl-riep .pl-riep-tot,.ol-scroll table.pl-riep .ol-tot th,.ol-scroll table.pl-riep .ol-tot td{font-size:15.5px}
.ol-tot th,.ol-tot td{background:#eef3f8;border-top:1px solid #cdd8e3}
.ol-tot-gen th,.ol-tot-gen td{background:#dfe9f3;border-top:2px solid var(--ini,#1f6f9f)}

/* 3.48.0 — elenco ricoverati mascherato (Ricoveri ordinari – struttura) */
.re-sezione{margin-top:22px}
.re-sezione h3{margin:0 0 6px}
.re-tab td.re-nome{font-family:inherit;letter-spacing:.02em}
.re-tab td.re-nome-aperto{font-weight:600;color:#7a1f1f}
.re-tab button.re-apri{font-size:12px;padding:2px 8px;cursor:pointer}
#reMsg{margin-left:10px}

/* 3.48.0 — pagina H.R. */
.hr-filtri{flex-wrap:wrap;gap:6px 14px}
.hr-kpi{display:flex;flex-wrap:wrap;gap:12px;margin:10px 0}
.hr-kpi>div{background:#f4f7fb;border:1px solid #d9e2ec;border-radius:6px;padding:8px 14px;min-width:180px}
.hr-kpi span{display:block;font-size:12px;color:#5a6b7d}
.hr-kpi strong{font-size:18px}
.hr-su{color:#b02a2a}
.hr-giu{color:#2e7d32}
.hr-grafico-box{position:relative;height:280px;margin:8px 0 14px}
.hr-livelli{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}
.hr-liv{border:1px solid #9bb7d4;background:#fff;border-radius:14px;padding:3px 12px;cursor:pointer;font-size:13px}
.hr-liv.attivo{background:#1f4e79;color:#fff;border-color:#1f4e79}
.hr-tab td.num,.hr-tab th.num{text-align:right;white-space:nowrap}
.hr-tab tr.hr-giu-riga{cursor:pointer}
.hr-tab tr.hr-giu-riga:hover{background:#eef4fa}
.hr-multi .ol-multi-box{max-height:320px;overflow:auto}

/* ===== CONTROL ROOM (30/10/2026, richiesta di Mario Morvillo): grafica del modello, tutto sotto #tab-control-room ===== */
#tab-control-room .cr{--cr-bg:#f3f5f9;--cr-ink:#17273b;--cr-muted:#758195;--cr-blue:#395de7;--cr-green:#138c76;--cr-red:#cc5267;--cr-border:#e5eaf1;color:var(--cr-ink);font-family:Inter,system-ui,sans-serif;font-size:14px;background:var(--cr-bg);border-radius:14px;padding:22px 26px}
#tab-control-room .cr *{box-sizing:border-box}
#tab-control-room .cr-top{display:flex;justify-content:space-between;align-items:center;gap:16px;margin:4px 0 18px}
#tab-control-room .cr-eyebrow{font-size:11px;letter-spacing:1.6px;text-transform:uppercase;color:var(--cr-muted)}
#tab-control-room .cr-h1{font-size:30px;letter-spacing:-1px;margin:7px 0;font-weight:700;color:var(--cr-ink)}
#tab-control-room .cr-lead{color:var(--cr-muted);line-height:1.6;margin:7px 0}
#tab-control-room .cr-actions{display:flex;gap:9px}
#tab-control-room .cr-btn{border:1px solid var(--cr-border);border-radius:9px;padding:10px 15px;background:#fff;color:var(--cr-ink);cursor:pointer;font:inherit}
#tab-control-room .cr-btn:hover{background:#edf1ff}
#tab-control-room .cr-btn:focus-visible,#tab-control-room select:focus-visible{outline:3px solid #7191ff}
#tab-control-room .cr-primary{background:var(--cr-blue);color:#fff;border-color:var(--cr-blue)}
#tab-control-room .cr-primary:hover{background:#2847c3}
#tab-control-room .cr-small{font-size:11px;padding:7px 11px}
#tab-control-room .cr-filters{display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin:16px 0}
#tab-control-room .cr-filters select{padding:10px 34px 10px 12px;border:1px solid var(--cr-border);border-radius:8px;background:#fff;color:var(--cr-ink);font:inherit;max-width:260px}
#tab-control-room .cr-sub{font-size:11px;color:var(--cr-muted)}
#tab-control-room .cr-status{margin-left:auto;font-size:12px;color:var(--cr-muted)}
#tab-control-room .cr-status:before{content:'●';color:#1da78b;margin-right:6px}
#tab-control-room .cr-errore{background:#fcecf0;color:var(--cr-red);border-radius:8px;padding:10px 14px;margin:10px 0}
#tab-control-room .cr-kpis{display:grid;grid-template-columns:repeat(4,1fr);gap:16px}
#tab-control-room .cr-card{background:#fff;border:1px solid var(--cr-border);border-radius:14px;padding:22px;box-shadow:0 3px 8px #18315303}
#tab-control-room .cr-card h3{font-size:16px;margin:0 0 6px;font-weight:650;color:var(--cr-ink)}
#tab-control-room .cr-kpi-label{color:#68788e;font-size:12px;display:flex;justify-content:space-between}
#tab-control-room .cr-metric{font-size:30px;letter-spacing:-1px;font-weight:700;margin:15px 0 9px}
#tab-control-room .cr-badge{font-size:11px;padding:4px 7px;border-radius:5px;background:#e7f6f0;color:var(--cr-green)}
#tab-control-room .cr-bad{background:#fcecf0;color:var(--cr-red)}
#tab-control-room .cr-kpi-foot{font-size:11px;color:var(--cr-muted)}
#tab-control-room .cr-featured{background:#385ce0;color:#fff;border-color:#385ce0}
#tab-control-room .cr-featured .cr-kpi-label,#tab-control-room .cr-featured .cr-kpi-foot{color:#d5dfff}
#tab-control-room .cr-featured .cr-badge{background:#ffffff20;color:#fff}
#tab-control-room .cr-grid{display:grid;grid-template-columns:1.7fr 1fr;gap:20px;margin-top:20px}
#tab-control-room .cr-block{margin-top:20px}
#tab-control-room .cr-row{display:flex;justify-content:space-between;align-items:center;gap:10px}
#tab-control-room .cr-legend{font-size:10px;color:var(--cr-muted);display:flex;gap:16px}
#tab-control-room .cr-legend b{font-weight:400}
#tab-control-room .cr-dot{width:7px;height:7px;display:inline-block;border-radius:50%;background:var(--cr-blue);margin-right:5px}
#tab-control-room .cr-dot-prec{background:#aab8d0}
#tab-control-room .cr-chart{width:100%;height:235px;margin-top:15px}
#tab-control-room .cr-chart text{fill:#8b96a7;font:10px system-ui}
#tab-control-room .cr-gl{stroke:#e9edf4}
#tab-control-room .cr-insight{background:#eef3ff;border-radius:8px;padding:11px 14px;font-size:12px;color:#52668f}
#tab-control-room .cr-costrow{margin-top:22px;font-size:12px}
#tab-control-room .cr-track{height:7px;border-radius:7px;background:#edf1f7;margin-top:10px;overflow:hidden}
#tab-control-room .cr-fill{height:100%;border-radius:7px}
#tab-control-room .cr-note{font-size:11px;color:var(--cr-muted);margin-top:20px}
#tab-control-room .cr-scroll{overflow:auto}
#tab-control-room .cr-table{border-collapse:collapse;width:100%;margin-top:18px;font-size:12px}
#tab-control-room .cr-table th{text-align:right;font-weight:500;color:var(--cr-muted);padding:12px 10px;border-bottom:1px solid var(--cr-border);white-space:nowrap;background:transparent}
#tab-control-room .cr-table td{padding:13px 10px;text-align:right;border-bottom:1px solid #eef1f5;white-space:nowrap}
#tab-control-room .cr-table td:first-child,#tab-control-room .cr-table th:first-child{text-align:left}
#tab-control-room .cr-table tr.cr-tot{background:#f0f4ff;font-weight:700}
#tab-control-room .cr-table tr.cr-tot td{color:#3158c9}
#tab-control-room .cr-pos{color:var(--cr-green)}
#tab-control-room .cr-neg{color:var(--cr-red)}
#tab-control-room .cr-nd{color:var(--cr-muted);font-style:italic}
#tab-control-room .cr-accent{color:var(--cr-blue)}
#tab-control-room .cr-alert{border-top:1px solid var(--cr-border);padding:17px 0}
#tab-control-room .cr-alert strong{font-size:12px}
#tab-control-room .cr-alert p{font-size:12px;margin:6px 0;color:var(--cr-muted);line-height:1.6}
#tab-control-room .cr-priority{display:inline-block;font-size:10px;color:#c77829;background:#fff1df;border-radius:4px;padding:3px 6px;margin-bottom:8px}
#tab-control-room .cr-pagefoot{display:flex;justify-content:space-between;font-size:10px;color:var(--cr-muted);margin:22px 0 0}
#tab-control-room .cr-dialog{border:0;border-radius:16px;padding:30px;width:650px;max-width:95vw;color:var(--cr-ink)}
#tab-control-room .cr-dialog::backdrop{background:#10213a88}
#tab-control-room .cr-guide{font-size:12px;line-height:1.8}
#tab-control-room .cr-guide h4{font-size:14px;margin:12px 0 4px}
@media(max-width:1100px){#tab-control-room .cr-grid{grid-template-columns:1fr}#tab-control-room .cr-kpis{gap:10px}#tab-control-room .cr-metric{font-size:25px}}
@media(max-width:740px){#tab-control-room .cr{padding:16px}#tab-control-room .cr-kpis{grid-template-columns:1fr 1fr}#tab-control-room .cr-top{display:block}#tab-control-room .cr-actions{margin-top:14px}#tab-control-room .cr-status{display:none}#tab-control-room .cr-h1{font-size:24px}}
@media print{#tab-control-room .cr-actions,#tab-control-room .cr-filters,#tab-control-room .cr-btn{display:none}#tab-control-room .cr{background:#fff;padding:0}#tab-control-room .cr-card{break-inside:avoid}}
/* Control Room: filtro strutture a scelta multipla (30/10/2026) */
#tab-control-room .cr-multi{position:relative}
#tab-control-room .cr-multi summary{padding:10px 34px 10px 12px;border:1px solid var(--cr-border);border-radius:8px;background:#fff;color:var(--cr-ink);cursor:pointer;list-style:none;max-width:300px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:190px}
#tab-control-room .cr-multi summary::-webkit-details-marker{display:none}
#tab-control-room .cr-multi summary::after{content:"\25BE";position:absolute;right:12px;top:10px}
#tab-control-room .cr-multi-pan{position:absolute;z-index:20;top:calc(100% + 4px);left:0;min-width:300px;max-height:360px;overflow:auto;background:#fff;border:1px solid var(--cr-border);border-radius:10px;box-shadow:0 10px 28px rgba(20,40,90,.16);padding:10px}
#tab-control-room .cr-multi-cmd{display:flex;gap:8px;margin-bottom:8px}
#tab-control-room .cr-multi-list label{display:flex;gap:8px;align-items:center;padding:5px 4px;cursor:pointer;border-radius:6px}
#tab-control-room .cr-multi-list label:hover{background:#edf1ff}
#tab-control-room .cr-exp{display:inline-flex;gap:6px}
#tab-control-room a.cr-btn{text-decoration:none;display:inline-block}
@media print{#tab-control-room .cr-exp{display:none}}

/* «Specialistica attivita' privata» (30/10/2026, Morvillo) */
.sp-filtri{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-start;margin:6px 0 10px}
.sp-multi{display:inline-block;position:relative;vertical-align:top}
.sp-multi summary{cursor:pointer;border:1px solid #c9d3dc;border-radius:6px;padding:6px 28px 6px 10px;background:#fff;list-style:none;min-width:170px;max-width:260px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;position:relative;font-size:13px}
.sp-multi summary::-webkit-details-marker{display:none}
.sp-multi summary::after{content:"\25BE";position:absolute;right:9px;top:6px}
.sp-multi-box{position:absolute;z-index:30;background:#fff;border:1px solid #c9d3dc;border-radius:6px;padding:8px 10px;min-width:260px;max-height:340px;overflow:auto;box-shadow:0 8px 22px rgba(20,40,90,.16)}
.sp-multi-cmd{display:flex;gap:6px;margin-bottom:6px}
.sp-multi-cmd button{border:1px solid #c9d3dc;background:#f7f9fb;border-radius:6px;padding:3px 9px;cursor:pointer;font-size:12px}
.sp-multi-box input.sp-cerca{width:100%;box-sizing:border-box;margin-bottom:6px;padding:4px 6px;border:1px solid #c9d3dc;border-radius:5px}
.sp-multi-box label{display:flex;gap:6px;align-items:center;padding:2px 0;cursor:pointer;font-size:13px}
.sp-exp{margin-left:auto;display:inline-flex;gap:6px}
.sp-exp a.btn-apply{text-decoration:none;padding:6px 12px;font-size:13px}
.sp-prog{display:inline-block;width:160px;height:8px;margin-left:8px;vertical-align:middle;background:#e3e8ee;border-radius:4px;overflow:hidden}
.sp-prog.hidden{display:none}
.sp-prog i{display:block;height:100%;width:3%;background:#2f6aa3;border-radius:4px;transition:width .6s ease}
.sp-grafico{background:#fff;border:1px solid #dfe4ea;border-radius:8px;padding:10px;margin:10px 0}
.sp-grafico svg{width:100%;height:auto;max-height:300px}
.sp-leg{display:flex;gap:14px;flex-wrap:wrap;font-size:15.2px;margin-top:4px}
.sp-leg i{display:inline-block;width:11px;height:11px;border-radius:2px;margin-right:5px;vertical-align:-1px}
table.sp-tab td.sp-pos{color:#1b7a3b}table.sp-tab td.sp-neg{color:#b3261e}
table.sp-tab thead th{white-space:nowrap}
table.sp-tab tfoot th,table.sp-tab tfoot td{background:#cfe0f0;font-weight:800;color:#12314f}
table.sp-tab td.sp-tot,table.sp-tab th.sp-tot{background:#eef3f8;font-weight:700}
table.sp-tab button.sp-piu{width:20px;height:20px;line-height:16px;padding:0;margin-right:4px;border:1px solid #9fb2c6;border-radius:4px;background:#f7f9fb;color:#12314f;font-weight:700;cursor:pointer}
table.sp-tab tr.sp-figlio td,table.sp-tab tr.sp-figlio th{background:#f3f7fb;font-size:12.5px}
table.sp-tab tr.sp-figlio[hidden]{display:none}

table.sp-tab th.sp-ord{cursor:pointer;user-select:none}table.sp-tab th.sp-ord:hover{text-decoration:underline}
table.sp-tab td.sp-rip{color:#7a8794}
table.sp-tab tr.sp-nipote td,table.sp-tab tr.sp-nipote th{background:#e9f0f7}

table.sp-tab tr.sp-sm-sede th{background:#dfeaf5;color:#12314f;text-align:left}table.sp-tab tr.sp-sm-tot th,table.sp-tab tr.sp-sm-tot td{background:#eef3f8;font-weight:700}table.sp-tab tr.sp-sm-mese th{font-weight:400;padding-left:18px;text-align:left}.sp-sm-tit{margin:22px 0 4px}

.sp-nota-vd{background:#fff7e6;border:1px solid #f0d9a8;border-left:4px solid #e08a1e;border-radius:6px;padding:8px 12px;margin:8px 0;font-size:13px;color:#4a3a14}

table.sp-tab th.sp-ds-tot,table.sp-tab td.sp-ds-tot{background:#dbe8c4;font-weight:700}table.sp-tab tr.sp-ds-delta th,table.sp-tab tr.sp-ds-delta td{font-weight:700;border-top:2px solid #12314f}table.sp-tab td.sp-neg{color:#c0271d}

/* due grafici KPI a destra del principale (01/11/2026): griglia a 2 colonne, colonna destra = meta' + meta' dell'altezza del principale */
.sp-griglia{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,calc((100% - 12px) * 0.2857 - 2cm));gap:12px;align-items:stretch;margin:10px 0}
.sp-griglia>.sp-grafico{margin:0 -1cm 0 0;min-width:0}
.sp-kpi-col{display:flex;flex-direction:column;gap:12px;min-width:0;min-height:0;position:relative;left:1cm}
.sp-kpi-col .sp-kpi{margin:0;flex:1 1 0;min-height:0;position:relative;overflow:hidden}
.sp-kpi-col .sp-kpi svg{position:absolute;left:0;top:0;width:100%;height:100%;max-height:none}
@media(max-width:900px){.sp-griglia>.sp-grafico{margin:0}.sp-kpi-col{left:0}.sp-griglia{grid-template-columns:minmax(0,1fr)}.sp-kpi-col .sp-kpi{flex:none;height:400px}}
@media print{.sp-kpi-col{display:none}.sp-griglia{display:block}}
table.sp-tab tr.sp-pre td,table.sp-tab tr.sp-pre th{background:#dfe9f3;font-size:12px}
table.sp-tab tr.sp-pre.sp-altre td{font-style:italic;color:#5f6b78}

/* 03/11/2026 — filtro Dal/Al accanto al Mese (periodo dinamico) */
.periodo-date{grid-column:span 2}
.periodo-date .pd-righe{display:flex;align-items:center;gap:6px}
.periodo-date .pd-righe input[type=date]{flex:1 1 0;min-width:130px;height:38px;padding:0 8px;border:1px solid var(--line);border-radius:8px;font:inherit;font-weight:400;background:#fff}
.periodo-date .pd-nota{display:block;font-size:11px;font-weight:400;line-height:1.35;color:#54636e;max-width:46em}
.periodo-date .pd-nota.pd-err{color:#b3261e;font-weight:600}
.sp-filtri .periodo-date{grid-column:auto;display:inline-flex;flex-direction:column;gap:3px;font-size:12px;font-weight:600;color:#54636e;min-width:300px;flex:1 1 300px}

/* Posti letto, allegati degli atti (05/11/2026): la graffetta del Budget accanto a «Atti autorizzativi e di accreditamento» */
.pl-doc{margin-left:8px;vertical-align:middle;cursor:pointer}
