/* =====================================================================
   L'ALBERO DEI RICORDI — foglio della pagina speciale
   Va in coda a /dist/css/custom.css alla conversione MODX.

   Tutto è circoscritto a .albero-ricordi-page, che sul <body> si AGGIUNGE
   a .news-content-page: quest'ultima non va rimossa, porta due regole sue
   (app.css:16724 e :16727) da cui dipendono le icone di condivisione.

   Si sostituisce solo il colore. Famiglie, pesi, dimensioni, interlinee,
   margini, contenitori, forma dei pulsanti: tutto ereditato dal sito.
   Nessun font nuovo, nessuna libreria, nessuna misura fuori scala.
   Base rem del sito: 18px (app.css:16733).
   ===================================================================== */

/* ---------------------------------------------------------------------
   1) PALETTE
   Contrasti su bianco: 14,31 / 9,50 / 8,78 / 6,86 / 5,24. Tutti ≥ 4,5:1.
   L'hover dei link usa --ricordi-testo: il sito scurisce l'hover
   (#003b77 → #002f5f), qui #5B2D8E → #3D1A52. Nessun valore inventato.
   --------------------------------------------------------------------- */
.albero-ricordi-page {
  --ricordi-testo:      #3D1A52;  /* corpo, tronco, outline di focus   14,31:1 */
  --ricordi-titolo:     #5B2D8E;  /* titoli, link                       9,50:1 */
  --ricordi-pieno:      #6B2D8E;  /* fondi pieni, pulsanti              8,78:1 */
  --ricordi-foglia-0:   #6B2D8E;
  --ricordi-foglia-1:   #7B3FA0;  /*                                    6,86:1 */
  --ricordi-foglia-2:   #8E52B3;  /*                                    5,24:1 */
  --ricordi-tenue:      #EDE4F3;  /* fondo tenue delle sezioni                 */

  /* Rimappatura delle variabili di tema.
     Copre in un colpo solo .text-primary, .bg-primary, .text-brown,
     .bg-brown e ogni altra utility var-driven (app.css:9522 e seguenti).
     --bs-primary porta i TITOLI; il fondo del footer, che usa .bg-primary,
     viene ridichiarato a parte al §6 perché lì serve il viola scuro. */
  --bs-primary:      #5B2D8E;
  --bs-primary-rgb:  91, 45, 142;
  --bs-brown:        #3D1A52;
  --bs-brown-rgb:    61, 26, 82;
}

/* ---------------------------------------------------------------------
   2) UTILITY CON L'ESADECIMALE SCRITTO A MANO
   Queste cinque non passano dalle variabili: in app.css la riga con la
   var è commentata e sotto c'è un colore fisso, messo lì come correzione
   di contrasto. Vanno quindi inseguite una per una.
   --------------------------------------------------------------------- */
.albero-ricordi-page .text-azure   { color: var(--ricordi-pieno) !important; }      /* era #0E5A91 */
.albero-ricordi-page .bg-azure     { background-color: var(--ricordi-pieno) !important; }
.albero-ricordi-page .text-peacock { color: var(--ricordi-titolo) !important; }     /* era #005C85 */
.albero-ricordi-page .bg-peacock   { background-color: var(--ricordi-pieno) !important; }
.albero-ricordi-page .bg-ice       { background-color: var(--ricordi-tenue) !important; } /* era #F6FCFE */

/* Voce corrente del breadcrumb: app.css:5847 la scrive a mano, #003b77.
   Il componente ha una sola variabile, --bs-breadcrumb-divider, che
   governa il separatore e non il colore: va quindi inseguita qui.
   È testo, non fondo, quindi segue la riga "titoli e link" della
   mappatura (STILE.md §404): #003b77 -> #5B2D8E, 9,50:1 su bianco.
   I due link restano .text-gray: neutri sul sito, neutri anche qui. */
.albero-ricordi-page .breadcrumb-item.active { color: var(--ricordi-titolo); }

/* .quote-content — app.css:15788-15804. Stessa forma delle cinque utility
   qui sopra: la riga con var(--bs-azure) è commentata e sotto c'è #0E5A91
   fisso. Sono il filetto verticale e la punta triangolare della citazione,
   che senza questa regola restano azzurri in mezzo al viola: si vedono nel
   blocco d'epoca e nella citazione di Bandettini. Segue .text-azure, già
   mappata su --ricordi-pieno. */
.albero-ricordi-page .quote-content         { border-left-color: var(--ricordi-pieno); }
.albero-ricordi-page .quote-content::before { border-left-color: var(--ricordi-pieno); }

/* .ki è il font di icone del tema: app.css:14676 lo fissa a #1d9bf0 */
.albero-ricordi-page .ki { color: var(--ricordi-titolo); }

/* ---------------------------------------------------------------------
   3) LINK
   Il sito sottolinea i link nel corpo (app.css:294-297): si mantiene.
   --------------------------------------------------------------------- */
.albero-ricordi-page a              { color: var(--ricordi-titolo); }
.albero-ricordi-page a:hover        { color: var(--ricordi-testo); }
.albero-ricordi-page .link-primary  { color: var(--ricordi-titolo); }
.albero-ricordi-page .link-primary:hover,
.albero-ricordi-page .link-primary:focus { color: var(--ricordi-testo); }
.albero-ricordi-page .border-primary { border-color: var(--ricordi-titolo) !important; }

