/* ════════════════════════════════════════════════════════════
   temi.css — le disposizioni

   Ogni regola pende da `body.tema-on[data-tm-layout="<nome>"]`, scritto
   su <body> da `applyTema()` in js/app.js. Due conseguenze volute:

   · `classico` non compare mai qui. È l'assenza di regole, non una
     regola che rimette le cose a posto: chi non sceglie un layout non
     carica nemmeno una dichiarazione, e la pagina è quella di sempre —
     al pixel. È la condizione che permette di lavorare su questo file
     senza mai mettere a rischio i clienti già in produzione.

   · `.tema-on` c'è di proposito: la classe è accesa solo sulle viste
     pubbliche, mai in admin. Un layout non deve poter deformare il
     pannello di chi gestisce le prenotazioni.

   La specificità è (0,2,1) per `body.tema-on[...]` più quella del
   selettore che segue: batte le utility Tailwind compilate (0,1,0)
   senza `!important`. Dove serve superare una utility con variante
   (`hover:`), la regola deve avere la propria variante, o lo stato
   interattivo resta quello compilato — stessa trappola di TK_VARIANTS
   in app.js.

   Alcuni layout NON stanno qui perché non sono ridipinture: hanno
   markup proprio in index.html, gated da `v-if="layout === '…'"`.
   Vedi LAYOUT_LISTA_PROPRIA in app.js.
   ════════════════════════════════════════════════════════════ */


/* ════════════════════════════════════════════════════════════
   LE TESTATE

   Una testata c'era già, ed è il motivo per cui vale la pena parlarne:
   `pt-10` + logo `h-20` + nome a 27px + sottotitolo + tre pillole fanno
   circa 230px prima di qualsiasi contenuto. Su un telefono da 844px è
   un quarto dello schermo speso prima del primo evento — e con
   «locandina» il manifesto finiva spinto sotto la barra di navigazione.

   La domanda quindi non è «aggiungerne una», è QUANTA per ogni layout.
   Ogni layout se la porta come default; il markup non cambia, cambia
   solo quanto spazio si prende.

   Le pillole (prezzi, dove siamo, contatti, come prenotare e — se il
   cliente l'ha configurato — il programma) non spariscono mai in
   nessuna variante, solo rimpiccioliscono: sono le uniche informazioni
   di contatto che il pubblico ha.
   ════════════════════════════════════════════════════════════ */

/* ─── Testata BARRA — dove la lista è lunga ───────────────────
   Logo e nome in riga: in colonna occupano il doppio dicendo lo stesso.
   Restituisce due o tre eventi visibili invece di uno. */
body.tema-on[data-tm-testata="barra"] header {
  padding-top: 14px;
  padding-left: 14px;
  /* Il selettore di lingua è in posizione fissa in alto a destra: con la
     testata in colonna gli passava sotto, in riga gli finirebbe dentro e
     taglierebbe il nome del cliente a metà. */
  padding-right: 92px;
}
/* Il div cliccabile che tiene logo + nome: non ha una classe sua, si
   riconosce da `cursor-pointer`. Se un giorno gliela si desse, questo
   selettore va aggiornato — ma verifica-layout.js se ne accorge. */
body.tema-on[data-tm-testata="barra"] header > div > div[class*="cursor-pointer"] {
  flex-direction: row;
  align-items: center;
  gap: 10px;
}
body.tema-on[data-tm-testata="barra"] header img { height: 34px; margin-bottom: 0; }
body.tema-on[data-tm-testata="barra"] header h1 {
  font-size: 17px !important;
  text-align: left;
  line-height: 1.1;
}
/* Il sottotitolo vive dentro l'h1: senza una regola sua tornerebbe
   grande quanto il nome. */
body.tema-on[data-tm-testata="barra"] header h1 span { font-size: 11px; }
body.tema-on[data-tm-testata="barra"] header .mt-4 { margin-top: 10px; }


/* ─── Testata MINIMA — dove l'immagine è il prodotto ──────────
   Con «locandina» ogni pixel tolto alla testata è un pixel dato al
   manifesto, che è tutto il layout. */
