.offcanvas-header-gradient {
    background: linear-gradient(270deg, rgba(var(--bs-primary-rgb), .55) 0%, rgba(var(--bs-primary-rgb), .8) 100%);
}

.offcanvas-end {
    border-top-left-radius: var(--bs-border-radius-lg);
    border-bottom-left-radius: var(--bs-border-radius-lg);
    overflow: hidden;
}

.menu-toggle::after {
    position: absolute;
    display: block;
    background-color: var(--bs-menu-color);
    content: "";
    inset-block-start: 50%;
    mask-image: url(data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24'%3E%3Cpath fill='none' stroke='%23000' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='m9 6l6 6l-6 6'/%3E%3C/svg%3E);
    mask-repeat: no-repeat;
    mask-size: 100% 100%;
    transform: translateY(-50%);
    block-size: 1.375rem;
    font-size: 1.375rem;
    inline-size: 1.375rem;
}

.js-card-dashboard {
    opacity: 0;
    transform: translateY(20px);
    transition: all 0.6s ease;
}

.js-card-dashboard.show {
    opacity: 1;
    transform: translateY(0);
}

.table-scrollbar {
    min-height: 350px !important;
    max-height: 350px !important;
    overflow-y: scroll;
}

.table-scrollbar-md {
    min-height: 600px !important;
    max-height: 600px !important;
    overflow-y: scroll;
}

.table-scrollbar-modal {
    min-height: 700px !important;
    max-height: 1700px !important;
    overflow-y: scroll;
}

.css-table-head-sticky {
    border-collapse: separate;
    border-spacing: 0;
    width: 100%;
}

/* --- STICKY HEADER --- */

.css-table-head-sticky thead th {
    position: sticky;
    z-index: 10;
    background-color: var(--bs-table-bg, var(--bs-body-bg, #fff));
    box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.1);
    border-bottom: 1px solid #ddd;
}

.css-th-shadow {
    box-shadow: 0 2px 2px -1px rgba(0, 0, 0, 0.1) !important;
    border-bottom: 1px solid #6f6868 !important;
}

/* Prima riga dell'header */
.css-table-head-sticky thead tr:nth-child(1) th {
    top: 0;
    z-index: 12;
}

.css-table-head-sticky thead tr:nth-child(2) th {
    top: 40px;
    z-index: 11;
}

.css-table-head-sticky thead tr:nth-child(3) th {
    top: 80px;
    z-index: 10;
}

/* --- STICKY PRIMA COLONNA E OFFCANVAS A TUTTA LARGHEZZA (solo mobile) ---
   Le tabelle "generiche" (dettaglio fatturato/ordini nell'offcanvas della dashboard, e le tante
   liste che condividono lo stesso componente generic_list.html) hanno spesso più colonne di
   quante ne entrino su un telefono: senza una colonna fissa si perde il riferimento (es. la data)
   scorrendo in orizzontale per vedere le altre. L'offcanvas stesso (larghezza decisa da
   data-pgoffcanvas-ajax-width, es. "w-75") su mobile lascia troppo poco spazio alla tabella.
   Lo stesso vale per gli offcanvas di dettaglio entità (prospect/soggetto/articolo): ospitano
   card con più elementi affiancati (es. la timeline schede anagrafiche) che su una larghezza
   ridotta a "w-75" di un telefono si schiacciano. */
@media (max-width: 767.98px) {
    #offcanvasDashboard,
    #offcanvasProspect,
    #offcanvasSoggetto,
    #offcanvasArticolo {
        width: 100vw !important;
        max-width: 100vw !important;
    }

    .css-table-head-sticky th:first-child,
    .css-table-head-sticky td:first-child {
        position: sticky;
        left: 0;
        z-index: 5;
        background-color: var(--bs-body-bg, #fff);
        box-shadow: 2px 0 2px -1px rgba(0, 0, 0, 0.1);
    }

    .css-table-head-sticky thead th:first-child {
        z-index: 13;
    }

    .css-table-head-sticky tfoot th:first-child,
    .css-table-head-sticky tfoot td:first-child {
        z-index: 11;
    }

    /* "14.891.038,93 / 18.222.183,23 €": alla dimensione di default (h5) il monospazio in
       grassetto è troppo largo per una card a piena larghezza su mobile, e la sola "€" finale va
       a capo da sola. Un font leggermente più piccolo basta a farla rientrare sulla stessa riga. */
    .fatturato_valore {
        font-size: 1rem;
    }
}

/* Sopra i 768px Widget/Filtri tornano dropdown ancorati al pulsante (dashboard-widgets.js), non
   più il pannello a piena larghezza pensato per mobile. Il contenuto però è lo stesso identico
   markup, con una grid multi-colonna (col-md-3/col-lg-4) che risponde alla larghezza della
   VIEWPORT e non a quella del dropdown: dentro un dropdown stretto darebbe colonne larghe
   pochi px. Questa classe forza quella grid a una sola colonna, indipendentemente dalla viewport,
   solo quando il contenuto vive dentro un dropdown invece che nel pannello a piena larghezza. */
.js-dashboard-dropdown-compact .row > [class*="col-"] {
    flex: 0 0 100%;
    max-width: 100%;
}

.css-table-head-sticky tfoot th,
.css-table-head-sticky tfoot td {
    position: sticky;
    bottom: 0;
    z-index: 10;
    background-color: var(--bs-table-bg, var(--bs-body-bg, #fff));
    box-shadow: 0 -2px 2px -1px rgba(0, 0, 0, 0.1);
    border-top: 1px solid #ddd;
}

.ts-control input {
    background-image: url(/assets/img/list-search.png) !important;
    background-position: right top !important;
    background-repeat: no-repeat !important;
    background-size: contain !important;
    padding-right: 30px !important;
}

.modal-xxl {
    max-width: 90%;
}

.cursor-pointer-table:hover {
    background-color: rgba(var(--bs-primary-rgb), 0.35) !important;
}

textarea {
    resize: none;
}

.pg-allegati-dropzone {
    min-height: 0 !important;
}

.pg-allegati-dropzone .dz-message {
    margin: 0em 0 !important;
}

.swal2-container {
    --bs-progress-bg-amount: 15%;
    --bs-progress-mix-bg: var(--bs-white);
    --bs-modal-bg: var(--bs-paper-bg);
    --bs-modal-box-shadow: var(--bs-box-shadow-lg);
    z-index: 9999 !important;
}

/* --- DROPDOWN TIPO GRAFICO (WIDGET DASHBOARD) --- */

.js-chart-type-switch > .dropdown-toggle.btn-icon {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
}

.js-chart-type-switch > .dropdown-toggle.btn-icon::after {
    margin-inline-start: 0;
}

ul.dropdown-menu.js-chart-type-menu {
    background: #ffffff !important;
    background-color: #ffffff !important;
    background-image: none !important;
    backdrop-filter: none !important;
    -webkit-backdrop-filter: none !important;
    opacity: 1 !important;
    z-index: 1055;
    min-width: 8.5rem;
    max-width: min(90vw, 12rem);
    box-shadow: 0 4px 16px rgba(0, 0, 0, 0.25);
}

.js-chart-type-menu .dropdown-item {
    padding-block: 0.5rem;
    white-space: nowrap;
}

@media (max-width: 575.98px) {
    .js-chart-type-switch > .dropdown-toggle.btn-icon {
        gap: 4px;
    }

    ul.dropdown-menu.js-chart-type-menu {
        min-width: 7.5rem;
    }

    .js-chart-type-menu .dropdown-item {
        padding-block: 0.65rem;
    }
}

/* Sotto i 768px la navbar (titolo pagina + "Dati aggiornati al" + pulsanti Widget/Filtri +
   utente) non entra più su una sola riga. Il tema (Vuexy) rende .layout-navbar con
   position:fixed e altezza fissa (block-size:3.5rem): è fuori dal flusso della pagina e non può
   "crescere", quindi qualsiasi contenuto che va a capo sporge dal riquadro bianco e si sovrappone
   alle card sottostanti invece di spingerle giù (visto coi pulsanti Widget/Filtri che finivano
   fuori schermo o l'avatar utente sovrapposto alla prima card). La soluzione è togliere il
   position:fixed solo sotto i 768px: la navbar torna nel normale flusso della pagina e può
   crescere in altezza quanto serve, spingendo il contenuto sotto invece di sovrapporlo. Il
   padding-top compensativo che il tema applica al contenuto per il navbar fisso (64/72px) va
   quindi rimosso, altrimenti resterebbe uno spazio vuoto in cima. */
@media (max-width: 767.98px) {
    .layout-navbar-fixed .layout-navbar {
        position: static !important;
        block-size: auto !important;
        padding-block: .75rem !important;
    }

    .layout-navbar-fixed .layout-wrapper:not(.layout-horizontal):not(.layout-without-menu) .layout-page,
    .layout-navbar-fixed .layout-wrapper:not(.layout-without-menu) .layout-page {
        padding-top: 0 !important;
    }

    .layout-navbar-fixed .layout-wrapper:not(.layout-horizontal) .layout-page::before {
        display: none !important;
    }

    #navbar-collapse.navbar-nav-right {
        flex-wrap: wrap;
        row-gap: 0.5rem;
    }

    #navbar-collapse.navbar-nav-right > .row {
        width: 100%;
    }

    #navbar-collapse .navbar-nav.flex-row {
        flex-wrap: wrap;
        justify-content: flex-end;
        width: 100%;
    }
}