/* ---------------------------------------------------------------------
   4) PULSANTI — i sei stati di app.css:3920-3943, uno per uno.
   Forma, padding, raggio 30px e maiuscolo restano quelli del sito.
   --------------------------------------------------------------------- */
.albero-ricordi-page .btn-outline-primary {
  color: var(--ricordi-pieno);
  border-color: var(--ricordi-pieno);
}
.albero-ricordi-page .btn-outline-primary:hover {
  color: #ffffff;
  background-color: var(--ricordi-pieno);
  border-color: var(--ricordi-pieno);
}
.albero-ricordi-page .btn-check:focus + .btn-outline-primary,
.albero-ricordi-page .btn-outline-primary:focus {
  box-shadow: 0 0 0 0.25rem rgba(107, 45, 142, 0.5);
}
.albero-ricordi-page .btn-check:checked + .btn-outline-primary,
.albero-ricordi-page .btn-check:active + .btn-outline-primary,
.albero-ricordi-page .btn-outline-primary:active,
.albero-ricordi-page .btn-outline-primary.active,
.albero-ricordi-page .btn-outline-primary.dropdown-toggle.show {
  color: #ffffff;
  background-color: var(--ricordi-pieno);
  border-color: var(--ricordi-pieno);
}
.albero-ricordi-page .btn-check:checked + .btn-outline-primary:focus,
.albero-ricordi-page .btn-check:active + .btn-outline-primary:focus,
.albero-ricordi-page .btn-outline-primary:active:focus,
.albero-ricordi-page .btn-outline-primary.active:focus,
.albero-ricordi-page .btn-outline-primary.dropdown-toggle.show:focus {
  box-shadow: 0 0 0 0.25rem rgba(107, 45, 142, 0.5);
}
.albero-ricordi-page .btn-outline-primary:disabled,
.albero-ricordi-page .btn-outline-primary.disabled {
  color: var(--ricordi-pieno);
  background-color: transparent;
}

.albero-ricordi-page .btn-primary {
  color: #ffffff;
  background-color: var(--ricordi-pieno);
  border-color: var(--ricordi-pieno);
}
.albero-ricordi-page .btn-primary:hover,
.albero-ricordi-page .btn-primary:active,
.albero-ricordi-page .btn-primary.active {
  color: #ffffff;
  background-color: var(--ricordi-testo);
  border-color: var(--ricordi-testo);
}
.albero-ricordi-page .btn-primary:focus {
  color: #ffffff;
  background-color: var(--ricordi-testo);
  box-shadow: 0 0 0 0.25rem rgba(107, 45, 142, 0.5);
}

/* app.css:3339 azzera l'outline e mette un alone blu su :focus */
.albero-ricordi-page .btn-check:focus + .btn,
.albero-ricordi-page .btn:focus {
  box-shadow: 0 0 0 0.25rem rgba(107, 45, 142, 0.25);
}

/* ---------------------------------------------------------------------
   5) HEADER — le tre fasce.
   Il sito NON passa dalle variabili qui: colori scritti a mano.
   --------------------------------------------------------------------- */
/* #top-navbar eredita bg-ice e text-peacock, già rimappati al §2 */

.albero-ricordi-page #main-navbar > nav .nav-item a,
.albero-ricordi-page #main-navbar > nav .dropdown-menu a {
  color: var(--ricordi-titolo);                       /* era #003b77 */
}
/* L'hover del sito va verso un tono PIÙ CHIARO (#003b77 → #0098d7):
   si mantiene la direzione, con il tono 2 delle foglie. 5,24:1 su bianco. */
.albero-ricordi-page #main-navbar > nav .nav-item:hover > a,
.albero-ricordi-page #main-navbar > nav .nav-item:active > a,
.albero-ricordi-page #main-navbar > nav .nav-item:focus > a,
.albero-ricordi-page #main-navbar > nav .nav-item.active > a,
.albero-ricordi-page #main-navbar > nav .dropdown-menu:hover > a,
.albero-ricordi-page #main-navbar > nav .dropdown-menu a:hover {
  color: var(--ricordi-foglia-2);                     /* era #0098d7 */
}

.albero-ricordi-page #side-navbar li      { border-top-color: var(--ricordi-titolo); }
.albero-ricordi-page #side-navbar li:last-child { border-bottom-color: var(--ricordi-titolo); }

.albero-ricordi-page .skip-link { background: var(--ricordi-testo); }  /* bianco 14,31:1 */

/* ---------------------------------------------------------------------
   6) FOOTER
   Il sito separa la fascia social dal fondo con un CAMBIO DI SUPERFICIE,
   senza bordo: [stripe-social] non ha nessuna regola di bordo, e la
   fascia è più CHIARA del fondo (#0E5A91 su #003b77 = 1,53:1).
   Qui si mantiene direzione e meccanismo: 1,63:1, leggermente più netto.
   Le cinque icone social sono PNG di bianco puro su trasparenza: il testo
   e le icone restano bianchi, quindi non serve rifare nessun asset.
   --------------------------------------------------------------------- */
