/* ═══════════════════════════════════════════════════════════════════════════
   TIMERBET PLAYER — IL LAYER MOBILE COMUNE
   Autore: D (design). Ordine GC 19/07: su telefono il player deve sembrare
   un'APP, non un sito rimpicciolito, e deve valere su TUTTI i temi.

   PERCHÉ UN FILE SOLO. I temi sono quattro sistemi diversi (base classico,
   layout-libreria, temi importati «fedeli», temi sanificati) e ognuno porta il
   CSS del suo grafico. Aggiustarli uno per uno significa rifarlo quattro volte
   e vederlo rompersi al quinto tema. Qui invece: un foglio, caricato in coda a
   `<head>` così vince per cascata, che parla ai GANCI DI CLASSE che i temi già
   espongono.

   COME SI RITINGE. Niente colori sparsi nelle regole: tutto passa dalle
   variabili qui sotto. Un tema che vuole la sua tinta ridefinisce quelle, in
   `<head>` o nel proprio foglio, e il resto si adegua:

       :root { --tbm-bg:#101820; --tbm-accent:#00d4a0 }

   REGOLA DELLA CASA rispettata: l'ORO è il denaro. Nella barra in basso l'unica
   cosa dorata è la schedina — l'unico posto dove ci sono i tuoi soldi.

   Il markup della barra sta in `player/_bottom_nav.html` (frammento a sé).
   ═══════════════════════════════════════════════════════════════════════════ */

:root{
  /* la soglia: sotto questa larghezza il player diventa un'app */
  --tbm-bar-h: 56px;
  /* 🔴 18/08 — QUANTO SI ALZANO I BOTTONI FLOTTANTI quando la barra in basso c'è. Sta qui e non
     dentro la regola perché adesso la barra esce in DUE fasce (sotto i 901 sempre; fra 901 e 1023
     solo dove il coupon non si raggiunge — carta `DAV-1436`): due cancelli, e il valore dev'essere
     lo stesso o i bottoni si alzano di misure diverse nelle due. */
  --tbm-alzata: calc(var(--tbm-bar-h) + var(--tbm-safe) + 12px);
  /* LA BARRA È VETRO SCURO, NON IL BLU DI UN TEMA.
     Verificata sui 4 temi importati: il n.1 è blu, il n.2 verde/nero, il n.4 chiaro con
     oro. Una barra blu fissa, su quelli, sembrava incollata sopra da un'altra app. Non si
     rincorrono quattro tavolozze: la barra è cromo persistente e si comporta come tale —
     un velo scuro traslucido che sfoca ciò che ci scorre sotto e sta bene su qualunque
     fondo. Un tema che voglia la sua tinta ridefinisce queste variabili e vince. */
  --tbm-bg: rgba(12,20,30,.90);
  --tbm-bg-2: rgba(8,14,22,.94);
  --tbm-ring: #101a26;            /* tinta PIENA: anelli e contorni, dove il velo non va */
  --tbm-ink: #ffffff;
  --tbm-dim: rgba(255,255,255,.60);
  --tbm-accent: #F5B301;          /* oro TimerBet = il denaro */
  --tbm-accent-ink: #1a1205;
  --tbm-live: #ff3b3b;
  --tbm-line: rgba(255,255,255,.12);
  --tbm-r: 14px;
  /* la tacca dei telefoni recenti: si somma, non si indovina */
  --tbm-safe: env(safe-area-inset-bottom, 0px);
}

/* ═══ 1. LA REGOLA CHE VIENE PRIMA DI TUTTE ═══
   Niente scorrimento orizzontale. Non è una preferenza estetica: se il
   documento è più largo del telefono, il browser rimpicciolisce l'intera
   pagina per farcela stare e il testo diventa illeggibile — che è esattamente
   il difetto segnalato (il player si allargava a 473px su uno schermo da 390).
   Le cause vere erano due elementi a larghezza fissa nell'intestazione. */
@media (max-width: 900px){
  /* ⚠️ 17/08 — `overflow-x` QUI NON COMANDA, e chi legge questa riga crede di sì.
   * `header_prefs.css:48` dichiara `html, body{ overflow-x:clip }` **senza media query**, e nel
   * pacchetto `casa.css` viene DOPO questo foglio (`app_mobile.css` è il primo di `FOGLI`):
   * stessa specificità, e a parità vince l'ultima ⇒ sotto i 900 px vale `clip`, non `hidden`.
   * ⚖️ Non cambia cosa vede chi naviga (tagliano tutt'e due), ma cambia cosa si può misurare:
   * con `hidden` un elemento uscito resta raggiungibile via `scrollLeft`, con `clip` no.
   * 👉 Se un giorno serve `hidden` davvero, non basta scriverlo qui: va alzata la specificità
   *    o tolto di là. 📮 `inbox/dispacci/17-08_A-CHI-TOCCA-UN-CSS_app_mobile-e-il-PRIMO-…` */
  html, body{max-width:100%; overflow-x:hidden}
  /* media e tabelle non sfondano mai il contenitore */
  img, video, iframe, canvas, svg{max-width:100%; height:auto}
  table{max-width:100%}
  /* il velo di caricamento seguiva la larghezza sfondata invece dello schermo */
  #loaderCtm, .loader-ctm{width:100% !important; max-width:100vw}
}

/* ═══ 2. INTESTAZIONE COMPATTA ═══
   Sul telefono l'intestazione deve dire tre cose e basta: chi sei, quanto hai,
   e come si ricarica. La barra dei menu del desktop sparisce — le sue voci
   vivono nella barra in basso, dove ci arriva il pollice. */
@media (max-width: 900px){
  .hd-ctm{position:sticky; top:0; z-index:900}
  .hd-top-header{padding:6px 10px !important; gap:8px}
  .hd-ctm--logo img, .nav-logo--img{max-height:26px; width:auto}

  /* ERA IL COLPEVOLE DELL'ALLARGAMENTO: 433px fissi, in position:fixed.
     Sul telefono non serve: è la nav desktop, sostituita dalla barra in basso. */
  .hd-ctm--menu{display:none !important}
  /* i cartellini «promo/agente/deposita» dell'intestazione: via, sono desktop */
  .hd-menu--top{display:none !important}

  /* saldo e deposita restano, ma stretti e leggibili */
  .hd-top-header--right{gap:6px; flex-wrap:nowrap; min-width:0}
  .hd-ctm--auth{gap:6px; min-width:0}
  .hd-ctm--auth .btn-ctm{
    min-height:36px; padding:6px 10px; font-size:12.5px; white-space:nowrap}
  .hd-ctm--auth .btn-text{font-variant-numeric:tabular-nums}
  .text-separator{display:none}
  /* L'orologio dell'intestazione sfondava lo schermo (arrivava a 447px su 390) ed e'
     l'unica cosa li' dentro che il telefono ha gia' nella sua barra di stato. */
  #tbClock{display:none}
}

