/* ===========================================================================
   Filament Table Tabs — Digival\FilamentTableTabs
   ---------------------------------------------------------------------------
   "Finti tab" di filtro resi come segmented control / tab nativi, iniettati via
   render hook della tabella (vedi TableTabsServiceProvider). Il markup è quello
   di resources/views/table-tabs.blade.php: un contenitore .fi-ta-tabs con
   pulsanti .fi-ta-tabs-item (+ .fi-active sul tab attivo) e un badge Filament.

   CSS standalone (nessuna direttiva Tailwind / theme()): registrato come asset
   Filament. Le variabili --gray-*, --primary-*, --color-white sono iniettate a
   runtime dal tema del pannello.
   =========================================================================== */

/* Riga dei tab (HEADER_BEFORE): titolo opzionale a sinistra + box tab.

   Per affiancare i tab agli header actions nativi (es. "Nuova ...") SULLA STESSA
   riga, senza ancoraggi assoluti né valori fissi, rendiamo il contenitore
   .fi-ta-header-ctn un flex: la riga tab e il div .fi-ta-header (bottone) si
   dispongono su una riga; la toolbar (search) va a capo da sé (width 100%).
   Il padding nativo di .fi-ta-header NON viene toccato: i due elementi sono
   allineati al centro dalla riga flex (align-items: center). */
.fi-ta-header-ctn:has(> .fi-ta-tabs-row) {
    display: flex;
    flex-wrap: wrap;
    /* stretch: tab-row e header assumono la stessa altezza (del più alto), così
       i loro border-bottom combaciano in un bordo continuo. I contenuti restano
       centrati internamente (align-items: center sui figli). */
    align-items: stretch;
}

/* La riga tab occupa lo spazio disponibile e spinge il bottone a destra.
   min-width: 0 è essenziale: senza, un figlio flex non si restringe sotto la
   larghezza del proprio contenuto (i tab), quindi su mobile la riga déborda e
   il box tab esce dal bordo invece di attivare lo scroll orizzontale. */
.fi-ta-header-ctn:has(> .fi-ta-tabs-row) > .fi-ta-tabs-row {
    flex: 1 1 auto;
    min-width: 0;
}

/* Il bottone non cresce e resta a destra; padding e bordo nativi intatti. */
.fi-ta-header-ctn:has(> .fi-ta-tabs-row) > .fi-ta-header {
    flex: 0 0 auto;
}

/* La toolbar (search, filtri, column manager) e HEADER_AFTER vanno SEMPRE a capo
   sotto la riga tab+bottone. */
.fi-ta-header-ctn:has(> .fi-ta-tabs-row) > .fi-ta-header-toolbar {
    flex: 1 1 100%;
}

.fi-ta-tabs-row {
    display: flex;
    align-items: center;
    gap: 0.75rem;
    flex-wrap: wrap;
    padding: 6px 1rem;
    /* stesso bordo nativo di .fi-ta-header: insieme (tab-row a sx, header a dx)
       coprono l'intera larghezza della riga. */
    border-bottom: 1px solid var(--gray-200);
}

@media (min-width: 640px) {
    .fi-ta-tabs-row {
        padding-inline: 1.5rem;
    }
}

:is(.dark) .fi-ta-tabs-row {
    border-bottom-color: rgb(255 255 255 / 0.1);
}

.fi-ta-tabs-heading {
    font-size: 1rem;
    font-weight: 600;
    line-height: 1.5rem;
    color: var(--gray-950);
}

:is(.dark) .fi-ta-tabs-heading {
    color: var(--color-white);
}

/* Contenitore: box grigio "segmented control". Dimensioni allineate ai tab
   nativi Filament (gap-1, p-2, rounded-xl), ma estetica a sfondo grigio
   (gray-100/gray-800) con la linguetta attiva bianca. width: fit-content così
   il box si stringe sui soli tab; scroll orizzontale su viewport stretti. */
.fi-ta-tabs {
    display: flex;
    align-items: center;
    gap: 0.25rem; /* gap-x-1 */
    width: fit-content;
    max-width: 100%;
    min-width: 0; /* permette al box di restringersi e attivare overflow-x */
    padding: 0.5rem; /* p-2 */
    border-radius: 0.75rem; /* rounded-xl */
    background-color: var(--gray-100);
    overflow-x: auto;
    scrollbar-width: thin;
}

:is(.dark) .fi-ta-tabs {
    background-color: var(--gray-800);
}