body.tema-on[data-tm-testata="minima"] header {
  padding-top: 10px;
  padding-bottom: 0;
  padding-right: 92px;   /* stessa ragione: il selettore di lingua */
}
body.tema-on[data-tm-testata="minima"] header > div > div[class*="cursor-pointer"] {
  flex-direction: row;
  align-items: center;
  gap: 8px;
}
body.tema-on[data-tm-testata="minima"] header img { height: 26px; margin-bottom: 0; }
body.tema-on[data-tm-testata="minima"] header h1 { font-size: 14px !important; line-height: 1.1; }
body.tema-on[data-tm-testata="minima"] header h1 span { font-size: 10px; }
body.tema-on[data-tm-testata="minima"] header .mt-4 { margin-top: 8px; }
/* Le pillole: `button` per prezzi/posizione/contatti/guida, `a` per il
   programma, che è un link esterno del cliente. Senza `a` quella sola
   pillola resterebbe grande quanto nella testata piena, in mezzo alle
   altre rimpicciolite. */
body.tema-on[data-tm-testata="minima"] header .mt-4 button,
body.tema-on[data-tm-testata="minima"] header .mt-4 a { font-size: 9px; padding: 4px 8px; }


/* ─── Testata PIENA — dove c'è qualcosa da leggere ────────────
   Nessuna regola: è la testata di sempre. Resta a «classico» e a
   «racconto», l'unico layout in cui la pagina si legge dall'alto — lì
   la testata è l'apertura, non un ostacolo.

   Avevo scritto che anche «serata» l'avrebbe tenuta: «tanto è una
   schermata sola, non toglie niente a nessuno». Guardandola resa era
   falso — il modulo cominciava a 640px su 844, cioè sotto la piega, e
   «serata» esiste proprio per non far scorrere nessuno. Il ragionamento
   sbagliato era misurare quanto la testata costa alla LISTA invece che
   al contenuto che viene dopo. */


/* ─── ESSENZIALE ──────────────────────────────────────────────
   Niente immagini, niente ombre, niente effetti: caratteri grandi e
   contrasto alto. Nasce da due clienti reali con lo stesso problema —
   chi non ha locandine (quasi ogni cliente nuovo) e chi ha un pubblico
   che non vede bene. È anche il layout che carica più in fretta su una
   linea lenta, e l'unico mostrabile a un ente pubblico che chiede
   conformità all'accessibilità.

   Lavora sulla lista classica: nessun markup nuovo da tenere allineato.
   ──────────────────────────────────────────────────────────── */

/* Via il vetro smerigliato: costa e non dice niente. */
body.tema-on[data-tm-layout="essenziale"] .backdrop-blur-xl,
body.tema-on[data-tm-layout="essenziale"] .backdrop-blur {
  backdrop-filter: none;
  background: #fff;
  border-radius: 8px;
}

/* Le ombre diventano righe: un tratto si vede anche a contrasto ridotto,
   un'ombra morbida no. */
body.tema-on[data-tm-layout="essenziale"] .space-y-2 > div {
  box-shadow: none !important;
  border-radius: 0;
  border-top: 1px solid var(--tk-r-stone-300);
  padding: 14px 4px;
}
body.tema-on[data-tm-layout="essenziale"] .space-y-2 > div:first-child {
  border-top: 2px solid var(--tk-textDark);
}

/* La miniatura sparisce: qui l'immagine non c'è o non aiuta. Lo spazio
   che libera va al titolo, che è l'unica cosa che conta. */
body.tema-on[data-tm-layout="essenziale"] .space-y-2 .w-9.h-12 { display: none; }

body.tema-on[data-tm-layout="essenziale"] .space-y-2 p.font-semibold {
  font-size: 20px;
  line-height: 1.15;
  font-weight: 700;
  color: var(--tk-textDark);
  /* `truncate` taglia il titolo a una riga: a 20px ne resterebbe metà.
     Qui il titolo va a capo, perché è il dato principale. */
  white-space: normal;
  overflow: visible;
  text-overflow: clip;
}
body.tema-on[data-tm-layout="essenziale"] .space-y-2 p.font-semibold > span {
  font-size: 14px;
  margin-top: 3px;
}
body.tema-on[data-tm-layout="essenziale"] .space-y-2 .text-\[10\.5px\] { font-size: 14px; }
body.tema-on[data-tm-layout="essenziale"] .space-y-2 .text-\[9px\]     { font-size: 12px; }