.albero-ricordi-page footer[stripe-footer] {
  background-color: var(--ricordi-testo) !important;   /* #3D1A52 — bianco 14,31:1 */
}
.albero-ricordi-page footer[stripe-footer] [stripe-social] {
  background-color: var(--ricordi-pieno) !important;   /* #6B2D8E — bianco  8,78:1 */
}
/* Nel footer le icone del font restano bianche come il testo che accompagnano */
.albero-ricordi-page footer[stripe-footer] .ki { color: inherit; }

/* ---------------------------------------------------------------------
   7) FOCUS
   Il sito non definisce nessuno stile :focus-visible: l'unica occorrenza
   in app.css è dentro un blocco SCSS non compilato che il browser scarta
   (app.css:305-313). Va progettato, e qui vale per TUTTI gli interattivi.
   --------------------------------------------------------------------- */
.albero-ricordi-page a:focus-visible,
.albero-ricordi-page button:focus-visible,
.albero-ricordi-page [role="button"]:focus-visible,
.albero-ricordi-page summary:focus-visible,
.albero-ricordi-page audio:focus-visible,
.albero-ricordi-page .foglia:focus-visible {
  outline: 2px solid var(--ricordi-testo);
  outline-offset: 2px;
}
/* Su fondo scuro il viola non si vede: nel footer l'outline diventa bianco */
.albero-ricordi-page footer[stripe-footer] a:focus-visible,
.albero-ricordi-page footer[stripe-footer] button:focus-visible {
  outline-color: #ffffff;
}

/* ---------------------------------------------------------------------
   8) STRISCIA DI CONDIVISIONE
   Gli <img> del chunk non sono raggiungibili da tastiera: in pagina sono
   avvolti in <button>. Qui si toglie solo l'aspetto del pulsante, così la
   resa resta identica a quella delle news.
   Le icone sono PNG #494949 neutre (9,00:1): non vanno ricolorate.
   --------------------------------------------------------------------- */
.albero-ricordi-page [stripe-share] .share-btn {
  padding: 0;
  border: 0;
  background: none;
  line-height: 0;
}

/* ---------------------------------------------------------------------
   9) SEZIONI DELLA PAGINA
   Solo colore e ritmo: la spaziatura viene dalle utility py-* nel markup.
   --------------------------------------------------------------------- */
.albero-ricordi-page [stripe-albero],
.albero-ricordi-page [stripe-voci] {
  background-color: var(--ricordi-tenue);
}

/* Citazione — riusa .quote-box-large di custom.css:88-101, di cui il sito
   fissa le virgolette in un data-URI nero. Qui il data-URI è riscritto in
   viola: è l'unico modo, il colore non è pilotabile da CSS. */
.albero-ricordi-page .quote-box-large::before {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='%233D1A52'%3E%3Cpath d='M6.5 10c-.223 0-.437.034-.65.065.069-.232.14-.468.254-.68.114-.308.292-.575.469-.844.148-.291.409-.488.601-.737.201-.242.475-.403.692-.604.213-.21.492-.315.714-.463.232-.133.434-.28.65-.35l.539-.222.474-.197-.485-1.938-.597.144c-.191.048-.424.104-.689.171-.271.05-.56.187-.882.312-.318.142-.686.238-1.028.466-.344.218-.741.4-1.091.692-.339.301-.748.562-1.05.945-.33.358-.656.734-.909 1.162-.293.408-.492.856-.702 1.299-.19.443-.343.896-.468 1.336-.237.882-.343 1.72-.384 2.437-.034.718-.014 1.315.028 1.747.015.204.043.402.063.539l.025.168.026-.006A4.5 4.5 0 1 0 6.5 10zm11 0c-.223 0-.437.034-.65.065.069-.232.14-.468.254-.68.114-.308.292-.575.469-.844.148-.291.409-.488.601-.737.201-.242.475-.403.692-.604.213-.21.492-.315.714-.463.232-.133.434-.28.65-.35l.539-.222.474-.197-.485-1.938-.597.144c-.191.048-.424.104-.689.171-.271.05-.56.187-.882.312-.318.142-.686.238-1.028.466-.344.218-.741.4-1.091.692-.339.301-.748.562-1.05.945-.33.358-.656.734-.909 1.162-.293.408-.492.856-.702 1.299-.19.443-.343.896-.468 1.336-.237.882-.343 1.72-.384 2.437-.034.718-.014 1.315.028 1.747.015.204.043.402.063.539l.025.168.026-.006A4.5 4.5 0 1 0 17.5 10z'/%3E%3C/svg%3E");
  opacity: 0.12;
}
.albero-ricordi-page .quote-box-large .quote-content { color: var(--ricordi-testo); }
.albero-ricordi-page .quote-box-large cite {
  font-style: normal;
  font-weight: 600;
}

/* Gallery — 4 colonne su desktop, 2 su mobile: le dà il markup con
   col-6 col-md-3. Qui solo il rapporto, così la griglia regge qualsiasi
   numero di foto fra 16 e 20 senza righe sbilenche. */
.albero-ricordi-page .gallery-item {
  aspect-ratio: 4 / 3;
  object-fit: cover;
  width: 100%;
}