/* Singolo pulsante-tab: identico a .fi-tabs-item nativo (px-3 py-2, gap-x-2,
   rounded-lg, text-sm font-medium). NIENTE min-height: l'altezza è quella
   nativa data da py-2, così i tab combaciano per dimensione con i tab Filament.
   flex-shrink: 0 → in scroll non si comprimono. */
.fi-ta-tabs-item {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem; /* gap-x-2 */
    padding: 0.5rem 0.75rem; /* py-2 px-3 */
    border: none;
    border-radius: 0.5rem; /* rounded-lg */
    background-color: transparent;
    box-shadow: none;
    font-size: 0.875rem; /* text-sm */
    font-weight: 500; /* font-medium */
    line-height: 1.25rem;
    white-space: nowrap;
    flex-shrink: 0;
    cursor: pointer;
    color: var(--gray-500);
    transition:
        background-color 75ms ease,
        color 75ms ease;
}

.fi-ta-tabs-item:hover {
    background-color: var(--gray-200);
}

.fi-ta-tabs-item .fi-ta-tabs-item-icon {
    width: 1.25rem;
    height: 1.25rem;
    flex-shrink: 0;
    color: var(--gray-400);
}

:is(.dark) .fi-ta-tabs-item {
    color: var(--gray-400);
}

:is(.dark) .fi-ta-tabs-item:hover {
    background-color: var(--gray-700);
}

:is(.dark) .fi-ta-tabs-item .fi-ta-tabs-item-icon {
    color: var(--gray-500);
}

/* Tab ATTIVO: linguetta bianca rialzata (look segmented control); label e icona
   color primary. */
.fi-ta-tabs-item.fi-active {
    background-color: var(--color-white);
    box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.08);
    color: var(--primary-700);
}

.fi-ta-tabs-item.fi-active .fi-ta-tabs-item-icon {
    color: var(--primary-700);
}

:is(.dark) .fi-ta-tabs-item.fi-active {
    background-color: var(--gray-950);
    box-shadow: 0 1px 2px 0 rgb(0 0 0 / 0.08);
    color: var(--primary-400);
}

:is(.dark) .fi-ta-tabs-item.fi-active .fi-ta-tabs-item-icon {
    color: var(--primary-400);
}

/* Badge: è un <x-filament::badge> (porta da sé il colore semantico via le CSS
   custom property di Filament). Qui solo cifre a larghezza fissa, così il
   conteggio non fa "ballare" la larghezza del pulsante. */
.fi-ta-tabs-item-badge {
    flex-shrink: 0;
    font-variant-numeric: tabular-nums;
}


/* ===========================================================================
   VARIANTE "SOPRA LA TABELLA" — .fi-ta-tabs-above
   ---------------------------------------------------------------------------
   Attiva quando i tab sono resi da
   `PanelsRenderHook::RESOURCE_PAGES_LIST_RECORDS_TABLE_BEFORE`, cioe' fuori
   dal contenitore della tabella: sotto il titolo della pagina e sopra di essa.

   Qui il segmented control non funziona: senza il contenitore della tabella
   attorno, le linguette galleggerebbero nel vuoto. Si passa a tab piatti con
   una sottolineatura sull'attivo, a cavallo del bordo superiore della tabella.

   La linea e' uno `::after` e non un `border-bottom`: il bordo farebbe parte
   del box del pulsante e ne sposterebbe il contenuto di 2px all'attivazione.
   =========================================================================== */

.fi-ta-tabs-row.fi-ta-tabs-above {
    /* Niente bordo proprio: qui la riga non chiude nulla, e' la tabella sotto a
       dare il confine. */
    border-bottom: none;
    gap: 0;
    /* Allineamento a sinistra: la label del primo tab deve cadere sulla stessa
       verticale del contenuto della tabella, che Filament imposta a `px-4 sm:px-6`
       (1rem / 1.5rem, vedi tables/resources/css/container.css). Il pulsante
       porta gia' 0.75rem di padding proprio, quindi alla riga ne resta la
       differenza. */
    padding: 0 0.25rem;
    /* Il contenitore della tabella viene dopo nel DOM e ha sfondo pieno: senza
       un contesto di impilamento proprio coprirebbe la meta' inferiore. */
    position: relative;
    z-index: 1;
    /* Il render hook e' un componente dello schema della pagina, che applica
       `gap-6` (1.5rem) fra i componenti: senza compensarlo la striscia resta
       sospesa lontano dalla tabella. Lo si annulla per intero, cosi' la
       sottolineatura resta a cavallo del bordo della tabella. */
    margin-bottom: calc(-1.5rem - 6px);
}

