/* ============================================================================
   COMPONENTI — i pezzi che si ripetono in tutte le pagine
   ============================================================================

   Bottoni, sopratitoli, titoli di sezione, schede e griglie sono definiti qui
   una volta sola. Le pagine li usano applicando la classe corrispondente,
   invece di reinventare ogni volta la propria variante: è quello che tiene
   insieme l'aspetto del sito quando le sezioni crescono.

   Si vedono tutti dal vivo, in ogni variante, nella pagina di anteprima
   riservata allo staff: /admin/guida-di-stile/

   Regole valide per tutti i componenti qui sotto:

   - i colori e le misure arrivano da `tokens.css`, mai scritti a mano;
   - ogni elemento su cui si può cliccare reagisce sia al passaggio del mouse
     sia al focus da tastiera, perché chi naviga con il tasto Tab deve vedere
     dove si trova esattamente come chi usa il mouse;
   - chi ha chiesto al sistema di ridurre le animazioni non ne vede nessuna
     (blocco in fondo al file).
   ========================================================================= */

/* --- Bottoni ----------------------------------------------------------------
   `.btn` da solo non ha colore: dà la forma, la spaziatura e il testo in
   maiuscolo spaziato. Va sempre accompagnato da una variante.

   - `.btn-accent`  l'azione principale della pagina, in blu oltremare;
   - `.btn-glass`   azione secondaria sopra una fotografia: fondo semitrasparente
                    e sfocatura, perché resti leggibile su qualunque immagine;
   - `.btn-line`    azione secondaria su fondo pieno, solo contorno;
   - `.btn-sm`      versione ridotta, da affiancare a `.btn`.

   Va usato su <a> quando porta a un'altra pagina e su <button> quando compie
   un'azione: l'aspetto è lo stesso, ma la differenza conta per chi usa uno
   screen reader. */

.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  padding: 16px 32px;
  border: 1px solid transparent;
  border-radius: var(--radius);
  font-family: var(--font-sans);
  font-size: var(--text-ui);
  font-weight: var(--weight-ui);
  letter-spacing: var(--track-ui);
  text-transform: uppercase;
  cursor: pointer;
  transition:
    background var(--motion),
    border-color var(--motion),
    color var(--motion),
    transform var(--motion);

  /* Il sollevamento di due pixel vale sia per il mouse sia per la tastiera:
     lo stato attivo non deve dipendere da come ci si è arrivati. */
  &:hover,
  &:focus-visible {
    transform: translateY(-2px);
  }

  &:focus-visible {
    outline: 2px solid var(--ice);
    outline-offset: 3px;
  }
}

.btn-sm {
  padding: 11px 20px;
  font-size: var(--text-eyebrow);
}

.btn-accent {
  background: var(--ultra);
  color: var(--on-accent);

  &:hover,
  &:focus-visible {
    background: var(--ultra-hi);
  }
}

.btn-glass {
  background: var(--surface-glass);
  border-color: var(--border-strong);
  color: var(--on-accent);
  backdrop-filter: blur(8px);

  &:hover,
  &:focus-visible {
    background: var(--surface-glass-hi);
  }
}

.btn-line {
  border-color: var(--line);
  color: var(--ice);

  &:hover,
  &:focus-visible {
    border-color: var(--ice);
  }
}

/* --- Sopratitolo -------------------------------------------------------------
   La breve etichetta maiuscola che precede un titolo e dice di che cosa si
   sta parlando ("Progetto di memoria civile", "Compagnia teatrale · Cesena").
   Con `.accent` diventa blu chiaro, per le sezioni che vanno messe in
   evidenza. È testo di servizio: non deve mai sostituire il titolo vero. */

.eyebrow {
  margin: 0 0 14px;
  color: var(--ink-dim);
  font-size: var(--text-eyebrow);
  font-weight: var(--weight-ui);
  letter-spacing: var(--track-eyebrow);
  text-transform: uppercase;

  &.accent {
    color: var(--ultra-text);
  }
}

/* --- Collegamento con freccia ------------------------------------------------
   Il "vai a" discreto in fondo a una sezione. La freccia scorre in avanti al
   passaggio del mouse o al focus: è un invito, non un'animazione decorativa. */