/* ---------------------------------------------------------------------
   10) L'ALBERO
   Le foglie compaiono e restano. Nessuna regola qui le fa cadere,
   sbiadire o sparire: l'unica transizione di opacita e 0 -> 1, una volta
   sola, all'ingresso nel viewport.
   --------------------------------------------------------------------- */
/* 900px e la larghezza a cui le foglie misurano 45-88px, cioe la misura
   che CLAUDE.md indica per il puntatore su desktop. Sotto, l'albero
   scala con la colonna. */
.albero-ricordi-page .albero-contenitore {
  max-width: 900px;
  margin-left: auto;
  margin-right: auto;
}
/* L'SVG arriva da [[$albero-svg]]. Se l'editor visuale avvolge il
   richiamo in un <p>, il paragrafo non deve aggiungere spazio: qui e'
   solo un involucro. CSS e JS reggono il <p> di per se' (selettore
   discendente di la', getElementById e closest() di qua). */
.albero-ricordi-page .albero-contenitore > p { margin: 0; }

.albero-ricordi-page .albero-contenitore svg {
  width: 100%;
  height: auto;
  display: block;
  overflow: visible;      /* l'ingrandimento delle foglie di bordo non viene tagliato */
}

/* Da 992px in su l'albero e' vincolato in ALTEZZA, non in larghezza.
   Col viewBox ritagliato il disegno riempie tutto il riquadro, e un
   elemento largo 900px ne diventa alto 971: su un portatile si vedeva
   la chioma e mezzo tronco. Qui l'altezza e' il lato che deve stare
   nella schermata, quindi e' quello da fissare; la larghezza segue il
   rapporto di forma. Stesso errore delle fotografie intercalate: un
   elemento verticale vincolato sul lato sbagliato.
   Sotto i 992px la regola non esiste e l'albero riprende la larghezza
   disponibile, che li' e' il comportamento giusto.

   Perche' 600 e non 620-660: su una schermata da 1440x800 le due barre
   sticky del sito occupano 158px stabili, quindi lo spazio utile e' 642.
   La frase e i suoi margini ne prendono 36. Restano 606 per l'albero,
   e 600 lascia sei pixel di margine. Con 660 la linea di terra finiva
   54px sotto la piega. */
@media (min-width: 992px) {
  .albero-ricordi-page .albero-contenitore svg {
    width: auto;
    height: clamp(560px, calc(100vh - 194px), 760px);
    max-width: 100%;
    margin-left: auto;
    margin-right: auto;
  }
}
/* I due numeri di calc() sono MISURATI sulla pagina, non stimati:
     158px = le due barre sticky, #top-navbar 54 + #main-navbar 104.
             Restano visibili sempre, quindi non fanno mai parte dello
             spazio utile.
      36px = la frase «Tocca una foglia...»: 27 di altezza piu' 9 di
             margine inferiore. Margine superiore zero.
   Il TETTO di 760px serve su schermi molto alti: un albero piu' grande
   costringe a muovere la testa invece di guardarlo, e le foglie non
   guadagnano leggibilita' oltre quella misura.

   Il PAVIMENTO di 560px e' tarato sulla leggibilita' delle foglie, non
   scelto a occhio. Misurando la foglia piu' piccola al variare
   dell'altezza dell'albero:
       760px -> 41,2    650px -> 35,3    570px -> 30,9
       560px -> 30,4    553px -> 30,0    550px -> 29,8
   Sotto i 553px si scende sotto i 30px, e 560 e' il primo valore tondo
   che resta sopra. Piu' in basso non si va: su una finestra molto bassa
   e' meglio che l'albero esca dalla schermata e si scorra, piuttosto che
   diventare illeggibile. Il blocco allora deborda di proposito.
   Prima qui c'era height: 600px fisso, calcolato su una finestra da 800:
   su un monitor grande l'albero restava dimensionato per un portatile.

   max-width: 100% e' la cintura di sicurezza chiesta dal caso «finestra
   bassa e larga»: con height in vh e width auto la larghezza cresce col
   rapporto di forma. Al tetto di 760px la larghezza e' 705px contro i
   900 del contenitore, quindi in pratica non morde mai; se mordesse,
   l'SVG si limiterebbe a lasciare aria ai lati, non a deformarsi. */

/* transform-box: fill-box ancora la scala al centro della singola foglia,
   non all'origine del viewBox: senza, le foglie scivolerebbero via. */
.albero-ricordi-page .foglia {
  transform-box: fill-box;
  transform-origin: center;
}

/* Hover e cursore solo dove il puntatore e preciso. Su un telefono le
   foglie misurano ~20x38px e il dito non ha questa risoluzione: li
   l'apertura passa dall'hit test sulla foglia piu vicina. */
@media (hover: hover) and (pointer: fine) {
  .albero-ricordi-page .foglia {
    cursor: pointer;
    transition: transform 150ms ease-out, fill 150ms ease-out;
  }
  .albero-ricordi-page .foglia:hover {
    transform: scale(1.12);
  }
}

/* Il focus da tastiera aggiunge l'outline all'ingrandimento.
   Lo stroke e la riserva: l'outline su forme SVG non e reso allo stesso
   modo da tutti i browser, il contorno si. */
