/* Adattamenti applicativi PAT-OS per AdminLTE 4 / Bootstrap 5.
 * Caricati dopo custom.css, separati dagli asset vendor aggiornabili. */
/* I colori derivano dalle variabili storiche, sovrascritte dall'admin.css dell'ente. */
:root {
    --bs-body-font-family: "Source Sans Pro", sans-serif;
}

/* Stesso contratto della palette ufficiale AdminLTE. I default restano in
 * custom.css; admin.css dell'ente, caricato dopo, puo sovrascrivere le variabili
 * storiche o direttamente questi token. Gli RGB seguono il colore risolto. */
:root:where([data-lte-primary="patos"]) {
    --bs-primary: var(--colore1);
    --bs-primary-rgb: var(--patos-primary-rgb, 142, 37, 88);
    --bs-primary-text-emphasis: color-mix(in srgb, var(--colore1) 40%, black);
    --bs-primary-bg-subtle: color-mix(in srgb, var(--colore1) 20%, white);
    --bs-primary-border-subtle: color-mix(in srgb, var(--colore1) 40%, white);
    --bs-link-color: var(--colore1);
    --bs-link-color-rgb: var(--patos-link-rgb, 142, 37, 88);
    --bs-link-hover-color: var(--colore2);
    --bs-link-hover-color-rgb: var(--patos-link-hover-rgb, 104, 28, 65);
    --lte-primary-color: #fff;
    --lte-primary-color-rgb: 255, 255, 255;
}

:root:where([data-lte-primary="patos"][data-bs-theme="dark"]) {
    --bs-primary-text-emphasis: color-mix(in srgb, var(--colore1) 40%, white);
    --bs-primary-bg-subtle: color-mix(in srgb, var(--colore1) 20%, black);
    --bs-primary-border-subtle: color-mix(in srgb, var(--colore1) 60%, black);
    --bs-link-color: color-mix(in srgb, var(--colore1) 55%, white);
    --bs-link-hover-color: color-mix(in srgb, var(--colore2) 35%, white);
}

body { background-color: var(--bs-body-bg); color: var(--bs-body-color); }
/* I tooltip descrivono il controllo e non devono intercettarne il click,
 * anche quando la posizione viene ricalcolata nelle righe responsive. */
.tooltip {
    pointer-events: none;
}
/* I contatti Help Online seguono il tema e rientrano nella larghezza del menu. */
#help-online-contatta-supporto {
    color: var(--bs-body-color);
    white-space: normal;
    overflow-wrap: anywhere;
}
#help-online-contatta-supporto .link_help_online {
    color: var(--bs-link-color) !important;
    text-decoration: underline;
}
#help-online-contatta-supporto .link_help_online:hover,
#help-online-contatta-supporto .link_help_online:focus {
    color: var(--bs-link-hover-color) !important;
}
/* Rispetto la gerarchia Bootstrap: i tooltip devono comparire sopra il menu azioni. */
.app-main .dropdown-azioni .dropdown-menu {
    z-index: var(--bs-dropdown-zindex, 1000);
}
.app-main .app-io-action {
    border: 0;
    background: transparent;
    color: var(--bs-body-color);
    box-shadow: none;
}
.app-main .app-io-action:focus-visible {
    outline: 2px solid var(--colore1, #8c2559);
    outline-offset: 2px;
}
/* Le azioni condivise degli archivi sono icone, senza il riquadro dei bottoni Bootstrap. */
.app-main .dropdown-azioni .dropdown-menu .btn,
.app-main .dropdown-btn-mobile .btn {
    border: 0;
    background: transparent;
    box-shadow: none;
    color: var(--bs-dropdown-link-color, var(--bs-body-color));
}
.app-main .dropdown-azioni .dropdown-menu .btn:hover,
.app-main .dropdown-btn-mobile .btn:hover {
    background: var(--bs-dropdown-link-hover-bg, var(--bs-tertiary-bg));
}
.app-main .dropdown-azioni .dropdown-menu .btn:focus-visible,
.app-main .dropdown-btn-mobile .btn:focus-visible {
    outline: 2px solid var(--colore1, #8c2559);
    outline-offset: 2px;
}
/* Testo delle shortcut a 14 px come SmartPAD, mantenendo il padding dei bottoni. */
.btn.patos-shortcut {
    --bs-btn-font-size: .875rem;
}
/* Contrasti della dashboard indipendenti dalla palette primaria dell'ente. */
.patos-shortcut:focus-visible {
    outline: 2px solid currentColor;
    outline-offset: 2px;
    box-shadow: none;
}
.patos-dashboard .small-box.bg-info {
    background-color: #0b7185 !important;
}
.patos-dashboard .alert-warning a,
.patos-dashboard .alert-warning-new a {
    color: #664d03;
}
.patos-dashboard .text-success {
    color: var(--bs-success-text-emphasis) !important;
}
/* Stessa gerarchia dei form SmartPAD: label dei campi in grassetto,
 * mantenendo il peso previsto da Bootstrap per checkbox, radio e switch. */
label:not(.form-check-label) {
    font-weight: 700;
}
a { color: var(--bs-link-color); }
a:hover { color: var(--bs-link-hover-color); }
/* Varianti del verde allegati leggibili anche sulle righe alternate dei due temi. */
.app-main a.bdncp-cig-link {
    color: #146c43;
}
.app-main a.bdncp-cig-link:hover,
.app-main a.bdncp-cig-link:focus {
    color: #0f5132;
}
[data-bs-theme="dark"] .app-main a.bdncp-cig-link {
    color: #75b798;
}
[data-bs-theme="dark"] .app-main a.bdncp-cig-link:hover,
[data-bs-theme="dark"] .app-main a.bdncp-cig-link:focus {
    color: #a3cfbb;
}
/* Nei menu azione (Operazioni) prevale lo stile del componente Bootstrap,
 * senza la sottolineatura globale applicata ai normali link di contenuto. */
.app-main .dropdown-menu .dropdown-item,
.app-main .dropdown-menu .dropdown-item:hover,
.app-main .dropdown-menu .dropdown-item:focus {
    text-decoration: none;
}
.app-main { min-width: 0; }
/* Le voci degli addon possono occupare piu spazio del previsto: le etichette
 * cedono spazio ai comandi di destra senza tagliare dropdown e badge. */
.app-header > .navbar-nav:first-child {
    flex: 1 1 0;
    min-width: 0;
}
.app-header > .navbar-nav.ms-auto {
    flex-shrink: 0;
}
.app-header .header-nav-item > .nav-link {
    display: flex;
    align-items: center;
    min-width: 0;
}
.app-header .header-nav-label {
    min-width: 0;
    flex-shrink: 1;
    display: inline-block;
    max-width: 100%;
    overflow: hidden;
    text-overflow: ellipsis;
    vertical-align: middle;
}
.app-header .navbar-nav > .header-nav-item { min-width: 0; }
/* Il limite riguarda il dropdown, senza tagliare i suoi antenati nella navbar. */
.app-header .header-dropdown-wide {
    max-width: calc(100vw - 1.5rem);
    overflow-x: auto;
}
.app-header .header-nav-item > .nav-link > :not(.header-nav-label),
.app-header .header-nav-item > .dropdown-toggle::after {
    flex-shrink: 0;
}
/* La ricerca deve restare leggibile anche quando il colore dell'ente è scuro. */
/* Le categorie senza risultati sono nascoste: il bordo va sulla prima voce visibile. */
#categories-list .list-group-item:nth-child(1 of :not(.d-none)) {
    border-top: var(--bs-list-group-border-width) solid var(--bs-list-group-border-color);
}
#categories-list .data_search,
#categories-list .data_search:hover,
#categories-list .data_search:focus {
    color: var(--bs-body-color);
}
#categories-list .data_search:focus-visible {
    outline: 2px solid currentColor;
    outline-offset: 2px;
}
#categories-list .data_search[aria-disabled="true"] {
    cursor: wait;
    text-decoration: none;
}
#filter_section_bo {
    color: var(--bs-body-color);
}
/* I form Allegati animano gia scrollTop con jQuery: lo smooth CSS di Bootstrap
 * riavvierebbe lo scorrimento a ogni passo, ritardando il movimento visibile. */
