/**
 * RESPONSIVE.CSS - Numeri del Calcio
 *
 * Stili responsive per mobile e tablet.
 * Questo file sovrascrive solo gli stili necessari per la responsività
 * senza modificare il codice funzionante esistente.
 *
 * Breakpoints:
 * - Mobile: max-width 640px (sm)
 * - Tablet: max-width 1024px (lg)
 * - Desktop: > 1024px
 *
 * Data: 31/01/2026
 * Update: Fix header, tabs scroll, tabelle sticky, 3D landscape, cleansheet mobile
 */

/* ============================================================================
   SIDEBAR DESKTOP — scrollabile verticalmente
   Evita che il footer ridotto tagli i comandi nella sidebar
   ============================================================================ */

@media (min-width: 768px) {
    #mainSidebar {
        overflow-y: auto !important;
        overflow-x: hidden !important;
    }
    #mainSidebar::-webkit-scrollbar {
        width: 3px;
    }
    #mainSidebar::-webkit-scrollbar-track {
        background: transparent;
    }
    #mainSidebar::-webkit-scrollbar-thumb {
        background: #334155;
        border-radius: 2px;
    }
}

/* ============================================================================
   TIPOGRAFIA GLOBALE — datinumeridelcalcio.it
   Sistema a 4 livelli: A- / A (default) / A+ / A++
   Usa specificità html .classe (1,1,0) per battere i !important embedded (0,1,0)
   ============================================================================ */

/* ── REGOLA GLOBALE: minimo 12px su tutto il sito ──────────────────────────── */
/* Copre le classi arbitrarie Tailwind e i font-size inline sotto soglia.       */
/* La specificità html[style] batte lo stile inline nei browser moderni.        */
html { font-size: 16px !important; }
body { font-size: 14px; line-height: 1.5; }

/* Floor 12px: stili inline sub-12px (es. style="font-size: 14px") */
/* Usiamo il selettore [style*="font-size"] con max() — supportato da tutti i browser moderni */
/* ⚠️★★★ 28 lug — questa regola colpiva anche <html>.
   Il selettore della dimensione del testo (A− A A+ A++) scrive uno stile inline
   `font-size: 14px` su <html>; il selettore `[style*="font-size: 14px"]` lo prendeva e
   lo portava a **12 px**. Conseguenza: sul desktop la base del documento era 12 px e
   **ogni misura in `rem` scendeva del 25%** — le voci del menu a 10,2 px, 122 testi
   sotto il pavimento in una sola pagina. Un difetto che si vedeva ovunque e la cui
   causa stava in un punto solo.
   ★ Una regola che pesca per «contenuto dell'attributo style» va sempre limitata a
   ciò che deve toccare: qui `:not(html):not(body)`. */
:not(html):not(body)[style*="font-size: 9px"],
:not(html):not(body)[style*="font-size: 10px"],
:not(html):not(body)[style*="font-size: 11px"],
:not(html):not(body)[style*="font-size: 14px"] { font-size: 12px !important; }

/* mobile: gli stili inline minuscoli seguono il pavimento, non il vecchio 12 px */
@media (max-width: 899px) {
    /* ⚠️ anche qui `html`/`body` fuori: la loro misura è la BASE, non un corpo da alzare */
    :not(html):not(body)[style*="font-size: 9px"], :not(html):not(body)[style*="font-size: 10px"],
    :not(html):not(body)[style*="font-size: 11px"], :not(html):not(body)[style*="font-size: 12px"],
    :not(html):not(body)[style*="font-size: 13px"], :not(html):not(body)[style*="font-size: 14px"] {
        font-size: 15px !important;
    }
}

/* ── DEFAULT (A) — DESKTOP ─────────────────────────────────────────────────── */
html .text-xs,
html .text-\[11px\], html .text-\[10px\], html .text-\[9px\] { font-size: 13px !important; line-height: 1.4; }
html .text-sm   { font-size: 14px !important; }
html .text-base { font-size: 16px !important; }
html table      { font-size: 14px !important; }
html th         { font-size: 13px !important; font-weight: 600; }
html td         { font-size: 14px !important; }

/* ── DEFAULT (A) — MOBILE ──────────────────────────────────────────────────── */
/* ⚠️★★★ QUESTO BLOCCO RIMPICCIOLIVA. Fino al 27 luglio 2026 portava `.text-xs` a
   **12 px** e le tabelle a 12: sul telefono i testi erano PIÙ PICCOLI che sul desktop
   (dove la stessa regola dà 13 px). Esattamente il contrario di quello che serve a un
   pubblico non giovanissimo.
   Regola assoluta posta da Fabio: «quei numeri così piccoli non devono starci».
   Il pavimento (15 px per il testo, 20 px per i numeri del dato) sta in
   `css/palette.css`, che è caricato da tutti e quindici gli ambienti — qui si smette
   soltanto di abbassare. Collaudo: `admin/scripts/verifica_corpi_mobile.js`. */
@media (max-width: 899px) {
    html .text-xs,
    html .text-\[11px\], html .text-\[10px\], html .text-\[9px\] { font-size: 15px !important; }
    html .text-sm   { font-size: 16px !important; }
    html .text-base { font-size: 17px !important; }
    html table      { font-size: 15px !important; }
    html th         { font-size: 15px !important; }
    html td         { font-size: 15px !important; }
}

/* ============================================================================
   TEAM LOGO CELL — stemma squadra con tooltip nome (tutte le pagine)
   Uso: teamLogoCell(team, season) in JS → <a class="team-logo-cell">
   ============================================================================ */

.team-logo-cell {
    position: relative;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    text-decoration: none !important;
    vertical-align: middle;
}

/* Tooltip giallo con nome squadra */
.team-logo-cell .team-tooltip {
    position: absolute;
    bottom: calc(100% + 6px);
    left: 50%;
    transform: translateX(-50%);
    background: #fbbf24;
    color: #1e293b;
    font-size: 12px;
    font-weight: 700;
    white-space: nowrap;
    padding: 3px 8px;
    border-radius: 4px;
    pointer-events: none;
    opacity: 0;
    transition: opacity 0.15s ease, transform 0.15s ease;
    transform: translateX(-50%) translateY(4px);
    z-index: 100;
    box-shadow: 0 2px 8px rgba(0,0,0,0.4);
}
/* Freccetta */
.team-logo-cell .team-tooltip::after {
    content: '';
    position: absolute;
    top: 100%;
    left: 50%;
    transform: translateX(-50%);
    border: 4px solid transparent;
    border-top-color: #fbbf24;
}

.team-logo-cell:hover .team-tooltip,
.team-logo-cell:focus .team-tooltip {
    opacity: 1;
    transform: translateX(-50%) translateY(0);
}

/* Logo stemma nella cella */
.team-logo-cell img {
    display: inline-block;
    object-fit: contain;
    vertical-align: middle;
    transition: transform 0.15s;
}
.team-logo-cell:hover img {
    transform: scale(1.12);
}

/* Sidebar labels */
#mainSidebar span,
#mainSidebar a,
nav span,
nav a {
    font-size: max(14px, inherit) !important;
}

/* Tab buttons */
.tab-btn,
[data-tab],
button {
    font-size: max(14px, inherit) !important;
}

/* ============================================================================
   BOTTONI SELETTORE FONT-SIZE (A- / A / A+)
   Stile condiviso per tutti i temi (dark/white/black)
   ============================================================================ */

.fs-btn-group {
    display: inline-flex;
    align-items: center;
    gap: 2px;
    background: rgba(255,255,255,0.07);
    border-radius: 8px;
    padding: 3px;
    border: 1px solid rgba(255,255,255,0.12);
}

.fs-btn {
    background: transparent;
    border: none;
    border-radius: 6px;
    color: rgba(255,255,255,0.55);
    cursor: pointer;
    font-weight: 700;
    line-height: 1;
    padding: 4px 7px;
    transition: background 0.15s, color 0.15s;
    font-family: inherit;
}

.fs-btn:nth-child(1) { font-size: 10px !important; }  /* A-  */
.fs-btn:nth-child(2) { font-size: 13px !important; }  /* A   */
.fs-btn:nth-child(3) { font-size: 17px !important; }  /* A+  */
.fs-btn:nth-child(4) { font-size: 21px !important; }  /* A++ */
/* 🔴🔴 LA RAMPA VALE SOLO PER LE MISURE DEL TESTO (27 agosto 2026, trovato dagli agenti).
   Qui i quattro corpi crescono apposta: il tasto MOSTRA la misura che sceglie, ed e'
   giusto. Ma la coppia del TEMA sta nello stesso tipo di gruppo, e si prendeva la stessa
   rampa: **☀ a 10 px e 🌙 a 13**, alti 24 e 27, sfalsati di 1,5 px — due gemelli di
   misura diversa per una differenza che non significa niente. E sul tema chiaro l'attivo
   era quello piu' piccolo.
 ★ Il sole e la luna non dicono «quanto grande»: dicono «quale». Corpo unico. */
.th-btn-group .fs-btn:nth-child(1),
.th-btn-group .fs-btn:nth-child(2),
.th-btn-group .fs-btn:nth-child(3),
.th-btn-group .fs-btn:nth-child(4) { font-size: 15px !important; }

.fs-btn:hover {
    background: rgba(255,255,255,0.12);
    color: rgba(255,255,255,0.85);
}

.fs-btn--active {
    background: rgba(255,255,255,0.18) !important;
    color: #fff !important;
    box-shadow: 0 1px 3px rgba(0,0,0,0.3);
}

/* Adattamento tema chiaro. NB: il tema chiaro reale è `body.bg-slate-50`
   (impostato da accessibility.js); i selettori storici data-theme="white" /
   .theme-white NON corrispondevano mai → il controllo font era illeggibile in
   tema chiaro. Aggiunto body.bg-slate-50 (29 Mag). */
html[data-theme="white"] .fs-btn-group,
body.theme-white .fs-btn-group,
body.bg-slate-50 .fs-btn-group {
    background: rgba(0,0,0,0.05);
    border-color: rgba(0,0,0,0.12);
}
html[data-theme="white"] .fs-btn,
body.theme-white .fs-btn,
body.bg-slate-50 .fs-btn {
    color: #334155 !important;   /* grigio scuro leggibile su chiaro */
}
html[data-theme="white"] .fs-btn:hover,
body.theme-white .fs-btn:hover,
body.bg-slate-50 .fs-btn:hover {
    background: rgba(0,0,0,0.08);
    color: #0f172a !important;
}
/* Stato attivo: blu pieno + testo bianco (visibile in tema chiaro).
   Specificità alzata (.fs-btn-group .fs-btn.fs-btn--active) per vincere su .fs-btn. */
/* Stato attivo dei pulsanti A−/A/A+ e del tema: ora SOLO in css/palette.css
   (mazzetta C, 22 lug 2026). Era blu elettrico: un accento che non c'entrava. */

html[data-theme="white"] .fs-btn--active,
body.theme-white .fs-btn--active {
    background: rgba(0,0,0,0.14) !important;
    color: #000 !important;
}

/* ============================================================================
   SELETTORE DIMENSIONE TESTO — 4 livelli
   A- (small) / A (medium/default) / A+ (large) / A++ (xl)
   Specificità (1,2,0) batte qualsiasi regola !important embedded (0,1,0)
   ============================================================================ */

/* ── A- (COMPATTO) ────────────────────────────────────────────────────────── */
html.font-small .text-xs,
html.font-small .text-\[11px\], html.font-small .text-\[10px\], html.font-small .text-\[9px\] { font-size: 11px !important; }
html.font-small .text-sm   { font-size: 13px !important; }
html.font-small .text-base { font-size: 15px !important; }
html.font-small table      { font-size: 13px !important; }
html.font-small th         { font-size: 12px !important; }
html.font-small td         { font-size: 13px !important; }
@media (max-width: 767px) {
    html.font-small .text-xs,
    html.font-small .text-\[11px\], html.font-small .text-\[10px\], html.font-small .text-\[9px\] { font-size: 10px !important; }
    html.font-small .text-sm { font-size: 11px !important; }
}

/* ── A+ (GRANDE) ─────────────────────────────────────────────────────────── */
html.font-large .text-xs,
html.font-large .text-\[11px\], html.font-large .text-\[10px\], html.font-large .text-\[9px\] { font-size: 16px !important; }
html.font-large .text-sm   { font-size: 18px !important; }
html.font-large .text-base { font-size: 20px !important; }
html.font-large .text-lg   { font-size: 22px !important; }
html.font-large .text-xl   { font-size: 24px !important; }
html.font-large .text-2xl  { font-size: 28px !important; }
html.font-large table      { font-size: 18px !important; }
html.font-large th         { font-size: 16px !important; font-weight: 600; }
html.font-large td         { font-size: 18px !important; }
html.font-large td, html.font-large th { padding-top: 6px !important; padding-bottom: 6px !important; }
@media (max-width: 767px) {
    html.font-large .text-xs,
    html.font-large .text-\[11px\], html.font-large .text-\[10px\], html.font-large .text-\[9px\] { font-size: 13px !important; }
    html.font-large .text-sm { font-size: 15px !important; }
}

/* ── A++ (EXTRA GRANDE) ──────────────────────────────────────────────────── */
html.font-xl .text-xs,
html.font-xl .text-\[11px\], html.font-xl .text-\[10px\], html.font-xl .text-\[9px\] { font-size: 19px !important; }
html.font-xl .text-sm   { font-size: 21px !important; }
html.font-xl .text-base { font-size: 23px !important; }
html.font-xl .text-lg   { font-size: 26px !important; }
html.font-xl .text-xl   { font-size: 29px !important; }
html.font-xl .text-2xl  { font-size: 33px !important; }
html.font-xl table      { font-size: 21px !important; }
html.font-xl th         { font-size: 19px !important; font-weight: 600; }
html.font-xl td         { font-size: 21px !important; }
html.font-xl td, html.font-xl th { padding-top: 8px !important; padding-bottom: 8px !important; }
@media (max-width: 767px) {
    html.font-xl .text-xs,
    html.font-xl .text-\[11px\], html.font-xl .text-\[10px\], html.font-xl .text-\[9px\] { font-size: 15px !important; }
    html.font-xl .text-sm { font-size: 17px !important; }
}

/* ============================================================================
   MOBILE FIRST - max-width: 767px (allineato con breakpoint md di Tailwind)
   ============================================================================ */