.albero-ricordi-page .foglia:focus { outline: none; }
.albero-ricordi-page .foglia:focus-visible {
  outline: 2px solid var(--ricordi-testo);
  outline-offset: 2px;
  stroke: var(--ricordi-testo);
  stroke-width: 3;
  paint-order: stroke;
  transform: scale(1.12);
}

/* Foglia del ricordo aperto: tono piu scuro e leggero ingrandimento.
   #3D1A52 e il viola piu scuro della palette, nessun valore nuovo. */
.albero-ricordi-page .foglia-scelta {
  fill: var(--ricordi-testo);
  transform: scale(1.15);
}

/* Ingresso: solo opacity, sfasamento di 18ms per foglia.
   41 x 18ms + 380ms = circa 1,12s, sotto il secondo e mezzo.
   La classe .albero-anim la mette il JavaScript: senza JavaScript non
   esiste, quindi le foglie non partono mai da opacity 0 e si vedono. */
.albero-anim .foglia { opacity: 0; }
.albero-anim.albero-visibile .foglia {
  opacity: 1;
  transition: opacity 380ms ease-out;
  transition-delay: calc(var(--i, 0) * 18ms);
}

/* L'elenco dei ricordi: e la versione senza JavaScript della sezione.
   Lo script lo nasconde quando l'albero diventa interattivo. */
.albero-ricordi-page .ricordi-elenco li + li { margin-top: 1rem; }

/* ---------------------------------------------------------------------
   11) IL POPUP DEL RICORDO
   Rettangolare, progettato per il caso solo testo: dei 41 ricordi uno
   solo avra una fotografia, che e quindi l'eccezione.
   Forma e raggio sono quelli del sito (rounded-5 = 9px).
   --------------------------------------------------------------------- */
.albero-ricordi-page #modale-ricordo .modal-content {
  border: 0;
  border-radius: 0.5rem;
}
.albero-ricordi-page #modale-ricordo .modal-header,
.albero-ricordi-page #modale-ricordo .modal-footer {
  border-color: var(--ricordi-tenue);
}
.albero-ricordi-page #modale-ricordo .modal-title {
  display: flex;
  align-items: center;
  gap: .5rem;
  color: var(--ricordi-titolo);
}
/* Il segno accanto al titolo e una foglia vera, presa dall'albero */
.albero-ricordi-page .segno-foglia {
  width: 14px;
  height: auto;
  flex: 0 0 auto;
}

/* Un gradino sopra .blockquote: la scala h4 del sito (app.css:182 e
   :186), la stessa a cui sta il blocco d'epoca. Venticinque ricordi su
   trentanove stanno sotto i 100 caratteri e diciassette sotto i 60: il
   testo breve e' il caso normale, non l'eccezione. Un solo valore per
   tutti, non una misura per fascia di lunghezza: le frecce sono il
   percorso principale e il corpo non deve cambiare a ogni ricordo.
   Nessun valore nuovo, e' una riga della scala esistente.

   max-width: tetto alla giustezza in em, quindi relativo al corpo del
   testo stesso. Serve al ricordo da 379 caratteri; sui brevi non entra
   mai in gioco, perche' la riga e' gia' piu' corta del tetto. */
/* La colonna del ricordo: 26em di giustezza, centrata nel corpo. Non e'
   un tetto di sicurezza ma una decisione — a 764px una riga da 34
   caratteri non si legge, e il testo occupa circa due terzi della
   modale. Il cap sta sul contenitore e non sul <p> perche' cosi' testo e
   firma condividono la stessa colonna e lo stesso bordo sinistro: con il
   cap sul solo <p> la firma resterebbe allineata al corpo della modale.
   Il contenitore prende il font-size del testo solo per fissare l'unita'
   em; il <p> lo eredita con 1em, e la firma tiene la sua misura. */
.albero-ricordi-page [data-modale-ricordo] {
  --ricordo-corpo: calc(0.825rem + 0.9vw);
  font-size: var(--ricordo-corpo);
  max-width: 26em;
  margin-left: auto;
  margin-right: auto;
}
@media (min-width: 1200px) {
  .albero-ricordi-page [data-modale-ricordo] { --ricordo-corpo: 1.5rem; }
}
.albero-ricordi-page .ricordo-testo {
  font-size: 1em;
  line-height: 1.5;
  color: var(--ricordi-testo);
  margin-bottom: 0;
}
/* Una sola dichiarazione per le due firme: quelle dei popup e quella del
   blocco d'epoca, che devono restare identiche. font-style:normal serve
   al solo blocco d'epoca, dove .quote-box-large impone l'italico
   (custom.css:64); nel popup non ha effetto. */
.albero-ricordi-page .ricordo-firma,
.albero-ricordi-page .epoca-firma {
  margin-top: 1rem;
  font-size: calc(0.775rem + 0.3vw);
  font-weight: 600;
  font-style: normal;
  color: var(--ricordi-titolo);
}
/* La scala e' quella del corpo testo, app.css:16737-16744. Nel popup la
   firma e' un <p> e la porta gia'; nel blocco d'epoca e' un <figcaption>,
   che non passa da quella regola e resterebbe fisso a 18px, a 390px
   grande quanto la citazione. Dichiararla qui rende le due identiche a
   ogni larghezza. Nessun valore nuovo. */
