/* shell.css — la cornice dell'app su schermo grande, nello stile approvato da Roberto
   (barra laterale petrolio scura, contenuto in un pannello bianco arrotondato).

   PERCHÉ IL LAVORO È TUTTO QUI DENTRO
   Tutte le pagine dell'app caricano già questo file. Riscrivendolo cambiano aspetto
   tutte insieme, senza toccare il loro contenuto. Le tre righe di @import qui sotto
   portano dentro anche i colori nuovi e il ponte con i nomi vecchi, così nemmeno di
   quelli devo aggiungere un collegamento pagina per pagina.

   COME È FATTA (da 900px in su)

     ┌──────────┬─────────────────────────────────┬───────────┐
     │          │  ╭───────────────────────────╮  │           │
     │ .tl-side │  │ .hdr / .topbar            │  │ .wh-rail  │
     │  scura   │  │ .body / .stage / .wrap    │  │  colonna  │
     │  a tutta │  │ .footer                   │  │  destra   │
     │  altezza │  ╰── pannello bianco ────────╯  │ (se c'è)  │
     └──────────┴─────────────────────────────────┴───────────┘

   IL PANNELLO BIANCO SENZA TOCCARE IL DOM
   Il pannello dovrebbe essere un contenitore che avvolge testata e contenuto. Ma 26
   regole sparse nelle pagine si aspettano che .body sia figlio DIRETTO di .phone
   (per esempio `.phone > .body`): infilando un contenitore in mezzo si romperebbero.
   Quindi il pannello non è un elemento: è lo sfondo `.phone::after`, posizionato dove
   sta la colonna del contenuto. Effetto identico, DOM intatto, zero rischi.

   SOGLIE
     < 900px   → telefono: non cambia nulla, resta l'app di sempre
     ≥ 900px   → barra laterale scura + pannello
     ≥ 1240px  → compare anche la colonna destra, se la pagina ne fornisce una
*/

@import url('ui.css');
@import url('ponte.css');
@import url('telaio.css');

:root{
  --wh-side-w:248px;   /* larghezza della barra laterale */
  --wh-gap:16px;       /* aria attorno al pannello */
  --wh-rail-w:344px;
  /* misure tenute per compatibilità: alcune pagine le usano ancora */
  --wh-r-sm:10px; --wh-r-md:14px; --wh-r-lg:20px;
  --wh-sh-sm:0 1px 2px rgba(4,36,42,.05);
  --wh-sh-md:0 4px 16px rgba(4,36,42,.07);
  --wh-sh-lg:0 12px 36px rgba(4,36,42,.11);
}

/* La barra laterale la costruisce shell.js, la colonna destra la singola pagina.
   Di base nascoste: senza questa riga la colonna destra comparirebbe sul telefono,
   appesa in fondo alla pagina. */
.wh-rail{ display:none; }

/* la vecchia barra in alto non esiste più: nel disegno nuovo il titolo sta dentro il
   pannello. Se una pagina la creasse ancora, resta invisibile invece di raddoppiarsi. */
.wh-top{ display:none !important; }