@media (max-width: 767px) {

    /* --- LAYOUT GENERALE --- */
    body {
        font-size: 14px !important;
    }

    /* --- HEADER / NAV - COMPATTO SU MOBILE --- */
    /* ESCLUDI body.home-page header che ha struttura diversa (logo+titolo+tema) */
    /* ESCLUDI .muxv2-navbar: è la bottom-nav mobile, deve restare fixed in fondo (non è una nav in alto) */
    nav:not(.muxv2-navbar),
    .glass-header,
    body:not(.home-page) header {
        position: relative !important;
        top: auto !important;
        z-index: 30;
        padding: 0.35rem 0.5rem !important;
        flex-wrap: nowrap !important;
        gap: 0.35rem;
        min-height: 44px !important;
        max-height: 52px !important;
    }

    nav .logo-text {
        font-size: 0.9rem !important;
    }

    /* Logo più piccolo */
    nav img[src*="logo"],
    .glass-header img {
        max-height: 28px !important;
        width: auto !important;
    }

    /* Nasconde elementi non essenziali su mobile */
    nav .hidden-mobile,
    .desktop-only {
        display: none !important;
    }

    /* Menu hamburger visibile e compatto */
    #menuToggle,
    .menu-toggle {
        display: flex !important;
        width: 36px !important;
        height: 36px !important;
        min-width: 36px !important;
    }

    /* Sidebar nascosta di default su mobile - usa le classi sidebar-open/closed */
    #mainSidebar {
        position: fixed !important;
        left: 0;
        top: 0;
        bottom: 0;
        z-index: 9998 !important; /* Molto alto per stare sopra tutto */
        transition: transform 0.3s ease, -webkit-transform 0.3s ease;
        -webkit-transition: -webkit-transform 0.3s ease;
        width: 280px !important;
        max-width: 85vw;
        /* CRITICO: forza flex-col e overflow per layout corretto */
        display: flex !important;
        flex-direction: column !important;
        overflow: hidden !important;
        height: 100vh !important;
        height: 100dvh !important; /* dynamic viewport height per iOS */
        /* safe-area iOS: padding-top rispetta notch */
        padding-top: env(safe-area-inset-top, 0px);
        padding-bottom: env(safe-area-inset-bottom, 0px);
    }

    /* BUG 2 FIX: la sidebar ha gruppi DATI/PERSONE/ESPLORA/STRUMENTI
       che possono superare il viewport. La sidebar resta overflow:hidden
       (per non mostrare scrollbar) ma il nav interno deve scrollare.
       Rendiamo scrollabile il primo flex-child "flex-1" (che contiene nav grid)
       e manteniamo "shrink-0" su auth-button-container e altri sidebar-bottom. */
    #mainSidebar > .flex-1,
    #mainSidebar > div.flex-1,
    #mainSidebar > .sidebar-scroll-area,
    #mainSidebar .sidebar-nav-grid {
        overflow-y: auto !important;
        overflow-x: hidden !important;
        flex: 1 1 auto !important;
        min-height: 0 !important;
        -webkit-overflow-scrolling: touch;
    }

    #mainSidebar #auth-button-container,
    #mainSidebar .sidebar-bottom,
    #mainSidebar .sidebar-footer {
        flex-shrink: 0 !important;
    }

    /* Scrollbar sottile per il nav interno */
    #mainSidebar > div::-webkit-scrollbar,
    #mainSidebar .sidebar-nav-grid::-webkit-scrollbar {
        width: 3px;
    }
    #mainSidebar > div::-webkit-scrollbar-thumb,
    #mainSidebar .sidebar-nav-grid::-webkit-scrollbar-thumb {
        background: #475569;
        border-radius: 2px;
    }

    /* Sidebar chiusa (default) */
    #mainSidebar.sidebar-closed {
        transform: translateX(-100%) !important;
        -webkit-transform: translateX(-100%) !important;
    }

    /* Sidebar aperta */
    #mainSidebar.sidebar-open {
        transform: translateX(0) !important;
        -webkit-transform: translateX(0) !important;
        box-shadow: 10px 0 40px rgba(0, 0, 0, 0.5);
    }

    /* Overlay per chiudere sidebar */
    #sidebarOverlay {
        position: fixed !important;
        inset: 0 !important;
        background: rgba(0, 0, 0, 0.6) !important;
        z-index: 9997 !important;
        /* NO backdrop-filter: evita compositing ghost su iOS Safari */
    }

    /* Overlay nascosto — tripla protezione: display, visibility, pointer-events */
    #sidebarOverlay.hidden {
        display: none !important;
        visibility: hidden !important;
        opacity: 0 !important;
        pointer-events: none !important;
    }

    /* Overlay visibile quando sidebar aperta */
    #sidebarOverlay:not(.hidden) {
        display: block !important;
        visibility: visible !important;
        opacity: 1 !important;
        pointer-events: auto !important;
    }

    /* Container principale full width - massimizza spazio contenuto */
    #mainContainer,
    .main-content,
    main {
        margin-left: 0 !important;
        width: 100% !important;
        padding: 0.5rem !important;
        padding-top: 0.5rem !important;
    }

    /* Titoli sezione più piccoli su mobile */
    main h1.text-4xl,
    #mainContainer h1.text-4xl {
        font-size: 1.5rem !important;
    }

    main h1.text-3xl,
    #mainContainer h1.text-3xl {
        font-size: 1.25rem !important;
    }

    /* Riduce margini tra header sezione e contenuto (NON nella Home) */
    body:not(.home-page) .mb-8 {
        margin-bottom: 0.75rem !important;
    }

    /* Riduce padding generale su mobile per più spazio (NON nella Home) */
    body:not(.home-page) .p-4,
    body:not(.home-page) .p-6,
    body:not(.home-page) .p-8 {
        padding: 0.5rem !important;
    }

    body:not(.home-page) .px-4,
    body:not(.home-page) .px-6,
    body:not(.home-page) .px-8 {
        padding-left: 0.5rem !important;
        padding-right: 0.5rem !important;
    }

    body:not(.home-page) .py-4,
    body:not(.home-page) .py-6,
    body:not(.home-page) .py-8 {
        padding-top: 0.5rem !important;
        padding-bottom: 0.5rem !important;
    }

    /* Margini ridotti (NON nella Home) */
    body:not(.home-page) .m-4,
    body:not(.home-page) .m-6,
    body:not(.home-page) .m-8 {
        margin: 0.35rem !important;
    }

    body:not(.home-page) .mb-4,
    body:not(.home-page) .mb-6,
    body:not(.home-page) .mb-8 {
        margin-bottom: 0.5rem !important;
    }

    body:not(.home-page) .mt-4,
    body:not(.home-page) .mt-6,
    body:not(.home-page) .mt-8 {
        margin-top: 0.5rem !important;
    }

    /* Gap ridotti nelle grid (NON nella Home) */
    body:not(.home-page) .gap-4,
    body:not(.home-page) .gap-6,
    body:not(.home-page) .gap-8 {
        gap: 0.5rem !important;
    }

    /* --- TABS MOBILE: COMPATTI --- */
    /* Container tab in navbar - scroll orizzontale, solo icone */
    nav .flex.bg-slate-800.rounded-lg {
        display: flex !important;
        flex-wrap: nowrap !important;
        overflow-x: auto !important;
        overflow-y: hidden !important;
        gap: 0.15rem !important;
        padding: 0.2rem !important;
        max-width: calc(100vw - 100px) !important;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
    }

    nav .flex.bg-slate-800.rounded-lg::-webkit-scrollbar {
        display: none;
    }

    /* Bottoni tab navbar - solo icone */
    nav .flex.bg-slate-800.rounded-lg button {
        flex-shrink: 0 !important;
        padding: 0.4rem 0.5rem !important;
        border-radius: 0.375rem !important;
        min-width: auto !important;
    }

    nav .flex.bg-slate-800.rounded-lg button span {
        display: none !important;
    }

    nav .flex.bg-slate-800.rounded-lg button i {
        margin: 0 !important;
        font-size: 0.95rem !important;
    }

    /* --- TAB CONTENUTO (Campionati, Varie, etc.) - wrap su più righe --- */
    /* Tab testuali senza icone - permettono wrap */
    .tabs-container,
    main .flex.flex-wrap,
    main .bg-slate-800.rounded-xl .flex,
    [role="tablist"] {
        display: flex !important;
        flex-wrap: wrap !important;
        gap: 0.25rem !important;
        padding: 0.25rem !important;
    }

    /* Bottoni tab contenuto - compatti con testo */
    .tabs-container button,
    main .flex.flex-wrap button,
    main .bg-slate-800.rounded-xl button,
    [role="tablist"] button {
        flex-shrink: 0 !important;
        white-space: nowrap !important;
        font-size: 13px !important;   /* BUG 4: era 11px */
        padding: 0.4rem 0.55rem !important;
        border-radius: 0.25rem !important;
        /* ⚠️ 4 set 2026: era 36 px, e con l'`!important` batteva ogni pavimento
           messo dopo. Il banco contava **323 bersagli sotto i 40 px** e quasi tutti
           finivano qui: i tab delle coppe, i «Azzera», i tasti della Scatola magica.
           Quarantaquattro e' la soglia del dito. */
        min-height: 44px !important;  /* touch target */
    }

    /* ★ TESTO E TEMA SU UNA RIGA SOLA (Fabio, 19 agosto 2026: «rimpicciolendo i tasti
       per il corpo del testo e il tema su una riga»).
       Misurato su 375 px: il gruppo del testo occupava 208 px e quello del tema 158, in
       tutto 374 su 327 disponibili — mancavano quarantasette pixel e i due gruppi
       andavano a capo, prendendosi due righe di intestazione su un telefono.
       Stretti a 34 px per tasto con meno padding stanno in 281: entrano con margine.
       ⚠️ L'ALTEZZA NON SI TOCCA — restano 36 px. Il bersaglio da toccare è già al minimo
          e stringerlo anche in verticale renderebbe i tasti difficili da centrare. */
    /* ★ I TRE TASTI DEL TEMA A DESTRA, sul bordo del riquadro sottostante (Fabio, 19
       agosto 2026). Il contenitore era `justify-center`: i due gruppi restavano appaiati
       in mezzo e il loro bordo destro non c'entrava niente con quello del contenuto.
       Con `space-between` il testo resta a sinistra, il tema va a filo a destra, e le
       due colonne verticali dell'intestazione e del corpo coincidono. */
    #font-size-btns {
        margin-right: auto !important;   /* spinge il gruppo del tema a destra */
    }
    /* ⚠️ L'ACCOUNT VA A CAPO. Restando sulla stessa riga si prendeva la coda a destra e i
       tre tasti del tema si fermavano ventidue pixel prima del bordo del riquadro
       sottostante. Da loggato quel blocco è largo (nome, Password, Esci) e una riga sola
       non lo reggerebbe comunque. */
    header #auth-button-container {
        flex: 0 0 100% !important;
        justify-content: flex-end !important;
        margin-top: 6px !important;
    }
    /* ⚠️ E la riga si allinea alla COLONNA DEL CONTENUTO, non a quella dell'intestazione:
       misurato su 375 px, la barra stava 27→349 e il contenuto 36→339. Senza questo, i
       bordi destri non coincidono e si vede. */
    header > div:has(#font-size-btns) {
        padding-left: 13px !important;
        padding-right: 14px !important;
    }
    #font-size-btns,
    #font-size-btns + div {
        gap: 3px !important;
        padding: 3px 5px !important;
    }
    /* ⚠️ STESSA ALTEZZA PER TUTTI E SETTE. I due gruppi venivano da regole diverse — 36 px
       il testo, 30 il tema — e affiancati sulla stessa riga si vedeva: due riquadri di
       altezza diversa leggono come un errore di impaginazione, non come due gruppi. */
    #font-size-btns .fs-btn,
    #font-size-btns + div > button {
        width: 34px !important;
        min-width: 34px !important;
        height: 32px !important;
        min-height: 32px !important;
        padding: 0 !important;
        font-size: 12.5px !important;
    }

    /* Sub-tab (Partite, Tabellini, etc.) - compatti con icona e testo breve */
    .sub-tab-btn,
    .flex.gap-2 > button[class*="rounded"] {
        font-size: 12px !important;   /* BUG 4: era 10px */
        padding: 0.35rem 0.5rem !important;
        min-height: 44px !important;   /* 4 set: era 34 */
    }

    .sub-tab-btn span,
    .flex.gap-2 > button span {
        font-size: 12px !important;   /* BUG 4: era 10px */
    }

    .sub-tab-btn i,
    .flex.gap-2 > button i {
        font-size: 0.75rem !important;
    }

    /* --- CARDS / GRID --- */
    .grid:not(body):not([class*="grid-rows"]):not([class*="grid-cols"]) {
        grid-template-columns: minmax(0, 1fr) !important;
    }
    body:not(.home-page) .grid {
        gap: 0.75rem !important;
    }

    /* Cards calciatori/allenatori - mantieni altezza minima */
    .coach-card,
    .player-card {
        padding: 1rem !important;
        min-height: 280px !important;
    }

    /* Altre card generiche */
    [class*="card"]:not(.coach-card):not(.player-card) {
        padding: 1rem !important;
    }

    /* =========================================================================
       TABELLE RESPONSIVE - SISTEMA STANDARDIZZATO

       Larghezze standard per colonne (basate su caratteri):
       - Nomi (giocatori, arbitri, allenatori): max 20ch (troncato)
       - Squadre: max 12ch (troncato)
       - Campi numerici (PT, G, V, N, P, GF, GS, etc.): max 5ch
       ========================================================================= */

    /* =========================================================================
       SISTEMA TABELLE MOBILE UNIFICATO
       - Scroll orizzontale nativo
       - Overlay informativo "Scorri ↔ o Ruota 📱"
       - Header sticky
       ========================================================================= */

    /* --- CONTAINER TABELLE CON SCROLL ORIZZONTALE ---
       overflow-x: auto abilita lo scroll orizzontale su mobile.
       overflow-y: clip è CRITICO: a differenza di overflow-y:hidden/auto,
       NON crea un nuovo scroll container verticale (CSS Overflow L3 §3.3).
       Senza clip, il browser promuove overflow-y a "auto" creando uno
       scroll container locale che rompe position:sticky della thead.
       Con clip, il sticky rimane relativo al contentArea (overflow-y:auto)
       come desiderato. Safari 16+ (set 2022) supporta overflow:clip. */
    /* ⚠️ IL NOME «finestra-scroll» E DELIBERATO: NON deve contenere «modal».
       Piu sotto in questo file c'e `[class*="modal"] > div > div { width: 95vw }`,
       e la prima versione della classe si chiamava «modale-scroll»: bastava il
       nome a far prendere ai nipoti la larghezza dello SCHERMO (356 px) invece
       che del CONTENITORE (319), e la finestra ondeggiava di lato (Fabio, 13 ago
       2026). ★ Un selettore [class*=...] trasforma un NOME in un comportamento.

       .finestra-scroll ESCLUSA (13 ago 2026, Fabio: «si bloccava pure lo scrolling»).
       Il corpo di una MODALE contiene tabelle, quindi cadeva in questo selettore
       e prendeva overflow-y:clip: 35.186 px di contenuto in una finestra da 487,
       e il dito non li muoveva. Una modale ha il PROPRIO scroll: va lasciata fuori. */
    .table-container:not(.finestra-scroll),
    .overflow-x-auto:not(.finestra-scroll),
    div:has(> table):not(.tab-content):not(.finestra-scroll) {
        position: relative;
        overflow-x: auto !important;
        overflow-y: clip;
        max-width: 100vw;
        -webkit-overflow-scrolling: touch;
    }

    /* Wrapper rounded: usare overflow: clip invece di hidden.
       overflow: clip NON crea uno scroll container (CSS Overflow Level 3),
       quindi position:sticky funziona attraverso di esso.
       Safari iOS 16+ (set 2022). Per iOS 15 fallback graceful: resta hidden. */
    @supports (overflow: clip) {
        div.overflow-hidden:has(> table),
        div.overflow-hidden:has(> .overflow-x-auto > table),
        div.overflow-hidden:has(> div > table) {
            overflow: clip !important;
            overflow-clip-margin: 0 !important;
        }
    }

    /* --- OVERLAY "Scorri orizzontalmente" — RIMOSSO (mag 2026) --- */
    /* Eliminato su richiesta: ridondante con scroll naturale del browser */

    /* --- TABELLE BASE ---
       BUG 4 FIX: portato a 13px (min leggibile mobile) */
    table {
        font-size: 13px !important;
        width: 100% !important;
        min-width: auto !important;
        table-layout: fixed !important;
    }

    /* Tabelle MCG: table-layout auto (il JS sovrascrive fixed via inline style) */
    table[data-mobile-group] {
        table-layout: auto !important;
        width: 100% !important;
    }

    /* Tabelle larghe che richiedono scroll */
    table.wide-table {
        min-width: 600px !important;
        table-layout: auto !important;
    }

    th, td {
        padding: 0.35rem 0.25rem !important;
        overflow: hidden !important;
        text-overflow: ellipsis !important;
        white-space: nowrap !important;
    }

    /* Celle MCG: override degli stili globali, usa quelli del JS */
    table[data-mobile-group] th,
    table[data-mobile-group] td {
        padding: unset !important;
        overflow: visible !important;
        text-overflow: clip !important;
        white-space: nowrap !important;
    }

    /* --- LARGHEZZE COLONNE: definite nella sezione "Colonne Ottimizzate" più in basso --- */

    /* --- TABELLE COMPATTE (senza overlay) --- */
    table.compact-table {
        table-layout: auto !important;
    }

    table.compact-table td,
    table.compact-table th {
        padding: 0.3rem 0.4rem !important;
    }

    /* --- TABELLE SCROLL E HEADER STICKY ---
       BUG 1 FIX: RIMOSSA la regola che imponeva max-height:65vh + overflow:auto
       sui wrapper, perché creava uno scroll container locale che rompeva
       il pattern "thead sticky relativo al contentArea della pagina".
       Lo scroll verticale avviene ora nel contentArea genitore,
       non nel wrapper della tabella. */

    /* Header tabelle sticky - si aggancia al primo antenato scrollabile
       (di solito main#mainContainer che ha overflow-y:auto) */
    table thead {
        position: sticky !important;
        top: 0 !important;
        z-index: 10 !important;
        background: #1e293b !important;
    }

    /* Fallback per wrapper esplicitamente marcati come scroll-local */
    .table-scroll-local {
        max-height: 65vh !important;
        overflow: auto !important;
        -webkit-overflow-scrolling: touch;
    }

    table thead th {
        background: #1e293b !important;
        box-shadow: 0 2px 4px rgba(0,0,0,0.3) !important;
    }

    /* Sidebar filtri - il flex layout gestisce lo spazio, no max-height fisso */
    #mainSidebar .overflow-y-auto,
    aside .scroll-custom {
        max-height: none !important;
        overflow-y: auto !important;
    }

    /* --- NASCONDE COLONNE SU MOBILE --- */
    .mobile-hide {
        display: none !important;
    }

    col.mobile-hide {
        width: 0 !important;
        visibility: collapse !important;
    }

    .hide-mobile,
    th.hide-mobile,
    td.hide-mobile {
        display: none !important;
    }

    /* --- LE FINESTRE DEI CAMPIONATI: A TUTTO SCHERMO ---
       Fabio, 16 agosto 2026: «fissa la finestra perche' galleggia su mobile».
       ★ Erano centrate con `p-4` e `max-h-[92vh]`: a 375 px restava un bordo tutt'intorno
         e la pagina sotto si vedeva muovere, cosi' la finestra sembrava staccata. Sul
         telefono una finestra non e' una scheda che fluttua, e' lo schermo.
       ⚠️ La regola generale piu' sotto non le prendeva: mira a `[class*="modal"]`, e
          queste si chiamano `modaleSerieCCamp`… ma con la M maiuscola dentro l'ID, non
          nella classe. Si marcano con `data-finestra`, che e' esplicito e non dipende
          da come e' scritto un nome. */
    /* ⚠️ La specificita' va ALZATA di proposito: poco piu' sotto c'e'
       `body:not(.home-page) .p-4 { padding: .5rem !important }`, che vale 0-2-1 e
       schiaccia ogni riquadro del telefono. Con il solo `[data-finestra]` (0-1-0)
       l'`!important` non basta — perde comunque, e la finestra restava con otto pixel
       di bordo su ogni lato. Qui si sale a 0-3-1, e si scrive perche'. */
    body [data-finestra].fixed.inset-0 {
        padding: 0 !important;
    }
    /* 🔴 LA BARRA DI NAVIGAZIONE STA DENTRO LA FINESTRA. Portandola a tutto schermo, il
       titolo finiva SOTTO `.ndc-modnav` — la barra «Indietro · Home · Condividi · ✕»
       che il guscio inietta in ogni modale, alta 67 px e appiccicata in cima.
       Prima non si vedeva perche' la finestra cominciava piu' in basso: e' un difetto
       che il pieno schermo ha scoperto, non creato.
       ★ Lo spazio si riserva qui, e vale per le due schede dei campionati: il tabellone
         non ci ricade (usa stili in linea, non la classe `.fixed`) e ha la sua ✕. */
    body [data-finestra].fixed > div:last-child {
        padding-top: 67px;
        width: 100% !important;
        max-width: 100% !important;
        height: 100% !important;
        max-height: 100% !important;
        border-radius: 0 !important;
        border-left: 0 !important;
        border-right: 0 !important;
        margin: 0 !important;
    }

    /* --- MODALI --- */
    .modal-content,
    [class*="modal"] > div > div {
        width: 95vw !important;
        max-width: 95vw !important;
        margin: 0.5rem !important;
        max-height: 90vh !important;
        overflow-y: auto !important;
    }

    /* ============================================================================
       CALCIATORI MODAL - Fix scroll Carriera/Confronta su Mobile
       Struttura: #modalPlayer > #modalContent > div.main-container > content areas
       Su mobile: TUTTO IL MODAL SCROLLA come blocco unico (no flex, no height fissi)
       ============================================================================ */

    /* Modal overlay - fullscreen */
    #modalPlayer {
        padding: 0 !important;
        align-items: stretch !important;
        justify-content: stretch !important;
    }

    /* Modal container (#modalContent) - fullscreen e scrollabile */
    #modalContent {
        width: 100vw !important;
        max-width: 100vw !important;
        height: 100vh !important;
        max-height: 100vh !important;
        margin: 0 !important;
        border-radius: 0 !important;
        overflow-y: auto !important;
        overflow-x: hidden !important;
        -webkit-overflow-scrolling: touch !important;
    }

    /* Main container interno - BLOCK layout per scroll naturale
       🔴 …ma NON la barra dei comandi (27 agosto 2026). Questa regola colpisce QUALUNQUE
          figlio diretto e non sa che uno di loro e' un componente con un suo impianto:
          spegneva il flex di `.ndc-modnav`, e nei Calciatori i quattro tasti finivano
          ammucchiati a sinistra invece che distribuiti.
       ★ L'eccezione si scrive QUI, dove sta la regola generica, non nel componente: contro
         `#modalContent > div` (1,0,1) una classe non puo' vincere nemmeno con `!important`,
         e per batterla il componente avrebbe dovuto nominare l'id di questa pagina —
         cioe' sapere dove si trova. Un componente non deve saperlo. */
    #modalContent > div:not(.ndc-modnav) {
        display: block !important;
        height: auto !important;
        min-height: auto !important;
        overflow: visible !important;
    }

    /* Content areas - NO overflow proprio, altezza naturale */
    #modal-content-carriera,
    #modal-content-vs {
        overflow: visible !important;
        height: auto !important;
        min-height: auto !important;
        max-height: none !important;
        flex: none !important;
    }

    /* Assicura che le tabelle interne scrollino orizzontalmente se necessario */
    #modal-content-carriera .overflow-x-auto,
    #modal-content-vs .overflow-x-auto {
        overflow-x: auto !important;
        -webkit-overflow-scrolling: touch !important;
    }

    /* Header modal calciatore più compatto */
    #modalPlayer .p-6,
    #modalPlayer .p-8,
    #modalContent .p-6,
    #modalContent .p-8 {
        padding: 0.75rem !important;
    }

    /* Avatar più piccolo su mobile */
    #modalContent .w-32.h-32,
    #modalContent .w-40.h-40 {
        width: 70px !important;
        height: 70px !important;
        min-width: 70px !important;
    }

    /* Nome calciatore più piccolo */
    #modalContent h1.text-3xl,
    #modalContent h1.text-5xl {
        font-size: 1.35rem !important;
        line-height: 1.2 !important;
    }

    /* Tabs modal calciatore compatti */
    #modalContent .flex.gap-6 button,
    #modalContent [id*="modal-tab"] {
        padding: 0.5rem 0.75rem !important;
        font-size: 11px !important;
    }

    /* Riduci padding delle sezioni statistiche */
    #modal-content-carriera .p-6,
    #modal-content-vs .p-6 {
        padding: 0.5rem !important;
    }

    /* Big stats - più compatti */
    #modal-content-carriera .text-4xl,
    #modal-content-carriera .text-5xl {
        font-size: 1.75rem !important;
    }

    /* Tabelle nel modal - scroll orizzontale se necessario */
    #modalContent table {
        font-size: 12px !important;
    }

    #modalContent th,
    #modalContent td {
        padding: 0.35rem 0.5rem !important;
    }

    /* ====================================================================
       SIDEBAR MOBILE - SOLUZIONE DEFINITIVA
       ====================================================================
       Struttura flex-col. Funziona con TUTTE le varianti:
       - 4 div: nav + filtri-header + filtri-content + share (campionati, partite, calciatori, allenatori)
       - 5 div: nav + filtri-header + filtri-content + share + counter (squadre, arbitri)
       - 2 div: nav + share (varie)
       - 3 div: nav + info-panel + share (scommettiamo)

       Nav: griglia 3 colonne, solo icone → 4 righe (12 bottoni: 10 sezioni + CalcIA + Quiz)
       Filtri: compatti, sezione scrollabile
       Share: compatto fisso in basso
       ==================================================================== */

    /* --- FLEX LAYOUT SIDEBAR --- */
    /* Tutti i figli diretti: non si comprimono, restano alla loro altezza naturale */
    #mainSidebar > div {
        flex: 0 0 auto !important;
        overflow: visible !important;
    }

    /* UNICA ECCEZIONE: il div scrollabile (ha classe flex-1, overflow-y-auto o scroll-custom)
       prende TUTTO lo spazio restante e scrolla internamente */
    #mainSidebar > .flex-1,
    #mainSidebar > div.flex-1,
    #mainSidebar > .overflow-y-auto,
    #mainSidebar > div.overflow-y-auto,
    #mainSidebar > .scroll-custom,
    #mainSidebar > div.scroll-custom {
        flex: 1 1 0% !important;
        min-height: 0 !important;
        max-height: none !important;
        overflow-y: auto !important;
        overflow-x: hidden !important;
        padding: 0.5rem 0.6rem !important;
    }

    /* --- NAV BUTTONS: GRIGLIA 3 COLONNE, SOLO ICONE GRANDI + TOOLTIP --- */
    /* Container nav: padding compatto */
    #mainSidebar > div:first-child {
        padding: 0.35rem !important;
        border-bottom-width: 1px !important;
    }

    /* Griglia: 3 colonne, 4 righe (12 bottoni: 10 sezioni + CalcIA + Quiz) */
    /* CRITICO: override del generico "nav { max-height: 52px }" che era per la header nav */
    #mainSidebar nav.grid {
        grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
        gap: 0.25rem !important;
        max-height: none !important;
        min-height: 0 !important;
        position: static !important;
        padding: 0 !important;
        flex-wrap: wrap !important;
    }

    /* Bottone: icona + micro-etichetta */
    #mainSidebar nav.grid a,
    #mainSidebar nav.grid button {
        height: 46px !important;
        min-height: 46px !important;
        max-height: 46px !important;
        padding: 0.2rem 0.1rem !important;
        flex-direction: column !important;
        gap: 1px !important;
        justify-content: center !important;
        align-items: center !important;
    }

    /* Icona */
    #mainSidebar nav.grid a i,
    #mainSidebar nav.grid button i {
        font-size: 1.05rem !important;
        margin-bottom: 0 !important;
        width: auto !important;
        text-align: center !important;
        line-height: 1 !important;
    }

    /* Micro-etichetta sotto l'icona (sostituisce i tooltip nativi che non funzionano su mobile) */
    #mainSidebar nav.grid a span,
    #mainSidebar nav.grid button span {
        display: block !important;
        font-size: 0.55rem !important;
        line-height: 1 !important;
        opacity: 0.7;
        white-space: nowrap !important;
        overflow: hidden !important;
        text-overflow: ellipsis !important;
        max-width: 100% !important;
        text-align: center !important;
    }

    /* --- FILTRI HEADER --- */
    #mainSidebar > div.flex.justify-between {
        padding: 0.35rem 0.6rem !important;
    }

    #mainSidebar > div.flex.justify-between h3 {
        font-size: 0.7rem !important;
    }

    #mainSidebar > div.flex.justify-between h3 i {
        font-size: 0.65rem !important;
        margin-right: 0.3rem !important;
    }

    /* --- FILTRI CONTENUTO --- */
    .filters-container,
    #filterContainer {
        flex-direction: column !important;
        gap: 0.35rem !important;
    }

    .filters-container select,
    .filters-container input {
        width: 100% !important;
    }

    /* Labels compatte */
    #mainSidebar > .flex-1 label {
        font-size: 0.65rem !important;
        margin-bottom: 0.1rem !important;
    }

    /* Select/input compatti */
    #mainSidebar > .flex-1 select,
    #mainSidebar > .flex-1 input[type="text"],
    #mainSidebar > .flex-1 input[type="checkbox"] + label {
        padding: 0.25rem 0.4rem !important;
        font-size: 0.75rem !important;
        height: 30px !important;
    }

    /* Checkbox allineato */
    #mainSidebar > .flex-1 input[type="checkbox"] {
        width: 0.9rem !important;
        height: 0.9rem !important;
    }

    /* Spazio tra filtri ridotto */
    #mainSidebar > .flex-1.space-y-4 > * {
        margin-top: 0.35rem !important;
    }

    /* Grid 2 colonne dentro filtri (es. nazionalità + periodo) */
    #mainSidebar > .flex-1 .grid.grid-cols-2 {
        gap: 0.3rem !important;
    }

    /* Bottone resetta/azzera compatto */
    #mainSidebar > .flex-1 button:not(.md\\:hidden) {
        padding: 0.3rem 0.4rem !important;
        font-size: 0.7rem !important;
    }

    /* --- SHARE BUTTON COMPATTO --- */
    #mainSidebar > div:last-child {
        padding: 0.3rem 0.5rem !important;
    }

    #mainSidebar > div:last-child button {
        padding: 0.4rem 0.5rem !important;
        font-size: 0.75rem !important;
        gap: 0.3rem !important;
    }

    #mainSidebar > div:last-child button span {
        display: inline !important;
        font-size: 0.7rem !important;
    }

    /* --- STATISTICHE / STATS BOX --- */
    .stats-grid,
    .stat-boxes {
        grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
        gap: 0.5rem !important;
    }

    .stat-box {
        padding: 0.75rem !important;
    }

    .stat-box .text-3xl,
    .stat-box .text-4xl {
        font-size: 1.5rem !important;
    }

    /* --- PAGINAZIONE --- */
    .pagination {
        flex-wrap: wrap;
        justify-content: center;
        gap: 0.25rem;
    }

    .pagination button {
        padding: 0.5rem 0.75rem !important;
        font-size: 12px !important;
    }

    /* --- BOTTONI (NON nella Home) --- */
    body:not(.home-page) button,
    body:not(.home-page) .btn {
        padding: 0.5rem 1rem !important;
        font-size: 14px !important;
    }

    /* --- CHARTS --- */
    canvas {
        max-height: 250px !important;
    }

    /* --- SEARCH --- */
    #searchInput,
    input[type="search"],
    .search-input {
        width: 100% !important;
        font-size: 16px !important; /* Previene zoom su iOS */
    }

    /* --- CALCIATORI: VIEW COMPARE (VS) --- */
    /* Assicura che i campi di ricerca non siano coperti dalla navbar con tab wrappati */
    #view-compare {
        padding-top: 2.5rem !important;
        margin-top: 0 !important;
    }

    #view-compare .grid.grid-cols-1.md\:grid-cols-2 {
        position: relative !important;
        z-index: 40 !important;
        background: transparent !important;
        margin-bottom: 0.5rem !important;
    }

    #view-compare #searchP1,
    #view-compare #searchP2 {
        position: relative !important;
        z-index: 45 !important;
    }

    #view-compare #listP1,
    #view-compare #listP2 {
        z-index: 100 !important;
    }

    /* --- CALCIATORI: INFOGRAFICHE --- */
    /* Forza grid a 1 colonna su mobile per evitare fluttuazione */
    #statsInfograficheContainer > div.grid {
        display: grid !important;
        grid-template-columns: minmax(0, 1fr) !important;
        gap: 1rem !important;
    }

    #statsInfograficheContainer .bg-slate-800 {
        width: 100% !important;
        max-width: 100% !important;
        min-width: 0 !important;
    }

    /* Grafici chart ridotti su mobile */
    #statsInfograficheContainer canvas {
        max-height: 300px !important;
    }

    #statsInfograficheContainer div[style*="height: 400px"] {
        height: 300px !important;
    }

    #statsInfograficheContainer div[style*="height: 250px"] {
        height: 200px !important;
    }

    /* Tabella squadre su 1 colonna */
    #tabellaSquadre {
        grid-template-columns: minmax(0, 1fr) !important;
    }

    /* --- PARTITE DETTAGLIO MODALE --- */

    /* Container principale score - layout verticale su mobile */
    #matchModal .flex.items-center.justify-center.gap-8 {
        flex-direction: column !important;
        gap: 1rem !important;
    }

    /* Squadra casa e ospite - layout compatto */
    #matchModal .flex.flex-col.items-center.gap-2 {
        width: 100%;
    }

    /* Riga con stemma e nome - centrata e compatta */
    #matchModal .flex.items-center.gap-3 {
        flex-wrap: wrap;
        justify-content: center;
        gap: 0.5rem !important;
    }

    /* Stemmi più piccoli su mobile */
    #matchModal img.w-16.h-16,
    #matchModal img[src*="stemmi"] {
        width: 40px !important;
        height: 40px !important;
        min-width: 40px;
    }

    /* Nomi squadre più piccoli */
    /* ★★★ 25/08/2026 — IL NOME VA A CAPO, NON SI TRONCA (Fabio: «preferisco vedere dei
       caratteri, quando necessario, più piccoli che non abbreviazioni assurde»).
       Qui c'era `nowrap` + ellipsis: un nome lungo diventava «Campania Puteo…» e nessuno
       poteva sapere chi fosse. Con l'a capo il nome esce intero su due righe. */
    #matchModal .text-2xl.font-bold.text-white {
        font-size: 1rem !important;
        max-width: 120px;
        overflow-wrap: anywhere;
        white-space: normal;
    }

    /* Risultato più compatto */
    #matchModal .text-5xl.font-black {
        font-size: 2.5rem !important;
    }

    #matchModal .text-3xl.text-slate-600 {
        font-size: 1.5rem !important;
    }

    /* Container risultato in riga */
    #matchModal .flex.items-center.gap-4.flex-shrink-0 {
        gap: 1rem !important;
    }

    /* Marcatori più piccoli
       ⚠️ 13/09/2026 — da 0,75rem (12 px) a 15: i marcatori ora si vedono anche sotto i 380 px, e 12 px per
          utenti over 50 non è un testo da leggere. */
    #matchModal .text-base.text-green-400 {
        font-size: 15px !important;
    }

    /* 🔴 13/09/2026 — Fabio: «mancano i marcatori!!!!». Sotto i 380 px (cioè su quasi ogni telefono: 375)
         l'intestazione NASCONDEVA i marcatori «per evitare overflow». Ma lì le squadre sono già una sopra
         l'altra: lo spazio c'è. Un dato tolto per paura dell'impaginato è un dato che manca. */

    /* --- FORMAZIONI 2D --- */
    .formation-container {
        transform: scale(0.7) !important;
        transform-origin: top center;
    }

    /* --- CAMPO 3D: OVERLAY RUOTA SCHERMO --- */
    /* Targetizza il container del campo con campetto.png */
    div[style*="campetto.png"],
    div[style*="height: 600px"][style*="background"],
    .field-3d-container {
        position: relative !important;
        height: 300px !important; /* Più piccolo su mobile verticale */
    }

    /* Overlay messaggio rotazione — solo campo 3D Partite */
    .field-3d-container::before {
        content: "📱 Ruota il telefono in orizzontale per vedere meglio le formazioni";
        position: absolute;
        bottom: 0;
        left: 0;
        right: 0;
        background: linear-gradient(transparent, rgba(15, 23, 42, 0.95));
        color: #fbbf24;
        display: flex;
        align-items: flex-end;
        justify-content: center;
        text-align: center;
        padding: 1rem;
        font-size: 0.85rem;
        font-weight: 600;
        z-index: 50;
        pointer-events: none;
    }

    /* ============================================================================
       CAMPIONATI HEADER - Adatta la header con il dropdown vista
       ============================================================================ */
    header:has(#mainViewToggle) {
        max-height: none !important;
        height: auto !important;
        min-height: 44px !important;
        flex-wrap: wrap !important;
        padding: 0.35rem 0.5rem !important;
        gap: 0.35rem !important;
    }

    /* Titolo CAMPIONATI più compatto su mobile */
    header:has(#mainViewToggle) h1 {
        font-size: 1.1rem !important;
    }

    /* Dropdown mainview nella header */
    #mobile-dd-campionati-mainview {
        flex: 1 1 auto !important;
        min-width: 120px !important;
    }

    /* ============================================================================
       MOBILE DROPDOWN TABS
       ============================================================================ */

    /* Dropdown che sostituisce i tab su mobile */
    select.mobile-tab-dropdown {
        display: block !important;
        width: 100% !important;
        padding: 0.6rem 2.5rem 0.6rem 0.75rem !important;
        font-size: 15px !important;
        font-weight: 600 !important;
        /* ★ I COLORI SEGUONO IL TEMA (Fabio, 19 agosto 2026: «tutte le schermate di
           campionato in tema chiaro hanno i fondi neri, orribile… anche le barre dei
           menu»). Erano tre hex fissi con !important: nessun override poteva arrivarci,
           e su fondo bianco restava una barra nera. */
        color: var(--ndc-text) !important;
        background-color: var(--ndc-bg-elev) !important;
        border: 1px solid var(--ndc-border) !important;
        border-radius: 0.5rem !important;
        appearance: none !important;
        -webkit-appearance: none !important;
        -moz-appearance: none !important;
        background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 20 20' fill='%2394a3b8'%3E%3Cpath fill-rule='evenodd' d='M5.23 7.21a.75.75 0 011.06.02L10 11.168l3.71-3.938a.75.75 0 111.08 1.04l-4.25 4.5a.75.75 0 01-1.08 0l-4.25-4.5a.75.75 0 01.02-1.06z'/%3E%3C/svg%3E") !important;
        background-repeat: no-repeat !important;
        background-position: right 0.75rem center !important;
        background-size: 1.25rem !important;
        margin-bottom: 0.5rem !important;
        min-height: 44px !important;
        cursor: pointer !important;
        /* ⚠️ `color-scheme` decide il colore della tendina NATIVA che il sistema apre
           quando la si tocca: lasciandolo `dark` in tema chiaro il menu si apriva nero.
           Non è impostabile con una variabile: si dichiara per tema, qui sotto. */
        /* il tema lo decidono le tre regole qui sotto, non questa riga */
        -webkit-text-fill-color: var(--ndc-text) !important;
        opacity: 1 !important;
        line-height: 1.4 !important;
    }

    body.bg-slate-50 select.mobile-tab-dropdown  { color-scheme: light !important; }
    body.bg-slate-900 select.mobile-tab-dropdown,
    body.bg-black select.mobile-tab-dropdown     { color-scheme: dark  !important; }

    /* 🔴🔴★★★ IL COLORE DEL TESTO SCRITTO PER TEMA, NON PRESO DA UNA VARIABILE
       (Fabio, 3 settembre 2026, provando sul telefono: «la voce di menu non si legge,
       il maledetto carattere chiaro su tema bianco»).
     ★ `--ndc-text` vale `#e2e8f0` sul `:root` (tema scuro) e `#1e293b` sul
       `body.bg-slate-50` (tema chiaro): il valore giusto arriva SOLO per eredità dal
       body. In Chrome arriva — misurato, contrasto 12,35 — su iPhone no, e il risultato
       è testo chiarissimo su fondo chiaro: illeggibile.
     ★ Non serve capire quale anello della catena si spezza su iOS: si toglie la catena.
       Il colore di un COMANDO non si fa dipendere da un'eredità, si scrive per tema —
       come già si fa qui sopra per `color-scheme`.
     ⚠️ E vale anche per `-webkit-text-fill-color` e per le `option`: su iOS è il primo a
        comandare, e la tendina aperta disegna le option, non il select. */
    body.bg-slate-50 select.mobile-tab-dropdown,
    body.bg-slate-50 select.mobile-tab-dropdown option {
        color: #1e293b !important;
        -webkit-text-fill-color: #1e293b !important;
    }
    body.bg-slate-900 select.mobile-tab-dropdown,
    body.bg-slate-900 select.mobile-tab-dropdown option {
        color: #e2e8f0 !important;
        -webkit-text-fill-color: #e2e8f0 !important;
    }
    body.bg-black select.mobile-tab-dropdown,
    body.bg-black select.mobile-tab-dropdown option {
        color: #f1f5f9 !important;
        -webkit-text-fill-color: #f1f5f9 !important;
    }

    select.mobile-tab-dropdown option {
        background-color: var(--ndc-bg-elev) !important;
        color: var(--ndc-text) !important;
        font-size: 15px !important;
        padding: 0.5rem !important;
    }

    select.mobile-tab-dropdown:focus {
        outline: none !important;
        border-color: #a855f7 !important;
        box-shadow: 0 0 0 2px rgba(168, 85, 247, 0.3) !important;
    }

    /* Nasconde i tab originali quando c'è il dropdown */
    .mobile-tabs-original,
    .mobile-tabs-original.flex,
    .mobile-tabs-original.overflow-x-auto,
    .mobile-tabs-original.border-b,
    nav .mobile-tabs-original,
    main .mobile-tabs-original,
    div > .mobile-tabs-original,
    .border-b.mobile-tabs-original,
    .flex.mobile-tabs-original,
    #mainViewContainer > .mobile-tabs-original,
    .dashboard-tabs .mobile-tabs-original,
    #mainViewToggle.mobile-tabs-original,
    header .mobile-tabs-original {
        display: none !important;
        visibility: hidden !important;
        height: 0 !important;
        overflow: hidden !important;
        margin: 0 !important;
        padding: 0 !important;
    }

    /* ============================================================================
       LEGENDA TABELLE MOBILE
       ============================================================================ */
    .mobile-legend {
        padding: 0.4rem 0.6rem !important;
        margin-top: 0.35rem !important;
        font-size: 10px !important;
        color: #94a3b8 !important;
        background: rgba(30, 41, 59, 0.7) !important;
        border: 1px solid #334155 !important;
        border-radius: 0.375rem !important;
        line-height: 1.6 !important;
        word-break: break-word !important;
    }

    .mobile-legend strong {
        color: #fbbf24 !important;
        font-weight: 700 !important;
    }

    .mobile-legend-sep {
        color: #475569 !important;
        margin: 0 0.15rem !important;
    }

    /* ============================================================================
       TAP-TO-FULLSCREEN HINT
       ============================================================================ */
    .tap-fullscreen-hint {
        text-align: center !important;
        padding: 0.3rem !important;
        font-size: 10px !important;
        color: #64748b !important;
        background: rgba(30, 41, 59, 0.5) !important;
        border-radius: 0.25rem 0.25rem 0 0 !important;
    }

    .tap-fullscreen-hint i {
        margin-right: 0.25rem !important;
        color: #60a5fa !important;
    }

    /* ============================================================================
       COLONNE OTTIMIZZATE PER ABBREVIAZIONI
       ============================================================================ */
    .col-pos {
        width: 28px !important;
        min-width: 28px !important;
        max-width: 32px !important;
        text-align: center !important;
    }

    /* ★ il nome della persona: a capo, non troncato (25/08/2026) */
    .col-nome {
        width: 110px !important;
        max-width: 120px !important;
        min-width: 100px !important;
        overflow-wrap: anywhere !important;
        white-space: normal !important;
    }

    /* ★ la squadra: a capo, non troncata (25/08/2026) */
    .col-squadra {
        width: 80px !important;
        max-width: 90px !important;
        min-width: 70px !important;
        overflow-wrap: anywhere !important;
        white-space: normal !important;
    }

    .col-num {
        width: 36px !important;
        max-width: 40px !important;
        min-width: 32px !important;
        text-align: center !important;
    }

    /* ============================================================================
       HOME PAGE - Layout ottimizzato per mobile (iPhone 390px)
       ============================================================================ */
    body.home-page {
        padding: 0.75rem !important;
    }

    /* Header della home - NESSUN max-height, layout verticale libero */
    body.home-page header {
        position: relative !important;
        max-height: none !important;
        padding: 0 !important;
        flex-wrap: wrap !important;
        margin-bottom: 0.75rem !important;
    }

    /* Logo home su mobile — ben visibile */
    body.home-page header img {
        height: 110px !important;
        max-height: 110px !important;
    }

    /* Margine sotto logo ridotto */
    body.home-page header .mb-2 {
        margin-bottom: 0.25rem !important;
    }

    /* Titolo compatto */
    body.home-page h1 {
        font-size: 1.25rem !important;
        margin-bottom: 0.25rem !important;
    }

    /* Sottotitolo "by Fabio Lo Cascio" */
    body.home-page header p.mb-1 {
        margin-bottom: 0.35rem !important;
    }

    /* Selettore tema compatto */
    body.home-page header .inline-flex {
        padding: 0.35rem 0.75rem !important;
    }

    /* Grid delle card - gap ridotto */
    body.home-page .grid {
        gap: 0.5rem !important;
    }

    /* Card padding ridotto su mobile */
    body.home-page .grid > a {
        padding: 0.75rem !important;
        border-radius: 0.75rem !important;
    }

    /* Icone card più piccole */
    body.home-page .grid > a .w-10.h-10 {
        width: 2rem !important;
        height: 2rem !important;
        font-size: 0.85rem !important;
        margin-bottom: 0.35rem !important;
    }

    /* Titoli card */
    body.home-page .grid > a h2 {
        font-size: 0.85rem !important;
        margin-bottom: 0 !important;
    }

    /* Footer compatto */
    body.home-page footer {
        margin-top: 1rem !important;
    }

    /* QUIZ card - più compatta */
    body.home-page .grid > a.col-span-2 {
        padding: 0.65rem 0.75rem !important;
    }

    body.home-page .grid > a .w-12.h-12 {
        width: 2.5rem !important;
        height: 2.5rem !important;
    }

    /* Desktop overrides (classi md: attive solo su desktop) */
    body.home-page .mb-12 {
        margin-bottom: 2rem !important;
    }

    body.home-page .p-8 {
        padding: 1.25rem !important;
    }

    body.home-page .gap-8 {
        gap: 1rem !important;
    }

    body.home-page .mt-16 {
        margin-top: 2rem !important;
    }
}