@media (min-width: 1200px) {
  .albero-ricordi-page .ricordo-firma,
  .albero-ricordi-page .epoca-firma { font-size: 1rem; }
}
.albero-ricordi-page .ricordo-firma::before,
.albero-ricordi-page .epoca-firma::before { content: "— "; }

.albero-ricordi-page .ricordo-figura img {
  width: 100%;
  height: auto;
  border-radius: 0.5rem;
}
.albero-ricordi-page .ricordo-figura figcaption {
  margin-top: .5rem;
  font-size: 0.75rem;
  color: var(--ricordi-testo);
}

.albero-ricordi-page #modale-ricordo .modal-footer {
  justify-content: space-between;
  flex-wrap: nowrap;
  gap: .5rem;
}
.albero-ricordi-page .ricordo-contatore {
  font-size: 0.75rem;
  color: var(--ricordi-testo);
  white-space: nowrap;
}
/* Frecce alleggerite. Nel popup corto il piedino pesava piu' del
   ricordo: due pillole bordate in maiuscolo contro una riga di testo.
   Si toglie il peso, non il comando.
   - bordo trasparente invece di assente: i 2px di .btn (app.css:3320)
     restano nel box, quindi padding e area di tocco non cambiano;
   - niente maiuscolo: app.css:16750 lo mette su ogni .btn;
   - freccia piu' grande dell'etichetta che accompagna.
   L'etichetta resta su desktop: e' l'affordance dell'elemento che
   determina quanti ricordi una persona legge. Sotto i 576px era gia'
   via e li' resta la sola freccia.
   Hover e focus restano quelli di .btn-outline-primary del sito. */
.albero-ricordi-page .ricordo-nav {
  white-space: nowrap;
  display: inline-flex;
  align-items: center;
  gap: .4rem;
  border-color: transparent;
  text-transform: none;
}
.albero-ricordi-page .ricordo-nav-icona {
  font-size: 1.5em;
  line-height: 1;
}
@media (max-width: 575.98px) {
  .albero-ricordi-page .ricordo-nav { padding-left: 1rem; padding-right: 1rem; }
  .albero-ricordi-page .ricordo-nav .ricordo-nav-testo { display: none; }
}

/* ---------------------------------------------------------------------
   12) MOVIMENTO RIDOTTO
   Disattiva tutto: ingresso, ingrandimenti, transizioni. L'albero resta
   statico e pienamente funzionante, le foglie restano visibili.
   --------------------------------------------------------------------- */
@media (prefers-reduced-motion: reduce) {
  .albero-ricordi-page .foglia,
  .albero-anim .foglia,
  .albero-anim.albero-visibile .foglia {
    opacity: 1 !important;
    transition: none !important;
    transform: none !important;
  }
  .albero-ricordi-page .foglia:focus-visible {
    transform: none !important;
  }
}

/* ---------------------------------------------------------------------
   16) LE VOCI
   Lettore nativo, stilato il meno possibile: l'aspetto cambia fra
   browser ma e' accessibile, funziona da tastiera e non si rompe.
   Nessuna libreria, nessun iframe, nessun fornitore terzo.
   Il focus di <summary> e <audio> e' gia' coperto dal §7.
   --------------------------------------------------------------------- */
/* I tre blocchi arrivano da [[$voci-audio]]. Se l'editor visuale avvolge
   il richiamo in un <p>, il parser espelle gli <article> dal paragrafo
   (article non puo' stare dentro p) e resta un <p> vuoto: qui non deve
   aggiungere spazio. L'ascoltatore audio non ne risente, e' su
   [stripe-voci], piu' in alto. */
.albero-ricordi-page .voci-elenco > p { margin: 0; }

.albero-ricordi-page .voce + .voce { margin-top: 2rem; }

.albero-ricordi-page .voce-lettore {
  display: block;
  width: 100%;
  margin-top: .5rem;
}

.albero-ricordi-page .voce-trascrizione { margin-top: .75rem; }
.albero-ricordi-page .voce-trascrizione summary {
  cursor: pointer;
  color: var(--ricordi-titolo);
  font-weight: 600;
}
.albero-ricordi-page .voce-testo { margin-top: .5rem; }

/* ---------------------------------------------------------------------
   17) FASCIA DI TESTATA — solo template «Albero dei ricordi – speciale»
   Tre strati come nella home: immagine, velo, testo. Due differenze:

   1) l'immagine e' un <picture> con due <source>, non uno sfondo CSS.
      La home usa un solo file per slide e lo ritaglia con cover; qui i
      file sono due, 1920x720 e 1080x1000, e il telefono deve scaricare
      solo il proprio. object-fit:cover fa il lavoro che nella home fa
      background-size:cover.

   2) il velo e' bianco pieno al 60%, non il gradiente nero della home.
      Misurato campionando i pixel delle due illustrazioni nelle zone
      dove cade il testo, a 1440, 768 e 390:
        testo #3D1A52 senza velo ......  48-54% dell'area sotto 4,5:1
        bianco + gradiente home .......  32-40% sotto 4,5:1
        #3D1A52 + velo bianco 60% .....  0% sotto 4,5:1, minimo 5,7:1
      Il gradiente della home funziona perche' le sue slide sono
      fotografie scure con il soggetto a destra; qui l'illustrazione e'
      chiara e piena su tutta la larghezza, e schiarire batte scurire.

   Altezza: min-height in vh piu' padding, come la home, ma con una
   progressione regolare 55/50/45 invece del 55/35/45 del sito, dove il
   tablet risulta piu' basso del telefono.
   --------------------------------------------------------------------- */