.link-arrow {
  display: inline-flex;
  align-items: center;
  gap: 9px;
  color: var(--ultra-text);
  font-size: 12px;
  font-weight: var(--weight-ui);
  letter-spacing: var(--track-ui);
  text-transform: uppercase;

  &::after {
    content: "→";
    transition: transform var(--motion);
  }

  &:hover::after,
  &:focus-visible::after {
    transform: translateX(6px);
  }

  &:hover {
    color: var(--ice);
  }

  &:focus-visible {
    outline: 2px solid var(--ultra-hi);
    outline-offset: 4px;
  }
}

/* --- Titoli e aperture di sezione -------------------------------------------
   `.section-head` è il blocco in cima a una sezione: sopratitolo, titolo ed
   eventuale collegamento. Con `.row` il collegamento si allinea a destra sulla
   stessa riga del titolo, e va a capo da solo quando lo spazio non basta.
   `.lead` è il paragrafo di apertura, leggermente più grande del testo
   normale: uno solo per sezione, altrimenti non apre più niente. */

.section-title {
  font-size: var(--step-section);
}

.section-head {
  margin-bottom: var(--section-gap);

  &.row {
    display: flex;
    flex-wrap: wrap;
    align-items: flex-end;
    justify-content: space-between;
    gap: 28px;
  }
}

.lead {
  color: var(--text-soft);
  font-size: var(--step-lead);
  line-height: 1.6;
}

/* --- Schede ------------------------------------------------------------------
   Il contenitore delle voci ripetute: una data del calendario, una produzione,
   un collegamento rapido. Su fondo leggermente più chiaro della pagina, con un
   contorno sottile che si accende in blu quando la scheda è attiva.

   Quando l'intera scheda è cliccabile va avvolta in un <a>: così il contorno
   di focus circonda tutta la scheda e non solo il titolo. */

.card {
  background: var(--deep-2);
  border: 1px solid var(--line);
  transition:
    border-color var(--motion),
    transform var(--motion);

  &:hover,
  &:focus-visible,
  &:focus-within {
    border-color: var(--ultra);
    transform: translateY(-5px);
  }

  &:focus-visible {
    outline: 2px solid var(--ultra-hi);
    outline-offset: 3px;
  }
}

.card-body {
  padding: clamp(22px, 2.6vw, 32px);
}

.card-title {
  margin-bottom: 10px;
  font-size: var(--step-title-sm);
}

/* Riga di servizio dentro la scheda: data, luogo, anno. */
.card-meta {
  margin-bottom: 22px;
  color: var(--ink-dim);
  font-size: var(--text-meta);
}

.card-date {
  display: block;
  margin-bottom: 14px;
  color: var(--ultra-text);
  font-size: var(--text-eyebrow);
  letter-spacing: var(--track-label);
  text-transform: uppercase;
}

/* --- Prosa -------------------------------------------------------------------
   I blocchi di testo lungo scritti dall'amministrazione: la descrizione di uno
   spettacolo, la storia della compagnia.

   La larghezza è limitata a circa 68 caratteri per riga. Non è un vezzo: su uno
   schermo largo una riga di testo lunga il doppio costringe l'occhio a cercare
   dove ricomincia la riga successiva, e si perde il segno. Il valore è espresso
   in `ch`, cioè in larghezze di carattere, così resta giusto anche se il corpo
   del testo cambia.

   Dentro c'è HTML scritto nell'editor dell'amministrazione, quindi gli elementi
   si stilano per tag e non per classe: chi scrive non può aggiungere classi. */

.prosa {
  max-width: 68ch;

  & p {
    color: var(--text-soft);
  }

  & h2,
  & h3 {
    margin-top: 1.6em;
    margin-bottom: 0.4em;
    font-size: var(--step-title-md);
  }

  & ul,
  & ol {
    margin: 0 0 1em;
    padding-left: 1.2em;
    color: var(--text-soft);
  }

  & li {
    margin-bottom: 0.4em;
  }

  /* I collegamenti dentro il testo vanno riconoscibili anche da chi non
     distingue il blu dal bianco: la sottolineatura non è decorativa. */
  & a {
    color: var(--ultra-text);
    text-decoration: underline;
    text-underline-offset: 3px;

    &:hover,
    &:focus-visible {
      color: var(--ice);
    }
  }

  /* Le immagini inserite nel testo dall'editor non hanno classi né dimensioni:
     vanno tenute dentro la colonna. */
  & img {
    max-width: 100%;
    height: auto;
    margin-block: 1.4em;
  }
}