/* Su desktop nascondi dropdown e legenda */
@media (min-width: 768px) {
    select.mobile-tab-dropdown,
    .mobile-tab-dropdown {
        display: none !important;
    }
    .mobile-tabs-original,
    .mobile-tabs-original.flex,
    .mobile-tabs-original.overflow-x-auto,
    .mobile-tabs-original.border-b,
    #mainViewToggle.mobile-tabs-original,
    header .mobile-tabs-original {
        display: flex !important;
        visibility: visible !important;
        height: auto !important;
        overflow: visible !important;
        margin: revert !important;
        padding: revert !important;
    }
    .mobile-legend {
        display: none !important;
    }
    .tap-fullscreen-hint {
        display: none !important;
    }
}

/* ============================================================================
   SCHERMI PICCOLI (6.3" e inferiori) - OTTIMIZZAZIONI EXTRA
   ============================================================================ */
@media (max-width: 390px) {
    /* Font ancora più compatti */
    table {
        font-size: 10px !important;
    }

    th, td {
        padding: 0.25rem 0.15rem !important;
    }

    /* Colonne più strette */
    .col-nome {
        width: 16ch !important;
        max-width: 16ch !important;
        min-width: 80px !important;
    }

    .col-squadra {
        width: 10ch !important;
        max-width: 10ch !important;
        min-width: 60px !important;
    }

    .col-num {
        width: 4ch !important;
        max-width: 32px !important;
        min-width: 26px !important;
    }

    /* Container tabelle con altezza ridotta — ESCLUSO classifica campionati */
    .overflow-x-auto:not(.finestra-scroll),
    .overflow-auto:not(.finestra-scroll),
    .table-container:not(.finestra-scroll),
    div:has(> table):not(#classifica-container):not(.finestra-scroll) {
        max-height: 60vh !important;
    }
    /* ⚠️ Una MODALE si dimensiona da sé (max-h-[92vh] sul pannello): un tetto di
       60vh sul suo corpo la taglia a meta. Vedi la nota su .finestra-scroll sopra. */

    /* 🔴 E NON BASTA ESCLUDERE IL CORPO: il tetto colpisce anche i WRAPPER DI
       TABELLA che stanno DENTRO la modale (Fabio, 13 ago 2026: «l'atalanta in B
       nel 1939-40, mancano un sacco di partite»). Le 34 partite c'erano tutte —
       nel db, nell'API e nel DOM — ma ogni colonna era una tabella alta 669 px
       dentro un wrapper tappato a 487 con overflow-y:hidden: se ne vedevano 12
       su 17 e le altre non erano raggiungibili NEMMENO scrollando.
       ★ Il tetto va tolto ai discendenti, non solo all'elemento marcato. */
    /* ⚠️ IL `:not(#_)` NON E UN REFUSO: serve ad ALZARE LA SPECIFICITA.
       La regola qui sopra contiene `:not(#classifica-container)`, e un id dentro
       :not() CONTA come id: senza questo contrappeso vinceva lei e il tetto di
       60vh restava, con la correzione che sembrava applicata e non lo era. */
    .finestra-scroll .overflow-x-auto:not(#_),
    .finestra-scroll .overflow-auto:not(#_),
    .finestra-scroll .table-container:not(#_),
    .finestra-scroll div:has(> table):not(#_) {
        max-height: none !important;
    }
    /* Classifica campionati: scroll libero gestito da #contentArea */
    #classifica-container {
        max-height: none !important;
        overflow: visible !important;
    }
}

/* ============================================================================
   LANDSCAPE MOBILE - SOLO SIDEBAR NASCOSTA
   ============================================================================ */
@media (max-width: 900px) and (orientation: landscape) {

    /* Sidebar nascosta di default in landscape */
    #mainSidebar,
    aside#mainSidebar {
        transform: translateX(-100%) !important;
        -webkit-transform: translateX(-100%) !important;
    }

    /* Override per sidebar aperta via hamburger */
    #mainSidebar.sidebar-open,
    aside#mainSidebar.sidebar-open {
        transform: translateX(0) !important;
        -webkit-transform: translateX(0) !important;
    }
}

/* ============================================================================
   INFOGRAFICHE GRID - RESPONSIVE (classe dedicata)
   ============================================================================ */
.infografiche-grid {
    display: grid !important;
    gap: 1.5rem !important;
}

@media (min-width: 768px) {
    .infografiche-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    }
}

@media (max-width: 767px) {
    .infografiche-grid {
        grid-template-columns: minmax(0, 1fr) !important;
    }
}

/* ★★ LE LINGUETTE VANNO A CAPO, NON DI LATO (29 luglio 2026)
   Le strisce di linguette nascono `flex … overflow-x-auto whitespace-nowrap`:
   quando non ci stanno non si riordinano, si mettono in fila dietro una barra di
   scorrimento orizzontale che nessuno cerca. Non è un caso della fascia stretta —
   misurato a 1440 px con la barra laterale aperta, Storia & Confronti chiedeva
   1.188 px e ne aveva 1.089: «Statistiche di campo» era invisibile sul desktop
   pieno, da sempre.
   Sotto i 768 px non si tocca niente: lì `mobile-dropdown-tabs.js` sostituisce già
   la striscia con un menù a tendina, che a quelle larghezze è la scelta giusta.
   ★ `:has()` guarda il contenitore attraverso i figli: le strisce non hanno una
   classe propria: si riconoscono solo da quello che contengono. */
@media (min-width: 768px) {
    div:has(> .tab-btn),
    div:has(> .tab-pill),
    div:has(> .spareggi-subtab-btn) {
        flex-wrap: wrap !important;
        overflow-x: visible !important;
    }
}

/* ⚠️★ UNA GRIGLIA DI RIGHE HA COMUNQUE UNA COLONNA (29 luglio 2026)
   `<main id="mainContainer" class="grid grid-rows-[auto_auto_auto_1fr]">` dichiara
   le righe e tace sulle colonne. La colonna implicita vale `auto`, e una traccia
   `auto` NON scende sotto il min-content dei figli: l'intestazione di Campionati
   ne chiede 638 px, quindi il main restava largo 638 anche quando ne aveva 480 —
   e i 158 px di troppo li tagliava `overflow:hidden`, in silenzio.
   `minmax(0, 1fr)` toglie quel pavimento e la colonna segue il contenitore.
   ★ Nota: `min-w-0` sul main non bastava — riguarda il main dentro al suo flex
   padre, non i figli dentro alla griglia del main. Il pavimento era un piano più
   sotto di dove si guardava. */
main.grid[class*="grid-rows"] {
    grid-template-columns: minmax(0, 1fr);
}

/* ============================================================================
   TABLET - max-width: 1024px
   ============================================================================ */