/* ═══ 2-bis. LA BARRA DEL CONTO NON STA SOPRA IL MARCHIO ═══
 *
 * 🔴 IL DIFETTO, misurato sul servito (timerbet, 17/08) e non dedotto: la nostra barra del conto
 * (`.hu`) è più larga della fetta che il tema le dà, e la eccedenza si divide **sui due lati**
 * perché il contenitore del tema centra (`justify-content:center`). Quella di sinistra finisce
 * addosso al marchio, che sta nell'angolo:
 *
 *     390px  nodo di rete   barra 40..386 (346 px) in una fetta di 246   →  copre 42 px di logo
 *                           `elementFromPoint` sul centro del marchio → **DIV.hu-user**
 *     390px  giocatore      barra 95..358 (263 px) in una fetta di 218   →  copre 14 px
 *     320px  nodo di rete   copre 58 px  **e 26 px di barra stanno fuori schermo** (invisibili:
 *                           `overflow-x:hidden` della §1 non fa scorrere, taglia)
 *
 * ⚠️ Non è un difetto del blocco fido: la barra di un GIOCATORE, che il fido non ce l'ha, copre
 * il marchio lo stesso. Il fido (Stefano, 14/08 12:53) l'ha solo reso evidente, perché è la parte
 * più a sinistra della pillola. Chi lo togliesse per «riparare» toglierebbe il sintomo.
 *
 * ✅ LA CURA: sotto la soglia la barra prende una riga sua, e dentro quella riga può andare a
 * capo. Così nessun pezzo si sovrappone al marchio e nessuno esce dallo schermo — la fila si
 * accorcia da sé quando lo schermo è stretto, invece di sfondare.
 *
 * 📏 LA SOGLIA NON È INVENTATA: misurata a undici larghezze, la sovrapposizione comincia fra
 * 500 px (0) e 480 px (6 px). I 520 sono il confine che questa testata ha GIÀ — è quello del
 * pannello di ricarica (`barra_utility.html`, `.hu-ric-pan` sotto i 520) — quindi non se ne
 * aggiunge uno nuovo, si usa il suo.
 *
 * ⚖️ COSA COSTA, detto: l'intestazione cresce. Misurato a 390 px: 92 → 133 px per un nodo di
 * rete, 44 → 78 per un giocatore. È il prezzo di far stare tutto: prima quei pixel c'erano lo
 * stesso, solo che stavano sopra il logo o fuori dallo schermo.
 *
 * 🔒 E RESTA CASA NOSTRA: `:has(.hd-ctm--auth-hu)` — quella classe la scrive il NOSTRO widget
 * (`theme_family/barra_utility.html:27`), quindi la riga tocca solo le testate che ospitano la
 * nostra barra. Su una skin di un cliente che non ce l'ha, il selettore non aggancia niente.
 * ⚠️ `:has()` è di dicembre 2023: dove non c'è, il browser butta la regola intera e la pagina
 * resta quella di oggi — la cura non arriva, ma niente si rompe.
 */
@media (max-width: 520px){
  .hd-top-header:has(.hd-ctm--auth-hu){flex-wrap:wrap}
  .hd-top-header--right:has(.hd-ctm--auth-hu){flex:1 0 100%; justify-content:flex-end}
  .hd-ctm--auth-hu{max-width:100%}
  /* la fila va a capo da sé: a 390 sta in due righe, a 280 in tre, e non esce mai dal bordo
   *
   * 🔴 17/08 — QUESTA RIGA ERA `.hu{…}` E SUL SERVITO NON MORDEVA. Misurato in browser sulla
   * pagina vera dopo che la cura è andata in onda: `flex-wrap` **calcolato** = `nowrap`, e a
   * 320/360 px su un nodo di rete restavano **35 e 15 px di barra fuori schermo** — cioè persi,
   * perché la §1 ha `overflow-x:hidden`. La copertura del marchio era a posto (la reggono le
   * tre righe qui sopra, che hanno un `:has()` e quindi pesano di più); a cadere era solo questa.
   *
   * LA CAUSA, e non è di questa regola: `header_user.css` dichiara `.hu{…flex-wrap:nowrap…}`,
   * stessa specificità — e nel PACCHETTO `casa.css` la nostra sta a byte 1.970 e la sua a 65.262.
   * A parità di specificità vince chi viene DOPO. `justify-content` mordeva solo perché lì non
   * è dichiarato.
   *
   * ⚠️ E NON È UN CASO ISOLATO: `app_mobile.css` è il **primo** dei 30 fogli di `FOGLI`
   * (`player_ui/mobile.py`). Ogni regola scritta qui parte perdente contro una di pari
   * specificità scritta in QUALUNQUE altro foglio di casa. Chi cura qui deve o alzare la
   * specificità (come sotto) o sapere che sta scrivendo un valore di partenza, non una cura.
   * 📌 Stessa forma del `7c83d9838` di ieri sera («a parità di specificità vince chi viene DOPO»).
   *
   * 👉 La cura non è `!important`: è il contesto che la regola ha già intorno. `.hd-ctm--auth-hu`
   * è la classe del NOSTRO widget — la stessa che le tre righe sopra usano per non uscire di
   * casa — quindi il perimetro non cambia di un elemento, e la specificità sale a (0,2,0).
   */
  .hd-ctm--auth-hu .hu{flex-wrap:wrap; justify-content:flex-end}
}