.albero-ricordi-page .hero-albero {
  position: relative;
  overflow: hidden;
}
.albero-ricordi-page .hero-albero-immagine {
  position: absolute;
  inset: 0;
}
.albero-ricordi-page .hero-albero-immagine img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: 50% 50%;
  display: block;
}
/* VELO — non serve piu'. Con le immagini definitive il testo cade
   sempre su lavanda pulito. Misurato sui rettangoli reali dei glifi:
       1440  min 11,55:1   0% sotto 4,5
        768  dentro il pulito dopo aver stretto la colonna, vedi sotto
        390  fascia pulita 49,1% del file = 177px sui 360 della fascia,
             contro i 92 del blocco titolo+sottotitolo
   L'elemento resta nel markup, senza fondo: se un domani una fotografia
   prendesse il posto dell'illustrazione, basta ridargli un colore. */
.albero-ricordi-page .hero-albero-velo {
  position: absolute;
  inset: 0;
}

/* Da 768 a 991 l'immagine desktop mostra il lavanda pulito solo fino a
   meta' larghezza (le foglie partono dal 50,2% del file). La colonna
   col-md-8 e' larga il 66,7%, quindi la coda del sottotitolo finiva
   sulle foglie. Il titolo misura 338px e lo spazio pulito 348: ci sta,
   basta che il sottotitolo vada a capo prima. */
@media (min-width: 768px) and (max-width: 991.98px) {
  .albero-ricordi-page .hero-albero-corpo > div {
    max-width: 50%;
  }
}

/* Su mobile il testo si ancora IN ALTO, dove l'immagine e' pulita, non
   al centro dove c'e' la chioma. Su desktop il centraggio resta. */
.albero-ricordi-page .hero-albero-corpo {
  padding-top: 4.5rem;
  padding-bottom: 4.5rem;
  min-height: 55vh;
}
@media (max-width: 991.98px) {
  .albero-ricordi-page .hero-albero-corpo { min-height: 50vh; }
}
@media (max-width: 575.98px) {
  .albero-ricordi-page .hero-albero-corpo { min-height: 45vh; }
}
/* Mobile: il testo si ancora IN ALTO, dove l'immagine e' pulita, ma non
   incollato al bordo.

   UN TERZO NON CI STA, misurato. La chioma inizia al 49,1% del file, che
   su una fascia da 360px sono 177px; il blocco titolo+sottotitolo ne
   misura 83, e il sottotitolo va a capo su due righe. Posizionandolo a
   un terzo (120px) finisce a 203 e sfora di 26px: min 1,00:1, 3,7%
   dell'area sotto soglia. Il massimo che resta pulito su una finestra
   da 800 e' 94px, cioe' il 26%.

   8vh e' il valore che regge anche sui telefoni bassi: il blocco ha
   altezza FISSA in pixel mentre fascia e chioma scalano in vh, quindi il
   margine si stringe al calare della finestra. A 600px di viewport la
   chioma e' a 133 e il blocco a 48-131: passa per un pelo. A 800 cade a
   64px, il 17,8% della fascia, con 30px di margine.

   Questo blocco va DOPO le regole base: stessa specificita', a parita'
   vince l'ultimo. Messo prima, il padding-top di 4.5rem lo sovrascriveva. */
@media (max-width: 767.98px) {
  .albero-ricordi-page .hero-albero-corpo {
    align-items: flex-start !important;
    padding-top: 8vh;
  }
}
/* Il titolo prende la scala h1 del sito (app.css:158), che e' la sua:
   qui l'H1 e' davvero questo, non un titolo di slide come nella home. */
/* Titolo e sottotitolo sono una cosa sola: il secondo precisa il primo.
   Si stringe dentro e si allarga fuori, cosi' il blocco si legge come
   unita'. Valori della scala del sito: 0.5rem e 1.5rem sono gli spazi
   Bootstrap 2 e 4 sulla base rem da 18px, cioe' 9px e 27px. */
.albero-ricordi-page .hero-albero-titolo {
  color: var(--ricordi-testo);
  margin-bottom: 0.5rem;
}
/* Lo spazio sotto il blocco lo porta l'utility mb-4 nel markup, non una
   regola qui: le utility di spaziatura di Bootstrap sono !important e
   vincerebbero comunque. mb-4 = 1.5rem = 27px sulla base rem da 18. */
.albero-ricordi-page .hero-albero-occhiello {
  color: var(--ricordi-titolo);
}

/* =====================================================================
   SEGNAPOSTO — DA RIMUOVERE PRIMA DELLA PUBBLICAZIONE
   Serve solo a rendere inequivocabile, in fase di validazione, che cosa
   è contenuto reale e che cosa è in attesa di materiale.
   ===================================================================== */