@media (max-width: 1024px) and (min-width: 768px) {

    /* ★★★ LA BARRA LATERALE QUI È UN MENÙ A SCOMPARSA (29 luglio 2026)
       Prima era una colonna che spingeva il contenuto: 288 px su 768 sono il
       37% della finestra, e all'area di lavoro ne restavano 480 — meno di un
       telefono girato. Misurato in quello stato: l'intestazione di Campionati
       usciva di 158 px, le linguette di Varie di 791.
       Fabio: «con questo tipo di formato pagina non puoi trasformare la side
       bar in un drop menu?». Sì — e il meccanismo esisteva già due volte:
       sotto i 767 px la barra è fuori dal flusso con velo e scorrimento, e
       `app.toggleSidebar` in auth-global.js dichiara da sé
       `isOverlayMode = window.innerWidth < 1024`. Mancava solo il CSS: qui
       sopra i 767 px la barra tornava colonna e l'intenzione cadeva.
       ⚠️ La regola precedente («width: 200px») non arrivava mai a valere: lo
       stile che components.js inietta a runtime ha lo stesso peso ed entra
       dopo. Da qui `body #mainSidebar`, che vince per specificità e non per
       ordine di caricamento. */
    body #mainSidebar,
    body #mainSidebar.sidebar-desktop-collapsed {
        position: fixed !important;
        left: 0;
        top: 0;
        bottom: 0;
        width: 280px !important;
        min-width: 280px !important;
        max-width: 85vw !important;
        height: 100vh !important;
        height: 100dvh !important;
        z-index: 9998 !important;
        overflow: hidden !important;
        transition: transform 0.3s ease !important;
    }

    body #mainSidebar.sidebar-closed {
        transform: translateX(-100%) !important;
    }

    body #mainSidebar.sidebar-open {
        transform: translateX(0) !important;
        box-shadow: 10px 0 40px rgba(0, 0, 0, 0.5);
    }

    /* Il velo che chiude toccando fuori: nasce `hidden md:hidden`, quindi
       sopra i 768 px resterebbe spento anche dopo che il JS toglie `hidden`. */
    #sidebarOverlay:not(.hidden) {
        display: block !important;
    }

    /* Il pulsante che lo apre (nasce `md:hidden`) e la freccia «riduci a 52 px»,
       che fuori dal flusso non vuol dire più niente. */
    nav button.md\:hidden,
    button[onclick*="toggleSidebar"],
    #menuToggle,
    .menu-toggle {
        display: inline-flex !important;
    }

    #sidebar-desktop-toggle {
        display: none !important;
    }

    /* Grid a 2 colonne */
      /* ⚠️★ LA GRIGLIA CHE MANGIAVA LA PAGINA (29 luglio 2026)
         `.grid` da solo prende OGNI griglia del sito — compreso lo scheletro:
         `<body class="grid grid-rows-[auto_1fr]">` e `<main id="mainContainer"
         class="grid grid-rows-...">`. Fra 768 e 1024 px il body diventava così una
         griglia a DUE COLONNE invece che a due righe: la barra laterale finiva in
         una colonna, il contenuto nell'altra ridotto a 162 px su 900, e sotto
         restava mezzo schermo vuoto. Misurato: `gridTemplateColumns` del body
         valeva `450px 450px`.
         ★ È la stessa mina del 27 luglio («le schermate galleggiano»), una fascia
         più su: allora fu chiusa sotto i 767 px, qui era rimasta.
         La guardia esclude chi dichiara da sé le proprie tracce — chi scrive
         `grid-rows-*` o `grid-cols-*` sa già come vuole disporsi, e non va corretto
         da una regola generica. */
    .grid:not(body):not([class*="grid-rows"]):not([class*="grid-cols"]) {
        grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    }

    /* Cards leggermente più piccole */
    .coach-card,
    .player-card {
        padding: 1rem !important;
    }

    /* Statistiche 3 colonne */
    .stats-grid {
        grid-template-columns: repeat(3, minmax(0, 1fr)) !important;
    }

    /* Tabelle con font leggermente più piccolo */
    table {
        font-size: 13px !important;
    }

    /* Prima colonna sticky anche su tablet */
    table th:first-child,
    table td:first-child {
        position: sticky !important;
        left: 0 !important;
        z-index: 10 !important;
        background: #1e293b !important;
    }

    /* Modali più larghe */
    .modal-content {
        max-width: 90vw !important;
    }

    /* Tabs scrollabili anche su tablet */
    .tabs-container,
    [class*="tabs"] {
        overflow-x: auto !important;
        flex-wrap: nowrap !important;
    }
}

/* ============================================================================
   LANDSCAPE MOBILE - Orientamento orizzontale
   ============================================================================ */
@media (max-width: 900px) and (orientation: landscape) {

    /* Sidebar sempre nascosta in landscape mobile */
    #mainSidebar {
        transform: translateX(-100%) !important;
        -webkit-transform: translateX(-100%) !important;
    }

    /* Modali più basse */
    .modal-content {
        max-height: 80vh !important;
    }

    /* Header più compatto */
    nav {
        padding: 0.25rem 0.5rem !important;
    }

    /* Nascondi elementi non essenziali in landscape */
    .hide-landscape {
        display: none !important;
    }
}

/* ============================================================================
   UTILITÀ RESPONSIVE
   ============================================================================ */

/* Classi per nascondere/mostrare elementi */
/* NOTA: NON sovrascrivere i prefissi sm:/md: di Tailwind CDN qui!
   Il CDN genera già le media query corrette:
   @media (min-width: 640px) { .sm\:block { display: block; } }
   Aggiungere regole custom con max-width invertiva il comportamento,
   mostrando gli elementi su mobile invece di nasconderli.
   Rimosso in v2.5.0 — 24/03/2026 */

@media (min-width: 768px) {
    .sm\:show { display: block !important; }
    .mobile-only { display: none !important; }
}

@media (min-width: 1025px) {
    .lg\:show { display: block !important; }
    .tablet-only { display: none !important; }
}

/* Touch-friendly: target minimo 44px */
@media (pointer: coarse) {
    button,
    a,
    input[type="checkbox"],
    input[type="radio"],
    select {
        min-height: 44px;
        min-width: 44px;
    }

    /* Link nelle tabelle */
    td a {
        display: inline-block;
        padding: 0.5rem;
    }
}

/* Disabilita hover su touch devices */
@media (hover: none) {
    .hover\:bg-slate-700:hover,
    .hover\:border-blue-500:hover {
        background-color: inherit;
        border-color: inherit;
    }
}

/* Safe area per notch iPhone */
@supports (padding: env(safe-area-inset-bottom)) {
    #mainSidebar {
        padding-bottom: env(safe-area-inset-bottom);
    }

    .fixed-bottom {
        padding-bottom: calc(1rem + env(safe-area-inset-bottom));
    }
}

/* ============================================================================
   SIDEBAR NAVIGATION - LABEL PIÙ GRANDI, MAIUSCOLO, ALLINEATE A SINISTRA
   ============================================================================ */

/* Container link nella sidebar - allineamento a sinistra */
#mainSidebar nav a,
#mainSidebar nav button,
nav.grid a,
nav.grid button {
    justify-content: flex-start !important;
    text-align: left !important;
}

/* Label ambienti nella sidebar - maiuscolo e più grandi */
#mainSidebar nav a span,
#mainSidebar nav button span,
#mainSidebar .nav-label,
nav.grid a span,
nav.grid button span {
    font-size: 1rem !important; /* 16px */
    font-weight: 600 !important;
    text-transform: uppercase !important;
    letter-spacing: 0.025em !important;
}

/* Desktop: label ancora più leggibili */
@media (min-width: 768px) {
    #mainSidebar nav a span,
    #mainSidebar nav button span,
    nav.grid a span,
    nav.grid button span {
        font-size: 1.0625rem !important; /* 17px */
        font-weight: 700 !important;
    }
}

/* Override per classi text-xs e text-sm nella sidebar */
#mainSidebar nav .text-xs,
#mainSidebar nav .text-sm {
    font-size: 1rem !important;
    text-transform: uppercase !important;
}

/* ============================================================================
   LANDSCAPE: NASCONDI OVERLAY TABELLE (utente ha già ruotato)
   ============================================================================ */
@media (orientation: landscape) {
    .table-container::after,
    .overflow-x-auto:has(table)::after,
    div:has(> table.wide-table)::after {
        display: none !important;
    }
}

/* ============================================================================
   DESKTOP: NASCONDI OVERLAY TABELLE
   ============================================================================ */
@media (min-width: 768px) {
    .table-container::after,
    .overflow-x-auto:has(table)::after,
    div:has(> table.wide-table)::after {
        display: none !important;
    }
}

/* ============================================================================
   TAB FULLSCREEN MODAL - Apre contenuto tab in finestra modale espansa
   ============================================================================ */

/* Modal overlay per tab fullscreen */
.tab-fullscreen-overlay {
    position: fixed;
    inset: 0;
    background: rgba(0, 0, 0, 0.85);
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
    z-index: 9999;
    display: flex;
    flex-direction: column;
    opacity: 0;
    visibility: hidden;
    transition: opacity 0.25s ease, visibility 0.25s ease;
}

.tab-fullscreen-overlay.active {
    opacity: 1;
    visibility: visible;
}

/* Header del modal fullscreen */
.tab-fullscreen-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0.75rem 1rem;
    background: linear-gradient(to bottom, rgba(15, 23, 42, 0.98), rgba(30, 41, 59, 0.95));
    border-bottom: 1px solid rgba(71, 85, 105, 0.5);
    flex-shrink: 0;
}

.tab-fullscreen-title {
    font-size: 1.25rem;
    font-weight: 700;
    color: #f8fafc;
    display: flex;
    align-items: center;
    gap: 0.5rem;
}

.tab-fullscreen-title i {
    color: #f97316;
}

.tab-fullscreen-close {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: rgba(239, 68, 68, 0.2);
    border: 1px solid rgba(239, 68, 68, 0.4);
    color: #f87171;
    font-size: 1.25rem;
    cursor: pointer;
    display: flex;
    align-items: center;
    justify-content: center;
    transition: all 0.2s ease;
}

.tab-fullscreen-close:hover {
    background: rgba(239, 68, 68, 0.4);
    color: #fecaca;
    transform: scale(1.1);
}

/* Contenuto del modal fullscreen */
.tab-fullscreen-content {
    flex: 1;
    overflow: auto;
    padding: 1rem;
    background: #0f172a;
    -webkit-overflow-scrolling: touch;
}


/* === STILI MODAL FULLSCREEN v2 - TIPI: table | card | interactive === */

/* Immagini nel modal: dimensione universale */
.tab-fullscreen-content img {
    max-width: 28px;
    max-height: 28px;
    object-fit: contain;
}

/* === TYPE: TABLE — tabelle dati, classifica, statistiche === */

.tab-fullscreen-content [data-fullscreen="table"] {
    font-size: 18px;
}

.tab-fullscreen-content [data-fullscreen="table"] table {
    width: 100% !important;
    font-size: 18px !important;
    table-layout: auto !important;
    border-collapse: collapse;
}

.tab-fullscreen-content [data-fullscreen="table"] th,
.tab-fullscreen-content [data-fullscreen="table"] td {
    padding: 0.6rem 0.8rem !important;
    white-space: nowrap;
    text-overflow: ellipsis;
    overflow: hidden;
}

.tab-fullscreen-content [data-fullscreen="table"] th {
    background: #1e293b !important;
    color: #e2e8f0;
    font-weight: 700;
    text-transform: uppercase;
    font-size: 14px !important;
    letter-spacing: 0.05em;
}

.tab-fullscreen-content [data-fullscreen="table"] td {
    font-size: 18px !important;
    font-weight: 500;
}

.tab-fullscreen-content [data-fullscreen="table"] tbody tr {
    border-bottom: 1px solid rgba(71, 85, 105, 0.3);
}

.tab-fullscreen-content [data-fullscreen="table"] tbody tr:hover {
    background: rgba(51, 65, 85, 0.5);
}

/* Text size boost per TABLE */
.tab-fullscreen-content [data-fullscreen="table"] .text-xs   { font-size: 16px !important; }
.tab-fullscreen-content [data-fullscreen="table"] .text-sm   { font-size: 18px !important; }
.tab-fullscreen-content [data-fullscreen="table"] .text-base { font-size: 20px !important; }
.tab-fullscreen-content [data-fullscreen="table"] .text-lg   { font-size: 22px !important; }
.tab-fullscreen-content [data-fullscreen="table"] .text-xl   { font-size: 26px !important; }
.tab-fullscreen-content [data-fullscreen="table"] .text-2xl  { font-size: 30px !important; }
.tab-fullscreen-content [data-fullscreen="table"] .font-bold,
.tab-fullscreen-content [data-fullscreen="table"] .font-semibold { font-size: 18px !important; }

/* Flex: nessun override di width — i pure HTML table si espandono già con table{width:100%}
   Rimuovere width:100% su .flex evita di rompere inner-flex (badge div, stat boxes in card) */

/* Fix altezze TABLE */
.tab-fullscreen-content [data-fullscreen="table"] > div {
    max-height: none !important;
    height: auto !important;
    width: 100% !important;
}
.tab-fullscreen-content [data-fullscreen="table"] .overflow-y-auto,
.tab-fullscreen-content [data-fullscreen="table"] .overflow-auto {
    max-height: none !important;
    overflow: visible !important;
}

/* Grid "Le Giornate" dentro tab-classifica (TABLE type) */
.tab-fullscreen-content [data-fullscreen="table"] .grid.lg\:grid-cols-2,
.tab-fullscreen-content [data-fullscreen="table"] .grid.grid-cols-1.lg\:grid-cols-2 {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    gap: 2rem !important;
    width: 100% !important;
}
.tab-fullscreen-content [data-fullscreen="table"] .grid.lg\:grid-cols-2 > div,
.tab-fullscreen-content [data-fullscreen="table"] .grid.grid-cols-1.lg\:grid-cols-2 > div {
    width: 100% !important;
    min-width: 0 !important;
}
.tab-fullscreen-content [data-fullscreen="table"] #dailyResultsGrid {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) !important;
    gap: 0.5rem !important;
}
.tab-fullscreen-content [data-fullscreen="table"] .h-\[1000px\] {
    height: auto !important;
    min-height: 400px !important;
}

/* Dark card background TABLE */
.tab-fullscreen-content [data-fullscreen="table"] .bg-slate-800 {
    background: #1e293b !important;
}

/* Nascondi solo i selettori colonne MobileCols nel modal TABLE (non i sub-tab utente) */
.tab-fullscreen-content [data-fullscreen="table"] .marcatori-sub-tab-btn,
.tab-fullscreen-content [data-fullscreen="table"] .filters-container {
    display: none !important;
}

/* === TYPE: CARD — territori, formazione top, tabellone, calendario, rosa === */

.tab-fullscreen-content [data-fullscreen="card"] {
    font-size: 15px;
}

/* Territori: stat box compatte (numeri grandi non sbordano) */
.tab-fullscreen-content [data-fullscreen="card"] #cittaCardsContainer .tabular-nums,
.tab-fullscreen-content [data-fullscreen="card"] #regioniCardsContainer .tabular-nums {
    font-size: 13px !important;
}.tab-fullscreen-content [data-fullscreen="card"] #cittaCardsContainer [class^="text-[14px]"],
.tab-fullscreen-content [data-fullscreen="card"] #cittaCardsContainer [class*=" text-[14px]"],
.tab-fullscreen-content [data-fullscreen="card"] #regioniCardsContainer [class^="text-[14px]"],
.tab-fullscreen-content [data-fullscreen="card"] #regioniCardsContainer [class*=" text-[14px]"]{
    font-size: 10px !important;
}
.tab-fullscreen-content [data-fullscreen="card"] #cittaCardsContainer .flex.gap-1,
.tab-fullscreen-content [data-fullscreen="card"] #regioniCardsContainer .flex.gap-1 {
    gap: 2px !important;
}
.tab-fullscreen-content [data-fullscreen="card"] #cittaCardsContainer [class*="min-w-\[30px\]"],
.tab-fullscreen-content [data-fullscreen="card"] #regioniCardsContainer [class*="min-w-\[30px\]"] {
    min-width: 28px !important;
    padding-left: 4px !important;
    padding-right: 4px !important;
}

/* Fix altezze CARD */
.tab-fullscreen-content [data-fullscreen="card"] > div {
    max-height: none !important;
    height: auto !important;
}
.tab-fullscreen-content [data-fullscreen="card"] .overflow-y-auto,
.tab-fullscreen-content [data-fullscreen="card"] .overflow-auto {
    max-height: none !important;
    overflow: visible !important;
}
.tab-fullscreen-content [data-fullscreen="card"] .h-\[1000px\] {
    height: auto !important;
    min-height: 400px !important;
}

/* Calendario: grid 2 colonne */
.tab-fullscreen-content [data-fullscreen="card"] .grid.lg\:grid-cols-2,
.tab-fullscreen-content [data-fullscreen="card"] .grid.grid-cols-1.lg\:grid-cols-2 {
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    gap: 2rem !important;
    width: 100% !important;
}
.tab-fullscreen-content [data-fullscreen="card"] #dailyResultsGrid {
    display: grid !important;
    grid-template-columns: minmax(0, 1fr) !important;
    gap: 0.5rem !important;
}

/* === TYPE: INTERACTIVE — confronti, duelli, query builder === */

.tab-fullscreen-content [data-fullscreen="interactive"] {
    font-size: 15px;
}

/* Mostra SEMPRE inputs in INTERACTIVE */
.tab-fullscreen-content [data-fullscreen="interactive"] input[type="text"],
.tab-fullscreen-content [data-fullscreen="interactive"] input[type="search"] {
    display: block !important;
    width: 100% !important;
}

/* Dropdown: posizione naturale */
.tab-fullscreen-content [data-fullscreen="interactive"] [id*="dropdown"] {
    position: static !important;
    max-height: 200px !important;
    overflow-y: auto !important;
}

/* Fix altezze INTERACTIVE */
.tab-fullscreen-content [data-fullscreen="interactive"] > div {
    max-height: none !important;
    height: auto !important;
}

/* === FALLBACK: senza data-fullscreen (calciatori, arbitri, partite...) === */

.tab-fullscreen-content table {
    width: 100% !important;
    table-layout: auto !important;
    border-collapse: collapse;
}
.tab-fullscreen-content th {
    background: #1e293b !important;
    color: #e2e8f0;
    font-weight: 700;
    font-size: 14px !important;
}
.tab-fullscreen-content tbody tr:hover {
    background: rgba(51, 65, 85, 0.5);
}
.tab-fullscreen-content > div {
    max-height: none !important;
    height: auto !important;
    width: 100% !important;
}

/* === MOBILE: font ridotti per spazio limitato === */
@media (max-width: 767px) {
    .tab-fullscreen-content [data-fullscreen="table"],
    .tab-fullscreen-content [data-fullscreen="card"],
    .tab-fullscreen-content [data-fullscreen="interactive"] {
        font-size: 14px;
    }
    .tab-fullscreen-content [data-fullscreen="table"] table {
        font-size: 13px !important;
    }
    .tab-fullscreen-content [data-fullscreen="table"] th,
    .tab-fullscreen-content [data-fullscreen="table"] td {
        font-size: 13px !important;
        padding: 0.4rem 0.5rem !important;
    }
    .tab-fullscreen-content [data-fullscreen="table"] .text-xs  { font-size: 11px !important; }
    .tab-fullscreen-content [data-fullscreen="table"] .text-sm  { font-size: 13px !important; }
    .tab-fullscreen-content [data-fullscreen="table"] .text-base { font-size: 14px !important; }
}


.tab-expand-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 28px;
    height: 28px;
    margin-left: 0.35rem;
    padding: 0;
    background: rgba(59, 130, 246, 0.15);
    border: 1px solid rgba(59, 130, 246, 0.3);
    border-radius: 4px;
    color: #60a5fa;
    cursor: pointer;
    transition: all 0.2s ease;
    flex-shrink: 0;
}

.tab-expand-btn:hover {
    background: rgba(59, 130, 246, 0.3);
    color: #93c5fd;
    transform: scale(1.1);
}

.tab-expand-btn i {
    font-size: 0.75rem;
}

/* Mobile: bottone più grande per touch */
@media (max-width: 767px) {
    .tab-expand-btn {
        width: 32px;
        height: 32px;
        min-width: 32px;
        min-height: 32px;
    }

    .tab-expand-btn i {
        font-size: 0.85rem;
    }

    /* Header modal più compatto su mobile */
    .tab-fullscreen-header {
        padding: 0.5rem 0.75rem;
    }

    .tab-fullscreen-title {
        font-size: 1rem;
    }

    .tab-fullscreen-content {
        padding: 0.5rem;
    }
}

/* Stile per tab attivo con icona expand */
.tab-btn-container {
    display: inline-flex;
    align-items: center;
}

/* ============================================================================
   STAMPA
   ============================================================================ */
@media print {
    #mainSidebar,
    nav,
    .no-print,
    button,
    .pagination {
        display: none !important;
    }

    #mainContainer {
        margin: 0 !important;
        padding: 0 !important;
    }

    body {
        background: white !important;
        color: black !important;
    }

    table {
        font-size: 10pt !important;
    }
}

/* ============================================================================
   NOTE PER SVILUPPATORI:

   Per attivare l'overlay "Scorri/Ruota" su una tabella:
   1. Avvolgi la tabella in un div con classe "table-container" o "overflow-x-auto"
   2. Oppure aggiungi classe "wide-table" alla tabella stessa

   Per DISABILITARE l'overlay su tabelle compatte:
   - Aggiungi classe "no-overlay" al container
   - Oppure aggiungi classe "compact-table" alla tabella

   JavaScript opzionale per nascondere overlay dopo scroll:
   document.querySelectorAll('.table-container, .overflow-x-auto').forEach(el => {
       el.addEventListener('scroll', () => el.classList.add('scrolled'), {once: true});
   });
   ============================================================================ */

/* ============================================================================
   TEMA CHIARO (WHITE THEME) — override universale
   Attivato da: body.bg-slate-50
   Copre TUTTE le pagine tramite wildcard Tailwind.
   Ordine sezioni: base → sfondi → testi → bordi → bottoni → input →
                   tabelle → sidebar → header → tabs → modali → scrollbar
   ============================================================================ */

/* ──────────────────────────────────────────────
   BASE: pagina e layout principale
   ────────────────────────────────────────────── */
body.bg-slate-50 {
    background-color: #f1f5f9 !important;
    color: #0f172a !important;
}

/* ──────────────────────────────────────────────
   SFONDI: tutti i dark slate → bianco
   Wildcards per bg-slate-5xx .. 9xx + opacity variants
   ────────────────────────────────────────────── */
body.bg-slate-50 [class^="bg-slate-5"],
body.bg-slate-50 [class*=" bg-slate-5"],
body.bg-slate-50 [class^="bg-slate-6"],
body.bg-slate-50 [class*=" bg-slate-6"],
body.bg-slate-50 [class^="bg-slate-7"],
body.bg-slate-50 [class*=" bg-slate-7"],
body.bg-slate-50 [class^="bg-slate-8"],
body.bg-slate-50 [class*=" bg-slate-8"],
body.bg-slate-50 [class^="bg-slate-9"],
body.bg-slate-50 [class*=" bg-slate-9"],
body.bg-slate-50 .bg-black,
body.bg-slate-50 .bg-slate-950 {
    background-color: #ffffff !important;
    border-color: #e2e8f0 !important;
}