/* La pillola di disponibilità diventa testo pieno: a contrasto alto una
   pastiglia colorata piccola è meno leggibile di una parola. */
body.tema-on[data-tm-layout="essenziale"] .space-y-2 .rounded-full {
  border-radius: 0;
  background: transparent !important;
  box-shadow: none !important;
  font-size: 13px;
  padding: 0;
  margin-top: 4px;
}

/* Il tocco minimo accessibile è 44px: qui si arriva a 48. */
body.tema-on[data-tm-layout="essenziale"] button,
body.tema-on[data-tm-layout="essenziale"] .space-y-2 > div {
  min-height: 48px;
}


/* ─── VETRINA ─────────────────────────────────────────────────
   Griglia di riquadri quadrati. Per chi ha un'offerta parallela e non
   cronologica: musei, siti archeologici, cantine. La domanda del
   pubblico non è «cosa c'è sabato» ma «cosa si può fare qui», e una
   lista verticale risponde male a quella.

   La riga classica è un flex orizzontale [miniatura | testo | pillola]:
   qui diventa una colonna con l'immagine sopra, a tutta larghezza.
   ──────────────────────────────────────────────────────────── */

body.tema-on[data-tm-layout="vetrina"] .space-y-2 {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
  /* `space-y-2` mette margine fra i fratelli: dentro una griglia
     produrrebbe righe di altezza diversa senza motivo. */
  margin-top: 0;
}
body.tema-on[data-tm-layout="vetrina"] .space-y-2 > div { margin-top: 0 !important; }

/* Il "nessuno spettacolo" occupa tutte e due le colonne, o resta una
   striscia storta accanto al vuoto. */
body.tema-on[data-tm-layout="vetrina"] .space-y-2 > div.border-dashed { grid-column: 1 / -1; }

body.tema-on[data-tm-layout="vetrina"] .space-y-2 > div > .flex {
  flex-direction: column;
  align-items: stretch;
  gap: 8px;
}

body.tema-on[data-tm-layout="vetrina"] .space-y-2 .w-9.h-12 {
  width: 100%;
  height: auto;
  aspect-ratio: 1;
  border-radius: 10px;
}
/* Il ripiego 🎭 sta al centro di un quadrato molto più grande della
   casella da 36×48 per cui era dimensionato. */
body.tema-on[data-tm-layout="vetrina"] .space-y-2 .w-9.h-12 > span { font-size: 30px; }

body.tema-on[data-tm-layout="vetrina"] .space-y-2 p.font-semibold { font-size: 13px; }

/* La pillola torna a sinistra: `self-center` la centrerebbe sotto il
   titolo, che in una colonna sembra un errore di allineamento. */
body.tema-on[data-tm-layout="vetrina"] .space-y-2 .rounded-full.self-center {
  align-self: flex-start;
  margin-right: 0;
}


/* ─── AGENDA ──────────────────────────────────────────────────
   Il markup è suo (index.html, `layout === 'agenda'`): qui restano solo
   i dettagli che il markup non può esprimere.
   ──────────────────────────────────────────────────────────── */

/* L'intestazione del mese è `sticky`: senza un fondo pieno il testo
   sotto le scorrerebbe attraverso, e senza margine negativo resterebbe
   incassata nel padding del riquadro invece di toccare il bordo. */
body.tema-on[data-tm-layout="agenda"] .sticky {
  background: var(--tk-r-stone-100);
  backdrop-filter: blur(6px);
}


/* ─── LOCANDINA ───────────────────────────────────────────────
   Un manifesto per schermata, si sfoglia col pollice. Lo scroll-snap
   fa il lavoro che altrove richiederebbe un carosello in JavaScript:
   nessuna libreria, e l'inerzia resta quella nativa del telefono.
   ──────────────────────────────────────────────────────────── */

