/* =====================================================================
   NEXFIBER - FOGLIO DEL TELEFONO E DEL TABLET
   Riscritto da zero il 28/10/2026.

   REGOLA DI QUESTO FILE: ogni riga sta dentro uno dei due @media.
   Fuori dai due blocchi non c'e' nulla, mai: il desktop (app.css)
   non puo' essere toccato da questo foglio.

   Soglie ammesse, uniche:
     900px  = telefono verticale e orizzontale, tablet verticale
     1200px = tablet orizzontale e schermi piccoli

   Nessuna regola per singola pagina. Si lavora solo sul vocabolario
   comune: sezione, carta, griglia, campo, tabella, filtri, azioni,
   testata-pagina, fisa, linguette, pagine, popup.
   Se una pagina esce storta si corregge la regola generica,
   NON si aggiunge un blocco per quella pagina.
   ===================================================================== */


/* =====================================================================
   TABLET ORIZZONTALE E SCHERMI PICCOLI (1200px)
   Si riduce il numero di colonne, niente altro.
   ===================================================================== */
@media (max-width: 1200px) {
  .griglia, .griglia-4, .griglia-importi, .dati-gruppo, .wic-griglia,
  .wz-corpo, .record-fatti, .anagrafica, .dati-record, .ct-pannello,
  .gr-area { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .cruscotto { grid-template-columns: 1fr; }
  .campo.largo-2 { grid-column: 1 / -1; }
  .indice { position: static; flex-direction: row; overflow-x: auto; gap: .25rem; }
  .indice a { white-space: nowrap; }
}


/* =====================================================================
   TELEFONO E TABLET VERTICALE (900px)
   ===================================================================== */
@media (max-width: 900px) {

  /* ---- 1. IMPIANTO -------------------------------------------------
     Una colonna sola, menu che entra da sinistra, niente scorrimento
     laterale in nessun punto, contenuto largo quanto lo schermo. */
  html, body { max-width: 100%; overflow-x: hidden; }
  body { font-size: 15px; }

  .app { grid-template-columns: 1fr; }
  .lato {
    position: fixed; left: 0; top: 0; width: 260px; height: 100vh;
    transform: translateX(-105%); transition: transform .2s;
    box-shadow: 0 0 40px rgba(0, 0, 0, .35); z-index: 1200; }
  .lato-aperto .lato { transform: none; }
  :root.lato-stretto { --lato: 240px; }
  .lato-stretto .lato-titolo, .lato-stretto .lato-gruppo a span { display: initial; }
  .lato-stretto .utente-testo { display: flex; }
  .lato-stretto .lato .marchio { font-size: 1.08rem; gap: .55rem; }
  .lato-stretto .lato-testa, .lato-stretto .lato-piede,
  .lato-stretto .lato-comandi { flex-direction: row; }

  .cima { padding: 0 .75rem; gap: .6rem; }
  .cima-azioni span, .cima-azioni .utente-testo { display: none; }
  .cima-azioni .primario { padding: .5rem .6rem; }

  .principale, .contenuto, #contenuto { max-width: 100%; overflow-x: hidden; }
  .contenuto { padding: .9rem 0 4rem; }   /* niente rientri laterali */

  .solo-telefono { display: inline-flex !important; }
  .solo-desktop { display: none !important; }


  /* ---- 2. TESTO ----------------------------------------------------
     Niente parole spezzate lettera per lettera: si annullano i tagli
     automatici ovunque e si lascia andare a capo solo i valori lunghi. */
  #contenuto *, #contenuto *::before, #contenuto *::after {
    hyphens: manual !important; -webkit-hyphens: manual !important;
    word-break: normal !important; }
  #contenuto td, #contenuto dd, #contenuto p, #contenuto a,
  #contenuto .solo-testo-mobile { overflow-wrap: break-word; }
  #contenuto h1 { font-size: 1.25rem; }
  #contenuto h2 { font-size: 1.05rem; }
  #contenuto h3 { font-size: .98rem; }


  /* ---- 3. TESTATE E BRICIOLE --------------------------------------- */
  #contenuto .imp-briciole, #contenuto .briciole,
  .principale > .briciole-guscio {
    padding: .5rem .85rem 0; margin: 0 0 .35rem;
    font-size: .8rem; flex-wrap: wrap; }

  #contenuto .testata-pagina, #contenuto .imp-testata {
    display: block; padding: .6rem .85rem 0; margin: 0 0 .8rem; }
  #contenuto .testata-pagina h1, #contenuto .imp-testata h1 {
    font-size: 1.25rem; margin: 0 0 .2rem; }
  #contenuto .riepilogo-righe, #contenuto .sottotitolo,
  #contenuto .imp-testata p { font-size: .85rem; margin: 0 0 .5rem; }
  #contenuto .sezione-testa { display: block; }


  /* ---- 4. BOTTONI --------------------------------------------------
     Tutti della stessa misura, due per riga. Numero dispari:
     l'ultimo prende la riga intera. */
  #contenuto .testata-pagina .azioni, #contenuto .imp-azioni,
  #contenuto .sezione-testa .azioni, #contenuto .barra-azioni,
  #contenuto .piede-carta {
    display: grid; grid-template-columns: 1fr 1fr; gap: .5rem;
    width: 100%; margin: .6rem 0 0; float: none; }
  #contenuto .testata-pagina .azioni > *, #contenuto .imp-azioni > *,
  #contenuto .sezione-testa .azioni > *, #contenuto .barra-azioni > *,
  #contenuto .piede-carta > * {
    display: inline-flex; align-items: center; justify-content: center;
    width: 100%; min-width: 0; box-sizing: border-box;
    height: 2.6rem; padding: 0 .6rem; margin: 0;
    font-size: .9rem; text-align: center; white-space: nowrap; }
  #contenuto .testata-pagina .azioni > *:last-child:nth-child(odd),
  #contenuto .imp-azioni > *:last-child:nth-child(odd),
  #contenuto .sezione-testa .azioni > *:last-child:nth-child(odd),
  #contenuto .barra-azioni > *:last-child:nth-child(odd),
  #contenuto .piede-carta > *:last-child:nth-child(odd) { grid-column: 1 / -1; }

  /* importare ed esportare sono cose da computer */
  #contenuto .solo-desktop-import { display: none !important; }


  /* ---- 5. FILTRI ---------------------------------------------------
     Stessa identica griglia dei bottoni. Ricerca e pastiglie
     prendono la riga intera. Nessun interruttore. */
  #contenuto .filtri, #contenuto .barra-filtri, #contenuto .filtri-riga {
    display: grid; grid-template-columns: 1fr 1fr; gap: .5rem;
    padding: 0 .85rem; margin: 0 0 .8rem; }
  #contenuto .filtri > *, #contenuto .barra-filtri > *,
  #contenuto .filtri-riga > * {
    width: 100%; min-width: 0; max-width: 100%; margin: 0;
    box-sizing: border-box; height: 2.6rem; }
  #contenuto .filtri > input[type="search"], #contenuto .filtri > .segmenti,
  #contenuto .barra-filtri > input[type="search"], #contenuto .barra-filtri > .segmenti,
  #contenuto .filtri-riga > input[type="search"],
  #contenuto .filtri-pastiglie { grid-column: 1 / -1; }
  #contenuto .filtri-pastiglie {
    display: flex; flex-wrap: wrap; gap: .4rem; height: auto;
    padding: 0 .85rem; margin: 0 0 .6rem; }
  #contenuto .filtri > label.levetta-riga,
  #contenuto .barra-filtri > label.levetta-riga { display: none !important; }


  /* ---- 6. BLOCCHI E CAMPI ------------------------------------------
     I riquadri arrivano ai bordi dello schermo, lo spazio sta dentro. */
  #contenuto .sezione, #contenuto .carta, #contenuto .imp-pannello,
  #contenuto .imp-carta, #contenuto .pan, #contenuto .riquadro,
  #contenuto .scheda, #contenuto .nota-blocco, #contenuto .record,
  #contenuto .pr-testata, #contenuto .pr-carta, #contenuto .mg-blocco,
  #contenuto .tk-pan, #contenuto .record-testa {
    width: 100%; max-width: 100%; box-sizing: border-box;
    margin: 0 0 .7rem; padding: .9rem .85rem;
    border-left: 0; border-right: 0; border-radius: 0;
    box-shadow: none; overflow-x: hidden; }

  #contenuto .griglia, #contenuto .griglia-campi, #contenuto .griglia-4,
  #contenuto .griglia-importi, #contenuto .dati-gruppo, #contenuto .anagrafica,
  #contenuto .carta dl, #contenuto .cfg-riga, #contenuto .imp-griglia,
  #contenuto .riquadri-totali, #contenuto .ct-pannello, #contenuto .gr-area,
  #contenuto .otp-colonne, #contenuto .carte-dato, #contenuto .carte-anello {
    display: grid; grid-template-columns: 1fr; gap: .4rem; width: 100%; }

  #contenuto .campo { width: 100%; max-width: 100%; margin: 0 0 .7rem;
    box-sizing: border-box; }
  #contenuto input, #contenuto select, #contenuto textarea {
    width: 100%; max-width: 100%; min-width: 0;
    box-sizing: border-box; font-size: 16px; }

  #contenuto .stato-cliente, #contenuto .stato-pieno,
  #contenuto .fat-stato { white-space: nowrap; font-size: .78rem; }


  /* ---- 7. TABELLE --------------------------------------------------
     Tutte, senza eccezioni: righe zebrate ai bordi dello schermo.
     Si vede una sola colonna, il nome. Si tocca la riga e si apre
     sotto il resto (etichetta a sinistra, valore a destra).
     Nessuna casella di selezione, nessuna azione massiva. */
  #contenuto .tabella-scorrevole, #contenuto .tabella-scorre {
    border: 0; background: none; box-shadow: none; padding: 0;
    margin: 0; overflow-x: visible; width: 100%; }

  #contenuto table.tabella { display: block; width: 100%; max-width: 100%;
    border: 0; border-collapse: collapse; }
  #contenuto table.tabella > thead { display: none; }
  #contenuto table.tabella > tbody { display: block; width: 100%; }

  #contenuto table.tabella > tbody > tr {
    display: block; width: 100%; box-sizing: border-box;
    margin: 0; padding: .7rem .85rem; border: 0;
    border-bottom: 1px solid var(--linea); border-radius: 0;
    background: transparent; cursor: pointer; }
  #contenuto table.tabella > tbody > tr:nth-child(odd) { background: var(--superficie-2); }

  #contenuto table.tabella > tbody > tr > td {
    display: none; width: 100%; height: auto; box-sizing: border-box;
    padding: 0; border: 0; text-align: left; }

  /* riga aperta: tutte le celle con etichetta, a coppie */
  #contenuto table.tabella > tbody > tr.aperta > td[data-etichetta] {
    display: grid; grid-template-columns: 8.5rem minmax(0, 1fr);
    gap: .2rem .6rem; align-items: start;
    padding: .3rem 0 0; font-size: .88rem; }
  #contenuto table.tabella > tbody > tr.aperta > td[data-etichetta]::before {
    content: attr(data-etichetta); color: var(--tenue); font-size: .8rem; }
  #contenuto table.tabella > tbody > tr.aperta > td:empty { display: none; }
  #contenuto table.tabella > tbody > tr.aperta > td.azioni-riga {
    display: flex; flex-wrap: wrap; gap: .4rem; padding-top: .6rem; }
  #contenuto table.tabella > tbody > tr.aperta > td.azioni-riga::before { content: none; }

  /* la colonna principale: sempre in vista, mai con l'etichetta davanti */
  #contenuto table.tabella > tbody > tr > td.cella-capo,
  #contenuto table.tabella > tbody > tr > td.mob-tit,
  #contenuto table.tabella > tbody > tr.aperta > td.cella-capo,
  #contenuto table.tabella > tbody > tr.aperta > td.mob-tit {
    display: block; padding: 0; font-weight: 600;
    font-size: .95rem; line-height: 1.35; }
  #contenuto table.tabella > tbody > tr > td.cella-capo::before,
  #contenuto table.tabella > tbody > tr > td.mob-tit::before,
  #contenuto table.tabella > tbody > tr.aperta > td.cella-capo::before,
  #contenuto table.tabella > tbody > tr.aperta > td.mob-tit::before { content: none; }
  #contenuto table.tabella > tbody > tr > td.mob-tit small {
    display: block; font-weight: 400; font-size: .8rem; color: var(--tenue); }

  /* rete di sicurezza: se una riga non e' stata marcata, si vede la prima cella */
  #contenuto table.tabella > tbody > tr:not(:has(> td.cella-capo)):not(:has(> td.mob-tit)) > td:first-child {
    display: block; font-weight: 600; font-size: .95rem; }

  /* mai selezioni, mai barre massive */
  #contenuto table.tabella td.sel, #contenuto table.tabella th.sel,
  #contenuto table.tabella td.scelta, #contenuto .mg-sel-barra,
  #contenuto .sel-barra, #contenuto .barra-massiva { display: none !important; }

  #contenuto table.tabella td input, #contenuto table.tabella td select,
  #contenuto table.tabella td textarea { width: 100%; max-width: 100%; min-width: 0; }
  #contenuto .solo-testo-mobile { display: inline; }

  /* tabelle che non usano la classe .tabella: etichetta e valore, sempre in vista */
  #contenuto table:not(.tabella) { display: block; width: 100%; max-width: 100%; }
  #contenuto table:not(.tabella) > thead { display: none; }
  #contenuto table:not(.tabella) > tbody,
  #contenuto table:not(.tabella) > tbody > tr,
  #contenuto table:not(.tabella) > tbody > tr > td {
    display: block; width: 100%; height: auto; box-sizing: border-box; }
  #contenuto table:not(.tabella) > tbody > tr {
    padding: .7rem .85rem; border-bottom: 1px solid var(--linea); }
  #contenuto table:not(.tabella) > tbody > tr:nth-child(odd) { background: var(--superficie-2); }
  #contenuto table:not(.tabella) > tbody > tr > td { padding: .15rem 0; border: 0; font-size: .88rem; }
  #contenuto table:not(.tabella) > tbody > tr > td[data-etichetta]::before {
    content: attr(data-etichetta) ": "; color: var(--tenue); font-size: .8rem; }
  #contenuto table td.mob-vuota { display: none; }


  /* ---- 7bis. ELENCHI A CARTE E STRISCE DI FASI ---------------------
     Alcune pagine non usano una tabella ma una fila di riquadri,
     con dentro una striscia di fasi. Stessa legge delle tabelle:
     larghi quanto lo schermo, mai di piu'. */
  #contenuto ul, #contenuto ol { padding-left: 0; list-style: none; }
  #contenuto li, #contenuto .riga, #contenuto .riga-carta,
  #contenuto .elenco-righe > *, #contenuto .carta-riga {
    width: 100%; max-width: 100%; box-sizing: border-box;
    min-width: 0; overflow-x: hidden; }

  /* strisce di fasi, tappe e pastiglie: vanno a capo, non allungano la riga */
  #contenuto .pr-passi, #contenuto .fasi, #contenuto .tappe,
  #contenuto .passi, #contenuto .stati-riga, #contenuto .pastiglie,
  #contenuto .segmenti, #contenuto .azioni-riga {
    display: flex; flex-wrap: wrap; gap: .3rem;
    width: 100%; max-width: 100%; min-width: 0; overflow-x: hidden; }
  #contenuto .pr-passi > *, #contenuto .fasi > *,
  #contenuto .tappe > *, #contenuto .passi > * {
    flex: 1 1 4.5rem; min-width: 0; max-width: 100%; }
  #contenuto .wz-passo {
    display: flex; min-width: 0; max-width: 100%; box-sizing: border-box;
    padding: .3rem .5rem; font-size: .75rem; justify-content: center; }
  #contenuto .wz-passo .wz-et { min-width: 0; overflow: hidden;
    text-overflow: ellipsis; white-space: nowrap; }

  /* timeline verticale delle pratiche */
  #contenuto .pr-timeline { padding-left: 0; width: 100%; max-width: 100%; }
  #contenuto .pr-tappa {
    grid-template-columns: 1.8rem minmax(0, 1fr);
    width: 100%; max-width: 100%; min-width: 0; }
  #contenuto .pr-tappa-corpo { min-width: 0; max-width: 100%; }

  /* rete di sicurezza: nessun blocco della pagina supera lo schermo */
  #contenuto > *, #contenuto > * > * {
    max-width: 100%; box-sizing: border-box; min-width: 0; }


  /* ---- 7ter. STRISCE DI AVANZAMENTO (tacche) ----------------------
     Da telefono si vedono solo le barrette, senza il nome della fase
     sotto, e stanno in cima alla riga, sopra il titolo. */
  #contenuto .pr-riga, #contenuto .riga-elenco {
    display: flex; flex-direction: column; align-items: stretch;
    gap: .25rem; width: 100%; max-width: 100%; min-width: 0; }
  #contenuto .pr-riga-fasi, #contenuto .pr-tacche {
    order: -1; display: flex; flex-wrap: nowrap; gap: .25rem;
    width: 100%; max-width: 100%; min-width: 0; margin: 0 0 .2rem; }
  #contenuto .pr-tacche > .pr-tacca, #contenuto .pr-tacca {
    flex: 1 1 0; min-width: 0; max-width: 100%;
    display: block; font-size: 0; line-height: 0;
    overflow: hidden; white-space: nowrap; }
  #contenuto .pr-tacca > * { font-size: 0; line-height: 0; }
  #contenuto .pr-riga-chi, #contenuto .pr-riga-quando,
  #contenuto .pr-pastiglia { min-width: 0; max-width: 100%; }
  #contenuto .pr-riga-avanti { display: none; }


  /* ---- 7quater. ALLINEAMENTO UNICO --------------------------------
     Il contenuto non ha rientri: li mettono le fasce e i blocchi.
     Le tabelle dentro un blocco recuperano il rientro del blocco e
     arrivano ai bordi dello schermo: la zebra e' larga tutto. */
  #contenuto > p, #contenuto > h2, #contenuto > h3,
  #contenuto > .nota, #contenuto > .messaggio, #contenuto > .aiuto,
  #contenuto > .vuoto { padding: 0 .85rem; }

  /* un blocco fatto solo di tabella o di elenco non tiene lo spazio ai
     lati: lo spazio sta dentro la riga, cosi' la zebra arriva ai bordi
     e i bottoni della riga non vengono tagliati. */
  #contenuto .sezione:has(> table), #contenuto .carta:has(> table),
  #contenuto .sezione:has(> .tabella-scorrevole),
  #contenuto .carta:has(> .tabella-scorrevole),
  #contenuto .sezione:has(> .tabella-scorre),
  #contenuto .carta:has(> .tabella-scorre),
  #contenuto .sezione:has(> ul), #contenuto .carta:has(> ul),
  #contenuto .sezione:has(> ol), #contenuto .carta:has(> ol) {
    padding-left: 0; padding-right: 0; }
  #contenuto .sezione:has(> table) > *:not(table):not(ul):not(ol),
  #contenuto .carta:has(> table) > *:not(table):not(ul):not(ol),
  #contenuto .sezione:has(> ul) > *:not(table):not(ul):not(ol),
  #contenuto .carta:has(> ul) > *:not(table):not(ul):not(ol) {
    padding-left: .85rem; padding-right: .85rem; }

  #contenuto .sezione > table, #contenuto .carta > table,
  #contenuto .sezione > .tabella-scorrevole,
  #contenuto .carta > .tabella-scorrevole,
  #contenuto .sezione > .tabella-scorre,
  #contenuto .carta > .tabella-scorre,
  #contenuto .sezione > ul, #contenuto .carta > ul,
  #contenuto .sezione > ol, #contenuto .carta > ol {
    margin-left: 0; margin-right: 0; width: 100%; max-width: 100%; }
  #contenuto .sezione > ul > li, #contenuto .carta > ul > li,
  #contenuto .sezione > ol > li, #contenuto .carta > ol > li {
    padding: .7rem .85rem; border-bottom: 1px solid var(--linea); }
  #contenuto .sezione > ul > li:nth-child(odd),
  #contenuto .carta > ul > li:nth-child(odd) { background: var(--superficie-2); }

  /* ---- 7quinquies. BOTTONI DENTRO LE RIGHE ------------------------
     Due per riga, stessa misura; se sono dispari l'ultimo prende
     tutta la riga. Vale per ogni elenco del portale. */
  #contenuto .azioni-riga, #contenuto .mg-azioni, #contenuto .riga-azioni {
    display: grid; grid-template-columns: 1fr 1fr; gap: .45rem;
    width: 100%; max-width: 100%; margin: .5rem 0 0; }
  #contenuto .azioni-riga > *, #contenuto .mg-azioni > *,
  #contenuto .riga-azioni > * {
    display: inline-flex; align-items: center; justify-content: center;
    width: 100%; min-width: 0; box-sizing: border-box;
    height: 2.5rem; margin: 0; padding: 0 .4rem;
    font-size: .85rem; white-space: nowrap;
    overflow: hidden; text-overflow: ellipsis; }
  #contenuto .azioni-riga > *:last-child:nth-child(odd),
  #contenuto .mg-azioni > *:last-child:nth-child(odd),
  #contenuto .riga-azioni > *:last-child:nth-child(odd) { grid-column: 1 / -1; }

  /* ---- 7sexies. AVANZAMENTO A TUTTA RIGA --------------------------
     Le pillole delle fasi non si tagliano: una per riga, nome intero. */
  #contenuto .pr-passi, #contenuto .wz-passi {
    display: grid; grid-template-columns: 1fr; gap: .35rem;
    width: 100%; max-width: 100%; padding: 0; margin: .5rem 0 0; }
  #contenuto .pr-passi > .wz-passo, #contenuto .wz-passi > .wz-passo {
    width: 100%; max-width: 100%; box-sizing: border-box;
    justify-content: flex-start; padding: .5rem .8rem; font-size: .9rem; }
  #contenuto .wz-passo .wz-et {
    white-space: normal; overflow: visible; text-overflow: clip;
    min-width: 0; }


  /* ---- 7septies. MAPPE --------------------------------------------
     La mappa prende tutta la larghezza dello schermo e resta sempre
     aperta: una mappa chiusa dentro una fisarmonica non serve a nulla. */
  #contenuto .mappa-panoramica, #contenuto .mappa, #contenuto #mp-mappa {
    width: 100vw; max-width: 100vw; margin-left: -.85rem; margin-right: -.85rem;
    height: 60vh; min-height: 320px; border-radius: 0; }
  #contenuto .mappa-piede { padding: .5rem .85rem; }
  #contenuto details:has(.mappa) > summary,
  #contenuto details:has(.mappa-panoramica) > summary { display: none; }
  #contenuto details:has(.mappa) > *:not(summary),
  #contenuto details:has(.mappa-panoramica) > *:not(summary) { display: block; }
  #contenuto .sezione:has(.mappa-panoramica).fisa-chiusa > *:not(.fisa-capo),
  #contenuto .carta:has(.mappa).fisa-chiusa > *:not(.fisa-capo) { display: block; }
  #contenuto .sezione:has(.mappa-panoramica) > .fisa-capo::after,
  #contenuto .carta:has(.mappa) > .fisa-capo::after { content: none; }

  /* ---- 7octies. COVERAGE MAP --------------------------------------
     Da telefono si usa solo la verifica: il riepilogo e' roba da
     scrivania e si nasconde. */
  #contenuto .carta:has(#cop-riepilogo) { display: none; }
  #contenuto .carta:has(#cop-titolo) { width: 100%; max-width: 100%; }
  #contenuto .carta:has(#cop-titolo).fisa-chiusa > *:not(.fisa-capo) { display: block; }
  #contenuto .carta:has(#cop-titolo) > .fisa-capo::after { content: none; }


  /* ---- 8. FISARMONICHE ---------------------------------------------
     Le pagine partono chiuse: in vista restano testata e bottoni.
     Freccia verso il basso da chiuse, girata da aperte. */
  #contenuto .fisa > .fisa-capo {
    display: flex; align-items: center; justify-content: space-between;
    gap: .5rem; cursor: pointer; margin: 0; }
  #contenuto .fisa > .fisa-capo::after {
    content: ""; flex: 0 0 auto; width: .55rem; height: .55rem;
    border-right: 2px solid var(--tenue); border-bottom: 2px solid var(--tenue);
    transform: rotate(45deg); transition: transform .15s; margin: 0 .2rem 0 0; }
  #contenuto .fisa:not(.fisa-chiusa) > .fisa-capo::after { transform: rotate(-135deg); }
  #contenuto .fisa.fisa-chiusa > *:not(.fisa-capo) { display: none; }
  #contenuto .fisa-titolo-dato { margin: 0; font-size: 1rem; }


  /* ---- 9. LINGUETTE ------------------------------------------------
     Non vanno a capo: scorrono dentro la loro striscia, mai la pagina. */
  #contenuto nav.linguette, #contenuto .linguette, #contenuto .linguette-sedi {
    display: flex; flex-wrap: nowrap; overflow-x: auto; gap: .3rem;
    padding: 0 .85rem .4rem; margin: 0 0 .7rem; scrollbar-width: none; }
  #contenuto nav.linguette::-webkit-scrollbar,
  #contenuto .linguette::-webkit-scrollbar,
  #contenuto .linguette-sedi::-webkit-scrollbar { display: none; }
  #contenuto nav.linguette > *, #contenuto .linguette > *,
  #contenuto .linguette-sedi > * { flex: 0 0 auto; white-space: nowrap; }
  #contenuto .linguette-ruoli button {
    flex: 1 1 100%; border-radius: var(--raggio-piccolo);
    border-bottom: 1px solid var(--linea); }


  /* ---- 10. PAGINAZIONE --------------------------------------------- */
  #contenuto .pagine {
    display: grid; gap: .45rem; justify-items: center;
    padding: .9rem .85rem 0; margin: 0; font-size: .85rem; }
  #contenuto .pagine > * { width: 100%; text-align: center; }
  #contenuto .pagine .pag-barra {
    display: flex; align-items: center; justify-content: center; gap: .5rem; }
  #contenuto .pagine button { height: 2.4rem; padding: 0 .8rem; }


  /* ---- 11. POPUP ---------------------------------------------------
     Restano quelli approvati: qui si sistema solo la misura
     sullo schermo stretto. */
  #contenuto .tk-fin-corpo, .tk-fin-corpo { max-height: 68vh; overflow: auto; }
  .tk-fin-piede { display: grid; grid-template-columns: 1fr 1fr; gap: .5rem; }
  .tk-fin-piede > * { width: 100%; justify-content: center; margin: 0; }
  .nf-popup { width: 100%; max-width: 100%; max-height: 86vh; padding: 18px; }
  .nf-popup .nf-azioni { display: grid; grid-template-columns: 1fr 1fr; gap: .5rem; }
  .nf-popup .nf-azioni > * { width: 100%; justify-content: center; }
  #nf-avvisi { left: 12px; right: 12px; bottom: 12px; max-width: none; }

  /* ---- 12. SCHEDE A DUE COLONNE -----------------------------------
     Qualunque scheda a colonne affiancate diventa una colonna sola:
     due colonne su schermo stretto schiacciano il testo fino a
     mandarlo a capo lettera per lettera. */
  #contenuto .tk-scheda, #contenuto .tk-gest {
    display: grid; grid-template-columns: minmax(0, 1fr); gap: .7rem;
    width: 100%; max-width: 100%; }
  #contenuto .tk-col-sx, #contenuto .tk-col-dx {
    width: 100%; max-width: 100%; min-width: 0; }
  #contenuto .tk-bolla { max-width: 100%; min-width: 0; }
  #contenuto .tk-bolla p { overflow-wrap: break-word; }

  /* ---- 13. GRIGLIE DI SCHEDA ANCORA A PIU COLONNE -----------------
     Qualunque griglia di campi o riquadri torna a una colonna sola.
     Bottoni, filtri e azioni restano a due: sono gestiti sopra. */
  #contenuto .wic-griglia, #contenuto .cop-griglia, #contenuto .pr-griglia,
  #contenuto .mg-campi, #contenuto .srv-foto-pan, #contenuto .wz-corpo,
  #contenuto .carte-dato, #contenuto .carte-anello, #contenuto .riquadri-totali,
  #contenuto .record-fatti, #contenuto .dati-record {
    grid-template-columns: minmax(0, 1fr); }

  /* ---- 14. FISARMONICHE: MISURA UNICA -----------------------------
     Testata uguale per tutte: stesso rientro a sinistra del resto
     della pagina, titolo a sinistra, freccia a destra, stessa altezza. */
  #contenuto .fisa { padding-left: 0; padding-right: 0; }
  #contenuto .fisa > .fisa-capo {
    display: flex; align-items: center; justify-content: space-between;
    gap: .6rem; width: 100%; box-sizing: border-box;
    padding: .85rem; margin: 0; min-height: 3rem; }
  #contenuto .fisa > .fisa-capo > * { margin: 0; min-width: 0; }
  #contenuto .fisa > .fisa-capo h2,
  #contenuto .fisa > .fisa-capo h3,
  #contenuto .fisa > .fisa-capo .fisa-titolo-dato {
    font-size: 1.05rem; font-weight: 600; line-height: 1.3;
    flex: 1 1 auto; text-align: left; }
  #contenuto .fisa > .fisa-capo::after { flex: 0 0 auto; margin: 0; }
  #contenuto .fisa > *:not(.fisa-capo) {
    padding-left: .85rem; padding-right: .85rem; }
  #contenuto .fisa > table, #contenuto .fisa > .tabella-scorrevole,
  #contenuto .fisa > .tabella-scorre, #contenuto .fisa > ul, #contenuto .fisa > ol {
    padding-left: 0; padding-right: 0; }

  /* ---- 15. CALENDARIO ---------------------------------------------
     Sette colonne restano sette: si abbassano le celle e il contenuto
     sta dentro, cosi il mese intero entra nello schermo. */
  #contenuto .cal-griglia {
    grid-template-columns: repeat(7, minmax(0, 1fr));
    width: 100%; max-width: 100%; gap: 1px; }
  #contenuto .cal-griglia > * {
    min-width: 0; min-height: 3.2rem; padding: .2rem .15rem;
    box-sizing: border-box; overflow: hidden; font-size: .78rem; }
  #contenuto .cal-griglia .cal-num,
  #contenuto .cal-griglia > * > b { font-size: .8rem; }
  #contenuto .cal-ev, #contenuto .cal-griglia .pastiglia,
  #contenuto .cal-griglia a, #contenuto .cal-griglia small {
    display: block; width: 100%; max-width: 100%; min-width: 0;
    font-size: .62rem; line-height: 1.15; padding: .05rem .15rem;
    margin: .1rem 0 0; white-space: nowrap;
    overflow: hidden; text-overflow: ellipsis; }
  #contenuto .cal-legenda, #contenuto .cal-capo {
    display: flex; flex-wrap: wrap; gap: .4rem; font-size: .8rem; }

  /* ---- 16. CALENDARIO: classi vere --------------------------------
     cal-cella e cal-voce sono i nomi reali. La griglia arriva ai due
     bordi dello schermo, le celle stanno dentro la loro colonna. */
  #contenuto .cal-griglia {
    display: grid; grid-template-columns: repeat(7, minmax(0, 1fr));
    width: 100%; max-width: 100%; margin: 0; box-sizing: border-box; }
  #contenuto .cal-testa {
    display: grid; grid-template-columns: repeat(7, minmax(0, 1fr));
    width: 100%; max-width: 100%; box-sizing: border-box; }
  #contenuto .cal-cella {
    min-width: 0; max-width: 100%; box-sizing: border-box;
    min-height: 3.4rem; padding: .2rem .15rem; overflow: hidden; }
  #contenuto .cal-num { font-size: .8rem; }
  #contenuto .cal-voce, #contenuto .cal-p {
    display: block; width: 100%; max-width: 100%; min-width: 0;
    box-sizing: border-box; font-size: .6rem; line-height: 1.15;
    padding: .05rem .1rem; margin: .1rem 0 0;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  #contenuto .cal-legenda { display: flex; flex-wrap: wrap; gap: .4rem; font-size: .78rem; }

  /* ---- 17. LEGENDA DEL CALENDARIO ---------------------------------
     I quadratini restano quadratini: una voce per riga, pallino a
     sinistra e scritta accanto, senza andare a capo. */
  #contenuto .cal-legenda {
    display: grid; grid-template-columns: minmax(0, 1fr);
    gap: .3rem; padding: .6rem .85rem; font-size: .82rem; }
  #contenuto .cal-legenda > * {
    display: flex; align-items: center; gap: .45rem;
    width: 100%; min-width: 0; }
  #contenuto .cal-legenda span, #contenuto .cal-legenda i,
  #contenuto .cal-legenda em, #contenuto .cal-legenda b {
    flex: 0 0 auto; }
  #contenuto .cal-legenda .cal-p, #contenuto .cal-legenda > * > span:first-child,
  #contenuto .cal-legenda > * > i:first-child {
    width: .85rem; height: .85rem; min-width: .85rem; max-width: .85rem;
    flex: 0 0 .85rem; border-radius: 3px; padding: 0; margin: 0;
    display: inline-block; font-size: 0; }

  /* ---- 19. TABELLE elenco-mob -------------------------------------
     Sono le tabelle marcate da comune.js con mob-tit / mob-alto /
     mob-stato: la riga mostra il nome, il resto sta sotto.
     Valgono per tutte le pagine che usano elenco-mob. */
  #contenuto table.elenco-mob { display: block; width: 100%; max-width: 100%; }
  #contenuto table.elenco-mob > thead { display: none; }
  #contenuto table.elenco-mob > tbody { display: block; width: 100%; }
  #contenuto table.elenco-mob > tbody > tr {
    display: block; width: 100%; max-width: 100%; box-sizing: border-box;
    padding: .7rem .85rem; margin: 0; border: 0;
    border-bottom: 1px solid var(--linea); }
  #contenuto table.elenco-mob > tbody > tr:nth-child(odd) { background: var(--superficie-2); }
  #contenuto table.elenco-mob > tbody > td,
  #contenuto table.elenco-mob > tbody > tr > td {
    display: none; width: 100%; max-width: 100%; min-width: 0;
    height: auto; padding: 0; border: 0; text-align: left; box-sizing: border-box; }
  #contenuto table.elenco-mob > tbody > tr > td.mob-tit {
    display: block; font-weight: 600; font-size: .95rem; line-height: 1.35; }
  #contenuto table.elenco-mob > tbody > tr > td.mob-tit small {
    display: block; font-weight: 400; font-size: .8rem; color: var(--tenue); }
  #contenuto table.elenco-mob > tbody > tr > td.mob-alto,
  #contenuto table.elenco-mob > tbody > tr > td.mob-stato {
    display: block; font-size: .8rem; color: var(--tenue); margin: .1rem 0 0; }
  #contenuto table.elenco-mob > tbody > tr > td.azioni-riga {
    display: grid; grid-template-columns: 1fr 1fr; gap: .45rem; margin: .5rem 0 0; }
  #contenuto table.elenco-mob > tbody > tr > td.azioni-riga > * {
    display: inline-flex; align-items: center; justify-content: center;
    width: 100%; min-width: 0; box-sizing: border-box; height: 2.4rem;
    margin: 0; padding: 0 .4rem; font-size: .85rem;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  #contenuto table.elenco-mob > tbody > tr > td.azioni-riga > *:last-child:nth-child(odd) {
    grid-column: 1 / -1; }
  #contenuto table.elenco-mob td.mg-chk, #contenuto table.elenco-mob td.tk-chk,
  #contenuto table.elenco-mob td.sel, #contenuto table.elenco-mob td.scelta { display: none; }

  /* ---- 25. CELLA AZIONI marcata da comune.js ----------------------
     Verificato in console: display grid sulla cella dispone i bottoni
     su due colonne. La classe nf-azioni-mob la mette comune.js solo
     sotto i 900px, cosi il desktop resta intatto. */
  #contenuto td.nf-azioni-mob {
    display: grid !important;
    grid-template-columns: 1fr 1fr !important;
    gap: .45rem !important;
    width: 100% !important; max-width: 100% !important; min-width: 0 !important;
    margin: .5rem 0 0 !important; padding: 0 !important;
    box-sizing: border-box !important; white-space: normal !important;
    vertical-align: top !important; }
  #contenuto td.nf-azioni-mob::before { content: none !important; }
  #contenuto td.nf-azioni-mob > button,
  #contenuto td.nf-azioni-mob > a {
    display: inline-flex !important; align-items: center; justify-content: center;
    width: 100% !important; min-width: 0 !important; max-width: 100% !important;
    box-sizing: border-box; height: 2.4rem; margin: 0 !important;
    padding: 0 .4rem; font-size: .85rem;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  #contenuto td.nf-azioni-mob > *:last-child:nth-child(odd) { grid-column: 1 / -1; }

  /* ---- 26. SCHEDA CLIENTE E ELENCHI -------------------------------
     Misurato: fila-2 teneva due colonne da 183px e i bottoni uscivano
     sopra i titoli; la mappa Leaflet sforava di 17.000px. */

  #contenuto .fila-2, #contenuto .colonne, #contenuto .due-col,
  #contenuto .colonna, #contenuto .wic-pan {
    display: block; width: 100%; max-width: 100%; min-width: 0; }
  #contenuto .fila-2 > * {
    width: 100%; max-width: 100%; min-width: 0; margin: 0 0 .7rem; }

  #contenuto .mappa, #contenuto .leaflet-container {
    width: 100%; max-width: 100%; height: 50vh; min-height: 280px; }
  #contenuto .leaflet-container, #contenuto .mappa { overflow: hidden; }

  /* i bottoni dentro le schede non escono dal loro riquadro */
  #contenuto .carta .piede-carta, #contenuto .sezione .piede-carta,
  #contenuto .carta > header .azioni {
    display: grid; grid-template-columns: 1fr 1fr; gap: .45rem;
    width: 100%; margin: .6rem 0 0; }
  #contenuto .carta .piede-carta > *, #contenuto .sezione .piede-carta > * {
    width: 100%; min-width: 0; box-sizing: border-box; height: 2.4rem;
    display: inline-flex; align-items: center; justify-content: center;
    margin: 0; padding: 0 .4rem; font-size: .85rem;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  #contenuto .carta .piede-carta > *:last-child:nth-child(odd),
  #contenuto .sezione .piede-carta > *:last-child:nth-child(odd) { grid-column: 1 / -1; }

  /* ---- 27. TESTATE DI BLOCCO CON BOTTONI --------------------------
     Misurato 29/10: nelle testate dei blocchi (header.fisa-capo,
     header.tc-capo, header della scheda cliente) titolo, pastiglie e
     bottoni finivano nello stesso posto: 9 sovrapposizioni su
     Anagrafica, 2 su Categorie e causali dei ticket. Qui titolo e
     pastiglie in alto, bottoni su riga propria a due colonne,
     freccia in alto a destra. */
  #contenuto .fisa > .fisa-capo,
  #contenuto .carta > header,
  #contenuto .sezione > header,
  #contenuto .elenco-righe > header,
  #contenuto .record > header {
    display: flex; flex-wrap: wrap; align-items: center;
    justify-content: flex-start; gap: .35rem .5rem;
    width: 100%; box-sizing: border-box; padding: .85rem; margin: 0; }

  #contenuto .fisa > .fisa-capo > h2,
  #contenuto .fisa > .fisa-capo > h3,
  #contenuto .fisa > .fisa-capo > strong,
  #contenuto .fisa > .fisa-capo > .fisa-titolo-dato,
  #contenuto .carta > header > h2,
  #contenuto .sezione > header > h2,
  #contenuto .elenco-righe > header > h2,
  #contenuto .record > header > h2 {
    order: 1; flex: 1 1 55%; min-width: 0; margin: 0;
    font-size: 1.05rem; font-weight: 600; line-height: 1.3; text-align: left; }

  #contenuto .fisa > .fisa-capo > .tc-pal,
  #contenuto .fisa > .fisa-capo > span.contatore,
  #contenuto .carta > header > span.contatore,
  #contenuto .sezione > header > span.contatore,
  #contenuto .record > header > span.contatore {
    order: 1; flex: 0 0 auto; min-width: 0; margin: 0; }

  #contenuto .fisa > .fisa-capo::after {
    order: 2; flex: 0 0 auto; margin: 0 0 0 auto; }

  #contenuto .fisa > .fisa-capo > .azioni-riga,
  #contenuto .fisa > .fisa-capo > .azioni,
  #contenuto .fisa > .fisa-capo > .tc-azioni,
  #contenuto .carta > header > .azioni-riga,
  #contenuto .carta > header > .azioni,
  #contenuto .sezione > header > .azioni-riga,
  #contenuto .sezione > header > .azioni,
  #contenuto .elenco-righe > header > .azioni-riga,
  #contenuto .record > header > .azioni-riga,
  #contenuto .record > header > .azioni {
    order: 3; flex: 0 0 100%;
    display: grid; grid-template-columns: 1fr 1fr; gap: .45rem;
    width: 100%; min-width: 0; max-width: 100%; margin: .3rem 0 0; }

  #contenuto .fisa > .fisa-capo > .azioni-riga > *,
  #contenuto .fisa > .fisa-capo > .azioni > *,
  #contenuto .fisa > .fisa-capo > .tc-azioni > *,
  #contenuto .carta > header > .azioni-riga > *,
  #contenuto .carta > header > .azioni > *,
  #contenuto .sezione > header > .azioni-riga > *,
  #contenuto .sezione > header > .azioni > *,
  #contenuto .elenco-righe > header > .azioni-riga > *,
  #contenuto .record > header > .azioni-riga > *,
  #contenuto .record > header > .azioni > * {
    display: inline-flex; align-items: center; justify-content: center;
    width: 100%; min-width: 0; box-sizing: border-box; height: 2.4rem;
    margin: 0; padding: 0 .4rem; font-size: .85rem;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }

  #contenuto .fisa > .fisa-capo > .azioni-riga > *:last-child:nth-child(odd),
  #contenuto .fisa > .fisa-capo > .tc-azioni > *:last-child:nth-child(odd),
  #contenuto .carta > header > .azioni-riga > *:last-child:nth-child(odd),
  #contenuto .sezione > header > .azioni-riga > *:last-child:nth-child(odd),
  #contenuto .elenco-righe > header > .azioni-riga > *:last-child:nth-child(odd),
  #contenuto .record > header > .azioni-riga > *:last-child:nth-child(odd) {
    grid-column: 1 / -1; }

  /* ---- 28. RIGHE DEI SERVIZI NELLA SCHEDA CLIENTE -----------------
     Misurato: button.wic-riga e flex, lo span sinistro e largo 224px
     ma il codice ha white-space:nowrap e tracima sotto il prezzo.
     Qui il codice va a capo e le due colonne restano separate. */
  #contenuto .wic-riga {
    display: grid; grid-template-columns: minmax(0, 1fr) auto;
    align-items: start; gap: .3rem .6rem;
    width: 100%; max-width: 100%; box-sizing: border-box;
    text-align: left; padding: .6rem .85rem; }
  #contenuto .wic-riga > * { min-width: 0; max-width: 100%; }
  #contenuto .wic-riga .wr-dx {
    grid-column: 2; justify-self: end; text-align: right;
    white-space: nowrap; display: flex; align-items: center;
    gap: .4rem; flex-wrap: wrap; justify-content: flex-end; }
  #contenuto .wic-riga .wr-cod, #contenuto .wic-riga .wr-nome,
  #contenuto .wic-riga small {
    display: block; white-space: normal; overflow-wrap: break-word;
    min-width: 0; max-width: 100%; }
  #contenuto .wic-riga .wr-cod { font-size: .8rem; color: var(--tenue); }
  #contenuto .wic-riga .wr-nome { font-weight: 600; font-size: .92rem; line-height: 1.3; }

  /* ---- 29. BOTTONE APRI VIA DAGLI ELENCHI -------------------------
     Misurato: il link ha la classe nf-apri-mob ma sta dentro
     td.nf-azioni-mob, i cui figli hanno display:inline-flex !important.
     Qui si nasconde con la stessa forza. */
  #contenuto a.nf-apri-mob,
  #contenuto td.nf-azioni-mob > a.nf-apri-mob,
  #contenuto .azioni-riga > a.nf-apri-mob { display: none !important; }
  /* se la cella resta senza bottoni non lascia spazio vuoto */
  #contenuto td.nf-azioni-mob:not(:has(> button)):not(:has(> a:not(.nf-apri-mob))) {
    display: none !important; }


  /* ---- 31. AZIONI DELLA TESTATA PREVENTIVO -----------------------
     Solo .azioni-stato, misurato su DIV.azioni.azioni-stato con 5
     bottoni di larghezze diverse. NON tocca .azioni in generale:
     quella aggancia anche la testata del cliente. */
  #contenuto .azioni-stato {
    display: grid; grid-template-columns: 1fr 1fr; gap: .45rem;
    width: 100%; max-width: 100%; margin: .6rem 0 0; }
  #contenuto .azioni-stato > button,
  #contenuto .azioni-stato > a.bottone,
  #contenuto .azioni-stato > a.secondario {
    display: inline-flex; align-items: center; justify-content: center;
    width: 100%; min-width: 0; max-width: 100%; box-sizing: border-box;
    height: 2.6rem; margin: 0; padding: 0 .5rem; font-size: .88rem;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  #contenuto .azioni-stato > *:last-child:nth-child(odd) { grid-column: 1 / -1; }
  #contenuto .azioni-stato > .stato-cliente,
  #contenuto .azioni-stato > .stato-pieno,
  #contenuto .azioni-stato > .fat-stato {
    grid-column: 1 / -1; width: auto; justify-self: start; height: auto; }

  /* ---- 32. RIENTRO DENTRO LE LINGUETTE DEL CLIENTE ----------------
     Misurato sul telefono: schermo 384, scroll 384, niente sborda.
     Il difetto era l'opposto: il contenuto della linguetta partiva
     incollato al bordo mentre i blocchi sopra avevano il rientro. */
  #contenuto .tab-cliente,
  #contenuto .tab-cliente > .sezione-testa,
  #contenuto .tab-cliente > h2,
  #contenuto .tab-cliente > h3,
  #contenuto .tab-cliente > p,
  #contenuto .tab-cliente > .sottotitolo,
  #contenuto .tab-cliente > .nota,
  #contenuto .tab-cliente > .azioni,
  #contenuto .tab-cliente > .barra-azioni,
  #contenuto .tab-cliente > .piede-carta,
  #contenuto .tab-cliente > .vuoto,
  #contenuto .tab-cliente > .messaggio {
    padding-left: .85rem; padding-right: .85rem;
    box-sizing: border-box; }
  /* tabelle ed elenchi restano a tutta larghezza: lo spazio sta nella riga */
  #contenuto .tab-cliente > table,
  #contenuto .tab-cliente > ul,
  #contenuto .tab-cliente > ol,
  #contenuto .tab-cliente > .tabella-scorrevole,
  #contenuto .tab-cliente > .tabella-scorre {
    padding-left: 0; padding-right: 0; }


  /* ---- 36. BRICIOLE: batte app.css --------------------------------
     Misurato in console: app.css impone
     #contenuto .briciole, .imp-briciole { padding: 0 !important }
     fuori da ogni @media. Qui selettore piu pesante e !important. */
  #contenuto p.briciole.briciole,
  #contenuto .imp-briciole.imp-briciole,
  main.contenuto > p.briciole {
    padding-left: .85rem !important; padding-right: .85rem !important;
    box-sizing: border-box !important;
    width: 100% !important; max-width: 100% !important;
    display: flex !important; flex-wrap: wrap; align-items: center;
    gap: .25rem .4rem; margin: 0 0 .3rem !important; font-size: .8rem; }
  #contenuto p.briciole.briciole > *,
  #contenuto .imp-briciole.imp-briciole > * {
    min-width: 0; max-width: 100%; overflow-wrap: break-word; }

  /* ---- 37. TASTO INDIETRO NELLE BRICIOLE -------------------------- */
  #contenuto .nf-indietro, .briciole-guscio .nf-indietro {
    flex: 0 0 auto; display: inline-flex; align-items: center;
    height: 2rem; padding: 0 .7rem; margin: 0 .4rem 0 0;
    border: 1px solid var(--linea-forte); border-radius: var(--raggio-piccolo);
    background: var(--superficie); font-size: .82rem; font-weight: 600;
    white-space: nowrap; cursor: pointer; }

  /* ---- 38. RIGHE elenco-mob APRIBILI AL TOCCO --------------------- */
  #contenuto table.elenco-mob > tbody > tr[data-mob-apri] { cursor: pointer; }
  #contenuto table.elenco-mob > tbody > tr.aperta > td[data-etichetta] {
    display: grid; grid-template-columns: 8.5rem minmax(0, 1fr);
    gap: .2rem .6rem; align-items: start;
    padding: .3rem 0 0; font-size: .88rem; }
  #contenuto table.elenco-mob > tbody > tr.aperta > td[data-etichetta]::before {
    content: attr(data-etichetta); color: var(--tenue); font-size: .8rem; }
  #contenuto table.elenco-mob > tbody > tr.aperta > td:empty { display: none; }
  #contenuto table.elenco-mob > tbody > tr.aperta > td.mob-tit,
  #contenuto table.elenco-mob > tbody > tr.aperta > td.mob-tit::before { display: block; content: none; }
  #contenuto table.elenco-mob > tbody > tr.aperta > td.mob-tit { padding: 0; font-weight: 600; }

  /* ---- 39. GRAFICO AD ANELLO: niente taglio in alto ---------------
     Misurato: svg.anello-svg ha viewBox 0 0 100 100, cerchio r=42 con
     contorno 9px e un pallino sul bordo; overflow:hidden lo tagliava. */
  #contenuto .anello-svg { overflow: visible !important; }
  #contenuto .carta-anello { overflow: visible !important; }
  #contenuto .carta-anello, #contenuto .griglia-riepilogo { padding-top: .6rem; }

  /* ---- 40. FILTRI: l'etichetta col campo dentro non ha altezza fissa
     Misurato: barra-filtri finiva a 1031 ma la tendina dentro la label
     arrivava a 1049, uscendo dal riquadro e coprendo il titolo sotto.
     L'altezza fissa di 2.6rem valeva anche per le label, che pero'
     contengono testo PIU' il campo. */
  #contenuto .barra-filtri, #contenuto .filtri, #contenuto .filtri-riga {
    align-items: start; }
  #contenuto .barra-filtri > label,
  #contenuto .filtri > label,
  #contenuto .filtri-riga > label {
    display: flex; flex-direction: column; gap: .2rem;
    height: auto; min-height: 0;
    font-size: .8rem; line-height: 1.2; }
  #contenuto .barra-filtri > label > select,
  #contenuto .barra-filtri > label > input,
  #contenuto .filtri > label > select,
  #contenuto .filtri > label > input,
  #contenuto .filtri-riga > label > select,
  #contenuto .filtri-riga > label > input {
    width: 100%; height: 2.6rem; box-sizing: border-box; }


  /* ---- 41. RIGHE DELL ELENCO ANOMALIE -----------------------------
     Misurato 29/10 su Conformita > Alert: 40 sovrapposizioni.
     La riga e <ul class="elenco-righe ct-elenco"><li><div>testo</div>
     <div class="azioni-riga">bottoni</div></li>: il li restava in riga
     e il testo finiva a una parola per volta sotto i bottoni.
     Qui il li diventa un blocco: testo sopra, bottoni sotto. */
  #contenuto ul.elenco-righe > li,
  #contenuto ul.ct-elenco > li {
    display: block; width: 100%; max-width: 100%;
    min-width: 0; box-sizing: border-box; padding: .7rem .85rem; }
  #contenuto ul.elenco-righe > li > div,
  #contenuto ul.ct-elenco > li > div {
    width: 100%; max-width: 100%; min-width: 0; }
  #contenuto ul.elenco-righe > li > div > strong,
  #contenuto ul.ct-elenco > li > div > strong {
    display: block; width: 100%; white-space: normal;
    overflow-wrap: anywhere; line-height: 1.35; }
  #contenuto .ct-badge-riga {
    display: flex; flex-wrap: wrap; align-items: center;
    width: 100%; max-width: 100%; gap: .4rem; }
  #contenuto .ct-controllo {
    white-space: normal; max-width: 100%; line-height: 1.3;
    text-align: left; height: auto; padding: .25rem .6rem; }

  /* ---- 43. BOTTONI TUTTI UGUALI NELLE TESTATE ---------------------
     Nelle Categorie ticket Rinomina, Colore e Sospendi erano senza
     contorno mentre Elimina ce l'aveva. Stesso contorno per tutti. */
  #contenuto .fisa > .fisa-capo > .azioni-riga > *,
  #contenuto .fisa > .fisa-capo > .tc-azioni > *,
  #contenuto .carta > header > .azioni-riga > *,
  #contenuto .sezione > header > .azioni-riga > *,
  #contenuto .sezione > header > .tc-azioni > *,
  #contenuto .elenco-righe > header > .azioni-riga > *,
  #contenuto .record > header > .azioni-riga > *,
  #contenuto ul.elenco-righe > li > .azioni-riga > *,
  #contenuto ul.ct-elenco > li > .azioni-riga > * {
    border: 1px solid var(--linea); border-radius: .5rem;
    background: var(--superficie); }
  #contenuto .fisa > .fisa-capo > .tc-azioni > .pericolo,
  #contenuto .sezione > header > .tc-azioni > .pericolo,
  #contenuto .carta > header > .azioni-riga > .pericolo,
  #contenuto .sezione > header > .azioni-riga > .pericolo,
  #contenuto ul.elenco-righe > li > .azioni-riga > .pericolo,
  #contenuto ul.ct-elenco > li > .azioni-riga > .pericolo {
    border-color: var(--errore); }


  /* ---- 44. PAGINE MONTATE DENTRO #elenco-box ----------------------
     Misurato 29/10: la pagina Firma OTP non sta dentro #contenuto ma
     dentro #elenco-box, quindi nessuna regola scritta per #contenuto
     la raggiungeva. La sua testata e div.testata-elenco, non header,
     percio' il blocco 27 non la prendeva. */
  #elenco-box .otp-quadri, #elenco-box .otp-colonne,
  .otp-quadri, .otp-colonne {
    display: grid; grid-template-columns: minmax(0, 1fr);
    gap: .6rem; margin-bottom: .8rem; }

  .testata-elenco {
    display: block; width: 100%; box-sizing: border-box;
    padding: 0 .85rem; margin: 0 0 .8rem; }
  .testata-elenco h1 { font-size: 1.25rem; margin: 0 0 .2rem; }
  .testata-elenco .riepilogo { font-size: .85rem; margin: 0 0 .5rem; }
  .testata-elenco .azioni {
    display: grid; grid-template-columns: 1fr 1fr; gap: .5rem;
    width: 100%; margin: .6rem 0 0; float: none; }
  .testata-elenco .azioni > * {
    display: inline-flex; align-items: center; justify-content: center;
    width: 100%; min-width: 0; box-sizing: border-box;
    height: 2.6rem; padding: 0 .6rem; margin: 0;
    font-size: .9rem; text-align: center; white-space: nowrap; }
  .testata-elenco .azioni > *:last-child:nth-child(odd) { grid-column: 1 / -1; }


  /* ---- 45. TABELLE CHIAVE/VALORE ----------------------------------
     Misurato 29/10 su Firma OTP: le tabelle di scheda sono fatte da
     righe <tr><th>Chiave</th><td>Valore</td></tr>. Il blocco 7
     nasconde i td finche' la riga non e' aperta e non dice niente sui
     th: si vedeva solo la colonna delle chiavi, senza valori.
     Queste non sono elenchi da aprire: sono dati, chiave sopra e
     valore sotto, sempre in vista e senza tocco. */
  #contenuto table.tabella > tbody > tr:has(> th),
  #elenco-box table.tabella > tbody > tr:has(> th) {
    display: block; width: 100%; box-sizing: border-box;
    padding: .55rem .85rem; margin: 0; cursor: default;
    border: 0; border-bottom: 1px solid var(--linea); }
  #contenuto table.tabella > tbody > tr:has(> th) > th,
  #elenco-box table.tabella > tbody > tr:has(> th) > th {
    display: block; width: 100%; max-width: 100%; min-width: 0;
    padding: 0; border: 0; background: none;
    font-size: .8rem; font-weight: 500; color: var(--tenue);
    text-align: left; white-space: normal; }
  #contenuto table.tabella > tbody > tr:has(> th) > td,
  #elenco-box table.tabella > tbody > tr:has(> th) > td {
    display: block; width: 100%; max-width: 100%; min-width: 0;
    padding: .1rem 0 0; border: 0;
    font-size: .92rem; font-weight: 600; text-align: left;
    white-space: normal; overflow-wrap: anywhere; }
  #contenuto table.tabella > tbody > tr:has(> th) > td::before,
  #elenco-box table.tabella > tbody > tr:has(> th) > td::before { content: none; }
  #contenuto table.tabella > tbody > tr:has(> th) > td button,
  #elenco-box table.tabella > tbody > tr:has(> th) > td button {
    margin: .3rem 0 0; }

  /* niente campo di ricerca su una scheda di dati */
  #contenuto .sezione:has(table.tabella tbody tr > th) .ric-tabella,
  #elenco-box .sezione:has(table.tabella tbody tr > th) .ric-tabella { display: none; }


  /* ---- 46. RIQUADRI DEI NUMERI A DUE PER RIGA ---------------------
     Chiesto 29/10: i cinque riquadri delle Firme stavano uno sotto
     l'altro e la pagina era lunghissima. Due per riga, stessa
     griglia dei bottoni: numero dispari, l'ultimo a tutta riga.
     Le due tabelle (otp-colonne) restano una sotto l'altra. */
  #elenco-box .otp-quadri, .otp-quadri {
    display: grid; grid-template-columns: 1fr 1fr;
    gap: .5rem; margin: 0 0 .8rem; }
  #elenco-box .otp-quadri > *, .otp-quadri > * {
    width: 100%; min-width: 0; box-sizing: border-box; margin: 0; }
  #elenco-box .otp-quadri > *:last-child:nth-child(odd),
  .otp-quadri > *:last-child:nth-child(odd) { grid-column: 1 / -1; }
  #elenco-box .otp-quadri .otp-numero, .otp-quadri .otp-numero {
    margin: 0; font-size: 1.35rem; line-height: 1.2; }
  #elenco-box .otp-quadri .nota, .otp-quadri .nota {
    margin: .15rem 0 0; font-size: .82rem; }



  /* ---- 48. RIENTRO DENTRO #elenco-box -----------------------------
     Misurato 29/10: le sezioni montate dentro #elenco-box (Firma OTP)
     non prendevano il rientro standard di .85rem che vale per
     #contenuto: "Ultime pratiche" restava a filo 0 mentre il resto
     della pagina era rientrato. */
  #elenco-box { padding: 0; margin: 0; width: 100%; box-sizing: border-box; }
  #elenco-box > .sezione, #elenco-box > .carta,
  #elenco-box > .otp-colonne > .sezione {
    width: 100%; max-width: 100%; box-sizing: border-box;
    margin: 0 0 .7rem; border-radius: 0; }
  #elenco-box .sezione > h2, #elenco-box .carta > h2,
  #elenco-box .sezione > .nota, #elenco-box .carta > .nota,
  #elenco-box .sezione > p, #elenco-box .carta > p {
    padding-left: .85rem; padding-right: .85rem; }
  #elenco-box .sezione > table, #elenco-box .sezione > .tabella-scorrevole,
  #elenco-box .sezione > .tabella-scorre, #elenco-box .sezione > ul,
  #elenco-box .carta > table, #elenco-box .carta > .tabella-scorrevole {
    padding-left: 0; padding-right: 0; }


  /* ---- 49. NIENTE LINK GREZZI -------------------------------------
     Misurato 29/10: i collegamenti di fine sezione sono scritti come
     <p class="nota"><a href="...">Vai a tutte le pratiche</a></p>,
     senza classe sul link: il tentativo precedente cercava
     a.collegamento e non agganciava niente.
     Qui ogni link unico dentro un paragrafo di sezione diventa un
     bottone con contorno a tutta larghezza. Vale per tutto il sito. */
  #contenuto .sezione > p > a:only-child,
  #contenuto .carta > p > a:only-child,
  #contenuto .imp-pannello > p > a:only-child,
  #elenco-box .sezione > p > a:only-child,
  #elenco-box .carta > p > a:only-child {
    display: flex; align-items: center; justify-content: center;
    width: 100%; box-sizing: border-box; margin: 0;
    height: 2.6rem; padding: 0 .6rem;
    border: 1px solid var(--linea); border-radius: .5rem;
    background: var(--superficie); color: var(--collegamento, inherit);
    font-size: .9rem; font-weight: 500; text-align: center;
    text-decoration: none; white-space: nowrap;
    overflow: hidden; text-overflow: ellipsis; }
  #contenuto .sezione > p:has(> a:only-child),
  #contenuto .carta > p:has(> a:only-child),
  #contenuto .imp-pannello > p:has(> a:only-child),
  #elenco-box .sezione > p:has(> a:only-child),
  #elenco-box .carta > p:has(> a:only-child) {
    margin: .6rem 0 0; padding: 0 .85rem .2rem; }


  /* ---- 50. TESTATA DELLA SCHEDA CLIENTE ---------------------------
     Misurato 29/10: nella scheda cliente div.azioni restava flex con
     i tre bottoni di larghezze diverse (122/87/149) e la pastiglia
     "Attivo" usciva di 17px dal bordo destro. */
  #contenuto .record .azioni, #contenuto .record-testa .azioni,
  #contenuto section.record > .azioni {
    display: grid; grid-template-columns: 1fr 1fr; gap: .5rem;
    width: 100%; margin: .6rem 0 0; float: none; }
  #contenuto .record .azioni > *, #contenuto .record-testa .azioni > *,
  #contenuto section.record > .azioni > * {
    display: inline-flex; align-items: center; justify-content: center;
    width: 100%; min-width: 0; box-sizing: border-box;
    height: 2.6rem; padding: 0 .6rem; margin: 0;
    font-size: .9rem; text-align: center; white-space: nowrap;
    overflow: hidden; text-overflow: ellipsis; }
  #contenuto .record .azioni > *:last-child:nth-child(odd),
  #contenuto .record-testa .azioni > *:last-child:nth-child(odd),
  #contenuto section.record > .azioni > *:last-child:nth-child(odd) {
    grid-column: 1 / -1; }

  /* Misurato: la pastiglia di stato sta DENTRO l'h2 del titolo
     (span.stato-cliente < h2 < header) e usciva di 17px a destra.
     Il titolo diventa un blocco che manda a capo la pastiglia. */
  #contenuto .record h2, #contenuto .record > header h2,
  #contenuto .record-testa h2 {
    display: flex; flex-wrap: wrap; align-items: center;
    gap: .3rem .5rem; width: 100%; max-width: 100%;
    min-width: 0; margin: 0; box-sizing: border-box;
    white-space: normal; overflow-wrap: anywhere; }
  #contenuto .record h2 .stato-cliente,
  #contenuto .record .stato-cliente, #contenuto .record .sotto-nome {
    flex: 0 0 auto; max-width: 100%; margin: 0;
    white-space: normal; overflow-wrap: anywhere; }


  /* ---- 52. BANDE DI AVVISO DENTRO I BORDI -------------------------
     Misurato 29/10: la banda verde della testata del mandato usciva
     dal riquadro a destra. app.css le da il bordo a sinistra ma
     nessuna larghezza massima. Vale per ogni banda del portale. */
  #contenuto .banda, #elenco-box .banda {
    display: block; width: auto; max-width: 100%;
    box-sizing: border-box; margin: .6rem .85rem .8rem;
    padding: .65rem .9rem; border-radius: .5rem;
    font-size: .88rem; line-height: 1.35;
    white-space: normal; overflow-wrap: anywhere; }



  /* ---- 55. SFONDI DEI CAMPI PIU SCURI -----------------------------
     Misurato 29/10: il riquadro del valore e div.voce e prende
     --superficie-2 (#f7faf9), quasi bianco. Qui piu scuro, cosi il
     campo si distingue dalla pagina. Vale per tutto il sito. */
  #contenuto .voce, #elenco-box .voce {
    background: #e8efed; border-radius: .4rem; }
  #contenuto .voce > *, #elenco-box .voce > * { background: transparent; }


  /* ---- 56. RIGA SEPA A DUE COLONNE --------------------------------
     Misurato 29/10: app.css riga 2951 impone
     .carta dl.riga-sepa { grid-template-columns: repeat(4,...) !important }
     fuori da ogni @media: nessuna regola normale lo batte.
     Serve l'!important anche qui. Due colonne, il mandato in cima
     resta a tutta riga e l'ultimo dispari pure. */
  #contenuto .carta dl.riga-sepa,
  #contenuto .carta .griglia.riga-sepa-mod {
    grid-template-columns: 1fr 1fr !important;
    gap: .5rem !important; }
  #contenuto .carta dl.riga-sepa > .voce,
  #contenuto .carta .griglia.riga-sepa-mod > .campo {
    width: 100%; min-width: 0; max-width: 100%;
    box-sizing: border-box; margin: 0; overflow-wrap: anywhere; }
  #contenuto .carta dl.riga-sepa > .voce:first-child,
  #contenuto .carta .griglia.riga-sepa-mod > .campo:first-child {
    grid-column: 1 / -1; }
  #contenuto .carta dl.riga-sepa > .voce:last-child:nth-child(odd),
  #contenuto .carta .griglia.riga-sepa-mod > .campo:last-child:nth-child(odd) {
    grid-column: 1 / -1; }



  /* ---- 58. SCHEDE A DUE COLONNE UGUALI ----------------------------
     Misurato 29/10: app.css riga 307 fa .carta dl con auto-fill
     minmax(190px, 1fr): su 375px ne usciva una da 129 e una da 213.
     Le classi delle voci sono pensate per TRE colonne del desktop:
     voce-larga span 2, voce-finofondo 3/-1, voce-acapo colonna 1.
     Su due colonne, 3/-1 puntava a una colonna inesistente e
     "Ragione sociale" restava mezza riga. Qui: due colonne uguali,
     le voci marcate larghe prendono la riga intera. */
  #contenuto .carta dl, #contenuto .sezione > dl {
    grid-template-columns: 1fr 1fr !important;
    gap: .5rem 1rem !important; }
  #contenuto .carta dl > .voce-larga,
  #contenuto .carta dl > .voce-finofondo,
  #contenuto .sezione > dl > .voce-larga,
  #contenuto .sezione > dl > .voce-finofondo {
    grid-column: 1 / -1 !important; }
  #contenuto .carta dl > .voce-acapo,
  #contenuto .sezione > dl > .voce-acapo {
    grid-column-start: 1 !important; }


  /* ---- 59. CELLE PIU COMPATTE -------------------------------------
     Chiesto 29/10: le celle delle schede occupavano troppo spazio in
     altezza. Meno riempimento dentro, meno distanza fra etichetta e
     valore, meno spazio fra le righe. Solo telefono. */
  #contenuto .carta dl, #contenuto .sezione > dl {
    gap: .35rem .4rem !important; }
  #contenuto .voce, #elenco-box .voce {
    padding: .35rem .5rem !important; }
  #contenuto .carta dl dt, #contenuto .sezione > dl dt,
  #contenuto .voce dt {
    margin: 0 !important; font-size: .72rem; line-height: 1.2; }
  #contenuto .carta dl dd, #contenuto .sezione > dl dd,
  #contenuto .voce dd {
    margin: 0 !important; font-size: .88rem; line-height: 1.25; }


  /* ---- 60. INTERRUTTORI ALLINEATI ---------------------------------
     Misurato 29/10: .levetta-riga > small ha flex 1 1 100%, quindi il
     testo lungo andava sotto l'interruttore e quello corto restava a
     fianco: due righe disallineate fra loro. Qui il testo sta sempre
     accanto all'interruttore e va a capo dentro la sua colonna. */
  #contenuto .levetta-riga {
    display: grid !important;
    grid-template-columns: auto minmax(0, 1fr);
    align-items: center; gap: .6rem;
    width: 100%; box-sizing: border-box; margin: .2rem 0; }
  #contenuto .levetta-riga > .testo,
  #contenuto .levetta-riga > small {
    flex: none !important; grid-column: 2; min-width: 0;
    margin: 0 !important; white-space: normal;
    line-height: 1.25; text-align: left; }


  /* ---- 61. PIEDE DEL MODULO E RITORNO DALLA SCHEDA SERVIZIO -------
     Misurato 29/10: "Salva le modifiche" sta in div.piede-modulo, una
     classe che il foglio del telefono non trattava: restava attaccato
     al bordo sinistro invece di seguire la griglia dei bottoni.
     E il ritorno all'elenco era solo una briciola in cima, piccola:
     da telefono diventa un bottone con contorno a tutta riga. */
  #contenuto .piede-modulo, #contenuto .piede-form,
  #elenco-box .piede-modulo {
    display: grid; grid-template-columns: 1fr 1fr; gap: .5rem;
    width: 100%; box-sizing: border-box;
    padding: 0 .85rem; margin: .8rem 0 1rem; float: none; }
  #contenuto .piede-modulo > *, #elenco-box .piede-modulo > * {
    display: inline-flex; align-items: center; justify-content: center;
    width: 100%; min-width: 0; box-sizing: border-box;
    height: 2.8rem; padding: 0 .6rem; margin: 0;
    font-size: .95rem; white-space: nowrap; }
  #contenuto .piede-modulo > *:last-child:nth-child(odd),
  #elenco-box .piede-modulo > *:last-child:nth-child(odd) {
    grid-column: 1 / -1; }


  /* ---- 62. BOTTONE DI RITORNO DENTRO I PANNELLI -------------------
     Chiesto 29/10: dentro un servizio non si capiva come tornare.
     La briciola "Servizi > #6" era piccola e col codice tecnico.
     Ora e' un bottone con contorno a tutta riga, con la frase intera. */
  #contenuto .nf-torna, #elenco-box .nf-torna {
    display: flex; align-items: center; justify-content: center;
    width: 100%; box-sizing: border-box; margin: .2rem 0 .8rem;
    height: 2.8rem; padding: 0 .6rem;
    border: 1px solid var(--linea); border-radius: .5rem;
    background: var(--superficie); color: inherit;
    font-size: .95rem; font-weight: 500; text-align: center;
    white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
  #contenuto p.briciole:has(> .nf-torna) {
    display: block; padding: 0 .85rem; margin: 0; }



  /* ---- 63. SCALA UNICA E VOCI IN SOLA LETTURA ---------------------
     Misurato 29/10 su Anagrafica cliente: pagina alta 6527px (5,6
     schermate), 81 voci tutte in sola lettura che da sole occupavano
     5367px, 18 corpi di testo diversi e 10 altezze fisse diverse.
     Qui: una scala sola per tutto il telefono, e le voci in sola
     lettura smettono di essere riquadri alti e diventano righe. */
  :root {
    --m-testo: .875rem;
    --m-piccolo: .75rem;
    --m-titolo: 1.05rem;
    --m-titolone: 1.2rem;
    --m-alt: 2.1rem;
    --m-rientro: .85rem;
    --m-spazio: .5rem;
  }

  /* corpi di testo: uno solo per il testo, uno per le etichette */
  #contenuto .carta dl, #contenuto .sezione > dl,
  #contenuto .nota, #contenuto .sottotitolo, #contenuto .riepilogo {
    font-size: var(--m-testo); }
  #contenuto h1, #elenco-box h1 { font-size: var(--m-titolone); }
  #contenuto h2, #contenuto h3, #elenco-box h2 { font-size: var(--m-titolo); }

  /* altezza unica per bottoni, campi e filtri */
  #contenuto .testata-pagina .azioni > *, #contenuto .imp-azioni > *,
  #contenuto .sezione-testa .azioni > *, #contenuto .barra-azioni > *,
  #contenuto .piede-carta > *, #contenuto .piede-modulo > *,
  #contenuto .filtri > *, #contenuto .barra-filtri > *,
  #contenuto .record .azioni > *, .testata-elenco .azioni > * {
    height: var(--m-alt) !important; font-size: var(--m-testo) !important; }
  #contenuto input, #contenuto select,
  #elenco-box input, #elenco-box select {
    height: var(--m-alt); font-size: 16px; }


  /* ---- 64. VOCI COMPATTE ------------------------------------------
     Misurato 29/10: la voce era alta 64px cosi composta: dt 24px
     (interlinea 13.8), dd 29px (interlinea 17.6 piu padding 5.6+5.6),
     piu padding 5.6+5.6 sulla voce, piu gap 5.6 fra le righe.
     Il peso era nelle interlinee e nei padding, non nel riquadro. */
  #contenuto .carta dl, #contenuto .sezione > dl,
  #elenco-box .carta dl {
    gap: .15rem .5rem !important; }
  #contenuto .voce, #elenco-box .voce {
    padding: .1rem 0 !important; }
  #contenuto .voce dt, #elenco-box .voce dt {
    font-size: var(--m-piccolo) !important; line-height: 1.1 !important;
    padding: 0 !important; margin: 0 !important; }
  #contenuto .voce dd, #elenco-box .voce dd {
    font-size: var(--m-testo) !important; line-height: 1.15 !important;
    padding: 0 !important; margin: 0 !important; }


  /* ---- 65. TESTATA DEL CLIENTE COMPATTA ---------------------------
     Misurato 29/10: dl.record-fatti alta 415px, 6 righe da 69px:
     padding 11.2+11.2, dt interlinea 20, dd interlinea 24.3.
     Stessa cura delle voci: interlinee strette, padding ridotto. */
  #contenuto .record-fatti, #contenuto .dati-record {
    gap: 0 !important; }
  #contenuto .record-fatti > div, #contenuto .dati-record > div {
    padding: .3rem .85rem !important;
    border-left: 0 !important;
    border-top: 1px solid var(--linea) !important; }
  #contenuto .record-fatti > div:first-child,
  #contenuto .dati-record > div:first-child {
    border-top: 0 !important; }
  #contenuto .record-fatti dt, #contenuto .dati-record dt {
    font-size: var(--m-piccolo) !important; line-height: 1.1 !important;
    margin: 0 !important; padding: 0 !important; }
  #contenuto .record-fatti dd, #contenuto .dati-record dd {
    font-size: var(--m-testo) !important; line-height: 1.15 !important;
    margin: 0 !important; padding: 0 !important; }


  /* ---- 66. BOTTONI PICCOLI IN TUTTO IL SITO -----------------------
     Chiesto 29/10: i bottoni erano alti 34, 42 e 46px a seconda del
     blocco. Qui una misura sola per tutti, piu contenuta, presa dalla
     scala: cambiare --m-alt li cambia tutti insieme. */
  #contenuto .testata-pagina .azioni > *, #contenuto .imp-azioni > *,
  #contenuto .sezione-testa .azioni > *, #contenuto .barra-azioni > *,
  #contenuto .piede-carta > *, #contenuto .piede-modulo > *,
  #contenuto .azioni-riga > *, #contenuto .mg-azioni > *,
  #contenuto .riga-azioni > *, #contenuto .tc-azioni > *,
  #contenuto .record .azioni > *, #contenuto .azioni > *,
  #contenuto .nf-torna, #contenuto .nf-indietro,
  #elenco-box .piede-modulo > *, .testata-elenco .azioni > * {
    height: 2.1rem !important; min-height: 0 !important;
    padding: 0 .55rem !important;
    font-size: .82rem !important; line-height: 1.1 !important;
    border-radius: .4rem !important; }
  #contenuto .filtri > *, #contenuto .barra-filtri > *,
  #contenuto .filtri-riga > * {
    height: 2.2rem !important; font-size: .82rem !important; }
  #contenuto .filtri > label, #contenuto .barra-filtri > label,
  #contenuto .filtri-riga > label { height: auto !important; }
  #contenuto .filtri > label > select, #contenuto .filtri > label > input,
  #contenuto .barra-filtri > label > select, #contenuto .barra-filtri > label > input,
  #contenuto .filtri-riga > label > select, #contenuto .filtri-riga > label > input {
    height: 2.2rem !important; }
  #contenuto input, #contenuto select, #contenuto textarea,
  #elenco-box input, #elenco-box select, #elenco-box textarea {
    min-height: 0; padding: .25rem .5rem; }
  #contenuto .primario, #contenuto .primario-piccolo,
  #contenuto .secondario, #contenuto .contorno {
    font-weight: 500; }


  /* ---- 67. DA TELEFONO NON SI CANCELLA, NON SI IMPORTA, NON SI ESPORTA
     Chiesto 29/10, regola permanente: da telefono niente eliminazioni
     e niente importazioni o esportazioni. Sono 86 bottoni distruttivi
     in 20 file, ma hanno tutti la classe pericolo o massa-rosso:
     una regola sola li toglie, senza toccare i file js ne' il desktop.
     Restano visibili Ripristina, Riapri e Sospendi: non cancellano. */
  #contenuto .pericolo, #contenuto .pericolo-pieno,
  #contenuto .massa-rosso, #contenuto [data-elimina],
  #contenuto [data-togli-firm], #contenuto [data-togli-mandato],
  #contenuto [data-togli-sede], #contenuto [data-togli-riga],
  #contenuto [data-togli-ec], #contenuto [data-togli],
  #contenuto [data-cat-del], #contenuto [data-cau-del],
  #contenuto [data-u-del], #contenuto [data-r-del],
  #contenuto [data-elimina-campo], #contenuto [data-elimina-srv],
  #contenuto [data-sddelimina],
  #contenuto #cestina, #contenuto #d-libera, #contenuto #d-esegui-libera,
  #contenuto #an-massa-elimina, #contenuto #ec-massa-elimina,
  #contenuto #massa-elimina, #contenuto #lf-massa-cestino,
  #contenuto #f-elimina, #contenuto #togli-logo,
  #elenco-box .pericolo, #elenco-box .pericolo-pieno,
  #elenco-box .massa-rosso, #elenco-box [data-elimina],
  #contenuto .solo-desktop-import, #elenco-box .solo-desktop-import,
  #contenuto [id*="import"], #contenuto [id*="esport"],
  #contenuto [id*="export"], #contenuto [data-import], #contenuto [data-esporta],
  #contenuto input[type="file"], #elenco-box input[type="file"],
  #contenuto a[download], #elenco-box a[download] {
    display: none !important; }

  /* altri bottoni trovati nel codice che la regola sopra non prende */
  #contenuto #esporta, #contenuto #ch-esporta, #contenuto #r-scarica,
  #contenuto #dati-esporta, #contenuto #dati-importa,
  #contenuto #imp-apri, #contenuto #sta-apri, #contenuto #man-apri,
  #contenuto #imp-scrivi, #contenuto #man-scrivi, #contenuto #fi-conferma,
  #contenuto #t-importa-nuovo, #contenuto #t-conferma-import,
  #contenuto .imp-xml-azioni,
  #contenuto a[href*="esporta"], #contenuto a[href*="/api/fe/xml"],
  #contenuto a[href*="/api/sdd/file"], #contenuto a[href*=".csv"],
  #elenco-box a[href*="esporta"], #elenco-box a[href*=".csv"] {
    display: none !important; }







  /* ---- 72. CONTENIMENTO: BATTE GLI IMPORTANT DI app.css ----------
     Misurato 29/10 con la console: app.css impone
     "#contenuto .testata-pagina h1, #contenuto .imp-testata h1
      { font-size: 1.6rem !important }" fuori da ogni @media.
     Nessuna regola senza !important lo batteva: ecco perche' da tre
     tentativi il titolo restava a 25.6px. Qui stesso selettore con
     !important, e lo stesso criterio per testate e bottoni. */
  #contenuto .testata-pagina h1, #contenuto .imp-testata h1,
  #contenuto .testata-elenco h1, #contenuto h1 {
    font-size: 1.1rem !important; line-height: 1.2 !important;
    margin: 0 0 .1rem !important; }
  #contenuto .testata-pagina h2, #contenuto .imp-testata h2,
  #contenuto .sezione > h2, #contenuto .carta > header h2, #contenuto h2 {
    font-size: .98rem !important; line-height: 1.2 !important;
    margin: 0 0 .1rem !important; }
  #contenuto h3, #contenuto h4 {
    font-size: .88rem !important; line-height: 1.2 !important;
    margin: 0 0 .1rem !important; }

  #contenuto .testata-pagina, #contenuto .imp-testata,
  #contenuto .testata-elenco, .testata-elenco {
    padding: .45rem .85rem .35rem !important;
    margin: 0 0 .45rem !important; min-height: 0 !important; }
  #contenuto .testata-pagina > div:empty,
  #contenuto .testata-elenco > div:empty,
  #contenuto .azioni:empty { display: none !important; }

  #contenuto .riepilogo, #contenuto .sottotitolo,
  #contenuto .riepilogo-righe, .testata-elenco .riepilogo {
    font-size: .78rem !important; line-height: 1.2 !important;
    margin: 0 0 .25rem !important; }

  #contenuto button, #contenuto a.bottone, #contenuto a.primario,
  #contenuto a.secondario, #contenuto a.contorno, #contenuto .primario,
  #contenuto .secondario, #contenuto .contorno, #contenuto .bottone,
  #contenuto .primario-piccolo, #contenuto .pag-navi > *,
  #contenuto .pagine > *, .testata-elenco .azioni > * {
    height: 2.1rem !important; min-height: 0 !important;
    padding: 0 .55rem !important; font-size: .82rem !important;
    line-height: 1.1 !important; font-weight: 500 !important; }

  #contenuto .briciole, #contenuto .imp-briciole, .briciole-guscio {
    font-size: .75rem !important; line-height: 1.2 !important;
    padding: .35rem .85rem 0 !important; margin: 0 0 .25rem !important; }

  #contenuto table.tabella > tbody > tr > td.mob-tit,
  #contenuto table.elenco-mob > tbody > tr > td.mob-tit,
  #contenuto table.tabella > tbody > tr > td.cella-capo {
    font-size: .86rem !important; line-height: 1.25 !important; }
  #contenuto table.tabella > tbody > tr,
  #contenuto table.elenco-mob > tbody > tr {
    padding: .4rem .85rem !important; }

  #contenuto td.azioni-riga .pericolo, #contenuto table .pericolo,
  #contenuto table .pericolo-pieno, #contenuto [data-revoca],
  #contenuto .collegamento.pericolo {
    display: none !important; }


  /* ---- 73. IL VUOTO DELLE TESTATE --------------------------------
     Misurato 29/10 su /clienti: testata alta 165px con dentro solo
     126px di contenuto. Il buco veniva da gap 16px della testata,
     margin-top 9.6px di div.azioni, e soprattutto da div.azioni alto
     75px che conteneva un bottone nascosto (Esporta CSV) e uno span
     vuoto: la griglia a due colonne contava anche le celle nascoste
     e teneva due righe. */
  #contenuto .testata-pagina, #contenuto .imp-testata,
  #contenuto .testata-elenco, .testata-elenco {
    gap: .3rem !important; }
  #contenuto .testata-pagina .azioni, #contenuto .imp-azioni,
  #contenuto .sezione-testa .azioni, #contenuto .testata-elenco .azioni,
  .testata-elenco .azioni {
    margin: .35rem 0 0 !important; gap: .4rem !important; }
  #contenuto .azioni > [style*="display: none"],
  #contenuto .azioni > .solo-d, #contenuto .azioni > .solo-desktop,
  #contenuto .azioni > .solo-desktop-import,
  #contenuto .dati-bottoni:empty, #contenuto .azioni > span:empty {
    display: none !important; }
  #contenuto .dati-bottoni {
    display: contents !important; }
  #contenuto h1 + .riepilogo-righe, #contenuto h1 + .riepilogo,
  #contenuto h1 + .sottotitolo {
    margin: 0 0 .2rem !important; }


  /* ---- 75. NIENTE GRASSETTO ECCESSIVO ----------------------------
     Misurato 29/10: i nomi degli elenchi sono dentro <strong> e
     nessun CSS imponeva il peso: era il valore predefinito del
     browser (700/900). Qui peso medio per i nomi e i valori,
     normale per etichette e note. */
  #contenuto strong, #contenuto b, #elenco-box strong, #elenco-box b,
  #contenuto td.mob-tit strong, #contenuto td.cella-capo strong,
  #contenuto .wr-nome, #contenuto .rec-tit {
    font-weight: 500 !important; }
  #contenuto table.tabella > tbody > tr > td.mob-tit,
  #contenuto table.elenco-mob > tbody > tr > td.mob-tit,
  #contenuto table.tabella > tbody > tr > td.cella-capo,
  #contenuto .voce dd, #elenco-box .voce dd,
  #contenuto .record-fatti dd, #contenuto .dati-record dd {
    font-weight: 500 !important; }
  #contenuto h1, #contenuto h2, #contenuto h3, #contenuto h4,
  #elenco-box h1, #elenco-box h2, .testata-elenco h1 {
    font-weight: 600 !important; }
  #contenuto .voce dt, #contenuto .record-fatti dt,
  #contenuto .dati-record dt, #contenuto .nota, #contenuto .sottotitolo,
  #contenuto .riepilogo, #contenuto .riepilogo-righe,
  #contenuto .briciole, #contenuto .tenue, #contenuto small {
    font-weight: 400 !important; }
  #contenuto .stato-cliente, #contenuto .stato-pieno,
  #contenuto .contatore, #contenuto .fat-stato {
    font-weight: 500 !important; }



  /* ---- 77. MODIFICA VIA, LA RIGA SI TOCCA ------------------------
     Misurato 29/10 in console: il blocco 25 impone
     "#contenuto td.nf-azioni-mob > button { display: inline-flex
     !important }", piu specifico di "#contenuto [data-nf-mod]".
     Qui selettore piu specifico ancora: stessa catena piu
     l'attributo. Vale anche per le celle normali e i div. */
  #contenuto td.nf-azioni-mob > button[data-nf-mod],
  #contenuto td.nf-azioni-mob > a[data-nf-mod],
  #contenuto td.azioni-riga > button[data-nf-mod],
  #contenuto td.azioni-riga > a[data-nf-mod],
  #contenuto div.azioni-riga > button[data-nf-mod],
  #contenuto span.azioni-riga > button[data-nf-mod],
  #contenuto .azioni > button[data-nf-mod],
  #contenuto button[data-nf-mod], #contenuto a[data-nf-mod],
  #elenco-box button[data-nf-mod] {
    display: none !important; }
  #contenuto td.nf-azioni-mob > button[data-nf-via],
  #contenuto td.nf-azioni-mob > a[data-nf-via],
  #contenuto td.azioni-riga > button[data-nf-via],
  #contenuto td.azioni-riga > a[data-nf-via],
  #contenuto div.azioni-riga > button[data-nf-via],
  #contenuto span.azioni-riga > button[data-nf-via],
  #contenuto .azioni > button[data-nf-via],
  #contenuto button[data-nf-via], #contenuto a[data-nf-via],
  #elenco-box button[data-nf-via] {
    display: none !important; }
  #contenuto [data-nf-riga-mod] { cursor: pointer; }
  /* se restano due righe di briciole si tiene solo quella completa */
  #contenuto p.briciole[data-nf-bric] ~ p.briciole:not([data-nf-bric]),
  #contenuto [data-nf-bric] ~ .imp-briciole:not([data-nf-bric]) {
    display: none !important; }


  /* ---- 78. BRICIOLE DENTRO LE LINGUETTE --------------------------
     29/10: la riga che dice dove sei dentro ogni linguetta del
     cliente, aggiunta da comune.js. */
  #contenuto .nf-bric-ling {
    display: block !important;
    padding: .4rem .85rem !important; margin: 0 0 .35rem !important;
    font-size: .75rem !important; line-height: 1.2 !important;
    background: var(--superficie-2); border-bottom: 1px solid var(--linea); }
  #contenuto .nf-bric-ling a {
    text-decoration: none; font-weight: 500 !important; }




  /* ---- 80. RIQUADRI AFFIANCATI A COLONNA SINGOLA, NOMI A DUE RIGHE ---
     Su Traffico telefonico i riquadri "Direttrici" e "Clienti che parlano
     di piu" stanno in div.gr-coppia, griglia a due colonne da 181px:
     da telefono vanno uno sotto l'altro.
     Inoltre: nome lungo negli elenchi al massimo su due righe. */
  #contenuto .gr-coppia { grid-template-columns: 1fr !important; }
  #contenuto .gr-voce { grid-template-columns: minmax(0, 1fr) auto !important; gap: .5rem !important; }
  #contenuto .gr-voce .gr-nome { min-width: 0 !important; overflow: hidden !important; text-overflow: ellipsis !important; white-space: nowrap !important; }
  #contenuto .gr-voce .gr-asta { display: none !important; }
  #contenuto .gr-voce .gr-val { white-space: nowrap !important; text-align: right !important; }
  #contenuto table.elenco-mob td strong,
  #contenuto table.elenco-mob td > span:first-child,
  #contenuto .tabella td:first-child strong {
    display: -webkit-box !important; -webkit-line-clamp: 2 !important; -webkit-box-orient: vertical !important;
    overflow: hidden !important; text-overflow: ellipsis !important; word-break: break-word !important; }


  /* ---- 81. RIENTRO DEL BLOCCO STATO DEL SISTEMA -------------------
     section.stato aveva padding destro 0: i valori a destra
     (collegato, 113, pronta, 0.17.0) toccavano il bordo dello schermo
     mentre i blocchi sopra avevano il rientro. */
  #contenuto section.stato > ul,
  #contenuto section.stato > ul > li { padding-left: var(--m-rientro, .85rem) !important; padding-right: var(--m-rientro, .85rem) !important; }
  #contenuto section.stato > h2 { padding-left: var(--m-rientro, .85rem) !important; padding-right: var(--m-rientro, .85rem) !important; }


  /* ---- 82. RIENTRO DI TUTTI GLI ELENCHI DEL TELEFONO ---------------
     app.css azzera il rientro a .contatti-elenco (286), .elenco-righe ul,
     .elenco-semplice, .registro-elenco (324) e .stato ul (440); in piu il
     blocco 1 di questo foglio lo azzera a ogni ul/ol. Risultato: le voci
     toccavano il bordo mentre i blocchi attorno avevano il rientro.
     Le liste dentro tabelle, linguette e paginazione restano come sono. */
  #contenuto .contatti-elenco,
  #contenuto .elenco-semplice,
  #contenuto .registro-elenco,
  #contenuto .elenco-righe > ul,
  #contenuto section.sezione > ul,
  #contenuto section.carta > ul {
    padding-left: var(--m-rientro, .85rem) !important;
    padding-right: var(--m-rientro, .85rem) !important;
    box-sizing: border-box !important; }
  #contenuto .linguette, #contenuto .pagine, #contenuto .briciole,
  #contenuto table ul, #contenuto table ol {
    padding-left: 0 !important; padding-right: 0 !important; }

}