/* Sfondi chiari (slate-100..400) → grigio molto chiaro */
body.bg-slate-50 .bg-slate-100,
body.bg-slate-50 .bg-slate-200,
body.bg-slate-50 .bg-slate-300,
body.bg-slate-50 .bg-slate-400,
body.bg-slate-50 [class^="bg-slate-1"],
body.bg-slate-50 [class*=" bg-slate-1"],
body.bg-slate-50 [class^="bg-slate-2"],
body.bg-slate-50 [class*=" bg-slate-2"],
body.bg-slate-50 [class^="bg-slate-3"],
body.bg-slate-50 [class*=" bg-slate-3"],
body.bg-slate-50 [class^="bg-slate-4"],
body.bg-slate-50 [class*=" bg-slate-4"] {
    background-color: #f8fafc !important;
    border-color: #e2e8f0 !important;
}

/* Bordo 3D leggero solo su div contenitori (rounded + border, NON su button/tr/td) */
body.bg-slate-50 div[class*="rounded-2xl"][class*="border"],
body.bg-slate-50 div[class*="rounded-xl"][class*="border"],
body.bg-slate-50 div[class*="rounded-lg"][class*="border"] {
    box-shadow: 0 1px 3px rgba(15,23,42,0.07), 0 1px 2px rgba(15,23,42,0.04) !important;
}

/* ──────────────────────────────────────────────
   TESTI: chiari → scuri
   ────────────────────────────────────────────── */
body.bg-slate-50 .text-white,
body.bg-slate-50 .text-slate-50,
body.bg-slate-50 .text-slate-100,
body.bg-slate-50 .text-slate-200 {
    color: #0f172a !important;
}body.bg-slate-50 .text-slate-300,
body.bg-slate-50 .text-slate-400,
body.bg-slate-50 [class^="text-slate-3"],
body.bg-slate-50 [class*=" text-slate-3"],
body.bg-slate-50 [class^="text-slate-4"],
body.bg-slate-50 [class*=" text-slate-4"]{
    color: #475569 !important;
}body.bg-slate-50 .text-slate-500,
body.bg-slate-50 [class^="text-slate-5"],
body.bg-slate-50 [class*=" text-slate-5"]{
    color: #64748b !important;
}body.bg-slate-50 .text-slate-600,
body.bg-slate-50 [class^="text-slate-6"],
body.bg-slate-50 [class*=" text-slate-6"]{
    color: #475569 !important;
}

/* slate-700+ già abbastanza scuro, leggermente intensificato */
body.bg-slate-50 .text-slate-700,
body.bg-slate-50 [class^="text-slate-7"],
body.bg-slate-50 [class*=" text-slate-7"] {
    color: #334155 !important;
}

/* ────────────────────────────────────────────────────
   TESTO BIANCO PRESERVATO su bottoni/badge colorati
   (amber, violet, blue, green, red, pink, emerald, indigo)
   ──────────────────────────────────────────────────── */
/* ⚠️ RIMOSSA il 22 lug 2026 — era il GEMELLO della regola tolta stamattina da
   light-theme.css, e ha continuato a fare lo stesso danno da qui. Forzava il testo
   BIANCO su bottoni con classe bg-<colore>-*, mentre le regole «variante B» rendono
   quei fondi PASTELLO: risultato, bianco su pastello. Contrasto 1,25 sul «Cerca»
   della home e 1,21 sull'«Esegui» della Scatola Magica — gli ULTIMI due testi
   invisibili del sito. Le famiglie coperte qui sono tutte già gestite dalla
   variante B (ogni colore, tinte 500-800), quindi non resta scoperto niente.
   ★ La lezione: quando si toglie una regola sbagliata, si cerca se ne esiste una
     copia altrove. Averne tolta una sola ha lasciato il difetto in piedi mezza giornata. */

/* ──────────────────────────────────────────────
   BORDI: dark → grigio chiaro
   ────────────────────────────────────────────── */
body.bg-slate-50 [class^="border-slate-5"],
body.bg-slate-50 [class*=" border-slate-5"],
body.bg-slate-50 [class^="border-slate-6"],
body.bg-slate-50 [class*=" border-slate-6"],
body.bg-slate-50 [class^="border-slate-7"],
body.bg-slate-50 [class*=" border-slate-7"],
body.bg-slate-50 [class^="border-slate-8"],
body.bg-slate-50 [class*=" border-slate-8"],
body.bg-slate-50 [class^="border-slate-9"],
body.bg-slate-50 [class*=" border-slate-9"],
body.bg-slate-50 .border-black {
    border-color: #cbd5e1 !important;
}body.bg-slate-50 [class^="border-slate-3"],
body.bg-slate-50 [class*=" border-slate-3"],
body.bg-slate-50 [class^="border-slate-4"],
body.bg-slate-50 [class*=" border-slate-4"]{
    border-color: #e2e8f0 !important;
}

/* Divisori (divide-*) */
body.bg-slate-50 [class*="divide-slate-6"] > * + *,
body.bg-slate-50 [class*="divide-slate-7"] > * + *,
body.bg-slate-50 [class*="divide-slate-8"] > * + *,
body.bg-slate-50 [class*="divide-slate-9"] > * + * {
    border-color: #e2e8f0 !important;
}

/* ──────────────────────────────────────────────
   BOTTONI con sfondo dark slate → grigio chiaro
   ────────────────────────────────────────────── */
body.bg-slate-50 button[class^="bg-slate-6"],
body.bg-slate-50 button[class*=" bg-slate-6"],
body.bg-slate-50 button[class^="bg-slate-7"],
body.bg-slate-50 button[class*=" bg-slate-7"],
body.bg-slate-50 button[class^="bg-slate-8"],
body.bg-slate-50 button[class*=" bg-slate-8"],
body.bg-slate-50 button[class^="bg-slate-9"],
body.bg-slate-50 button[class*=" bg-slate-9"],
body.bg-slate-50 a[class^="bg-slate-7"],
body.bg-slate-50 a[class*=" bg-slate-7"],
body.bg-slate-50 a[class^="bg-slate-8"],
body.bg-slate-50 a[class*=" bg-slate-8"],
body.bg-slate-50 a[class^="bg-slate-9"],
body.bg-slate-50 a[class*=" bg-slate-9"] {
    background-color: #e2e8f0 !important;
    color: #1e293b !important;
    border-color: #cbd5e1 !important;
}body.bg-slate-50 button[class^="bg-slate-6"]:hover,
body.bg-slate-50 button[class*=" bg-slate-6"]:hover,
body.bg-slate-50 button[class^="bg-slate-7"]:hover,
body.bg-slate-50 button[class*=" bg-slate-7"]:hover,
body.bg-slate-50 button[class^="bg-slate-8"]:hover,
body.bg-slate-50 button[class*=" bg-slate-8"]:hover,
body.bg-slate-50 button[class^="bg-slate-9"]:hover,
body.bg-slate-50 button[class*=" bg-slate-9"]:hover{
    background-color: #cbd5e1 !important;
}

/* Hover di bg-slate-* su elementi generici */
body.bg-slate-50 [class*="hover:bg-slate-7"]:hover,
body.bg-slate-50 [class*="hover:bg-slate-8"]:hover,
body.bg-slate-50 [class*="hover:bg-slate-6"]:hover {
    background-color: #f1f5f9 !important;
}

/* ──────────────────────────────────────────────
   INPUT / SELECT / TEXTAREA
   ────────────────────────────────────────────── */
body.bg-slate-50 input,
body.bg-slate-50 input[type="text"],
body.bg-slate-50 input[type="search"],
body.bg-slate-50 input[type="number"],
body.bg-slate-50 input[type="email"],
body.bg-slate-50 input[type="password"],
body.bg-slate-50 select,
body.bg-slate-50 textarea {
    background-color: #ffffff !important;
    color: #0f172a !important;
    border-color: #94a3b8 !important;
}

body.bg-slate-50 input::placeholder,
body.bg-slate-50 textarea::placeholder {
    color: #94a3b8 !important;
}

body.bg-slate-50 input:focus,
body.bg-slate-50 select:focus,
body.bg-slate-50 textarea:focus {
    border-color: #6366f1 !important;
    outline-color: #6366f1 !important;
}

/* ──────────────────────────────────────────────
   TABELLE
   ────────────────────────────────────────────── */
body.bg-slate-50 table {
    border-color: #e2e8f0 !important;
}

body.bg-slate-50 thead,
body.bg-slate-50 thead tr {
    background-color: #f1f5f9 !important;
}

body.bg-slate-50 thead th,
body.bg-slate-50 th {
    background-color: #f1f5f9 !important;
    color: #334155 !important;
    border-color: #cbd5e1 !important;
}

body.bg-slate-50 tbody tr {
    border-color: #f1f5f9 !important;
}

body.bg-slate-50 tbody td {
    color: #1e293b !important;
    border-color: #f1f5f9 !important;
}

body.bg-slate-50 tbody tr:hover {
    background-color: #f8fafc !important;
}

/* Sticky header celle */
body.bg-slate-50 th[class*="sticky"],
body.bg-slate-50 td[class*="sticky"] {
    background-color: #f1f5f9 !important;
}

/* ──────────────────────────────────────────────
   SIDEBAR
   ────────────────────────────────────────────── */
body.bg-slate-50 #mainSidebar {
    background-color: #ffffff !important;
    border-right-color: #e2e8f0 !important;
    border-color: #e2e8f0 !important;
    box-shadow: 1px 0 3px rgba(15,23,42,0.06) !important;
}

body.bg-slate-50 #mainSidebar a,
body.bg-slate-50 #mainSidebar button,
body.bg-slate-50 #mainSidebar span,
body.bg-slate-50 #mainSidebar div {
    color: #334155 !important;
    border-color: #e2e8f0 !important;
}

body.bg-slate-50 #mainSidebar a.active,
body.bg-slate-50 #mainSidebar a[class*="active"],
body.bg-slate-50 #mainSidebar button.active {
    background-color: #ede9fe !important;
    color: #5b21b6 !important;
}

body.bg-slate-50 #mainSidebar a:hover,
body.bg-slate-50 #mainSidebar button:hover {
    background-color: #f1f5f9 !important;
    color: #0f172a !important;
}

/* ──────────────────────────────────────────────
   HEADER / NAV / GLASS
   ────────────────────────────────────────────── */
body.bg-slate-50 header,
body.bg-slate-50 .glass-header,
body.bg-slate-50 [class*="backdrop-blur"] {
    background-color: rgba(255,255,255,0.97) !important;
    border-color: #e2e8f0 !important;
    box-shadow: 0 1px 4px rgba(15,23,42,0.08) !important;
}

/* ──────────────────────────────────────────────
   TAB BUTTONS
   ────────────────────────────────────────────── */
body.bg-slate-50 .tab-btn {
    color: #64748b !important;
    border-color: transparent !important;
}

/* Tab attivo — preserva il colore accent */
body.bg-slate-50 .tab-btn.active {
    color: #db2777 !important;
    border-color: #db2777 !important;
    background-color: transparent !important;
}body.bg-slate-50 .tab-btn[class^="text-pink"],
body.bg-slate-50 .tab-btn[class*=" text-pink"],
body.bg-slate-50 .tab-btn[class^="border-pink"],
body.bg-slate-50 .tab-btn[class*=" border-pink"]{
    color: #db2777 !important;
    border-color: #db2777 !important;
}

/* ──────────────────────────────────────────────
   MODAL / OVERLAY
   ────────────────────────────────────────────── */
/* Il backdrop rimane scuro per contrasto */
body.bg-slate-50 .fixed.inset-0[class^="bg-black"],
body.bg-slate-50 .fixed.inset-0[class*=" bg-black"],
body.bg-slate-50 .fixed.inset-0[class^="bg-slate-9"],
body.bg-slate-50 .fixed.inset-0[class*=" bg-slate-9"] {
    background-color: rgba(15,23,42,0.55) !important;
}

/* Contenuto modale → bianco */
body.bg-slate-50 [id*="Modal"],
body.bg-slate-50 [id*="modal"] {
    background-color: #ffffff !important;
    color: #0f172a !important;
}

/* ──────────────────────────────────────────────
   SCROLLBAR (tema chiaro)
   ────────────────────────────────────────────── */
body.bg-slate-50 ::-webkit-scrollbar-thumb {
    background: #cbd5e1 !important;
    border-radius: 4px;
}

body.bg-slate-50 ::-webkit-scrollbar-track {
    background: #f1f5f9 !important;
}

body.bg-slate-50 .scroll-custom::-webkit-scrollbar-thumb {
    background: #94a3b8 !important;
}

/* ──────────────────────────────────────────────
   RING / FOCUS (accessibilità)
   ────────────────────────────────────────────── */
body.bg-slate-50 [class*="ring-slate-"] {
    --tw-ring-color: #94a3b8 !important;
}

/* ──────────────────────────────────────────────
   LOADING / SKELETON
   ────────────────────────────────────────────── */
body.bg-slate-50 .animate-pulse [class^="bg-slate-"],
body.bg-slate-50 .animate-pulse [class*=" bg-slate-"] {
    background-color: #e2e8f0 !important;
}

/* ──────────────────────────────────────────────
   GRADIENTS scuri → neutralizzati
   ────────────────────────────────────────────── */
body.bg-slate-50 [class^="from-slate-7"],
body.bg-slate-50 [class*=" from-slate-7"],
body.bg-slate-50 [class^="from-slate-8"],
body.bg-slate-50 [class*=" from-slate-8"],
body.bg-slate-50 [class^="from-slate-9"],
body.bg-slate-50 [class*=" from-slate-9"] {
    --tw-gradient-from: #f8fafc !important;
}body.bg-slate-50 [class^="to-slate-7"],
body.bg-slate-50 [class*=" to-slate-7"],
body.bg-slate-50 [class^="to-slate-8"],
body.bg-slate-50 [class*=" to-slate-8"],
body.bg-slate-50 [class^="to-slate-9"],
body.bg-slate-50 [class*=" to-slate-9"]{
    --tw-gradient-to: #ffffff !important;
}body.bg-slate-50 [class^="via-slate-7"],
body.bg-slate-50 [class*=" via-slate-7"],
body.bg-slate-50 [class^="via-slate-8"],
body.bg-slate-50 [class*=" via-slate-8"],
body.bg-slate-50 [class^="via-slate-9"],
body.bg-slate-50 [class*=" via-slate-9"]{
    --tw-gradient-stops: var(--tw-gradient-from), #f1f5f9, var(--tw-gradient-to) !important;
}

/* ──────────────────────────────────────────────
   FOOTER COPYRIGHT
   ────────────────────────────────────────────── */
body.bg-slate-50 #copyright-footer {
    background: rgba(241,245,249,0.95) !important;
    border-top-color: #e2e8f0 !important;
}

/* 🔴★★★ 4 settembre 2026 — IL PIÈ DI PAGINA NEL TEMA CHIARO.
   Centocinque rilievi di contrasto, e tutti da qui: #64748b su un fondo #f2f6f9 fa
   **4,38**, sotto la soglia di 4,5. Sono le righe che stanno su OGNI pagina del sito
   — «Come Funziona», «Privacy Policy», «Cookie Policy», la riga del copyright — e
   proprio per questo il numero e' cosi' alto: un colore solo, moltiplicato per tutte
   le schermate. Un gradino piu' scuro (#475569) lo porta a 7,3.
 ⚠️ Trovato solo misurando lo SCHERMO LARGO: sul telefono il piè di pagina e'
   sostituito dalla barra in fondo e non si vede. */
body.bg-slate-50 #copyright-footer p,
body.bg-slate-50 #copyright-footer a,
body.bg-slate-50 #copyright-footer span {
    color: #475569 !important;
}

body.bg-slate-50 #copyright-footer strong {
    color: #334155 !important;
}

/* ──────────────────────────────────────────────
   SIDEBAR DESKTOP: scrollbar in tema chiaro
   ────────────────────────────────────────────── */
body.bg-slate-50 #mainSidebar::-webkit-scrollbar-thumb {
    background: #cbd5e1 !important;
}

/* ──────────────────────────────────────────────
   STEMMI squadre — tema chiaro
   Sfondo scuro semitrasparente per stemmi bianchi (Juventus, Napoli, ecc.)
   ────────────────────────────────────────────── */
body.bg-slate-50 img[src*="stemmi"] {
    background-color: rgba(15, 23, 42, 0.08) !important;
    border-radius: 6px !important;
    padding: 2px !important;
}

/* ──────────────────────────────────────────────
   BOTTONE "APRI SCHEDA" (Squadre) — tema chiaro
   Mantiene sfondo blu per leggibilità
   ────────────────────────────────────────────── */
/* «Apri Scheda» in tema chiaro: tinta tenue + testo scuro + ombra (scelta di Fabio,
   21 lug). Era blu pieno col bianco sopra — leggibile ma un blocco cupo sulla pagina
   bianca, e Fabio l'ha segnalato come «poco visibile» guardando il sito.
   ⚠️ Questa regola vive QUI e non nel blocco <style> della pagina: in Squadre quel
   blocco viene PRIMA dei CSS esterni, quindi da li' non puo' vincere. */
/* Colore di «Apri Scheda»: ora sta SOLO in css/palette.css (mazzetta C, 22 lug 2026).
   Qui c'erano strati sovrapposti che si battevano a colpi di specificità. */


/* ──────────────────────────────────────────────
   UTENTE LOGGATO nella sidebar — tema chiaro
   ────────────────────────────────────────────── */
body.bg-slate-50 #auth-button-container [class^="text-indigo-"],
body.bg-slate-50 #auth-button-container [class*=" text-indigo-"],
body.bg-slate-50 #auth-button-container .text-indigo-300,
body.bg-slate-50 #auth-button-container .text-indigo-400 {
    color: #1e3a8a !important;
}body.bg-slate-50 #auth-button-container [class^="bg-indigo-"],
body.bg-slate-50 #auth-button-container [class*=" bg-indigo-"]{
    background-color: #dbeafe !important;
    border-color: #93c5fd !important;
}body.bg-slate-50 #auth-button-container [class^="text-slate-3"],
body.bg-slate-50 #auth-button-container [class*=" text-slate-3"],
body.bg-slate-50 #auth-button-container [class^="text-slate-4"],
body.bg-slate-50 #auth-button-container [class*=" text-slate-4"]{
    color: #475569 !important;
}

/* ──────────────────────────────────────────────
   BOTTONI DIMENSIONE TESTO (A- / A / A+) — tema chiaro
   ────────────────────────────────────────────── */
body.bg-slate-50 .fs-btn-group {
    background: rgba(0,0,0,0.05) !important;
    border-color: rgba(0,0,0,0.15) !important;
}
body.bg-slate-50 .fs-btn {
    color: rgba(0,0,0,0.5) !important;
}
body.bg-slate-50 .fs-btn:hover {
    background: rgba(0,0,0,0.08) !important;
    color: rgba(0,0,0,0.8) !important;
}
body.bg-slate-50 .fs-btn--active {
    background: rgba(0,0,0,0.14) !important;
    color: #000 !important;
}

/* ============================================================================
   FINE TEMA CHIARO
   ============================================================================ */

/* ============================================================================
   MOBILE COLUMN GROUPS (mobile-col-groups.js)
   Stili per il sistema di gruppi di colonne su smartphone.
   Breakpoint: <768px (allineato con Tailwind md: e JS MOBILE_BP=768)
   ============================================================================ */

/* Barra selettore gruppo colonne — nascosta di default */
.mcg-bar {
    display: none;
}

@media (max-width: 767px) {

    /* ── Barra pill-tab MCG ───────────────────────────────────────────── */
    .mcg-bar {
        display: flex;
        align-items: center;
        gap: 6px;
        padding: 8px 10px;
        background: rgba(15, 23, 42, 0.96);
        border: 1px solid #334155;
        border-bottom: none;
        border-radius: 8px 8px 0 0;
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        scrollbar-width: none;
    }
    .mcg-bar::-webkit-scrollbar { display: none; }

    /* Pill tab singolo */
    .mcg-tab {
        flex-shrink: 0;
        padding: 5px 14px;
        min-height: 32px;
        border-radius: 999px;
        font-size: 12px;
        font-weight: 600;
        color: #94a3b8;
        background: #1e293b;
        border: 1px solid #334155;
        cursor: pointer;
        white-space: nowrap;
        -webkit-tap-highlight-color: transparent;
        transition: background 0.15s, color 0.15s, border-color 0.15s;
        line-height: 1.3;
    }

    /* Pill tab attivo */
    .mcg-tab.mcg-tab-active {
        color: #fff;
        background: #f97316;
        border-color: #f97316;
    }
    .mcg-tab:active:not(.mcg-tab-active) {
        background: #334155;
    }

    /* Pill tab — tema chiaro (bg-slate-50) */
    body.bg-slate-50 .mcg-bar {
        background: rgba(241, 245, 249, 0.98);
        border-color: #cbd5e1;
    }
    body.bg-slate-50 .mcg-tab {
        color: #475569;
        background: #fff;
        border-color: #cbd5e1;
    }
    body.bg-slate-50 .mcg-tab.mcg-tab-active {
        color: #fff;
        background: #f97316;
        border-color: #f97316;
    }

    /* Prima colonna sticky — sfondo per ogni tema */
    body:not(.bg-slate-50):not(.bg-black) .mcg-sticky-col {
        background: #1e293b !important;
    }
    body.bg-black .mcg-sticky-col {
        background: #000 !important;
    }
    body.bg-slate-50 .mcg-sticky-col {
        background: #f8fafc !important;
        color: #1e293b !important;
    }

    /* Intestazioni sticky (già gestito da responsive.css ma rinforziamo) */
    table thead th.mcg-sticky-col {
        background: #0f172a !important;
    }
    body.bg-slate-50 table thead th.mcg-sticky-col {
        background: #e2e8f0 !important;
        color: #1e293b !important;
    }

    /* Tabelle con MCG attivo: rimuovi overflow "ruota il telefono" */
    .mcg-bar + * .overflow-x-auto::after,
    .mcg-bar + .overflow-x-auto::after,
    .mcg-bar ~ .overflow-x-auto::after {
        display: none !important;
    }

    /* Container tabella con MCG: overflow visibile per sticky */
    .mcg-bar + .overflow-x-auto,
    .mcg-bar + * {
        overflow-x: auto;
        -webkit-overflow-scrolling: touch;
        border-radius: 0 0 6px 6px;
        border: 1px solid #334155;
    }

    /* Vecchi pulsanti toggle colonne: nascosti su mobile (rimpiazzati da MCG dropdown) */
    #classifica-col-toggle,
    #marcatori-col-toggle,
    .col-toggle-btns {
        display: none !important;
    }

    /* Stemmi squadra: nascosti SOLO dentro le tabelle MCG su mobile */
    table[data-mobile-group] td img,
    table[data-mobile-group] th img {
        display: none !important;
    }

    /* Testo nome squadra/giocatore: non troncare mai */
    .mcg-sticky-col,
    .mcg-sticky-col * {
        white-space: nowrap !important;
        overflow: visible !important;
        text-overflow: clip !important;
        max-width: none !important;
    }

    /* BUG 5: sticky col SQUADRA deve avere min-width sufficiente
       per mostrare il nome completo (almeno 120px). */
    th.mcg-sticky-col,
    td.mcg-sticky-col,
    .sticky-col-team,
    th[data-sticky-team],
    td[data-sticky-team] {
        min-width: 120px !important;
    }

    /* --- TOUCH TARGET MINIMUM 44px (Apple HIG) ---
       🔴★★★ 4 settembre 2026: questo commento diceva 44 e la riga sotto scriveva **40**.
       E non era l'unico pavimento: il banco ne ha trovati **cinque** per la stessa cosa
       — 32, 34, 36, 40 e 44 — sparsi in questo foglio, alcuni con l'`!important`, e a
       vincere era di volta in volta il piu' specifico, cioe' quasi sempre il piu' basso.
       Trecentoventitre bersagli sotto i 40 px su 32 schermate nascevano da qui.
       ★ Ora dicono tutti 44. L'unica eccezione dichiarata resta `.fs-btn` — i tastini
         A− A A+ del corpo del testo, che stanno in fila per sette nell'intestazione e a
         44 la sfonderebbero. */
    button:not(.fs-btn):not(.mini-btn):not(.mcg-tab),
    a.btn,
    .btn,
    /* ⚠️ e i MENU A TENDINA, che questo pavimento non copriva: stavano fra 36 e 40 px
       su otto schermate — e su mobile sono i tab, non un dettaglio di contorno.
       ⚠️ Con l'`!important`, e non per capriccio: una regola piu' specifica azzerava
          il minimo (`min-height: 0`), e sui filtri dei campionati c'e' anche un
          `height: 38px !important` legato all'id. Il minimo, se c'e', vince
          sull'altezza — ma solo se arriva fin li'. */
    input[type="button"], input[type="submit"], input[type="reset"],
    [role="button"]:not(.fs-btn) {
        min-height: 44px;
    }
    html body select { min-height: 44px !important; }
    /* Hamburger / toggle sidebar: 44×44px ben visibile */
    nav button.md\:hidden,
    button[onclick*="toggleSidebar"],
    .btn-hamburger {
        min-width: 44px !important;
        min-height: 44px !important;
        display: inline-flex !important;
        align-items: center !important;
        justify-content: center !important;
        border-radius: 8px !important;
        background: rgba(255,255,255,0.08) !important;
        color: #fff !important;
    }
    nav button.md\:hidden:active,
    button[onclick*="toggleSidebar"]:active {
        background: rgba(255,255,255,0.18) !important;
    }
    /* Elementi piccoli iconici: almeno 36px */
    nav button:not(.md\:hidden),
    nav a,
    .tab-btn,
    .sub-tab-btn {
        min-height: 44px;   /* 4 set: era 36 — la soglia del dito e' 44 */
    }

    /* ── Hamburger: tasto sidebar con etichetta "menu" ────────────────── */
    nav button.md\:hidden,
    button[onclick*="toggleSidebar"] {
        flex-direction: column !important;
        gap: 2px !important;
    }
    nav button.md\:hidden::after,
    button[onclick*="toggleSidebar"]::after {
        content: 'menu';
        font-size: 9px;
        font-weight: 700;
        text-transform: uppercase;
        letter-spacing: 0.05em;
        opacity: 0.65;
        line-height: 1;
        display: block;
    }

    /* --- SAFE AREA iOS (notch / home indicator) --- */
    body {
        padding-bottom: env(safe-area-inset-bottom, 0px);
    }
    /* Bottom nav / navbar fissa in basso: rispetta home indicator */
    .bottom-nav,
    .navbar-bottom,
    nav.fixed.bottom-0 {
        padding-bottom: calc(env(safe-area-inset-bottom, 0px) + 0.25rem) !important;
    }

    /* --- Z-INDEX STACK CHIAREZZA ---
       sidebar: 9998, overlay: 9997, modali: 9999, header: 30, thead sticky: 10 */
    .modal,
    [role="dialog"],
    .modal-backdrop {
        z-index: 9999 !important;
    }

    /* Contrasto di sicurezza: prevenire testo bianco su bianco in modalità tema chiaro */
    body.theme-white *,
    body.bg-slate-50 * {
        /* evitare che elementi con colore white forzato diventino invisibili */
    }
    body.theme-white .text-white,
    body.bg-slate-50 .text-white {
        color: #0f172a !important;
    }

}