body.tema-on[data-tm-layout="locandina"] .tm-locandine {
  display: flex;
  flex-direction: column;
  gap: 12px;
  scroll-snap-type: y mandatory;
}

body.tema-on[data-tm-layout="locandina"] .tm-locandina {
  position: relative;
  scroll-snap-align: center;
  border-radius: 20px;
  overflow: hidden;
  /* Sotto c'è la barra di navigazione fissa: un manifesto più alto di
     così finirebbe col pulsante Prenota coperto, che è l'unica cosa che
     il layout deve far toccare. Misurato col telefono da 844px. */
  min-height: 56vh;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  /* Il fondo serve a chi NON ha la locandina: senza immagine resta
     questo, e il titolo grande ci si stacca sopra. Una schermata nera
     sarebbe il modo più veloce di far chiudere la pagina. */
  background: linear-gradient(155deg, var(--tk-primary), var(--tk-textDark) 60%, var(--tk-terracotta));
}

body.tema-on[data-tm-layout="locandina"] .tm-locandina-img {
  position: absolute;
  inset: 0;
  width: 100%; height: 100%;
  object-fit: cover;
}

/* La velatura non è decorazione: senza, su una locandina chiara il
   testo bianco sparisce. È il punto in cui questo layout si rompe. */
body.tema-on[data-tm-layout="locandina"] .tm-locandina-velo {
  position: absolute;
  inset: 0;
  background: linear-gradient(to top, rgba(0,0,0,.82) 0%, rgba(0,0,0,.45) 38%, rgba(0,0,0,.08) 70%);
}

body.tema-on[data-tm-layout="locandina"] .tm-locandina-testo {
  position: relative;
  z-index: 1;
  padding: 16px;
  color: #fff;
  display: flex;
  flex-direction: column;
  gap: 5px;
  text-shadow: 0 1px 8px rgba(0,0,0,.5);
}

/* Il pulsante è l'unica cosa che non deve avere l'ombra del testo:
   è una superficie piena, non una scritta sopra un'immagine. */
body.tema-on[data-tm-layout="locandina"] .tm-locandina-testo button { text-shadow: none; }


/* ─── CALENDARIO ──────────────────────────────────────────────
   Griglia del mese. Le caselle sono quadrate e larghe uguali: un mese
   che comincia di domenica non deve disegnare una griglia diversa da
   uno che comincia di lunedì.
   ──────────────────────────────────────────────────────────── */

body.tema-on[data-tm-layout="calendario"] .tm-cal-intestazione,
body.tema-on[data-tm-layout="calendario"] .tm-cal-griglia {
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 3px;
}
body.tema-on[data-tm-layout="calendario"] .tm-cal-intestazione {
  margin-bottom: 4px;
}
body.tema-on[data-tm-layout="calendario"] .tm-cal-intestazione span {
  text-align: center;
  font-size: 10px;
  font-weight: 700;
  text-transform: uppercase;
  color: var(--tk-r-stone-400);
}

body.tema-on[data-tm-layout="calendario"] .tm-cal-giorno {
  aspect-ratio: 1;
  display: flex;
  align-items: center;
  justify-content: center;
  font-size: 12px;
  border-radius: 8px;
  color: var(--tk-r-stone-400);
  position: relative;
  /* Un giorno senza eventi non è cliccabile ma resta leggibile: chi
     guarda il calendario sta anche solo cercando la data. */
  cursor: default;
}
body.tema-on[data-tm-layout="calendario"] .tm-cal-giorno.ha-eventi {
  color: var(--tk-textDark);
  font-weight: 700;
  background: var(--tk-r-stone-100);
  cursor: pointer;
}
/* Il punto è il segnale vero: dice «qui c'è qualcosa» a colpo d'occhio,
   che è l'unica ragione per cui un calendario batte una lista. */
