
.deviation_positive { color: #198719; }
.deviation_negative { color: #c52222; }
.text-value-big { font-size:2.3em; }
.ytd-compare { width:100%; text-align:right; }
.ytd-title-table { vertical-align:middle; line-height:40px; font-size:1.7em; padding-top:35px }
.cb_bg_green { background-color: var(--tablevalidbgcolor) }

/* Sfondi distinti per le colonne ordine cliente: entity corrente vs entity sorgente (cross-entity).
   Uso !important perche' l'intestazione (.liste_titre) ha gia' uno sfondo dal tema con specificita' potenzialmente maggiore. */
.cb_bg_co_local { background-color: #e6f2ff !important; }
.cb_bg_co_crossentity { background-color: #fff2e6 !important; }
/* Sfondo colonne ordine fornitore collegato nelle competenze passive */
.cb_bg_of { background-color: #f0f7e6 !important; }

/* Totale quota dell'anno nella riga dei totali di list_competenze_attive.php: e' il valore che
   si confronta con il riquadro "Fatturato attivo" del report YTD per competenza, quindi deve
   saltare all'occhio. Verde ricavo (#198719) come da convenzione del modulo, rosso se negativo. */
.cb_totalquota { display: inline-block; padding: 3px 9px; border-radius: 4px; background-color: #198719; color: #fff; font-weight: bold; font-size: 1.05em; }
.cb_totalquota_neg { background-color: #c52222; }
.cb_totalquota_days { display: inline-block; margin-top: 2px; font-size: 0.85em; color: #666; }

/* Turnover by product classes */
.tbp_positive { background-color: rgba(25, 135, 25, 0.15); color: #198719; }
.tbp_negative { background-color: rgba(197, 34, 34, 0.15); color: #c52222; }


.num-cell { font-weight: bold; font-size: 14px; width: 100px; }
.subject-cell { max-width: 200px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis; }

/* Stili migliorati per importi entrate e uscite */
.expense {
color: #c52222;
width: 100px;
font-weight: 700;
font-size: 1.05em;
text-shadow: 0 1px 2px rgba(197, 34, 34, 0.2);
background-color: rgba(197, 34, 34, 0.05);
padding: 4px 8px;
/*border-radius: 4px;*/
/*border-left: 3px solid #c52222;*/
transition: all 0.2s ease;
}

.income {
color: #198719;
width: 100px;
font-weight: 700;
font-size: 1.05em;
text-shadow: 0 1px 2px rgba(25, 135, 25, 0.2);
background-color: rgba(25, 135, 25, 0.05);
padding: 4px 8px;
/*border-radius: 4px;*/
/*border-left: 3px solid #198719;*/
transition: all 0.2s ease;
}

/* Effetti hover per maggiore interattività */
.expense:hover {
background-color: rgba(197, 34, 34, 0.1);
transform: translateX(2px);
box-shadow: 0 2px 8px rgba(197, 34, 34, 0.15);
}

.income:hover {
background-color: rgba(25, 135, 25, 0.1);
transform: translateX(2px);
box-shadow: 0 2px 8px rgba(25, 135, 25, 0.15);
}
table.nobottomiftotal tr.liste_total td.expense_total { color: #FFFFFF; background-color: #c52222; }
table.nobottomiftotal tr.liste_total td.income_total { color: #FFFFFF; background-color: #198719; }
.month_year { font-weight: bold;}
.month_year:hover { text-decoration: underline; cursor: pointer; }
td.opentbody { background-color:rgb(232, 171, 28); cursor: pointer; }
td.opentbody:hover { background-color: #c0c8c3; }

.budget-extra-row td { background-color: #efdeb4 !important; }

/* Dashboard - Intestazioni Sezioni Belle */

.cb-section-header {
padding: 14px 18px;
margin-bottom: 0;
font-weight: 600;
font-size: 15px;
text-transform: uppercase;
letter-spacing: 0.5px;
display: flex;
align-items: center;
gap: 10px;
border-radius: 10px 10px 0 0;
box-shadow: 0 2px 8px rgba(0,0,0,0.15);
position: relative;
transition: all 0.3s ease;
}

.cb-section-header:hover {
transform: translateY(-2px);
box-shadow: 0 4px 12px rgba(0,0,0,0.2);
}

.cb-section-header::after {
content: '';
position: absolute;
bottom: -3px;
left: 0;
right: 0;
height: 3px;
border-radius: 0 0 3px 3px;
}

/* Sezioni Attive (Verde) - Entrate e Ricavi */
.cb-active-section {
background: linear-gradient(135deg, #2e7d32 0%, #4caf50 50%, #66bb6a 100%);
border: none;
color: white;
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
}

.cb-active-section::after {
background: linear-gradient(90deg, #1b5e20, #2e7d32, #1b5e20);
}

/* Sezioni Passive (Rosso) - Uscite e Costi */
.cb-passive-section {
background: linear-gradient(135deg, #c62828 0%, #f44336 50%, #e57373 100%);
border: none;
color: white;
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
}

.cb-passive-section::after {
background: linear-gradient(90deg, #b71c1c, #c62828, #b71c1c);
}

/* Titoli delle Sezioni */
.cb-title-active, .cb-title-passive {
color: white;
font-weight: 600;
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
}

/* Importi */
.cb-amount-positive {
color: #1b5e20;
font-weight: bold;
font-size: 1.05em;
}

.cb-amount-negative {
color: #b71c1c;
font-weight: bold;
font-size: 1.05em;
}

/* Importi linkati del cruscotto (index.php): niente sottolineatura */
a.cb-amount-positive, a.cb-amount-negative { text-decoration: none; }

/* Icone con stili migliorati */
.cb-revenue-icon {
color: white;
font-size: 1.3em;
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
filter: drop-shadow(0 2px 4px rgba(255,255,255,0.1));
}

.cb-payment-icon {
color: white;
font-size: 1.3em;
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
filter: drop-shadow(0 2px 4px rgba(255,255,255,0.1));
}

.cb-warning-icon {
color: white;
font-size: 1.3em;
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
filter: drop-shadow(0 2px 4px rgba(255,255,255,0.1));
}

.cb-alert-icon {
color: white;
font-size: 1.3em;
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
filter: drop-shadow(0 2px 4px rgba(255,255,255,0.1));
}

.cb-calendar-icon {
color: white;
font-size: 1.1em;
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
filter: drop-shadow(0 2px 4px rgba(255,255,255,0.1));
}

/* Icone calendario nelle righe delle tabelle - BLU */
table tr td .cb-calendar-icon {
color: #2196F3;
text-shadow: none;
filter: none;
}

/* Effetto hover per le tabelle sotto le intestazioni */
.cb-section-header + .div-table-responsive-no-min table tr:hover {
background-color: rgba(0,0,0,0.05);
transition: background-color 0.2s ease;
}

/* Miglioramento generale delle tabelle del dashboard */
.cb-section-header + .div-table-responsive-no-min table {
border-radius: 0 0 10px 10px;
overflow: hidden;
box-shadow: 0 2px 6px rgba(0,0,0,0.1);
}

/* ==========================================
STILI YTD REPORT - BOX MODERNI
========================================== */

/* Stili box moderni per sostituire bg-success, bg-danger, bg-warning */
.card.bg-success {
background: linear-gradient(135deg, #2e7d32 0%, #4caf50 50%, #66bb6a 100%) !important;
border: none;
box-shadow: 0 4px 15px rgba(76, 175, 80, 0.3);
transition: all 0.3s ease;
border-radius: 12px;
overflow: hidden;
}

.card.bg-success:hover {
transform: translateY(-5px);
box-shadow: 0 8px 25px rgba(76, 175, 80, 0.4);
}

.card.bg-danger {
background: linear-gradient(135deg, #c62828 0%, #f44336 50%, #e57373 100%) !important;
border: none;
box-shadow: 0 4px 15px rgba(244, 67, 54, 0.3);
transition: all 0.3s ease;
border-radius: 12px;
overflow: hidden;
}

.card.bg-danger:hover {
transform: translateY(-5px);
box-shadow: 0 8px 25px rgba(244, 67, 54, 0.4);
}

.card.bg-warning {
background: linear-gradient(135deg, #f57c00 0%, #ff9800 50%, #ffb74d 100%) !important;
border: none;
box-shadow: 0 4px 15px rgba(255, 152, 0, 0.3);
transition: all 0.3s ease;
border-radius: 12px;
overflow: hidden;
}

.card.bg-warning:hover {
transform: translateY(-5px);
box-shadow: 0 8px 25px rgba(255, 152, 0, 0.4);
}

/* Miglioramenti tipografici per i box */
.card .text-value-big {
font-size: 2.6em !important;
font-weight: 700;
text-shadow: 0 2px 4px rgba(0,0,0,0.3);
margin-bottom: 5px;
}

.card-body {
padding: 15px !important;
color: white;
}

.card-body div:not(.text-value-big) {
font-size: 14px;
font-weight: 500;
text-shadow: 0 1px 2px rgba(0,0,0,0.3);
opacity: 0.95;
}

/* Stile titoli YTD */
.ytd-title-table {
color: #2c3e50;
/*font-weight: 600;*/
text-transform: uppercase;
letter-spacing: 1px;
/*border-left: 4px solid #3498db;*/
padding-left: 15px;
margin-left: 10px;
}

/* Miglioramento comparazione percentuali */
.ytd-compare {
font-size: 12px;
font-weight: 600;
background: rgba(255,255,255,0.2);
padding: 4px 8px;
border-radius: 6px;
margin-bottom: 5px;
}

/* Responsiveness migliorata */
@media (max-width: 768px) {
.col-lg-3 {
margin-bottom: 20px;
}

.card .text-value-big {
font-size: 2.2em !important;
}

.ytd-title-table {
font-size: 1.8em;
padding-top: 20px;
}
}

/* Cashflow Reports Styles */
#cashflow {
border-collapse: collapse;
width:100%;
font-family: Arial, sans-serif;
font-size:13px;
}

#cashflow th.cb-year {
background: #2b6fa6;
color: #fff;
padding: 10px;
font-weight:700;
}

#cashflow th.cb-col {
background: #f5f7fa;
padding: 8px;
border-bottom: 2px solid #e6e9ef;
text-align: right;
}

#cashflow th.cb-month {
background: transparent;
text-align: left;
padding: 8px;
}

#cashflow td.nowrap, #cashflow th.nowrap {
white-space: nowrap;
}

#cashflow td.cb-month {
background: #fbfbfb;
padding: 8px;
font-weight:600;
}

#cashflow tr.liste_total td {
background:#f8f8f8;
font-weight:700;
}

/* Classi per le colonne degli anni con grigi diversi */
#cashflow td.cb-year-1 {
background-color: #f8f8f8;
}

#cashflow td.cb-year-2 {
background-color: #f1f1f1;
}

#cashflow td.cb-year-3 {
background-color: #eaeaea;
}

#cashflow td.cb-year-4 {
background-color: #e3e3e3;
}

/* Classe per la cella del mese */
#cashflow td.cb-month-cell {
background-color: #fefefe;
}

/* Separatori verticali per gli anni */
#cashflow th.cb-year-separator {
border-left: 3px solid #2b6fa6;
}

#cashflow th.cb-col-separator {
border-left: 3px solid #cccccc;
}

#cashflow td.cb-col-separator {
border-left: 3px solid #cccccc;
}


/* ==========================================
STILI PER SCADENZIARIO - ANIMAZIONI FLUIDE
========================================== */

/* Contenitore mese con animazioni ottimizzate */
.month-content {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
overflow: hidden;
opacity: 1;
transform: scaleY(1);
transform-origin: top;
}

/* Stato collassato */
.month-content.collapsed {
opacity: 0;
transform: scaleY(0);
height: 0 !important;
margin: 0;
padding: 0;
}

/* Durante l'animazione */
.month-content.collapsing {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
overflow: hidden;
}

/* Icona toggle con rotazione fluida */
.toggle-icon {
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1) !important;
display: inline-block;
transform-origin: center;
}

/* Header del mese cliccabile */
.month-header {
transition: all 0.2s ease;
cursor: pointer;
user-select: none;
border-radius: 4px;
}

.month-header:hover {
background-color: rgba(0,0,0,0.04);
transform: translateX(2px);
}

.month-header:hover .toggle-icon {
transform: scale(1.1);
color: ##198719;
}

/* Feedback visivo al clic */
.month-header:active {
transform: scale(0.98) translateX(2px);
background-color: rgba(0,0,0,0.06);
}

/* Icone con colori dinamici */
.toggle-icon.fa-chevron-down {
color: ##198719;
}

.toggle-icon.fa-chevron-right {
color: #666;
}

/* Animazione delle righe della tabella */
.month-content tbody tr {
transition: all 0.2s ease;
}

.month-content tbody tr:hover {
background-color: rgba(76, 175, 80, 0.05);
transform: translateX(3px);
box-shadow: 2px 0 8px rgba(76, 175, 80, 0.1);
}

/* Miglioramento visivo generale */
.liste_titre .month-header {
position: relative;
}

.liste_titre .month-header::after {
content: '';
position: absolute;
bottom: 0;
left: 0;
width: 0;
height: 2px;
background: linear-gradient(90deg, ##198719, #81C784);
transition: width 0.3s ease;
}

.liste_titre .month-header:hover::after {
width: 100%;
}

/* Icona calendario del mese */
.month-header .fa-calendar {
color: ##198719 !important;
font-size: 1.1em;
margin-right: 8px;
transition: all 0.3s ease;
text-shadow: 0 1px 2px rgba(76, 175, 80, 0.3);
}

.month-header:hover .fa-calendar {
color: #2E7D32 !important;
transform: scale(1.1);
text-shadow: 0 2px 4px rgba(46, 125, 50, 0.4);
}

/* Stile del nome del mese */
.month_year {
font-weight: 600;
color: #2c3e50;
transition: color 0.3s ease;
}

.month-header:hover .month_year {
color: #1B5E20;
}

/* ==========================================
STILI PER REPORT FORNITORI - HEADER STATO
========================================== */

.supplier-detail-container { transition: all 0.3s ease-in-out; }
.supplier-detail-content { transition: opacity 0.3s ease-in-out; }
.supplier-header { padding: 10px; border-radius: 5px; transition: background-color 0.2s ease; }
.supplier-header-closed { background-color: #e8f4f8; }
@media (max-width: 1200px) { .supplier-detail-flex { flex-direction: column !important; } .supplier-detail-flex > div {
min-width: 100% !important; } };

/* Stile header fornitore - Stato chiuso (default) */
.supplier-header-closed {
background-color: #ffffff;
border-left: 4px solid #e0e0e0;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.supplier-header-closed:hover {
background-color: #f5f5f5;
border-left-color: #999999;
}

/* Stile header fornitore - Stato aperto */
.supplier-header-open {
background: linear-gradient(135deg, #e8f5e9 0%, #f1f8f6 100%);
border-left: 4px solid #4caf50;
box-shadow: 0 2px 8px rgba(76, 175, 80, 0.15);
transform: translateX(2px);
}

.supplier-header-open h4 {
color: #1b5e20;
font-weight: 600;
}

/* Animazione smooth del toggle */
.supplier-header {
padding: 12px 16px;
margin-bottom: 0;
border-radius: 4px 4px 0 0;
cursor: pointer;
user-select: none;
transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}

.supplier-header span {
transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
display: inline-block;
}

a.force_color_red { color: rgba(244, 67, 54, 1.0) !important;}

/* ==========================================
STILI PER DIV STICKY TOTALI SELEZIONE SCADENZARIO
========================================== */

/* FEAT_SCADENZARIO_STICKY_TOTALS: Container sticky per totali selezione */
#sticky-selection-totals {
position: fixed;
top: 100px;
right: 20px;
background: linear-gradient(135deg, #ffffff 0%, #f8f9fa 100%);
border: 2px solid #e0e0e0;
border-radius: 12px;
padding: 16px 20px;
box-shadow: 0 8px 24px rgba(0, 0, 0, 0.15);
z-index: 999;
min-width: 280px;
opacity: 0;
transform: translateX(100%);
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
pointer-events: none;
cursor: move;
user-select: none;
}

/* Stato dragging */
#sticky-selection-totals.dragging {
cursor: grabbing;
box-shadow: 0 12px 32px rgba(0, 0, 0, 0.25);
transform: scale(1.02);
transition: box-shadow 0.2s ease, transform 0.2s ease;
}

/* Stato visibile */
#sticky-selection-totals.visible {
opacity: 1;
transform: translateX(0);
pointer-events: auto;
}

/* Stato visibile e dragging - disabilita transizione per movimento fluido */
#sticky-selection-totals.visible.dragging {
transition: box-shadow 0.2s ease, transform 0.2s ease;
}

/* Header del box */
.sticky-totals-header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: 12px;
padding-bottom: 10px;
border-bottom: 2px solid #e0e0e0;
}

.sticky-totals-title {
font-size: 14px;
font-weight: 700;
color: #2c3e50;
text-transform: uppercase;
letter-spacing: 0.5px;
display: flex;
align-items: center;
gap: 8px;
cursor: grab;
}

.sticky-totals-title:active {
cursor: grabbing;
}

.sticky-totals-title i {
color: #3498db;
font-size: 16px;
}

.sticky-totals-title .fa-arrows {
color: #95a5a6;
font-size: 14px;
margin-right: 4px;
opacity: 0.7;
transition: all 0.3s ease;
}

.sticky-totals-title:hover .fa-arrows {
opacity: 1;
color: #7f8c8d;
transform: scale(1.1);
}

.sticky-totals-count {
background: linear-gradient(135deg, #3498db 0%, #2980b9 100%);
color: white;
padding: 2px 8px;
border-radius: 12px;
font-size: 11px;
font-weight: 600;
min-width: 24px;
text-align: center;
box-shadow: 0 2px 4px rgba(52, 152, 219, 0.3);
}

/* Righe dei totali */
.sticky-totals-row {
display: flex;
justify-content: space-between;
align-items: center;
padding: 8px 0;
transition: all 0.2s ease;
}

.sticky-totals-row:hover {
transform: translateX(3px);
}

.sticky-totals-label {
font-size: 13px;
font-weight: 600;
display: flex;
align-items: center;
gap: 6px;
}

/* Icone dei totali */
.sticky-income-icon {
color: #198719;
font-size: 14px;
}

.sticky-expense-icon {
color: #c52222;
font-size: 14px;
}

/* Valori dei totali */
.sticky-totals-value {
font-size: 16px;
font-weight: 700;
padding: 4px 10px;
border-radius: 6px;
text-shadow: 0 1px 2px rgba(0,0,0,0.1);
transition: all 0.2s ease;
}

.sticky-income-value {
color: #198719;
background-color: rgba(25, 135, 25, 0.1);
}

.sticky-expense-value {
color: #c52222;
background-color: rgba(197, 34, 34, 0.1);
}

.sticky-totals-value:hover {
transform: scale(1.05);
box-shadow: 0 2px 6px rgba(0,0,0,0.15);
}

/* Separatore */
.sticky-totals-separator {
height: 1px;
background: linear-gradient(90deg, transparent, #e0e0e0, transparent);
margin: 8px 0;
}

/* Responsive */
@media (max-width: 1024px) {
#sticky-selection-totals {
top: 80px;
right: 10px;
min-width: 240px;
padding: 12px 16px;
}

.sticky-totals-value {
font-size: 14px;
}
}

@media (max-width: 768px) {
#sticky-selection-totals {
position: fixed;
top: auto;
bottom: 10px;
right: 10px;
left: 10px;
min-width: auto;
border-radius: 8px;
}
}
/* Scadenzario: limita la larghezza della colonna "Rif." (riferimento interno) per evitare che
   ref cliente/fornitore, descrizione o link fattura la rendano troppo larga. Il testo eccedente
   viene troncato con ellissi; il testo completo resta nel tooltip nativo del link/getNomUrl. */
th.cb-rif-internal,
td.cb-rif-internal {
max-width: 250px;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}

/* Scadenzario: colonna checkbox iniziale stretta (15px) e colonna data subito dopo più stretta */
td.cb-check-col { width: 15px; min-width: 15px; max-width: 15px; padding-left: 2px; padding-right: 2px; }
td.cb-data-col { width: 90px; min-width: 90px; max-width: 90px; }
/* Riduce gli input data dei filtri (data scadenza) così non allargano la colonna data */
#searchFormList input[name="due_start"],
#searchFormList input[name="due_end"] { width: 120px; max-width: 120px; box-sizing: border-box; }

/* Scadenzario: riga "Delta" (saldo netto entrate-uscite) sotto ogni mese e sul totale generale */
tr.cb-delta-row td { background-color: #f7f7f7 !important; }
tr.cb-delta-row td.delta-td { background-color: #e0e0e0 !important; }
.cb-delta-pos, .cb-delta-neg { display: inline-block; padding: 2px 10px; border-radius: 4px; color: #FFFFFF; font-weight: 700; }
.cb-delta-pos { background-color: #198719; }
.cb-delta-neg { background-color: #c52222; }

/* Report fatturato reale (billed_real): selettore colonne opzionali a pillole.
   Pattern "segmented control" condiviso tra i moduli (vedi timesheetimport .tsdash_segmented):
   pillola piena = colonna visibile/inclusa nei conteggi, outline = colonna esclusa. */
.cbrep_colfilter { display: flex; align-items: center; flex-wrap: wrap; gap: 10px; margin: 6px 0 16px 0; }
.cbrep_colfilter_lbl { font-size: 11px; text-transform: uppercase; letter-spacing: .4px; color: #777; font-weight: bold; }
.cbrep_segmented { display: inline-flex; border: 1px solid #34638f; border-radius: 18px; overflow: hidden; }
/* Selettori con "a." + pseudo-classi: il tema Dolibarr stila i link con a:link/a:visited
   (specificita' 0,1,1) che vincerebbe sulla sola classe (0,1,0) -> testo blu su blu */
a.cbrep_seg, a.cbrep_seg:link, a.cbrep_seg:visited { padding: 5px 16px; font-size: 13px; text-decoration: none; color: #34638f; background: #fff; border-right: 1px solid #34638f; white-space: nowrap; }
a.cbrep_seg:last-child { border-right: 0; }
a.cbrep_seg:hover { background: #eef3f8; color: #34638f; }
a.cbrep_seg.cbrep_seg_active, a.cbrep_seg.cbrep_seg_active:link, a.cbrep_seg.cbrep_seg_active:visited, a.cbrep_seg.cbrep_seg_active:hover { background: #34638f; color: #fff; font-weight: bold; }
/* Anche l'icona FontAwesome dentro la pillola deve seguire il colore del testo */
a.cbrep_seg i, a.cbrep_seg:visited i { color: inherit; }
/* Riga che affianca i due selettori (Mostra colonne + Considera nel calcolo): ogni gruppo
   e' impilato verticalmente con l'etichetta sopra e le pillole sotto. L'override e' scoped
   dentro .cbrep_colfilters_row per non alterare l'uso inline di .cbrep_colfilter altrove. */
.cbrep_colfilters_row { display: flex; flex-wrap: wrap; align-items: flex-start; gap: 28px; margin: 6px 0 10px 0; }
.cbrep_colfilters_row .cbrep_colfilter { flex-direction: column; align-items: flex-start; gap: 6px; margin: 0; }
/* Asterisco sul titolo di colonna mostrata ma esclusa dal calcolo, e relativa legenda */
.cbrep_notcounted { color: #c52222; font-weight: bold; cursor: help; }
.cbrep_colfilter_note { font-size: 11px; margin: 0 0 14px 0; }

/* Scadenzario: pannello dell'ingranaggio scelta colonne (multiSelectArrayWithCheckbox).
   Il core gli assegna z-index 1 (theme eldy, .dropdown dd ul): qui viene coperto dalle righe
   totali della tabella e dal box sticky dei totali selezione (z-index 999) -> lo alziamo sopra tutto. */
.cb-selectedfields .dropdown dd ul { z-index: 1001; }

/* Scadenzario: la th che ospita l'ingranaggio NON deve avere l'opacity 0.8 del tema
   (tr.liste_titre th.liste_titre:not(.maxwidthsearch) { opacity: 0.8; }): opacity < 1 crea uno
   stacking context che intrappola il pannello del dropdown sotto le righe successive della
   tabella, rendendo inutile qualsiasi z-index interno. !important per vincere sulla regola
   del tema che ha specificita' piu' alta grazie al :not(). */
tr.liste_titre th.liste_titre.cb-colselector-th { opacity: 1 !important; }

/* ============================================================================
   Report YTD a riquadri (report_ytd.php / report_ytd_competenza.php)
   Card KPI in stile condiviso tra i moduli (vedi timesheetimport .tsdash_card):
   card neutra con bordo sinistro spesso colorato, valore numerico grande nello
   stesso colore del bordo, etichetta piccola in maiuscoletto grigio sotto.
   Sostituisce le vecchie card CoreUI a fondo pieno verde/rosso/arancio.
   Il colore identifica l'anno della colonna: y3 = anno selezionato,
   y2 = anno precedente, y1 = due anni prima.
   ============================================================================ */

/* Griglia della riga: titolo di sezione + un box per anno. L'override e' scoped dentro
   .ytd-app-body perche' le due pagine caricano ancora la .row di CoreUI
   (templates/css/style.css), che avrebbe margini negativi di 15px. */
.ytd-app-body .row { display: flex; flex-wrap: wrap; align-items: stretch; gap: 12px; margin: 0 0 12px 0; }
.ytd-app-body .cb-kpi-board { margin-top: 15px; }

/* Cella del titolo di riga (e intestazione con gli anni): stessa larghezza dei box */
.cb-kpi-title { flex: 1 1 220px; min-width: 180px; display: flex; align-items: center; padding: 4px 2px; box-sizing: border-box; }
.cb-kpi-title_txt { font-size: 1.05em; font-weight: 700; text-transform: uppercase; letter-spacing: .5px; color: #2c3e50; line-height: 1.3; }

/* Card del singolo dato */
.cb-kpi { flex: 1 1 220px; min-width: 180px; position: relative; box-sizing: border-box; display: flex; flex-direction: column; background: #f7f9fb; border: 1px solid #e3e9ef; border-left: 5px solid #34638f; border-radius: 6px; padding: 12px 14px; overflow: hidden; }
.cb-kpi_value { font-size: 1.7em; font-weight: 700; line-height: 1.2; color: #34638f; }
.cb-kpi_label { margin: 6px 0 10px 0; font-size: 11px; text-transform: uppercase; letter-spacing: .4px; color: #777; font-weight: bold; line-height: 1.4; }
/* Icona di aiuto accanto all'etichetta di una card KPI: si apre al clic */
.cb-kpi_label .cb-kpi_help { margin-left: 4px; cursor: pointer; opacity: 0.75; }
.cb-kpi_label .cb-kpi_help:hover { opacity: 1; }

/* Confronto con l'anno precedente: neutro (la crescita e' positiva sui ricavi ma negativa sui
   costi), con la sola freccia colorata a indicare la direzione. E' una banda a fondo card,
   allineata a destra e con sfondo leggermente piu' scuro: i margini negativi valgono quanto il
   padding della card (12px 14px) cosi' la banda ne tocca i bordi, l'overflow:hidden della card
   ne taglia gli angoli arrotondati e il margin-top:auto la tiene incollata in basso anche
   quando la card viene stirata da una piu' alta sulla stessa riga. */
.cb-kpi_trend { margin: auto -14px -12px -14px; padding: 6px 14px; border-top: 1px solid #e3e9ef; background: #edf1f6; text-align: right; font-size: 12px; font-weight: 600; color: #555; }
.cb-kpi_arrow { font-weight: 700; }
/* Lente di approfondimento in alto a destra. Selettori con "a." + pseudo-classi: il tema
   Dolibarr stila i link con a:link/a:visited e vincerebbe sulla sola classe. */
a.cb-kpi_zoom, a.cb-kpi_zoom:link, a.cb-kpi_zoom:visited { position: absolute; top: 8px; right: 10px; color: #9aa7b4; font-size: 13px; text-decoration: none; }
a.cb-kpi_zoom:hover { color: #34638f; }
a.cb-kpi_zoom i { color: inherit; }

/* Varianti colore per anno */
.cb-kpi-y3 { border-left-color: #34638f; }
.cb-kpi-y3 .cb-kpi_value, .cb-kpi-y3 .cb-kpi_arrow { color: #34638f; }
.cb-kpi-y2 { border-left-color: #0d9488; }
.cb-kpi-y2 .cb-kpi_value, .cb-kpi-y2 .cb-kpi_arrow { color: #0d9488; }
.cb-kpi-y1 { border-left-color: #7c3aed; }
.cb-kpi-y1 .cb-kpi_value, .cb-kpi-y1 .cb-kpi_arrow { color: #7c3aed; }

/* Verso della variazione rispetto all'anno prima: verde se migliorativa, rosso se peggiorativa.
   Il verso dipende dalla riga (su un costo la crescita e' peggiorativa) e arriva dal parametro
   $higherisbetter di drawbox(). La freccia va forzata con un selettore piu' specifico delle
   varianti per anno qui sopra (.cb-kpi-yN .cb-kpi_arrow), che altrimenti la ricolorerebbero. */
.cb-kpi_trend_good { background: #eaf5ea; border-top-color: #cfe6cf; color: #198719; }
.cb-kpi_trend_bad { background: #fbeaea; border-top-color: #f0cfcf; color: #c52222; }
.cb-kpi .cb-kpi_trend_good .cb-kpi_arrow { color: #198719; }
.cb-kpi .cb-kpi_trend_bad .cb-kpi_arrow { color: #c52222; }

@media (max-width: 767px) {
.cb-kpi, .cb-kpi-title { flex: 1 1 100%; }
.cb-kpi_value { font-size: 1.5em; }
}

/* Anno nell'intestazione della prima riga: stesso colore della colonna, fa da legenda */
.cb-kpi-title_y3 { color: #34638f; }
.cb-kpi-title_y2 { color: #0d9488; }
.cb-kpi-title_y1 { color: #7c3aed; }

/* ============================================================================
   Analisi del venduto: card KPI per unita' produttiva / piano dei conti in testa ai report
   pivot (turnoverbyup.php, turnoverbyup_competenza.php, turnoverbypdc_competenza.php).
   Riusa le .cb-kpi dello YTD; qui la palette ciclica distingue le UP fra loro.
   ============================================================================ */
.cb-kpi-up-board { margin: 8px 0 14px 0; }
.cb-kpi-up-row { display: flex; flex-wrap: wrap; align-items: stretch; gap: 12px; }
.cb-kpi-up-row .cb-kpi-title { flex: 1 1 100%; min-width: 0; }
.cb-kpi-up-row .cb-kpi { flex: 1 1 160px; min-width: 150px; }
.cb-kpi-up0 { border-left-color: #34638f; } .cb-kpi-up0 .cb-kpi_value { color: #34638f; }
.cb-kpi-up1 { border-left-color: #0d9488; } .cb-kpi-up1 .cb-kpi_value { color: #0d9488; }
.cb-kpi-up2 { border-left-color: #d97706; } .cb-kpi-up2 .cb-kpi_value { color: #d97706; }
.cb-kpi-up3 { border-left-color: #7c3aed; } .cb-kpi-up3 .cb-kpi_value { color: #7c3aed; }
.cb-kpi-up4 { border-left-color: #2563eb; } .cb-kpi-up4 .cb-kpi_value { color: #2563eb; }
.cb-kpi-up5 { border-left-color: #be185d; } .cb-kpi-up5 .cb-kpi_value { color: #be185d; }
.cb-kpi-uptotal { border-left-color: #198719; background: #f3faf3; } .cb-kpi-uptotal .cb-kpi_value { color: #198719; }
/* Bottoni cerca/azzera nella riga filtri dei report (al posto dello style inline) */
.cb-venduto-searchbtn { vertical-align: middle; display: inline-block; }
/* Qualita' dei dati: badge di stato dei controlli e guida */
.cb-dq-ok { background: #198719; color: #fff; }
.cb-dq-ko { background: #c52222; color: #fff; }
.cb-dq-guide p { margin: 6px 0; line-height: 1.5; }
/* Nota sulla regola di competenza sotto il titolo */
.cb-competenza-info { margin: 4px 0 10px 0; font-size: 0.95em; }
/* Contenitori dei grafici della dashboard (altezza fissa per Chart.js) */
.cb-venduto-chart { height: 350px; max-height: 350px; }
.cb-venduto-charts-flex { display: flex; gap: 20px; }
.cb-venduto-chart-1 { flex: 1; max-height: 400px; }
.cb-venduto-chart-2 { flex: 2; max-height: 400px; }
.cb-venduto-pos { color: #198719; }
.cb-venduto-neg { color: #c52222; }
.cb-venduto-colnum { width: 40px; }
/* Bilancino ricavi e andamento anno */
.cb-bilancino-code { width: 110px; }
.cb-bilancino-sub { padding-left: 18px !important; }
tr.cb-bilancino-group td { background: #eef3f8; border-top: 2px solid #c9d6e3; }
tr.cb-and-classrow td { background: #eef3f8; font-weight: 600; border-top: 2px solid #c9d6e3; }
tr.cb-and-classrow2 td { border-top: 0; }
tr.cb-and-r td:first-child { border-left: 5px solid #198719; }
tr.cb-and-o td:first-child { border-left: 5px solid #d97706; }
tr.cb-and-u td:first-child { border-left: 5px solid #c52222; }
tr.cb-and-prodrow td:first-child { padding-left: 24px; }
/* Colonna classe/prodotto: larghezza contenuta, nomi lunghi troncati con ellissi (il title porta il nome intero) */
td.cb-and-label { max-width: 420px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
tr.cb-and-prodrow2 td { border-top: 0; }
tr.cb-and-hidden { display: none; }
a.cb-and-toggle, a.cb-and-toggle:link, a.cb-and-toggle:visited { color: #34638f; text-decoration: none; }
a.cb-and-toggle.cb-and-open i { transform: rotate(180deg); display: inline-block; }
th.cb-and-lastmonth { text-decoration: underline; }
/* Totali dell'andamento (colonna Totale e righe di totale): pillola blu a testo bianco, link compreso */
span.cb-and-delta { font-size: 0.85em; white-space: nowrap; }
span.cb-and-tot { display: inline-block; padding: 2px 8px; border-radius: 4px; background: #34638f; color: #fff; font-weight: 600; }
span.cb-and-tot a.cb-drill, span.cb-and-tot a.cb-drill:link, span.cb-and-tot a.cb-drill:visited, span.cb-and-tot a.cb-drill:hover { color: #fff; border-bottom-color: rgba(255,255,255,0.6); }
span.cb-and-tot .opacitymedium { color: #fff; opacity: 0.8; }
/* Soffietti (accordion) per le tabelle di dettaglio dei report */
details.cb-accordion { margin: 0 0 14px 0; border: 1px solid #e3e9ef; border-radius: 6px; background: #fff; }
details.cb-accordion > summary.cb-accordion_sum { list-style: none; cursor: pointer; padding: 8px 12px; background: #34638f; color: #fff; font-weight: 600; border-radius: 6px; display: flex; align-items: center; }
details.cb-accordion[open] > summary.cb-accordion_sum { border-radius: 6px 6px 0 0; }
details.cb-accordion > summary.cb-accordion_sum::-webkit-details-marker { display: none; }
details.cb-accordion > summary.cb-accordion_sum i, details.cb-accordion > summary.cb-accordion_sum .opacitymedium { color: #fff; }
details.cb-accordion > summary.cb-accordion_sum .cb-accordion_chev { margin-left: auto; transition: transform .2s; }
details.cb-accordion[open] > summary.cb-accordion_sum .cb-accordion_chev { transform: rotate(180deg); }
details.cb-accordion > .cb-accordion_body { padding: 8px 10px 4px 10px; }
tr.cb-bilancino-budget td { background: #eef7ee; }
/* Badge di modalita' dei report (per data fattura / per competenza): solo colori, dimensioni dal tema (#78) */
.cb-mode-badge { margin-left: 8px; vertical-align: middle; }
.cb-mode-badge-data { background-color: #34638f !important; color: #fff !important; }
.cb-mode-badge-comp { background-color: #0d9488 !important; color: #fff !important; }
.cb-mode-badge i { color: #fff; }
.cb-mode-badge-row { margin: 4px 0 10px 0; }
/* Cifre cliccabili (drill-down ai documenti): testo del colore della tabella, sottolineatura solo al passaggio */
a.cb-drill, a.cb-drill:link, a.cb-drill:visited { color: inherit; text-decoration: none; border-bottom: 1px dotted #9aa7b4; }
a.cb-drill:hover { color: #34638f; border-bottom-style: solid; }
.cb-drill-banner { margin: 6px 0 10px 0; padding: 8px 12px; background: #eef3f8; border-left: 5px solid #34638f; border-radius: 4px; }
/* Cruscotto dei report: rettangoli per gruppo del menu, colore dalla custom property --cbgroup */
/* Prodotti per conto nella pagina di configurazione dei ricavi */
.cb-acc-products { display: inline-flex; flex-wrap: wrap; gap: 4px 8px; max-width: 760px; }
.cb-acc-product { white-space: nowrap; }
.cb-acc-product_off { opacity: 0.55; }
a.cb-acc-product_more, a.cb-acc-product_more:link, a.cb-acc-product_more:visited { color: #34638f; font-style: italic; }
/* Ricerca al volo nel cruscotto dei report */
.cb-reports-search { display: flex; align-items: center; gap: 8px; margin: 12px 0 4px 0; padding: 6px 12px; background: #f7f9fb; border: 1px solid #e3e9ef; border-radius: 6px; }
.cb-reports-search_input { flex: 1 1 auto; border: 0; background: transparent; font-size: 1.05em; padding: 4px 0; outline: none; }
.cb-reports-search_count { white-space: nowrap; font-size: 0.9em; }
.cb-reports-search_empty { margin: 10px 0; }
.cb-reports-hidden { display: none !important; }
a.cb-reports-item.cb-reports-hit { border-color: var(--cbgroup, #34638f); }
.cb-reports-grid { display: flex; flex-wrap: wrap; gap: 14px; margin-top: 12px; }
.cb-reports-card { flex: 1 1 300px; min-width: 260px; max-width: 420px; background: #fff; border: 1px solid #e3e9ef; border-top: 6px solid var(--cbgroup, #34638f); border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,.06); display: flex; flex-direction: column; }
.cb-reports-card_head { padding: 10px 14px; font-weight: 700; font-size: 1.05em; text-transform: uppercase; letter-spacing: .4px; color: var(--cbgroup, #34638f); border-bottom: 1px solid #eef2f6; }
.cb-reports-card_head a, .cb-reports-card_head a:link, .cb-reports-card_head a:visited { color: var(--cbgroup, #34638f); text-decoration: none; }
.cb-reports-card_body { padding: 8px 10px 12px 10px; display: flex; flex-direction: column; gap: 6px; }
a.cb-reports-item, a.cb-reports-item:link, a.cb-reports-item:visited { display: block; padding: 7px 10px; border-radius: 5px; background: #f7f9fb; border: 1px solid #e3e9ef; color: #2c3e50; text-decoration: none; }
a.cb-reports-item:hover { background: var(--cbgroup, #34638f); color: #fff; border-color: var(--cbgroup, #34638f); }
a.cb-reports-item:hover .cb-reports-mode { background: #fff; color: var(--cbgroup, #34638f); }
a.cb-reports-item_main { font-weight: 600; }
.cb-reports-mode { float: right; font-size: 11px; padding: 1px 7px; border-radius: 10px; background: #0d9488; color: #fff; }
/* Numero fisso del report davanti al nome (customerbudgetReportNumber) */
.cb-reports-num { display: inline-block; min-width: 2.2em; margin-right: 6px; padding: 0 5px; border-radius: 4px; background: var(--cbgroup, #34638f); color: #fff; font-size: 11px; font-weight: 700; text-align: center; font-variant-numeric: tabular-nums; }
a.cb-reports-item:hover .cb-reports-num { background: #fff; color: var(--cbgroup, #34638f); }
.cb-reports-item_desc { display: block; font-size: 11px; color: #6b7a88; margin-top: 2px; line-height: 1.3; }
a.cb-reports-item:hover .cb-reports-item_desc { color: #eef3f8; }
.cb-report-help { vertical-align: middle; }
/* Toggle Per data / Per competenza accanto ai titoli (stesso segmented control dei filtri colonna) */
.cb-mode-toggle { margin-left: 10px; vertical-align: middle; font-weight: normal; }
.cb-mode-toggle a.cbrep_seg { padding: 3px 12px; font-size: 12px; }
.cb-mode-toggle a.cbrep_seg i { color: inherit; }

/* ============================================================================
   Homepage del modulo (index.php)
   ============================================================================ */
/* Variazione sull'anno prima accanto agli importi (cbFormatVariationPct) */
.cb-variation { font-size: 0.85em; }
.cb-pos { color: #198719; }
.cb-neg { color: #c52222; }

/* Griglia in alto: quattro celle affiancate, una sotto l'altra sugli schermi stretti */
.cb-home-grid { display: flex; flex-wrap: wrap; gap: 1%; }
.cb-home-grid_cell { flex: 1 1 23%; min-width: 260px; box-sizing: border-box; }
.cb-home-note { margin: 6px 2px 14px 2px; }
.cb-home-block { margin-top: 16px; }

/* Card KPI: margine, giorni medi di incasso e di pagamento */
.cb-home-kpi-row { display: flex; flex-wrap: wrap; align-items: stretch; gap: 12px; margin: 6px 0 4px 0; }
.cb-home-kpi-margin { border-left-color: #34638f; } .cb-home-kpi-margin .cb-kpi_value { color: #34638f; }
.cb-home-kpi-dso { border-left-color: #0d9488; } .cb-home-kpi-dso .cb-kpi_value { color: #0d9488; }
.cb-home-kpi-dpo { border-left-color: #d97706; } .cb-home-kpi-dpo .cb-kpi_value { color: #d97706; }
.cb-home-kpi_sub { text-transform: none; font-weight: normal; letter-spacing: 0; }

.cb-home-chart { padding: 8px 0; }
/* Conteggio fatture scadute dei primi 5 terzi */
.badge.cb-home-badge { background-color: #ffcb6b; color: #333; }