/* ==========================================================================
   CAMPIONATI — Mobile v3
   Subtab pills scrollabili + classifica 7-col nativa + riga espansa
   ========================================================================== */
@media (max-width: 767px) {

    /* ── Subtab scrollabili (pills) ──────────────────────────────────────── */
    #subtabsMobile .subtabs-scroll {
        display: flex !important;
        gap: 6px;
        overflow-x: auto;
        overflow-y: hidden;
        padding: 4px 4px 8px;
        -webkit-overflow-scrolling: touch;
        scroll-snap-type: x proximity;
        scrollbar-width: none;
    }
    #subtabsMobile .subtabs-scroll::-webkit-scrollbar { display: none; }

    #subtabsMobile .st-pill {
        flex: 0 0 auto;
        scroll-snap-align: start;
        padding: 8px 16px;
        min-height: 38px;
        border-radius: 999px;
        background: #1e293b;
        border: 1px solid #334155;
        color: #94a3b8;
        font-size: 13px;
        font-weight: 600;
        white-space: nowrap;
        -webkit-tap-highlight-color: transparent;
        transition: background 0.15s, border-color 0.15s, color 0.15s;
        display: inline-flex;
        align-items: center;
        gap: 6px;
        cursor: pointer;
    }
    #subtabsMobile .st-pill.active {
        background: #f97316;
        border-color: #f97316;
        color: #fff !important;
    }
    #subtabsMobile .st-pill-more {
        background: #0f172a;
        border-color: #475569;
        color: #cbd5e1;
    }
    #subtabsMobile .st-pill-more:active { background: #1e293b; }
    #subtabsMobile .st-pill-more i { font-size: 12px; }

    /* ── Fix scroll: container classifica senza max-height né clip ────── */
    #classifica-container {
        max-height: none !important;
        overflow: visible !important;
    }

    /* ── Switcher gruppi colonne (Classifica | Reti) ────────────────────── */
    .cg-btn {
        display: inline-flex;
        align-items: center;
        gap: 4px;
        padding: 5px 12px;
        border-radius: 999px;
        font-size: 11px;
        font-weight: 600;
        color: #94a3b8;
        background: #0f172a;
        border: 1px solid #334155;
        cursor: pointer;
        -webkit-tap-highlight-color: transparent;
        transition: background 0.15s, color 0.15s, border-color 0.15s;
    }
    .cg-btn.cg-active {
        color: #fff;
        background: #f97316;
        border-color: #f97316;
    }

    /* ── Classifica: layout nativo, no SwipeTable ───────────────────────── */
    #classifica-table {
        min-width: 0 !important;
        table-layout: auto !important;
        width: 100% !important;
    }

    /* Thead sticky */
    #classifica-table thead tr {
        position: sticky;
        top: 0;
        z-index: 40;
        background: #0f172a !important;
    }
    #classifica-table thead th {
        background: #0f172a !important;
        padding: 8px 2px !important;
        font-size: 11px !important;
    }

    /* Pos: stretta */
    #classifica-table th:first-child,
    #classifica-table td:first-child {
        width: 26px !important;
        min-width: 26px !important;
        max-width: 30px !important;
        padding: 8px 2px !important;
    }

    /* Squadra: no overflow fisso, max ~12 caratteri */
    #classifica-table th:nth-child(2),
    #classifica-table td.team-cell {
        position: static !important;
        left: auto !important;
        box-shadow: none !important;
        min-width: 80px !important;
        width: auto !important;
        max-width: 120px !important;
        padding: 8px 4px !important;
    }
    #classifica-table .team-name {
        display: inline-block;
        max-width: 110px;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        vertical-align: middle;
    }

    /* PT */
    #classifica-table th.cg-base:nth-child(3),
    #classifica-table td.cg-base:nth-child(3) {
        padding: 8px 3px !important;
        min-width: 26px !important;
        width: 28px !important;
    }

    /* G, V, N, P: visibili e compatte */
    #classifica-table th.col-partite,
    #classifica-table td.col-partite {
        display: table-cell !important;
        width: 24px !important;
        min-width: 24px !important;
        padding: 8px 1px !important;
        font-size: 12px !important;
    }

    /* ── Gruppi colonne mobile ───────────────────────────────────────────── */
    /* Default (gruppo "base"): GF/GS/DR nascosti */
    #classifica-table th.cg-reti,
    #classifica-table td.cg-reti {
        display: none !important;
    }

    /* Gruppo "reti" attivo: nasconde classifica, mostra GF/GS/DR */
    #classifica-table[data-col-group="reti"] th.cg-base,
    #classifica-table[data-col-group="reti"] td.cg-base {
        display: none !important;
    }
    #classifica-table[data-col-group="reti"] th.col-partite,
    #classifica-table[data-col-group="reti"] td.col-partite {
        display: none !important;
    }
    #classifica-table[data-col-group="reti"] th.cg-reti,
    #classifica-table[data-col-group="reti"] td.cg-reti {
        display: table-cell !important;
        width: 34px !important;
        min-width: 30px !important;
        padding: 8px 3px !important;
        font-size: 12px !important;
    }

    /* Scudo anti-duplicati SwipeTable */
    #classifica-table ~ .muxv2-swipe-bar,
    #classifica-table ~ .muxv2-swipe-dots,
    .muxv2-swipe-bar ~ .muxv2-swipe-bar,
    .muxv2-swipe-dots ~ .muxv2-swipe-dots,
    #classifica-col-toggle,
    #subtabsMobile { display: none !important; }

    /* Barra filtri Campione/Retrocessa (campionati): su mobile i due menu su una riga,
       e il 1945-46 sulla sua.
     🔴 3 settembre 2026 — la linguetta «1945-46» (Fabio: «sulla destra il tab 1945-46
        colorato di verde tenue») si prendeva 110 px di una riga che non può crescere, e
        i due menu si stringevano a **49 px**: si leggeva «Cai» e «Ret». Non è un filtro,
        è una destinazione: va a capo, e i filtri tornano leggibili. */
    #campFiltersBar {
        display: flex !important;
        flex-direction: row !important;
        flex-wrap: wrap !important;
        gap: 6px !important;
        padding: 8px 12px !important;
    }
    /* Col toggle "Filtri": quando collassato deve vincere sulla regola ID qui sopra
       (specificità ID+classe > ID) — così il pulsante può nascondere davvero i filtri. */
    #campFiltersBar.ndc-mfilter-hidden { display: none !important; }
    #campFiltersBar > div {
        flex: 1 1 0 !important;
        min-width: 0 !important;
        width: auto !important;
    }
    #campFiltersBar > #btnStag1945 {
        flex: 1 1 100% !important;
        order: 9;
        justify-content: center;
    }
    #campFiltersBar select {
        font-size: 16px !important; /* previene zoom iOS */
        height: 38px !important;
        width: 100% !important;
        min-width: 0 !important;
    }
    #campFiltersBar label {
        min-width: 20px !important;
        white-space: nowrap !important;
    }
    #campFiltersBar > button {
        flex: 0 0 auto !important;
        width: auto !important;
        padding-left: 12px !important;
        padding-right: 12px !important;
        justify-content: center !important;
    }

    /* ── Barra filtri calciatori — responsive su mobile ─────────────────── */
    /* Prima era nascosta per errore dal regola #filtersBar — ora corretta  */
    #filtersBar {
        display: flex !important;
        flex-direction: column !important;
        gap: 8px !important;
        padding: 10px !important;
    }
    /* Col toggle "Filtri": il collasso deve vincere sulla regola ID qui sopra. */
    #filtersBar.ndc-mfilter-hidden { display: none !important; }
    #filtersBar > .relative,
    #filtersBar select,
    #filtersBar label {
        max-width: 100% !important;
        min-width: 0 !important;
        width: 100% !important;
    }
    #filtersBar input[type="text"] {
        font-size: 16px !important; /* previene zoom iOS */
    }
    #filtersBar select {
        font-size: 16px !important;
        height: 40px !important;
    }
    /* Toggle filtri: se collassati, il container ha data-collapsed */
    #filtersBar[data-collapsed="true"] > *:not(.filter-toggle-btn) {
        display: none !important;
    }

    /* ── BottomSheet filtri (stile) ──────────────────────────────────────── */
    .m-filter-section { margin-bottom: 20px; }
    .m-filter-section h4 {
        font-size: 11px;
        font-weight: 700;
        color: #64748b;
        text-transform: uppercase;
        letter-spacing: 0.08em;
        margin: 0 0 10px;
    }
    .m-filter-row {
        display: flex;
        gap: 12px;
        margin-bottom: 12px;
    }
    .m-filter-row label {
        flex: 1;
        display: flex;
        flex-direction: column;
        color: #cbd5e1;
        font-size: 13px;
        gap: 5px;
    }
    .m-filter-row input {
        background: #1e293b;
        color: #fff;
        border: 1px solid #475569;
        border-radius: 8px;
        padding: 10px 8px;
        font-size: 16px;
        text-align: center;
        width: 100%;
    }
    .m-filter-apply {
        width: 100%;
        padding: 13px 16px;
        border-radius: 10px;
        background: #f97316;
        color: #fff;
        font-weight: 700;
        font-size: 15px;
        border: 0;
        margin-bottom: 0;
        cursor: pointer;
        -webkit-tap-highlight-color: transparent;
    }
    .m-filter-apply:active { background: #ea6500; }
    .m-filter-btn {
        width: 100%;
        padding: 12px 16px;
        border-radius: 10px;
        background: #1e293b;
        border: 1px solid #334155;
        color: #e2e8f0;
        font-weight: 600;
        font-size: 14px;
        margin-bottom: 8px;
        cursor: pointer;
        -webkit-tap-highlight-color: transparent;
        text-align: left;
    }
    .m-filter-btn:active { background: #334155; }

}
/* end CAMPIONATI mobile v3 */


/* ==========================================================================
   SISTEMA COLONNE STANDARD — v1.0
   Larghezze fisse per tipo di dato, usate in tutte le tabelle del sito.
   Su desktop: larghezze nominali.
   Su mobile (<768px): colonne ridotte con ellipsis per testi lunghi.
   ========================================================================== */

/* ── Colonne TESTO (nomi) ─────────────────────────────────────────────────── */
.col-name-team    { min-width: 90px;  max-width: 160px; } /* nome squadra */
.col-name-player  { min-width: 110px; max-width: 180px; } /* nome calciatore */
.col-name-coach   { min-width: 110px; max-width: 180px; } /* nome allenatore */
.col-name-ref     { min-width: 100px; max-width: 160px; } /* nome arbitro */
.col-name-long    { min-width: 130px; }                   /* qualsiasi nome lungo */

/* Testo troncato con ellipsis (da applicare alla cella o all'elemento interno) */
.col-truncate {
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    max-width: 0; /* forza ellipsis in table-cell */
}
/* Alternativa per span/div dentro la cella */
.col-truncate-text {
    display: inline-block;
    white-space: nowrap;
    overflow: hidden;
    text-overflow: ellipsis;
    vertical-align: middle;
}

/* ── Colonne NUMERICHE piccole (statistiche) ─────────────────────────────── */
.col-pos    { width: 28px;  min-width: 28px;  text-align: center; } /* posizione/rank */
.col-num-xs { width: 28px;  min-width: 28px;  text-align: center; } /* numero piccolo (G, V, N, P) */
.col-num-s  { width: 36px;  min-width: 36px;  text-align: center; } /* numero medio (PT, GF, GS) */
.col-num-m  { width: 44px;  min-width: 44px;  text-align: center; } /* numero grande (DR con segno, %) */
.col-num-l  { width: 56px;  min-width: 56px;  text-align: center; } /* numero largo (media, decimali) */

/* ── Colonne DATA / STAGIONE ─────────────────────────────────────────────── */
.col-season { width: 68px;  min-width: 68px;  text-align: center; } /* stagione "AAAA-AA" */
.col-date   { width: 80px;  min-width: 80px;  text-align: center; } /* data "GG/MM/AAAA" */
.col-year   { width: 48px;  min-width: 48px;  text-align: center; } /* anno "AAAA" */

/* ── Colonne RISULTATO / PUNTEGGIO ───────────────────────────────────────── */
.col-score      { width: 52px;  min-width: 52px;  text-align: center; } /* "3-1" */
.col-score-wide { width: 68px;  min-width: 68px;  text-align: center; } /* "10-0 (dts)" */

/* ── Colonne SPECIALI ────────────────────────────────────────────────────── */
.col-flag   { width: 28px;  min-width: 28px;  text-align: center; } /* bandiera/icona */
.col-logo   { width: 36px;  min-width: 36px;  text-align: center; } /* stemma squadra */
.col-action { width: 32px;  min-width: 32px;  text-align: center; } /* pulsante azione */
.col-expand { width: 30px;  min-width: 30px;  text-align: center; } /* expand row (+) */
.col-badge  { width: 60px;  min-width: 60px;  text-align: center; } /* badge/etichetta */

/* ── Adattamenti mobile (<768px) ─────────────────────────────────────────── */
@media (max-width: 767px) {
    /* Nomi: ridotti ma non eliminati */
    .col-name-team   { min-width: 80px;  max-width: 130px; }
    .col-name-player { min-width: 90px;  max-width: 140px; }
    .col-name-coach  { min-width: 90px;  max-width: 140px; }
    .col-name-ref    { min-width: 80px;  max-width: 120px; }

    /* Statistiche: più compatte */
    .col-num-xs { width: 24px; min-width: 24px; }
    .col-num-s  { width: 30px; min-width: 30px; }
    .col-num-m  { width: 36px; min-width: 36px; }
    .col-num-l  { width: 44px; min-width: 44px; }
    .col-season { width: 58px; min-width: 58px; font-size: 11px; }
    .col-date   { width: 70px; min-width: 70px; font-size: 11px; }
    .col-score  { width: 44px; min-width: 44px; }
    .col-logo   { width: 0; min-width: 0; padding: 0; overflow: hidden; } /* nascosto su mobile */
}

/* ── Tooltip per dati troncati ───────────────────────────────────────────── */
/* Usa semplicemente l'attributo title="..." — il browser mostra il tooltip nativo.
   Per hover custom, aggiungi data-tooltip="..." e la classe .has-tooltip */
.has-tooltip {
    position: relative;
    cursor: help;
}
.has-tooltip::after {
    content: attr(data-tooltip);
    position: absolute;
    bottom: calc(100% + 4px);
    left: 50%;
    transform: translateX(-50%);
    background: #1e293b;
    color: #e2e8f0;
    font-size: 11px;
    font-weight: 500;
    white-space: nowrap;
    padding: 4px 8px;
    border-radius: 6px;
    border: 1px solid #334155;
    box-shadow: 0 4px 12px rgba(0,0,0,0.4);
    pointer-events: none;
    opacity: 0;
    transition: opacity 0.15s;
    z-index: 100;
}
.has-tooltip:hover::after,
.has-tooltip:focus::after { opacity: 1; }
/* Su mobile: tooltip disabilitato (no hover su touch) */
@media (max-width: 767px) {
    .has-tooltip::after { display: none; }
}

/* ── Mobile: nascondi colonna Pt* e relativa legenda ── */
@media (max-width: 767px) {
    /* Colonna Pt* nella classifica — th e td */
    .col-puntistat { display: none !important; }

    /* Riga legenda Pt* nel standingsNote */
    .pts-note { display: none !important; }

    /* Bottone "Vedi tabella completa" — sostituito da pill tabs */
    .tab-expand-btn { display: none !important; }
    .table-expand-btn { display: none !important; }

    /* Sticky col: larghezza massima + tronca il nome squadra */
    .mcg-sticky-col {
        max-width: 42vw !important;
        overflow: hidden !important;
    }
    .mcg-sticky-col .team-name,
    .mcg-sticky-col a {
        display: block;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
        max-width: 100%;
    }
    /* Nascondi logo stemma nella colonna sticky della classifica su mobile */
    .mcg-sticky-col img.w-6 {
        display: none !important;
    }
}

/* ============================================================================
   CALCIATORI — view-home: layout compatto su mobile
   Obiettivo: ridurre l'area fissa (header + filtri + paginazione) al minimo
   così le card occupano la maggior parte dello schermo.
   ============================================================================ */
@media (max-width: 767px) {

    /* Padding esterno ridotto */
    #view-home {
        padding: 8px !important;
    }

    /* ── Header compattato ── */
    /* 🔴 `nowrap` teneva l'intestazione su una riga sola — e andava bene finché in quella
       riga c'era solo il titolo. Poi è arrivato il tasto «Portieri che hanno segnato, e
       viceversa»: **265 px** su una finestra da **375**, e usciva dallo schermo (Fabio,
       3 settembre 2026, provando sul telefono: «esce fuori dalla finestra»).
     ★ Il titolo resta compatto; è il TASTO che prende una riga sua — a tutta larghezza,
       come già chiede la sua classe `w-full`. */
    #calciatoriHeader {
        margin-bottom: 6px !important;
        gap: 6px !important;
        flex-wrap: wrap !important;
        align-items: center !important;
    }
    #calciatoriHeader > div:has(> #ibridaBtn) {
        flex: 1 0 100% !important;
        max-width: 100% !important;
        margin-bottom: 0 !important;
    }
    #ibridaBtn { width: 100% !important; }
    /* ⚠️ e il testo dentro non deve sfondare: se la frase è lunga, si accorcia lei */
    #ibridaBtn .ibrida-lab {
        overflow: hidden !important;
        text-overflow: ellipsis !important;
        white-space: nowrap !important;
        min-width: 0 !important;
    }
    /* H1: icona + testo più piccoli */
    #view-home h1 {
        font-size: 1.2rem !important;
        gap: 6px !important;
        line-height: 1.2 !important;
    }
    #view-home h1 i {
        font-size: 1rem !important;
    }
    /* Nascondi descrizione ("Database storico giocatori...") */
    #calciatoriDesc {
        display: none !important;
    }
    /* Totale: compatto */
    #calciatoriHeader .text-slate-500.mt-2 {
        margin-top: 2px !important;
        font-size: 11px !important;
    }
    /* Pulsanti sort: compatti, non vanno a capo */
    #sortBtns {
        flex-shrink: 0 !important;
        gap: 4px !important;
        padding-bottom: 0 !important;
    }
    #sortBtns button {
        font-size: 10px !important;
        padding: 3px 7px !important;
        white-space: nowrap !important;
    }

    /* ── FilterBar: nascosta di default, visibile quando espansa ──
       Il toggle (filterToggleBtn) imposta data-collapsed="false" per espandere */
    #filtersBar {
        display: none !important;
    }
    #filtersBar[data-collapsed="false"] {
        display: flex !important;
        flex-direction: column !important;
        gap: 8px !important;
        padding: 10px !important;
    }
    #filtersBar[data-collapsed="false"] > .relative,
    #filtersBar[data-collapsed="false"] select {
        width: 100% !important;
        max-width: 100% !important;
        min-width: 0 !important;
    }
    #filtersBar[data-collapsed="false"] > label {
        align-self: flex-start !important;
    }

    /* ── Paginazione: già compatta nel nuovo HTML ── */
}