/* ═══ 3. IL CORPO: CARD, NON TABELLE STRETTE ═══ */
@media (max-width: 900px){
  .page-container, .main-wrapper, .main-container{
    display:block !important; width:100% !important; max-width:100% !important;
    margin:0 !important; padding-left:0 !important; padding-right:0 !important}

  /* lo spazio che la barra in basso occupa: il contenuto non ci finisce sotto */
  body{padding-bottom:calc(var(--tbm-bar-h) + var(--tbm-safe) + 8px) !important}

  /* i pannelli diventano card a tutta larghezza con un filo d'aria */
  .box-main, .ctm-panel, .box-sidebar{border-radius:12px; margin:8px 8px 10px}

  /* La riga «filtri + tab sport» è un flex che sul telefono si schiaccia: il testo
     del selettore va a capo su tre righe e le tab si tagliano a metà parola.
     Si impila invece di comprimere. */
  .box-main--wrapper{flex-wrap:wrap}
  .box-main--left, .box-main--middle, .box-main--right{
    min-width:0; max-width:100%; flex-basis:100%}
  .box-main--left{display:flex; align-items:center; gap:8px; white-space:nowrap}

  /* IL BERSAGLIO DEL POLLICE. 44px è la misura sotto la quale si sbaglia tasto —
     e qui sbagliare tasto significa piazzare la quota sbagliata. Non si applica ai
     bottoni dell'intestazione: là lo spazio verticale è prezioso e non si scommette. */
  .qt-btn, .menu-button, .tabs-ctm--item, .menu-item > a, .tab-item--btn{
    min-height:44px; display:flex; align-items:center; justify-content:center}
  .qt-btn{font-size:15px; font-weight:800}

  /* le quote: tre colonne uguali, non una fila che deborda */
  .tb-btns, .odds-select, .odds-row{
    display:grid !important; grid-template-columns:repeat(3,1fr); gap:6px}
  .tb-btns > *, .odds-select > *{min-width:0}

  /* Le liste orizzontali scorrono col dito invece di tagliarsi a metà parola.
     ⚠ NON si tocca il `display` dei contenitori `owl-carousel`: quel carosello è
     gestito da uno script del tema che si costruisce la sua riga scorrevole da sé —
     forzarlo a flex gliela svuota (provato: le tab degli sport sparivano). Si dà solo
     il permesso di scorrere a chi non è un carosello. */
  .top-menu--horizontal, .top-menu--wrapper, .coupon-tabs, .tabs-ctm{
    overflow-x:auto; -webkit-overflow-scrolling:touch; scrollbar-width:none}
  .top-menu--horizontal::-webkit-scrollbar, .tabs-ctm::-webkit-scrollbar{display:none}
  .tab-items--ctm:not(.owl-carousel){
    display:flex; flex-wrap:nowrap; overflow-x:auto; scrollbar-width:none}
  .tab-items--ctm:not(.owl-carousel) .tab-item--ctm{flex:none}
}

/* ═══ 4. IL MENU SPORT COME CASSETTO ═══
   Il tema ha già l'aside e il suo velo cliccabile: non serve markup nuovo,
   basta ridefinire cosa vuol dire «aperto» sotto la soglia. */
@media (max-width: 900px){
  #leftSidebarSport.left-sidebar{
    position:fixed; inset:0 auto 0 0; z-index:1000; width:min(84vw, 340px);
    max-width:340px; transform:translateX(-102%);
    transition:transform .26s cubic-bezier(.22,.61,.36,1);
    overflow-y:auto; overscroll-behavior:contain;
    box-shadow:2px 0 24px rgba(0,0,0,.4)}
  #leftSidebarSport.left-sidebar.active{transform:translateX(0)}
  .sidebar--overlay{
    position:fixed; inset:0; z-index:999; background:rgba(4,14,24,.55);
    opacity:0; pointer-events:none; transition:opacity .22s}
  .left-sidebar.active .sidebar--overlay,
  .right-sidebar.active .sidebar--overlay{opacity:1; pointer-events:auto}
  /* i bottoni «richiudi» del desktop non hanno senso in un cassetto */
  .button-collapse{display:none}
}

/* ═══ 5. LA SCHEDINA COME PANNELLO DAL BASSO ═══
   Su telefono una colonna laterale schiacciata è illeggibile proprio quando
   conta di più: al momento di giocare. Diventa un foglio che sale dal basso,
   con la maniglia, che si chiude trascinando o toccando fuori.

   ⚠ Lo stato sta su #rightSidebarSport, MAI su .box-sidebar--coupon: quel nodo
   viene rimpiazzato per intero a ogni gamba aggiunta o tolta, e con lui
   sparirebbe la classe di apertura. */
@media (max-width: 900px){
  #rightSidebarSport.right-sidebar{
    position:fixed; inset:auto 0 0 0; z-index:1000; width:100%; max-width:100%;
    height:auto; max-height:84vh; transform:translateY(102%);
    transition:transform .28s cubic-bezier(.22,.61,.36,1);
    border-radius:var(--tbm-r) var(--tbm-r) 0 0;
    background:var(--tbm-bg); box-shadow:0 -8px 30px rgba(4,14,24,.45);
    display:flex; flex-direction:column; overflow:hidden}
  #rightSidebarSport.right-sidebar.active{transform:translateY(0)}

  /* la maniglia: dice «questo si trascina» senza scriverlo */
  #rightSidebarSport.right-sidebar:before{
    content:""; flex:none; width:38px; height:4px; border-radius:99px;
    margin:8px auto 4px; background:var(--tbm-dim)}

  /* 🔴 IL FONDO DEL PANNELLO STA SOTTO LA BARRA — misurato il 13/08 col coupon aperto a 390px,
     e non era un sospetto: `.tbm-nav` è `z-index:1100`, il foglio 1000, e il tetto della barra
     cade a y 788 mentre il pannello arriva a 844.

         coperto      **56px** esatti su tutte e tre le skin  ( = `--tbm-bar-h` )
         conseguenza  l'ULTIMO bottone del coupon — «Carica coupon» — finisce SOTTO la barra

     ⛔ Il vecchio `padding-bottom` contava solo la tacca del telefono (`--tbm-safe`) e non la
     barra che questo stesso foglio disegna trenta righe più giù: due pezzi della stessa pagina
     che non sapevano l'uno dell'altro. Adesso lo spazio in fondo è alto quanto la barra.
     📌 Vale per tutti e due gli impianti, e il difetto c'era prima di questo lavoro: l'ho
     trovato aprendo il pannello nuovo e guardando cosa succedeva anche all'altro. */
  #rightSidebarSport .right-sidebar--wrapper{
    overflow-y:auto; overscroll-behavior:contain; padding-bottom:12px;
    padding-bottom:calc(var(--tbm-bar-h) + var(--tbm-safe) + 12px)}
  /* il gancio desktop per aprire la colonna: sul telefono ci pensa la barra */
  #rightSidebarSport .right-sidebar--openmenu{display:none}
  .box-sidebar.box-sidebar--coupon{margin:8px 8px 8px; border-radius:12px}  /* 📏 ANGELO 18/08 12:02 «rispetta lo spazio»: il margin-top era 0 e il riquadro si
     attaccava a «Ricarica rapida» (misurato: stacco 0px sopra, 8px sotto). Gli altri
     .box-sidebar prendono 8px dalla regola generale di questa stessa media query; qui
     erano azzerati. ⛔ Si cura SOLO da questo lato: metterlo anche sul blocco sopra
     farebbe 16px. */

  /* ── E LO STESSO FOGLIO PER L'ALTRO IMPIANTO DI BARRE ──────────────────────
     Punto 5 di Dav (13/08 08:23): *«in tutte le pagine da mobile devi mostrare solo la parte
     centrale, l'header e il footer»*. Il blocco qui sopra lo mantiene dove la barra destra è
     `#rightSidebarSport`; dove è `aside.rail-r` NON lo manteneva, e la misura dice quanto:

         a 390px, `.rail-r` è `position:static` e cade a  y 32.782  su una pagina alta 33.923
                                                          y  3.410  su una alta 4.512

     ⛔ Cioè il coupon non era «di fianco»: era in fondo a trentamila pixel. Non è un difetto di
     disegno — è una colonna che su telefono NESSUNO raggiunge. E il punto 4 senza il punto 5
     l'avrebbe fatta vedere in DUE posti insieme (nel pannello e in coda alla pagina).

     🔑 NIENTE CLASSI NUOVE (regola Dav 14:16): stessa forma, stesso `.active`, stessa maniglia.
     ⛔ E NON si è riusato l'id `#rightSidebarSport` mettendolo sull'`aside`, che sarebbe stata
        la scorciatoia: `@media (min-width:1024px)` gli dà `width:300px; flex:0 0 300px`, e sul
        desktop avrebbe spento la colonna larga a 500px chiesta da Jesper il 10/08. Misurato
        prima di scrivere, non dopo.
     📌 Vince su `.rail-r{position:static}` di `tb.css` per ordine di cascata, non per un
        `!important`: il pacchetto di casa è linkato DOPO. */
  .rail-r{
    position:fixed; inset:auto 0 0 0; z-index:1000; width:100%; max-width:100%;
    height:auto; max-height:84vh; transform:translateY(102%);
    transition:transform .28s cubic-bezier(.22,.61,.36,1);
    border-radius:var(--tbm-r) var(--tbm-r) 0 0;
    background:var(--tbm-bg); box-shadow:0 -8px 30px rgba(4,14,24,.45);
    display:flex; flex-direction:column; overflow-y:auto; overscroll-behavior:contain;
    /* ⬇ alto quanto la barra in basso, che gli sta SOPRA di 56px: vedi il blocco qui sopra */
    padding-bottom:calc(var(--tbm-bar-h) + var(--tbm-safe) + 12px)}
  .rail-r.active{transform:translateY(0)}
  /* la maniglia, identica all'altro impianto: dice «questo si trascina» senza scriverlo */
  .rail-r:before{
    content:""; flex:none; width:38px; height:4px; border-radius:99px;
    margin:8px auto 4px; background:var(--tbm-dim)}
}

