/**
 * ============================================================================
 *  GesFitEvolution — Fabrik UI Skin
 *  Restyles Fabrik 4 (lists, forms, details, filters, modals) to match
 *  AdminLTE 4 / Bootstrap 5.
 * ============================================================================
 *
 *  WHERE THIS FILE LIVES AND WHY
 *  -----------------------------
 *  This file is part of the TEMPLATE. Nothing in
 *  /components/com_fabrik or /media/com_fabrik is ever modified, so Fabrik can
 *  be updated freely without losing any of the customisation below.
 *  Everything is plain CSS driven by the class names Fabrik already outputs,
 *  plus the JavaScript enhancement layer in ../js/fabrik.js.
 *
 *  Load order: <jdoc:include type="styles" /> (Bootstrap 5 + Fabrik's own CSS)
 *  is printed BEFORE this file, so these rules win at equal specificity.
 *
 *  TABLE OF CONTENTS
 *  -----------------
 *  01. Design tokens
 *  02. Icon system (legacy icon-* / fa-* / PNG images -> Bootstrap Icons)
 *  03. Global fixes (.hidden, .btn-default, utilities Fabrik assumes)
 *  04. Component shell (card)
 *  05. List toolbar (buttons, group-by, search-all)
 *  06. List filters panel
 *  07. List table (headings, rows, cells, grouping, totals, empty message)
 *  08. Row actions
 *  09. Pagination / list footer
 *  10. Form & details — groups, labels, elements
 *  11. Form field widgets (input-group, calendar, selects, repeat groups)
 *  12. Form action bar
 *  13. Tabs
 *  14. Modals / popups / alerts
 *  15. Visualisations (calendar, charts)
 *  16. Dark mode
 *  17. Responsive
 *  18. Print
 * ============================================================================
 */

/* ==========================================================================
   01. DESIGN TOKENS
   ========================================================================== */

