/* ══════════════════════════════════════════════════════════════════════
   LA PELLE SQUADRA — fascia ragazzi (10-13)
   ══════════════════════════════════════════════════════════════════════

   Non e' un tema di colori: e' un'altra forma. Fondo crema, la GEOMETRIA
   che entra tagliata dai bordi a opacita' piena, una card missione con
   l'illustrazione grande, quattro tile 2x2, barra scura, gettone della
   serie. Un ragazzo che apre l'app deve vedere un'altra app, non quella
   degli adulti con altri colori.

   Tutto sotto html[data-age="junior"]: nessuna di queste regole tocca le
   altre due fasce. Riferimento: docs/tre-pelli-design.md §2 e
   docs/ragazzi-plan.md §4-§5.

   TRE COSE CHE VALGONO PER TUTTO IL FILE.

   (1) LA GEOMETRIA STA DIETRO, E NELLE FASCE ESTERNE. E' satura e a
       opacita' piena — l'opacita' in questo progetto non si usa per
       spegnere niente — quindi una riga di testo che le finisse sopra
       misurerebbe 2:1. Il fondo e' a z-index 0 e il contenuto a 1 (come le
       pennellate dei bambini in comic.css, dove la lezione e' gia' stata
       pagata con dieci difetti di contrasto), e le forme sono ancorate agli
       ANGOLI, dove stanno l'intestazione e la barra in basso, che hanno un
       fondo proprio.

   (2) OGNI TOKEN `--sq-*` HA LA SUA VARIANTE NOTTURNA. E' un difetto di
       SPECIFICITA' gia' pagato due volte: `html[data-age="junior"]` (0,1,1)
       batte `[data-theme="dark"]` (0,1,0), quindi un token dichiarato solo
       di giorno vince anche di notte. Il blocco notturno sta in fondo al
       file e ridichiara TUTTO.

   (3) SI NASCONDE, NON SI CANCELLA. La fascia si cambia dalle impostazioni
       e la home adulta deve tornare intera: qui dentro non c'e' nessuna
       regola che tolga un nodo dal DOM, solo `display: none` sotto
       `html[data-age="junior"]`. */