/* ═══ 6. LA BARRA IN BASSO ═══
   Il pollice ci arriva tutto. La schedina sta in mezzo e sporge: è l'azione che vale soldi,
   e l'unica dorata.
   📌 «Cinque voci» diceva questa riga, ed era vero fino al 13/08: adesso sono QUATTRO, CINQUE
   o SEI — il casinò sparisce dove la vetrina è vuota (`has_casino`), il burger compare solo
   dove c'è una barra sinistra da aprire. La griglia qui sotto le conta. */
.tbm-nav{display:none}

/* 🔴 18/08 — IL CANCELLO ARRIVA A 1023, NON A 900. Dav, 17/08 14:36: *«da 900 a 1280 nascondi la
   right bar e fai comparire il bottone per aprirla»*. Misurando (carta `A/todo/DAV-1436-…`) sotto
   la richiesta c'è un difetto che nessuno aveva nominato: **fra 901 e 1023 px, sulla pagina del
   palinsesto — quella del suo scatto — il coupon non si raggiunge**, e non c'è niente da premere.

     @1000px, pagina `/player/eventi-giorno/scegli?...`
       timerbet   `#rightSidebarSport` **0×816**, spinto a x 1000  ⇒ sparito
       studio5    `.rail-r` 960×235 ma a **y 1.123** (pagina alta 2.002)  ⇒ impilato sotto
       betslot    `.rail-r` 960×180 a **y 2.161** (pagina alta 3.032)     ⇒ idem
       e su tutte e tre: barra `display:none`, tasto `#tbmSlip` **0**

   ⚖️ Sulla HOME, alla stessa larghezza, il coupon **c'è** su tutte e tre (300 · 268 · 960): il
   difetto è della pagina, non della skin. Per questo il cancello qui sotto non nomina né l'una né
   l'altra: **guarda se il coupon si raggiunge**, e la risposta cambia da pagina a pagina.
   ⛔ E 1023 non è un numero nuovo: è la soglia che il tema si è già scelto
   (`/player/theme-asset/1/script/extra.js`, `isMobile = innerWidth < 1024`).
   📌 Qui c'è solo il VESTITO, definito una volta per tutta la fascia in cui la barra può uscire.
   **Chi esce dove** lo decide il cancello in negativo subito dopo il blocco. */