.segnaposto {
  border: 2px dashed var(--ricordi-foglia-2);
  background-color: #ffffff;
  color: var(--ricordi-testo);
  display: flex;
  align-items: center;
  justify-content: center;
  text-align: center;
  padding: 1rem;
  font-size: 0.75rem;
  line-height: 1.4;
}
.segnaposto-nota {
  border-left: 4px solid var(--ricordi-foglia-2);
  background-color: #ffffff;
  color: var(--ricordi-testo);
  padding: 0.5rem 1rem;
  font-size: 0.75rem;
}

/* ---------------------------------------------------------------------
   13) GALLERY
   Le fotografie si aprono nella stessa Modal dei ricordi. Il <button>
   serve a renderle raggiungibili da tastiera: un <img> con un gestore
   di click non lo sarebbe.
   --------------------------------------------------------------------- */
.albero-ricordi-page .galleria-apri {
  display: block;
  width: 100%;
  padding: 0;
  border: 0;
  background: none;
  cursor: zoom-in;
  line-height: 0;
}
.albero-ricordi-page .galleria-apri img {
  width: 100%;
  height: auto;
}

/* La griglia: quattro colonne da 768px, due sotto. Le dà il markup con
   col-6 col-md-3. Il rapporto fisso tiene le righe allineate anche se
   un ritaglio esce di qualche pixel diverso dagli altri. */
.albero-ricordi-page [stripe-galleria] .col-md-3 .galleria-apri img {
  aspect-ratio: 4 / 3;
  object-fit: cover;
}

.albero-ricordi-page .galleria-voce figcaption {
  line-height: 1.4;
}

/* I tre dettagli intercalati al testo sono vincolati in ALTEZZA, non in
   larghezza. Con width:100% le immagini quasi quadrate o verticali —
   Cit Turin è 900x1200, Il Poggione 1200x900 — diventavano alte quanto
   lo schermo: in una colonna da 1073px facevano rispettivamente 1431px
   e 805px di altezza. Il limite di 520px le riporta tutte e tre alla
   stessa altezza e le rende confrontabili.
   Sotto i 992px le colonne collassano, l'immagine va a piena larghezza
   e l'altezza resta comunque sotto il limite: a 390px la più alta,
   Cit Turin, misura 363x484. Il vincolo resta attivo, semplicemente
   non è lui a mordere. */
.albero-ricordi-page .galleria-grande .galleria-apri {
  text-align: center;
}
.albero-ricordi-page .galleria-grande .galleria-apri img {
  width: auto;
  height: auto;
  max-width: 100%;
  max-height: 520px;
}
.albero-ricordi-page .galleria-grande figcaption {
  text-align: center;
}

/* La fotografia dentro la Modal */
.albero-ricordi-page .modale-foto img {
  width: 100%;
  height: auto;
}

/* ---------------------------------------------------------------------
   14) UN RICORDO, LA SUA FOTOGRAFIA
   Fotografia d'epoca accanto al testo del ricordo. Nessuna cornice,
   nessun fondo, nessun bordo: è una citazione, non una scheda.
   --------------------------------------------------------------------- */
.albero-ricordi-page .epoca-voce + .epoca-voce {
  margin-top: 3rem;
}

/* Il tetto di 357px nasce dalla fotografia di Margherita, che è 357x589:
   357 è la LARGHEZZA, 589 l'altezza, e oltre il nativo non si sale —
   è una scansione da stampa piccola, ingrandirla la rende molle.
   La fotografia di Giorgio è 864x1200 e qui viene ridotta: è una
   riduzione, quindi ammessa, e dà alle due immagini la stessa larghezza
   di colonna. Due scansioni verticali incolonnate devono misurare uguale,
   altrimenti la seconda sembra più importante della prima.
   A 1440px la colonna col-md-5 è 523px: l'immagine non la riempie, e i
   margini automatici la centrano. Lo spazio ai lati è voluto, non un
   residuo: questo blocco è il punto di riposo fra l'albero e la parte
   sull'Alzheimer.
   Sotto i 357px di colonna (viewport 390px) width:100% la fa
   rimpicciolire, che è l'unico ridimensionamento ammesso.
   L'allineamento verticale con la citazione è dato da .align-items-center
   sulla riga. */
.albero-ricordi-page .epoca-foto {
  width: 100%;
  max-width: 357px;
  display: block;
  margin-left: auto;
  margin-right: auto;
}

/* Un gradino sopra .blockquote: la scala h4 del sito (app.css:182 e
   :186), cioè 27px a regime contro i 22,5px della scala h5 su cui sta
   .blockquote. È l'unico ricordo pubblicato per esteso nel corpo della
   pagina e regge la dimensione. Nessun valore nuovo: è una riga della
   scala esistente (STILE.md §1). L'interlinea resta 1.5, quella del
   corpo testo, perché questo è testo corrente e non un titolo. */
.albero-ricordi-page .epoca-testo {
  font-size: calc(0.825rem + 0.9vw);
  line-height: 1.5;
  color: var(--ricordi-testo);
}
@media (min-width: 1200px) {
  .albero-ricordi-page .epoca-testo { font-size: 1.5rem; }
}
/* .epoca-firma e' dichiarata insieme a .ricordo-firma al §10. */