/* ============================================================================
   BARRA AZIONI MOBILE (v2-action-bar) — DISABILITATA
   La barra "Su / Indietro / Menu / Condividi / Info" è stata rimossa perché:
   - duplica i menu già presenti nell'header
   - occupa spazio prezioso su mobile
   - interferisce con lo scrolling
   Questa regola è un fail-safe per casi in cui il JS vecchio è in cache.
   ============================================================================ */
#v2-action-bar {
    display: none !important;
}
body.v2-has-action-bar {
    padding-bottom: 0 !important;
}

/* ============================================================================
   CALCIATORI — Cleansheet table mobile
   La tabella ha min-w-[600px] che causa overflow su schermi piccoli.
   5 colonne (Pos/Portiere/Totale/Casa/Fuori) entrano bene con padding ridotto.
   ============================================================================ */
@media (max-width: 767px) {
    /* Rimuovi la larghezza minima forzata */
    #view-cleansheet table {
        min-width: 0 !important;
        width: 100% !important;
    }
    /* Padding ridotto per th e td */
    #view-cleansheet thead th,
    #view-cleansheet tbody td {
        padding: 8px 5px !important;
        font-size: 12px !important;
    }
    /* Colonna Portiere: troncamento con ellipsis */
    #cleansheetTableBody td:nth-child(2) {
        max-width: 38vw !important;
        overflow: hidden !important;
        text-overflow: ellipsis !important;
        white-space: nowrap !important;
    }
    /* Intestazione Portiere */
    #view-cleansheet thead th:nth-child(2) {
        max-width: 38vw !important;
        overflow: hidden !important;
        white-space: nowrap !important;
    }
    /* Colonne numeriche: larghezza fissa compatta */
    #view-cleansheet thead th:nth-child(1),
    #cleansheetTableBody td:nth-child(1) { width: 32px !important; min-width: 32px !important; }
    #view-cleansheet thead th:nth-child(3),
    #cleansheetTableBody td:nth-child(3),
    #view-cleansheet thead th:nth-child(4),
    #cleansheetTableBody td:nth-child(4),
    #view-cleansheet thead th:nth-child(5),
    #cleansheetTableBody td:nth-child(5) { width: 52px !important; min-width: 52px !important; }
}

/* ============================================================================
   CALCIATORI — view-events e view-top11: padding ridotto su mobile
   Entrambe usano p-6 fisso senza variante mobile nel markup HTML
   ============================================================================ */
@media (max-width: 767px) {
    /* Oggi (compleanni + esordi) */
    #view-events {
        padding: 8px !important;
        gap: 12px !important;
    }
    #view-events .glass-panel {
        padding: 12px !important;
    }
    /* Limita altezza liste scrollabili su mobile */
    #birthdaysList,
    #debutsList {
        max-height: 180px !important;
    }

    /* Top 11 */
    #view-top11 {
        padding: 8px !important;
    }
    #view-top11 .glass-panel {
        padding: 4px !important;
    }
    /* Barra moduli: scrollabile orizzontale compatta */
    .fmt-buttons-container {
        overflow-x: auto !important;
        flex-wrap: nowrap !important;
        gap: 4px !important;
        padding: 4px !important;
        max-width: 100% !important;
        -webkit-overflow-scrolling: touch !important;
    }
    .fmt-btn {
        font-size: 11px !important;
        padding: 4px 8px !important;
        white-space: nowrap !important;
        flex-shrink: 0 !important;
    }
    /* Griglia selezione anno/squadra: 2 colonne invece di 7 */
    #view-top11 .grid.grid-cols-2.md\:grid-cols-7 {
        grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
        gap: 6px !important;
        padding: 8px !important;
    }
    /* Campo da calcio: altezza ridotta su mobile */
    .soccer-field {
        height: 340px !important;
    }
    /* Panchina: scroll orizzontale */
    .bench-container {
        overflow-x: auto !important;
        -webkit-overflow-scrolling: touch !important;
    }
}

/* ============================================================================
   iOS Safari — CONTENIMENTO SCROLL (aggiunto 29 Mag 2026)
   Problema: overscroll-behavior non era usato da nessuna parte → lo scroll
   "sfondava" dal contenitore interno (tabelle dati larghe, modali) alla pagina
   sottostante (scroll-chaining / rubber-band tipico di iOS Safari).
   overscroll-behavior è supportato da Safari iOS 16+; su versioni precedenti
   degrada in modo innocuo (ignorato).
   ============================================================================ */
.overflow-x-auto, .overflow-y-auto, .overflow-auto,
.table-container, .table-scroll, .bench-container,
[class*="overflow-x-"], [class*="overflow-y-"] {
    overscroll-behavior: contain;
}

/* Overlay/sidebar/modali e body bloccato: nessun rimbalzo verso la pagina sotto */
#sidebarOverlay,
.modal-overlay, .fullscreen-overlay, .bottom-sheet,
body[data-scroll-locked] {
    overscroll-behavior: none;
}

/* Quando il body è bloccato (sidebar/modale aperti) garantisce il fissaggio */
body[data-scroll-locked] {
    position: fixed;
    width: 100%;
}

/* ============================================================================
   #14 — Base "Normale" un filo più grande per leggibilità (pubblico anziano).
   Si applica SOLO al livello medium (nessuna classe font-*): i livelli espliciti
   html.font-small/large/xl hanno la precedenza grazie al :not().
   ============================================================================ */
html:not(.font-small):not(.font-large):not(.font-xl) .text-xs { font-size: 13px !important; }
html:not(.font-small):not(.font-large):not(.font-xl) .text-sm { font-size: 15px !important; }
html:not(.font-small):not(.font-large):not(.font-xl) td,
html:not(.font-small):not(.font-large):not(.font-xl) th  { font-size: 15px !important; }

/* ═══════════════════════════════════════════════════════════════════════════
   CARATTERE INGRANDITO: niente testo a filo del bordo            (21 lug 2026)
   ═══════════════════════════════════════════════════════════════════════════
   Il selettore A+/A++ ingrandisce i testi con `!important`, ma i contenitori
   restano della stessa misura: i valori lunghi (periodi come «1929-30 → 1959-60»,
   numeri di presenze) finiscono a filo del bordo o oltre. Segnalato da Fabio.
   Rimedio: ai due livelli grandi si lascia andare a capo cio' che era bloccato su
   una riga sola, e si dà un filo d'aria ai riquadri delle statistiche. */
html.font-large .whitespace-nowrap,
html.font-xl    .whitespace-nowrap { white-space: normal !important; }

html.font-large .badge-champ,
html.font-xl    .badge-champ { display: inline-block; max-width: 100%; word-break: break-word; }

/* i riquadri-statistica delle card (Periodo · Stagioni · Presenze · Reti) */
html.font-large .grid > div,
html.font-xl    .grid > div { min-width: 0; }
html.font-large [class*="grid-cols-"] ,
html.font-xl    [class*="grid-cols-"] { padding-left: 2px; padding-right: 2px; }

/* ── Il riquadro del PERIODO a filo del bordo (Calciatori e Squadre) ────────
   Vale a ogni dimensione, non solo con l'ingrandimento: la striscia delle
   statistiche partiva dal bordo esatto della card. Un filo d'aria e basta. */
.card-item .grid[class*="grid-cols-"],
.grid.grid-cols-3.sm\:grid-cols-5 { margin-left: 1px; margin-right: 1px; }

/* ──────────────────────────────────────────────────────────────
   BARRA LATERALE — l'area del menu scorre anche su DESKTOP  (22 lug 2026)
   ──────────────────────────────────────────────────────────────
   Le stesse tre proprietà esistono già dentro @media (max-width: 767px):
   là il menu si restringe e scorre, e i blocchi in fondo restano ancorati.
   Su desktop non c'erano, quindi il contenuto si limitava a sforare in basso.
   Non si vedeva perché fin qui ci stava per una manciata di pixel: aggiunto
   il riquadro «Aspetto» (tema + dimensione testo, 69px) il totale è passato
   da 866 a 935 su 888 disponibili, e il riquadro finiva SOTTO il bordo —
   presente nel DOM, invisibile a schermo. */
#mainSidebar > .sidebar-scroll-area {
    overflow-y: auto;
    overflow-x: hidden;
    flex: 1 1 auto;
    min-height: 0;
}
#mainSidebar #auth-button-container,
#mainSidebar #sidebar-aspetto,
#mainSidebar .sidebar-bottom {
    flex-shrink: 0;
}

/* ──────────────────────────────────────────────────────────────
   BARRA LATERALE COMPRESSA — resta SOLO la freccia   (22 lug 2026)
   ──────────────────────────────────────────────────────────────
   Fabio: «quando si collassa la sidebar ne restano icone sospese, invece deve
   sparire tutto tranne la freccia per riaprirla».
   Prima la compressione lasciava la colonna di icone senza etichetta: una fila
   di simboli muti, che non si capiscono e occupano comunque 60px.
   ⚠️ Queste regole devono vincere su quelle nel <style> delle pagine, che hanno
   già !important: ci riescono perché i CSS esterni sono caricati DOPO quel blocco
   e la specificità è la stessa. */
#mainSidebar.sidebar-desktop-collapsed {
    width: 52px !important;
    min-width: 52px !important;
    max-width: 52px !important;
}
#mainSidebar.sidebar-desktop-collapsed .sidebar-nav,
#mainSidebar.sidebar-desktop-collapsed .sidebar-nav-grid,
#mainSidebar.sidebar-desktop-collapsed #auth-button-container,
#mainSidebar.sidebar-desktop-collapsed #sidebar-aspetto,
#mainSidebar.sidebar-desktop-collapsed .sidebar-bottom,
#mainSidebar.sidebar-desktop-collapsed .sidebar-footer {
    display: none !important;
}
/* La freccia resta, centrata, ed è l'unica cosa che si vede */
#mainSidebar.sidebar-desktop-collapsed .sidebar-toggle-wrap {
    display: flex !important;
    justify-content: center !important;
    padding: 10px 0 !important;
    margin-bottom: 0 !important;
}
#mainSidebar.sidebar-desktop-collapsed .sidebar-scroll-area {
    border-bottom: none !important;
    padding: 0 !important;
}

/* ──────────────────────────────────────────────────────────────
   ETICHETTE DELLA BARRA LATERALE — «Menu» e «Aspetto»  (22 lug 2026)
   ──────────────────────────────────────────────────────────────
   `text-slate-500` su fondo scuro dà 3,5 di contrasto e su fondo chiaro 3,14:
   sotto la soglia AA (4,5) in ENTRAMBI i temi. «Menu» era così da sempre;
   «Aspetto», aggiunto oggi, ne ha ereditato le classi — copiando il difetto.
   Si correggono insieme, perché è lo stesso difetto in due punti. */
#mainSidebar .sidebar-toggle-wrap > span,
#mainSidebar #sidebar-aspetto > p {
    color: #94a3b8;
}

/* ══════════════════════════════════════════════════════════════
   TEMA SCURO — testo bianco su tinte medie             (22 lug 2026)
   ══════════════════════════════════════════════════════════════
   Il tema scuro non era mai stato passato al setaccio: 636 testi sotto la soglia
   AA (nessuno invisibile — stanno tutti nella fascia 3,0-4,5, cioè faticosi da
   leggere ma non illeggibili). Le cause sono tre, e ricorrenti:
     · il piè di pagina a 2,36 (il peggiore del sito) → corretto in js/copyright.js
     · il BIANCO su tinte -600, che non basta: orange-600 dà 3,56 · green-600 3,30
       · amber-600 3,19. Si scende di due gradini (-800), dove il bianco arriva a 6-7.
     · i testi -500 sulle card scure → si sale a -400.
   ⚠️ Solo tema scuro: in chiaro questi elementi diventano pastello con testo scuro
   (regola di Fabio del 21 lug) e vanno lasciati stare. */

/* Colore di «Apri Scheda»: ora sta SOLO in css/palette.css (mazzetta C, 22 lug 2026).
   Qui c'erano strati sovrapposti che si battevano a colpi di specificità. */