@media (min-width:900px){

  body{
    padding:0 !important;
    align-items:stretch !important;
    justify-content:stretch !important;
    background:var(--bg) !important;
  }

  /* La cornice-telefono smette di essere un mockup e diventa la piattaforma.
     L'aria attorno al pannello è il PADDING di questa griglia, non un margine dei figli:
     così la colonna del contenuto finisce esattamente dove finisce il pannello e la sua
     barra di scorrimento cade DENTRO il bianco. Con il padding sui figli, invece, la
     barretta di scorrimento restava appesa al bordo della finestra, fuori dal pannello. */
  .phone{
    width:100% !important; max-width:none !important;
    height:100vh !important; max-height:none !important;
    border-radius:0 !important; box-shadow:none !important;
    background:var(--bg) !important;
    display:grid !important;
    grid-template-columns:var(--wh-side-w) minmax(0,1fr);
    /* riga 1 = header fisso · riga 2 = testata della pagina · riga 3 = contenuto
       che scorre · riga 4 = piede */
    grid-template-rows:auto auto minmax(0,1fr) auto;
    column-gap:var(--wh-gap);
    padding:var(--wh-gap) var(--wh-gap) var(--wh-gap) 0 !important;
    position:relative;
  }

  /* Il pannello: solo sfondo, nessun elemento nuovo (vedi nota in testa al file).
     Le coordinate sono riferite al riquadro interno al padding, quindi 0 = bordo del
     pannello già distanziato dalla finestra.

     z-index NEGATIVO, e non "0 più i figli a 1": lo sfondo del genitore si disegna per
     primo, poi i figli con z-index negativo, poi tutto il resto. Così il pannello sta
     sotto al contenuto senza che io debba toccare i figli.
     PRIMA AVEVO FATTO L'ERRORE OPPOSTO: `.phone > *{position:relative}` per alzare il
     contenuto. Ma quella regola rendeva relativi anche i pop-up e i messaggi a comparsa
     delle pagine (che si dichiarano `position:absolute`), e quelli finivano a occupare
     una riga della griglia spingendo tutto in basso. */
  .phone::after{
    content:''; position:absolute; z-index:-1; pointer-events:none;
    top:0; bottom:0; right:0;
    left:calc(var(--wh-side-w) + var(--wh-gap));
    background:var(--surface); border-radius:26px; box-shadow:var(--sh-2);
  }

  /* i margini negativi annullano il padding della griglia solo per la barra laterale,
     che deve restare attaccata al bordo e alta tutto lo schermo */
  .tl-side{
    display:flex; grid-column:1; grid-row:1 / -1;
    margin:calc(-1 * var(--wh-gap)) 0;
  }

  /* ---------- dove va la roba della pagina ----------
     Le righe sono dichiarate in modo ESPLICITO. Lasciandole indovinare, il risultato
     cambiava da pagina a pagina: alcune hanno .hdr, altre no, e le procedure guidate
     usano .topbar/.stage/.footer invece di .body. */
  .phone > .tl-topbar{ grid-column:2; grid-row:1; }
  .phone > .hdr,
  .phone > .topbar   { grid-column:2; grid-row:2; }
  .phone > .body,
  .phone > .stage,
  .phone > .wrap     { grid-column:2; grid-row:3; min-height:0; overflow-y:auto; }
  .phone > .footer   { grid-column:2; grid-row:4; }

  /* la barra in basso e la barretta di ui.js sono sostituite dalla laterale */
  .phone > .nav,
  .phone > .wh-topbar{ display:none !important; }

  /* ---------- messaggi a comparsa e pop-up ----------
     Le pagine li piazzano con `left:18px; right:18px` rispetto a .phone: sul telefono
     è tutta la larghezza dello schermo, ma da computer .phone è l'intera finestra e
     quindi finivano stesi anche sopra la barra laterale. Li riporto dentro il pannello. */
  .phone > .btoast,
  .phone > .ctoast,
  .phone > .toast{
    left:calc(var(--wh-side-w) + 48px) !important;
    right:48px !important;
    max-width:520px;
  }
  .phone > .pmodal,
  .phone > .amodal,
  .phone > .modal{ left:var(--wh-side-w) !important; }

  /* ---------- respiro dentro il pannello ----------
     Il contenuto ora coincide col pannello, quindi qui serve solo l'aria interna. */
  .phone > .body,
  .phone > .stage,
  .phone > .wrap{ padding:6px 34px 44px; background:transparent; }
  .phone > .hdr,
  .phone > .topbar{ padding:28px 34px 0; background:transparent; border:none; }
  .phone > .footer{ padding:0 34px 22px; background:transparent; border:none; }

  /* width:100% NON è ridondante: se la pagina rende .body un contenitore flex
     (lezione.html lo fa per tenere il video in cima sul telefono) i margini automatici
     hanno la precedenza sullo stiramento e i blocchi si restringono al contenuto,
     finendo centrati invece che allineati a sinistra. */
  /* 1080px e non 940 come prima: adesso il contenuto sta DENTRO un pannello bianco, e
     una colonna da 940 lasciava 150px di bianco vuoto per lato. Le card hanno una loro
     struttura interna, quindi le righe di testo non diventano troppo lunghe. */
  .phone > .body > *,
  .phone > .stage > *,
  .phone > .wrap > *{ width:100%; max-width:1080px; margin-left:auto; margin-right:auto; }

  /* 940px è la misura giusta per il testo, ma stringe i cataloghi a due colonne.
     Le pagine a griglia (corsi, risorse) chiedono più spazio con class="body larga". */
  .phone > .body.larga > *{ max-width:1240px; }
  /* i <button> sono inline-block: senza questo "margin:auto" non li centra */
  .phone > .body > button,
  .phone > .stage > button{ display:block; }

  .phone > .hdr > *,
  .phone > .topbar > *,
  .phone > .footer > *{ max-width:1080px; margin-left:auto; margin-right:auto; }

  /* la testata della pagina diventa il titolo grande del pannello, come nel disegno */
  .phone > .hdr h1, .phone > .topbar h1,
  .phone > .hdr .h-title, .phone > .topbar .h-title{
    font-family:var(--f-display); font-weight:700; font-size:29px;
    letter-spacing:-.02em; color:var(--ink);
  }
  /* la freccia "indietro" non serve da computer: il menù laterale dice sempre dove sei */
  .phone > .hdr .back, .phone > .topbar .back{ display:none; }

  /* barra di scorrimento discreta al posto di quella nascosta del telefono */
  .phone > .body::-webkit-scrollbar,
  .tl-side::-webkit-scrollbar,
  .wh-rail::-webkit-scrollbar{ display:block; width:10px; }
  .phone > .body::-webkit-scrollbar-thumb,
  .tl-side::-webkit-scrollbar-thumb,
  .wh-rail::-webkit-scrollbar-thumb{
    background:#DCDCD6; border-radius:999px; border:3px solid transparent; background-clip:content-box;
  }
  .phone > .body::-webkit-scrollbar-track,
  .tl-side::-webkit-scrollbar-track,
  .wh-rail::-webkit-scrollbar-track{ background:transparent; }

  /* ---------- griglie di card ----------
     corsi.html: figli di #lib = titoli .secttl (a tutta riga) + card a.course
     risorse.html: figli di #lib = blocchi .sec (categoria + elementi) */
  #lib{ display:grid; grid-template-columns:repeat(auto-fill,minmax(320px,1fr)); gap:16px; align-items:start; }
  #lib > .secttl{ grid-column:1 / -1; }
  #lib > a.course{ margin-bottom:0; }

  /* ---------- la chat col coach ----------
     È l'unica pagina senza .body: i suoi figli sono testata, area messaggi, chip di
     suggerimento e barra di scrittura. Va dichiarata a parte, altrimenti la griglia
     li sparpaglia (le chip finivano sopra la barra laterale). */
  .phone.is-chat{ grid-template-rows:auto auto minmax(0,1fr) auto auto; }
  .phone.is-chat > .chead{ grid-column:2; grid-row:2; padding:24px 34px 0; }
  .phone.is-chat > .chat { grid-column:2; grid-row:3; min-height:0; overflow-y:auto; padding:0 34px; }
  .phone.is-chat > .chips{ grid-column:2; grid-row:4; padding:0 34px; }
  .phone.is-chat > .inbar{ grid-column:2; grid-row:5; padding:0 34px 22px; background:transparent; border:none; }
  .phone.is-chat > .chead,
  .phone.is-chat > .chat,
  .phone.is-chat > .chips,
  .phone.is-chat > .inbar{ width:100%; }
  .phone.is-chat > .chead > *,
  .phone.is-chat > .chat > *,
  .phone.is-chat > .chips > *,
  .phone.is-chat > .inbar > *{ max-width:900px; margin-left:auto; margin-right:auto; }
}