html:has(.app-main a[href*="#attach_module"]) { scroll-behavior: auto; }
.app-main a.btn[href*="#attach_module"] { text-decoration: none; }
/* Le select tabellari vanilla conservano i colori storici delle intestazioni. */
.app-main .patos-ajax-table-head { --bs-table-bg: #212529; --bs-table-color: #fff;
    --bs-table-border-color: #383f45; background-color: #212529; color: #fff; border-color: #383f45; }
/* I badge tabellari usano testo compatto a 14 px rispetto ai 16 px delle celle. */
.app-main .dataTable .badge:not(.badge-perlapa) {
    --bs-badge-font-size: 1rem;
    font-size: 1rem;
}
/* Abilita e Disabilita occupano lo stesso spazio senza separare icona e testo. */
#attach_in_archive_list .change-indexability {
    display: inline-flex;
    align-items: center;
    justify-content: flex-start;
    gap: .375rem;
    min-width: 8rem;
    padding-left: 1rem;
    padding-right: 1rem;
    white-space: nowrap;
}
#attach_in_archive_list .change-indexability > .svg-inline--fa,
#attach_in_archive_list .change-indexability > i {
    flex-shrink: 0;
    width: 1em;
    margin-left: 0 !important;
    margin-right: 0 !important;
}
/* Le date delle tabelle erano testo con orologio o calendario. text-bg-info ha
 * reintrodotto sfondo e formato badge: si conserva la resa storica delle
 * date anche nei modali e nelle tabelle senza DataTables, senza alterare
 * gli altri badge informativi o di stato. */
:is(.table, .dataTable) small.badge.text-bg-info:not(.show-badge-bg):not(.badge-perlapa):has(
    .fa-clock, .fa-calendar, .fa-calendar-alt, .fa-calendar-days, .fa-calendar-day, .fa-calendar-check
) {
    background-color: transparent !important;
    color: inherit !important;
    padding: 0 !important;
    border-radius: 0;
    font-size: inherit;
    font-weight: 500;
    line-height: inherit;
}
.patos-ajax-loading-container { position: relative; }
/* Le relazioni degli archivi sono testo normale, non indicatori di stato.
 * La regola copre anche i renderer che conservano la classe badge. */
.app-main .dataTable small.text-bg-primary.mb-1:not(.show-badge-bg):not(.badge-perlapa) {
    background-color: transparent !important;
    color: inherit !important;
    padding: 0 !important;
    border-radius: 0;
    font-size: inherit;
    font-weight: 400;
    line-height: inherit;
    white-space: normal;
}
.patos-ajax-loading-overlay { position: absolute; inset: 0; display: grid; place-items: center;
    background: color-mix(in srgb, var(--bs-body-bg) 90%, transparent); color: var(--bs-body-color); }