html[data-age="junior"] {
  /* Le due tinte del mondo. Le scrive `applySquadraBackdrop()` sul <html>
     come `--sq-a1-base` / `--sq-a2-base` leggendole da `MONDI`; qui si
     derivano i colori che si usano davvero, cosi' il tema scuro puo'
     ridefinirli senza che il JS ne sappia niente (un colore scritto inline
     dal JS batterebbe qualunque foglio, tema compreso — regola della casa).
     I ripieghi servono al primo istante, prima che il JS giri. */
  --sq-a1: var(--sq-a1-base, #1f6f5c);
  --sq-a2: var(--sq-a2-base, #ffc72c);
  --sq-ink: #0f1b33;              /* l'inchiostro della pelle: il navy della fascia */
  --sq-su-oro: #14213d;           /* testo SOPRA l'oro: bianco su oro fa 1,6:1 */
  /* L'OCCHIELLO DELLA CARD MISSIONE NON E' UNA TINTA DEL MONDO, ed e' una
     correzione fatta guardando. La prima stesura lo scriveva in `--sq-a2`,
     cioe' nella seconda tinta del mondo: sul mondo di default (oro) si
     leggeva benissimo, ma le tinte sono undici e due di loro sono SCURE —
     il navy di «Castello di Hollybeck» e il verde bosco. Navy su una
     velatura navy e' invisibile, e non l'avrebbe detto nessun audit: la
     card mostra UN mondo alla volta, e l'audit naviga col mondo di default.
     La velatura e' scura in tutti e tre i temi (e' un gradiente sopra
     un'illustrazione, e un'illustrazione non ha una versione notturna),
     quindi il testo che ci sta sopra e' FISSO: stessa regola di
     `--cm-ink-carta` nella pelle fumetto, al contrario. */
  --sq-occhiello: #ffc72c;
  /* LE TINTE DELLA GEOMETRIA NON SONO LE TINTE DEL MONDO, e la differenza e'
     stata MISURATA, non temuta. `#sq-geo` e' `position: fixed`: le sue forme
     stanno negli angoli della FINESTRA, e scorrendo la pagina ogni riga di
     testo ci passa sopra prima o poi — «le forme stanno nelle fasce esterne»
     protegge il primo schermo, non il quinto. Con le tinte piene bastava un
     mondo scuro perche' una riga navy finisse su una forma navy: «Cosa vuoi
     fare», 1:1, misurato sulla home di Castello di Hollybeck, il cui secondo
     accento E' l'inchiostro della pelle. Non era un difetto del castello: era
     un difetto che il castello rendeva visibile, e con undici mondi ce ne
     sono sei che potevano farlo.
     Si mescolano quindi al 40% col FONDO PAGINA (`--bh-cream`, che vale crema
     di giorno e notte scura di notte: la stessa espressione segue il tema da
     sola). Il caso peggiore — inchiostro puro sotto testo d'inchiostro —
     passa da 1:1 a 5,9:1. Il testo NON si tocca: si schiarisce il fondo, che
     e' decorazione, non si spegne una riga con l'opacita'. */
  --sq-geo-1:   color-mix(in srgb, var(--sq-a1) 40%, var(--bh-cream));
  --sq-geo-2:   color-mix(in srgb, var(--sq-a2) 40%, var(--bh-cream));
  --sq-geo-ink: color-mix(in srgb, var(--sq-ink) 40%, var(--bh-cream));
  --sq-ombra: 0 10px 26px rgba(15, 27, 51, .13);
  --sq-ombra-s: 0 4px 12px rgba(15, 27, 51, .10);
  --sq-radius: 16px;
  --sq-radius-lg: 22px;
}

/* ─── 1. La geometria di bordo ─────────────────────────────────────────
   Un SVG a piena schermata DIETRO il contenuto: archi spessi, triangoli
   pieni, uno spicchio; ancorati agli angoli e tagliati dal bordo. Quattro
   composizioni, scelte dall'INDICE della sezione e mai a caso, cosi'
   l'occhio impara la forma come impara il colore (e' la stessa regola della
   geometria degli hub). Il disegno lo fa `applySquadraBackdrop()`. */
html[data-age="junior"] .sq-geo {
  position: fixed; inset: 0; z-index: 0; overflow: hidden;
  pointer-events: none;
}
html[data-age="junior"] .sq-geo svg { width: 100%; height: 100%; display: block; }

/* Il contenuto sta SOPRA — MA SOLO DOVE LA GEOMETRIA C'E' DAVVERO.
   `data-sq-geo` lo mette `applySquadraBackdrop()` insieme a `#sq-geo`, dalla
   stessa lista di sezioni: cosi' queste regole vivono esattamente dove
   servono e non c'e' nessun id di schermata ricopiato in un foglio di stile
   (un id ricopiato invecchia in silenzio — e' il motivo per cui
   `age-bands.css` non ne contiene nessuno).

   PERCHE' NON SEMPRE. Senza il sollevamento la geometria dipinge sopra il
   testo di ogni elemento non posizionato: e' il difetto che comic.css ha
   gia' pagato con le pennellate, e va curato. Ma `position: relative` su
   OGNI figlio di `.content` cambia l'ordine di disegno anche su settanta
   schermate dove non c'e' nessuna geometria da scavalcare, e cambiare
   l'ordine di disegno di un'app intera per niente e' il genere di regola
   larga che poi si paga da un'altra parte. La cura si applica dove il male
   c'e'. */
html[data-age="junior"][data-sq-geo] .screen.active > .content { position: relative; }
html[data-age="junior"][data-sq-geo] .content > * { position: relative; z-index: 1; }
html[data-age="junior"][data-sq-geo] .bh-header,
html[data-age="junior"][data-sq-geo] .bh-ribbon,
html[data-age="junior"][data-sq-geo] .bh-body > * { position: relative; z-index: 1; }
html[data-age="junior"][data-sq-geo] .page-header { position: relative; z-index: 2; }

/* ─── 2. La testata: nastro grande, gettone della serie ────────────────
   Una barra alta va bene SE contiene il marchio — era il vuoto il problema,
   non l'altezza (lezione (a-ter) della pelle fumetto, pagata con tre
   tentativi).

   IL NASTRO STA IN MEZZO, IL GETTONE SOTTO — e non accanto.
   Primo tentativo, guardato e scartato: il gettone nel flusso con
   `margin-left:auto`. Il nastro e' `position:absolute` e centrato, quindi non
   occupa spazio nel flusso, e il gettone gli finiva SOPRA — «SERIE 12»
   stampato in mezzo alla parola BRITMASTER. E' esattamente la trappola che la
   pelle fumetto aveva gia' risolto mettendo nastro e gettone dentro UN
   contenitore: due fratelli sciolti, di cui uno assoluto, non si evitano.
   Qui il contenitore non serve, perche' il gettone puo' stare su una riga
   sua: la barra e' alta abbastanza, e una barra alta va bene SE contiene il
   marchio. */
html[data-age="junior"] .home-header {
  display: block;
  text-align: center;
  position: relative;
  min-height: 132px;
  padding: 10px 16px 12px;
}
html[data-age="junior"] .header-ribbon-img {
  top: 10px;
  height: 62px; max-width: 340px;
}
/* I due bottoni tondi escono dal flusso e vanno in alto a destra: in fila
   obbligherebbero il nastro a stare nello spazio avanzato, cioe' a
   rimpicciolirsi — ed e' il rimpicciolimento che Ciro ha ripreso due volte
   sulla pelle dei bambini. */
html[data-age="junior"] .home-header > div {
  position: absolute; right: 12px; top: 12px; margin-left: 0 !important;
}
/* «SERIE 12». Lo monta `applySquadraHeader()` — nome NUOVO, perche'
   `applyJuniorBadge()` si chiama «junior» ma lavora per i BAMBINI: e' il
   gettone della pelle fumetto, e chi legge il nome e ci mette il gettone
   della serie dei ragazzi lo mette nella pelle sbagliata. */
html[data-age="junior"] .sq-serie {
  position: absolute; left: 50%; bottom: 10px;
  transform: translateX(-50%);
  display: inline-flex; align-items: center; gap: 6px;
  padding: 5px 12px; border-radius: 999px;
  /* ORO FISSO, non la seconda tinta del mondo — stessa correzione
     dell'occhiello e per la stessa ragione: undici mondi, e due di loro
     hanno una tinta scura. Un gettone navy con la scritta navy su una barra
     navy non si vede, e la barra mostra UN mondo alla volta, quindi nessun
     audit che navighi col mondo di default lo troverebbe mai. */
  background: var(--sq-occhiello); color: var(--sq-su-oro);
  font-family: "Manrope", system-ui, sans-serif;
  font-weight: 800; font-size: .72rem; letter-spacing: .09em;
  text-transform: uppercase; white-space: nowrap;
  z-index: 2;
}

/* ─── 3. La card missione ──────────────────────────────────────────────
   L'illustrazione del MONDO, non una fotografia britannica: `tre-pelli` §2
   diceva «usa le foto gia' sul disco», ma sul disco ci sono i 23 luoghi e le
   feste della Gran Bretagna, e una card missione di Isola Fossile con
   Stonehenge sotto e' un'incongruenza che un dodicenne nota prima di noi.
   Le 23 fotografie vere restano dove hanno senso: la striscia di Londra e il
   gruppo «Scoprire la Gran Bretagna». */
html[data-age="junior"] .sq-hero {
  position: relative; display: block; width: 100%;
  border: 0; padding: 0; margin: 0 0 16px;
  border-radius: var(--sq-radius-lg); overflow: hidden;
  background: var(--sq-ink);
  box-shadow: var(--sq-ombra);
  text-align: left; cursor: pointer;
  aspect-ratio: 16 / 10;
}
@media (min-width: 700px) { html[data-age="junior"] .sq-hero { aspect-ratio: 21 / 9; } }

html[data-age="junior"] .sq-hero-img {
  position: absolute; inset: 0;
  width: 100%; height: 100%; object-fit: cover; display: block;
}
/* IL RIPIEGO DICHIARATO. Finche' l'illustrazione di un mondo non esiste su
   disco, la card mostra un campo nelle due tinte del mondo con il suo nome:
   e' un segnaposto SCELTO, non un'immagine mancante — un riquadro vuoto o
   un'icona rotta si legge come un guasto, e un guasto in home e' peggio di
   una card semplice. */
html[data-age="junior"] .sq-hero-tinta {
  position: absolute; inset: 0;
  background:
    radial-gradient(120% 90% at 82% 12%, var(--sq-a2) 0%, transparent 58%),
    linear-gradient(150deg, var(--sq-a1) 0%, var(--sq-ink) 88%);
}
/* La velatura che regge il testo. E' un GRADIENTE pieno e non una
   trasparenza sul testo: una riga spenta con l'opacita' prende il contrasto
   da cio' che le sta sotto, e sotto c'e' un'illustrazione diversa per ogni
   mondo. Il testo e' bianco pieno, sempre. */
html[data-age="junior"] .sq-hero-velo {
  position: absolute; inset: 0;
  /* Le tappe sono state alzate dopo aver MISURATO: l'occhiello in oro
     #ffc72c sull'illustrazione faceva 4,07:1 contro i 4,5 richiesti, perche'
     a quell'altezza la velatura valeva .42 e sotto passava il sottobosco
     chiaro. Si scurisce la FOTO, non si schiarisce il testo — e' la stessa
     decisione presa da Ciro per il banner della home il 2026-08-29: li' la
     foto e' il contenuto, e un pannello dietro le righe la coprirebbe
     peggio. */
  background: linear-gradient(to top,
    rgba(8, 14, 28, .95) 0%, rgba(8, 14, 28, .88) 40%,
    rgba(8, 14, 28, .66) 70%, rgba(8, 14, 28, .22) 100%);
}
html[data-age="junior"] .sq-hero-testo {
  position: absolute; left: 0; right: 0; bottom: 0;
  padding: 16px 18px 18px;
}
html[data-age="junior"] .sq-occhiello {
  display: block;
  font-family: "Manrope", system-ui, sans-serif;
  font-weight: 800; font-size: .7rem; letter-spacing: .13em;
  text-transform: uppercase; color: var(--sq-occhiello);
  margin-bottom: 7px;
}
html[data-age="junior"] .sq-hero-titolo {
  display: block; color: #ffffff;
  font-family: "Manrope", system-ui, sans-serif;
  font-weight: 800; font-size: 1.42rem; line-height: 1.16;
  margin-bottom: 5px; text-wrap: balance;
}
html[data-age="junior"] .sq-hero-mondo {
  display: block; color: #e7ecf5;
  font-size: .86rem; font-weight: 600; letter-spacing: .01em;
  margin-bottom: 13px;
}
html[data-age="junior"] .sq-hero-cta {
  display: inline-flex; align-items: center; gap: 8px;
  padding: 11px 18px; border-radius: 999px;
  background: var(--bh-red); color: #ffffff;
  font-family: "Manrope", system-ui, sans-serif;
  font-weight: 800; font-size: .92rem;
}

/* Il bottone della MISSIONE copre tutta la card: la card non e' piu' un
   `<button>` perche' dal passo 2 ospita anche il gettone «Cambia mondo», e un
   bottone dentro un bottone non e' markup valido (su iOS il tocco arriva a uno
   solo dei due). Il testo resta fuori dal bottone e l'etichetta la porta
   `aria-label`. */
html[data-age="junior"] .sq-hero-vai {
  position: absolute; inset: 0;
  border: 0; padding: 0; margin: 0;
  background: transparent; cursor: pointer;
  border-radius: var(--sq-radius-lg);
}
/* IL GETTONE «CAMBIA MONDO» — l'unica porta al selettore che si vede in home
   quando un mondo e' gia' scelto. Fondo PIENO e non una velatura: sotto c'e'
   un'illustrazione diversa per ogni mondo, e una riga che prende il contrasto
   da cio' che le sta sotto e' il difetto gia' pagato tre volte in questo
   progetto. Bianco su #0f1b33 fa 16:1 in tutti e tre i temi. */
html[data-age="junior"] .sq-cambia {
  position: absolute; top: 12px; right: 12px; z-index: 2;
  border: 1px solid rgba(255, 255, 255, .34); cursor: pointer;
  background: #0f1b33; color: #ffffff;
  padding: 7px 13px; border-radius: 999px;
  font-family: "Manrope", system-ui, sans-serif;
  font-weight: 700; font-size: .76rem; letter-spacing: .01em;
}

/* ─── 3-bis. IL SELETTORE DEGLI UNDICI MONDI ───────────────────────────
   Tre posti, un componente (`junior-world-picker.js`): l'onboarding, la home
   di chi non ha ancora scelto, il modale delle Impostazioni. Il foglio e' uno
   solo per la stessa ragione per cui lo e' il JS.

   DUE COLONNE SUL TELEFONO, TRE DA TABLET. Undici tessere in due colonne
   fanno sei righe, e la sesta resta tagliata a meta' dal bordo dello schermo:
   IL TAGLIO E' IL SEGNALE che sotto c'e' dell'altro. Una griglia che finisse
   esatta al bordo direbbe «e' tutto qui» proprio ai tre mondi aggiunti per
   ultimi. Nessun raggruppamento e nessuna intestazione: sono undici porte
   pari fra loro (§1.1 del piano). */
html[data-age="junior"] .sq-scelta { margin: 0 0 18px; }
html[data-age="junior"] .sq-scelta-occhiello { color: var(--bh-red-testo); }
html[data-age="junior"] .sq-scelta-titolo {
  font-family: "Manrope", system-ui, sans-serif;
  font-weight: 800; font-size: 1.34rem; line-height: 1.15;
  color: var(--bh-text); margin: 0 0 6px;
}
html[data-age="junior"] .sq-scelta-sub {
  color: var(--bh-text-muted); font-size: .86rem; line-height: 1.45;
  margin: 0 0 14px;
}
html[data-age="junior"] .sq-mondi {
  display: grid; grid-template-columns: repeat(2, 1fr); gap: 11px;
}
@media (min-width: 700px) {
  html[data-age="junior"] .sq-mondi { grid-template-columns: repeat(3, 1fr); }
}
html[data-age="junior"] .sq-mondo {
  display: flex; flex-direction: column; text-align: left; cursor: pointer;
  padding: 0 0 11px; border: 2px solid var(--bh-border);
  border-radius: var(--sq-radius); overflow: hidden;
  /* `--bh-paper` e NON `--bh-card`: il secondo NON ESISTE in questo progetto
     (le superfici si chiamano `--bh-paper` e `--bh-paper-2`), e una custom
     property che non esiste rende la dichiarazione invalida — cioe' tessera
     TRASPARENTE, senza nessun errore. Di giorno non si vedeva, perche' sotto
     c'e' la crema; di notte la tessera spariva e restava il testo a mezz'aria.
     Trovato leggendo il valore calcolato, non guardando. */
  background: var(--bh-paper); box-shadow: var(--sq-ombra-s);
}
html[data-age="junior"] .sq-mondo.is-scelto {
  border-color: var(--bh-red); box-shadow: 0 0 0 2px var(--bh-red) inset;
}
html[data-age="junior"] .sq-mondo[disabled] { cursor: default; }
/* La figura e' 4:3 e porta il SEGNAPOSTO sotto l'immagine: l'illustrazione
   dell'Accademia non e' su disco (scartata guardandola — vedi
   `junior-worlds.js`), e un riquadro vuoto si legge come un guasto mentre un
   campo nelle tinte del mondo si legge come una scelta. Le due tinte arrivano
   come proprieta' custom scritte dal JS (`--m-a1` / `--m-a2`): un `color`
   inline batterebbe qualunque foglio, tema scuro compreso. */
html[data-age="junior"] .sq-mondo-figura {
  position: relative; display: block; width: 100%; aspect-ratio: 4 / 3;
  background:
    radial-gradient(120% 90% at 80% 14%, var(--m-a2, #ffc72c) 0%, transparent 60%),
    linear-gradient(150deg, var(--m-a1, #1f6f5c) 0%, var(--sq-ink) 92%);
}
html[data-age="junior"] .sq-mondo-img {
  position: absolute; inset: 0;
  width: 100%; height: 100%; object-fit: cover; display: block;
}
/* Un'immagine che non carica lascia vedere il campo di tinte che ha dietro:
   nessun `onerror` da scrivere, e quindi nessun modo di dimenticarselo. */
html[data-age="junior"] .sq-mondo-velo {
  position: absolute; inset: 0;
  background: linear-gradient(to top, rgba(8, 14, 28, .34) 0%, transparent 46%);
}
html[data-age="junior"] .sq-mondo-nome {
  display: block; margin: 10px 11px 3px;
  font-family: "Manrope", system-ui, sans-serif;
  font-weight: 800; font-size: .94rem; line-height: 1.2;
  color: var(--bh-text);
}
/* La riga secondaria si spegne col COLORE, mai con l'opacita': l'opacita' fa
   dipendere il contrasto da cio' che c'e' sotto. */
html[data-age="junior"] .sq-mondo-tag {
  display: block; margin: 0 11px;
  font-size: .76rem; line-height: 1.35; color: var(--bh-text-muted);
}

/* ─── 4. Le quattro tile 2x2 ───────────────────────────────────────────
   Oro, teal, rosso, navy. Ognuna porta una forma geometrica che sborda dal
   bordo della tile — il clip e' sulla TILE, non sulla pagina: e' la stessa
   grammatica della geometria di fondo, portata a scala di tessera.
   Il colore del testo e' scelto per tile e MISURATO: l'oro #ffc72c con il
   bianco fa 1,6:1, ed e' un difetto gia' pagato con i cerchi dei bambini. */
html[data-age="junior"] .sq-quad {
  display: grid; grid-template-columns: 1fr 1fr; gap: 12px;
  margin-bottom: 18px;
}
html[data-age="junior"] .sq-tile {
  position: relative; overflow: hidden;
  border: 0; border-radius: var(--sq-radius);
  padding: 16px 14px 18px; min-height: 104px;
  display: flex; flex-direction: column; justify-content: flex-end;
  text-align: left; cursor: pointer;
  box-shadow: var(--sq-ombra-s);
  font-family: "Manrope", system-ui, sans-serif;
}
html[data-age="junior"] .sq-tile-forma {
  position: absolute; top: -26px; right: -26px;
  width: 92px; height: 92px; pointer-events: none;
}
html[data-age="junior"] .sq-tile-t {
  font-weight: 800; font-size: 1.06rem; line-height: 1.15;
  position: relative; z-index: 1;
}
html[data-age="junior"] .sq-tile-s {
  font-weight: 600; font-size: .76rem; line-height: 1.3;
  margin-top: 4px; position: relative; z-index: 1;
}
/* Le quattro tinte, con il loro testo. Nessuna opacita': le righe
   secondarie si spengono col COLORE. */
html[data-age="junior"] .sq-tile--oro   { background: #ffc72c; color: #14213d; }
html[data-age="junior"] .sq-tile--oro   .sq-tile-s { color: #3a4a63; }
html[data-age="junior"] .sq-tile--teal  { background: #14584a; color: #ffffff; }
html[data-age="junior"] .sq-tile--teal  .sq-tile-s { color: #d3e6e0; }
html[data-age="junior"] .sq-tile--rosso { background: #c8102e; color: #ffffff; }
html[data-age="junior"] .sq-tile--rosso .sq-tile-s { color: #ffdde2; }
html[data-age="junior"] .sq-tile--navy  { background: #14213d; color: #ffffff; }
html[data-age="junior"] .sq-tile--navy  .sq-tile-s { color: #c8d3e6; }

/* ─── 5. La barra di navigazione scura ─────────────────────────────────
   SOLO CSS: la barra la riscrive gia' `renderBottomNav()`, che si porta
   dietro il marchio ripescato da `_navOriginale`. Toccarla da qui con un
   `innerHTML` sarebbe la stessa lezione pagata due volte. */
html[data-age="junior"] #bottom-nav {
  background: var(--sq-ink);
  border-top: 0;
  /* NESSUNA OMBRA SOTTO LA BARRA, e non e' un gusto: e' misurato. La prima
     stesura aveva `box-shadow: 0 -6px 20px rgba(15,27,51,.18)`, che e'
     un'ombra rivolta in ALTO — cioe' sopra il contenuto. La barra e' fissa,
     quindi quell'ombra cade sulle ultime righe di ogni schermata, e li' il
     testo secondario dell'app (che su carta crema fa 4,7:1) scendeva a
     4,29-4,48:1. Otto difetti in sette schermate che questo passo non tocca,
     trovati da `audit-contrast.mjs` e non a occhio: un'ombra da 20px di
     sfocatura e' invisibile a guardarla e misurabile eccome.
     La barra e' navy scuro su fondo crema: si stacca da sola, l'ombra non
     serviva a niente. */
}
html[data-age="junior"] #bottom-nav .nav-item {
  color: #c3cddf;
}
html[data-age="junior"] #bottom-nav .nav-item.active {
  color: #ffffff;
}
html[data-age="junior"] #bottom-nav .nav-item.active::after {
  content: ""; position: absolute; left: 50%; bottom: 5px;
  width: 18px; height: 3px; border-radius: 2px;
  transform: translateX(-50%);
  background: var(--bh-red);
}
html[data-age="junior"] #bottom-nav .nav-item { position: relative; }

/* Da 1024px la barra diventa una COLONNA a sinistra e il suo primo elemento e'
   il marchio, dentro una targa bianca (`html body #bottom-nav.visible
   .nav-logo`, style.css). Sulla colonna scura di questa pelle la targa bianca
   RESTA, e non e' una svista: guardata a 1024px legge come un'insegna
   appoggiata sul navy, che e' esattamente cio' che e'.
   Qui non c'e' nessuna regola perche' non serve. La prima stesura ne aveva
   una che schiariva la targa, e non faceva niente: quel selettore di
   `style.css` ha un elemento in piu' e vince comunque. Un cambio invisibile
   e' peggio di nessun cambio — somiglia a un lavoro fatto. */

/* ─── 6. La home dei ragazzi ───────────────────────────────────────────

   LA HOME E' UN CONTENITORE, NON UN GIOCO — la lezione della home dei
   bambini vale identica: la prima versione di quella nascondeva tutto
   tranne la scenetta e lasciava UNA porta in pagina, con 37 voci di menu
   irraggiungibili. Qui sparisce solo cio' che e' scritto per un adulto o
   che annuncia una GIORNATA CONCORRENTE, elencato una voce alla volta, e il
   menu resta. */
#junior-home { display: none; }
html[data-age="junior"] #junior-home { display: block; }

html[data-age="junior"] #home-hero,            /* il banner dei monumenti: lo sostituisce la card missione */
html[data-age="junior"] #exam-plan-promo,      /* invito a un piano AI a pagamento: il paywall lo vede il genitore */
html[data-age="junior"] #daily-card-home,      /* «Today's Adventure»: la giornata degli adulti */
html[data-age="junior"] #weekly-plan-home-card,
html[data-age="junior"] #daily-review-home-card,
html[data-age="junior"] #dc-home-card,
html[data-age="junior"] #recipe-home-card,     /* cucina britannica scritta per adulti */
/* La riga di pillole resta via: sei bottoni CEFR in mezzo alla home sono
   un'interfaccia da adulti. Il livello pero' si cambia — dalla tessera
   «Level» in cima, che apre il selettore. E' la stessa scelta della fascia
   bambini, e vale per la stessa ragione. */
html[data-age="junior"] #sec-level,
html[data-age="junior"] #level-pills,
html[data-age="junior"] #pro-banner-home {     /* gia' nascosto dalla regola :has() generata: qui per il caso senza :has() */
  display: none !important;
}

/* ─── 7. Il resto della home ───────────────────────────────────────────

   QUI NON SI RISTILANO LE CARD DELL'APP. La prima stesura lo faceva — una
   riga sola che dava a `.bh-card`, `.module-card`, `.hub`, `.exam-hero-card`
   e `.stat-card` il raggio e l'ombra della pelle — ed e' stata tolta: sono
   cinque selettori che toccano ottanta schermate per un guadagno che in home
   non si vede (le card della home dei ragazzi sono `.sq-*`, e hanno gia' la
   loro forma). La pelle mette le sue ombre sui SUOI componenti e lascia
   stare le card degli altri; il giorno in cui servira' davvero, si aggiunge
   una superficie alla volta e si misura.

   IL DIFETTO VERO DI QUESTO PASSO ERA UN'ALTRA OMBRA, e sta scritto dove
   viveva: `#bottom-nav` (sezione 5). Otto righe di testo secondario sotto
   soglia in sette schermate, per un'ombra rivolta in alto che nessuno
   avrebbe visto a occhio.

   Resta la tipografia dei titoli di sezione, che non tocca nessun pixel di
   fondo. */
html[data-age="junior"] .section-title {
  font-family: "Manrope", system-ui, sans-serif;
  font-weight: 800; letter-spacing: .1em; text-transform: uppercase;
  font-size: .78rem; color: var(--bh-text-muted);
}
/* `#exam-hero-card` RESTA cosi' com'e', perche' per un ragazzo che prepara
   Flyers, A2 Key o B1 Preliminary for Schools la prova d'esame e' la ragione
   dell'app. Il piano (§5.1, voce 9) la vorrebbe ristilata «come riga con
   barra a sinistra, sotto le tile»: non e' fatto in questo passo, e lo dico
   invece di lasciarlo credere fatto. Il primo tentativo era una riga di CSS
   (un bordo rosso a sinistra) che sulla card, gia' rosso scuro, non si
   vedeva affatto — un cambio invisibile e' peggio di nessun cambio, perche'
   somiglia a un lavoro finito.
*/

/* ─── 8. LA NOTTE ──────────────────────────────────────────────────────
   Ogni `--sq-*` dichiarato sopra e' ridichiarato qui. Non e' una
   ripetizione inutile: `html[data-age="junior"]` (0,1,1) batte
   `[data-theme="dark"]` (0,1,0), quindi un token dichiarato solo di giorno
   vincerebbe anche di notte — e' la trappola di specificita' che questa
   pelle ha gia' pagato due volte con `--bh-red-testo`. Qui siamo a (0,2,1)
   e vince la notte.

   Le tinte del mondo si SCHIARISCONO con `color-mix`: un teal saturo su un
   fondo notturno resta una macchia scura su scuro, cioe' non si vede.
   Farlo qui e non nei dati significa non avere una seconda tavolozza da
   tenere allineata. */
html[data-age="junior"][data-theme="dark"] {
  --sq-a1: color-mix(in srgb, var(--sq-a1-base, #1f6f5c) 62%, #eaf2ff);
  --sq-a2: color-mix(in srgb, var(--sq-a2-base, #ffc72c) 82%, #fff6da);
  --sq-ink: #0b1426;
  --sq-su-oro: #14213d;
  /* Uguale al giorno, e non per distrazione: la superficie sotto e' la
     velatura scura sull'illustrazione, che di notte non cambia. */
  --sq-occhiello: #ffc72c;
  /* Stessa espressione del giorno, e non e' una ripetizione inutile: i token
     vanno RIDICHIARATI qui o `html[data-age="junior"]` (0,1,1) vince anche di
     notte. Il bersaglio della mescola, `--bh-cream`, qui vale gia' il fondo
     notturno, quindi la formula segue il tema senza una seconda tavolozza. */
  --sq-geo-1:   color-mix(in srgb, var(--sq-a1) 40%, var(--bh-cream));
  --sq-geo-2:   color-mix(in srgb, var(--sq-a2) 40%, var(--bh-cream));
  --sq-geo-ink: color-mix(in srgb, var(--sq-ink) 40%, var(--bh-cream));
  --sq-ombra: 0 10px 26px rgba(0, 0, 0, .45);
  --sq-ombra-s: 0 4px 12px rgba(0, 0, 0, .38);
  --sq-radius: 16px;
  --sq-radius-lg: 22px;
}
/* Le quattro tile di notte: le tinte piene restano (sono l'identita'), ma
   l'oro con l'inchiostro navy sopra regge benissimo anche al buio e il navy
   scurisce di un gradino per staccarsi dal fondo notturno. */
/* Le tessere del selettore di notte NON hanno una regola propria: fondo,
   bordo e testi vengono da `--bh-paper` / `--bh-border` / `--bh-text`, che
   `age-bands.css` ridefinisce gia' per la notte della fascia. Una seconda
   tavolozza qui sarebbe una cosa in piu' da tenere allineata. Il gettone
   «Cambia mondo» invece si', perche' il suo fondo e' fisso: sta sopra
   un'illustrazione, e un'illustrazione non ha una versione notturna. */
html[data-age="junior"][data-theme="dark"] .sq-cambia {
  background: #1a2744; border-color: rgba(255, 255, 255, .30);
}
html[data-age="junior"][data-theme="dark"] .sq-tile--navy { background: #22304d; }
html[data-age="junior"][data-theme="dark"] .sq-tile--teal { background: #17635230; background: #176352; }
html[data-age="junior"][data-theme="dark"] #bottom-nav { background: #0b1426; }
html[data-age="junior"][data-theme="dark"] .sq-hero-velo {
  background: linear-gradient(to top,
    rgba(4, 8, 18, .96) 0%, rgba(4, 8, 18, .90) 40%,
    rgba(4, 8, 18, .70) 70%, rgba(4, 8, 18, .24) 100%);
}

/* ─── 9. Il movimento ──────────────────────────────────────────────────
   MAI una `transform` su `.screen`: un elemento con una transform diventa il
   contenitore di riferimento dei suoi discendenti `position: fixed`, e barra,
   modali e toast si staccherebbero dalla finestra per tutta la durata
   dell'animazione. Qui si anima solo l'opacita' della geometria, che e' un
   elemento fisso suo e non contiene niente. */
@media (prefers-reduced-motion: no-preference) {
  html[data-age="junior"] .sq-geo { animation: sq-entra .45s ease-out both; }
  @keyframes sq-entra { from { opacity: 0; } to { opacity: 1; } }
}