/* ============================================================
   PAGINE SENZA CORNICE — class="wh-solo" sul <body>
   ============================================================
   Sono i flussi guidati: il Lifestyle Checkup e il check-in settimanale.

   PERCHÉ NON HANNO LA BARRA LATERALE
   Il checkup è il primo passo di tutto: senza di lui non si sblocca la Home, non nasce
   il piano, non c'è niente da vendere. Mettergli accanto sette voci di menù significa
   offrire sette vie d'uscita a metà del modulo, e chi esce a metà non torna.
   Quindi qui la pagina occupa tutta la finestra e l'unica cosa da fare è andare avanti.

   Il blocco sta DOPO quello generale di sopra e ripete gli !important: le regole hanno
   la stessa importanza, quindi vince l'ultima. Senza !important perderebbe contro
   `.phone{...!important}`.
============================================================ */
@media (min-width:900px){
  body.wh-solo{
    padding:0 !important;
    background:var(--cream, #F4EFE6) !important;
    align-items:stretch !important; justify-content:stretch !important;
  }
  .wh-solo .phone{
    display:flex !important; flex-direction:column !important;
    width:100% !important; max-width:none !important;
    height:100vh !important; max-height:none !important;
    border-radius:0 !important; box-shadow:none !important;
    padding:0 !important;
    background:var(--cream, #F4EFE6) !important;
  }
  /* niente pannello bianco: qui il fondo è la pagina intera */
  .wh-solo .phone::after{ display:none !important; }

  /* Il contenuto resta una colonna leggibile in mezzo allo schermo. Senza questo, su un
     monitor da 27 pollici le domande si stenderebbero per un metro e mezzo. */
  .wh-solo .phone > .topbar,
  .wh-solo .phone > .stage,
  .wh-solo .phone > .body,
  .wh-solo .phone > .footer{ padding-left:24px; padding-right:24px; }
  .wh-solo .phone > .topbar > *,
  .wh-solo .phone > .stage > *,
  .wh-solo .phone > .body > *,
  .wh-solo .phone > .footer > *{
    width:100%; max-width:640px; margin-left:auto; margin-right:auto;
  }
  .wh-solo .phone > .stage,
  .wh-solo .phone > .body{ padding-top:20px; padding-bottom:32px; }

  /* i <button> sono inline-block: senza display:block il "margin:auto" non li centra e
     il pulsante Avanti restava incollato a sinistra invece che sotto le risposte */
  .wh-solo .phone > .footer > button,
  .wh-solo .phone > .footer > a,
  .wh-solo .phone > .stage > button{ display:block; }
  /* la freccia "indietro" QUI serve: è l'unico modo di tornare a una domanda */
  .wh-solo .phone > .topbar .back,
  .wh-solo .phone > .hdr .back{ display:flex !important; }
}

/* ---------- colonna destra (solo dove la pagina la fornisce) ---------- */
@media (min-width:1240px){
  .phone.has-rail{
    grid-template-columns:var(--wh-side-w) minmax(0,1fr) var(--wh-rail-w);
  }
  /* il pannello si ferma prima della colonna destra */
  .phone.has-rail::after{ right:calc(var(--wh-rail-w) + var(--wh-gap)); }

  /* parte dalla riga 2, cioè sotto l'header: se partisse dalla riga 1 le sue card
     sbucherebbero sopra la linea dell'header e l'occhio non troverebbe un allineamento */
  .phone.has-rail > .wh-rail{
    display:block; grid-column:3; grid-row:2 / -1;
    overflow-y:auto; min-height:0; padding:22px 4px 48px;
    background:transparent; border:none;
  }
  .phone.has-rail > .hdr,
  .phone.has-rail > .body{ max-width:none; }
}

/* ---------- colonna "Oggi" (rail.js) ----------
   Vive dentro .wh-rail, quindi si vede solo da 1240px in su come l'indice del corso.
   Le card sono bianche su fondo crema: nella prima versione era il contrario e i
   blocchi non si staccavano, sembrava un muro unico. */
@media (min-width:1240px){
  /* ⚠️ display E gap vanno messi QUI, sul selettore lungo: la regola che rende
     visibile la colonna è `.phone.has-rail > .wh-rail{display:block}` (3 classi) e
     batteva `.rl-oggi{display:flex}` (1 classe). Risultato: il gap non si applicava
     e le card restavano appiccicate. */
  .phone.has-rail > .wh-rail.rl-oggi{
    display:flex; flex-direction:column; gap:16px;
  }

  .rl-card{
    background:var(--surface); border:1px solid var(--line);
    border-radius:var(--r-lg); padding:18px; box-shadow:var(--sh-1);
  }
  .rl-card h4{
    display:flex; align-items:center; gap:9px;
    margin:0 0 13px; font-size:10px; font-weight:700; letter-spacing:.12em;
    text-transform:uppercase; color:var(--ink-3);
  }
  .rl-ic{
    width:26px; height:26px; border-radius:9px; flex:none;
    display:flex; align-items:center; justify-content:center;
  }
  .rl-corallo { background:#FFEDE7; color:#C4502F; }
  .rl-teal    { background:var(--teal-soft); color:#0E8A76; }
  .rl-petrolio{ background:var(--teal-soft); color:var(--teal); }
  .rl-sabbia  { background:var(--surface-3); color:#8A6F4E; }

  .rl-card a{ text-decoration:none; color:inherit; display:block; }
  .rl-t{ display:block; font-family:var(--f-display); font-size:14.5px; font-weight:600;
         line-height:1.35; color:var(--ink); }
  .rl-d{ display:block; font-size:12.5px; line-height:1.5; color:var(--ink-2); margin-top:5px; }
  .rl-k{ display:block; font-size:10px; font-weight:700; letter-spacing:.1em;
         text-transform:uppercase; color:var(--ink-3); margin-bottom:4px; }
  .rl-link{ display:inline-block; margin-top:12px; font-size:12.5px; font-weight:700; color:var(--teal); }
  .rl-blocco:hover .rl-link{ text-decoration:underline; }

  .rl-fatto{ display:flex; align-items:center; gap:8px; font-size:13.5px; font-weight:600; color:var(--teal-2); }

  /* riprendi da dove eri */
  .rl-ripr{ display:flex !important; gap:13px; align-items:flex-start; }
  .rl-cop{ width:64px; height:64px; border-radius:12px; flex:none;
           background-size:cover; background-position:center; background-color:var(--surface-3); }
  .rl-ripr-c{ flex:1; min-width:0; }
  .rl-ripr .rl-t{ overflow:hidden; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; }
  .rl-bar{ display:block; height:6px; border-radius:999px; background:var(--surface-3);
           overflow:hidden; margin-top:9px; }
  .rl-bar i{ display:block; height:100%; border-radius:999px;
             background:linear-gradient(90deg,var(--teal-2),var(--teal)); }
  .rl-ripr .rl-d{ margin-top:5px; }

  /* in arrivo */
  .rl-voce{ display:flex !important; gap:11px; align-items:flex-start; padding:11px 0; }
  .rl-voce + .rl-voce{ border-top:1px solid var(--line-2); }
  .rl-voce:first-of-type{ padding-top:0; }
  .rl-voce:last-of-type{ padding-bottom:0; }
  .rl-pin{ width:32px; height:32px; border-radius:10px; flex:none;
           display:flex; align-items:center; justify-content:center; }
  .rl-voce > span:last-child{ flex:1; min-width:0; }
  .rl-voce .rl-t{ font-size:14px; }
  .rl-voce .rl-d{ margin-top:3px; }

  /* ---------- i tuoi numeri: card "scoreboard" ----------
     Il blocco che Roberto vuole in evidenza: fondo scuro, numeri grandi che salgono
     all'apertura, pallino "live" che pulsa. A righe e non a colonne: in 344px tre
     colonne andavano a capo male. */
  .rl-card-num{
    background:radial-gradient(130% 130% at 15% 0%, var(--dark-3) 0%, var(--dark) 70%);
    border-color:var(--dark-2); box-shadow:0 10px 30px rgba(4,36,42,.22);
  }
  .rl-card-num h4{ color:var(--mint); }
  .rl-card-num .rl-ic{ background:rgba(143,211,203,.16); color:var(--mint); }
  .rl-live{
    margin-left:auto; display:flex; align-items:center; gap:5px;
    font-size:9.5px; font-weight:700; letter-spacing:.1em; color:var(--on-dark-3);
  }
  .rl-live i{
    width:6px; height:6px; border-radius:50%; background:var(--teal-2);
    box-shadow:0 0 0 0 rgba(18,160,138,.6); animation:rlPulse 2s infinite;
  }
  @keyframes rlPulse{
    0%  { box-shadow:0 0 0 0 rgba(18,160,138,.55); }
    70% { box-shadow:0 0 0 7px rgba(18,160,138,0); }
    100%{ box-shadow:0 0 0 0 rgba(18,160,138,0); }
  }
  @media (prefers-reduced-motion: reduce){ .rl-live i{ animation:none; } }

  .rl-num{ display:block !important; }
  .rl-nrow{
    display:flex; align-items:baseline; justify-content:space-between; gap:12px;
    padding:11px 0; border-bottom:1px solid rgba(143,211,203,.14);
  }
  .rl-nrow:first-child{ padding-top:2px; }
  .rl-nrow:last-of-type{ border-bottom:none; padding-bottom:2px; }
  .rl-nk{ font-size:13px; color:var(--on-dark-2); min-width:0; }
  .rl-nk em{ display:block; font-style:normal; font-size:11px; color:var(--on-dark-3); margin-top:3px; }
  .rl-nrow b{ font-family:var(--f-display); font-weight:700; font-size:27px; line-height:1;
              color:#fff; white-space:nowrap; flex:none; font-variant-numeric:tabular-nums; }
  .rl-nrow b small{ font-size:11.5px; color:var(--mint); font-family:var(--f-body); font-weight:600; }
  .rl-card-num .rl-link{ margin-top:15px; color:var(--mint); }
  .rl-card-num .rl-num:hover .rl-link{ text-decoration:underline; }

  /* consigliato / sblocca il piano — unico blocco commerciale della colonna */
  .rl-card-reco{ border-color:#F5D9CF; box-shadow:0 6px 20px rgba(196,80,47,.10); }
  .rl-cta{ display:inline-block; margin-top:13px; background:var(--coral); color:#2A0E08;
           font-size:13px; font-weight:700; padding:9px 17px; border-radius:999px; transition:filter .15s; }
  .rl-reco:hover .rl-cta{ filter:brightness(1.07); }
}

/* schermi molto larghi: più respiro verticale, la colonna di testo resta uguale */
@media (min-width:1600px){
  .phone > .body,
  .phone > .stage,
  .phone > .wrap{ padding-top:16px; }
}