.app-header { background: var(--colore1); color: #fff; }
.app-header .nav-link { color: #fff; text-decoration: none; }
/* La regola generale a:hover di custom.css non deve sottolineare i comandi dell'header. */
.app-header .nav-link:hover, .app-header .nav-link:focus { color: #fff; text-decoration: none; }
/* Conserva i colori storici dell'header: bianco e novita non lette definite in custom.css. */
.custom-separator h5 { color: var(--lte-primary-color, #fff); }
.app-header .dropdown-item { color: var(--bs-dropdown-link-color); }
.app-header .dropdown-item:hover, .app-header .dropdown-item:focus { color: var(--bs-dropdown-link-hover-color); }
.app-header .nav-link:focus-visible { outline: 2px solid currentColor; outline-offset: -2px; }
/* Il selettore ente occupa spazio aggiuntivo nell'header super admin:
 * fino a xxl manteniamo le icone e i nomi accessibili senza far uscire l'avatar. */
@media (min-width: 1200px) and (max-width: 1399.98px) {
    .app-header:has(._cinst) .header-nav-label { display: none !important; }
}
.app-header .navbar-badge { font-size: .65rem; padding: .25em .4em; }
.app-header .user-menu .dropdown-menu { width: 18rem; max-width: calc(100vw - 1.5rem); }
.app-header .user-image { width: 1.8rem; height: 1.8rem; object-fit: cover; border-radius: 50%; }
/* Il menu utente mantiene lo sfondo grigio #343a40 nei due temi. */
.app-header .user-header { text-align: center; padding: 1rem; background-color: #343a40; color: #fff; }
.app-header .user-header img { width: 5rem; height: 5rem; object-fit: cover; border-radius: 50%; }
.app-header .user-footer { display: flex; align-items: center; gap: .5rem; padding: 10px; }
/* Il clearfix vendor diventerebbe un terzo elemento nel footer flex, spostando Logout. */
.app-header .user-menu .dropdown-menu .user-footer::after { display: none; }
/* La regola legacy .nav-item a non deve coprire il colore dei pulsanti Bootstrap. */
.app-header .user-footer .btn { display: inline-flex; align-items: center; gap: .25rem;
    color: var(--bs-btn-color); }
.app-header .user-footer .btn:hover,
.app-header .user-footer .btn:focus-visible { color: var(--bs-btn-hover-color); }
.app-header .user-footer .btn:active { color: var(--bs-btn-active-color); }
.app-sidebar .sidebar-brand { background: var(--colore1); }
.app-sidebar[data-bs-theme] { --lte-sidebar-menu-active-color: #fff; }
.app-sidebar .brand-link { display: flex; justify-content: center; width: 100%; }
.app-sidebar .sidebar-wrapper { overflow-x: hidden; }
/* Lo scorrimento è gestito dal wrapper: la lista non deve tagliare
 * gli angoli delle voci a larghezza fissa durante l'apertura del menu. */
.app-sidebar .sidebar-menu { overflow: visible; }
.app-sidebar .info { white-space: normal; overflow-wrap: anywhere; }
.app-sidebar .nav-link { text-decoration: none; }
/* Le voci del menu laterale non ereditano la sottolineatura generale dei link. */
.app-sidebar .nav-link:hover, .app-sidebar .nav-link:focus { text-decoration: none; }
/* Stessa struttura di SmartPAD: icona fissa e testo nella colonna restante.
 * La larghezza delle etichette non dipende dallo stato aperto dei rami;
 * lo spazio della freccia evita sovrapposizioni sulle voci lunghe. */
.app-sidebar .sidebar-menu .nav-link {
    display: grid;
    grid-template-columns: 1.5rem minmax(0, 1fr);
    column-gap: .125rem;
    align-items: center;
}
.app-sidebar .sidebar-menu .nav-link > i,
.app-sidebar .sidebar-menu .nav-link > svg {
    width: 1.5rem;
    margin: 0;
}
.app-sidebar .sidebar-menu .nav-link > p {
    display: block;
    width: 100%;
    min-width: 0;
    max-width: none;
    padding-left: 0;
    overflow: visible;
    line-height: 1.25;
    text-overflow: clip;
    white-space: normal;
    /* Le etichette con slash o parole lunghe devono rientrare nella colonna del testo. */
    overflow-wrap: anywhere;
}
.app-sidebar .sidebar-menu .nav-link:not(:has(> i)):not(:has(> svg)):not(:has(> .nav-icon)) {
    grid-template-columns: minmax(0, 1fr);
}
.app-sidebar .sidebar-menu .nav-link:has(> p > .nav-arrow) {
    padding-right: 1.75rem;
}
.sidebar-mini.sidebar-collapse:not(.sidebar-without-hover) .app-sidebar:hover .sidebar-menu .nav-link > p {
    width: 100%;
}
/* La cornice si anima, ma le etichette mantengono la larghezza finale:
 * altrimenti le voci su piu righe cambiano altezza durante ogni apertura. */
.sidebar-mini .app-sidebar .sidebar-menu .nav-link,
.sidebar-mini.sidebar-collapse .app-sidebar .sidebar-menu .nav-link,
.sidebar-mini.sidebar-collapse:not(.sidebar-without-hover) .app-sidebar:hover .sidebar-menu .nav-link {
    /* Oltre al padding laterale, riserva lo spazio della scrollbar sottile:
     * il bordo destro deve restare dentro l'area visibile del contenitore. */
    width: calc(var(--lte-sidebar-width) - 1.5rem);
    transition: none;
}
.sidebar-mini.sidebar-collapse .app-sidebar .sidebar-menu .nav-link > p {
    display: block;
    width: 100%;
    white-space: normal;
}
/* Anche il pannello utente mantiene l'ingombro: display:none faceva saltare
 * verticalmente tutto il menu. La visibilita nasconde anche il link al focus. */
.sidebar-mini .app-sidebar .user-panel {
    width: calc(var(--lte-sidebar-width) - 1.5rem);
}
.sidebar-mini .app-sidebar .user-panel .image { flex-shrink: 0; }
.sidebar-mini.sidebar-collapse .app-sidebar .user-panel .info {
    display: block;
    white-space: normal;
}
.sidebar-mini.sidebar-collapse .app-sidebar:not(:hover) .user-panel .info,
.sidebar-mini.sidebar-collapse.sidebar-without-hover .app-sidebar .user-panel .info {
    visibility: hidden;
}
/* L'icona storica punta a sinistra: la rotazione negativa la orienta in basso all'apertura. */
.app-sidebar .sidebar-menu .menu-open > .nav-link .nav-arrow { transform: translateY(-50%) rotate(-90deg); }
.app-sidebar .user-panel { border-bottom: 1px solid var(--bs-border-color); }
.app-sidebar .brand-image { float: none; max-height: 2.5rem; width: auto; }
/* Il logo segue anche resize e apertura al passaggio del mouse, non solo il click. */
.app-sidebar .patos-brand-compact { display: none; }
@media (min-width: 992px) {
    .sidebar-collapse .app-sidebar:not(:hover) .patos-brand-full { display: none; }
    .sidebar-collapse .app-sidebar:not(:hover) .patos-brand-compact { display: block; }
}
.app-sidebar .sidebar-menu .nav-link.active { background: var(--colore1); color: #fff; }
.sidebar-mini.sidebar-collapse .app-sidebar:hover .info { display: block; }

.patos-navbar-search-panel {
    position: absolute;
    inset: 0;
    z-index: 3;
    padding: .5rem 1rem;
    background: var(--bs-body-bg);
    border-bottom: 1px solid var(--bs-border-color);
}
.patos-navbar-search-panel[hidden] { display: none !important; }
.patos-navbar-search-panel .navbar-search-field { width: 100%; padding-right: 3rem; }
.patos-search-close { position: absolute; right: 0; top: 0; height: 100%; padding: .25rem .5rem; }
/* Su desktop uso direttamente il componente navbar-search distribuito con AdminLTE 4. */
@media (min-width: 1400px) {
    .patos-navbar-search-panel,
    .patos-navbar-search-panel[hidden] {
        display: block !important;
        position: static;
        padding: 0;
        border: 0;
        background: transparent;
    }
    .patos-navbar-search-panel .navbar-search-field {
        width: var(--lte-search-field-width);
        padding-right: 0;
    }
    /* Mantengo la superficie discreta della demo, con testo chiaro sull'header colorato. */
    .app-header .navbar-search {
        --lte-search-field-bg: rgba(255, 255, 255, .08);
        --lte-search-field-hover-bg: rgba(255, 255, 255, .13);
        --lte-search-field-focus-bg: rgba(255, 255, 255, .12);
        --lte-search-field-border-color: rgba(255, 255, 255, .3);
        --lte-search-field-focus-border-color: #fff;
        --lte-search-field-focus-ring: 0 0 0 .2rem rgba(255, 255, 255, .5);
        --lte-search-field-color: #fff;
        --lte-search-field-placeholder-color: #fff;
        --lte-search-field-icon-color: #fff;
    }
    .app-header .navbar-search .form-control::placeholder {
        color: var(--lte-search-field-placeholder-color) !important;
        opacity: 1;
    }
}

/* I contenitori dei gruppi input vengono prodotti anche dagli helper condivisi.
 * Non devono interrompere il flex dei campi o perdere i pulsanti incorporati. */
.input-group-append, .input-group-prepend { display: flex; }
.input-group > .input-group-append > *, .input-group > .input-group-prepend > * { border-radius: 0; }
.input-group > .input-group-append:last-child > :last-child { border-radius: 0 .375rem .375rem 0; }
.input-group > .input-group-prepend:first-child > :first-child { border-radius: .375rem 0 0 .375rem; }
.input-group-text { height: 100%; }
.input-group .form-control { min-width: 0; }
.form-check { min-height: 1.5rem; }
.form-check label { cursor: pointer; }
.form-check-input { border-color: var(--bs-secondary-color); }
.form-check-input:checked { background-color: var(--colore1); border-color: var(--colore1); }
.form-control::placeholder { color: var(--bs-secondary-color); opacity: 1; }
.form-control:focus, .form-select:focus, .form-check-input:focus {
    border-color: var(--colore3);
    box-shadow: 0 0 0 .2rem color-mix(in srgb, var(--colore1) 25%, transparent);
}

/* Componenti applicativi ancora condivisi con helper e plugin legacy. */
/* Queste tre utility sono ancora emesse dagli addon: conservano la spaziatura
 * Bootstrap storica anche per markup proveniente da configurazioni esistenti. */
.mr-1 { margin-right: .25rem !important; }
.mr-2 { margin-right: .5rem !important; }
.mr-auto { margin-right: auto !important; }
.normative-tooltip:focus-visible {
    outline: 2px solid currentColor;
    outline-offset: 2px;
    box-shadow: none;
}
.btn-default { --bs-btn-color: var(--bs-body-color); --bs-btn-bg: var(--bs-tertiary-bg);
    --bs-btn-border-color: var(--bs-border-color); --bs-btn-hover-bg: var(--bs-secondary-bg);
    --bs-btn-hover-color: var(--bs-body-color); --bs-btn-hover-border-color: var(--bs-secondary-color); }
.btn-primary { --bs-btn-bg: var(--colore1); --bs-btn-border-color: var(--colore1);
    --bs-btn-hover-bg: var(--colore2); --bs-btn-hover-border-color: var(--colore2);
    --bs-btn-active-bg: var(--colore2); --bs-btn-active-border-color: var(--colore2); color: #fff; }
.btn-outline-primary { --bs-btn-color: var(--bs-link-color); --bs-btn-border-color: var(--bs-link-color); }
.close { float: right; border: 0; background: transparent; color: inherit; font-size: 1.5rem; line-height: 1; padding: .5rem; }
.modal-header .close { margin-left: auto; }
.alert-dismissible > .close { position: absolute; right: .5rem; top: .5rem; }
/* Titoli degli alert, compresi quelli generati nei modali dagli addon.
 * Mantiene separati icona e testo anche quando il markup non contiene spazi. */
.alert :is(h1, h2, h3, h4, h5, h6) > :is(i.fas, i.far, i.fa, svg.svg-inline--fa) {
    display: inline-block;
    width: 1.25em;
    margin-inline-end: .5rem;
    vertical-align: -.125em;
    text-align: center;
}
/* Utility AdminLTE 3 ancora usate dalle viste e dagli helper del back-office.
 * I comandi compatti mantengono testo leggibile e un'area minima anche con sola icona. */
.btn-xs {
    --bs-btn-padding-y: .125rem;
    --bs-btn-padding-x: .25rem;
    --bs-btn-font-size: .875rem;
    --bs-btn-line-height: 1.5;
    --bs-btn-border-radius: .15rem;
    min-width: 28px;
    min-height: 28px;
}
.btn.btn-flat {
    border-radius: 0;
    border-width: 1px;
}
/* L'aspetto piatto non deve rimuovere l'indicatore di focus da tastiera. */
.btn.btn-flat:not(:focus-visible) { box-shadow: none; }
.elevation-0 { box-shadow: none !important; }
.elevation-1 { box-shadow: 0 1px 3px rgba(0, 0, 0, .12), 0 1px 2px rgba(0, 0, 0, .24) !important; }
.elevation-2 { box-shadow: 0 3px 6px rgba(0, 0, 0, .16), 0 3px 6px rgba(0, 0, 0, .23) !important; }
.elevation-3 { box-shadow: 0 10px 20px rgba(0, 0, 0, .19), 0 6px 6px rgba(0, 0, 0, .23) !important; }
.elevation-4 { box-shadow: 0 14px 28px rgba(0, 0, 0, .25), 0 10px 10px rgba(0, 0, 0, .22) !important; }
.elevation-5 { box-shadow: 0 19px 38px rgba(0, 0, 0, .3), 0 15px 12px rgba(0, 0, 0, .22) !important; }
.img-circle { border-radius: 50%; }
.text-sm { font-size: .875rem; }
.text-xs { font-size: .75rem; }
.text-lg { font-size: 1.25rem; }
.card { margin-bottom: 1rem; }
.card-title { margin-bottom: 0; }
.card-header > .card-tools { margin-left: auto; }
/* AdminLTE 3 usava 1.25rem nel corpo delle card; si conserva lo spazio precedente nel back-office. */
.app-main .card {
    --bs-card-spacer-x: 1.25rem;
    --bs-card-spacer-y: 1.25rem;
}
.card-body > .row:last-child { margin-bottom: 0; }
/* Le icone dei riepiloghi Albo conservano il blu storico, indipendente dal primario Ente. */
.info-box-icon.patos-albo-statistic-icon { background-color: #007bff; color: #fff; }
/* I link statistici ereditano il contrasto della card, non il colore del tema Ente. */
.small-box > .small-box-footer, .small-box > .small-box-footer:hover,
.small-box > .small-box-footer:focus { color: inherit; text-decoration: none; }
/* I grafici legacy disegnano testo e serie scuri sul canvas: la superficie
 * chiara mantiene leggibili quei pixel anche quando la card usa il tema scuro. */
[data-bs-theme="dark"] #_chart, [data-bs-theme="dark"] #_chart_albo { background-color: #fff; }
/* I link degli avvisi sui domini non possono mantenere il blu scuro fisso
 * del template quando la superficie dell'alert diventa scura. */
[data-bs-theme="dark"] #layer-session-allowed .d-link { color: var(--bs-link-color) !important; }
[data-bs-theme="dark"] #layer-session-allowed .d-link:hover { color: var(--bs-link-hover-color) !important; }
/* Evita che il rapporto del canvas desktop comprima gli assi sui telefoni. */
.patos-statistics-chart { height: 18rem; }
.nav-tabs .nav-link.active { color: var(--bs-body-color); background: var(--bs-body-bg); }
.custom-file { position: relative; display: inline-block; width: 100%; height: 2.5rem; }
.custom-file-input { position: relative; width: 100%; height: 2.5rem; opacity: 0; z-index: 2; }
.custom-file-label { position: absolute; inset: 0; padding: .375rem .75rem; color: var(--bs-body-color);
    background: var(--bs-body-bg); border: 1px solid var(--bs-border-color); border-radius: .375rem; }
.custom-file-input:focus + .custom-file-label { outline: 2px solid var(--bs-link-color); outline-offset: 2px; }
.patos-attach-preview {
    border: 1px solid var(--bs-border-color);
    padding: .5rem .8rem;
    border-radius: .3rem;
    background: var(--bs-tertiary-bg);
    color: var(--bs-body-color);
    overflow-wrap: anywhere;
}
.overlay { position: absolute; inset: 0; display: flex; align-items: center; justify-content: center;
    z-index: 50; background: rgba(var(--bs-body-bg-rgb), .85); }
.login-page { background: var(--bs-tertiary-bg); min-height: 100vh; height: auto; padding: 2rem 0; }
.login-card-body { color: var(--bs-body-color); background: var(--bs-body-bg); }
.login-box { max-width: calc(100vw - 2rem); }
.login-page .btn-primary { color: var(--lte-primary-color, #fff); }
/* Il form segue il tema; solo il fondo del logo mantiene la scelta dell'ente. */
.login-page .login-panel {
    background: var(--bs-body-bg);
    color: var(--bs-body-color);
    border: 1px solid var(--bs-border-color);
    border-radius: .75rem;
    box-shadow: 0 .5rem 1.5rem rgba(0, 0, 0, .12);
    margin-bottom: 0;
}
.login-panel .login-ente {
    padding: 1.25rem 1.5rem;
    margin-bottom: 0;
    gap: .5rem;
    border-bottom: 1px solid var(--bs-border-color);
}
.login-panel .login-card-body {
    padding: 1.5rem;
    border-radius: 0 0 .75rem .75rem;
}
.login-panel .login-form-title { font-size: 1.25rem; font-weight: 600; margin: 0 0 1.25rem; }
.login-panel .login-institution-name {
    margin: 0;
    font-size: 1rem;
    font-weight: 600;
    text-align: center;
    overflow-wrap: anywhere;
}
.login-panel .form-control,
.login-panel .input-group-text,
.login-panel button[type="submit"] { min-height: 2.75rem; }
.login-secondary-links { display: flex; justify-content: space-between; flex-wrap: wrap; gap: .75rem 1rem; }
.login-page .login-brand-dark { display: none; }
[data-bs-theme="dark"] .login-page .login-brand-light { display: none; }
[data-bs-theme="dark"] .login-page .login-brand-dark { display: inline-block; }
.login-page .login-brand-albo { background: #fff; padding: .5rem .75rem; border-radius: .375rem; }
.login-page .login-institution-logo {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: fit-content;
    max-width: 100%;
    padding: .75rem;
    border-radius: .375rem;
}

/* Fondo del marchio scelto dall'ente: non segue il tema della pagina. */
.login-page .login-institution-logo[data-logo-background="light"] {
    background-color: #fff;
    color: #212529;
}





.login-page .login-institution-logo[data-logo-background="dark"] {
    background-color: #212529;
    color: #fff;
}

.login-page .login-ente .logo-ente {
    display: block;
    max-width: min(12rem, 100%);
    max-height: 5rem;
    object-fit: contain;
    mix-blend-mode: normal;
}
.login-page .login-ente img,
.login-page .wrapper-logo-patos-auth img {
    height: auto;
    filter: none;
}
.login-page .logo-patos img,
.login-page .wrapper-logo-patos-auth img {
    max-width: min(7rem, 100%);
}
.login-page .logo-patos,
.login-page .wrapper-logo-patos-auth {
    text-align: center;
}
.login-panel .wrapper-logo-patos-auth { padding: 0 1.5rem 1.5rem; }

/* Select2 rimane jQuery: usa il tema default con i token Bootstrap 5. */
/* Tom Select e Select2 convivono nei form: entrambi seguono il tema corrente. */
/* La tabella allegati conserva la palette chiara con intestazione table-dark anche nel tema scuro. */
.app-main .table.table-attach {
    table-layout: auto;
    min-width: 48rem;
    --bs-link-color: var(--colore1, #8c2559);
    --bs-link-hover-color: var(--colore1, #8c2559);
    --bs-table-color: #17324d;
    --bs-table-bg: #fff;
    --bs-table-border-color: #dee2e6;
    --bs-table-striped-color: #17324d;
    --bs-table-striped-bg: #f2f2f2;
    --bs-table-hover-color: #17324d;
    --bs-table-hover-bg: #e5e5e5;
}
/* Le percentuali storiche non tengono conto delle colonne aggiunte dagli addon.
 * Mantengo spazio per i controlli e lascio lo scorrimento al contenitore responsive. */
.app-main .table-attach th {
    width: auto !important;
    white-space: nowrap;
}
.app-main .table-attach th:first-child {
    min-width: 2rem;
}
.app-main .table-attach th:nth-child(2) {
    min-width: 12rem;
}
/* La terza colonna contiene Tipo/Data quando previsto, altrimenti l'etichetta. */
.app-main .table-attach th:nth-child(3) {
    min-width: 16rem;
}
.app-main .table-attach td:nth-child(2) .flex-grow-1 {
    min-width: 0;
    overflow-wrap: anywhere;
}
.app-main .table-attach .omissis-select,
.app-main .table-attach .public-select {
    width: auto;
    max-width: none;
}
.app-main .table-attach td:last-child {
    white-space: nowrap;
}
.app-main .table-attach td:last-child > .btn {
    border: 0;
    background: transparent;
    box-shadow: none;
}
.app-main .table-attach .label_attach,
.app-main .table-attach .omissis-select,
.app-main .table-attach .public-select {
    background-color: #fff !important;
    color: #17324d !important;
}
/* Campo etichetta e azione restano sulla stessa riga, senza il bordo nativo a rilievo dell'input. */
.app-main .table-attach .patos-attach-label-field {
    display: flex;
    align-items: center;
    gap: .5rem;
    min-width: 14rem;
}
.app-main .table-attach .label_attach {
    flex: 1 1 auto;
    min-width: 0;
    width: auto;
    height: 1.75rem;
    padding: 0 .25rem;
    border: 1px solid #767676;
    border-radius: .125rem;
    font: inherit;
}
.app-main .table-attach .change-label {
    flex: 0 0 2rem;
    width: 2rem;
    height: 1.75rem;
    padding: 0;
    border: 0;
    background: transparent;
    color: #212529;
    box-shadow: none;
}
.app-main .table-attach .change-label:focus-visible,
.app-main .table-attach td:last-child > .btn:focus-visible {
    outline: 2px solid var(--colore1, #8c2559);
    outline-offset: 2px;
}
/* Le nuove select ereditano i 16 px del back-office anziché i 13 px del tema della libreria. */
.app-main .ts-wrapper, .app-main .ts-control, .app-main .ts-dropdown {
    font-size: 1rem;
    line-height: 1.5;
}
.ts-wrapper .ts-control, .ts-wrapper.single.input-active .ts-control, .ts-dropdown {
    background: var(--bs-body-bg); color: var(--bs-body-color); border-color: var(--bs-secondary-color);
}
.ts-control input, .ts-dropdown-content, .ts-dropdown-content .option { color: var(--bs-body-color); }
.ts-dropdown-content .option.selected { background: var(--bs-tertiary-bg); color: var(--bs-body-color); }
.ts-dropdown-content .option:hover, .ts-dropdown-content .option.active,
.ts-dropdown-content .option.selected:hover, .ts-dropdown-content .option.selected.active {
    background: var(--colore1); color: var(--lte-primary-color, #fff);
}
.select2-container .select2-selection { min-height: 38px; background: var(--bs-body-bg);
    color: var(--bs-body-color); border-color: var(--bs-secondary-color); }
.select2-container--default .select2-selection--single .select2-selection__rendered { color: var(--bs-body-color); line-height: 36px; }
.select2-container--default .select2-selection--single .select2-selection__arrow { top: 6px; }
.app-main .select2-container--default .select2-selection--single .select2-selection__placeholder {
    color: var(--bs-secondary-color);
}
.select2-dropdown { background: var(--bs-body-bg); color: var(--bs-body-color); border-color: var(--bs-secondary-color); }
.select2-container--default .select2-search--dropdown .select2-search__field { color: var(--bs-body-color); background: var(--bs-body-bg); }
.select2-container--default .select2-results__option[aria-selected="true"] {
    background: var(--bs-secondary-bg); color: var(--bs-body-color); border-color: var(--bs-secondary-color);
}
.select2-container--default .select2-results__option--highlighted[aria-selected] { background: var(--colore1); color: var(--lte-primary-color, #fff); }
/* Conserva i badge storici: colore Ente e testo bianco anche nel tema scuro. */
.select2-container--default .select2-selection--multiple .select2-selection__choice {
    background: var(--colore1); color: #fff; border-color: var(--colore1);
}
.select2-container--default .select2-selection--multiple .select2-selection__choice__remove { color: inherit; }
.select2-container--default.select2-container--disabled .select2-selection { background: var(--bs-secondary-bg); }
[data-bs-theme="dark"] .select2-container--default .select2-selection--single {
    background-color: var(--bs-body-bg) !important;
}
[data-bs-theme="dark"] .select2-container--default.select2-container--disabled .select2-selection--single {
    background-color: var(--bs-secondary-bg) !important;
}
.select2-container--default .select2-selection--multiple .select2-search__field { color: var(--bs-body-color); }
.select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child.select2-search { width: 100%; }
.select2-container--default .select2-selection--multiple .select2-selection__rendered li:first-child .select2-search__field { width: 100% !important; }
.select2-container--focus .select2-selection { outline: 2px solid var(--bs-link-color); outline-offset: 2px; }

/* I dialoghi CKEditor hanno dimensioni inline desktop. Su telefono il corpo
 * puo scorrere orizzontalmente, mentre titolo e pulsanti restano nel viewport. */
@media (max-width: 575.98px) {
    .cke_dialog {
        left: .5rem !important;
        width: calc(100vw - 1rem) !important;
        table-layout: fixed;
    }
    .cke_dialog .cke_dialog_body { width: calc(100vw - 1rem) !important; }
    .cke_dialog .cke_dialog_contents,
    .cke_dialog .cke_dialog_contents > tbody,
    .cke_dialog .cke_dialog_contents > tbody > tr,
    .cke_dialog .cke_dialog_contents > tbody > tr > td {
        display: block;
        width: 100% !important;
        box-sizing: border-box;
    }
    .cke_dialog .cke_dialog_contents_body {
        display: block;
        width: 100% !important;
        box-sizing: border-box;
        overflow-x: auto;
    }
}

/* Stessa scala dei titoli delle card nella pagina Ente di SmartPAD. */
.institution-settings-page .card-header .card-title {
    font-size: 1.8rem;
}

/* Riprende la navigazione ente di SmartPAD: separatori orizzontali, senza
 * cornici laterali e link non sottolineati. Include le voci degli addon
 * senza modificare le altre liste dell'applicazione. */
.institution-settings-navigation .box-profile .list-group {
    border-radius: 0;
}
.institution-settings-navigation .box-profile .list-group-item {
    border-left: 0;
    border-right: 0;
    border-radius: 0;
    padding: .75rem 0;
}
.institution-settings-navigation .box-profile .list-group-item a {
    color: var(--bs-body-color);
    text-decoration: none;
}
/* Come in SmartPAD, l'hover usa il colore dei link del tema, senza sfondo.
 * Sostituisce il grigio legacy #c2c7d0 e rispetta la palette dell'ente. */
.institution-settings-navigation .box-profile .list-group-item a:hover,
.institution-settings-navigation .box-profile .list-group-item a:focus {
    color: var(--bs-link-hover-color);
    text-decoration: none;
}
.institution-settings-navigation .box-profile .list-group-item a:focus-visible {
    outline: 2px solid var(--bs-body-color);
    outline-offset: 2px;
}
/* L'indicatore inferiore e il testo marcato riprendono lo stato attivo SmartPAD;
 * la selezione conserva il colore configurato per l'ente. */
.institution-settings-navigation .list-group-item.settings-navigation-active {
    background-color: transparent;
    box-shadow: inset 0 -.1875rem 0 var(--bs-link-color);
}
.institution-settings-navigation .box-profile .list-group-item.settings-navigation-active > .item_layer {
    color: var(--bs-link-color);
    font-weight: 600;
    text-decoration: none;
}

.patos-toast-container { position: fixed; z-index: 1090; padding: 1rem; max-width: 100vw; }
.patos-toast-container--top-right { top: 0; right: 0; }
.patos-toast-container--top-left { top: 0; left: 0; }
.patos-toast-container--bottom-right { bottom: 0; right: 0; }
.patos-toast-container--bottom-left { bottom: 0; left: 0; }
.patos-toast-container .toast { margin-bottom: .5rem; }
/* Come in SmartPAD, il sottotitolo resta leggibile nell'intestazione colorata;
 * sfondi, testo del corpo e chiusura sono gestiti dalle varianti native AdminLTE. */
.patos-toast-container .toast-success .toast-header .text-muted,
.patos-toast-container .toast-danger .toast-header .text-muted {
    color: rgba(255, 255, 255, .85) !important;
}

[data-bs-theme="dark"] .dataTables_processing,
/* jsTree conserva l'ombra bianca del tema legacy anche sulle etichette scure.
 * Il limite di larghezza lascia spazio al comando di espansione su mobile. */
.app-main .jstree .jstree-anchor { max-width: calc(100% - 24px); overflow-wrap: anywhere; vertical-align: top; text-shadow: none; }
.jstree-default .jstree-clicked { color: var(--lte-primary-color, #fff) !important; }
[data-bs-theme="dark"] .jstree .jstree-anchor { color: var(--bs-body-color); }
[data-bs-theme="dark"] .jstree-default .jstree-hovered { background: var(--bs-tertiary-bg) !important; color: var(--bs-body-color) !important; }
[data-bs-theme="dark"] .jstree .jstree-ocl { filter: brightness(0) invert(.8); }
[data-bs-theme="dark"] .jconfirm .jconfirm-box { background: var(--bs-body-bg); color: var(--bs-body-color); }
/* Il tema modern imposta colori propri sui figli: il solo colore del box
 * non basta a rendere leggibili titolo, contenuto e chiusura nei due temi. */
.jconfirm.jconfirm-modern .jconfirm-box {
    background-color: var(--bs-body-bg);
    color: var(--bs-body-color);
}
.jconfirm.jconfirm-modern .jconfirm-box div.jconfirm-title-c,
.jconfirm.jconfirm-modern .jconfirm-box div.jconfirm-content,
.jconfirm.jconfirm-modern .jconfirm-box div.jconfirm-closeIcon {
    color: var(--bs-body-color);
}
.jconfirm.jconfirm-modern .jconfirm-box div.jconfirm-closeIcon {
    opacity: 1;
}
[data-bs-theme="dark"] .table { --bs-table-color: var(--bs-body-color); --bs-table-bg: var(--bs-body-bg); }
[data-bs-theme="dark"] .table-striped { --bs-table-striped-bg: var(--bs-tertiary-bg); --bs-table-striped-color: var(--bs-body-color); }
[data-bs-theme="dark"] .bg-light, [data-bs-theme="dark"] .bg-white { background-color: var(--bs-tertiary-bg) !important; }
[data-bs-theme="dark"] .text-dark, [data-bs-theme="dark"] ._black { color: var(--bs-body-color) !important; }
[data-bs-theme="dark"] .table .btn-primary,
[data-bs-theme="dark"] .btn-outline-primary { color: var(--bs-link-color); border-color: var(--bs-link-color); }
[data-bs-theme="dark"] .table .btn-primary { background: var(--bs-body-bg); }
/* Gli helper condivisi producono ancora badge legacy; custom.css li rende neri. */
[data-bs-theme="dark"] .table .badge-success:not(.show-badge-bg):not(.badge-perlapa),
[data-bs-theme="dark"] .table .badge-primary:not(.badge-perlapa),
[data-bs-theme="dark"] .table .badge-info:not(.show-badge-bg):not(.badge-perlapa) { color: var(--bs-body-color); }
[data-bs-theme="dark"] .btn-outline-secondary {
    --bs-btn-color: #ced4da;
    --bs-btn-border-color: #adb5bd;
}
[data-bs-theme="dark"] .page-link { color: var(--bs-link-color); }
/* Colori semantici Bootstrap per gli avvisi: anche le guide espanse devono
 * restare leggibili nel tema scuro, senza ereditare testo chiaro su fondo chiaro. */
.app-main .alert-info {
    color: var(--bs-info-text-emphasis);
    background-color: var(--bs-info-bg-subtle);
    border-color: var(--bs-info-border-subtle);
}
.app-main .alert-info .text-muted { color: inherit !important; }
/* Il verde legacy di text-primary non contrasta sul fondo degli avvisi informativi. */
.app-main .alert-info a.text-primary {
    color: inherit !important;
    text-decoration: underline;
}
/* I link configurati nell'ente devono seguire il tema, non il nero della lista legacy. */
.app-main .custom-links-list .list-group-item .float-start > a {
    color: var(--bs-link-color);
}
.app-main .custom-links-list .list-group-item .float-start > a:hover,
.app-main .custom-links-list .list-group-item .float-start > a:focus {
    color: var(--bs-link-hover-color);
}
.patos-publication-guide a { color: var(--bs-warning-text-emphasis); }
.patos-publication-guide a:hover { color: var(--bs-warning-text-emphasis); }
.app-main #custom-tabs .nav-link { color: var(--bs-body-color); }
.app-main #custom-tabs .nav-link:hover { color: var(--bs-link-color); }
[data-bs-theme="dark"] .heading-form-title { color: var(--bs-secondary-color); }
/* Anche i dettagli dei formati negli allegati devono seguire il contrasto del tema. */
.file-upload-requirements__toggle,
.attach-upload-requirements summary { color: var(--bs-link-color); }
.file-upload-requirements__toggle:hover,
.file-upload-requirements__toggle:focus,
.attach-upload-requirements summary:hover,
.attach-upload-requirements summary:focus { color: var(--bs-link-hover-color); }
.app-header .select2-container--default .select2-selection__placeholder { color: var(--bs-secondary-color); }
/* Gli outline info e danger usano testo di enfasi; i riempimenti al passaggio
 * mantengono il contrasto previsto dalle variabili del pulsante Bootstrap. */
.app-main .btn-outline-info { --bs-btn-color: var(--bs-info-text-emphasis); }
.app-main .btn-outline-secondary { --bs-btn-color: var(--bs-secondary-text-emphasis); }
/* I comandi delle statistiche sono link su superfici neutre: il colore del
 * tema mantiene il contrasto anche quando lo sfondo passa al tema scuro. */
.app-main .btn-link-patos { color: var(--bs-link-color); }
.app-main .btn-link-patos:hover,
.app-main .btn-link-patos:focus { color: var(--bs-link-hover-color); }
[data-bs-theme="dark"] .app-main .btn-outline-danger { --bs-btn-color: var(--bs-danger-text-emphasis); }
/* Il Changelog conserva la propria composizione, ma le superfici scure e
 * i testi non possono usare i grigi e blu pensati per il solo fondo bianco. */
[data-bs-theme="dark"] .changelog-page,
[data-bs-theme="dark"] .changelog-detail-shell {
    --changelog-text: var(--bs-body-color);
    --changelog-muted: var(--bs-secondary-color);
    --changelog-border: var(--bs-border-color);
}
[data-bs-theme="dark"] .changelog-toolbar label,
[data-bs-theme="dark"] .changelog-excerpt,
[data-bs-theme="dark"] .changelog-content { color: var(--bs-body-color); }
[data-bs-theme="dark"] .changelog-filter-reset { color: var(--bs-secondary-color); }
[data-bs-theme="dark"] .changelog-read-more,
[data-bs-theme="dark"] .changelog-read-more:hover,
[data-bs-theme="dark"] .changelog-title a:hover,
[data-bs-theme="dark"] .changelog-filter-reset:hover,
[data-bs-theme="dark"] .changelog-load-more .btn,
[data-bs-theme="dark"] .changelog-content a { color: var(--bs-link-color); }
[data-bs-theme="dark"] .changelog-load-more .btn:hover {
    background: var(--bs-primary);
    color: var(--lte-primary-color, #fff);
}
[data-bs-theme="dark"] .changelog-detail { background: var(--bs-body-bg); }
[data-bs-theme] .changelog-page a:focus-visible,
[data-bs-theme] .changelog-page button:focus-visible,
[data-bs-theme] .changelog-page input:focus-visible,
[data-bs-theme] .changelog-page select:focus-visible,
[data-bs-theme] .changelog-detail-shell a:focus-visible { outline-color: var(--bs-link-color); }
[data-bs-theme="dark"] .changelog-back-link,
[data-bs-theme="dark"] .changelog-back-link:hover { color: var(--bs-link-color); }
[data-bs-theme="dark"] .page-item.active .page-link { color: #fff; }
[data-bs-theme="dark"] .file-upload-requirements,
[data-bs-theme="dark"] .attach-upload-requirements { background: var(--bs-tertiary-bg); color: var(--bs-body-color); border-color: var(--bs-secondary-color); }
[data-bs-theme="dark"] .file-upload-requirements__size,
[data-bs-theme="dark"] .attach-upload-requirements__size { background: var(--bs-body-bg); color: var(--bs-body-color); }

/* Con sidebar aperta le etichette desktop devono rientrare anche a 1280 px. */
@media (min-width: 992px) and (max-width: 1399.98px) {
    .app-header.navbar-expand .navbar-nav .nav-link { padding-left: .5rem; padding-right: .5rem; }
}
@media (max-width: 991.98px) {
    .app-header .nav-link { padding-left: .4rem; padding-right: .4rem; }
    .app-sidebar .info { display: block; }
}
@media (max-width: 768px) {
    .app-main .jstree-default-responsive .jstree-anchor { max-width: calc(100% - 40px); }
}
/* Nella navbar Bootstrap non usa Popper: sui telefoni il riferimento deve
 * essere l'intero header, altrimenti il menu notifiche esce dal bordo sinistro. */
@media (max-width: 575.98px) {
    .app-header .nav-item.dropdown { position: static; }
    .app-header .dropdown-menu { left: auto; right: .5rem; top: 100%; max-width: calc(100vw - 1rem); }
}
@media print {
    .patos-toast-container, #loading-container, ._layer_spinner_notify, ._spinner_notify { display: none !important; }
}