.com_fabrik,
.fabrikModalBody {
    /* Brand — follows the "Colore Primario" template option */
    --fv-primary: var(--bs-primary, #0d6efd);
    --fv-primary-rgb: var(--bs-primary-rgb, 13, 110, 253);
    --fv-primary-soft: color-mix(in srgb, var(--fv-primary) 10%, transparent);
    --fv-primary-softer: color-mix(in srgb, var(--fv-primary) 5%, transparent);

    /* Surfaces */
    --fv-surface: var(--bs-body-bg);
    --fv-surface-2: var(--bs-tertiary-bg, #f8f9fa);
    --fv-border: var(--bs-border-color);
    --fv-border-soft: var(--bs-border-color-translucent, rgba(0, 0, 0, .12));

    /* Geometry */
    --fv-radius: .5rem;
    --fv-radius-sm: .375rem;
    --fv-shadow: 0 1px 2px rgba(0, 0, 0, .06), 0 1px 3px rgba(0, 0, 0, .04);

    /* Density — compact "gestionale" rows.
       Note: the row height is driven by the row-action buttons, so
       --fv-action-size and --fv-cell-py are tuned together to land on ~36px. */
    --fv-font: .8125rem;
    --fv-cell-py: .3rem;
    --fv-cell-px: .6rem;
    --fv-head-font: .6875rem;
    --fv-action-size: 1.6rem;

    /* Labels column width in forms / details */
    --fv-label-w: 13rem;
    /* Max width of an editing field */
    --fv-field-max: 40rem;
}

/* ==========================================================================
   02. ICON SYSTEM
   --------------------------------------------------------------------------
   Fabrik still emits Joomla 3 / Font Awesome 4 icon markup which produces NO
   glyph in Bootstrap 5 / FA6:
       <span data-isicon="true" class="fa icon-checkmark"></span>   (legacy J!)
       <span class="fa fa-edit"></span>                            (FA4 name)
       <img class="fabrikImg" src=".../images/search.png">         (PNG)
   Here they are all mapped onto Bootstrap Icons, which the template already
   ships locally (vendor/bootstrap-icons).
   ========================================================================== */

/* -- Reset the icon font for every Fabrik icon holder --------------------- */
span.fa,
span.fabrikIcon,
[data-isicon="true"],
.fabrikElementContainer i[class^="icon-"],
.fabrikElementContainer i[class*=" icon-"],
.btn > i[class^="icon-"],
.btn > i[class*=" icon-"] {
    font-family: "bootstrap-icons" !important;
    font-style: normal;
    font-weight: normal !important;
    font-variant: normal;
    text-transform: none;
    line-height: 1;
    display: inline-block;
    vertical-align: -.125em;
    speak: never;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

/* -- Legacy Joomla icon-* -> Bootstrap Icons glyphs ----------------------- */

.icon-plus::before,
.icon-add::before,
.icon-new::before              { content: "\f4fe"; }   /* bi-plus            */
.icon-minus::before             { content: "\f344"; }   /* bi-dash            */
.icon-remove::before,
.icon-delete::before,
.icon-cancel::before,
.icon-trash::before             { content: "\f5de"; }   /* bi-trash           */
.icon-copy::before              { content: "\f759"; }   /* bi-copy            */
.icon-edit::before,
.icon-pencil::before            { content: "\f4ca"; }   /* bi-pencil-square   */
.icon-ok::before,
.icon-apply::before,
.icon-publish::before,
.icon-save::before              { content: "\f26e"; }   /* bi-check           */
.icon-unpublish::before         { content: "\f567"; }   /* bi-slash-circle    */
.icon-checkmark::before         { content: "\f26a"; }   /* bi-check-circle-fill */
.icon-eye::before,
.icon-eye-open::before          { content: "\f341"; }   /* bi-eye             */
.icon-eye-close::before         { content: "\f341"; }   /* bi-eye             */
.icon-search::before,
.icon-zoom-in::before           { content: "\f52a"; }   /* bi-search          */
.icon-refresh::before,
.icon-reload::before,
.icon-loop::before              { content: "\f130"; }   /* bi-arrow-repeat    */
.icon-undo::before              { content: "\f117"; }   /* bi-arrow-counterclockwise */
.icon-upload::before            { content: "\f603"; }   /* bi-upload          */
.icon-download::before          { content: "\f30a"; }   /* bi-download        */
.icon-file::before              { content: "\f38b"; }   /* bi-file-earmark-text */
.icon-print::before             { content: "\f501"; }   /* bi-printer         */
.icon-envelope::before,
.icon-envelope-opened::before   { content: "\f32f"; }   /* bi-envelope        */
.icon-list-view::before,
.icon-list::before              { content: "\f478"; }   /* bi-list-ul         */
.icon-link::before              { content: "\f470"; }   /* bi-link-45deg      */
.icon-filter::before            { content: "\f3e1"; }   /* bi-funnel          */
.icon-calendar::before          { content: "\f214"; }   /* bi-calendar3       */
.icon-clock::before             { content: "\f292"; }   /* bi-clock-history   */
.icon-star::before              { content: "\f589"; }   /* bi-stars           */
.icon-star-empty::before        { content: "\f586"; }   /* bi-star            */
.icon-home::before              { content: "\f424"; }   /* bi-house           */
.icon-user::before              { content: "\f4e1"; }   /* bi-person          */
.icon-users::before             { content: "\f4e1"; }   /* bi-person          */
.icon-lock::before              { content: "\f47b"; }   /* bi-lock            */
.icon-unlock::before            { content: "\f47b"; }   /* bi-lock            */
.icon-key::before               { content: "\f44d"; }   /* bi-key             */
.icon-cog::before,
.icon-options::before,
.icon-cogs::before              { content: "\f3e5"; }   /* bi-gear            */
.icon-info::before,
.icon-info-2::before            { content: "\f431"; }   /* bi-info-circle     */
.icon-warning::before           { content: "\f33b"; }   /* bi-exclamation-triangle */
.icon-question::before,
.icon-help::before              { content: "\f505"; }   /* bi-question-circle */
.icon-ban::before,
.icon-block::before             { content: "\f6b6"; }   /* bi-ban             */
.icon-expand::before            { content: "\f286"; }   /* bi-chevron-up      */
.icon-contract::before          { content: "\f282"; }   /* bi-chevron-down    */
.icon-forward::before,
.icon-next::before              { content: "\f285"; }   /* bi-chevron-right   */
.icon-backward::before,
.icon-previous::before          { content: "\f284"; }   /* bi-chevron-left    */
.icon-first::before             { content: "\f284"; }   /* bi-chevron-left    */
.icon-last::before              { content: "\f285"; }   /* bi-chevron-right   */
.icon-play::before              { content: "\f4f4"; }   /* bi-play-fill       */
.icon-pause::before             { content: "\f4c3"; }   /* bi-pause-fill      */
.icon-stop::before              { content: "\f4d6"; }   /* bi-stop-fill       */
.icon-lightning::before         { content: "\f46d"; }   /* bi-lightning-charge */
.icon-sort::before              { content: "\f127"; }   /* bi-arrow-down-up   */
.icon-sort-asc::before          { content: "\f57b"; }   /* bi-sort-up         */
.icon-sort-desc::before         { content: "\f575"; }   /* bi-sort-down       */
.icon-arrow-up::before          { content: "\f148"; }   /* bi-arrow-up        */
.icon-arrow-down::before        { content: "\f128"; }   /* bi-arrow-down      */
.icon-flag::before              { content: "\f4a4"; }   /* bi-flag            */
.icon-pin::before               { content: "\f5ab"; }   /* bi-tag             */
.icon-tag::before               { content: "\f5ab"; }   /* bi-tag             */
.icon-comment::before           { content: "\f253"; }   /* bi-chat-dots       */
.icon-share::before             { content: "\f1c5"; }   /* bi-box-arrow-up-right */
.icon-menu::before              { content: "\f479"; }   /* bi-list            */
.icon-grid::before              { content: "\f3fc"; }   /* bi-grid            */
.icon-table::before             { content: "\f5aa"; }   /* bi-table           */
.icon-database::before          { content: "\f8c4"; }   /* bi-database        */
.icon-csv::before               { content: "\f743"; }   /* bi-filetype-csv    */
.icon-pdf::before               { content: "\f756"; }   /* bi-filetype-pdf    */
.icon-spreadsheet::before       { content: "\f3b7"; }   /* bi-file-spreadsheet */
.icon-export::before            { content: "\f348"; }   /* bi-file-arrow-up   */
.icon-import::before            { content: "\f346"; }   /* bi-file-arrow-down */
.icon-feed::before              { content: "\f5a4"; }   /* bi-rss             */
.icon-checkbox::before          { content: "\f26c"; }   /* bi-check2-square   */
.icon-radio::before             { content: "\f309"; }   /* bi-record-circle   */
.icon-toggle::before            { content: "\f5cb"; }   /* bi-toggles         */

/* Fallback: an icon that carries no recognisable class still shows something
   instead of a blank.

   The :not() guards are ESSENTIAL, not cosmetic. This selector is more
   specific than the single-class mappings above (a pseudo-class and two
   attribute selectors versus one class), so without them it would win over
   every mapping and ALL icons would show the same glyph. Excluding anything
   with a recognisable class keeps the fallback for genuinely unknown icons
   only. */
span.fa:empty:not([class*="icon-"]):not([class*="fa-"]):not([class*="bi-"])::before,
[data-isicon="true"]:empty:not([class*="icon-"]):not([class*="fa-"]):not([class*="bi-"])::before {
    content: "\f431";
}

/* -- Font Awesome 4 names emitted directly by Fabrik ---------------------- */
.fa.fa-edit::before                { content: "\f4ca"; }   /* pencil-square */
.fa.fa-pencil::before              { content: "\f4ca"; }
.fa.fa-trash::before,
.fa.fa-trash-o::before             { content: "\f5de"; }   /* trash         */
.fa.fa-plus::before                { content: "\f4fe"; }
.fa.fa-minus::before               { content: "\f344"; }
.fa.fa-search::before              { content: "\f52a"; }
.fa.fa-refresh::before,
.fa.fa-repeat::before              { content: "\f130"; }
.fa.fa-check::before               { content: "\f26e"; }
.fa.fa-times::before,
.fa.fa-close::before               { content: "\f659"; }   /* x-lg          */
.fa.fa-copy::before                { content: "\f759"; }
.fa.fa-file::before                { content: "\f38b"; }
.fa.fa-print::before               { content: "\f501"; }
.fa.fa-envelope::before            { content: "\f32f"; }
.fa.fa-calendar::before            { content: "\f214"; }
.fa.fa-clock-o::before             { content: "\f292"; }
.fa.fa-eye::before                 { content: "\f341"; }
.fa.fa-download::before            { content: "\f30a"; }
.fa.fa-upload::before              { content: "\f603"; }
.fa.fa-ban::before                 { content: "\f6b6"; }   /* bi-ban             */
.fa.fa-sort::before                { content: "\f127"; }
.fa.fa-filter::before              { content: "\f3e1"; }
.fa.fa-list::before                { content: "\f478"; }
.fa.fa-exclamation-triangle::before { content: "\f33b"; }
.fa.fa-star::before                { content: "\f586"; }
.fa.fa-lock::before                { content: "\f47b"; }
.fa.fa-user::before                { content: "\f4e1"; }
.fa.fa-cog::before                 { content: "\f3e5"; }
.fa.fa-link::before                { content: "\f470"; }
.fa.fa-chart-bar::before           { content: "\f1a8"; }   /* bi-bar-chart */

/* -- Frecce e chevron (paginazione form "Prev"/"Successivo") --------------
   Senza mapping questi span restano VUOTI: la classe contiene "fa-" quindi
   il fallback :empty non li copre. */
.fa.fa-angle-left::before,
.fa.fa-chevron-left::before,
.fa.fa-arrow-left::before       { content: "\f284"; }   /* bi-chevron-left  */
.fa.fa-angle-right::before,
.fa.fa-chevron-right::before,
.fa.fa-arrow-right::before      { content: "\f285"; }   /* bi-chevron-right */
.fa.fa-angle-up::before,
.fa.fa-chevron-up::before,
.fa.fa-arrow-up::before         { content: "\f286"; }   /* bi-chevron-up    */
.fa.fa-angle-down::before,
.fa.fa-chevron-down::before,
.fa.fa-arrow-down::before       { content: "\f282"; }   /* bi-chevron-down  */
.fa.fa-angle-double-left::before  { content: "\f27f"; } /* bi-chevron-double-left  */
.fa.fa-angle-double-right::before { content: "\f280"; } /* bi-chevron-double-right */

/* -- Stato dell'ordinamento delle colonne ---------------------------------
   Fabrik scambia la classe dello span fra fa-sort / fa-sort-down (crescente)
   e fa-sort-up (decrescente): senza questi due mapping, ordinando una colonna
   l'indicatore sparisce. */
.fa.fa-sort-down::before,
.fa.fa-sort-asc::before         { content: "\f575"; }   /* bi-sort-down (asc)  */
.fa.fa-sort-up::before,
.fa.fa-sort-desc::before        { content: "\f57b"; }   /* bi-sort-up   (desc) */

/* -- Altri nomi FA4 ancora emessi da Fabrik ------------------------------- */
.fa.fa-times-circle::before,
.fa.fa-times-circle-o::before   { content: "\f623"; }   /* bi-x-circle     */
.fa.fa-check-circle::before,
.fa.fa-check-circle-o::before   { content: "\f26a"; }   /* bi-check-circle-fill */
.fa.fa-info-circle::before      { content: "\f431"; }   /* bi-info-circle  */
.fa.fa-floppy-o::before,
.fa.fa-save::before             { content: "\f7d8"; }   /* bi-floppy       */
.fa.fa-bars::before             { content: "\f479"; }   /* bi-list         */
.fa.fa-th::before,
.fa.fa-th-large::before         { content: "\f3fc"; }   /* bi-grid         */
.fa.fa-file-text-o::before,
.fa.fa-file-o::before           { content: "\f38b"; }   /* bi-file-earmark-text */
.fa.fa-envelope-o::before       { content: "\f32f"; }   /* bi-envelope     */
.fa.fa-external-link::before    { content: "\f1c5"; }   /* bi-box-arrow-up-right */

/* -- Bottoni toolbar: il glifo che si legge meglio nel contesto -----------
   Specificita' (0,3,0): batte sia le mappe .icon-* sia quelle .fa.*. */
.com_fabrik .groupBy > .fa::before        { content: "\f2cc"; }  /* bi-collection    - "Raggruppato per" */
.com_fabrik .clearFilters > .fa::before   { content: "\f331"; }  /* bi-eraser        - "Pulisci"         */
.com_fabrik .pdfButton > .fa::before      { content: "\f756"; }  /* bi-filetype-pdf  - "Pdf"             */

/* -- Obsolete PNG sprites -> vector icons --------------------------------- */

/* "Dettaglio" magnifier (search.png) used by the view row action */
.fabrikImg,
img[src*="com_fabrik/images/search.png"],
img[src*="com_fabrik/images/arrow-up.png"],
img[src*="com_fabrik/images/feed.png"] {
    display: none !important;
}

/* Put the vector icon back on the parent link.
   "Dettaglio" apre la vista di sola lettura: l'occhio e' l'affordance
   standard per "guarda", piu' immediato della vecchia info-circle. */
a.fabrik_view::before {
    content: "\f341";            /* bi-eye */
    font-family: "bootstrap-icons" !important;
    font-style: normal;
    font-weight: normal;
    line-height: 1;
    display: inline-block;
    vertical-align: -.125em;
}

a.fabrik_edit::before {
    content: "\f4ca";            /* bi-pencil-square */
    font-family: "bootstrap-icons" !important;
    font-style: normal;
    font-weight: normal;
    line-height: 1;
    display: inline-block;
    vertical-align: -.125em;
}

/* Bottone "aggiorna colonna" dei list plugin (es. FIRMATO): Fabrik lo emette
   SENZA icona, cosi' il bottone risultava vuoto. bi-patch-check = timbro /
   approvazione, coerente con azioni tipo "firma". */
.com_fabrik td.fabrik_actions .btn[class*="update_col"]::before,
.com_fabrik th.fabrik_actions .btn[class*="update_col"]::before {
    content: "\f4b6";            /* bi-patch-check */
    font-family: "bootstrap-icons" !important;
    font-style: normal;
    font-weight: normal;
    line-height: 1;
    display: inline-block;
    vertical-align: -.125em;
}

/* "Dettaglio" (a.fabrik_view) e "Modifica" (a.fabrik_edit) portano la loro
   icona nel ::before del link (o in un PNG legacy): un eventuale span icona
   dentro il bottone va nascosto, altrimenti si vedono DUE glifi - che e'
   esattamente cio' che capitava su "Modifica" (matita + info).

   IMPORTANTE: la regola e' volutamente ristretta a questi due link. Gli
   altri bottoni di riga (Copia, Congualio, plugin custom) usano lo PROPRIO
   span interno come unica icona: nasconderlo li lasciava come quadratini
   vuoti cliccabili (era il caso di Copia/Congualio nelle righe, mentre
   nell'header si vedevano perche' li' il selettore non matchava). */
.com_fabrik .fabrik_actions a.fabrik_view > span[data-isicon],
.com_fabrik .fabrik_actions a.fabrik_view > span.fa,
.com_fabrik .fabrik_actions a.fabrik_view > i[class^="icon-"],
.com_fabrik .fabrik_actions a.fabrik_view > i[class*=" icon-"],
.com_fabrik .fabrik_actions a.fabrik_edit > span[data-isicon],
.com_fabrik .fabrik_actions a.fabrik_edit > span.fa,
.com_fabrik .fabrik_actions a.fabrik_edit > i[class^="icon-"],
.com_fabrik .fabrik_actions a.fabrik_edit > i[class*=" icon-"] {
    display: none !important;
}

.feedButton::before {
    content: "\f5a4";            /* bi-rss */
    font-family: "bootstrap-icons" !important;
}

/* Modern loader instead of ajax-loader.gif */
img[src*="ajax-loader.gif"],
img[src*="loading.gif"] {
    opacity: .0;
    width: 0;
}

.fabrik_loading,
.fabrikLoading {
    display: inline-block;
    width: 1rem;
    height: 1rem;
    border: 2px solid var(--fv-primary);
    border-right-color: transparent;
    border-radius: 50%;
    animation: fv-spin .6s linear infinite;
    vertical-align: -.125em;
}

@keyframes fv-spin {
    to { transform: rotate(360deg); }
}

/* -- Bootstrap caret helper keeps working --------------------------------- */
.caret {
    display: inline-block;
    width: 0;
    height: 0;
    margin-left: .25rem;
    vertical-align: middle;
    border-top: .3em solid;
    border-right: .3em solid transparent;
    border-bottom: 0;
}

/* Dentro Fabrik il caret e' un chevron, piu' moderno del triangolo */
.com_fabrik .caret {
    width: auto;
    height: auto;
    border: 0;
    font-family: "bootstrap-icons" !important;
    font-size: .7em;
    line-height: 1;
    opacity: .65;
    vertical-align: .08em;
}

.com_fabrik .caret::before { content: "\f282"; }   /* bi-chevron-down */

/* ==========================================================================
   03. GLOBAL FIXES
   ========================================================================== */

/* Bootstrap 5 dropped .hidden — Fabrik relies on it for accessible labels.
   Without this every "Modifica" / "Dettaglio" / "Cancella" label is visible. */
.com_fabrik .hidden,
.fabrikModalBody .hidden,
.fabrikForm .hidden,
.fabrikDataContainer .hidden {
    display: none !important;
}

.fabrikHide {
    display: none !important;
}

/* .btn-default does not exist in Bootstrap 5 — 2000+ Fabrik buttons use it.
   Neutral "soft" look so they never render as unstyled/borderless blobs. */
.btn-default {
    --bs-btn-color: var(--bs-body-color);
    --bs-btn-bg: var(--fv-surface-2, var(--bs-tertiary-bg));
    --bs-btn-border-color: var(--fv-border, var(--bs-border-color));
    --bs-btn-hover-color: var(--bs-body-color);
    --bs-btn-hover-bg: var(--bs-secondary-bg);
    --bs-btn-hover-border-color: var(--bs-border-color);
    --bs-btn-active-color: var(--bs-body-color);
    --bs-btn-active-bg: var(--bs-secondary-bg);
    --bs-btn-active-border-color: var(--bs-border-color);
    --bs-btn-disabled-opacity: .55;
    --bs-btn-focus-shadow-rgb: 0, 0, 0;
}

/* Fabrik emits many bare <a class="btn"> (no variant) in the list toolbar.
   The :not() chain below is deliberately EXCLUDING the buttons that have their
   own treatment further down (add, record actions) — otherwise the specificity
   of `:not([class*="btn-"])` (0,3,0) would beat those rules (0,2,0) and the
   "Aggiungi" button would fall back to a plain white look. */
.fabrikButtonsContainer .btn:not([class*="btn-"]):not(.addbutton):not(.addRecord),
.fabrikForm > .container-fluid .btn:not([class*="btn-"]):not(.addbutton):not(.addRecord),
.fabrikList .btn:not([class*="btn-"]):not(.addbutton):not(.addRecord) {
    --bs-btn-color: var(--bs-body-color);
    --bs-btn-bg: var(--bs-body-bg);
    --bs-btn-border-color: var(--bs-border-color);
    --bs-btn-hover-color: var(--bs-primary);
    --bs-btn-hover-bg: var(--fv-primary-soft);
    --bs-btn-hover-border-color: var(--bs-primary);
    --bs-btn-active-color: var(--bs-primary);
    --bs-btn-active-bg: var(--fv-primary-soft);
    --bs-btn-active-border-color: var(--bs-primary);
    --bs-btn-focus-shadow-rgb: 0, 0, 0;
}

/* Fabrik uses .pull-left / .pull-right (Bootstrap 2 float helpers) */
.com_fabrik .pull-left  { float: left; }
.com_fabrik .pull-right { float: right; }

[dir="rtl"] .com_fabrik .pull-left  { float: right; }
[dir="rtl"] .com_fabrik .pull-right { float: left; }

/* Legacy "row-fluid" wrapper used by the form details toolbar */
.com_fabrik .row-fluid {
    display: flex;
    flex-wrap: wrap;
    gap: .5rem;
    width: 100%;
}

.com_fabrik .row-fluid > [class*="col-"] {
    width: auto;
    flex: 1 1 auto;
}

/* ==========================================================================
   04. COMPONENT SHELL (card)
   --------------------------------------------------------------------------
   Reference: AdminLTE 4 "tables/data.html" and "tables/simple.html".

   AdminLTE wraps a table page in:
       <div class="card">
         <div class="card-header"><h3 class="card-title">…</h3>
           <div class="card-tools">…buttons/search…</div></div>
         <div class="card-body p-0"><table class="table">…</table></div>
         <div class="card-footer clearfix">…pagination…</div>
       </div>

   Fabrik emits its own structure, which maps onto that almost one-to-one:
       <form class="fabrikForm">
         <div class="container-fluid text-bg-light">   ← toolbar + ricerca
         <div class="fabrikDataContainer">              ← la tabella
         <tfoot><div class="fabrikNav">                 ← paginazione

   Rather than override Fabrik's markup, these wrappers are restyled so the
   rendered result is the AdminLTE card. Nothing in Fabrik is modified and the
   markup stays semantic.
   ========================================================================== */

/* The form is the card */
.com_fabrik form.fabrikForm,
.com_fabrik .fabrikForm.fabrikDetails {
    display: block;
    background: var(--fv-surface);
    border: 1px solid var(--fv-border-soft);
    border-radius: var(--fv-radius);
    box-shadow: var(--fv-shadow);
    margin-bottom: 1rem;
    overflow: hidden;
}

/* Remove the double padding added by the AdminLTE content wrapper */
.com_fabrik .app-content {
    padding-bottom: 1rem;
}

/* Page heading: App-content-header already shows the page title in AdminLTE,
   so Fabrik's own <h1> would duplicate it. Kept in the DOM (accessibility and
   SEO) but visually reduced to the card title when it is the only heading. */
.com_fabrik .app-content > .page-header {
    border: 0;
    margin: 0 0 .5rem;
    padding: 0;
}

.com_fabrik .app-content > .page-header h1 {
    font-size: 1.25rem;
    font-weight: 600;
    margin: 0;
    color: var(--bs-emphasis-color);
}

/* Intro text: AdminLTE has no equivalent, so it is styled as a subtle note
   rather than a Bootstrap blockquote (which is visually heavy here). */
.com_fabrik .app-content > blockquote {
    border-left: 3px solid var(--fv-primary);
    background: var(--fv-primary-softer);
    margin: 0 0 .75rem;
    padding: .5rem .75rem;
    font-size: .8125rem;
    color: var(--bs-secondary-color);
    border-radius: 0 var(--fv-radius-sm) var(--fv-radius-sm) 0;
}

.com_fabrik .app-content > blockquote p:last-child {
    margin-bottom: 0;
}

/* Page class suffix / table picker */
.com_fabrik .tablePicker {
    text-align: right;
    font-size: .75rem;
    color: var(--bs-secondary-color);
    margin-bottom: .25rem;
}

/* ==========================================================================
   05. LIST TOOLBAR -> AdminLTE .card-header
   --------------------------------------------------------------------------
   Riferimento: dist/tables/data.html (la pagina "Data Tables" di AdminLTE)

     <div class="card">
       <div class="card-header">
         <h3 class="card-title">Users</h3>
         <div class="card-tools">
           <div class="input-group input-group-sm" style="width:16rem">
             <span class="input-group-text"><i class="bi bi-search"></i></span>
             <input type="search" class="form-control" placeholder="Filter rows…">
       <div class="card-body">
         <div class="d-flex gap-2 mb-3">
           <button class="btn btn-sm btn-outline-secondary">
             <i class="bi bi-filetype-csv me-1"></i> Export CSV
         …tabella…
       <div class="card-footer text-secondary small">…

   Fabrik emette:
     <div class="container-fluid text-bg-light">
       <div class="row justify-content-between pb-3 pe-3">
         <div class="col-auto fabrikButtonsContainer"> …bottoni…
         <div class="col-auto fabrikSearchAll"> …ricerca + Vai

   Qui il container-fluid viene reso come card-header: pulsanti a sinistra
   (come le bulk action di DataTables) e ricerca a destra dentro .card-tools.
   Le classi di utilità di Fabrik (pb-3 pe-3) vanno neutralizzate, altrimenti
   aggiungono padding indesiderato all'header.
   ========================================================================== */

.com_fabrik form.fabrikForm > .container-fluid {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
    background: var(--fv-surface) !important;
    border-bottom: 1px solid var(--fv-border-soft);
    border-radius: 0;
    padding: .625rem 1rem !important;
    margin: 0;
}

/* La riga interna è un flex, non una griglia: le gutter di Bootstrap
   aggiungerebbero margini negativi dentro un header di card. */
.com_fabrik form.fabrikForm > .container-fluid > .row {
    flex: 1 1 100%;
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    row-gap: .5rem;
    flex-wrap: wrap;
    margin: 0 !important;
    padding: 0 !important;
    --bs-gutter-x: 0;
    --bs-gutter-y: 0;
}

.com_fabrik .fabrikButtonsContainer {
    padding: 0 !important;
    flex: 0 1 auto;
}

.com_fabrik .fabrikButtonsContainer > .row {
    align-items: center;
    gap: .375rem;
    --bs-gutter-x: .5rem;
    --bs-gutter-y: .375rem;
    margin: 0;
}

.com_fabrik .fabrikButtonsContainer .col {
    padding: 0 !important;
}

/* Compact toolbar buttons, equivalenti a .btn-sm di AdminLTE. */
.com_fabrik .fabrikButtonsContainer .btn {
    --bs-btn-padding-y: .3125rem;
    --bs-btn-padding-x: .65rem;
    --bs-btn-font-size: .8125rem;
    --bs-btn-border-radius: var(--fv-radius-sm);
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    white-space: nowrap;
    font-weight: 500;
    line-height: 1.3;
}

.com_fabrik .fabrikButtonsContainer .btn > span[data-isicon],
.com_fabrik .fabrikButtonsContainer .btn > span.fa {
    font-size: .875rem;
}

/* Le azioni secondarie seguono DataTables/AdminLTE: contorno grigio,
   non piene, per non competere con l'azione principale. */
.com_fabrik .fabrikButtonsContainer .btn:not(.addbutton):not(.addRecord):not([class*="btn-"]) {
    --bs-btn-color: var(--bs-secondary-color);
    --bs-btn-bg: transparent;
    --bs-btn-border-color: var(--fv-border);
    --bs-btn-hover-color: var(--bs-body-color);
    --bs-btn-hover-bg: var(--bs-secondary-bg);
    --bs-btn-hover-border-color: var(--bs-border-color);
    --bs-btn-active-color: var(--bs-body-color);
    --bs-btn-active-bg: var(--bs-secondary-bg);
    --bs-btn-active-border-color: var(--bs-border-color);
    --bs-btn-focus-shadow-rgb: 0, 0, 0;
}

/* "Aggiungi" — the primary call to action of every list.
   The container-qualified selectors are here so the rule wins on specificity
   alone, regardless of where it sits in the cascade. */
.com_fabrik .addbutton,
.com_fabrik a.addRecord,
.com_fabrik .fabrikButtonsContainer .addbutton,
.com_fabrik .fabrikButtonsContainer a.addRecord,
.com_fabrik .fabrikButtonsContainer .btn.addRecord {
    --bs-btn-color: #fff;
    --bs-btn-bg: var(--fv-primary);
    --bs-btn-border-color: var(--fv-primary);
    --bs-btn-hover-color: #fff;
    --bs-btn-hover-bg: color-mix(in srgb, var(--fv-primary) 82%, #000);
    --bs-btn-hover-border-color: color-mix(in srgb, var(--fv-primary) 82%, #000);
    --bs-btn-active-color: #fff;
    --bs-btn-active-bg: color-mix(in srgb, var(--fv-primary) 68%, #000);
    --bs-btn-active-border-color: color-mix(in srgb, var(--fv-primary) 68%, #000);
    font-weight: 600;
    box-shadow: 0 1px 2px rgba(var(--fv-primary-rgb), .35);
}

/* Group-by dropdown.
   Fabrik renders it as <li class="dropdown"> inside the toolbar row.
   `display: contents` was wrong here: the <li> stops generating a box, so
   Bootstrap's Popper has no element to measure and the menu never opens in
   the right place ("Raggruppato per" appeared to do nothing). It needs to be
   a real, measurable box. */
.com_fabrik .fabrikButtonsContainer li.dropdown {
    list-style: none;
    margin: 0;
    padding: 0;
    display: block;
    position: relative;
}

.com_fabrik .fabrikButtonsContainer .dropdown-menu {
    font-size: .8125rem;
    min-width: 14rem;
    max-height: 24rem;
    overflow-y: auto;
    box-shadow: var(--bs-dropdown-box-shadow, 0 6px 18px rgba(0, 0, 0, .12));
}

.com_fabrik .fabrikButtonsContainer .dropdown-menu > li {
    list-style: none;
    margin: 0;
}

/* Fabrik puts class="nav-link" on dropdown entries via its layout */
.com_fabrik .fabrikButtonsContainer .dropdown-menu .nav-link {
    display: block;
    padding: .3rem .85rem;
    color: var(--bs-body-color);
    border-radius: 0;
    white-space: normal;
}

.com_fabrik .fabrikButtonsContainer .dropdown-menu .nav-link:hover,
.com_fabrik .fabrikButtonsContainer .dropdown-menu .nav-link:focus {
    background: var(--fv-primary-soft);
    color: var(--fv-primary);
}

/* Clear / toggle filter: highlight when filters are actually active */
.com_fabrik .clearFilters.hasFilters,
.com_fabrik .fabrikFilterContainer .hasFilters {
    color: var(--bs-danger) !important;
    border-color: var(--bs-danger) !important;
}

.com_fabrik .toggleFilters[aria-expanded="true"] {
    --bs-btn-color: var(--fv-primary);
    --bs-btn-bg: var(--fv-primary-soft);
    --bs-btn-border-color: var(--fv-primary);
}

/* CSV / PDF / RSS */
.com_fabrik .pdfButton,
.com_fabrik .csvExportButton,
.com_fabrik .feedButton {
    gap: .35rem;
}

.com_fabrik .doempty {
    --bs-btn-hover-color: var(--bs-danger);
    --bs-btn-hover-border-color: var(--bs-danger);
}

/* Search-all -> AdminLTE .input-group.input-group-sm within .card-tools
   -----------------------------------------------------------------------
   AdminLTE:
     <div class="card-tools">
       <div class="input-group input-group-sm" style="width:16rem">
         <span class="input-group-text"><i class="bi bi-search"></i></span>
         <input type="search" class="form-control" placeholder="Filter rows…">

   Fabrik mette il campo dentro col-auto allineati a destra: qui si ricrea la
   stessa resa (gruppo compatto, lente a sinistra, pulsante accodato). */
.com_fabrik .fabrikSearchAll {
    display: flex;
    justify-content: flex-end;
    padding: 0 !important;
    flex: 1 1 auto;
}

.com_fabrik .fabrikSearchAll > .row,
.com_fabrik .fabrikSearchAll > [class*="col-"] {
    display: flex !important;
    align-items: stretch;
    gap: 0 !important;
    width: auto;
    flex-wrap: nowrap;
    margin: 0;
}

/* Gruppo di ricerca creato da js/fabrik.js.
   Deve essere un flex a piena altezza: la lente e' un ::before che si affianca
   all'input come faceva .input-group-text in AdminLTE. Con align-items:center
   restava invece un'icona di 15px appesa a meta' altezza. */
.com_fabrik .fv-search-wrap {
    display: flex;
    align-items: stretch;
    position: relative;
    width: 16rem;
    max-width: 45vw;
    margin: 0;
    min-height: 0;
}

/* Lente a sinistra, come .input-group-text di AdminLTE */
.com_fabrik .fv-search-wrap::before {
    content: "\f52a";                 /* bi-search */
    font-family: "bootstrap-icons" !important;
    font-size: .8125rem;
    line-height: 1;
    display: flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 2.25rem;
    align-self: stretch;
    order: -1;
    margin: 0;
    padding: 0;
    color: var(--bs-secondary-color);
    background: var(--bs-tertiary-bg);
    border: 1px solid var(--bs-border-color);
    border-right: 0;
    border-radius: var(--fv-radius-sm) 0 0 var(--fv-radius-sm);
}

/* custom.css gave .fabrik_filter a full box — it is really the search input.
   In "search all" the input and the "Vai" button form a single joined control.
   The button is an optional sibling (Fabrik omits it when filter_action is
   "onchange"), so the shared border is only removed when it is actually there —
   using :has() rather than assuming the markup. */
.com_fabrik input.fabrik_filter,
.com_fabrik .fabrik_filter.search-query {
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-radius: var(--fv-radius-sm);
    padding: .3125rem .6rem;
    margin: 0;
    font-size: .8125rem;
    width: 16rem;
    max-width: 45vw;
    min-height: 0;
    transition: border-color .15s ease-in-out, box-shadow .15s ease-in-out;
}

/* Con la lente a sinistra il campo non arrotonda quel lato */
.com_fabrik .fv-search-wrap input.fabrik_filter {
    flex: 1 1 auto;
    width: auto;
    min-width: 0;
    max-width: none;
    padding-right: .6rem;
    border-left: 0;
    border-radius: 0 var(--fv-radius-sm) var(--fv-radius-sm) 0;
}

/* spazio per la X, solo quando c'e' qualcosa da cancellare */
.com_fabrik .fv-search-wrap.fv-has-value input.fabrik_filter {
    padding-right: 1.9rem;
}

.com_fabrik .fv-search-wrap:has(+ .fabrik_filter_submit) .fabrik_filter,
.com_fabrik .fabrikSearchAll:has(.fabrik_filter_submit) input.fabrik_filter {
    border-right: 0;
    border-radius: 0;
}

.com_fabrik input.fabrik_filter:focus {
    border-color: color-mix(in srgb, var(--fv-primary) 85%, #fff);
    box-shadow: 0 0 0 .2rem rgba(var(--fv-primary-rgb), .18);
    outline: 0;
    z-index: 2;
}

.com_fabrik input.fabrik_filter_submit {
    border-radius: 0 var(--fv-radius-sm) var(--fv-radius-sm) 0 !important;
    --bs-btn-color: #fff;
    --bs-btn-bg: var(--fv-primary);
    --bs-btn-border-color: var(--fv-primary);
    --bs-btn-hover-color: #fff;
    --bs-btn-hover-bg: color-mix(in srgb, var(--fv-primary) 82%, #000);
    --bs-btn-hover-border-color: color-mix(in srgb, var(--fv-primary) 82%, #000);
    --bs-btn-padding-y: .3rem;
    --bs-btn-padding-x: .8rem;
    --bs-btn-font-size: .8125rem;
    font-weight: 600;
    margin: 0;
}

/* ==========================================================================
   06. LIST FILTERS PANEL
   ========================================================================== */

.com_fabrik .fabrikFilterContainer {
    background: var(--fv-surface-2);
    border: 1px solid var(--fv-border-soft);
    border-radius: var(--fv-radius-sm);
    padding: .75rem .85rem !important;
    margin: 0 0 .5rem !important;
}

.com_fabrik .fabrikFilterContainer .fabrik___heading {
    font-size: .6875rem;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .04em;
    color: var(--bs-secondary-color);
}

.com_fabrik .fabrikFilterContainer label {
    font-size: .75rem;
    font-weight: 600;
    color: var(--bs-secondary-color);
    margin-bottom: .15rem;
    display: block;
}

.com_fabrik .fabrikFilterContainer .row[data-filter-row] {
    margin-top: .5rem !important;
    --bs-gutter-x: .5rem;
}

.com_fabrik .fabrikFilterContainer .form-control,
.com_fabrik .fabrikFilterContainer .form-select {
    font-size: .8125rem;
    padding: .3rem .55rem;
    min-height: 0;
}

.com_fabrik .fabrikFilterContainer .d-flex.justify-content-end {
    margin-top: .65rem;
    padding-top: .6rem;
    border-top: 1px dashed var(--fv-border);
}

/* In-table filter row (filterMode 3/4) */
.com_fabrik tr.fabrikFilterContainer,
.com_fabrik tr.fabrikFilterContainer > th {
    background: var(--fv-surface-2) !important;
    padding: .35rem .4rem;
    vertical-align: middle;
}

.com_fabrik tr.fabrikFilterContainer .listfilter {
    text-align: left;
}

.com_fabrik tr.fabrikFilterContainer .form-control,
.com_fabrik tr.fabrikFilterContainer .form-select {
    font-size: .75rem;
    padding: .2rem .4rem;
    min-height: 0;
    height: auto;
}

.com_fabrik .notempty .form-control,
.com_fabrik .notempty .form-select {
    border-color: var(--bs-warning-border-subtle, var(--bs-warning));
    background-color: var(--bs-warning-bg-subtle, transparent);
}

/* ==========================================================================
   07. LIST TABLE -> AdminLTE .card-body.p-0
   --------------------------------------------------------------------------
   In AdminLTE la tabella sta dentro <div class="card-body p-0">, cosi' le
   righe arrivano ai bordi della card e l'header/footer restano separati.
   Fabrik usa .fabrikDataContainer: stesso ruolo, stesso padding zero.
   ========================================================================== */

.com_fabrik .fabrikDataContainer {
    clear: both;
    max-width: 100%;
    padding: 0;
    background: var(--fv-surface);
    border-radius: 0;
}

.com_fabrik .fabrikDataContainer.table-responsive {
    overflow-x: auto;
    overflow-y: hidden;
    scrollbar-width: thin;
}

/* Scrollbar orizzontale discreta (AdminLTE non la mostra: la teniamo
   sottile e tenue per le liste molto larghe). */
.com_fabrik .fabrikDataContainer::-webkit-scrollbar {
    height: 6px;
}

.com_fabrik .fabrikDataContainer::-webkit-scrollbar-track {
    background: transparent;
}

.com_fabrik .fabrikDataContainer::-webkit-scrollbar-thumb {
    background: var(--fv-border);
    border-radius: 3px;
    border: 0;
}

.com_fabrik .fabrikDataContainer::-webkit-scrollbar-thumb:hover {
    background: var(--bs-body-color);
}

/* -- Table base ----------------------------------------------------------- */
.com_fabrik .fabrikDataContainer > table.table {
    margin: 0;
    width: 100%;
    font-size: var(--fv-font);
    border-collapse: separate;
    border-spacing: 0;
    --bs-table-bg: transparent;
    --bs-table-striped-bg: var(--fv-primary-softer);
    --bs-table-hover-bg: var(--fv-primary-soft);
}

/* -- Headings ------------------------------------------------------------- */
.com_fabrik .fabrikDataContainer > table.table > thead > tr.fabrik___heading > th,
.com_fabrik .fabrikDataContainer > table.table > thead > tr > th.heading {
    background: var(--fv-surface-2);
    color: var(--bs-secondary-color);
    font-size: var(--fv-head-font);
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .04em;
    white-space: nowrap;
    vertical-align: middle;
    padding: .55rem var(--fv-cell-px);
    border-bottom: 1px solid var(--fv-border);
    border-top: 0;
}

/* Sortable headings */
.com_fabrik th.fabrik_ordercell > a,
.com_fabrik th.fabrik_ordercell > span > a {
    color: inherit;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: .3rem;
}

.com_fabrik th.fabrik_ordercell > a:hover,
.com_fabrik th.fabrik_ordercell > span > a:hover {
    color: var(--fv-primary);
}

/* Colonna ordinata: e' l'UNICA colorata (accento + peso). Prima la regola
   colorava ogni colonna con "_order" in classe, cioe' TUTTE le ordinabili:
   cosi' l'ordinamento attivo non si distingueva piu'. */
.com_fabrik th.fabrik_ordercell a.fabrikorder-asc,
.com_fabrik th.fabrik_ordercell a.fabrikorder-desc,
.com_fabrik th.heading > a.active {
    color: var(--fv-primary);
    font-weight: 700;
}

/* -- Indicatore di ordinamento ---------------------------------------------
   Lo span legacy ("fa icon-sort") era quasi invisibile. Ora: freccia tenue
   sulle colonne ordinabili, piena e colorata quando la colonna e' ordinata
   (Fabrik scambia la classe in fa-sort-down / fa-sort-up). */
.com_fabrik th.fabrik_ordercell a.fabrikorder > .fa {
    font-size: .8em;
    opacity: .3;
    transition: opacity .15s ease, color .15s ease;
}

.com_fabrik th.fabrik_ordercell a.fabrikorder:hover > .fa {
    opacity: .85;
}

.com_fabrik th.fabrik_ordercell a.fabrikorder-asc > .fa,
.com_fabrik th.fabrik_ordercell a.fabrikorder-desc > .fa {
    opacity: 1;
    color: var(--fv-primary);
}

.com_fabrik th.heading img {
    vertical-align: middle;
}

/* Select-all and actions headings stay narrow */
.com_fabrik th.fabrik_select,
.com_fabrik th.fabrik_actions {
    width: 1%;
    white-space: nowrap;
    text-align: center;
}

/* -- Body cells ----------------------------------------------------------- */
.com_fabrik .fabrikDataContainer > table.table > tbody > tr > td {
    padding: var(--fv-cell-py) var(--fv-cell-px);
    vertical-align: middle;
    border-color: var(--fv-border-soft);
    border-top: 0;
    border-bottom: 1px solid var(--fv-border-soft);
}

/* Numeric / date cells get tabular figures (class added by fabrik.js) */
.com_fabrik td.fv-num {
    text-align: right;
    font-variant-numeric: tabular-nums;
}

.com_fabrik td.fabrik_element {
    color: var(--bs-body-color);
}

/* Empty cells stay invisible instead of drawing a stripe */
.com_fabrik .fabrikDataContainer > table.table > tbody > tr > td:empty::after {
    content: "\00a0";
}

/* Row hover feedback */
.com_fabrik .fabrikDataContainer > table.table > tbody > tr.fabrik_row {
    transition: background-color .12s ease-in-out;
}

.com_fabrik .fabrikDataContainer > table.table > tbody > tr.fabrik_row:hover > td {
    background-color: var(--fv-primary-soft);
}

/* Row link cursor */
.com_fabrik tr.fabrik_row a.fabrik__rowlink {
    cursor: pointer;
}

/* -- Checkbox column ------------------------------------------------------ */
.com_fabrik .fabrik_select {
    text-align: center;
}

.com_fabrik td.fabrik_select input[type="checkbox"],
.com_fabrik th.fabrik_select input[type="checkbox"],
.com_fabrik .fabrik_select input[type="radio"] {
    width: 1rem;
    height: 1rem;
    margin: 0;
    vertical-align: middle;
    cursor: pointer;
    border-color: var(--bs-border-color);
}

.com_fabrik .fabrik_select input[type="checkbox"]:checked,
.com_fabrik .fabrik_select input[type="radio"]:checked {
    background-color: var(--fv-primary);
    border-color: var(--fv-primary);
}

/* -- Grouped lists -------------------------------------------------------- */
.com_fabrik tr.fabrik_groupheading > td,
.com_fabrik tr.fabrik_groupheading.info > td {
    background: var(--fv-primary-soft) !important;
    color: var(--bs-emphasis-color);
    font-weight: 700;
    font-size: .75rem;
    text-transform: uppercase;
    letter-spacing: .03em;
    padding: .45rem var(--fv-cell-px);
    border-bottom: 1px solid var(--fv-border);
}

.com_fabrik tr.groupDataMsg > td.emptyDataMessage {
    padding: 0;
    border: 0;
}

/* -- Totals / calculations footer ---------------------------------------- */
.com_fabrik tr.fabrik_calculations > td {
    background: var(--fv-surface-2) !important;
    font-weight: 700;
    border-top: 2px solid var(--fv-border) !important;
    padding: .5rem var(--fv-cell-px);
    font-variant-numeric: tabular-nums;
}

/* -- Empty data message -------------------------------------------------- */
.com_fabrik .emptyDataMessage {
    background: transparent;
    color: var(--bs-secondary-color);
    font-size: .8125rem;
    padding: 1.25rem .75rem;
    text-align: center;
}

.com_fabrik td.emptyDataMessage[style*="display: none"],
.com_fabrik .emptyDataMessage[style*="display:none"] {
    display: none !important;
}

/* -- Repeat / joined data inside cells ----------------------------------- */
.com_fabrik ul.fabrikRepeatData {
    list-style: none;
    margin: 0;
    padding: 0;
}

.com_fabrik .fabrikRepeatData > li {
    white-space: nowrap;
    max-width: 22rem;
    overflow: hidden;
    text-overflow: ellipsis;
    display: flex;
    align-items: center;
    gap: .25rem;
}

.com_fabrik .fabrikRepeatData > li i,
.com_fabrik .fabrikRepeatData > li span[data-isicon] {
    cursor: pointer;
    color: var(--bs-secondary-color);
}

.com_fabrik .fabrikRepeatData > li i:hover,
.com_fabrik .fabrikRepeatData > li span[data-isicon]:hover {
    color: var(--fv-primary);
}

.com_fabrik td.repeat-merge div,
.com_fabrik td.repeat-merge i,
.com_fabrik td.repeat-reduce div,
.com_fabrik td.repeat-reduce i {
    padding: .2rem !important;
}

/* ==========================================================================
   08. ROW ACTIONS
   ========================================================================== */

.com_fabrik td.fabrik_actions {
    white-space: nowrap;
    text-align: center;
}

.com_fabrik td.fabrik_actions .btn-group {
    display: inline-flex;
    gap: 2px;
    vertical-align: middle;
}

.com_fabrik td.fabrik_actions .btn,
.com_fabrik th.fabrik_actions .btn,
.com_fabrik tr.fabrik___heading td.fabrik_actions .btn,
.com_fabrik tr.fabrik___heading th.fabrik_actions .btn,
.com_fabrik td.fabrik_actions .listplugin,
.com_fabrik th.fabrik_actions .listplugin {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    width: var(--fv-action-size);
    height: var(--fv-action-size);
    padding: 0 !important;
    border-radius: var(--fv-radius-sm) !important;
    font-size: .8125rem;
    line-height: 1;
    margin: 0;
    text-decoration: none;
    border: 1px solid transparent;
    background: transparent;
    color: var(--bs-secondary-color);
    transition: background-color .12s ease, color .12s ease, border-color .12s ease;
    position: relative;
}

.com_fabrik td.fabrik_actions .btn:hover,
.com_fabrik th.fabrik_actions .btn:hover {
    background: var(--bs-secondary-bg);
    color: var(--bs-body-color);
    border-color: var(--fv-border);
}

/* "Aggiorna colonna" (es. FIRMATO): azione di approvazione -> verde */
.com_fabrik td.fabrik_actions .btn[class*="update_col"]:hover,
.com_fabrik th.fabrik_actions .btn[class*="update_col"]:hover {
    color: var(--bs-success);
    border-color: var(--bs-success);
    background: var(--bs-success-bg-subtle);
}

.com_fabrik td.fabrik_actions a.fabrik_view:hover {
    color: var(--bs-info, #0dcaf0);
    border-color: var(--bs-info, #0dcaf0);
    background: color-mix(in srgb, var(--bs-info, #0dcaf0) 12%, transparent);
}

.com_fabrik td.fabrik_actions a.fabrik_edit:hover {
    color: var(--fv-primary);
    border-color: var(--fv-primary);
    background: var(--fv-primary-soft);
}

.com_fabrik td.fabrik_actions a.delete:hover,
.com_fabrik td.fabrik_actions .btn-danger:hover {
    color: var(--bs-danger);
    border-color: var(--bs-danger);
    background: var(--bs-danger-bg-subtle);
}

/* Font size for the injected pseudo icons */
.com_fabrik td.fabrik_actions .btn::before,
.com_fabrik th.fabrik_actions .btn::before {
    font-size: .875rem;
}

/* A row action that carries a text label (custom buttons) grows back */
.com_fabrik td.fabrik_actions .btn.fv-labelled {
    width: auto;
    padding: 0 .5rem !important;
    gap: .3rem;
    font-size: .75rem;
}

/* ==========================================================================
   09. PAGINATION / LIST FOOTER -> AdminLTE .card-footer
   --------------------------------------------------------------------------
   AdminLTE (tables/simple.html) mette la paginazione in .card-footer:
       <div class="card-footer clearfix">
         <ul class="pagination pagination-sm float-end">…

   e in data.html il footer e' .card-footer.text-secondary.small.
   Qui il fabrikNav diventa quel footer: sfondo tenue, testo piccolo,
   "Visualizza N" e contatore a sinistra, paginazione a destra.
   ========================================================================== */

.com_fabrik tfoot tr.fabrik___heading > td {
    padding: 0;
    border: 0;
    background: transparent !important;
}

.com_fabrik .fabrikNav {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: .5rem 1rem;
    background: var(--fv-surface);
    border-top: 1px solid var(--fv-border-soft);
    border-radius: 0;
    padding: .625rem 1rem;
    font-size: .8125rem;
    color: var(--bs-secondary-color);
}

/* .list-footer arriva anche come .container: azzero la griglia Bootstrap e
   uso il flex del footer per tenere tutto su una riga. */
.com_fabrik .fabrikNav .list-footer {
    display: flex;
    align-items: center;
    justify-content: space-between;
    flex-wrap: wrap;
    gap: .5rem 1rem;
    width: 100%;
    max-width: 100%;
    margin: 0;
    padding: 0;
}

/* la paginazione e' fratello di .limit: la spingo a destra */
.com_fabrik .fabrikNav .list-footer > nav {
    margin-left: auto;
}

/* "Visualizza #"  + page counter on one row */
.com_fabrik .fabrikNav .limit.row {
    display: flex;
    align-items: center;
    gap: .5rem;
    margin: 0;
    padding: 0 !important;
    --bs-gutter-x: 0;
    flex: 0 1 auto;
}

.com_fabrik .fabrikNav .limit.row > div {
    width: auto !important;
    max-width: none !important;
    flex: 0 0 auto !important;
    padding: 0 !important;
    margin: 0 !important;
    text-align: left !important;
}

.com_fabrik .fabrikNav .limit.row > div:last-child {
    margin-left: .75rem !important;
    text-align: left !important;
}

.com_fabrik .fabrikNav .limit p,
.com_fabrik .fabrikNav .limit label {
    margin: 0 !important;
    padding: 0 !important;
    font-size: .8125rem;
    line-height: 1.5;
    color: var(--bs-secondary-color);
    white-space: nowrap;
}

.com_fabrik .fabrikNav .limit input,
.com_fabrik .fabrikNav .limit select,
.com_fabrik .fabrikNav .form-select {
    font-size: .8125rem;
    padding: .25rem 1.75rem .25rem .5rem;
    width: auto !important;
    flex: 0 0 auto !important;
    min-width: 4.5rem;
    min-height: 0;
    height: auto;
    display: inline-block;
}

/* Pagination links.
   AdminLTE usa .pagination.pagination-sm accodata a destra nel card-footer.
   Qui si replicano quelle misure: elementi piccoli, raggruppati, senza
   spaziature esterne fra i page-item. */
.com_fabrik .fabrikNav .pagination {
    --bs-pagination-padding-y: .25rem;
    --bs-pagination-padding-x: .5rem;
    --bs-pagination-font-size: .8125rem;
    --bs-pagination-border-radius: var(--fv-radius-sm);
    --bs-pagination-bg: var(--fv-surface);
    --bs-pagination-border-color: var(--fv-border);
    flex-wrap: wrap;
    gap: 0;
    margin: 0 0 0 auto;
    justify-content: flex-end;
}

.com_fabrik .fabrikNav .page-item + .page-item .page-link {
    margin-left: -1px;
}

.com_fabrik .fabrikNav .page-link {
    border-radius: 0;
    border: 1px solid var(--fv-border);
    line-height: 1.4;
}

.com_fabrik .fabrikNav .page-item:first-child .page-link {
    border-radius: var(--fv-radius-sm) 0 0 var(--fv-radius-sm);
}

.com_fabrik .fabrikNav .page-item:last-child .page-link {
    border-radius: 0 var(--fv-radius-sm) var(--fv-radius-sm) 0;
}

.com_fabrik .fabrikNav .page-item.active .page-link {
    background: var(--fv-primary);
    border-color: var(--fv-primary);
    color: #fff;
    font-weight: 600;
}

.com_fabrik .fabrikNav .page-item.disabled .page-link {
    color: var(--bs-secondary-color);
    background: var(--fv-surface);
    border-color: var(--fv-border);
}

/* -- Inizia / Prev / Successivo / Fine: frecce invece delle parole --------
   Il testo viene nascosto (font-size: 0) e sostituito da un chevron;
   il title del link resta come tooltip. I NUMERI delle pagine non sono
   toccati: nessun :first-child qui (su liste con una sola pagina il primo
   figlio e' un numero, e verrebbe nascosto). */
.com_fabrik .fabrikNav .page-link[rel="prev"],
.com_fabrik .fabrikNav .page-link[rel="next"],
.com_fabrik .fabrikNav .page-link[title="Inizia"],
.com_fabrik .fabrikNav .page-link[title="Fine"] {
    font-size: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    min-width: 1.9rem;
}

.com_fabrik .fabrikNav .page-link[rel="prev"]::before,
.com_fabrik .fabrikNav .page-link[rel="next"]::before,
.com_fabrik .fabrikNav .page-link[title="Inizia"]::before,
.com_fabrik .fabrikNav .page-link[title="Fine"]::before {
    font-family: "bootstrap-icons" !important;
    font-style: normal;
    font-weight: normal;
    font-size: .8125rem;
    line-height: 1;
}

.com_fabrik .fabrikNav .page-link[rel="prev"]::before     { content: "\f284"; }  /* bi-chevron-left        */
.com_fabrik .fabrikNav .page-link[rel="next"]::before     { content: "\f285"; }  /* bi-chevron-right       */
.com_fabrik .fabrikNav .page-link[title="Inizia"]::before { content: "\f27f"; }  /* bi-chevron-double-left */
.com_fabrik .fabrikNav .page-link[title="Fine"]::before   { content: "\f280"; }  /* bi-chevron-double-right */

/* -- Simple list navigation (non-paginated lists) ------------------------- */
.com_fabrik .fabrikNav a:not(.page-link),
.com_fabrik .fabrikNav .nav {
    font-size: .75rem;
}

/* ==========================================================================
   10. FORM & DETAILS
   ========================================================================== */

/* -- Group = card --------------------------------------------------------- */
.com_fabrik fieldset.fabrikGroup {
    border: 1px solid var(--fv-border-soft);
    border-radius: var(--fv-radius);
    background: var(--fv-surface);
    padding: 0 .85rem .85rem;
    margin: 0 0 .85rem;
    min-width: 0;
}

.com_fabrik .fabrikForm.fabrikDetails fieldset.fabrikGroup {
    margin-bottom: .75rem;
}

/* Legend as a card header.
   AdminLTE (forms/elements.html) usa:
       <div class="card card-primary card-outline">
         <div class="card-header"><div class="card-title">…</div></div>
   Qui la card-outline e' resa dal bordo sinistro primario sul fieldset e
   dall'header del legend, senza alterare il markup di Fabrik. */
.com_fabrik fieldset.fabrikGroup > legend,
.com_fabrik fieldset.fabrikGroup > .legend {
    display: block;
    width: calc(100% + 1.7rem);
    margin: 0 -.85rem .85rem;
    padding: .6rem .85rem;
    background: var(--fv-surface-2);
    border-bottom: 1px solid var(--fv-border-soft);
    border-radius: 0;
    font-size: .875rem;
    font-weight: 600;
    text-transform: none;
    letter-spacing: 0;
    color: var(--bs-emphasis-color);
    float: none;
    line-height: 1.3;
}

.com_fabrik fieldset.fabrikGroup > legend:empty {
    display: none;
}

.com_fabrik .groupintro,
.com_fabrik .groupoutro {
    font-size: .8125rem;
    color: var(--bs-secondary-color);
    margin-bottom: .6rem;
}

/* -- Element row ----------------------------------------------------------
   AdminLTE (forms/elements.html) impila label e campo:
       <div class="mb-3">
         <label class="form-label">Email address</label>
         <input class="form-control">
       </div>
   Quindi il row di Fabrik diventa una colonna: label sopra, campo sotto,
   larghezza piena. E' il layout dei form AdminLTE, non quello "label a lato"
   dei gestionali classici.                                                */
.com_fabrik .fabrikElementContainer {
    margin-bottom: 0;
    padding: 0;
}

.com_fabrik .fabrikElementContainer > .row {
    display: block;
    margin: 0;
}

/* -- Griglia del gruppo ---------------------------------------------------
   AdminLTE compone i form con la griglia Bootstrap (row + col-md-6): qui il
   fieldset diventa quella griglia, cosi' i campi corti stanno due per riga
   invece di allungarsi per tutta la card. Sotto i 992px resta a una colonna.
   I campi che per natura vogliono tutta la larghezza (textarea, editor WYSIWYG,
   gruppi ripetuti, iframe) vengono riportati a piena riga con :has().          */
@media (min-width: 992px) {
    .com_fabrik form.fabrikForm fieldset.fabrikGroup {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        column-gap: 1.5rem;
        align-items: start;
    }

    .com_fabrik form.fabrikForm fieldset.fabrikGroup > legend,
    .com_fabrik form.fabrikForm fieldset.fabrikGroup > .fabrikSubGroup,
    .com_fabrik form.fabrikForm fieldset.fabrikGroup > .groupintro,
    .com_fabrik form.fabrikForm fieldset.fabrikGroup > .groupoutro,
    .com_fabrik form.fabrikForm fieldset.fabrikGroup > .fabrikElementContainer:has(textarea),
    .com_fabrik form.fabrikForm fieldset.fabrikGroup > .fabrikElementContainer:has(iframe),
    .com_fabrik form.fabrikForm fieldset.fabrikGroup > .fabrikElementContainer:has(.tox-tinymce),
    .com_fabrik form.fabrikForm fieldset.fabrikGroup > .fabrikElementContainer:has(.mce-tinymce) {
        grid-column: 1 / -1;
    }
}

/* -- Labels --------------------------------------------------------------- */
.com_fabrik label.fabrikLabel,
.com_fabrik .fabrikLabel,
.com_fabrik .control-label {
    display: block;
    width: auto;
    max-width: 100%;
    padding: 0;
    font-size: .8125rem;
    font-weight: 500;
    line-height: 1.35;
    color: var(--bs-body-color);
    text-align: left;
    margin-bottom: .25rem;
}

.com_fabrik .fabrikLabel .required,
.com_fabrik .fabrikLabel.fabrikRequired:after,
.com_fabrik .required {
    color: var(--bs-danger);
}

/* Read-only elements keep a lighter label than editable ones */
.com_fabrik .fabrikElementContainer:not(:has(input:not([type="hidden"]))):not(:has(select)):not(:has(textarea)) label.fabrikLabel {
    font-weight: 500;
}

[dir="rtl"] .com_fabrik label.fabrikLabel {
    padding: .35rem 0 0 .5rem;
    text-align: right;
}

/* -- Elements -------------------------------------------------------------
   Le colonne col-sm-* di Fabrik non servono piu': la griglia la decide il
   fieldset, qui l'elemento prende tutta la cella.                          */
.com_fabrik .fabrikElement {
    width: 100%;
    max-width: 100%;
    min-width: 0;
    padding: .15rem 0;
}

.com_fabrik form.fabrikForm input.fabrikinput,
.com_fabrik form.fabrikForm select.fabrikinput,
.com_fabrik form.fabrikForm textarea.fabrikinput,
.com_fabrik form.fabrikForm .fabrikElement > .form-control,
.com_fabrik form.fabrikForm .fabrikElement > .form-select {
    width: 100%;
    max-width: 100%;
}

/* Fabrik avvolge radio/checkbox in un <fieldset> senza classi: adminlte.css
   stila ogni fieldset come un gruppo bordato (padding 1rem + border), che
   attorno a un singolo toggle diventa un riquadro vuoto. Qui torna neutro. */
.com_fabrik form.fabrikForm fieldset:not(.fabrikGroup) {
    padding: 0;
    margin: 0;
    border: 0;
    min-width: 0;
}

/* Toggle si/no: switcher.min.css di Fabrik usa il verde #2f7d32 fisso e
   angoli squadrati. Lo riportiamo al colore di brand e alla forma pillola
   degli switch AdminLTE/Bootstrap. */
.com_fabrik .switcher .toggle-outside {
    border-radius: 999px;
    border-color: var(--fv-border);
    background: var(--bs-secondary-bg);
    transition: background-color .2s ease, border-color .2s ease;
}

.com_fabrik .switcher input ~ input:checked ~ .toggle-outside {
    background: var(--fv-primary);
    border-color: var(--fv-primary);
}

.com_fabrik .switcher .toggle-inside {
    border-radius: 50%;
    box-shadow: 0 1px 2px rgba(0, 0, 0, .25);
}

.com_fabrik .switcher label {
    font-size: .8125rem;
    color: var(--bs-body-color);
}

.com_fabrik .fabrikElement > input.form-control,
.com_fabrik .fabrikElement > select.form-select,
.com_fabrik .fabrikElement > textarea.form-control {
    font-size: .875rem;
}

.com_fabrik input.fabrikinput,
.com_fabrik textarea.fabrikinput,
.com_fabrik select.fabrikinput {
    font-size: .875rem;
    padding: .35rem .6rem;
    min-height: 0;
}

.com_fabrik input.inputbox,
.com_fabrik select.inputbox,
.com_fabrik textarea.inputbox {
    max-width: 100%;
}

.com_fabrik select.inputbox {
    display: inline-block;
    width: auto;
    min-width: 12rem;
    max-width: 100%;
    padding: .35rem 1.9rem .35rem .6rem;
    font-size: .875rem;
    border: 1px solid var(--bs-border-color);
    border-radius: var(--fv-radius-sm);
    background-color: var(--bs-body-bg);
    appearance: none;
    background-image: var(--bs-form-select-bg-img, none);
    background-repeat: no-repeat;
    background-position: right .5rem center;
    background-size: 14px 10px;
}

/* Required / invalid feedback */
.com_fabrik .fabrikError,
.com_fabrik .fabrikValidationError,
.com_fabrik .fabrikElementError {
    font-size: .75rem;
    color: var(--bs-danger);
    margin: 0;
}

.com_fabrik .fabrikError input,
.com_fabrik input.fabrikError,
.com_fabrik select.fabrikError,
.com_fabrik textarea.fabrikError,
.com_fabrik .fabrikElementContainer.fabrikError input.form-control {
    border-color: var(--bs-danger) !important;
    background-image: none;
}

.com_fabrik .fabrikElementContainer.fabrikError {
    background: var(--bs-danger-bg-subtle, transparent);
    border-radius: var(--fv-radius-sm);
    box-shadow: inset 2px 0 0 var(--bs-danger);
}

/* Hidden element (d-none/fabrikHide) must never occupy space */
.com_fabrik .fabrikHide,
.com_fabrik .fabrikElementContainer.d-none {
    display: none !important;
}

/* Tips */
.com_fabrik .fabrikElementTip,
.com_fabrik .fabrikTip,
.com_fabrik .tipAbove,
.com_fabrik .tipBelow,
.com_fabrik .tipSide {
    font-size: .75rem;
    color: var(--bs-secondary-color);
}

/* -- Read-only values (details view) ------------------------------------- */
.com_fabrik .fabrikElementReadOnly {
    font-size: .8125rem;
    line-height: 1.45;
    padding: .38rem .6rem;
    min-height: 2.15rem;
    background: var(--fv-surface-2);
    border: 1px solid var(--fv-border-soft);
    border-radius: var(--fv-radius-sm);
    color: var(--bs-body-color);
    overflow-wrap: anywhere;
}

.com_fabrik .fabrikElementReadOnly:empty::after {
    /* \2014 = em dash, escaped so the file stays pure ASCII */
    content: "\2014";
    color: var(--bs-secondary-color);
}

/* Details view: keep long values readable */
.com_fabrik .fabrikForm.fabrikDetails .fabrikElement {
    max-width: 48rem;
}

/* ==========================================================================
   11. FORM FIELD WIDGETS
   ========================================================================== */

/* -- input-group (date+time, addons) ------------------------------------- */
.com_fabrik .fabrikSubElementContainer.input-group,
.com_fabrik .fabrikElement > .input-group {
    flex-wrap: nowrap;
    gap: .35rem;
    align-items: stretch;
}

.com_fabrik .input-group > .form-control,
.com_fabrik .input-group > .form-select {
    font-size: .8125rem;
    padding: .35rem .6rem;
    min-height: 0;
}

.com_fabrik .input-group > .btn,
.com_fabrik .calendarbutton {
    --bs-btn-padding-y: .35rem;
    --bs-btn-padding-x: .55rem;
    --bs-btn-font-size: .8125rem;
    border-radius: var(--fv-radius-sm) !important;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex: 0 0 auto;
    width: auto;
}

.com_fabrik .input-group-text {
    font-size: .8125rem;
    padding: .35rem .6rem;
}

/* -- Calendar (jQuery UI datepicker used by Joomla) ---------------------- */
.ui-datepicker {
    border: 1px solid var(--fv-border);
    border-radius: var(--fv-radius-sm);
    box-shadow: 0 8px 24px rgba(0, 0, 0, .14);
    background: var(--bs-body-bg);
    font-size: .8125rem;
    padding: .4rem;
    z-index: 1200 !important;
}

.ui-datepicker .ui-datepicker-header {
    background: var(--fv-surface-2);
    border: 0;
    border-radius: var(--fv-radius-sm);
    padding: .3rem;
    font-weight: 600;
    font-size: .75rem;
}

.ui-datepicker .ui-datepicker-title {
    line-height: 1.6;
}

.ui-datepicker th {
    font-size: .6875rem;
    color: var(--bs-secondary-color);
    text-transform: uppercase;
    border: 0;
}

.ui-datepicker td a,
.ui-datepicker td span {
    text-align: center;
    border-radius: var(--fv-radius-sm);
    padding: .25rem;
    text-decoration: none;
}

.ui-datepicker td a.ui-state-hover,
.ui-datepicker td a:hover {
    background: var(--fv-primary-soft) !important;
    color: var(--fv-primary) !important;
    border: 0;
}

.ui-datepicker td a.ui-state-active {
    background: var(--fv-primary) !important;
    color: #fff !important;
    border: 0;
}

.ui-datepicker .ui-datepicker-today a {
    border: 1px solid var(--fv-primary);
}

/* Legacy Joomla calendar table */
div.calendar {
    z-index: 1200;
    background: var(--bs-body-bg);
    border: 1px solid var(--fv-border);
    border-radius: var(--fv-radius-sm);
    box-shadow: 0 8px 24px rgba(0, 0, 0, .14);
    padding: .35rem;
}

div.calendar table {
    width: auto;
    font-size: .75rem;
}

/* -- Chosen / multiselect ------------------------------------------------ */
.com_fabrik .chosen-container {
    font-size: .8125rem;
    max-width: 100%;
}

.com_fabrik .chosen-container-multi .chosen-choices,
.com_fabrik .chosen-container-single .chosen-single {
    background: var(--bs-body-bg);
    border: 1px solid var(--bs-border-color);
    border-radius: var(--fv-radius-sm);
    box-shadow: none;
    height: auto;
    min-height: 2.15rem;
    line-height: 1.6;
    padding: .15rem .5rem;
    color: var(--bs-body-color);
}

.com_fabrik .chosen-container-multi .chosen-choices li.search-choice {
    background: var(--fv-primary-soft);
    border: 1px solid color-mix(in srgb, var(--fv-primary) 30%, transparent);
    border-radius: var(--fv-radius-sm);
    box-shadow: none;
    color: var(--bs-body-color);
    font-size: .75rem;
    margin: .15rem .2rem .15rem 0;
    padding: .1rem 1.4rem .1rem .4rem;
}

.com_fabrik .chosen-container .chosen-results li.highlighted {
    background: var(--fv-primary);
    color: #fff;
}

.com_fabrik .chosen-container-active .chosen-choices,
.com_fabrik .chosen-container-active .chosen-single {
    border-color: color-mix(in srgb, var(--fv-primary) 85%, #fff);
    box-shadow: 0 0 0 .2rem rgba(var(--fv-primary-rgb), .18);
}

/* -- File upload --------------------------------------------------------- */
.com_fabrik input[type="file"].form-control,
.com_fabrik input[type="file"].inputbox {
    padding: .3rem .5rem;
    font-size: .8125rem;
}

.com_fabrik .fabrikFileUpload,
.com_fabrik .fabrikElement input[type="file"] {
    max-width: 100%;
}

/* -- Repeat groups ------------------------------------------------------- */.com_fabrik .fabrikSubGroup {
    width: 100%;
    flex: 1 1 100%;
    border: 1px solid var(--fv-border-soft);
    border-radius: var(--fv-radius-sm);
    background: var(--fv-primary-softer);
    padding: .5rem .6rem;
    margin-bottom: .5rem;
}

.com_fabrik .fabrikSubGroup > .fabrikSubGroupElements {
    width: 100%;
}

.com_fabrik fieldset.fabrikGroup .fabrikSubGroup .fabrikElementContainer > .row {
    margin: 0;
}

/* Add / remove repeat-row buttons */
.com_fabrik .addGroup,
.com_fabrik .deleteGroup,
.com_fabrik .fabrikRepeatGroupAdd,
.com_fabrik .fabrikRepeatGroupDelete,
.com_fabrik .fabrikRepeatGroupRowAdd,
.com_fabrik .fabrikRepeatGroupRowDelete {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    width: 1.85rem;
    height: 1.85rem;
    padding: 0 !important;
    border-radius: var(--fv-radius-sm) !important;
    border: 1px solid var(--fv-border);
    background: var(--bs-body-bg);
    color: var(--bs-secondary-color);
    font-size: .9rem;
    line-height: 1;
}

.com_fabrik .addGroup:hover,
.com_fabrik .fabrikRepeatGroupAdd:hover,
.com_fabrik .fabrikRepeatGroupRowAdd:hover {
    color: var(--bs-success);
    border-color: var(--bs-success);
    background: var(--bs-success-bg-subtle);
}

.com_fabrik .deleteGroup:hover,
.com_fabrik .fabrikRepeatGroupDelete:hover,
.com_fabrik .fabrikRepeatGroupRowDelete:hover {
    color: var(--bs-danger);
    border-color: var(--bs-danger);
    background: var(--bs-danger-bg-subtle);
}

/* -- Multi-page form navigation ("Navigation n") ------------------------- */
.com_fabrik .fabrikForm .nav.fabrikNav,
.com_fabrik .fabrikProgressiveForm {
    font-size: .8125rem;
}

.com_fabrik .fabrikForm > .nav,
.com_fabrik .fabrikForm > .row-fluid.nav {
    margin: 0 0 .5rem;
    padding: 0;
}

/* ==========================================================================
   12. FORM ACTION BAR -> AdminLTE .card-footer
   --------------------------------------------------------------------------
       <div class="card-footer">
         <button type="submit" class="btn btn-primary">Submit</button>

   Fabrik mette la barra azioni a piena larghezza della card con la classe
   mt-3 (utility Bootstrap, ha !important) e margini negativi che la facevano
   sbordare di ~13px oltre i bordi della card. Qui e' un vero card-footer.  */

.com_fabrik .fabrikActions.form-actions {
    margin: 0 !important;
    padding: .75rem 1rem;
    background: var(--fv-surface);
    border-top: 1px solid var(--fv-border-soft);
    border-radius: 0;
}

.com_fabrik .fabrikActions .btn-toolbar {
    gap: .5rem;
    flex-wrap: wrap;
}

.com_fabrik .fabrikActions .btn-group {
    gap: .35rem;
    display: flex;
    flex-wrap: wrap;
}

.com_fabrik .fabrikActions .btn {
    --bs-btn-padding-y: .38rem;
    --bs-btn-padding-x: .9rem;
    --bs-btn-font-size: .8125rem;
    --bs-btn-border-radius: var(--fv-radius-sm);
    font-weight: 600;
    display: inline-flex;
    align-items: center;
    gap: .35rem;
}

/* "Salva" is the primary action of a form */
.com_fabrik .fabrikActions .btn.salva,
.com_fabrik .fabrikActions .btn.button[type="submit"],
.com_fabrik .fabrikActions .btn.fabrikSubmit,
.com_fabrik .fabrikActions input[name="Submit"] {
    --bs-btn-color: #fff;
    --bs-btn-bg: var(--fv-primary);
    --bs-btn-border-color: var(--fv-primary);
    --bs-btn-hover-color: #fff;
    --bs-btn-hover-bg: color-mix(in srgb, var(--fv-primary) 82%, #000);
    --bs-btn-hover-border-color: color-mix(in srgb, var(--fv-primary) 82%, #000);
    --bs-btn-active-bg: color-mix(in srgb, var(--fv-primary) 68%, #000);
    --bs-btn-active-border-color: color-mix(in srgb, var(--fv-primary) 68%, #000);
    box-shadow: 0 1px 2px rgba(var(--fv-primary-rgb), .3);
}

/* Delete / cancel get a danger treatment */
.com_fabrik .fabrikActions .btn.delete,
.com_fabrik .fabrikActions .btn.fabrikDelete,
.com_fabrik .fabrikActions input[name="Delete"] {
    --bs-btn-color: var(--bs-danger);
    --bs-btn-border-color: var(--bs-danger);
    --bs-btn-hover-color: #fff;
    --bs-btn-hover-bg: var(--bs-danger);
    --bs-btn-hover-border-color: var(--bs-danger);
}

/* -- Glifi dei bottoni azione ---------------------------------------------
   Fabrik emette "Salva" senza icona: aggiungiamo il floppy (stile AdminLTE).
   Solo su button/a, mai su input (i pseudo-elementi non esistono sui
   campi di modulo sostituiti). */
.com_fabrik .fabrikActions .btn.salva::before,
.com_fabrik .fabrikActions .btn.fabrikSubmit::before,
.com_fabrik .fabrikActions button.button[type="submit"]::before {
    content: "\f7d8";            /* bi-floppy */
    font-family: "bootstrap-icons" !important;
    font-style: normal;
    font-weight: normal;
    line-height: 1;
    display: inline-block;
}

.com_fabrik .fabrikActions .btn.apply::before {
    content: "\f26e";            /* bi-check */
    font-family: "bootstrap-icons" !important;
    font-style: normal;
    font-weight: normal;
    line-height: 1;
    display: inline-block;
}

/* Details view toolbar (Email / Stampa) */
.com_fabrik .fabrikForm.fabrikDetails > .row-fluid.nav,
.com_fabrik .fabrikForm.fabrikDetails > .nav {
    background: var(--fv-surface-2);
    border-bottom: 1px solid var(--fv-border-soft);
    border-radius: var(--fv-radius) var(--fv-radius) 0 0;
    padding: .5rem .75rem;
    margin: 0 0 .35rem;
    justify-content: flex-end;
    gap: .35rem;
}

.com_fabrik .fabrikForm.fabrikDetails > .row-fluid.nav .btn,
.com_fabrik .fabrikForm.fabrikDetails > .nav .btn {
    --bs-btn-padding-y: .3rem;
    --bs-btn-padding-x: .7rem;
    --bs-btn-font-size: .8125rem;
    --bs-btn-border-radius: var(--fv-radius-sm);
    display: inline-flex;
    align-items: center;
    gap: .35rem;
    font-weight: 500;
    width: auto;
}

/* ==========================================================================
   13. TABS (bootstrap_tabs / bootstrap_tabs form template)
   ========================================================================== */

.com_fabrik ul.nav-tabs {
    border-bottom: 1px solid var(--fv-border);
    gap: .25rem;
    padding: 0 .75rem;
    margin: 0;
    background: var(--fv-surface-2);
    border-radius: var(--fv-radius) var(--fv-radius) 0 0;
}

.com_fabrik ul.nav-tabs > li > a,
.com_fabrik ul.nav-tabs .nav-link {
    font-size: .8125rem;
    font-weight: 600;
    color: var(--bs-secondary-color);
    border: 0;
    border-bottom: 2px solid transparent;
    border-radius: 0;
    padding: .55rem .85rem;
    background: transparent;
}

.com_fabrik ul.nav-tabs .nav-link:hover {
    color: var(--fv-primary);
    border-bottom-color: color-mix(in srgb, var(--fv-primary) 40%, transparent);
}

.com_fabrik ul.nav-tabs .nav-link.active,
.com_fabrik ul.nav-tabs > li.active > a {
    color: var(--fv-primary);
    background: transparent;
    border-bottom: 2px solid var(--fv-primary);
}

.com_fabrik .tab-content {
    padding: .25rem 0 0;
}

/* ==========================================================================
   14. MODALS / POPUPS / ALERTS
   ========================================================================== */

.fabrikModal .modal-content,
.modal-content .fabrikForm {
    border-radius: var(--fv-radius);
    border: 0;
    box-shadow: 0 16px 48px rgba(0, 0, 0, .2);
}

.fabrikModal .modal-header,
.modal-header {
    border-bottom: 1px solid var(--fv-border-soft);
    padding: .75rem 1rem;
}

.fabrikModal .modal-title {
    font-size: .9375rem;
    font-weight: 600;
}

.fabrikModal .modal-footer {
    border-top: 1px solid var(--fv-border-soft);
    padding: .6rem 1rem;
    gap: .35rem;
}

.fabrikWindow .fabrikWin,
a.fabrikWin {
    display: inline-flex;
    align-items: center;
    gap: .35rem;
}

/* Messages produced by Fabrik (saved / error notices) */
.fabrikMessage,
.fabrikForm .alert,
.com_fabrik .alert {
    font-size: .8125rem;
    border-radius: var(--fv-radius-sm);
    border-width: 1px;
    padding: .6rem .85rem;
}

.fabrikMessage.info {
    background: var(--bs-info-bg-subtle);
    border-color: var(--bs-info-border-subtle);
    color: var(--bs-info-text-emphasis);
}

.fabrikMessage.success {
    background: var(--bs-success-bg-subtle);
    border-color: var(--bs-success-border-subtle);
    color: var(--bs-success-text-emphasis);
}

.fabrikMessage.error,
.fabrikMessage.danger {
    background: var(--bs-danger-bg-subtle);
    border-color: var(--bs-danger-border-subtle);
    color: var(--bs-danger-text-emphasis);
}

/* Inline "no records" / info text */
.com_fabrik .fabrikInfo,
.com_fabrik .fabrikNotice {
    font-size: .8125rem;
    color: var(--bs-secondary-color);
}

/* ==========================================================================
   15. VISUALISATIONS (calendar / charts)
   ========================================================================== */

.com_fabrik .fabrikVisualization {
    padding: 0;
}

.fc {
    --fc-border-color: var(--fv-border-soft);
    --fc-button-bg-color: var(--fv-primary);
    --fc-button-border-color: var(--fv-primary);
    --fc-button-hover-bg-color: color-mix(in srgb, var(--fv-primary) 82%, #000);
    --fc-button-hover-border-color: color-mix(in srgb, var(--fv-primary) 82%, #000);
    --fc-button-active-bg-color: color-mix(in srgb, var(--fv-primary) 68%, #000);
    --fc-today-bg-color: var(--fv-primary-soft);
    --fc-page-bg-color: var(--bs-body-bg);
    font-size: .8125rem;
}

.fc .fc-toolbar-title {
    font-size: 1rem;
    font-weight: 600;
}

.fc .fc-button {
    font-size: .75rem;
    padding: .25rem .55rem;
    border-radius: var(--fv-radius-sm);
}

/* ==========================================================================
   15b. TOOLTIP + SEARCH CLEAR (added by js/fabrik.js)
   ========================================================================== */

/* Modern tooltip rendered from the data-fv-tip attribute */
.com_fabrik [data-fv-tip] {
    position: relative;
}

.com_fabrik [data-fv-tip]::after {
    content: attr(data-fv-tip);
    position: absolute;
    bottom: calc(100% + 6px);
    left: 50%;
    transform: translateX(-50%) translateY(2px);
    background: var(--bs-body-color);
    color: var(--bs-body-bg);
    font-size: .6875rem;
    font-weight: 500;
    line-height: 1.2;
    letter-spacing: 0;
    text-transform: none;
    white-space: nowrap;
    padding: .25rem .45rem;
    border-radius: var(--fv-radius-sm);
    box-shadow: 0 4px 12px rgba(0, 0, 0, .18);
    opacity: 0;
    pointer-events: none;
    transition: opacity .12s ease, transform .12s ease;
    z-index: 1080;
}

.com_fabrik [data-fv-tip]:hover::after,
.com_fabrik [data-fv-tip]:focus-visible::after {
    opacity: 1;
    transform: translateX(-50%) translateY(0);
}

/* Tooltips on the last row must not be clipped by the container */
.com_fabrik .fabrikDataContainer tr:last-child [data-fv-tip]::after {
    z-index: 1081;
}

/* Clear (x) button del campo di ricerca.
   Il gruppo e' definito nella sezione 05: qui solo il pulsante, ancorato al
   bordo destro del campo perche' la lente sta a sinistra. */
.com_fabrik .fv-search-clear {
    position: absolute;
    right: .4rem;
    top: 50%;
    transform: translateY(-50%);
    display: none;
    align-items: center;
    justify-content: center;
    width: 1.25rem;
    height: 1.25rem;
    padding: 0;
    border: 0;
    border-radius: 50%;
    background: var(--bs-secondary-bg);
    color: var(--bs-secondary-color);
    font-size: .9rem;
    line-height: 1;
    cursor: pointer;
    z-index: 3;
}

.com_fabrik .fv-search-wrap.fv-has-value .fv-search-clear {
    display: inline-flex;
}

.com_fabrik .fv-search-clear:hover {
    background: var(--bs-danger);
    color: #fff;
}

/* ==========================================================================
   16. DARK MODE
   ========================================================================== */

[data-bs-theme="dark"] .com_fabrik .fabrikDataContainer > table.table {
    --bs-table-striped-bg: rgba(255, 255, 255, .03);
    --bs-table-hover-bg: rgba(var(--fv-primary-rgb), .12);
}

[data-bs-theme="dark"] .com_fabrik .fabrikDataContainer > table.table > thead > tr > th.heading,
[data-bs-theme="dark"] .com_fabrik tr.fabrik_calculations > td,
[data-bs-theme="dark"] .com_fabrik fieldset.fabrikGroup > legend,
[data-bs-theme="dark"] .com_fabrik .fabrikNav,
[data-bs-theme="dark"] .com_fabrik .fabrikActions.form-actions {
    background: rgba(255, 255, 255, .04);
}

[data-bs-theme="dark"] .btn-default {
    --bs-btn-bg: rgba(255, 255, 255, .06);
    --bs-btn-border-color: rgba(255, 255, 255, .14);
    --bs-btn-hover-bg: rgba(255, 255, 255, .12);
}

[data-bs-theme="dark"] .com_fabrik .fabrikElementReadOnly {
    background: rgba(255, 255, 255, .04);
}

[data-bs-theme="dark"] .ui-datepicker,
[data-bs-theme="dark"] div.calendar {
    background: var(--bs-body-bg);
    border-color: rgba(255, 255, 255, .14);
}

/* ==========================================================================
   17. RESPONSIVE
   ========================================================================== */

/* Tablet: let form labels stack above their field */
@media (max-width: 991.98px) {
    .com_fabrik label.fabrikLabel,
    .com_fabrik .control-label {
        width: 100%;
        max-width: 100%;
        padding: .2rem 0;
    }

    .com_fabrik .fabrikElement {
        flex: 1 1 100%;
        max-width: 100%;
    }

    .com_fabrik .fabrikElementContainer > .row {
        flex-direction: column;
    }
}

/* Phone: toolbar stacks and the search field grows */
@media (max-width: 767.98px) {
    .com_fabrik .fabrikButtonsContainer > .row {
        width: 100%;
    }

    .com_fabrik .fabrikSearchAll {
        width: 100%;
        justify-content: stretch;
        margin-top: .35rem;
    }

    .com_fabrik input.fabrik_filter {
        width: 100%;
        max-width: none;
    }

    .com_fabrik .fabrikSearchAll > .row,
    .com_fabrik .fabrikSearchAll > [class*="col-"] {
        width: 100%;
    }

    .com_fabrik form.fabrikForm > .container-fluid {
        padding: .5rem;
    }

    .com_fabrik .fabrikNav .pagination {
        --bs-pagination-padding-x: .45rem;
    }

    .com_fabrik .fabrikNav .limit.row {
        flex-wrap: wrap;
    }

    .com_fabrik .fabrikNav .limit.row > div:last-child {
        margin-left: 0;
        text-align: left !important;
    }
}

/* ==========================================================================
   18. PRINT
   ========================================================================== */

@media print {
    .com_fabrik .fabrikButtonsContainer,
    .com_fabrik .fabrikSearchAll,
    .com_fabrik .fabrikFilterContainer,
    .com_fabrik .fabrikNav,
    .com_fabrik td.fabrik_actions,
    .com_fabrik td.fabrik_select,
    .com_fabrik th.fabrik_actions,
    .com_fabrik th.fabrik_select,
    .com_fabrik .fabrikActions,
    .com_fabrik .fabrikForm.fabrikDetails > .nav,
    .com_fabrik .fabrikForm.fabrikDetails > .row-fluid.nav {
        display: none !important;
    }

    .com_fabrik .fabrikDataContainer {
        overflow: visible !important;
    }

    .com_fabrik .fabrikDataContainer > table.table {
        font-size: 8pt;
    }

    .com_fabrik .fabrikDataContainer > table.table > tbody > tr > td,
    .com_fabrik .fabrikDataContainer > table.table > thead > tr > th {
        border-color: #999 !important;
    }
}