@media (min-width: 640px) {
    .fi-ta-tabs-row.fi-ta-tabs-above {
        padding-inline: 0.75rem;
    }
}

/* Il contenitore perde l'aspetto di segmented control: niente sfondo, niente
   riquadro. Qui i tab poggiano direttamente sullo sfondo della pagina, come
   una barra di navigazione. */
.fi-ta-tabs-above .fi-ta-tabs {
    gap: 0.25rem;
    /* `overflow-x: auto` porta con se' `overflow-y: auto`, che taglierebbe la
       parte di sottolineatura sporgente sotto il pulsante: il padding le fa
       spazio dentro il contenitore. */
    padding: 0 0 6px;
    border-radius: 0;
    background-color: transparent;
    width: 100%;
    /* Con molti tab la riga scorre invece di andare a capo: sopra la tabella
       un ritorno a capo sposterebbe la tabella verso il basso. */
    overflow-x: auto;
    flex-wrap: nowrap;
    scrollbar-width: none;
}

:is(.dark) .fi-ta-tabs-above .fi-ta-tabs {
    background-color: transparent;
}

.fi-ta-tabs-above .fi-ta-tabs::-webkit-scrollbar {
    display: none;
}

.fi-ta-tabs-above .fi-ta-tabs-item {
    position: relative;
    /* Arrotondato su tutti i lati: lo sfondo dell'hover e' un rettangolo pieno,
       e la sottolineatura gli resta fuori. */
    border-radius: 0.5rem;
    /* Lascia sotto al pulsante lo spazio in cui vive la linea. */
    margin-bottom: 0.5rem;
    font-weight: 500;
}

/* La sottolineatura sta SOTTO il pulsante, staccata: non deve entrare nello
   sfondo dell'hover, altrimenti sembra il bordo di un box invece che
   l'indicatore del tab attivo. */
.fi-ta-tabs-above .fi-ta-tabs-item::after {
    content: '';
    position: absolute;
    inset-inline: 0;
    /* A cavallo del bordo della tabella. Il valore e' 1px piu' alto del centro
       geometrico: il contenitore porta un `ring` di 1px, che alza il bordo
       percepito. Tarato a occhio sul risultato reso. */
    bottom: calc(-0.5rem - 1px);
    height: 4px;
    border-radius: 9999px;
    background-color: transparent;
    transition: background-color 75ms ease;
}

/* Il tab attivo perde la linguetta: solo testo marcato e linea sotto. */
.fi-ta-tabs-above .fi-ta-tabs-item.fi-active {
    background-color: transparent;
    box-shadow: none;
    font-weight: 600;
    color: var(--gray-800);
}

.fi-ta-tabs-above .fi-ta-tabs-item.fi-active::after {
    background-color: var(--primary-500);
}

.fi-ta-tabs-above .fi-ta-tabs-item.fi-active .fi-ta-tabs-item-icon {
    color: var(--primary-500);
}

/* Hover: grigio translucido, non un colore pieno. Lasciando trasparire lo
   sfondo della pagina il rilievo resta appena accennato, come vuole una barra
   di navigazione.

   La prima dichiarazione e' il ripiego per i browser senza `color-mix()`, che
   la seconda sovrascrive dove supportata. */
.fi-ta-tabs-above .fi-ta-tabs-item:hover {
    background-color: var(--gray-100);
    background-color: color-mix(in oklab, var(--gray-200) 50%, transparent);
}

:is(.dark) .fi-ta-tabs-above .fi-ta-tabs-item.fi-active {
    background-color: transparent;
    color: var(--gray-100);
}

:is(.dark) .fi-ta-tabs-above .fi-ta-tabs-item:hover {
    background-color: var(--gray-800);
    background-color: color-mix(in oklab, var(--gray-800) 50%, transparent);
}

/* Larghezza stabile: uno pseudo-elemento invisibile in grassetto riserva lo
   spazio che la label occupera' da attiva. Senza, ogni cambio di tab sposta
   di qualche pixel tutti quelli che seguono. */
.fi-ta-tabs-item-label {
    display: inline-block;
}

.fi-ta-tabs-item-label::before {
    content: attr(data-label);
    display: block;
    height: 0;
    font-weight: 600;
    overflow: hidden;
    visibility: hidden;
    pointer-events: none;
}