@media (max-width: 1023px){
  /* 🔴 LA BARRA CONTA LE SUE VOCI, non ne dà per scontate cinque (13/08, carta `188-d`).
     Il burger del punto 2 di Dav è la SESTA, e con `repeat(5,1fr)` sarebbe andato a capo:
     la barra raddoppiava di altezza e copriva il contenuto. E il cinque fisso era già
     ottimista prima del burger — `has_casino` toglie la voce del casinò dove la vetrina è
     vuota, e quattro voci in cinque colonne lasciano una cella vuota a destra, cioè la
     barra sbilenca. `grid-auto-flow:column` le tiene su UNA riga a qualunque numero.
     ⛔ Nessuna classe nuova: cambia come la riga esistente conta, non cosa veste. */
  .tbm-nav{
    display:grid; grid-auto-flow:column; grid-auto-columns:1fr; align-items:end;
    position:fixed; inset:auto 0 0 0; z-index:1100;
    height:calc(var(--tbm-bar-h) + var(--tbm-safe));
    padding-bottom:var(--tbm-safe);
    background:linear-gradient(180deg,var(--tbm-bg),var(--tbm-bg-2));
    -webkit-backdrop-filter:blur(14px) saturate(1.3);
    backdrop-filter:blur(14px) saturate(1.3);
    border-top:1px solid var(--tbm-line);
    box-shadow:0 -2px 14px rgba(4,14,24,.35)}
  /* dove la sfocatura non c'è, il velo si fa quasi pieno: se no si legge il testo sotto */
  @supports not (backdrop-filter: blur(1px)){
    .tbm-nav{background:linear-gradient(180deg,#0d1520,#080e16)}
  }

  /* 📌 `a` E `button` INSIEME, e non è una svista di scrittura: il burger del punto 2 è un
     `<button>` — un comando che non porta da nessuna parte non si scrive come un link (la
     lezione di stamattina: *«un href non è un comportamento»*). Ma dentro la barra deve
     essere la SESTA voce identica alle altre, non un bottone che sembra un bottone. Da qui
     in giù la coppia di selettori è quella, e `button` eredita anche il `reset` del browser
     (sfondo e bordo li spegne la riga sua, sotto).
     ⛔ Nessuna classe nuova (Dav, 14:16): si allarga un selettore, non si inventa un nome. */
  .tbm-nav a, .tbm-nav button{
    display:flex; flex-direction:column; align-items:center; justify-content:center;
    gap:3px; height:var(--tbm-bar-h); min-width:0; padding:0 2px;
    color:var(--tbm-dim); text-decoration:none; font-weight:700;
    -webkit-tap-highlight-color:transparent}
  /* il `<button>` porta addosso il vestito del browser: fondo grigio, cornice, font suo */
  .tbm-nav button{background:none; border:0; font:inherit; font-weight:700; cursor:pointer}
  /* 🔴 14/08 — E `hidden` DEVE VINCERE, se no la riga qui sopra crea un BOTTONE FALSO.
     `_bottom_nav.html` tiene il burger `hidden` finché non trova una barra da aprire, e lo
     scrive per esteso: *«NIENTE BURGER DOVE NON C'È NIENTE DA APRIRE … un comando che non
     risponde fa concludere che il sito è rotto»*. Ma `[hidden]{display:none}` è una regola del
     BROWSER, e qualunque `display` scritto in un foglio nostro la batte — sempre, non per
     specificità: le regole d'autore vincono su quelle del browser.

     📏 Misurato sul servito a 390px, prima di questa riga:
         studio5   `#tbmMenu` **ha l'attributo `hidden`**, `display` calcolato **flex**, 65×56,
                   `data-menu-toggle` assente, nessun cassetto da aprire (`.rail-l` no,
                   `#leftSidebarSport` no: quella skin monta le colonne composte `.cms-rail_*`)
         betslot   niente `hidden`, `data-menu-toggle=".rail-l"`   ✅ apre
         timerbet  niente `hidden`, `aria-controls="leftSidebarSport"` ✅ apre

     ⇒ Su studio5 il burger si vedeva ed era **morto**: è metà della segnalazione di Dav delle
     07:53 (*«i tasti menu e coupon non vanno»*). L'altra metà — le colonne che restano in pagina
     invece di diventare cassetti — è geometria e sta nella 188-d.
     📌 Nessuna classe nuova, un attributo in un selettore che c'era già. */
  .tbm-nav a[hidden], .tbm-nav button[hidden]{display:none}
  .tbm-nav a svg, .tbm-nav button svg{width:22px; height:22px; flex:none; display:block}
  /* Le ETICHETTE si troncano se non ci stanno. `:not(.tbm-slip-btn)` non è pignoleria:
     anche il tondo della schedina è uno <span>, e con `overflow:hidden` addosso ritagliava
     via il contatore delle selezioni, che sporge apposta dal bordo. */
  .tbm-nav a > span:not(.tbm-slip-btn), .tbm-nav button > span{
    font-size:10px; line-height:1; letter-spacing:.01em;
    max-width:100%; overflow:hidden; text-overflow:ellipsis; white-space:nowrap}
  .tbm-nav a.is-on{color:var(--tbm-ink)}
  /* il filo sopra la voce attiva: dice dove sei senza rubare spazio */
  .tbm-nav a.is-on:before{
    content:""; position:absolute; top:0; width:26px; height:3px;
    border-radius:0 0 3px 3px; background:var(--tbm-accent)}
  .tbm-nav a{position:relative}
  /* il cassetto aperto si legge sul burger come sulle voci: stesso inchiostro dell'attiva */
  .tbm-nav button[aria-expanded="true"]{color:var(--tbm-ink)}
  .tbm-nav a:focus-visible, .tbm-nav button:focus-visible{
    outline:2px solid var(--tbm-accent); outline-offset:-3px}

  /* il pallino rosso del live: pulsa piano, come il minuto che scorre */
  .tbm-nav .tbm-live-dot{
    position:absolute; top:9px; margin-left:17px; width:7px; height:7px;
    border-radius:50%; background:var(--tbm-live);
    box-shadow:0 0 0 2px var(--tbm-bg); animation:tbm-pulse 2s ease-in-out infinite}
  @keyframes tbm-pulse{50%{opacity:.35}}

  /* ── la schedina: il tasto rialzato ── */
  .tbm-nav .tbm-slip{justify-content:flex-end; padding-bottom:5px}
  .tbm-nav .tbm-slip .tbm-slip-btn{
    position:absolute; bottom:calc(var(--tbm-bar-h) - 28px); left:50%;
    transform:translateX(-50%);
    width:52px; height:52px; border-radius:50%;
    display:flex; align-items:center; justify-content:center;
    background:linear-gradient(180deg,#ffcb3d,var(--tbm-accent));
    color:var(--tbm-accent-ink);
    /* l'anello della barra stacca il tondo; l'ombra sotto è corta, non un alone —
       una sfocatura larga di colore su fondo scuro sembra un difetto di stampa */
    box-shadow:0 0 0 4px var(--tbm-ring), 0 3px 8px rgba(4,14,24,.45)}
  /* il contatore sporge dal bordo del tondo APPOSTA: qui niente ritaglio, mai */
  .tbm-nav .tbm-slip-btn{overflow:visible !important}
  .tbm-nav .tbm-slip .tbm-slip-btn svg{width:24px; height:24px}
  /* l'etichetta della schedina sta sotto il tondo: va tenuta leggibile, non in ombra */
  .tbm-nav .tbm-slip > span{margin-top:auto; color:var(--tbm-ink)}

  /* il contatore delle selezioni: compare solo se c'è davvero qualcosa dentro */
  .tbm-nav .tbm-count{
    /* sporge in alto a destra del tondo e sta SOPRA a tutto: se finisce sotto il bordo
       il numero si perde a metà, ed è il numero che dice quante giocate hai in mano */
    position:absolute; top:-5px; right:-7px; z-index:3;
    min-width:19px; height:19px;
    padding:0 5px; border-radius:99px;
    background:var(--tbm-live); color:#fff;
    font-size:11px; font-weight:900; line-height:19px; text-align:center;
    box-shadow:0 0 0 2px var(--tbm-ring); display:none}
  .tbm-nav.has-slip .tbm-count{display:block}


  @media (prefers-reduced-motion: reduce){
    .tbm-nav .tbm-live-dot{animation:none}
    #leftSidebarSport.left-sidebar, #rightSidebarSport.right-sidebar,
    .sidebar--overlay{transition:none}
  }
}

/* ═══ 6-bis. CHI ESCE DOVE — il cancello in negativo ═══════════════════════════════════════
     sotto i 901 px .... la barra esce SEMPRE, in CSS puro: se il JS non parte, il telefono non
                         resta senza schedina. Quella superficie non può dipendere da uno script.
     fra 901 e 1023 .... esce **solo col marchio** `data-tbm-coupon-fuori`, che lo script della
                         barra mette **misurando se il coupon si raggiunge** (vedi
                         `_bottom_nav.html`) — non col nome di una skin né di una pagina.
   🔴 Perché misurando: alla stessa larghezza il coupon c'è sulla home e non c'è sul palinsesto,
   su tutte e tre le skin. Una regola scritta col nome di una skin sarebbe sbagliata su metà delle
   sue pagine; una scritta col nome di una pagina invecchia alla prima pagina nuova. */
@media (min-width: 901px) and (max-width: 1023px){
  html:not([data-tbm-coupon-fuori]) .tbm-nav{display:none}
  /* lo spazio in fondo si dà SOLO dove la barra c'è davvero, o dove non esce resterebbe una
     striscia vuota di 56px sotto il contenuto */
  html[data-tbm-coupon-fuori] body{padding-bottom:var(--tbm-alzata) !important}
}

/* ── I BOTTONI FLOTTANTI SEGUONO LA BARRA, non la larghezza ────────────────────────────────
   Prima questa riga stava dentro il blocco della barra, e alzarla a 1023 avrebbe sollevato i
   flottanti dove la barra **non** esce: 68 px di vuoto sotto un bottone. Due cancelli, **una**
   dichiarazione. */
@media (max-width: 900px){
  .pa-fab, .tbtour-fab{bottom:var(--tbm-alzata) !important}
}
@media (min-width: 901px) and (max-width: 1023px){
  html[data-tbm-coupon-fuori] .pa-fab,
  html[data-tbm-coupon-fuori] .tbtour-fab{bottom:var(--tbm-alzata) !important}
}

/* ═══ 7. TABLET ═══
   A 768px non serve la barra da telefono: ci sta ancora una colonna in più.
   Si toglie solo ciò che deborda e si allarga il tocco. */
@media (min-width: 901px) and (max-width: 1024px){
  .hd-menu--list{flex-wrap:wrap}
  .qt-btn{min-height:40px}
  .left-sidebar{width:240px; min-width:0}
}

/* ── LA BANDA SPORT DEL TEMA SCORRE NEL SUO CONTENITORE (bug GC 20/07) ─────────────────
   `.tab-items--c` (markup del tema, vive nel DB) è un flex NOWRAP largo quanto la somma
   degli sport (1086px con l'offerta di oggi): senza questo, o un antenato la clippa (gli
   sport oltre il bordo diventano IRRAGGIUNGIBILI) o — dove il clip non c'è — trascina la
   pagina in overflow-x. Vale a ogni larghezza: anche la colonna desktop è più stretta
   della banda. La pagina non scrolla MAI di lato: già garantito dal guard html/body. */
.box-main--sports-tab .tab-items--ctm,
.box-main--sports-tab .box-main--typemarket-container{
  overflow-x:auto; -webkit-overflow-scrolling:touch; scrollbar-width:none}
.box-main--sports-tab .tab-items--ctm::-webkit-scrollbar{display:none}

/* ── IL CAMPO RICERCA DELLA NAVBAR SPORT VA A CAPO SU MOBILE (bug GC 20/07) ────────────
   `.box-main--top` è flex NOWRAP e largo ~1307px: la strip sport scorre nel suo box (fix
   precedente), ma il `.search-box--ctm` — fratello FUORI dallo scroll, largo fisso 443px —
   restava tagliato/fuori dal viewport a 390/360. Qui, sotto i 900px, la riga va a capo: la
   strip tiene la prima riga (e scorre), il search scende sotto a piena larghezza e si
   comprime nel contenitore. Il body non scrolla mai di lato (guard html/body sopra). */
@media (max-width: 900px){
  /* prima: il contenitore della navbar sport NON deve essere più largo del viewport, se no
     le % dei figli si calcolano su 1307px (il search diventava 1117px). */
  .box-main--sports-tab,
  .box-main--sports-tab .box-main--wrapper,
  .box-main--sports-tab .box-main--top{max-width:100%;min-width:0;box-sizing:border-box}
  .box-main--sports-tab .box-main--top{flex-wrap:wrap;width:100%}
  /* la strip tiene la prima riga e scorre nel suo box; il search scende sotto a piena
     larghezza del VIEWPORT (ora che il contenitore è vincolato) e si comprime. */
  .box-main--sports-tab .box-main--center{flex:1 1 100%;min-width:0;max-width:100%;overflow-x:auto}
  .box-main--sports-tab .box-main--left{flex:0 0 auto;min-width:0}
  .box-main--sports-tab .box-main--right{flex:1 1 100%;width:100%;max-width:100%;min-width:0;margin-top:6px}
  .box-main--sports-tab .search-box--ctm{width:100%;max-width:100%;min-width:0;box-sizing:border-box}
  .box-main--sports-tab .search-box--ctm input{width:100%;min-width:0;box-sizing:border-box}
}

/* ============================================================================
   MENU SINISTRO COLLASSATO — «live» diventa solo un pallino (richiesta Dav 22/07)
   «quando é collapsed/minimizzato togli la scritta live e lascia solo il pallino
   rosso (font size 0, border-radius 50%) così non fa sballare il layout».

   Stato: il tema mette `.active` sulla sidebar ESPANSA → il collassato è
   `.left-sidebar:not(.active)`. Da espanso resta tutto com'è (testo + pallino).

   ⚠️ Perché questa regola sta QUI e non in tb.css: sulle pagine a tema importato
   `tb.css` NON è caricato — i fogli sono quelli del tema (`/player/theme-asset/…`)
   più questo `app_mobile.css`, iniettato con <link> nell'head dalla middleware.
   Questo è l'unico nostro foglio che arriva a quelle pagine. (Regola di casa
   rispettata: file .css collegato, nessun inline.) Se un domani la middleware
   inietterà più fogli, questa sezione può traslocare in `tb_components.css`.
   Design D.
   ========================================================================== */

.left-sidebar:not(.active) .ms-tag.live,
.left-sidebar:not(.active) .ms-live{
  /* la scritta sparisce senza togliere il nodo (niente salti di layout) */
  font-size:0;
  line-height:0;
  /* … e l'indicatore diventa un pallino tondo */
  display:inline-block;
  width:9px;
  height:9px;
  min-width:0;
  padding:0;
  border-radius:50%;
  flex:none;
  vertical-align:middle;
  /* il rosso resta quello del tema: se il badge aveva già il suo fondo lo tiene,
     altrimenti questo fallback lo rende comunque visibile */
  background:#ff3b3b;
  color:transparent;
  border:0;
  box-shadow:0 0 0 2px rgba(255,59,59,.22);
}
/* il pallino non deve allargare la riga né spingere il chevron */
.left-sidebar:not(.active) .btn-menu--group,
.left-sidebar:not(.active) .menu-group > a{ gap:6px; }

/* ============================================================================
   FIX header submenu — hover-gap (BUG Dav 22/07) + spazio voci
   Il tema (template_c_header.css, servito dal DB) apre il submenu con
   `position:absolute; top:100px → 36px; transition:all .5s`: tra la voce e il
   pannello resta un VUOTO e lo slide di mezzo secondo fa perdere l'hover → il
   submenu si chiude prima di poterci cliccare. Questo foglio è iniettato DOPO il
   CSS del tema, quindi vince a parità di selettore (stessa specificità, regola
   più recente). Niente JS. Design D.
   ========================================================================== */

/* il <li> è il contenitore dell'hover: assicuriamoci che il submenu si posizioni
   rispetto a lui e stia ATTACCATO alla voce (niente più top:100px/36px). */
.hd-ctm.hd-ctm--c .hd-ctm--menu ul.hd-menu--list > li{ position:relative; }

.hd-ctm.hd-ctm--c .hd-ctm--menu .hd-submenu--container{
  top:100%;                       /* flush sotto la voce: nessun gap verticale */
  z-index:15;
  /* niente slide di posizione: solo un fade rapido, così non "scappa" */
  transition:opacity .12s ease, visibility .12s ease;
  opacity:0; visibility:hidden;   /* nascosto ma pronto (no display:none: serve l'hover) */
}
.hd-ctm.hd-ctm--c .hd-ctm--menu ul.hd-menu--list > li:hover .hd-submenu--container{
  top:100%;                       /* resta attaccato, non salta */
  opacity:1; visibility:visible;
  transition:opacity .12s ease;
}

/* PONTE invisibile che copre l'eventuale micro-gap tra la voce e il pannello:
   così spostando il cursore verso il basso non si esce mai dall'area in hover. */
.hd-ctm.hd-ctm--c .hd-ctm--menu .hd-submenu--container::before{
  content:""; position:absolute; inset-inline:0; top:-10px; height:12px;
  background:transparent;
}
/* mentre il submenu è aperto, tieni la freccia/voce in stato attivo (feedback) */
.hd-ctm.hd-ctm--c .hd-ctm--menu ul.hd-menu--list > li:hover > a .mdi-chevron-down{
  transform:rotate(180deg);
}

/* --- SPAZIO VOCI: righe COMPATTE (Angelo Repoli 24/07): meno padding verticale, più dense, così
   ne entrano di più senza scroll — coerente con la tendina LIVE qui sotto. --- */
.hd-ctm.hd-ctm--c .hd-ctm--menu .hd-submenu--container ul > li{
  text-align:left; font-size:12.5px; padding:0; border-radius:0;
}
.hd-ctm.hd-ctm--c .hd-ctm--menu .hd-submenu--container ul > li + li{
  border-top:1px solid rgba(255,255,255,.06);   /* separatore leggibile */
}
.hd-ctm.hd-ctm--c .hd-ctm--menu .hd-submenu--container ul > li a{
  display:flex; align-items:center;
  padding:.28rem .8rem;           /* righe più strette/dense (prima .5rem) */
  font-size:12.5px; line-height:1.2; font-weight:400;
  border-left:0;                  /* il filetto a sinistra affollava: via */
  white-space:nowrap;
}
.hd-ctm.hd-ctm--c .hd-ctm--menu .hd-submenu--container ul > li a:hover{
  background:rgba(47,127,209,.10);   /* hover BLU come la tendina LIVE: uniforme su tutte e 5 le voci
                                        e leggibile sul fondo bianco/blu dei submenu (Angelo 24/07) */
}
.hd-ctm.hd-ctm--c .hd-ctm--menu .hd-submenu--container{
  min-width:210px; padding:4px 0; border-radius:6px;
  box-shadow:0 12px 30px rgba(0,0,0,.35);
}

@media (prefers-reduced-motion:reduce){
  .hd-ctm.hd-ctm--c .hd-ctm--menu .hd-submenu--container{transition:none}
}

/* ============================================================================
   ICONA CALENDARIO chiara sui campi data SCURI (Dav 22/07)
   Nei filtri con campo navy (`.tb-filtri`, e `.bl--scuro`), l'indicatore nativo
   del date input è scuro su fondo scuro → invisibile. Lo schiariamo. NON tocchiamo
   i filtri a campo bianco (`.bl` chiaro di «Le mie scommesse»): lì l'icona scura si
   vede già, e invertirla la renderebbe bianco-su-bianco. CSS via <link>. Design D.
   ========================================================================== */
.tb-filtri input[type=date]::-webkit-calendar-picker-indicator,
.bl--scuro .bl-campo input[type=date]::-webkit-calendar-picker-indicator{
  filter:invert(1) opacity(.7);   /* bianco/grigio chiaro come il testo del campo */
  cursor:pointer;
}
.tb-filtri input[type=date]:hover::-webkit-calendar-picker-indicator,
.bl--scuro .bl-campo input[type=date]:hover::-webkit-calendar-picker-indicator{
  filter:invert(1) opacity(1);
}

/* ============================================================================
   A32 — INTESTAZIONE LOGGATA COMPATTA E RESPONSIVE (22/07)
   Segnalazione: su telefono i pulsanti dell'header (CONTO, DEPOSITA, PREMI,
   saldo, ESCI, ingranaggio) sono troppo grandi, sbordano e si TAGLIANO — l'ESCI
   a sinistra e il saldo a destra.

   CAUSA. Il tema importato veste il mobile solo per `.hd-ctm--a`; per la skin
   servita `.hd-ctm--c` lo stato LOGGATO non ha regole per telefono. Lì il
   contenitore ha `justify-content:center` e gli item misure fisse (btn
   `min-width:100px`, account-menu 40px, account-info `margin:0 1rem`): a ~390px
   la fila è più larga dello schermo e, essendo CENTRATA, viene tagliata da
   ENTRAMBI i lati.

   RIMEDIO. Fila ancorata a destra, item compatti, SALDO sempre per intero e
   leggibile. Sotto i 430px le icone secondarie (conto/premi/messaggi) — già
   raggiungibili dal menu account — si ritirano e l'ESCI resta come sola icona,
   così saldo + deposita + menu + esci ci stanno tutti senza clipping. Niente
   scroll-container: aprirebbe il taglio sui menu a tendina (account/lingua) che
   ricadono verso il basso. CSS via <link> (regola di casa), non inline. Design D.
   ========================================================================== */
@media (max-width:768px){
  .hd-ctm.hd-ctm--c .hd-ctm--auth.hd-ctm--auth-logged{overflow:visible; min-width:0}
  .hd-ctm.hd-ctm--c .hd-ctm--auth.hd-ctm--auth-logged .hd-ctm--auth-wrapper{
    padding:0 4px; gap:6px; flex-wrap:nowrap; min-width:0;
    justify-content:flex-end;   /* la fila abbraccia il bordo destro, non è più centrata */
  }
  /* SALDO: intero, in grassetto, non va mai a capo */
  .hd-ctm.hd-ctm--c .hd-ctm--auth.hd-ctm--auth-logged .account-info{
    margin:0 4px 0 0; min-width:0; flex:0 0 auto;
  }
  .hd-ctm.hd-ctm--c .hd-ctm--auth.hd-ctm--auth-logged .account-info span.info-amount{
    font-size:13px; font-weight:800; white-space:nowrap;
  }
  .hd-ctm.hd-ctm--c .hd-ctm--auth.hd-ctm--auth-logged .account-info span.info-user{
    font-size:10.5px; max-width:22vw; overflow:hidden; text-overflow:ellipsis; white-space:nowrap;
  }
  /* icone (conto/deposita/messaggi) e ingranaggio: compatte, misura fissa piccola */
  .hd-ctm.hd-ctm--c .hd-ctm--auth.hd-ctm--auth-logged .account-icon{
    height:30px; min-width:30px; padding:0 7px; font-size:18px; flex:0 0 auto; border-radius:8px;
  }
  .hd-ctm.hd-ctm--c .hd-ctm--auth.hd-ctm--auth-logged .account-menu{
    width:30px; min-width:30px; height:30px; font-size:19px; flex:0 0 auto;
  }
  /* ESCI/logout: via i 100px fissi */
  .hd-ctm.hd-ctm--c .hd-ctm--auth.hd-ctm--auth-logged .btn-ctm,
  .hd-ctm.hd-ctm--c .hd-ctm--auth.hd-ctm--auth-logged ~ .hd-ctm--auth .btn-ctm{
    min-width:auto; padding:6px 9px; flex:0 0 auto;
  }
}

/* fascia stretta dei telefoni: si libera lo spazio che serve al saldo */
@media (max-width:430px){
  /* l'username si legge nel menu account: sul saldo pesa e basta */
  .hd-ctm.hd-ctm--c .hd-ctm--auth.hd-ctm--auth-logged .account-info span.info-user{display:none}
  /* conto / premi / messaggi restano nel menu account, non nella barra */
  .hd-ctm.hd-ctm--c .hd-ctm--auth.hd-ctm--auth-logged .account-icon:not(.account-deposit){display:none}
  /* ESCI diventa sola icona (il testo starebbe stretto); ACCEDI/REGISTRATI da sloggato NON è toccato */
  .hd-ctm.hd-ctm--c .hd-ctm--auth.hd-ctm--auth-logged .btn-ctm .btn-text,
  .hd-ctm.hd-ctm--c .hd-ctm--auth.hd-ctm--auth-logged ~ .hd-ctm--auth .btn-ctm .btn-text{display:none}
  .hd-ctm.hd-ctm--c .hd-ctm--auth.hd-ctm--auth-logged .hd-ctm--auth-wrapper{gap:4px}
}

/* ⛔ 13/08 — QUI C'ERA IL VESTITO DELLA TENDINA «LIVE» dell'header (17 righe, `.tb-livedd*`).
   La tendina l'ha fatta togliere Angelo il 13/08 21:36 («questa tendina toglila»), e il suo
   markup è uscito da `player_ui/templates/player/_live_dropdown.html`. Tolto anche il vestito:
   del CSS che non veste più niente non se ne accorge nessuno, e resta addosso a ogni pagina.
   👉 Dove è finita la strada che apriva (il live di UNO sport) sta scritto per intero in
   `player/_frammenti_di_ogni_pagina.html`: è la barra sport della pagina «in diretta». */

/* ═══ 8. DESKTOP: LA COLONNA DEL COUPON DEVE AVERE UNA MISURA ═══
   A32, 04/08 08:09, con la foto: «ho selezionato GG a 1.85 e non vedo cosa sto giocando». La
   colonna destra è ridotta a una striscia col testo tagliato («Comprimi la barra», «LE M…»).

   Misurato sul vivo (skin 11): coupon largo 237px a 1913, **156px a 1400**, 138 a 1280, 109 a
   1100. Non è un restringimento: è che a desktop NESSUNA regola nostra gli dà una larghezza, e
   il tema importato gliela toglie —

       template_c.css   .page-container--sport .main-wrapper .right-sidebar { width: 0 }
       template_c.css   .box-sidebar--coupon.box-sidebar--coupon           { width: 10px }

   — quindi quel che si vede sono i soli pixel di traboccamento del contenuto. Sotto i 900px il
   coupon è il foglio che sale dal basso ed è largo quanto lo schermo (sezione 5 qui sopra):
   mancava **solo** il caso desktop, e per questo non l'aveva visto nessuno misurando stretto.

   ⚠️ NON è una regressione delle CSS di stanotte: confrontati i selettori del pacchetto con
   cinque versioni precedenti → zero regole di sidebar perse; il tema della skin non cambia dal
   28/07 e questo foglio non era stato toccato. Il difetto c'era da prima, su ogni skin che monta
   questo tema.

   L'id batte le classi del tema (specificità 1,1,1 contro 0,3,0): niente `!important`, così un
   cliente può ancora scavalcarla dal suo tema. La misura è quella che il tema usa altrove per la
   colonna a tre (`page-3--columns` → 270px), arrotondata ai 300 del coupon di famiglia.

   ⚠️ La soglia è **1024, non 901**: fra 901 e 1023 il tema il coupon non lo disegna affatto
   (misurato: coupon 0 a 901, 920 e 1000; compare a 1024). Con 901 avrei riservato una colonna
   VUOTA da 300px su quella fascia — cioè avrei curato il desktop rompendo il tablet. */
@media (min-width: 1024px) {
  #rightSidebarSport.right-sidebar { width: 300px; max-width: 300px; flex: 0 0 300px; }
  #rightSidebarSport .right-sidebar--wrapper { width: 100%; }
  #rightSidebarSport .box-sidebar--coupon { width: 100%; max-width: 100%; }
}