/* --- Card produzione ---------------------------------------------------------
   La locandina di uno spettacolo: foto verticale con anno e titolo sotto, senza
   riquadro intorno. Qui è la fotografia a fare da scheda — mettercene una
   attorno la indebolirebbe, ed è il motivo per cui questa card non usa `.card`.

   L'intero blocco è avvolto in un collegamento, così il bersaglio del clic è
   tutta la locandina e il contorno di focus circonda la scheda intera. Al
   passaggio del mouse o al focus la foto schiarisce appena: il movimento
   sarebbe eccessivo su un'immagine di queste dimensioni.

   Usata nell'elenco Produzioni e nella sezione repertorio della home. */

.prod-card {
  display: block;

  & .foto {
    transition: opacity var(--motion-slow);
  }

  &:hover .foto,
  &:focus-visible .foto {
    opacity: 0.82;
  }

  &:focus-visible {
    outline: 2px solid var(--ultra-hi);
    outline-offset: 4px;
  }
}

.prod-info {
  padding-top: 22px;
}

/* L'anno della produzione. È facoltativo: di alcuni spettacoli storici non è
   noto e non va inventato, quindi la riga può mancare del tutto. */
.year {
  display: block;
  color: var(--ultra-text);
  font-size: var(--text-eyebrow);
  letter-spacing: var(--track-label);
}

@media (prefers-reduced-motion: reduce) {
  .prod-card .foto {
    transition: none;
  }
}

/* --- Elenco di dati ----------------------------------------------------------
   Le coppie "ruolo — nomi" dei credits di uno spettacolo: etichetta piccola a
   sinistra, valore nel carattere dei titoli a destra, una riga sottile a
   separare. Sotto i 640 pixel le due colonne diventano una sola. */

.fact-list {
  margin: 30px 0;
  padding: 0;
  border-top: 1px solid var(--line);
  list-style: none;

  & li {
    display: flex;
    gap: 22px;
    padding: 14px 0;
    border-bottom: 1px solid var(--line);
  }

  & span {
    flex: 0 0 120px;
    padding-top: 5px;
    color: var(--ink-dim);
    font-size: var(--text-micro);
    letter-spacing: var(--track-label);
    text-transform: uppercase;
  }

  & strong {
    font-family: var(--font-serif);
    font-size: 20px;
    font-weight: 400;
  }
}

/* --- Griglie -----------------------------------------------------------------
   Il contenitore delle file di schede. Si usa come `class="grid grid-3"`. Il
   numero di colonne è un token locale, `--colonne`, quindi per un caso nuovo
   basta aggiungere qui una classe `.grid-N` invece di riscrivere la griglia:
   gli stili in linea nell'HTML non sono un'alternativa, la Content Security
   Policy della specifica §9 li blocca.

   Le colonne si dimezzano sotto i 900 pixel e diventano una sola sotto i 640
   (soglie della guida di stile). */

.grid {
  display: grid;
  /* `minmax(0, 1fr)` e non `1fr`: da solo, `1fr` significa "una parte uguale,
     ma mai meno di quanto serve al contenuto", e basta una foto panoramica o
     una parola lunga perché una colonna si prenda lo spazio delle altre. Con
     il minimo a zero le colonne restano davvero uguali e il contenuto si
     adatta. */
  grid-template-columns: repeat(var(--colonne, 3), minmax(0, 1fr));
  gap: var(--grid-gap);
}

.grid-2 {
  --colonne: 2;
}

.grid-3 {
  --colonne: 3;
}

.grid-4 {
  --colonne: 4;
}

@media (max-width: 900px) {
  .grid {
    grid-template-columns: repeat(2, minmax(0, 1fr));
  }
}

@media (max-width: 640px) {
  .grid {
    grid-template-columns: minmax(0, 1fr);
  }

  .fact-list li {
    flex-direction: column;
    gap: 4px;
  }
}

/* --- Animazioni ridotte ------------------------------------------------------
   Chi ha attivato "riduci animazioni" nelle impostazioni del proprio sistema
   lo fa quasi sempre per un motivo concreto: movimenti e scorrimenti gli
   provocano nausea o vertigini. Qui spegniamo ogni transizione e ogni
   spostamento, mentre i cambi di colore restano — non sono movimento e
   servono a capire dove ci si trova. */

@media (prefers-reduced-motion: reduce) {
  .btn,
  .card,
  .link-arrow::after {
    transition: none;
  }

  .btn:hover,
  .btn:focus-visible,
  .card:hover,
  .card:focus-visible,
  .card:focus-within,
  .link-arrow:hover::after,
  .link-arrow:focus-visible::after {
    transform: none;
  }
}
