:root{--navy:#0A1530;--blue:#0D3B8E;--green:#2DBE6A;--green2:#29C86B;--ink:#152238;--muted:#667085;--soft:#F5F7FA;--line:#E6EAF0;--white:#fff;--shadow:0 24px 70px rgba(10,21,48,.12);--nav-h:82px}*{box-sizing:border-box}html{
    scroll-behavior:smooth;
    /* ---------------------------------------------------------------------
       L'INTESTAZIONE E' FISSA, E COPRIVA L'INIZIO DI OGNI ANCORA.

       Su /condizioni si vedeva peggio che altrove: cliccando una voce
       dell'indice il titolo dell'articolo finiva sotto la barra, e si
       cominciava a leggere dal secondo comma — su un documento in cui i commi
       sono numerati e ci si arriva per rimando.

       Altrove non si notava per caso, non per progetto: `.section` ha 112px di
       spaziatura in cima, che assorbono la barra. Un'ancora su qualcosa che non
       e' una sezione — un titolo, una riga — finiva coperta.

       `scroll-padding-top` sta sul CONTENITORE che scorre, quindi vale per
       ogni bersaglio di ogni pagina, anche per quelli che nasceranno domani.
       L'alternativa, `scroll-margin-top` sui bersagli, obbliga a ricordarsene
       ogni volta — ed e' lo stesso ragionamento per cui la sottolineatura dei
       link e' il default e si toglie dove serve.

       Il conto: `--nav-h` e' l'altezza della barra, +1px del suo bordo, +18px
       perche' il testo non parta incollato.
       --------------------------------------------------------------------- */
    scroll-padding-top:calc(var(--nav-h) + 19px)
}
body{margin:0;color:var(--ink);background:#fff;font:16px/1.65 Inter,sans-serif;-webkit-font-smoothing:antialiased}h1,h2,h3,p{margin-top:0}h1,h2,h3{font-family:Manrope,sans-serif;line-height:1.08;letter-spacing:-.035em}h1{font-size:clamp(2.9rem,5.4vw,5.7rem);margin-bottom:24px}h2{font-size:clamp(2.1rem,3.8vw,4.1rem);margin-bottom:20px}h3{font-size:1.35rem}/* ---------------------------------------------------------------------------
   LINK

   La regola era `text-decoration:none;color:inherit`, cioe' un link in mezzo
   a un paragrafo era indistinguibile dal testo intorno: stesso colore, stesso
   peso, nessuna sottolineatura. «Le altre si trovano nelle domande frequenti»
   su /prezzi conteneva un link che nessuno poteva vedere.

   Ora la sottolineatura e' il DEFAULT e si toglie dove il link non e' testo:
   pulsanti, menu, logo, colonne del piede, icone social. E' il verso giusto —
   se domani si aggiunge un link dentro un paragrafo nuovo, si vede da solo
   invece di sparire finche' qualcuno non se ne accorge.
   --------------------------------------------------------------------------- */
a{color:inherit;text-decoration:underline;text-decoration-thickness:1px;text-underline-offset:3px;text-decoration-color:rgba(21,34,56,.35)}
a:hover{text-decoration-color:currentColor}
/* Sul fondo scuro il tratto tenue sparisce: si schiarisce. */
.demo a,.final a,.firma-box a,footer a{text-decoration-color:rgba(255,255,255,.4)}

/* Dove il link NON e' testo: e' un comando, e la sottolineatura lo sporca.
   `.footgrid>div>a` prende le voci delle tre colonne, che stanno dentro il div
   senza paragrafo — e lascia sottolineato l'indirizzo email, che invece e' in
   un <p> ed e' testo a tutti gli effetti. */
.btn,.nav nav a,.logo,.skip,.social a,.footgrid>div>a{text-decoration:none}
/* Il menu' NON si sottolinea al passaggio del mouse.

   La regola valeva per due posti insieme: le voci in alto e i link del piede.
   Nel piede la sottolineatura serve — sono elenchi di collegamenti in mezzo ad
   altro testo, e il passaggio del mouse e' l'unica conferma che quella riga si
   puo' premere. In alto no: sono sei voci sole, distanziate, e che siano
   collegamenti si capisce da dove stanno.

   Al posto della sottolineatura, il colore: la voce si scurisce verso il navy,
   che e' gia' il colore della voce attiva. Senza NIENTE al passaggio resterebbe
   solo il cursore a dire che si puo' premere — misurato: a riposo e in hover il
   testo era identico — e su una barra di sei voci il puntatore non basta.

   Il colore non sposta un pixel, mentre la sottolineatura ne spostava tre e
   faceva saltellare la riga mentre il mouse la attraversava. */
.footgrid>div>a:hover{text-decoration:underline;text-underline-offset:3px}.wrap{width:min(1220px,calc(100% - 40px));margin:auto}.skip{position:absolute;left:-9999px}.skip:focus{left:18px;top:18px;z-index:1000;background:#fff;padding:12px}.header{position:sticky;top:0;z-index:80;background:rgba(255,255,255,.86);backdrop-filter:blur(18px);border-bottom:1px solid rgba(230,234,240,.75)}.nav{height:var(--nav-h);display:flex;align-items:center;gap:36px}.logo img{width:168px;display:block}/* `align-items:center` — le voci non si stirano, i testi si allineano.

   Senza, il contenitore flex vale `stretch`: le voci diventano alte 50px come
   il pulsante che sta con loro dal pacchetto 142, ma il loro testo resta in
   cima mentre quello del pulsante e' centrato dal suo `inline-flex`. Misurato:
   il testo delle voci a 28px dall'alto, quello del pulsante a 41 — tredici
   pixel di scarto su una barra dove tutto dovrebbe stare sulla stessa riga.

   Il difetto e' nato quando il pulsante e' entrato nel <nav>: prima le voci
   erano sole e si stiravano tutte allo stesso modo, quindi lo scarto non c'era
   perche' non c'era niente con cui confrontarsi. */
.nav nav{display:flex;align-items:center;gap:28px;margin-left:auto}/* `:not(.btn)` — le voci del menu, NON il pulsante che ci sta dentro.

   Dal pacchetto 142 il pulsante «Attiva il tuo piano» vive dentro il <nav>,
   per finire nella tendina del telefono. Da quel momento ha cominciato a
   ereditare questa riga: `.nav nav a` vale 0,2,1 e batte lo 0,1,0 di
   `.primary`, quindi il testo bianco del pulsante diventava grigio scuro su
   fondo verde — illeggibile.

   L'esclusione sta QUI e non in una riga che rimette il bianco altrove: il
   difetto e' che questa regola tocca qualcosa che non e' una voce di menu, e
   si corregge dove nasce. Una contro-regola avrebbe lasciato le due in lotta,
   con la prossima proprieta' che qualcuno aggiunge qui — un `letter-spacing`,
   un `text-transform` — a ricadere di nuovo sul pulsante. */
.nav nav a:not(.btn){font-weight:600;font-size:.93rem;color:#344054}.btn{display:inline-flex;align-items:center;justify-content:center;gap:9px;min-height:50px;padding:0 22px;border-radius:14px;font-weight:700;border:1px solid transparent;transition:.22s ease;cursor:pointer;font:700 15px Inter,sans-serif}.btn:hover{transform:translateY(-2px)}.primary{color:#fff;background:linear-gradient(135deg,var(--green2),var(--green));box-shadow:0 10px 28px rgba(45,190,106,.25)}.primary:hover{box-shadow:0 14px 34px rgba(45,190,106,.36)}.secondary{background:#fff;border-color:#CBD5E1;color:var(--navy)}.big{min-height:58px;padding:0 28px;border-radius:16px}.block{width:100%}.menu{display:none;background:none;border:0}.hero{position:relative;overflow:hidden;padding:92px 0 88px;background:linear-gradient(180deg,#fff 0%,#F8FBFF 100%)}.mesh{position:absolute;inset:0;background:radial-gradient(circle at 72% 18%,rgba(45,190,106,.14),transparent 24%),radial-gradient(circle at 88% 58%,rgba(13,59,142,.13),transparent 30%);pointer-events:none}.hero-grid{position:relative;display:grid;grid-template-columns:1.02fr .98fr;gap:58px;align-items:center}.hero-copy span{color:var(--green)}
/* Titolo dell'hero: tetto a 3.8rem invece dei 5.7rem del titolo generico.
   Minimo e passo in vw ridotti nella stessa proporzione (x 2/3), se no il
   titolo cresce prima e si schiaccia contro il tetto a meta' schermo. */
.hero-copy h1{font-size:clamp(1.95rem,3.6vw,3.8rem)}
/* Parola evidenziata dentro un titolo di sezione. Classe esplicita e non
   `h2 span`: nei titoli ci sono anche <span> che non vanno colorati, e una
   regola sull'elemento li prenderebbe tutti.

   Sulle due sezioni con fondo navy si passa al verde chiaro gia' usato da
   `.light` e dagli accenti delle card scure: il verde pieno su quel fondo
   e' leggibile (7,2:1) ma stona con il resto degli accenti chiari. */
.hl{color:var(--green)}
.demo .hl,.final .hl{color:#7CE8A7}.lead{max-width:680px;font-size:1.2rem;color:var(--muted)}.kicker{font-weight:800;text-transform:uppercase;letter-spacing:.13em;font-size:.76rem;color:var(--green);margin-bottom:16px}.actions{display:flex;gap:12px;flex-wrap:wrap;margin:30px 0 24px}.proof{display:flex;gap:20px;flex-wrap:wrap;font-size:.9rem;color:#475467}.stage{position:relative;min-height:560px}.browser{position:absolute;left:0;top:38px;width:96%;background:#fff;border:1px solid var(--line);border-radius:22px;overflow:hidden;box-shadow:var(--shadow);transform:perspective(1200px) rotateY(-4deg)}.bar,.preview-bar{height:42px;background:#F8FAFC;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:7px;padding:0 15px}.bar i,.preview-bar i{width:9px;height:9px;border-radius:50%;background:#D0D5DD}.bar small,.preview-bar small{margin-left:8px;color:#98A2B3}.site-nav{height:58px;padding:0 22px;display:flex;align-items:center;gap:18px;font-size:.7rem}.site-nav strong{margin-right:auto;color:var(--navy);font-size:.9rem}.site-nav em{font-style:normal;background:var(--green);color:#fff;padding:7px 11px;border-radius:8px}.site-hero{display:grid;grid-template-columns:1.15fr .85fr;background:linear-gradient(125deg,#07142E,#103C72);color:#fff;min-height:245px}.site-hero>div:first-child{padding:34px}.site-hero small{color:#8CE8B1;font-size:.58rem;letter-spacing:.14em}.site-hero h2{font-size:2rem;margin:8px 0 10px}.site-hero p{font-size:.82rem;color:#CED8E8}.site-hero button{border:0;background:var(--green);color:#fff;border-radius:9px;padding:10px 14px;font-weight:700}.team-photo{position:relative;background:linear-gradient(rgba(6,18,43,.15),rgba(6,18,43,.55)),linear-gradient(145deg,#536A86,#233957);overflow:hidden}.team-photo:before,.team-photo:after{content:"";position:absolute;width:70px;height:150px;border-radius:34px 34px 8px 8px;background:#0D3B8E;bottom:-20px}.team-photo:before{left:32px;transform:rotate(-4deg)}.team-photo:after{right:38px;transform:rotate(5deg)}.players{position:absolute;inset:auto 0 30px;text-align:center;font:800 28px Manrope;color:rgba(255,255,255,.7);word-spacing:18px}.mini-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;padding:14px;background:#F7F9FC}.mini-cards article{background:#fff;padding:13px;border-radius:12px;border:1px solid #EEF1F5}.mini-cards small{display:block;font-size:.55rem;color:var(--green);font-weight:800}.mini-cards b,.mini-cards span{display:block;font-size:.69rem}.phone{position:absolute;width:175px;height:360px;right:-20px;top:150px;background:#fff;border:8px solid #07142E;border-radius:32px;box-shadow:0 24px 60px rgba(10,21,48,.25);padding:20px 11px 12px}.notch{position:absolute;top:0;left:45px;width:72px;height:15px;background:#07142E;border-radius:0 0 12px 12px}.phone-head{display:flex;justify-content:space-between;font:800 11px Manrope;color:var(--navy);padding:7px 4px 18px}.phone-card,.phone-news{background:#F5F7FA;border-radius:13px;padding:13px;margin-bottom:10px}.phone-card small,.phone-news small{font-size:.5rem;color:var(--green);font-weight:800}.phone-card b,.phone-card strong,.phone-card span,.phone-news b{display:block}.phone-card b{font-size:.7rem}.phone-card strong{font-size:.62rem;margin:15px 0}.phone-card strong i{font-style:normal;margin:0 7px;color:#98A2B3}.phone-card span{font-size:.58rem;color:#667085}.phone-news b{font-size:.68rem;margin-top:5px}.chip{position:absolute;background:#fff;border:1px solid var(--line);box-shadow:0 16px 38px rgba(10,21,48,.13);padding:11px 15px;border-radius:14px;display:flex;align-items:center;gap:10px}.chip span{width:34px;height:34px;display:grid;place-items:center;border-radius:10px;background:#E9FBF0;color:var(--green);font-weight:800}.chip small,.chip b{display:block;font-size:.62rem}.chip small{color:#98A2B3}.chip1{left:-25px;bottom:28px}.chip2{right:12px;bottom:-4px}.trustbar{border-top:1px solid var(--line);border-bottom:1px solid var(--line);background:#fff}.trustbar .wrap{padding:26px 0;display:flex;justify-content:space-between;align-items:center;gap:24px}.trustbar p{margin:0;font-weight:700}.trustbar div div{display:flex;gap:28px;color:#98A2B3;font-weight:700;font-size:.88rem}.section{padding:112px 0}.soft{background:var(--soft)}.heading{max-width:820px;margin-bottom:54px}.heading.center{text-align:center;margin-left:auto;margin-right:auto}/* Tutti i paragrafi del blocco, non solo l'ultimo. Con `:last-child`, un
   secondo paragrafo faceva restare il PRIMO alla misura del corpo (1rem) e
   del colore pieno: due righe attaccate, di due dimensioni diverse, senza
   che niente lo dichiarasse. Succedeva su /quale-piano, l'unica pagina con
   due paragrafi sotto il titolo. Il sopratitolo resta fuori: ha misura e
   peso suoi. */
.heading>p:not(.kicker){color:var(--muted);font-size:1.08rem}.compare{display:grid;grid-template-columns:1fr 60px 1fr;align-items:stretch;gap:24px}.compare>div:not(.arrow){padding:34px;border-radius:24px}.pain{background:#fff;border:1px solid #F1D2D2}.gain{background:var(--navy);color:#fff}.compare small{font-weight:800;color:var(--green)}.compare ul{padding:0;list-style:none}.compare li{padding:12px 0;border-bottom:1px solid rgba(152,162,179,.22)}.pain li:before{content:"×";color:#E5484D;font-weight:800;margin-right:10px}.gain li:before{content:"✓";color:#5FE395;font-weight:800;margin-right:10px}.arrow{display:grid;place-items:center;font-size:2rem;color:var(--green)}.tabs{display:flex;gap:8px;justify-content:center;flex-wrap:wrap;margin-bottom:20px}.tabs button{border:1px solid var(--line);background:#fff;border-radius:999px;padding:10px 18px;font-weight:700;color:#667085;cursor:pointer}.tabs button.active{background:var(--navy);color:#fff;border-color:var(--navy)}.preview{max-width:1050px;margin:auto;border:1px solid var(--line);border-radius:24px;overflow:hidden;box-shadow:var(--shadow)}.preview-content{min-height:420px;display:grid;grid-template-columns:1fr 1fr;gap:48px;align-items:center;padding:55px;background:linear-gradient(135deg,#F7FAFE,#EAF5EF)}.preview-content small{color:var(--green);font-weight:800}.preview-content h3{font-size:2.5rem;max-width:500px}.preview-content p{color:var(--muted)}.visual-card{height:280px;border-radius:22px;background:linear-gradient(145deg,var(--navy),var(--blue));color:#fff;display:flex;flex-direction:column;justify-content:flex-end;padding:30px;box-shadow:0 22px 50px rgba(10,21,48,.2)}.visual-card span{font-size:.7rem;color:#7CE8A7;font-weight:800}.visual-card b{font:800 2rem Manrope}.visual-card em{font-style:normal;color:#CAD5E4}.center{text-align:center;margin-top:30px}.benefits{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-bottom:70px}.benefits article,.features article{background:#fff;border:1px solid var(--line);border-radius:22px;padding:27px}/* Icona centrata sopra il testo. Con l'icona al centro e titolo e paragrafo
   a sinistra il riquadro risultava sbilanciato, quindi e' centrato tutto:
   per tornare all'allineamento a sinistra bastano `text-align:left` qui e
   `margin-inline:0` sulle due icone. */
.benefits article,.features article{text-align:center}
/* Icone disegnate a mano in SVG, non un font: il progetto non ha dipendenze
   esterne e i caratteri decorativi usati prima (◎ ◇ ☆ ⚑) rendono in modo
   diverso su ogni sistema — su Windows alcuni uscivano come quadratini.

   `.ico` (vantaggi) e `.fico` (sezioni del sito) sono la STESSA regola: le
   due misure erano diverse, ora no. Tenerle scritte due volte significava
   ritoccarne una sola al prossimo giro. */
.ico,.fico{width:56px;height:56px;border-radius:16px;background:#EAFBF1;color:var(--green);display:grid;place-items:center;margin:0 auto 22px}
.ico svg,.fico svg{width:28px;height:28px;stroke-width:1.6}
/* Il titolo che introduce l'elenco delle sezioni: piu' stretto del titolo di
   sezione, perche' sta dentro la stessa sezione dei vantaggi. */
.feat-heading{margin-bottom:40px}
/* Il pulsante sotto le schede: centrato e staccato, perche' non appartiene a
   nessuna delle tre colonne. `.actions` da solo lo lascerebbe a sinistra,
   allineato alla prima scheda, dove sembra parte di quella. */
.feat-azioni{justify-content:center;margin:34px 0 0}
.feat-heading h2{font-size:clamp(1.8rem,3vw,2.9rem)}.benefits p,.features p{color:var(--muted)}.features{display:grid;grid-template-columns:repeat(3,1fr);gap:18px}
/* Quattro schede in una griglia da tre lasciano la quarta sola in fondo, e una
   riga con un elemento solo si legge come un errore di impaginazione invece
   che come una scelta. Due per due e' la disposizione che quattro cose
   vogliono. Sotto i 640px torna comunque a colonna singola, come tutte le
   altre griglie. */
/* Vale per `.features` e per `.benefits`: sono due griglie da tre colonne, e
   quattro schede in una griglia da tre lasciano la quarta sola in fondo.

   SELETTORE COMPOSTO, non `.griglia-quattro` da sola: quella varrebbe 0,1,0
   come `.benefits`, e a parita' deciderebbe l'ordine nel foglio — cioe' la
   regola funzionerebbe finche' nessuno sposta un blocco. Con la classe
   attaccata al contenitore fa 0,2,0 e vince sempre.

   Sotto i 980px non serve: li' entrambe passano gia' a due colonne per conto
   loro, e sotto i 640 a colonna singola. */
.features.griglia-quattro,.benefits.griglia-quattro{grid-template-columns:repeat(2,1fr)}
/* Due schede affiancate: la persona e la società.

   Stessa forma della griglia da quattro, e per lo stesso motivo — due elementi
   in una griglia da tre lascerebbero un buco a destra, che si legge come una
   scheda che manca. */
.features.griglia-due{grid-template-columns:repeat(2,1fr)}

/* Il ritratto è tondo e il marchio no: sono due cose diverse e devono
   sembrarlo. Un logo dentro un cerchio verrebbe ritagliato agli angoli, e un
   volto in un rettangolo accanto a un marchio si legge come una seconda
   immagine di prodotto.

   `object-fit:cover` sul ritratto: la foto che caricherai avrà le proporzioni
   che ha, e senza questa riga verrebbe schiacciata invece che ritagliata. */
/* Immagine a lato del testo: la persona in apertura, la societa' piu' sotto.

   Due blocchi con la stessa forma invece di due schede affiancate: il «chi
   sono» appartiene al racconto e il «chi fornisce» alle garanzie, e sono due
   momenti diversi della pagina — tenerli in una coppia di riquadri era un
   ripiego per farli stare insieme.

   `align-items:flex-start` perche' l'immagine si allinei alla PRIMA riga del
   testo: centrata verticalmente, accanto a un paragrafo lungo, scenderebbe a
   meta' e sembrerebbe scollata da quello che accompagna. */
.chi-firma{display:flex;align-items:flex-start;gap:26px;margin:0 auto;max-width:760px;text-align:left}
.chi-firma p{margin:0 0 12px;color:var(--muted);font-size:1.08rem}
.chi-firma p:last-child{margin-bottom:0}
/* IL BLOCCO DELLA SOCIETA' HA UN'ALTRA GEOMETRIA.

   In apertura il ritratto si allinea alla PRIMA RIGA del testo, perche' e' alto
   quanto il paragrafo e centrarlo lo farebbe scendere a meta'. Qui il marchio e'
   basso — sessanta pixel contro un paragrafo di tre righe — e allineato in alto
   sembrerebbe appoggiato al bordo: centrato, invece, sta in asse con il testo
   che accompagna.

   IL FILETTO separa il marchio dal testo. Sta sul contenitore del testo e non
   sull'immagine: un bordo sul marchio sarebbe alto quanto il marchio, cioe' un
   trattino di sessanta pixel a meta' altezza; sul testo prende invece tutta
   l'altezza del paragrafo, che e' quello che un divisore deve fare.

   `align-self:stretch` sul contenitore: senza, `align-items:center` lo
   restringerebbe al suo contenuto e il filetto resterebbe piu' corto del
   paragrafo di qualche pixel. */
.chi-firma--societa{align-items:center}
.chi-firma--societa>div{align-self:stretch;padding-left:26px;border-left:1px solid var(--line)}
/* `flex:none` e' quello che impedisce al ritratto di essere schiacciato dal
   testo accanto: in un contenitore flex un'immagine si restringe, e un
   cerchio che si restringe diventa un ovale. */
.chi-ritratto{flex:none;width:200px;height:200px;border-radius:50%;object-fit:cover;display:block;background:#e8ecf2}
/* Il marchio in una fascia della stessa altezza del ritratto: senza, le due
   schede partirebbero da quote diverse e i titoli non sarebbero allineati. */
.chi-logo{flex:none;display:block;height:auto;max-width:128px}


/* Etichetta del piano nelle card di /gestionale: quelle card usano uno
   <span> al posto dell'icona, e togliendo questa regola insieme ai numeri
   01-07 della home erano rimaste testo nero indistinto. Il selettore e'
   diretto (`> span`) perche' altrimenti prenderebbe anche gli <span> dentro
   i paragrafi. */
/* L'etichetta del piano, NON l'icona: su /gestionale ogni articolo apre
   con <span>Club</span>, sulla home con <span class="fico">. Senza
   :not(.fico) questa regola (0,1,2) batte `.ico,.fico` (0,1,0) e impone
   display:block al riquadro verde, che smette di centrare la sua icona. */
.features article>span:not(.fico){display:block;color:var(--green);font-weight:800;font-size:.78rem;letter-spacing:.06em;text-transform:uppercase;margin-bottom:12px}.aud-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px}.aud-grid article{border:1px solid var(--line);border-radius:24px;overflow:hidden;background:#fff}.aud-grid article>small,.aud-grid h3,.aud-grid p{display:block;margin-left:24px;margin-right:24px}.aud-grid article>small{margin-top:24px;color:var(--green);font-weight:800}.aud-grid p{color:var(--muted);margin-bottom:28px}/* Fotografie vere, non piu' le silhouette disegnate con :before/:after.

   `aspect-ratio` E NON UN'ALTEZZA FISSA. Con `height:210px` la colonna
   imponeva alla foto rapporti da 1,61:1 a 2,91:1 secondo la larghezza dello
   schermo, mentre i file sono 3:2 — `object-fit:cover` toglieva la
   differenza sopra e sotto, fino a quasi meta' dell'immagine sui formati
   larghi, e le teste finivano tagliate. Con 3/2 l'altezza segue la
   larghezza e la fotografia si vede per intera a ogni misura.

   `object-fit:cover` resta come rete: se un giorno una delle tre foto viene
   sostituita con un file di proporzione diversa, ritaglia invece di
   deformare i volti.

   `display:block` toglie lo spazio che l'allineamento di riga lascia sotto
   un'immagine: dentro un articolo con `overflow:hidden` diventava una
   striscia bianca fra la foto e l'etichetta. */
.portrait{display:block;width:100%;height:auto;aspect-ratio:3/2;object-fit:cover;background:#DDE7F4}.demo,.final{position:relative;overflow:hidden;background:var(--navy);color:#fff}.pattern{position:absolute;inset:0;opacity:.12;background-image:radial-gradient(circle at 20% 50%,transparent 31px,#0D3B8E 32px,#0D3B8E 44px,transparent 45px);background-size:150px 150px}.demo-grid{position:relative;display:grid;grid-template-columns:1fr 1fr;gap:65px;align-items:center}.light{color:#7CE8A7}.lightbtn{background:#fff;color:var(--navy)}.demo-card{background:linear-gradient(145deg,#123C76,#07142E);border:1px solid rgba(255,255,255,.15);border-radius:28px;padding:45px;box-shadow:0 34px 80px rgba(0,0,0,.24)}.demo-card>span{color:#7CE8A7;font-size:.7rem;font-weight:800}.demo-card h3{font-size:2.4rem;margin:10px 0}.demo-links{display:flex;gap:10px;margin-top:30px}.demo-links b{background:rgba(255,255,255,.1);padding:12px 17px;border-radius:12px}.steps{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}.steps article{padding:28px;border-left:2px solid var(--line)}.steps span{font:800 2rem Manrope;color:var(--green)}.faq-grid{display:grid;grid-template-columns:.8fr 1.2fr;gap:80px}.faqs details{background:#fff;border:1px solid var(--line);border-radius:16px;padding:20px 22px;margin-bottom:12px}.faqs summary{font-weight:700;cursor:pointer}.faqs p{color:var(--muted);margin:12px 0 0}.finalbox{display:flex;justify-content:space-between;align-items:center;gap:50px}.finalbox h2{max-width:800px}.outline{border-color:rgba(255,255,255,.4);color:#fff;background:transparent}.contact-grid{display:grid;grid-template-columns:.8fr 1.2fr;gap:80px}.promise{padding:22px;border-left:3px solid var(--green);background:var(--soft);display:flex;flex-direction:column}.form{padding:32px;border:1px solid var(--line);border-radius:24px;box-shadow:var(--shadow)}.row{display:grid;grid-template-columns:1fr 1fr;gap:14px}label{display:block;font-weight:700;font-size:.88rem;margin-bottom:14px}input,select,textarea{width:100%;margin-top:7px;border:1px solid #D0D5DD;border-radius:12px;padding:13px 14px;font:inherit;background:#fff}textarea{resize:vertical}.privacy{display:flex;gap:9px;align-items:center;font-weight:500}.privacy input{width:auto;margin:0}footer{background:#07142E;color:#D0D5DD;padding:46px 0 16px}.footgrid{display:grid;grid-template-columns:1.8fr 1fr 1fr 1fr;gap:34px}.footgrid img{width:158px;filter:brightness(0) invert(1)}.footgrid div{display:flex;flex-direction:column;gap:7px}.footgrid b{color:#fff}.copy{margin-top:26px;border-top:1px solid rgba(255,255,255,.12);padding-top:16px;font-size:.85rem;display:flex;justify-content:space-between;align-items:baseline;gap:18px;flex-wrap:wrap}
/* Il payoff non e' una nota in fondo: e' l'ultima frase che resta addosso.
   Manrope come i titoli, non il font del corpo, e sul fondo scuro il verde
   chiaro gia' usato da `.light` — il verde pieno non tiene il contrasto. */
.payoff{letter-spacing:-.04em;color:#7CE8A7;text-align:right;margin:0;font-size:19px}
/* Le due parole in evidenza dentro il payoff.

   `<em>` e non una classe: e' la marcatura dell'enfasi, vale anche per chi
   legge con uno screen reader, ed e' gia' corsivo per impostazione
   predefinita — `font-style` qui sarebbe una riga che ripete il browser.

   La regola resta agganciata al payoff invece di vivere in una classe
   globale: una `.corsivo` sciolta sarebbe finita, prima o poi, a colorare di
   bianco un corsivo da tutt'altra parte.

   IL CORSIVO E' SINTETICO: fra i caratteri ospitati non c'e' un italico di
   Inter, quindi il browser inclina il tondo. A questo corpo e su fondo scuro
   regge — verificato — e l'alternativa sarebbe un altro file da 14 KB su ogni
   pagina per due parole. */
.payoff em{color:#fff}.reveal{opacity:0;transform:translateY(24px);transition:opacity .7s ease,transform .7s ease}.reveal.visible{opacity:1;transform:none}.delay{transition-delay:.15s}@media(max-width:1160px){.nav nav{display:none}.menu{display:flex;margin-left:auto;flex-direction:column;gap:5px}.menu span{width:24px;height:2px;background:var(--navy)}.navcta{display:none}.nav.open nav{display:flex;position:absolute;top:var(--nav-h);left:0;right:0;background:#fff;padding:24px;flex-direction:column;border-bottom:1px solid var(--line)}
/* Il pulsante che compra, anche dentro la tendina.

   Sopra i 980px sta nella barra; sotto spariva del tutto, e il telefono e'
   dove la landing si legge di piu': restava una tendina di sole voci
   informative, senza il passo che compra.

   Sta DENTRO il pannello e non nella barra: accanto al logo e all'hamburger,
   su 380px, «Attiva il tuo piano» non ci sta senza rimpicciolire il tocco.
   In fondo alla tendina invece e' l'ultima cosa che si legge dopo le voci,
   che e' dove va la chiamata all'azione.

   `order` lo tiene per ultimo anche se nel documento precede il menu: cosi'
   la sequenza di lettura resta quella giusta senza spostarlo nel markup,
   dove su desktop e' esattamente al posto suo. */
.nav.open .navcta{display:inline-flex;justify-content:center;margin-top:8px;margin-left:0}
.hero-grid,.demo-grid,.faq-grid,.contact-grid{grid-template-columns:1fr}.hero-copy{text-align:center}.lead{margin-left:auto;margin-right:auto}.actions,.proof{justify-content:center}.stage{max-width:700px;width:100%;margin:auto}.benefits{grid-template-columns:repeat(2,1fr)}.features,.aud-grid,.steps{grid-template-columns:1fr 1fr}.finalbox{display:block}.compare{grid-template-columns:1fr}.arrow{transform:rotate(90deg)}.trustbar .wrap{display:block;text-align:center}.trustbar div div{justify-content:center;flex-wrap:wrap;margin-top:12px}.footgrid{grid-template-columns:1fr 1fr;gap:28px}}@media(max-width:640px){.wrap{width:min(100% - 28px,1220px)}.hero{padding-top:65px}.stage{min-height:435px}.browser{width:100%;top:20px}.phone{width:130px;height:270px;right:-5px;top:145px}.chip{display:none}.site-nav span{display:none}.site-hero{min-height:190px}.site-hero>div:first-child{padding:22px}.site-hero h2{font-size:1.4rem}.mini-cards article:nth-child(3){display:none}.mini-cards{grid-template-columns:1fr 1fr}.section{padding:28px 0}.preview-content{grid-template-columns:1fr;padding:28px;gap:24px}.visual-card{height:220px}.benefits,.features,.aud-grid,.steps,.row{grid-template-columns:1fr}.features.griglia-quattro,.benefits.griglia-quattro{grid-template-columns:1fr}.features.griglia-due{grid-template-columns:1fr}.chi-firma{flex-direction:column;align-items:center;text-align:center;gap:16px}.chi-firma--societa .chi-logo{margin-top:0}.chi-firma--societa>div{align-self:auto;padding-left:0;border-left:0}.steps span{text-align:center;display:block}
.trustbar div div{gap:14px}.contact-grid{gap:30px}.footgrid{grid-template-columns:1fr}/* In colonna il payoff a destra resta orfano: torna sotto, a sinistra. */.copy{display:block}.payoff{text-align:left;margin-top:8px}.logo img{width:145px}}


/* PIANI E CONFRONTO */
.pricing-section{background:#fff}.pricing-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:22px;align-items:stretch}.plan-card{position:relative;border:1px solid var(--line);border-radius:26px;padding:34px;background:#fff;box-shadow:0 12px 34px rgba(10,21,48,.07);display:flex;flex-direction:column}/* LA SCHEDA IN EVIDENZA SPORGE, MA IL CONTENUTO RESTA IN RIGA.

   Qui c'era `transform:translateY(-10px)`: la scheda intera saliva, e con lei
   tutto quello che c'e' dentro. Nome del piano e prezzo finivano 9px piu' in
   alto delle altre due schede, il pulsante 11px — misurato, non stimato. Nove e
   non dieci perche' il bordo di questa scheda e' 2px contro 1px, e quel
   pixel in piu' ne recuperava uno.

   Un disallineamento cosi' non si vede guardando: si sente. Tre prezzi che
   dovrebbero stare sulla stessa riga e non ci stanno fanno sembrare la pagina
   fatta male senza che si capisca perche'.

   MARGINI NEGATIVI E NON `transform`. Il margine negativo fa CRESCERE la scheda
   dentro la griglia (`align-items:stretch`): sporge dieci pixel sopra e dieci
   sotto, invece di scivolare in su di dieci. Il padding maggiorato — 34+10-1,
   con quel meno uno che e' il bordo in piu' — rimette il contenuto esattamente
   dove sta nelle altre due. Verificato rendendo la pagina: scarto zero su nome,
   prezzo e pulsante.

   E SPORGERE DA DUE LATI E' ANCHE PIU' GIUSTO: una scheda spinta in su sembra
   fuori posto, una piu' grande sembra piu' importante — che e' quello che si
   voleva dire.

   EFFETTO COLLATERALE VOLUTO: `.reveal` anima la comparsa con
   `translateY(24px)` -> `none`, ma questa regola viene DOPO nel foglio e con la
   stessa specificita', quindi il suo `transform` vinceva sempre. La scheda in
   evidenza era l'unica delle tre a non salire entrando: sfumava e basta.
   Togliendo il `transform` da qui, l'animazione torna uguale per tutte e tre. */
.plan-card.featured{border:2px solid var(--green);margin-block:-10px;padding-top:43px;padding-bottom:43px;box-shadow:0 24px 55px rgba(45,190,106,.15)}.popular-tag{position:absolute;left:24px;right:24px;top:-14px;background:var(--green);color:#fff;text-align:center;border-radius:999px;padding:7px;font-size:.72rem;font-weight:800;text-transform:uppercase;letter-spacing:.06em}.plan-head{min-height:112px}.plan-name{font:800 1.55rem Manrope;color:var(--blue)}.featured .plan-name{color:var(--green)}.plan-head p{color:var(--muted);margin-top:9px}.plan-price{display:flex;flex-wrap:wrap;align-items:baseline;column-gap:10px;padding:10px 0;border-bottom:1px solid var(--line)}.plan-price strong{font:800 3.2rem Manrope;color:var(--navy);letter-spacing:-.05em}.featured .plan-price strong{color:var(--green)}.plan-price span{color:var(--muted);font-weight:700}
/* La riga della promozione: sta sotto il prezzo e dice fino a quando vale e
   quanto si paga dopo. NON e' decorazione — annunciare 349 e fatturare 449 il
   secondo anno renderebbe contestabile il rinnovo tacito dell'art. 9.2, e fra
   imprese e' la fattispecie del d.lgs. 145/2007 sulla pubblicita' ingannevole.
   Per la stessa ragione non c'e' nessun prezzo barrato: il canone non e' un
   «prezzo precedente», e' quello che si paga dal secondo anno. */
.plan-promo{margin:20px 0 0;text-align:center}
/* TRE PESI DIVERSI, e l'ordine di lettura e' quello.

   Il prezzo di listino barrato dice da dove si parte; l'etichetta dice perche'
   il numero e' piu' basso; la riga sotto dice fino a quando. Sullo stesso peso
   si leggevano come una frase sola, e la condizione spariva dentro il richiamo.

   IL BARRATO E' IL LISTINO VERO, non un prezzo di comodo: e' il canone scritto
   nella Scheda di Adesione ed e' quello che il Cliente paga dal secondo anno.
   Per questo puo' stare barrato — quello che non si potrebbe fare e' barrare una
   cifra che nessuno ha mai pagato. La riga sotto, che quel numero lo rimette a
   fuoco come prezzo di rinnovo, e' cio' che tiene insieme le due cose: senza,
   il barrato prometterebbe uno sconto per sempre.

   STA SU UNA RIGA SUA, sopra il prezzo. `.plan-price` e' un flex in linea di
   base, e con tre figli metteva listino, prezzo e «/ anno + IVA» in tre
   colonne: tre cifre affiancate che il lettore deve separare da solo, e la
   seconda — quella che paga — non e' piu' la prima cosa che vede.

   `flex:0 0 100%` gli fa occupare la riga intera; il `gap` del contenitore vale
   anche fra le righe, quindi la spaziatura resta quella. Sulle schede senza
   promozione non cambia niente: i figli sono due e la riga non va mai a capo. */
.plan-price__listino{flex:0 0 100%;color:var(--muted);font-weight:700;font-size:1.3rem;text-decoration-thickness:2px}
/* L'etichetta: pastiglia bordeaux piena, centrata.

   NON RIUSA UN COLORE DELLA TAVOLOZZA: #ffa809 e' nuovo, e nessuno degli altri
   avrebbe funzionato — i rossi (#E5484D, #C1373C, #97303c) dicono tutti
   «qualcosa non va», e una promozione non e' un errore. L'ambra e' la
   convenzione commerciale dello sconto, che chi guarda riconosce prima di
   leggere.

   IL TESTO E' NAVY, NON BIANCO. Su un fondo cosi' chiaro il bianco fa 1,93:1:
   illeggibile, sotto qualunque soglia. Il navy della tavolozza fa 9,34:1 — il
   massimo che si ottenga senza usare il nero puro, che su ambra stona.

   E' l'unico posto del sito in cui il testo della pastiglia non e' bianco: il
   colore del fondo lo decide, non il gusto. */
.plan-promo strong{display:inline-block;background:#ffa809;color:#0A1530;font-weight:800;
                   font-size:.74rem;letter-spacing:.4px;text-transform:uppercase;
                   padding:5px 11px;border-radius:999px}
/* La condizione: la meno vistosa delle tre, ma sempre presente. */
.plan-promo span{display:block;color:#98A2B3;font-weight:500;font-size:.78rem;margin-top:7px}/* IL BLOCCO CHE DICE A CHI SERVE IL PIANO.

   Era un elenco di funzioni: otto voci sullo Starter, dodici sugli altri due.
   Le stesse funzioni, riga per riga, stanno nella tabella di confronto poco
   piu' sotto — che pero' si GENERA da `Plan::CONFRONTO`, mentre l'elenco delle
   schede era scritto a mano. Due copie della stessa lista, di cui una sola
   sorvegliata: bastava aggiungere una funzione perche' le schede restassero
   indietro, ed era gia' successo («figurine condivisibili su WhatsApp» contro
   «figurine atleti stampabili»).

   E chi legge una scheda non sta verificando se c'e' una funzione: sta
   capendo se quel piano parla di lui. Per verificare c'e' la tabella, che
   quello lo fa meglio.

   `flex:1` era sull'elenco e resta qui: e' cio' che spinge il pulsante in
   fondo e tiene le tre schede allineate anche con testi di lunghezza diversa.
   Senza, il pulsante risale sotto l'ultima riga di testo e le tre schede
   sembrano tre altezze sbagliate. */
/* IL TESTO DELLE SCHEDE E' QUELLO DELLA PAGINA.

   Aveva un colore suo (#344054, che nella tavolozza non c'e') e un peso suo
   (500): due scelte prese guardando la scheda da sola, che affiancate agli
   altri paragrafi della pagina si vedono. Adesso usa `--muted`, cioe' lo
   stesso colore della descrizione sotto il nome del piano e dei paragrafi
   delle altre sezioni, e il peso e l'interlinea li eredita dal corpo. */
.plan-card .plan-why{padding:24px 0;margin:0;flex:1;color:var(--muted);font-weight:400;line-height:1.32}
/* IL TITOLINO DEL BLOCCO. Dice al lettore che cosa sta per leggere: senza,
   il discorso inizia a meta' e nelle tre schede affiancate non si capisce che
   sono la stessa cosa detta per tre destinatari diversi.
   Maiuscoletto e piccolo, come il `kicker` delle sezioni: e' un'etichetta, non
   un titolo che compete con il nome del piano. */
/* Lo stacco sopra il titolino: prima ci arrivava attaccato alla riga di
   eredita', e il blocco si leggeva come un unico paragrafo. Il margine sta qui
   e non nel `padding` del blocco perche' adesso tutte e tre le schede hanno
   una riga sopra — quella di eredita' o «Il punto di partenza» — e lo stacco
   deve essere lo stesso in tutte e tre. */
.plan-card .plan-why__titolo{margin:25px 0 10px;font:800 .74rem Manrope;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}
.plan-card .plan-why p{margin:0 0 12px}
.plan-card .plan-why p:last-child{margin-bottom:0}
.plan-card .plan-why p:last-child{font-size:.8rem}
/* Il pulsante staccato dal testo.

   L'unico spazio sopra era il `padding-bottom` del blocco, e con l'ultima riga
   che finisce a filo il pulsante sembrava la coda del discorso invece che
   l'azione della scheda. Il margine sta sul figlio diretto della scheda:
   dentro la card non ci sono altri pulsanti, e mettere la regola su `.btn`
   avrebbe spostato anche quelli delle altre sezioni. */
.plan-card>.btn{margin-top:16px}
/* LA RIGA DI EREDITA' NON E' UNA FUNZIONE.

   «Tutto cio' che include Starter» dice da dove si parte, non che cosa si
   compra. E' l'intestazione del blocco, e si stacca dal resto: il «+» dice
   «in aggiunta a», che e' il rapporto vero fra due piani cumulativi; una
   spunta direbbe «compreso», e su una riga che non nomina nessuna funzione
   non ha niente da confermare.

   IL SEGNO STA FUORI DAL FLUSSO, con 31px di rientro — i 22 del cerchio piu'
   i 9 di stacco. Da `inline-grid` una riga che va a capo ripartirebbe dal
   bordo sinistro, sotto il segno, e sembrerebbe un capoverso nuovo. */
.plan-card .plan-inherit{position:relative;padding:0 0 14px 31px;margin:0 0 14px;font-weight:800;color:var(--navy);border-bottom:1px solid var(--line)}
.plan-card .plan-inherit:before{content:'+';position:absolute;left:0;top:2px;display:grid;place-items:center;width:22px;height:22px;border-radius:50%;background:var(--navy);color:#fff;font-weight:900;font-size:.75rem}
/* La riga della prima scheda: stessa forma, segno diverso. Il «+» significa
   «in aggiunta a», e sullo Starter non c'e' niente prima a cui aggiungere. Il
   punto pieno dice «si comincia da qui» senza promettere un'addizione. */
.plan-card .plan-inherit--base:before{content:'\2022';background:var(--muted)}

/* I TRE PULSANTI IN FONDO AL CONFRONTO.

   Il `ghost` della landing ha il bordo trasparente: da solo, accanto a una
   scritta, va bene; tre affiancati diventano tre parole sospese senza forma.
   Qui i due secondari prendono il bordo e il fondo bianco, e restano
   riconoscibili come pulsanti anche di fianco a quello pieno.

   `flex-wrap` e non una griglia a tre colonne: su un telefono i tre pulsanti
   vanno uno sotto l'altro e devono prendere tutta la larghezza, come gia'
   fanno quelli delle schede. */
/* IL PIEDE DELLA TABELLA DI CONFRONTO: un pulsante sotto la sua colonna.

   Sta in un `<tfoot>` e non in un blocco sotto la tabella, così «Attiva
   Premium» cade esattamente sotto la colonna Premium, in fondo alla fila di
   spunte appena letta.

   `border-top` marcato: senza, la riga dei pulsanti sembra la
   quarantaseiesima funzione dell'elenco. */
.plan-table__attiva td{padding:22px 12px;text-align:center;border-top:2px solid var(--line)}
.plan-table__attiva th{border-top:2px solid var(--line)}
.plan-table__attiva .btn{width:100%;max-width:230px}
/* Il `ghost` della landing ha il bordo trasparente: da solo va bene, tre
   affiancati diventano tre parole sospese. */
.plan-table__attiva .btn.ghost{background:#fff;border-color:var(--line)}
.plan-table__attiva .btn.ghost:hover{background:var(--soft)}

/* Il rimando al confronto, in fondo a ogni scheda. Staccato dal testo e più
   piccolo: è un'uscita di servizio, non la frase che deve convincere.

   La misura arriva anche da `.plan-why p:last-child` qui sopra: la regola per
   classe resta perché e' l'unica che non dipende dalla POSIZIONE. Il giorno che
   qualcuno aggiunge un paragrafo dopo, `:last-child` porterebbe lo stile su
   quello e il rimando tornerebbe grande — senza che niente lo segnali. */
.plan-card .plan-why__link{margin:16px 0 0;font-size:.8rem;display:flex;align-items:baseline;gap:7px}
.plan-card .plan-why__link a{color:var(--blue);font-weight:700}
/* La freccia: decorativa, quindi `aria-hidden` nel markup e non un carattere
   scritto nel testo — un lettore di schermo leggerebbe «freccia destra» in
   mezzo alla frase. `currentColor` la tiene dello stesso grigio del testo, e
   `flex:0 0` le impedisce di schiacciarsi quando la riga va a capo. */
.plan-card .plan-why__freccia{width:15px;height:15px;flex:0 0 15px;transform:translateY(2px)}
.comparison-wrap{overflow-x:auto;border:1px solid var(--line);border-radius:22px;background:#fff;box-shadow:0 12px 34px rgba(10,21,48,.05)}.plan-table{width:100%;min-width:760px;border-collapse:collapse}.plan-table th,.plan-table td{padding:15px 18px;border-bottom:1px solid var(--line);border-right:1px solid var(--line)}.plan-table thead th{background:#F3F6FB;text-align:center;font:800 1rem Manrope;color:var(--navy)}.plan-table thead th:first-child{text-align:left}.plan-table thead small{font:600 .76rem Inter;color:var(--muted)}.plan-table tbody th{text-align:left;font-weight:700;color:#344054}.plan-table tbody td{text-align:center;color:var(--green);font-weight:900;font-size:1.1rem}/* Righe di gruppo dell'Allegato A: «Il sito web», «La gestione sportiva»,
   «La segreteria», «Sempre incluso». Servono a far leggere trentatre' righe
   come quattro blocchi — senza, la tabella e' un muro e chi la scorre si
   ferma a meta'. Occupano tutte e quattro le colonne, quindi non hanno celle
   e non entrano nel confronto fra piani. */
.plan-table .gruppo th{background:#ededed;color:var(--navy);font:800 .8rem Manrope;text-transform:uppercase;letter-spacing:.09em;border-right:0}
.plan-table .recommended{background:#EAFBF1}.plan-table .no{color:#B7BEC9;font-weight:600}.plan-table td.no span[aria-hidden]{font-size:1.3rem}
/* La colonna consigliata su tutta l'altezza, e il testo per i lettori di schermo (409). */
.plan-table td.consigliata{background:#F2FCF6}
.sr-solo{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.plan-table tr:last-child th,.plan-table tr:last-child td{border-bottom:0}.plan-help{margin-top:26px;padding:26px 30px;border-radius:20px;background:linear-gradient(135deg,#F2F7FF,#ECFBF2);display:flex;align-items:center;justify-content:space-between;gap:28px}.plan-help>div{display:flex;align-items:center;gap:18px}.plan-help>div>span{width:52px;height:52px;border-radius:50%;display:grid;place-items:center;background:var(--blue);color:#fff;font:800 1.4rem Manrope}.plan-help h3{margin:0 0 5px}.plan-help p{margin:0;color:var(--muted)}
/* Su una colonna la sporgenza non ha piu' senso: non c'e' niente accanto da cui
   emergere, e dieci pixel di margine negativo diventerebbero dieci pixel di
   sovrapposizione sulla scheda sopra.

   Si annullano il margine E i due padding: prima qui bastava `transform:none`
   perche' la sporgenza era tutta li'. Lasciare il padding maggiorato darebbe a
   una sola delle tre schede impilate nove pixel d'aria in piu' sopra e sotto —
   invisibile a chi lo scrive, evidente a chi scorre la pagina. */
@media(max-width:980px){.pricing-grid{grid-template-columns:1fr}.plan-card.featured{margin-block:0;padding-top:34px;padding-bottom:34px}.plan-head{min-height:0}.plan-help{align-items:flex-start;flex-direction:column}}
/* LA CENTRATURA STA QUI, DOPO LE REGOLE BASE.

   Scritta nella media query piu' in alto nel foglio non aveva alcun effetto:
   `.plan-name` e `.plan-price` si definiscono PIU' SOTTO, e a parita' di
   specificita' vince l'ultima dichiarazione — una regola dentro `@media` non
   e' piu' forte, e' solo condizionata. Il difetto non si vede leggendo: la
   riga c'e', sembra giusta, e a schermo non succede niente.

   `.plan-price` e' `display:flex`: `text-align` da solo non centra i suoi
   figli, che sono governati da `justify-content`. Ce ne vogliono due, e per
   questo ha una riga sua. */
@media(max-width:640px){.plan-name{text-align:center;display:block}.plan-price{flex-direction:column;justify-content:center;align-items:center;text-align:center}.plan-price__listino{flex:0 0 auto}.plan-promo{margin:20px 0}.plan-card{padding:27px 23px}.plan-price strong{font-size:2.7rem}.plan-help{padding:24px}.plan-help>div{align-items:flex-start}.plan-help .btn{width:100%;text-align:center}}


/* MODULO CONTATTI, ALERT E BANNER COOKIE (integrazione piattaforma) */
.form-wrap{display:flex;flex-direction:column;gap:14px}
.hp{position:absolute!important;left:-9999px!important;width:1px!important;height:1px!important;opacity:0}
.alert{padding:15px 18px;border-radius:14px;font-weight:700;font-size:.92rem;border:1px solid}
.alert--ok{background:#E9FBF0;border-color:#9BE3BC;color:#106B3C}
.alert--err{background:#FEF0F0;border-color:#F3C0C1;color:#A32126}
.f-err{display:block;margin-top:6px;font-size:.8rem;font-weight:700;color:#C1373C}
.form-note{margin:14px 0 0;font-size:.82rem;line-height:1.55;color:var(--muted)}
/* La nota SOPRA il pulsante d'invio («ti scrivo io entro…»). Con il margine di
   `.form-note`, pensato per la nota sotto il pulsante, stava incollata al
   pulsante e si leggeva come una sua didascalia. Sopra ha gia' lo spazio
   lasciato dal campo precedente: serve quello sotto. */
.form-note--sopra{margin:0 0 12px}
.field--captcha{margin-bottom:14px}
/* Sta dentro `.footgrid div`, che impone colonna: si vince di specificita'
   (0,2,0) contro (0,1,1), non con !important. */
.footgrid .social{flex-direction:row;gap:10px;margin-top:14px}
.social a{width:36px;height:36px;border-radius:10px;display:grid;place-items:center;background:rgba(255,255,255,.08);color:#D0D5DD;transition:.2s ease}
.social a:hover{background:var(--green);color:#07142E}
.social svg{width:18px;height:18px}
.foot-legal{margin-top:22px;font-size:.8rem;line-height:1.6;color:#98A2B3}
.cookie-banner{position:fixed;left:16px;right:16px;bottom:16px;z-index:900;background:#07142E;color:#D0D5DD;border:1px solid rgba(255,255,255,.14);border-radius:20px;box-shadow:0 24px 60px rgba(0,0,0,.35)}
.cookie-banner[hidden]{display:none}
.cookie-banner__inner{max-width:1220px;margin:auto;padding:22px 26px;display:flex;align-items:center;gap:24px;flex-wrap:wrap}
.cookie-banner__text{margin:0;flex:1;min-width:260px;font-size:.88rem;line-height:1.6}
.cookie-banner__text a{color:#7CE8A7;text-decoration:underline}
.cookie-prefs{display:flex;flex-direction:column;gap:8px;font-size:.85rem;width:100%}
.cookie-prefs[hidden]{display:none}
.cookie-prefs label{display:flex;align-items:center;gap:9px;margin:0;font-weight:500}
.cookie-prefs input{width:auto;margin:0}
.cookie-banner__actions{display:flex;gap:9px;flex-wrap:wrap}
.cookie-banner__actions .btn{min-height:44px;padding:0 18px}
.cookie-banner__actions .secondary{background:transparent;border-color:rgba(255,255,255,.35);color:#fff}
@media(max-width:640px){.cookie-banner__inner{padding:18px}.cookie-banner__actions .btn{flex:1}}

/* ===== Consiglia-piano a nastro ====================================
   Una domanda alla volta dentro una finestra che ritaglia; il nastro
   scorre in orizzontale, a destra andando avanti.

   Prima erano quattro riquadri impilati: la prima cosa che si vedeva era
   la lunghezza del modulo, non la prima domanda. Il commento che stava
   qui diceva «le domande sono tre e stanno su una schermata» — non erano
   tre da un pezzo, ed e' il genere di commento che invecchia da solo. */
/* Il consiglia-piano arriva subito sotto l'intestazione della pagina, che
   chiude gia' con `padding-bottom:10px`: con i 112px di `.section` in cima
   fra il sottotitolo e la prima domanda restavano 122px di vuoto. Il
   riquadro e' l'unico contenuto della pagina, non ha bisogno di stacco. */
.consiglia-section{padding-top:18px}

.cp-testa{display:flex;align-items:center;justify-content:space-between;gap:12px;min-height:30px;margin-bottom:10px}
.cp-conta{margin:0 0 0 auto;font-size:.82rem;letter-spacing:.06em;text-transform:uppercase;opacity:.55}
.cp-indietro{border:0;background:none;padding:0;font:inherit;font-size:.9rem;font-weight:600;color:#d2122e;cursor:pointer}
.cp-indietro:hover{text-decoration:underline}
.cp-indietro[hidden]{display:none}
.cp-barra{height:3px;border-radius:3px;background:rgba(16,24,40,.10);overflow:hidden;margin-bottom:20px}
.cp-barra span{display:block;height:100%;width:0;border-radius:3px;background:#d2122e;transition:width .3s ease}
@media(max-width:640px){.cp-conta{font-size:.72rem;letter-spacing:.03em;text-align:right}}

/* La finestra ritaglia i vagoni fuori campo. L'altezza la scrive il
   JavaScript sul passo attivo: lasciata `auto` starebbe alta quanto la
   domanda piu' lunga, e sulle corte meta' riquadro sarebbe bianco — cioe'
   il difetto che questo lavoro doveva togliere. */
.cp-vista{overflow:hidden;transition:height .3s ease}
.cp-nastro{display:flex;align-items:flex-start;transition:transform .34s cubic-bezier(.4,0,.2,1)}
/* `min-width:0` insieme a `flex:0 0 100%`: senza, un'opzione lunga allarga
   il vagone e lo scorrimento in percentuale porta al passo sbagliato. */
.cp-passo{flex:0 0 100%;min-width:0}
.consiglia-q.cp-passo{margin:0}

/* L'esito e' il quinto vagone, non una sezione a parte: il filo sopra
   apparteneva all'impilamento e qui taglierebbe il riquadro a meta'. */
.consiglia-esito.cp-passo{border-top:0;margin-top:0;padding-top:0}

.cp-ripeti{margin:18px 0 0;text-align:center}
.cp-ripeti[hidden]{display:none}
.cp-ripeti__btn{border:0;background:none;padding:0;font:inherit;font-size:.88rem;color:#667085;text-decoration:underline;cursor:pointer}
.cp-ripeti__btn:hover{color:#d2122e}

/* Chi ha chiesto meno movimento non lo riceve: stessa sequenza, senza
   scorrimento. */
@media (prefers-reduced-motion: reduce){
  .cp-nastro,.cp-vista,.cp-barra span{transition:none}
}
.consiglia-box { max-width: 760px; margin: 0 auto; background: #fff; border: 1px solid rgba(16,24,40,.10);
    border-radius: 18px; padding: 26px 24px; box-shadow: 0 18px 40px rgba(16,24,40,.06); }
.consiglia-q { border: 0; padding: 0; margin: 0 0 20px; }
.consiglia-q legend { font-weight: 700; font-size: 1.02rem; margin-bottom: 10px; padding: 0; }
.consiglia-opts { display: grid; gap: 8px; }
.consiglia-opt { display: flex; align-items: flex-start; gap: 10px; padding: 11px 14px;
    border: 1px solid rgba(16,24,40,.12); border-radius: 12px; cursor: pointer; line-height: 1.4; }
.consiglia-opt:hover { border-color: rgba(16,24,40,.28); background: #fbfaf7; }
/* La regola globale `input,select,textarea{width:100%}` di questo foglio è
   pensata per il modulo dei contatti: applicata a un radio lo trasforma in
   una barra larga quanto la riga, con bordo e riempimento. Va annullata,
   come già fanno .privacy e .cookie-prefs più sopra. */
.consiglia-opt input[type="radio"] {
    width: auto;
    min-width: 0;
    margin: 2px 0 0;
    padding: 0;
    border: 0;
    border-radius: 0;
    background: none;
    flex: none;
    accent-color: #d2122e;
}
.consiglia-opt:has(input:checked) { border-color: #d2122e; box-shadow: 0 0 0 2px rgba(210,18,46,.10); }
/* :has() non c'è su browser vecchi: senza, resta solo il pallino selezionato,
   che basta a capire cosa si è scelto. */
.consiglia-esito { border-top: 2px solid rgba(16,24,40,.10); margin-top: 6px; padding-top: 20px; text-align: center; }
.consiglia-esito__label { margin: 0; font-size: .86rem; letter-spacing: .08em; text-transform: uppercase; opacity: .6; }
.consiglia-esito__piano { margin: 4px 0 12px; font-size: 1.6rem; }
.consiglia-esito__piano span { font-size: 1rem; opacity: .65; }
.consiglia-esito__motivi { list-style: none; margin: 0 0 18px; padding: 0; display: grid; gap: 6px; }
.consiglia-esito__motivi li { opacity: .8; }
.consiglia-esito__motivi li::before { content: '\2713'; margin-right: 8px; color: #2e7d4f; font-weight: 700; }
/* Cosa si ottiene con il piano consigliato. Sta sotto le ragioni e non fra
   loro: quelle sono vincoli verificabili con la spunta verde, questa e' una
   promessa commerciale, e mescolarle le farebbe leggere tutte come vincoli.
   Nessuna spunta, nessun bordo colorato — non compete con l'avviso ambra,
   che quando c'e' deve restare la cosa piu' visibile della schermata. */
.consiglia-esito__valore {
    margin: -8px 0 18px; padding: 0 4px;
    font-size: .95rem; line-height: 1.6; opacity: .75; text-align: center;
}
/* Avviso per gli sport non coperti: deve staccarsi dalle ragioni, che sono
   spuntate in verde. Non e' un errore ne' un divieto — e' un'informazione che
   conviene leggere prima di comprare, quindi ambra e non rosso. */
.consiglia-esito__avviso {
    margin: 0 0 18px; padding: 14px 16px; border-radius: 10px;
    background: #fdf6e3; border: 1px solid #e8d9a8; color: #6b5518;
    font-size: .92rem; line-height: 1.55; text-align: left;
}
/* Due azioni affiancate, che vanno a capo su schermo stretto. Il verde e'
   una sola: due pulsanti pieni sarebbero due strade uguali, e chi ha appena
   ricevuto un consiglio non deve scegliere anche fra come seguirlo. */
/* ---------------------------------------------------------------------------
   CONDIZIONI DI FORNITURA

   Venti pagine di contratto in una pagina web: la misura del testo conta piu'
   di qualunque altra cosa. Colonna stretta, interlinea larga, commi rientrati
   con il numero fuori — e' il modo in cui i contratti si leggono su carta, e
   non c'e' ragione di reinventarlo per lo schermo.
   --------------------------------------------------------------------------- */
.contratto-pubblico{max-width:780px;margin:0 auto;font-size:.95rem;line-height:1.7;color:#344054}
.contratto-pubblico p{margin:0 0 10px}
.contratto-h1{font-size:1.5rem;margin:44px 0 14px;color:var(--navy)}
.contratto-h2{font-size:1.05rem;margin:26px 0 8px;color:var(--navy)}
.contratto-h3{font-size:.98rem;margin:20px 0 6px;color:var(--navy)}

/* Il numero del comma sta FUORI dal testo: e' quello che l'elenco delle
   clausole vessatorie richiama, e dentro il paragrafo si perde. */
.contratto-comma{display:flex;gap:10px}
.contratto-comma>span{flex:0 0 26px;color:#6b7280;font-variant-numeric:tabular-nums}
.contratto-voce{padding-left:18px;position:relative}
.contratto-voce:before{content:'\2013';position:absolute;left:0;color:#98A2B3}
.contratto-casella{padding-left:26px;position:relative}
.contratto-casella:before{content:'\2610';position:absolute;left:0;font-size:1.1rem;color:#98A2B3}
.contratto-nota{background:#eef1f6;border-radius:10px;padding:10px 14px;font-size:.88rem;color:#41506b}
.contratto-stacco{border:0;border-top:2px solid var(--line);margin:46px 0}
.contratto-tabella{font-size:.88rem;margin:10px 0 18px}
.contratto-indice{background:#fff;border:1px solid var(--line);border-radius:12px;padding:14px 18px;margin-bottom:30px}
.contratto-indice summary{font-weight:700;cursor:pointer;color:var(--navy)}
.contratto-indice ol{margin:12px 0 0;padding-left:20px;font-size:.9rem}
.contratto-indice li{margin-bottom:3px}
.contratto-indice .liv-h1{margin-top:10px;font-weight:700;list-style:none;margin-left:-20px}

.consiglia-esito__azioni{display:flex;gap:10px;flex-wrap:wrap;justify-content:center}
/* SU TELEFONO L'ACQUISTO TORNA SOPRA.

   Affiancati, l'ordine del markup mette l'azione principale a DESTRA, dove
   l'occhio arriva per ultimo: e' la convenzione dei dialoghi e va bene cosi'.
   Andando a capo, pero', quello stesso ordine diventa verticale, e chi ha
   appena letto il consiglio incontra per primo il pulsante secondario.

   `column-reverse` E NON `order` SUI PULSANTI: inverte il solo ordine VISIVO
   e lascia intatto quello del documento, che e' anche quello della
   tabulazione e dei lettori di schermo. Con `order` chi naviga da tastiera
   arriverebbe sui due pulsanti in un ordine e li vedrebbe nell'altro.

   640px e non 560: e' la soglia a cui il contenitore va davvero a capo, e la
   regola deve scattare li' — non dove c'e' gia' un altro blocco. */
@media (max-width: 640px) {
    .consiglia-esito__azioni { flex-direction: column-reverse; }
}
.consiglia-esito__nota { margin: 14px 0 0; font-size: .86rem; opacity: .6; }
@media (max-width: 560px) { .consiglia-box { padding: 20px 16px; } }
/* Terzo livello di pulsante: nell'hero ce ne sono tre — demo, attivazione e
   contatti — e con due pieni e uno vuoto si capisce quale viene prima.
   Senza questa regola «ghost» sarebbe una classe che non esiste, cioe' un
   pulsante senza stile: il difetto piu' difficile da vedere, perche' la
   pagina si apre lo stesso. */
.ghost{background:transparent;border-color:transparent;color:var(--navy)}
.ghost:hover{background:rgba(10,21,48,.05)}


/* PAYOFF ACCANTO AL MARCHIO
   Sta nel markup e non dentro l'SVG: dentro il logo sarebbe illeggibile a 168px
   di larghezza, non si potrebbe tradurre e non lo leggerebbe nessuno screen
   reader. Il separatore verticale lo tiene attaccato al marchio senza toccarlo.

   Il colore e' quello dei testi secondari (--muted): il payoff accompagna il
   marchio, non compete con lui. */
.logo { display: flex; align-items: center; gap: 14px; }
.logo-payoff {
    display: none;                 /* compare solo dove c'e' spazio: vedi sotto */
    padding-left: 14px;
    border-left: 1px solid var(--line);
    font: 600 .82rem/1.25 Inter, sans-serif;
    color: var(--muted);
    max-width: 200px;
}
/* Sopra i 1100px la barra ha spazio per il payoff su una riga sola accanto ai
   collegamenti. Sotto, il menu' e il pulsante vincono: una riga di testo che
   spinge «Richiedi informazioni» fuori dalla barra costerebbe un contatto. */
@media (min-width: 1100px) { .logo-payoff { display: block; } }
/* ---------------------------------------------------------------------------
   Pagine oltre la home (/prezzi, /faq, /gestionale) e fascia delle discipline.
   Aggiunte il 20 agosto 2026, quando la landing e' stata divisa in quattro.
   --------------------------------------------------------------------------- */

/* Intestazione delle pagine interne. Non e' un hero: niente mockup, niente
   sfondo, solo il titolo. L'h1 e' piu' piccolo di quello della home perche'
   chi arriva qui ha gia' visto il prodotto e sta cercando un'informazione. */
.pagina-intro{padding:74px 0 10px}
.pagina-intro h1{font-size:clamp(2.3rem,4vw,3.7rem)}
.pagina-intro .heading{margin-bottom:30px}

/* Voce di menu' della pagina corrente. Sottolineatura e non grassetto: il
   grassetto sposta le voci accanto di un paio di pixel a ogni pagina. */
.nav nav a.attiva{color:var(--navy);box-shadow:inset 0 -2px 0 var(--green)}
/* Il pulsante staccato dalle voci.

   Dal pacchetto 142 vive dentro il <nav> — per finire nella tendina del
   telefono — e da allora eredita il `gap` del menu: 28px dall'ultima voce,
   cioe' lo stesso spazio che separa «Prezzi e piani» da «Quale piano». Con la
   stessa distanza di tutte le altre, «Attiva il tuo piano» si legge come la
   settima voce invece che come l'azione della barra.

   `margin-left` e non `gap` piu' grande: il gap vale fra TUTTE le voci, e
   allargarlo distanzierebbe anche quelle fra loro. Lo stacco serve in un punto
   solo, ed e' il punto dove finisce la navigazione e comincia il commercio.

   Sul telefono non vale: li' il menu e' una colonna, il pulsante ha gia' il
   suo margine sopra e un rientro laterale lo sposterebbe fuori asse. */
.nav nav .navcta{margin-left:20px}
.nav nav a:not(.btn):hover{color:var(--navy)}

/* UNA VOCE, UNA RIGA (pacchetto 318). Su schermo largo le voci di due parole
   — «Prezzi e piani», «Quale piano», «Sito di esempio» — andavano a capo dentro
   il menu: la barra mostrava sei voci su due righe e sembrava un elenco
   disordinato invece di una navigazione. Il menu non ha bisogno di quel
   ripiego, perche' sotto i 980px diventa una colonna e ogni voce ha la riga
   tutta per se'. */
.nav nav a:not(.btn){white-space:nowrap}
/* Anche il pulsante, ma con la sua regola: quella delle voci lo esclude di
   proposito — se lo colpisse, ogni ritocco alle voci finirebbe addosso
   all'azione della barra. */
.nav nav .navcta{white-space:nowrap}

/* Fascia delle discipline. Due colonne e non un elenco unico: la distinzione
   fra chi ha anche le sezioni di gara e chi no E' il contenuto, non una nota
   a pie' di pagina. */
.disc-grid{display:grid;grid-template-columns:1fr 1fr;gap:22px;align-items:stretch}
/* Colonna flessibile con i tag ancorati in fondo: a sinistra sono tre, a
   destra nove. Lasciandoli scorrere il paragrafo delle due colonne partiva ad
   altezze diverse e la card scura restava mezza vuota in basso. */
.disc-col{border:1px solid var(--line);border-radius:24px;padding:32px;background:#fff;display:flex;flex-direction:column}
.disc-col small{font-weight:800;font-size:.72rem;letter-spacing:.12em;color:var(--green)}
.disc-col h3{margin:10px 0 18px;font-size:1.5rem}
.disc-col p{color:var(--muted);margin:0}
/* La colonna degli sport di squadra ha piu' funzioni: si distingue con il
   fondo scuro, lo stesso segnale gia' usato dalla colonna «CON ASD CLUB». */
.disc-col--full{background:var(--navy);color:#fff;border-color:var(--navy);box-shadow:0 22px 50px rgba(10,21,48,.18)}
.disc-col--full p{color:#CED8E8}
.disc-col--full strong{color:#7CE8A7}
.disc-col--part small{color:var(--blue)}
/* `margin-top:auto` e' cio' che ancora i tag in fondo: senza, la card con
   meno tag lascia un vuoto sotto al testo. */
.disc-tags{display:flex;flex-wrap:wrap;gap:8px;margin:22px 0 0;padding-top:20px;border-top:1px solid var(--line);margin-top:auto}
/* Fondo grigio, non bianco: la sezione ora e' `soft` e una pastiglia bianca su
   card bianca si distingueva solo per il bordo da un pixel. */
.disc-tags span{border:1px solid var(--line);border-radius:999px;padding:7px 14px;font-size:.85rem;font-weight:700;color:#344054;background:var(--soft)}
.disc-col--full .disc-tags{border-top-color:rgba(255,255,255,.18)}
.disc-col--full .disc-tags span{background:rgba(255,255,255,.12);border-color:rgba(255,255,255,.24);color:#fff}
.disc-nota{margin:26px auto 0;max-width:760px;text-align:center;color:var(--muted);font-size:.95rem}
.disc-nota a{color:var(--blue);font-weight:700;text-decoration:underline}

/* FAQ a pagina intera: senza la colonna del titolo accanto, la lista al
   centro invece che a destra. */
.faq-lista{max-width:860px}

@media(max-width:980px){.disc-grid{grid-template-columns:1fr}}

/* ---------------------------------------------------------------------------
   «COME SI FIRMA», il riquadro in fondo a /condizioni.

   Usava `.wz-box` e `.wz-err`, che sono dichiarate nello <style> in linea di
   `attiva.php`: su questa pagina quel foglio non c'e', quindi le due classi non
   esistevano e il riquadro usciva senza fondo, senza bordo e senza spaziatura
   — testo qualunque dopo venti pagine di contratto. E' il caso gia' descritto
   in CoerenzaAdminTest: una classe che funziona di la' e non di qua e' peggio
   di una che non esiste, perche' provandola nell'altra pagina sembra a posto.

   FONDO NAVY, non un'altra scheda chiara. Il riquadro sta sopra l'indice, che
   e' gia' una scheda bianca su fondo tenue: due schede chiare in fila si
   leggerebbero come due parti della stessa cosa, mentre qui la prima orienta e
   la seconda e' un sommario. E' lo stesso trattamento di `.disc-col--full` e
   della sezione `.final`, con gli stessi colori di testo (#CED8E8) e di accento
   (#7CE8A7). Bianco su #0A1530 fa 18,1:1.

   IL MARGINE E' SOTTO, NON SOPRA. Il riquadro apre la sezione `soft`, che ha
   gia' 112px di spaziatura in cima: un margine superiore li' si sommerebbe a
   quello e staccherebbe il riquadro dal titolo che lo introduce.
   --------------------------------------------------------------------------- */
.firma-box{background:var(--navy);color:#fff;border-radius:24px;padding:32px;margin:0 0 34px;box-shadow:0 22px 50px rgba(10,21,48,.18)}
.firma-box h3{margin:0 0 14px;font-size:1.35rem}
.firma-box p{color:#CED8E8;margin:0}
.firma-box strong{color:#7CE8A7}
/* Non si riusa `.actions`: ha `margin:30px 0 24px`, tarato sull'hero, e quel
   margine sotto lascerebbe un vuoto dentro il riquadro. */
.firma-box__azioni{display:flex;gap:12px;flex-wrap:wrap;margin-top:22px}

/* Il messaggio che compare se il modello del contratto non si carica: prima
   era `.wz-err`, cioe' niente. Rosso tenue e non il colore del testo: e' un
   guasto nostro, e chi lo vede deve capire che non e' una parte del contratto. */
.contratto-errore{background:#fdecee;border:1px solid #f3c6cc;border-radius:12px;padding:14px 18px;color:#97303c}

/* ---------------------------------------------------------------------------
   LE SCHERMATE DEL GESTIONALE (`/gestionale`, sezione `.sg`)

   Due colonne: il testo a sinistra, la giostra a destra. Tre schermate in
   vista, la centrale a fuoco e le due laterali sfumate e rimpicciolite.

   PERCHE' LE LATERALI CI SONO. Una schermata sola sembra tutto quello che c'e'.
   Le due ai lati, tagliate dal bordo, dicono che la fila continua — ed e' il
   solo modo per dirlo senza scrivere «e altre sette».

   LA COLONNA DELLA GIOSTRA E' PIU' LARGA: gli screenshot sono 1400x655, cioe'
   larghi il doppio dell'altezza, e in una colonna stretta diventerebbero
   striscioline in cui non si legge niente. 1fr / 1.35fr.
   --------------------------------------------------------------------------- */
/* UNA COLONNA SOLA: la giostra prende tutta la larghezza.

   Erano due colonne, `1fr 1.35fr`, e la schermata a fuoco finiva a 520 pixel
   su uno schermo da 1440 — un'immagine da 1400 rimpicciolita a un terzo, di
   cui non si leggeva niente. Il testo introduttivo e' passato sopra, come in
   tutte le altre sezioni della pagina.

   Le proporzioni interne non cambiano: il palco tiene l'altezza in
   percentuale e la slide e' al 78% del palco, quindi le laterali continuano a
   sporgere esattamente come prima, solo piu' grandi. */
.sg-grid{display:grid;grid-template-columns:1fr;gap:34px}
.sg-testo{margin-bottom:6px}
.sg-testo h2{margin:6px 0 16px}
.sg-testo p{color:var(--muted);margin:0 0 14px}

/* LO STATO DI PARTENZA: le schermate in colonna, una sotto l'altra, con la
   loro didascalia. La classe `is-viva` la mette lo script, ed e' lei ad
   accendere l'impaginazione a tre.

   Il verso conta: cosi', se lo script della giostra non parte, restano nove
   schermate leggibili. Al contrario — giostra nel CSS e speranza che il JS
   arrivi — otto resterebbero impilate una sull'altra e invisibili.

   NON E' PERO' UN RIPIEGO PER 'JAVASCRIPT DISATTIVATO', e non va raccontato
   come tale: tutta la landing usa `.reveal{opacity:0}` con lo script che
   aggiunge `visible` allo scorrimento, quindi senza JS la pagina intera e'
   gia' bianca. Questo copre il caso piu' ristretto e piu' probabile: lo
   script della pagina gira, quello della giostra si rompe. */
.sg-giostra{position:relative}
.sg-slide{margin:0 0 22px}
.sg-slide img{display:block;width:100%;height:auto;border-radius:14px;
  border:1px solid var(--line);box-shadow:0 18px 44px rgba(10,21,48,.14)}
.sg-slide figcaption{margin-top:12px}
.sg-slide figcaption b{display:block;font-size:1rem}
.sg-slide figcaption span{display:block;color:var(--muted);font-size:.9rem;margin-top:3px}

/* Le frecce, le pastiglie e il contatore non servono a niente finche' non c'e'
   lo script che li ascolta: un pulsante che non fa nulla e' peggio di un
   pulsante che non c'e'. */
.sg-freccia,.sg-sotto{display:none}

/* --- da qui in poi solo con JavaScript ---------------------------------- */

/* Il palco ritaglia: le laterali escono dai bordi ed e' quello che le fa
   sembrare la continuazione di una fila. L'altezza e' fissa in proporzione
   (padding-top sul rapporto 1400x655 = 46,8%) perche' le slide sono in
   posizione assoluta e non la reggono da sole. */
/* L'altezza e' proporzionale: le slide sono in posizione assoluta e non la
   reggono da sole. 78% di larghezza su un rapporto 1400x655 fa 36,5%. */
.sg-giostra.is-viva .sg-palco{position:relative;overflow:hidden;padding-top:36.5%;
  margin-bottom:14px}

/* LA SLIDE E' PIU' STRETTA DEL PALCO, ed e' la cosa da cui dipende tutto il
   resto: a larghezza piena le laterali finiscono fuori dal ritaglio e non si
   vedono affatto — provato, e la prima stesura faceva esattamente questo.
   Al 78% resta spazio ai bordi perche' quelle accanto sporgano dentro. */
.sg-giostra.is-viva .sg-slide{position:absolute;top:0;left:11%;width:78%;margin:0;
  opacity:0;pointer-events:none;
  transition:transform .42s cubic-bezier(.4,0,.2,1),opacity .42s ease,filter .42s ease}

/* Le tre in vista. La centrale piena, le laterali all'82% e spostate ai bordi:
   sporgono per un quinto, quanto basta a leggerle come «ce n'e' un'altra». */
.sg-giostra.is-viva .sg-slide.is-centro{opacity:1;pointer-events:auto;
  transform:translateX(0) scale(1);z-index:3}
.sg-giostra.is-viva .sg-slide.is-prima{opacity:.55;transform:translateX(-72%) scale(.88);
  filter:blur(1.5px) saturate(.8);z-index:1}
.sg-giostra.is-viva .sg-slide.is-dopo{opacity:.55;transform:translateX(72%) scale(.88);
  filter:blur(1.5px) saturate(.8);z-index:1}

/* La didascalia solo sotto quella a fuoco: tre didascalie in fila, di cui due
   illeggibili, sono rumore. Sta FUORI dal ritaglio, quindi in posizione
   assoluta sotto il palco, e la sua altezza e' riservata da `.sg-sotto`. */
.sg-giostra.is-viva .sg-slide figcaption{display:none}

.sg-giostra.is-viva .sg-freccia{display:grid;place-items:center;position:absolute;
  top:18%;width:44px;height:44px;border-radius:50%;border:1px solid var(--line);
  background:#fff;color:var(--navy);font-size:1.1rem;line-height:1;cursor:pointer;
  box-shadow:0 8px 22px rgba(10,21,48,.16);z-index:5;transition:transform .18s ease}
.sg-giostra.is-viva .sg-freccia:hover{transform:scale(1.08)}
.sg-giostra.is-viva .sg-freccia:focus-visible{outline:2px solid var(--green);outline-offset:3px}
.sg-freccia--sx{left:-14px}
.sg-freccia--dx{right:-14px}

/* La didascalia della schermata a fuoco. `min-height` riservata: senza, il
   blocco cambia altezza fra un testo di due righe e uno di tre, e le
   pastiglie sotto ballano a ogni passaggio. */
.sg-giostra.is-viva .sg-dida{display:block;min-height:74px;margin:0 0 14px}
.sg-dida{display:none}
.sg-dida b{display:block;font-size:1.05rem;color:var(--navy)}
.sg-dida span{display:block;color:var(--muted);font-size:.92rem;margin-top:4px}
.sg-giostra.is-viva .sg-sotto{display:flex;align-items:center;justify-content:space-between;
  gap:16px;flex-wrap:wrap}
.sg-punti{display:flex;gap:7px}
.sg-punto{width:8px;height:8px;padding:0;border:0;border-radius:50%;cursor:pointer;
  background:rgba(16,24,40,.20);transition:background .2s ease,transform .2s ease}
.sg-punto.is-on{background:var(--green);transform:scale(1.35)}
.sg-punto:focus-visible{outline:2px solid var(--green);outline-offset:3px}
.sg-conta{margin:0;color:var(--muted);font-size:.85rem}

/* Sotto i 980px la giostra diventa una colonna sola: a schermo stretto le
   laterali toglierebbero larghezza proprio a quella che si deve leggere. */
@media (max-width:980px){
  .sg-grid{grid-template-columns:1fr;gap:34px}
  .sg-giostra.is-viva .sg-slide.is-prima,
  .sg-giostra.is-viva .sg-slide.is-dopo{opacity:.28;transform:translateX(0) scale(.92)}
  .sg-freccia--sx{left:6px}
  .sg-freccia--dx{right:6px}
}

/* Chi ha chiesto meno movimento non lo riceve. La giostra resta usabile: le
   schermate cambiano, solo senza scorrere. */
@media (prefers-reduced-motion:reduce){
  .sg-giostra.is-viva .sg-slide{transition:opacity .2s ease}
  .sg-giostra.is-viva .sg-freccia{transition:none}
}

/* IL RIQUADRO DELLA PROMOZIONE NELL'ESITO DEL QUESTIONARIO.

   Stessi valori di `.wz-promo` nel percorso di attivazione: fondo #efefef,
   10px di respiro, angoli a 15px, testo centrato. Sulle schede di /prezzi il
   riquadro NON ci va — li' la scheda e' gia' un contenitore, e uno dentro
   l'altro non aggiunge niente — quindi non si tocca `.plan-promo` ma si
   aggiunge una classe accanto.

   IL TESTO E' #4b5563 E NON #98A2B3. Il grigio chiaro di `.plan-promo span`
   e' scelto per il fondo bianco delle schede: su #efefef scende a 2,4:1,
   sotto qualunque soglia. #4b5563 fa 6,57:1, ed e' lo stesso che /attiva usa
   sullo stesso fondo per la stessa ragione. Cambiando il fondo, il testo
   deve seguirlo.

   TERZA COPIA DEGLI STESSI VALORI, e va detto: la pastiglia ambra vive gia'
   in due fogli perche' /attiva non carica quello della landing. Questo
   riquadro ne aggiunge una. Non c'e' modo di evitarlo senza far caricare a
   /attiva un foglio che non gli serve — ma se un giorno il fondo cambia,
   cambia in tre punti, e sono `.wz-promo`, `.cp-promo` e le loro pastiglie. */
.consiglia-esito .plan-promo.cp-promo{margin:0 0 20px;color:#4b5563;font-size:.85rem;
  background-color:#efefef;padding:10px;border-radius:15px;text-align:center}
.consiglia-esito .plan-promo.cp-promo span{display:block;margin:5px 0;color:#4b5563;
  font-size:.85rem}

/* ---------------------------------------------------------------------------
   PULSANTE WHATSAPP (pacchetto 230). Lo stesso dei siti dei club, portato qui
   perche' la landing ha il suo foglio di stile e non carica style.css. Le
   regole sono le stesse; i commenti che le motivano stanno in style.css,
   accanto all'originale, e non si ricopiano.

   SI ANIMA `max-width` E NON `width`: l'etichetta arriva da config.php,
   quindi la larghezza aperta non e' conosciuta.
   --------------------------------------------------------------------------- */
.wa-float{position:fixed;right:18px;bottom:18px;z-index:901;display:inline-flex;align-items:center;gap:0;min-height:52px;padding:0 13px;background:#25d366;color:#fff;border-radius:999px;text-decoration:none;font-weight:700;font-size:.95rem;line-height:1;box-shadow:0 6px 20px -6px rgba(0,0,0,.45);transition:transform .18s ease,box-shadow .18s ease,background .18s ease,gap .28s ease}
.wa-float:hover{background:#1eb355;transform:translateY(-2px);box-shadow:0 10px 26px -8px rgba(0,0,0,.5)}
.wa-float:focus-visible{outline:3px solid #0b3d1f;outline-offset:2px}
.wa-float__icona{display:block;width:26px;height:26px;flex:none}
.wa-float__icona svg{width:100%;height:100%;display:block}
.wa-float__testo{display:block;max-width:0;overflow:hidden;white-space:nowrap;opacity:0;transition:max-width .28s ease,opacity .18s ease}
.wa-float:hover .wa-float__testo,.wa-float:focus-within .wa-float__testo{max-width:320px;opacity:1}
.wa-float:hover,.wa-float:focus-within{gap:9px;padding-right:18px}
@media(hover:none){.wa-float:hover .wa-float__testo{max-width:0;opacity:0}.wa-float:hover{gap:0;padding-right:13px}}
/* Banner cookie aperto: qui e' una fascia larga quanto lo schermo, e la sua
   altezza dipende dalla larghezza — misurata con Chromium: 91px fino a 1100,
   114px a 1024 e 900, 136px a 800, 174px da 640 in giu'. Un offset fisso
   copre solo i primi due casi: da 900px in su il pulsante sale a 150px dal
   fondo (20px di aria nel caso peggiore); sotto i 900px la fascia occupa
   una fetta di schermo e il pulsante, alzato, finirebbe in mezzo alla
   pagina — si nasconde, e ricompare alla scelta sui cookie, che e' comunque
   la prima cosa da fare. Nessuno script: il banner precede il pulsante nel
   documento e il selettore del fratello basta. */
@media(min-width:900px){.cookie-banner:not([hidden])~.wa-float{bottom:150px}}
@media(max-width:899px){.cookie-banner:not([hidden])~.wa-float{display:none}}
@media(max-width:560px){
  .wa-float{padding:0;width:54px;min-height:54px;justify-content:center;right:14px;bottom:14px}
  .wa-float:hover,.wa-float:focus-within{gap:0;padding-right:0}
  .wa-float__testo,.wa-float:hover .wa-float__testo,.wa-float:focus-within .wa-float__testo{position:absolute;width:1px;height:1px;max-width:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;opacity:0}
}
@media(prefers-reduced-motion:reduce){.wa-float,.wa-float__testo{transition:none}}