/* La Redazione: i pulsanti di export (SVG · PNG · Report · Articolo) */
body.bg-slate-900 .svg, body.bg-black .svg { background: #15803d !important; }
/* 🔴 il marrone-ruggine #9a3412 è debellato: viola, che sta accanto a verde/blu/teal
   senza sporcare la serie (contrasto sul bianco 5,0 contro i 3,4 di un arancione vivo) */
body.bg-slate-900 .jpg, body.bg-black .jpg { background: #7c3aed !important; }
body.bg-slate-900 .rep, body.bg-black .rep { background: #1d4ed8 !important; }
body.bg-slate-900 .art, body.bg-black .art { background: #0e7490 !important; }

/* Numeri e chip colorati sulle card: -500 → -400 */
body.bg-slate-900 .text-blue-500, body.bg-black .text-blue-500 { color: #60a5fa !important; }
body.bg-slate-900 .text-red-500,  body.bg-black .text-red-500  { color: #f87171 !important; }
body.bg-slate-900 .v2-chip-lbl,   body.bg-black .v2-chip-lbl   { color: #94a3b8 !important; }

/* ── La guardia universale che al tema SCURO non era mai stata data ──
   `text-slate-500` (#64748b) su fondo scuro dà 3,43-3,75: sotto la soglia AA, e
   nel progetto è il colore di TUTTE le etichettine («Fondazione», «STADIO»,
   «Menu», i sottotitoli delle card). Da solo vale 279 dei 287 casi di Squadre.
   Il tema chiaro ha la regola gemella da maggio (`[class*="text-slate-5"]` →
   #475569); qui si sale di un gradino, a slate-400, che porta il contrasto a 5,9.
   ⚠️ Niente !important: se una regola più specifica vuole un altro grigio, vince lei. */
body.bg-slate-900 .text-slate-500,
body.bg-black .text-slate-500,
body.bg-slate-900 [class^="text-slate-5"],
body.bg-slate-900 [class*=" text-slate-5"],
body.bg-black [class^="text-slate-5"],
body.bg-black [class*=" text-slate-5"] {
    color: #94a3b8;
}

/* ══════════════════════════════════════════════════════════════════════════════
 * ★★★ PAVIMENTO DI LEGGIBILITÀ SU MOBILE — REGOLA ASSOLUTA (27 luglio 2026)
 *
 * Fabio, sulla scheda squadra: «tutti quei dati scritti uno sotto l'altro quasi
 * invisibili, aumenta e di parecchio il font» → «devi prenderla come REGOLA
 * ASSOLUTA: quei numeri così piccoli non devono starci».
 *
 * ⚠️★★ PERCHÉ STA QUI E NON SOLO IN palette.css: il sistema dei quattro livelli di
 * testo (A- / A / A+ / A++) usa selettori come
 * `html:not(.font-small):not(.font-large):not(.font-xl) .text-xs` → specificità
 * (0,4,1), che batte qualunque `html body .classe` (0,1,2) scritto altrove. Ci ho
 * sbattuto la testa: la regola in palette.css era accettata dal browser e
 * *perdeva comunque*. Il pavimento deve stare DENTRO il sistema che lo contraddice,
 * con la stessa forma e dopo di esso.
 *
 * Misurato prima: nella sola scheda squadra, **8 elementi fra 9 e 11 px**, 15 a
 * 13 px, 6 a 14 px; i valori dei «Risultati Storici» (1624 · 868 · 698) a 13 px.
 * Collaudo permanente: `admin/scripts/verifica_corpi_mobile.js`.
 * ═══════════════════════════════════════════════════════════════════════════ */
@media (max-width: 899px) {
    /* testo: pavimento 15 px, per tutti e quattro i livelli */
    html .text-xs, html .text-sm,
    html .text-\[9px\], html .text-\[10px\], html .text-\[11px\],
    html .text-\[12px\], html .text-\[13px\], html .text-\[14px\],
    html:not(.font-small):not(.font-large):not(.font-xl) .text-xs,
    html:not(.font-small):not(.font-large):not(.font-xl) .text-\[9px\],
    html:not(.font-small):not(.font-large):not(.font-xl) .text-\[10px\],
    html:not(.font-small):not(.font-large):not(.font-xl) .text-\[11px\],
    html:not(.font-small):not(.font-large):not(.font-xl) .text-\[12px\],
    html:not(.font-small):not(.font-large):not(.font-xl) .text-\[13px\],
    html:not(.font-small):not(.font-large):not(.font-xl) .text-\[14px\] {
        font-size: 15px !important;
        line-height: 1.35 !important;
    }
    html .text-sm,
    html:not(.font-small):not(.font-large):not(.font-xl) .text-sm { font-size: 16px !important; }
    html td, html th,
    html:not(.font-small):not(.font-large):not(.font-xl) td,
    html:not(.font-small):not(.font-large):not(.font-xl) th { font-size: 15px !important; }

    /* ★ I NUMERI DEL DATO: mai sotto i 20 px.
     * ⚠️★★ ERRORE MIO, corretto il 27 lug su segnalazione di Fabio («ancora numeri piccoli
     * in campionati… nello spazio disponibile non ha senso»): la prima versione di questa
     * regola diceva `.font-black { font-size: max(20px, 1em) }` e così **RIMPICCIOLIVA** —
     * `1em` è il corpo del PADRE, non del figlio, quindi un valore `text-3xl` (28 px) dentro
     * una card da 15 px veniva schiacciato a **20 px**. Nel tab «Statistiche» erano 440
     * numeri portati da 28 a 20. Un pavimento non deve mai abbassare niente.
     * Quindi: il floor su `1em` vale SOLO per gli elementi che non hanno una classe di
     * taglia propria; chi ce l'ha piccola viene alzato a 20 px in modo esplicito; chi ce
     * l'ha grande (`text-lg` e oltre) non si tocca. */
    /* 🔴🔴★★★ IL PAVIMENTO NON DEVE BATTERE UNA MISURA SCRITTA A MANO (4 settembre 2026).
       Il banco ha contato **166 elementi** in cui il corpo dichiarato non e' quello reso,
       e la causa era una sola riga: questa. Su Record **160 numeri di classifica** scritti
       `font-size:18px` uscivano a 20; il menu di Scommettiamo, scritto 15, usciva a 20;
       il menu a tendina dei tab di Squadre, scritto 18, a 20.
     ★ Non e' una regola nuova: e' quella che questa riga gia' DICHIARA di essere —
       «solo chi NON ha una taglia propria». Una classe `.text-sm` era gia' una taglia
       propria; una misura scritta nello `style` lo e' di piu', ed era l'unica che non
       veniva ascoltata, perche' l'`!important` batte anche l'inline.
     ⚠️ Sotto i 15 px ci sono 187 misure scritte a mano, ma stanno quasi tutte nei
       COSTRUTTORI DI IMMAGINI (grafiche/, export-utils.js, la lavagna): li' l'11 px e'
       giusto, l'immagine si esporta ingrandita. Nelle 22 schermate misurate il pavimento
       tocca 166 elementi e sono **tutti dichiarati da 15 px in su**: nessuno viene
       abbandonato in basso.
     🔴🔴★★★ 5/09/2026 — E QUESTA COPIA NON CE L'AVEVA. Il commento diceva «scritto su
        tutt'e due le copie», e il `:not(p b)` / `:not(p strong)` del 27 agosto stava
        SOLO in palette.css: qui mancava, e siccome l'eccezione di palette.css ESCLUDE
        `p strong`, per quei grassetti restava a comandare la regola di qui. Risultato
        misurato sul racconto del Torino: **306 grassetti a 20 px dentro un testo da 17**.
        Fabio: *«tutti i grassetti devono essere comunque della stessa misura»*.
      ★ Una nota che dichiara uno stato va verificata, non creduta: diceva il vero sul
        `:not(p b)` di palette.css e il falso su sé stessa.
     ★ E' scritto su TUTTE E DUE le copie (qui e in responsive.css), come il `:not(p b)`
       del 27 agosto: una sola non basterebbe, e un'eccezione in fondo al file aprirebbe
       una gara di specificita' che si perde. */
    html:not(.font-small):not(.font-large):not(.font-xl) b:not(p b):not(.text-xs):not(.text-sm):not(.text-base):not(.text-lg):not(.text-xl):not(.text-2xl):not(.text-3xl):not(.text-4xl):not(.text-5xl):not([style*="font-size"]),
    html:not(.font-small):not(.font-large):not(.font-xl) strong:not(p strong):not(.text-xs):not(.text-sm):not(.text-base):not(.text-lg):not(.text-xl):not(.text-2xl):not(.text-3xl):not(.text-4xl):not(.text-5xl):not([style*="font-size"]),
    html:not(.font-small):not(.font-large):not(.font-xl) .tabular-nums:not(.text-xs):not(.text-sm):not(.text-base):not(.text-lg):not(.text-xl):not(.text-2xl):not(.text-3xl):not(.text-4xl):not(.text-5xl):not([style*="font-size"]),
    html:not(.font-small):not(.font-large):not(.font-xl) .font-black:not(.text-xs):not(.text-sm):not(.text-base):not(.text-lg):not(.text-xl):not(.text-2xl):not(.text-3xl):not(.text-4xl):not(.text-5xl):not([style*="font-size"]),
    html:not(.font-small):not(.font-large):not(.font-xl) .font-bold:not(.text-xs):not(.text-sm):not(.text-base):not(.text-lg):not(.text-xl):not(.text-2xl):not(.text-3xl):not(.text-4xl):not(.text-5xl):not([style*="font-size"]) {
        font-size: max(20px, 1em) !important;
    }
    /* numeri con una classe di taglia PICCOLA: portati al pavimento dei numeri */
    html:not(.font-small):not(.font-large):not(.font-xl) .text-xs.font-black,
    html:not(.font-small):not(.font-large):not(.font-xl) .text-sm.font-black,
    html:not(.font-small):not(.font-large):not(.font-xl) .text-base.font-black,
    html:not(.font-small):not(.font-large):not(.font-xl) .text-xs.tabular-nums,
    html:not(.font-small):not(.font-large):not(.font-xl) .text-sm.tabular-nums,
    html:not(.font-small):not(.font-large):not(.font-xl) .text-base.tabular-nums,
    html:not(.font-small):not(.font-large):not(.font-xl) .text-xs b,
    html:not(.font-small):not(.font-large):not(.font-xl) .text-sm b {
        font-size: 20px !important;
    }
    /* …ma un'etichetta in grassetto non è un numero: resta al pavimento del testo */
    html:not(.font-small):not(.font-large):not(.font-xl) .uppercase.tracking-widest,
    html:not(.font-small):not(.font-large):not(.font-xl) .uppercase.tracking-wide,
    html:not(.font-small):not(.font-large):not(.font-xl) label b,
    html:not(.font-small):not(.font-large):not(.font-xl) label strong,
    html:not(.font-small):not(.font-large):not(.font-xl) dt b,
    html:not(.font-small):not(.font-large):not(.font-xl) dt strong,
    html:not(.font-small):not(.font-large):not(.font-xl) .n2-bt,
        html:not(.font-small):not(.font-large):not(.font-xl) .n2-altri {
        font-size: max(15px, 1em) !important;
    }
    /* 🔴★★★ `.n2-azione` ERA ANCHE QUI — il gemello della lista di `palette.css`, e
       questo è quello che vinceva davvero: specificità (0,4,1) più `!important`.
       ⚠️ Ho tolto lo stesso selettore da `palette.css` e il bottone non è cambiato di un
          pixel, perché la stessa lista è scritta in DUE fogli. ★ Quando si toglie una
          regola e non cambia niente, la domanda non è «l'ho tolta bene?» ma **quante
          copie ne esistono**. Otto regole diverse fissano il corpo di questo bottone:
          le ho fatte elencare al browser invece di inseguirle una alla volta.
       ★ E il pavimento `max(15px, 1em)` non fissa una misura: fa SEGUIRE il testo
         intorno. Va bene per un'etichetta, non per un comando. */
    /* la barra di navigazione in basso: le etichette erano a 10 px */
    html .mobile-nav span, html .bottom-nav span, html nav .text-\[10px\] { font-size: 13px !important; }
}

/* ── i quattro punti di cornice che restavano sotto il pavimento ────────────────
 * Trovati col verificatore, uno per uno (non a tentativi):
 *  · barra di navigazione in basso `.muxv2-navitem span` → era a 10 px
 *  · banner cookie `#ndc-cookie-banner` → 11,7 px
 *  · briciole di pane `#v2-breadcrumb` → 14 px
 *  · colori sociali `#detailColors` in Squadre → 13,2 px (era il caso che ha aperto
 *    tutta questa faccenda: «Nero-azzurro a strisce» illeggibile)
 * ⚠️ La barra in basso ha quattro voci in 375 px: 13 px è il massimo che ci sta
 *    senza mandarle a capo — misurato, non stimato. */
@media (max-width: 899px) {
    /* 13 → 14 (Fabio, 1 ago 2026: «se entrano a 15 vai» → «prova a 14»).
       ⚠️ Misurato, non stimato: a 375 px le cinque voci sommano 371 su 375 sia a 13 sia a
       14 — a 15 salgono a 380 e la barra sfora. A 320 px sforava GIA' a 13 (346 su 320):
       il 14 non introduce quel difetto, e a nessuna delle due larghezze si taglia una
       parola. Resta sotto il pavimento dei 15: e' un'eccezione, ma di un punto sola. */
    html .muxv2-navbar .muxv2-navitem span,
    html .muxv2-navbar span { font-size: 14px !important; }
    html #ndc-cookie-banner, html #ndc-cookie-banner *,
    html #ndc-cookie-banner a, html #ndc-cookie-banner p { font-size: 15px !important; }
    html #v2-breadcrumb, html #v2-breadcrumb span, html #v2-breadcrumb a { font-size: 15px !important; }
    html #detailColors, html #detailCity, html #detailFound, html #detailYears { font-size: 16px !important; }
}

/* le etichette della barra dei modali («Indietro», «Condividi»): erano a 14 px */
@media (max-width: 899px) {
    html .ndc-modnav span, html .ndc-modnav button { font-size: 15px !important; }
}

/* gli ultimi due: i valori dentro le ciambelle («51%», «1.72») erano a 18,8 px
   perché `.text-xl` = 1,25rem e la radice qui è 15 px. Portati al pavimento dei numeri. */
@media (max-width: 899px) {
    html .text-xl:not(.text-2xl):not(.text-3xl),
    html:not(.font-small):not(.font-large):not(.font-xl) .text-xl:not(.text-2xl):not(.text-3xl) {
        font-size: max(20px, 1em) !important;
    }
}

/* ══════════════════════════════════════════════════════════════════════════════
 * ★★ CAMPIONATI — i numeri del campione e del riepilogo: DUE PER RIGA, GRANDI
 * Segnalato da Fabio con una cattura: «V 27 / N 6 / P 5 / GF 89 / GS 35» uscivano
 * **uno per riga** con metà schermo vuoto e il numero a 20 px. «Nello spazio
 * disponibile non ha senso questi numeri così piccoli.»
 * Due per riga (`grid-cols-2`) e il numero a **34 px**: lo spazio c'è, si usa.
 * ═══════════════════════════════════════════════════════════════════════════ */
@media (max-width: 899px) {
    html #winnerStats {
        grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
        gap: 8px 12px !important;
        padding: 10px !important;
    }
    /* ⚠️★★ IL FONDINO DEVE SEGUIRE IL TEMA. Prima versione: `rgba(15,23,42,.55)`
       fisso — bello sul tema scuro, **un pugno nell'occhio** sul chiaro (segnalato da
       Fabio con la cattura del riquadro del campione). Un colore scritto a mano che
       non guarda il tema è un difetto, non una scelta: qui il fondo si ricava da una
       trasparenza NEUTRA, che scurisce sul chiaro e schiarisce sullo scuro. */
    html #winnerStats > div {
        background: rgba(148, 163, 184, .16);
        border: 1px solid rgba(148, 163, 184, .28);
        border-radius: 10px;
        padding: 8px 6px;
    }
    /* tema chiaro: un grigio appena percettibile, non un blocco scuro */
    html body.bg-slate-50 #winnerStats > div {
        background: rgba(15, 23, 42, .05);
        border-color: rgba(15, 23, 42, .10);
    }
    /* tema nero: leggermente più marcato per staccare dal fondo */
    html body.bg-black #winnerStats > div {
        background: rgba(255, 255, 255, .06);
        border-color: rgba(255, 255, 255, .12);
    }
    /* l'etichetta (V, N, P, GF, GS) sopra, il numero sotto e grande */
    html #winnerStats > div > span:first-child { font-size: 16px !important; letter-spacing: .04em; }
    html #winnerStats > div > span:last-child  { font-size: 34px !important; line-height: 1.05 !important; }

    /* Riepilogo Stagione: già due per riga, ma il valore era a 20 px */
    html #statMatches, html #statGoals, html #statAvgGoals,
    html #statHomeWin, html #statAwayWin, html #statDraws {
        font-size: 30px !important;
        line-height: 1.1 !important;
    }
}

/* ══════════════════════════════════════════════════════════════════════════════
 * ★★★ «QUESTO IN TUTTE» — le griglie di dati su mobile: MAI più di due per riga,
 * e il numero grande *(27 luglio 2026, indicazione di Fabio)*
 *
 * Dopo il riquadro del campione in `campionati`, la stessa cosa vale in tutti gli
 * ambienti: griglie a 3, 4, 5 colonne su un telefono da 375 px danno celle da 70-110
 * px, dove un numero non può che essere minuscolo. **Due per riga** e lo spazio c'è.
 *
 * ⚠️ ESCLUSIONI, e sono necessarie:
 *  · `.n2-blocchi` — la scheda del kit calcola le sue colonne sul dato (una o due) e
 *    la dimensione del carattere sulla larghezza vera: non va scavalcata;
 *  · i campetti e le formazioni (`[id*="campo"]`, `.campetto`, `.formazione`) hanno
 *    una geometria che È il dato: 11 posizioni non sono una griglia di statistiche;
 *  · i caroselli di stemmi e le tastiere di lettere restano come sono
 *    (`.stemmi-grid`, `.alfabeto`), perché lì la cella piccola è giusta.
 * ═══════════════════════════════════════════════════════════════════════════ */
@media (max-width: 899px) {
    html .grid-cols-3:not(.n2-blocchi):not(.stemmi-grid):not(.alfabeto),
    html .grid-cols-4:not(.n2-blocchi):not(.stemmi-grid):not(.alfabeto),
    html .grid-cols-5:not(.n2-blocchi):not(.stemmi-grid):not(.alfabeto),
    html .grid-cols-6:not(.n2-blocchi):not(.stemmi-grid):not(.alfabeto) {
        grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    }
    /* i campetti e le formazioni conservano la loro geometria */
    html [id*="campo"] .grid-cols-3, html [id*="campo"] .grid-cols-4,
    html [id*="campo"] .grid-cols-5, html .campetto .grid-cols-3,
    html .campetto .grid-cols-4, html .campetto .grid-cols-5,
    html .formazione .grid-cols-3, html .formazione .grid-cols-4,
    html .formazione .grid-cols-5 { grid-template-columns: unset !important; }

    /* ── i «riquadrini» di statistica ricorrenti in tutti gli ambienti ──────────
     * Sono tre varianti dello stesso oggetto: etichetta piccola sopra o sotto e
     * numero in mezzo. Il numero passa a 28 px, l'etichetta a 15. */
    html .stat-pill > span:first-child,
    html .stat-pill > span:last-child { line-height: 1.1 !important; }html .stat-pill > span.font-black,
html .stat-pill > span[class^="text-xl"],
html .stat-pill > span[class*=" text-xl"],
html .stat-pill > span[class^="text-2xl"],
html .stat-pill > span[class*=" text-2xl"]{ font-size: 28px !important; }

    /* la variante `sb()` usata in calciatori e campionati: box in colonna con il
       valore in `font-black` e l'etichetta in maiuscoletto */
    html .flex.flex-col.items-center > span.font-black { font-size: 26px !important; }
    html .flex.flex-col.items-center > span.uppercase { font-size: 15px !important; }
}

/* ══════════════════════════════════════════════════════════════════════════════
 * ★★ I BOTTONI erano fissati a 14 px su tutto il sito (27 luglio 2026)
 * Trovato col misuratore in Squadre → Andamenti: il tasto «?» restava a 14 px
 * qualunque cosa scrivesse il kit, perché più sopra in questo stesso foglio c'è
 * `body:not(.home-page) button { font-size: 14px !important }` — specificità
 * (0,2,1), che batte qualunque regola di classe. Riguardava OGNI bottone del sito.
 * Sotto i 900 px i bottoni seguono il pavimento: 15 px.
 * ═══════════════════════════════════════════════════════════════════════════ */
/* ⚠️ LA RIGA DEI TOTALI della scheda squadra sforava di 3 px per lato a 375 (misurato
 * -3…378): «PUNTI» toccava il bordo. Tre riquadri con la loro spaziatura e i loro
 * bordi laterali non ci stanno in 375: sul telefono si stringe la spaziatura interna
 * e si lascia che vadano a capo se serve. */
@media (max-width: 480px) {
    #topStatsBox { max-width: 100%; flex-wrap: wrap; justify-content: center; gap: 0 !important; }
    #topStatsBox > div { padding-left: 10px !important; padding-right: 10px !important; }
}

/* ★★★ SUL TELEFONO I MENU, NON LE LINGUETTE — la regola generale (Fabio, 26 agosto
 * 2026: «sul mobile sempre, meglio i menu, fanno meno confusione»).
 * ⚠️ MISURATO: cinque linguette a 375 px vanno a capo su TRE righe (138 px), le undici
 *    della scheda di Serie A su quattro. Il menu ne chiede UNA.
 * ★ Le linguette restano nel documento — portano lo stato e il resto del codice le
 *   cerca — e si nascondono soltanto. Il menu si costruisce da loro, non da un secondo
 *   elenco scritto a mano. */
.dashboard-menu { display: none; }
@media (max-width: 899px) {
    /* ⚠️ E lo stesso confine sulla scheda di Serie A: il menu sta sopra una lista che
       scorre, e senza una linea il taglio della prima riga sembra un difetto. */
    .dashboard-menu { display: block; border-bottom: 1px solid #334155; }
    .dashboard-tabs { display: none !important; }
    html body #menuTab, html body #menuTabm { color: #fff !important; }
}

@media (max-width: 899px) {
    html body:not(.home-page) button,
    html body:not(.home-page) .btn,
    html body:not(.home-page) a.button { font-size: 15px !important; }
    /* i tasti del kit hanno la loro misura, più grande: non si toccano */
    /* 🔴★★★ …ED È QUI CHE SI CAMBIA, non nel kit (26 agosto 2026, Fabio: «già il
       bottone in fondo è piccolo»). Nel kit avevo scritto `font-size:18px` sul
       `.n2-azione` e non cambiava niente: questa riga ha specificità (0,1,2) e per di
       più `!important`, quindi vince sempre. ★ Quando una misura non obbedisce, il
       posto da guardare non è dove l'hai scritta ma **chi la sovrascrive**.
       Il comando stava a 17,6 px, cioè SOTTO la nota che gli sta sopra (18) e sotto
       l'etichetta di ogni riquadro. Pareggiato: un comando non può essere la cosa più
       piccola della schermata. */
    /* ⚠️ E la specificità va PARI o SUPERIORE a quella del divieto generale qui sopra:
       `html body:not(.home-page) button` vale (0,1,3) e batteva `html body .n2-azione`
       (0,1,2) — tolta la regola-pavimento, il bottone non è salito a 18: è SCESO a 15.
       ★ Il caso particolare deve essere scritto più stretto della regola generale, non
         più tardi: nella cascata l'ordine conta solo a parità di specificità. */
    html body:not(.home-page) button.n2-azione,
    html body:not(.home-page) a.n2-azione,
    html body .n2-azione { font-size: 18px !important; }
    html body .n2-aiuto, html body .n2-altri { font-size: calc(var(--k-base) * 1.05) !important; }
}

/* ⚠️★ TOOLTIP A PASSAGGIO DEL MOUSE: su un telefono non esistono, e in Squadre →
 * Andamenti quelli larghi 240 px sfondavano a destra creando **scorrimento
 * orizzontale** in tutta la pagina. Su mobile si spengono: un dato raggiungibile
 * solo col mouse non è raggiungibile, e il posto giusto per quel dato è la scheda.
 * (Stesso principio degli stadi storici nella lista squadre.) */
@media (max-width: 899px) {
    html .group-hover\:block,
    html [class*="group-hover/tooltip:block"],
    html .team-logo-cell .team-tooltip { display: none !important; }
}

/* i riquadri posizionati in assoluto (tooltip, badge) non devono generare uno
   scorrimento: su mobile il contenitore li taglia invece di allargarsi.
   ⚠️ `clip` e non `hidden`: `hidden` creerebbe un contesto di scorrimento e
   romperebbe lo `sticky` delle intestazioni. */
@media (max-width: 899px) {
    html #detailContent, html .tab-panel, html #statisticheContainer { overflow-x: clip; }
}

/* ══════════════════════════════════════════════════════════════════════════════
 * ⚠️★★ UNA CLASSE DI COLORE NON DECIDE LA DIMENSIONE (27 luglio 2026)
 * `css/v2-enhancements.css` contiene `.text-slate-400 { font-size: 0.88rem }` —
 * nata per le descrizioni delle card in homepage, ma `.text-slate-400` è una classe
 * di **colore** usata in tutto il sito: con la radice a 15 px diventava **13,2 px**
 * su qualunque testo grigio. È così che «Storia degli spareggi» in `varie` restava
 * sotto il pavimento pur avendo il genitore a 17 px.
 * Su mobile la dimensione torna a essere decisa da chi di dovere.
 * ★ La lezione: un'utilità di colore che porta anche una misura è una mina, perché
 * agisce dove nessuno la sta guardando.
 * ═══════════════════════════════════════════════════════════════════════════ */
@media (max-width: 899px) {
    /* ⚠️ le negazioni vanno scritte PER CLASSE, non per prefisso: la prima versione
       diceva `:not([class*="text-s"])` e si escludeva da sola, perché `text-slate-400`
       contiene «text-s». Un selettore che nega se stesso è invisibile a chi lo legge. */
    /* 🔴★★★ E QUI IL PAVIMENTO DIVENTA UN TETTO (4 settembre 2026, stessa famiglia
       della guardia messa poco sopra al pavimento dei 20 px).
       `max(15px, 1em)` sembra un minimo, ma `1em` e' il corpo del PADRE: se il padre
       sta a 14 px la formula vale 15, e con l'`!important` **abbassa** a 15 una parola
       scritta a mano 16. Sul Libro dei Record erano 43 «punti» accanto ai numeri.
     ★ Vale la stessa ragione della guardia gemella: una misura scritta nello `style`
       e' una taglia propria, e questa regola dichiara di rispettare le taglie proprie.
     ⚠️ Resta com'e' la copia da schermo largo (palette.css, `@media min-width:900px`,
       `max(18px, 1em)`): stessa trappola, ma il banco misura a 375 px e non l'ha mai
       vista in opera. Non si corregge quello che non si e' misurato. */
    html body .text-slate-400:not(.text-xs):not(.text-sm):not(.text-base):not(.text-lg):not(.text-xl):not(.text-2xl):not(.text-3xl):not([style*="font-size"]) {
        font-size: max(15px, 1em) !important;
    }
}

/* i numeri-dato in grassetto con una taglia PICCOLA esplicita: al pavimento dei numeri.
   Trovato in `record`, dove i valori dei primati stavano a 17-19 px (`text-base`/`text-lg`
   + `font-bold`): sono il dato principale di quelle liste, non un'annotazione. */
@media (max-width: 899px) {
    html:not(.font-small):not(.font-large):not(.font-xl) .text-sm.font-bold,
    html:not(.font-small):not(.font-large):not(.font-xl) .text-base.font-bold,
    html:not(.font-small):not(.font-large):not(.font-xl) .text-lg.font-bold,
    html:not(.font-small):not(.font-large):not(.font-xl) .text-lg { font-size: max(20px, 1em) !important; }
}

@media (max-width: 899px) {
    /* ⚠️★★ L'ETICHETTA STA DENTRO IL NUMERO, quindi `max(15px, 1em)` la GONFIAVA:
       `1em` è il corpo del genitore, e il genitore qui è il numero a 23 px. Risultato
       segnalato da Fabio: «FONDAZIONE» tutto maiuscolo ed **enorme**, più grande del nome
       della squadra. Un'etichetta non può essere più grande del dato che etichetta:
       misura fissa, leggibile e chiaramente subordinata. */
    /* ⚠️★★ REGOLA RIMOSSA il 30 luglio 2026 — era MORTA e ingannevole.
       Diceva `font-size: 15px !important`, ma `css/palette.css` dichiara
       `html body .n2-p3 small { font-size: 13px !important }` con la STESSA specificità:
       vinceva palette.css solo perché è caricato DOPO (riga 1191 contro 919 in
       calciatori/index.html). Due `!important` in lotta il cui esito dipende dall'ordine
       dei `<link>` — se qualcuno li riordina, l'etichetta cambia corpo in silenzio.
       ★ E i 13 px sono la scelta GIUSTA, misurata: «PRESENZE» a 13 px occupa 68 px sui 68
         disponibili, a 15 px ne chiede 78 e si spezzerebbe in «PRESENZ / E». È l'eccezione
         al pavimento chiesta da Fabio il 28 luglio («presenze devi ridurlo, deve andare su
         una riga»).
       Resta qui solo il `letter-spacing`, che non è in conflitto con nulla. */
    html body .n2-p3 small { letter-spacing: 0 !important; }
    /* ★★ IL NOME È IL SOGGETTO della lista, non può essere la voce più piccola.
       Fabio: «il nome della squadra scritto molto più piccolo. Assurdo». Gerarchia
       corretta: numero d'ordine e valore 23,2 px · **nome 20 px** · etichetta 15. */
    html body .n2-p2 { font-size: calc(var(--k-base) * 1.25) !important; }
}


/* ══════════════════════════════════════════════════════════════════════════════════════
   IL MENU D'ORDINAMENTO DOPPIO (31 luglio 2026)
   ══════════════════════════════════════════════════════════════════════════════════════
   Sopra i 768 px le liste passano al kit `NDCScheda2`, che porta il proprio ordinatore.
   Il menù della pagina resterebbe accanto al suo: due controlli per la stessa lista, che
   possono anche mostrare stati diversi. Sotto i 768 il kit non si monta, e lì serve. */
@media (min-width: 768px) {
  .ordina-solo-mobile { display: none !important; }
}

/* ══════════════════════════════════════════════════════════════════════════════
 * ★★★ «LA SCHERMATA INIZIALE NON SCORRE, RESTA BLOCCATA» — 1 agosto 2026
 * ══════════════════════════════════════════════════════════════════════════════
 * Un figlio flex ha `min-height: auto` per impostazione predefinita: NON può
 * restringersi sotto il proprio contenuto. Se quel figlio è anche l'area di
 * scorrimento (`overflow-y:auto`), cresce oltre il genitore invece di scorrere, e
 * il genitore lo taglia. Risultato: pagina ferma.
 *
 * ⚠️ CHROME PERDONA, SAFARI NO. Misurato: nell'emulatore `#contentArea` scorreva
 *    (1.852 px in 531, scroll programmatico ok, nessun `touchmove` annullato) —
 *    su iPhone restava bloccata. ★ Un difetto che l'emulatore non riproduce non è
 *    per questo meno reale: qui la prova era la finestra di Fabio.
 *
 * ⚠️ Il `div` intermedio aveva GIÀ `min-height: 0`: la cura era stata applicata a
 *    metà catena. Qui vale per tutti gli anelli che scorrono.
 *
 * ★ `min-height: 0` su un elemento flex non cambia nulla di visibile: gli permette
 *   soltanto di restringersi. Non è una forzatura, è il valore che serve.
 * ★★★ GENERALIZZATA (Fabio: «questo deve essere generalizzato, iPhone è lo smartphone
 *   più diffuso al mondo, la maggioranza usa Safari»).
 *   Contati nel sito: **47 contenitori flex che scorrono, e solo 11 protetti** — nove
 *   ambienti su tredici ne avevano ZERO. Elencare gli id avrebbe coperto quelli di oggi
 *   e non quelli di domani.
 * ⚠️ `min-width: 0` è la GEMELLA ORIZZONTALE dello stesso difetto: è quella che il 27
 *    luglio faceva «galleggiare le schermate» di lato. Le due vanno insieme, sempre.
 * ★ Su un elemento `flex-1` questi due valori non cambiano nulla di visibile: gli
 *   permettono soltanto di restringersi, che è ciò che un contenitore di scorrimento
 *   deve poter fare. Non è una forzatura — è il valore che serviva fin dall'inizio. */
html body .flex-1,
html body main,
html body #mainContainer,
html body #contentArea {
    min-height: 0;
    min-width: 0;
}

/* ═══════════════════════════════════════════════════════════════════════════
   LA BARRA IN BASSO: le voci prendono lo spazio che CHIEDONO, non uno uguale
   🔴 Fabio, 12 agosto 2026: «su mobile le scritte si accavallano». Misurato a 375 px:
      ogni voce aveva **59 px fissi**, ma «Campionati» ne chiede **75** — deborda di 16 e
      con `overflow:visible` finisce addosso a «Squadre». «Calciatori» sfora di 3.
   ★ Lo spazio totale però BASTA: le sei voci sommano 341 px su 375. Il difetto non era
     la larghezza dello schermo, era la spartizione a fette uguali — «Home» ne sprecava
     venti e «Campionati» ne mancava sedici.
   ⚠️ Il commento più sopra («cinque voci sommano 371 su 375») era giusto QUANDO fu
      scritto: da allora è comparsa la sesta voce, l'icona delle impostazioni, e il conto
      non torna più. Una misura vale finché vale l'oggetto misurato. */
@media (max-width: 899px) {
    html .muxv2-navbar .muxv2-navitem {
        flex: 0 1 auto !important;      /* non più fette uguali: ognuna quanto le serve */
        min-width: 0 !important;
        padding-left: 4px !important;
        padding-right: 4px !important;
    }
    html .muxv2-navbar .muxv2-navitem span {
        white-space: nowrap !important; /* mai a capo: una voce su due righe alza la barra */
    }
}