body.tema-on[data-tm-layout="calendario"] .tm-cal-giorno.ha-eventi::after {
  content: "";
  position: absolute;
  bottom: 4px;
  width: 4px; height: 4px;
  border-radius: 50%;
  background: var(--tk-terracotta);
}
body.tema-on[data-tm-layout="calendario"] .tm-cal-giorno.scelto {
  background: var(--tk-primary);
  color: #fff;
}
body.tema-on[data-tm-layout="calendario"] .tm-cal-giorno.scelto::after { background: #fff; }


/* ─── SPORTELLO ───────────────────────────────────────────────
   Il modulo è la home. Pro loco, parrocchie, pubblico anziano: chi non
   sa navigare un'app qui non deve navigare niente. Caratteri grandi e
   campi alti — non è un vezzo, è la differenza fra prenotare e
   rinunciare.
   ──────────────────────────────────────────────────────────── */

body.tema-on[data-tm-layout="sportello"] input[type="text"],
body.tema-on[data-tm-layout="sportello"] input[type="tel"],
body.tema-on[data-tm-layout="sportello"] input[type="email"],
body.tema-on[data-tm-layout="sportello"] input[type="number"],
body.tema-on[data-tm-layout="sportello"] select,
body.tema-on[data-tm-layout="sportello"] textarea {
  font-size: 17px;
  padding: 14px;
  /* 16px è la soglia sotto cui iOS ingrandisce da solo la pagina al
     fuoco del campo, e poi la lascia ingrandita. */
  min-height: 52px;
}
body.tema-on[data-tm-layout="sportello"] label { font-size: 13px; }
body.tema-on[data-tm-layout="sportello"] form button[type="submit"] { font-size: 16px; padding: 18px 0; }

/* La testata la mette la variante «barra» (vedi TESTATA_PER_LAYOUT):
   qui non serve ripeterla, e ripetendola le due regole si
   sovrascriverebbero a vicenda per ordine di riga invece che per
   intenzione. */


/* ─── RACCONTO ────────────────────────────────────────────────
   Pagina lunga da leggere, con la barra Prenota incollata in basso.
   L'elenco classico è riletto come linea del tempo: stessi elementi,
   un filo verticale a sinistra e i punti sulle date.
   ──────────────────────────────────────────────────────────── */

body.tema-on[data-tm-layout="racconto"] .space-y-2 {
  border-left: 1px solid var(--tk-r-stone-200);
  margin-left: 6px;
  padding-left: 16px;
}
body.tema-on[data-tm-layout="racconto"] .space-y-2 > div {
  box-shadow: none !important;
  background: transparent;
  position: relative;
  padding-left: 0;
  /* La riga classica porta `overflow-hidden`: senza toglierlo, il punto
     della linea del tempo — che sta FUORI dalla riga, sul filo — viene
     ritagliato via e non si vede nessun punto. */
  overflow: visible;
}
body.tema-on[data-tm-layout="racconto"] .space-y-2 > div::before {
  content: "";
  position: absolute;
  left: -21px; top: 22px;
  width: 7px; height: 7px;
  border-radius: 50%;
  background: var(--tk-terracotta);
}

/* `sticky` sembrava la scelta giusta ed era sbagliata: la barra è
   l'ultimo elemento della pagina, quindi resta sotto la piega finché non
   ci si scorre sopra — cioè fa il contrario di quello che promette.
   `fixed` la tiene sotto gli occhi per tutta la lettura, che è l'unica
   ragione per cui questo layout esiste.
   Il fondo è alzato di 84px perché sotto c'è la barra di navigazione
   (`nav.fixed.bottom-0`, py-3 + due righe di etichetta): sovrapporle
   coprirebbe «Torna alla home». */
body.tema-on[data-tm-layout="racconto"] .tm-racconto-barra {
  position: fixed;
  left: 12px;
  right: 12px;
  bottom: calc(84px + env(safe-area-inset-bottom, 0px));
  z-index: 30;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
  margin: 0 auto;
  max-width: calc(28rem - 24px);   /* il guscio dell'app è max-w-md */
  padding: 10px 12px;
  border-radius: 16px;
  background: var(--tk-primary);
  color: #fff;
  box-shadow: 0 8px 28px rgba(0,0,0,.22);
}

/* Con la barra fissa l'ultimo evento resterebbe sotto: lo spazio glielo
   si ridà in fondo alla lista, non con un margine sulla barra. */
body.tema-on[data-tm-layout="racconto"] .space-y-2 { padding-bottom: 56px; }
