/* ============================================================
   Case Bianche — Foglio di stile, bozza 2
   Basato su docs/design/stile-bozza2.md e struttura-bozza2.md
   (designer, 2026-09-22). Aggiorna la bozza 1: nuovi font, nuovo
   blu accento, sequenza di apertura della Home, angoli più squadrati.
   Niente framework: CSS semplice, commentato, facile da modificare.

   I font (Bodoni Moda + Inter) NON si caricano più con @import qui:
   sono caricati con <link> nel <head> di ogni pagina HTML (più
   veloce: il browser può scaricarli in parallelo al resto).
   ============================================================ */

/* ---- Variabili colore (codici esatti da stile-bozza2.md) ---- */
:root{
  --bianco: #FFFFFF;
  --bianco-caldo: #F6F5F2;

  /* Blu — bozza 2: l'accento è cambiato da #2F8FB3 (tirava al verde) a #3174AF (blu pulito) */
  --blu-primario: #13324D;
  --blu-primario-hover: #0E2538;
  --blu-accento: #3174AF;
  --blu-accento-hover: #24578A;
  --blu-scurissimo: #0A1B29;        /* estremo scuro del gradiente dell'apertura */
  --blu-scuro-intermedio: #0E2538;  /* tappa intermedia del gradiente */
  --blu-chiaro-su-scuro: #1C4160;   /* bordi/separatori su sfondo blu scuro */

  --testo-secondario: #5B6670;
  --bordo: #E7E5E1;
  --bordo-su-scuro: #1C4160;
  --segnaposto-bg: #FFF3D6;
  --segnaposto-testo: #4A3B12;
  --errore: #A4302A;
  --successo: #2E7D53;
  --whatsapp: #25D366;

  /* Font scelti da Luca il 2026-09-23: Megrim per i titoli (un solo peso,
     molto sottile: sta bene grande, mai piccolo), Bodoni Moda per tutte
     le altre scritte. Entrambi Google Fonts, licenza SIL OFL. */
  --font-titoli: Megrim, 'Bodoni Moda', Georgia, serif;
  --font-corpo: 'Bodoni Moda', Georgia, 'Times New Roman', serif;

  --radius: 2px; /* era 4px in bozza 1: più squadrato, più razionalista */

  /* ---- Apertura della Home: il fondo schiarisce mentre si scorre ----
     --chiaro va da 0 (blu profondo, in cima) a 1 (bianco, dopo aver
     sceso l'altezza di una foto). Lo aggiorna main.js. Tutti i colori
     qui sotto ne dipendono: fondo, velo, testo e header schiariscono
     insieme, senza che nessuno debba ricordarsene. */
  /* Vale 1 su tutte le pagine (fondo chiaro, menu ben visibile). Solo la
     Home parte da 0, con style="--chiaro:0" sul suo <body>: e' li' che
     main.js lo fa salire mentre si scorre. */
  --chiaro: 1;
  --ap-centro-base: #081F38;
  --ap-mezzo-base:  #061829;
  --ap-bordo-base:  #04111D;
  --ap-testo-base:  #F2F6FA;
  --ap-inchiostro:  #0A2340;

  /* NOTA (correzione bug del 2026-09-23): --ap-centro/--ap-mezzo/--ap-bordo/
     --ap-testo/--ap-fondo NON si dichiarano più qui. In CSS una variabile
     che usa var(--chiaro) si calcola sull'elemento dove è scritta: qui
     dentro :root, --chiaro vale sempre 1 (bianco), anche quando il <body>
     della Home lo porta a 0. Per questo il fondo nasceva bianco invece che
     blu. Le stesse 5 righe sono ora dentro la regola "body{...}" più sotto
     (subito prima di ".fondo-apertura"), dove --chiaro ha il suo valore
     vero: sul <body> della Home (0, poi aggiornato da main.js) e su tutte
     le altre pagine (1, ereditato da :root, invariato). */

  /* ---- "Velo di rivelazione" — interpretazione PREDEFINITA di
     "usa molto l'opaco, che poi diventa trasparente" (stile-bozza2.md,
     sezione E). Luca deve ancora confermarla.
     Per cambiarla in futuro basta modificare questi due numeri (o,
     per spegnere del tutto l'effetto sull'header, la sola riga
     dentro ".header--sopra-apertura" più sotto): non serve cercare
     altrove nel foglio di stile. */
  --velo-opacita: 0.92;         /* velo blu sulle 3 foto dell'apertura */
  --velo-header-opacita: 0.55;  /* velo sull'header quando è sopra l'apertura */
}

/* ---- Reset minimo ---- */
*, *::before, *::after{ box-sizing: border-box; }
html{ scroll-behavior: smooth; }
body{
  margin: 0;
  font-family: var(--font-corpo);
  font-size: 18px;   /* era 16px: Bodoni Moda ha le aste sottili e a corpo
                        piccolo affatica la vista */
  line-height: 1.62;
  color: var(--blu-primario);
  background: var(--bianco);
}
img{ max-width: 100%; display: block; }
a{ color: inherit; }
button{ font-family: inherit; cursor: pointer; }
ul{ margin: 0; padding: 0; list-style: none; }

h1, h2{
  font-family: var(--font-titoli);
  line-height: 1.2;
  margin: 0 0 16px 0;
  font-weight: 500;
}
h1{ font-size: 38px; letter-spacing: .05em; }
h2{ font-size: 30px; letter-spacing: .05em; }
h3{ font-size: 18px; font-weight: 600; font-family: var(--font-corpo); line-height: 1.2; margin: 0 0 16px 0; }
p{ margin: 0 0 16px 0; max-width: 65ch; }
small, .small{ font-size: 14px; }

@media (min-width: 900px){
  h1{ font-size: 46px; }
  h2{ font-size: 32px; }
  h3{ font-size: 22px; }
  p{ font-size: 18px; }
}

/* Eyebrow / etichetta di sezione — nuovo in bozza 2.
   Uso: sopra un H2 di sezione (es. "CAMERE", "IL BAR"). MAI sotto 20px per
   i titoli grandi, ma questa è l'eccezione prevista dal designer: è breve,
   spaziata, quindi resta leggibile anche a 13-14px. */
.eyebrow{
  display: block;
  font-family: var(--font-titoli);
  font-style: italic;
  font-weight: 500;
  text-transform: uppercase;
  letter-spacing: 0.08em;
  font-size: 13px;
  color: var(--blu-primario);
  margin: 0 0 8px 0;
}
@media (min-width: 900px){ .eyebrow{ font-size: 14px; } }
.eyebrow--su-scuro{ color: var(--bianco); }

/* ---- Focus da tastiera SEMPRE visibile (accessibilità) ---- */
a:focus-visible, button:focus-visible, input:focus-visible, textarea:focus-visible, select:focus-visible{
  outline: 2px solid var(--blu-accento);
  outline-offset: 2px;
}

/* ---- Contenitore e griglia ---- */
/* Il margine sinistro riservato al menu laterale (88px) non serve più:
   il menu è nascosto (vedi ".menu-laterale{display:none}" più sotto,
   richiesta di Luca 2026-09-23). Padding simmetrico su entrambi i lati. */
.contenitore{
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 20px;
}
@media (min-width: 900px){
  .contenitore{ padding: 0 24px; }
}
.sezione{
  padding: 64px 0;
}
@media (min-width: 900px){
  .sezione{ padding: 96px 0; }
}
.sezione--alternata{ background: var(--bianco-caldo); }
.sezione--stretta{ padding: 40px 0; }
@media (min-width: 900px){ .sezione--stretta{ padding: 56px 0; } }

/* Separatore a linea sottile (razionalista): scandisce una sezione senza
   sostituire lo spazio bianco, come chiesto in stile-bozza2.md, sez. F */
.separatore{
  border: none;
  border-top: 1px solid var(--bordo);
  margin: 0;
}
.separatore--su-scuro{ border-top-color: var(--bordo-su-scuro); }

.griglia{
  display: grid;
  gap: 24px;
  grid-template-columns: 1fr;
}
@media (min-width: 640px){
  .griglia--2{ grid-template-columns: repeat(2, 1fr); }
}
@media (min-width: 900px){
  .griglia--3{ grid-template-columns: repeat(3, 1fr); }
  .griglia--4{ grid-template-columns: repeat(4, 1fr); }
}

/* Griglia asimmetrica "Camere in evidenza" (ritmo IZZA): 1 foto grande (2
   colonne) + 1 foto media (1 colonna), non più 3-4 foto identiche. */
.griglia-asimmetrica{
  display: grid;
  gap: 24px;
  grid-template-columns: 1fr;
}
@media (min-width: 640px){
  .griglia-asimmetrica{ grid-template-columns: 2fr 1fr; align-items: start; }
}

/* ============================================================
   Header
   ============================================================ */
.header{
  position: sticky;
  top: 0;
  z-index: 100;
  background: var(--bianco);
  border-bottom: 1px solid var(--bordo);
  transition: background-color .25s ease, border-color .25s ease;
}
.header__barra{
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 16px;
  padding: 16px 20px;
}
.header__wordmark{
  font-family: var(--font-titoli);
  font-size: 22px;
  font-weight: 500;
  text-decoration: none;
  color: var(--blu-primario);
  white-space: nowrap;
  transition: color .25s ease;
}
.header__destra{
  display: flex;
  align-items: center;
  gap: 12px;
}
.header__nav{
  display: none;
}
.header__nav ul{
  display: flex;
  gap: 24px;
}
.header__nav a{
  text-decoration: none;
  font-weight: 500;
  padding: 12px 4px;
  min-height: 44px;
  display: flex;
  align-items: center;
  transition: color .25s ease;
}
.header__nav a:hover, .header__nav a[aria-current="page"]{
  color: var(--blu-accento);
}
@media (min-width: 900px){
  .header__nav{ display: block; }
  .header__hamburger{ display: none; }
}

/* Header sopra la sequenza di apertura della Home: variante "opaco che
   diventa trasparente" (predefinita, da confermare — vedi variabili
   sopra). Attivata da poche righe di JavaScript separate dalla sequenza
   di apertura (main.js, sez. "header sopra l'apertura"): se quello script
   non parte, l'header resta semplicemente come sempre — bianco pieno,
   leggibile, invariato. Mai un header invisibile o rotto. */
.header--sopra-apertura{
  position: absolute;
  top: 0; left: 0; right: 0;
  /* RICHIESTA DI LUCA (2026-09-24): via lo sfondo blu anche qui. Un velo
     scuro neutro (non blu) mantiene leggibile il testo bianco sopra le
     foto dell'apertura, senza mai colorare lo sfondo di blu. */
  background: rgba(0,0,0,.32);
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border-bottom-color: transparent;
}
.header--sopra-apertura .header__wordmark,
.header--sopra-apertura .header__nav a{
  color: var(--bianco);
}
.header--sopra-apertura .header__nav a:hover,
.header--sopra-apertura .header__nav a[aria-current="page"]{
  color: rgba(255,255,255,.75);
}
.header--sopra-apertura .header__hamburger{
  border-color: rgba(255,255,255,.4);
  background: transparent;
}
.header--sopra-apertura .header__hamburger span,
.header--sopra-apertura .header__hamburger span::before,
.header--sopra-apertura .header__hamburger span::after{
  background: var(--bianco);
}

/* Selettore lingua */
.lang-selector{
  display: flex;
  gap: 4px;
  border: 1px solid var(--bordo);
  border-radius: var(--radius);
  padding: 2px;
}
.lang-btn{
  border: none;
  background: none;
  min-width: 40px;
  min-height: 36px;
  font-size: 13px;
  font-weight: 600;
  color: var(--testo-secondario);
  border-radius: 1px;
}
.lang-btn[aria-current="true"]{
  background: var(--blu-primario);
  color: var(--bianco);
}
.lang-btn:not([aria-current="true"]):hover{
  background: var(--bianco-caldo);
}

/* Hamburger mobile */
.header__hamburger{
  border: 1px solid var(--bordo);
  background: var(--bianco);
  border-radius: var(--radius);
  width: 44px;
  height: 44px;
  display: flex;
  align-items: center;
  justify-content: center;
}
.header__hamburger span, .header__hamburger span::before, .header__hamburger span::after{
  content: "";
  display: block;
  width: 20px;
  height: 2px;
  background: var(--blu-primario);
  position: relative;
}
.header__hamburger span::before{ top: -6px; position: absolute; }
.header__hamburger span::after{ top: 6px; position: absolute; }

.header__nav-mobile{
  display: none;
  border-top: 1px solid var(--bordo);
  background: var(--bianco);
}
.header__nav-mobile.aperto{ display: block; }
.header__nav-mobile ul{ display: flex; flex-direction: column; padding: 8px 20px 16px; }
.header__nav-mobile a{
  display: block;
  padding: 12px 0;
  text-decoration: none;
  font-weight: 500;
  min-height: 44px;
  display: flex;
  align-items: center;
  border-bottom: 1px solid var(--bordo);
}
.header__nav-mobile a[aria-current="page"]{ color: var(--blu-accento); }
@media (min-width: 900px){
  .header__nav-mobile{ display: none !important; }
}

/* ============================================================
   Bottoni
   ============================================================ */
.btn{
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  min-height: 44px;
  padding: 12px 24px;
  border-radius: var(--radius);
  font-weight: 600;
  font-size: 16px;
  text-decoration: none;
  border: 1px solid transparent;
  transition: background-color .15s ease;
}
.btn--primario{
  background: var(--blu-primario);
  color: var(--bianco);
}
.btn--primario:hover{ background: var(--blu-primario-hover); }
.btn--secondario{
  background: transparent;
  border-color: var(--blu-primario);
  color: var(--blu-primario);
}
.btn--secondario:hover{ background: var(--bianco-caldo); }
/* Bottone accento — nuovo in bozza 2: per la call-to-action "Prenota"
   ripetuta più volte lungo la pagina, stile IZZA (vedi struttura-bozza2.md) */
.btn--accento{
  background: var(--blu-accento);
  color: var(--bianco);
}
.btn--accento:hover{ background: var(--blu-accento-hover); }
.btn--whatsapp{
  background: var(--whatsapp);
  color: var(--bianco);
}
.btn--whatsapp:hover{ filter: brightness(0.95); }
.btn--disabilitato, .btn:disabled{
  background: var(--bordo);
  color: var(--testo-secondario);
  cursor: not-allowed;
}
.btn-gruppo{
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
  margin-top: 24px;
}

/* Bottone WhatsApp flottante — solo linee sottili nere, niente riempimenti */
.whatsapp-flottante{
  position: fixed;
  right: 20px;
  bottom: 20px;
  z-index: 200;
  width: 48px;
  height: 48px;
  min-width: 44px;
  min-height: 44px;
  border-radius: 50%;
  background: rgba(255,255,255,.75);
  border: 1px solid rgba(17,17,17,.35);
  color: #111;
  display: flex;
  align-items: center;
  justify-content: center;
  text-decoration: none;
  box-shadow: 0 2px 8px rgba(0,0,0,.08);
  transition: opacity .2s ease;
}
.whatsapp-flottante:hover{ opacity: .6; }
.whatsapp-flottante svg{ display: block; }

/* ============================================================
   Badge segnaposto — SOLO per questa bozza
   ============================================================ */
.badge-segnaposto{
  display: inline-block;
  background: var(--segnaposto-bg);
  color: var(--segnaposto-testo);
  font-size: 13px;
  font-weight: 600;
  padding: 4px 10px;
  border-radius: var(--radius);
  white-space: normal;
}

/* Messaggi (successo / errore) */
.messaggio{
  display: flex;
  align-items: flex-start;
  gap: 10px;
  padding: 16px;
  border-radius: var(--radius);
  margin-top: 16px;
  font-size: 15px;
}
.messaggio--successo{ background: #EAF5EE; color: var(--successo); border: 1px solid var(--successo); }
.messaggio--errore{ background: #FBEAE9; color: var(--errore); border: 1px solid var(--errore); }
.messaggio--info{ background: var(--bianco-caldo); color: var(--blu-primario); border: 1px solid var(--bordo); }

/* ============================================================
   Sequenza di apertura della Home (bozza 3)
   Rifatta il 2026-09-23 sulla descrizione di Luca. Il contenuto (nome,
   sottotitolo, bottoni, foto) è nell'HTML fin dal primo istante: questo
   è un effetto visivo sopra un hero già completo, non una schermata di
   caricamento.

   0,29s  la C compare, al centro esatto dello schermo
   1,83s  la C scivola a sinistra e fa posto a "ase Bianche"
   1,96s  le lettere compaiono una alla volta (ogni 0,13s)
   4,35s  sale la foto di destra
   5,25s  sale quella centrale
   6,15s  sale quella di sinistra
   Le foto salgono dentro un velo incollato allo schermo: emergono dal
   blu. Scorrendo, il fondo passa da blu profondo a bianco nello spazio
   di un'altezza di foto (--chiaro, aggiornato da main.js).
   ============================================================ */

/* Qui, e non in :root, per la correzione del bug descritta sopra: su
   questo stesso elemento (<body>) --chiaro ha il suo valore vero — 0 (poi
   aggiornato da main.js) sulla Home, 1 (ereditato da :root, invariato) su
   tutte le altre pagine. Ogni colore va dal suo blu profondo (--chiaro:0)
   al bianco (--chiaro:1); --ap-testo va invece dal quasi-bianco al blu
   primario, cosi' il testo resta leggibile sia sul fondo scuro sia,
   piu' avanti nello scorrimento, su quello chiaro. --ap-fondo e' la
   sfumatura radiale approvata da Luca: parte da --ap-centro al centro,
   passa per --ap-mezzo e arriva a --ap-bordo ai margini, usata nella
   regola ".fondo-apertura" qui sotto. */
body{
  --ap-centro: color-mix(in oklab, var(--ap-centro-base), white calc(var(--chiaro) * 100%));
  --ap-mezzo:  color-mix(in oklab, var(--ap-mezzo-base),  white calc(var(--chiaro) * 100%));
  --ap-bordo:  color-mix(in oklab, var(--ap-bordo-base),  white calc(var(--chiaro) * 100%));
  --ap-testo:  color-mix(in oklab, var(--ap-testo-base),  var(--blu-primario) calc(var(--chiaro) * 100%));
  --ap-fondo:  radial-gradient(135% 105% at 50% 44%,
                 var(--ap-centro) 0%, var(--ap-mezzo) 58%, var(--ap-bordo) 100%);

  /* Alone dietro le icone/scritte del menu laterale (specifica designer,
     docs/design/menu-laterale-bozza3.md, §4): scuro quando il menu è
     chiaro (per staccarsi da un fondo/foto chiari), chiaro quando il menu è
     scuro — sempre il contrario del colore dell'icona in quel momento, così
     l'icona si vede comunque, qualunque cosa ci sia sotto (fondo di
     sezione o fotografia). */
  --menu-alone: color-mix(in oklab,
                  rgba(4,17,29,.55)   calc((1 - var(--chiaro)) * 100%),
                  rgba(255,255,255,.65) calc(var(--chiaro) * 100%));
}

/* Fondo e velo: due strati fissi allo schermo, tenuti (non tolti dal DOM)
   perché "main" e ".footer" contano su di loro per restare "position:
   relative" e disegnarsi sopra correttamente (vedi nota bug qui sotto).
   RICHIESTA DI LUCA (2026-09-24): via lo sfondo blu. Con la nuova apertura
   v3 la foto riempie già tutto lo schermo: questi due strati ora sono
   semplicemente bianchi, così se per un istante si vedono (prima che la
   foto si apra, o nella fascia in basso) non lasciano nessun velo colorato,
   solo il bianco della pagina. Non usano più --ap-fondo (che restava blu
   quando --chiaro era vicino a 0). AGGIORNAMENTO 2026-09-24: anche
   l'header sopra l'apertura, i pannelli-foto e il pulsante "Rivedi" non
   usano più --ap-mezzo/--ap-bordo come sfondo (erano ancora blu): ora
   sfondi neutri (nero trasparente o bianco). --ap-fondo/--ap-mezzo/
   --ap-bordo restano definite solo per eventuale uso futuro come colori
   di testo/dettaglio, mai come sfondo. */
.fondo-apertura{
  position: fixed;
  inset: 0;
  z-index: 0;
  pointer-events: none;
  background: var(--bianco);
}
/* CORREZIONE BUG (2026-09-24): due segnalazioni di Luca insieme.
   1) "Non vedo più il video" nel quadrato dell'apertura: ".velo-apertura"
      è "position: fixed" con "z-index: 2" (numero esplicito, positivo).
      Per le regole CSS sull'ordine di disegno, un elemento posizionato con
      z-index positivo si disegna SEMPRE sopra agli elementi posizionati
      con z-index "auto" (come <main>, e quindi tutto il video dentro
      ".apertura__quadro"), qualunque z-index si scriva più in basso dentro
      main: quello z-index conta solo fra fratelli dentro main, mai contro
      un elemento con z-index positivo fuori da main. Risultato: questo
      velo, anche se sottile, copriva il quadrato del video.
   2) "Togli lo sfumato" in fondo alla foto: era proprio la sfumatura
      bianca di questo velo (mask-image), visibile sopra la foto in
      bianco e nero nella fascia bassa dello schermo — su Safari con un
      leggero effetto colorato indesiderato.
   Da quando ".fondo-apertura" è diventato bianco semplice (richiesta di
   Luca del 2026-09-24, via il gradiente blu), questo velo non ha più
   nessuna funzione: sopra un fondo già bianco, un altro bianco che sfuma
   non si vede nella pagina reale, si vedeva solo sopra la foto. Rimosso:
   l'elemento resta nell'HTML (innocuo) ma non disegna più nulla. */
.velo-apertura{
  display: none;
}

/* CORREZIONE BUG (2026-09-23): scorrendo la Home lo schermo diventava
   bianco e vuoto. Causa: ".fondo-apertura" è "position: fixed" con
   "z-index: 0" — per le regole CSS sull'ordine di disegno, un elemento
   POSIZIONATO con z-index 0 (o "auto") si disegna SEMPRE sopra agli
   elementi normali non posizionati (le nostre <section> qui sotto, che
   non hanno "position"), anche se nell'HTML viene prima di loro. Risultato:
   quando --chiaro arriva a 1 il fondo diventa bianco e questo strato fisso
   copre l'intera finestra, sopra a tutte le sezioni sottostanti (da qui
   anche l'indizio del test: il click "passava attraverso" perché lo strato
   ha pointer-events:none, ma restava visibile all'occhio).
   Rimedio: rendere <main> anch'esso un elemento "posizionato" (position:
   relative, senza spostarlo): così rientra nello stesso gruppo di
   ".fondo-apertura" e, venendo dopo nell'HTML, si disegna sopra di esso,
   come deve essere. Non tocca il layout (nessun top/left), non serve
   z-index esplicito. */
main{
  position: relative;
}

.apertura{
  position: relative;
  min-height: 100svh;
  overflow: hidden;   /* le foto partono da sotto: senza questo la pagina
                         nascerebbe alta il doppio */
  color: var(--ap-testo);
}

/* ---- il testo ---- */
.apertura__testo{
  padding-inline: 20px;
  display: flex;
  flex-direction: column;
  align-items: center;
  gap: 22px;
  text-align: center;
}
/* L'alone/gradiente blu che stava qui dietro al nome è stato tolto
   (richiesta di Luca 2026-09-24): sotto al testo ora c'è solo la foto in
   bianco e nero dell'apertura, senza nessuna sfumatura colorata. */

.apertura__titolo{
  margin: 0;
  display: flex;
  justify-content: center;
  align-items: baseline;
  font-family: var(--font-titoli);
  font-weight: 400;
  font-size: clamp(24px, 6.3vw, 76px);
  line-height: 1;
  letter-spacing: .06em;
  white-space: nowrap;
  color: var(--ap-testo);
  /* ombra leggerissima (non un velo colorato): il nome sta su una foto,
     non più su uno sfondo blu pieno, quindi serve un minimo di contrasto
     anche sulle zone chiare della foto (richiesta di Luca 2026-09-24). */
  text-shadow: 0 1px 14px rgba(0,0,0,.35);
  /* spostamento iniziale = metà larghezza di "ase Bianche", misurata dal
     browser (main.js): così la C parte davvero al centro dello schermo */
  transform: translateX(var(--spostamento, 0px));
  animation: ap-centra 1.75s cubic-bezier(.24,.86,.28,1) 1.83s both;
}
.apertura__lettera-c{
  opacity: 0;
  animation: ap-comparire 1.25s ease-out .29s forwards;
}
.apertura__resto > span{
  opacity: 0;
  animation: ap-comparire .92s ease-out var(--d) forwards;
}
.apertura__sottotitolo{
  margin: 0;
  max-width: 50ch;
  font-size: clamp(15px, 1.5vw, 19px);
  letter-spacing: .26em;
  text-transform: uppercase;
  color: color-mix(in oklab, var(--ap-testo) 72%, transparent);
  text-shadow: 0 1px 10px rgba(0,0,0,.3);
  opacity: 0;
  animation: ap-comparire 1.4s ease-out 4.3s forwards;
}
/* ---- Home v3 (aggiornata 2026-09-24, ispirata a kalesmamykonos.com) ----
   La foto parte come una striscia verticale stretta al centro dello
   schermo e si allarga verso sinistra e destra fino a riempire tutto lo
   schermo (clip-path animato: più leggero e più fluido di animare
   larghezza/margini). Sopra, un contenitore centrato in verticale e in
   orizzontale (".apertura__centro") impila il nome e, sotto di lui, il
   riquadro quadrato con il video: MAI sovrapposti, uno sopra l'altro. */
/* CORNICE BIANCA (richiesta di Luca 2026-09-24): la foto a tutto schermo
   sta dentro un margine bianco di circa 1 cm su tutti e quattro i lati.
   Il margine è lo spazio fra questo riquadro (spostato dai bordi con
   "inset") e il bordo dello schermo: lì sotto c'è ".fondo-apertura",
   bianco, quindi si vede la cornice senza aggiungere altri elementi.
   Su telefono la cornice è più stretta (16-20px), su schermi più larghi
   diventa 38px (~1 cm). L'animazione di apertura dal centro resta
   identica, solo dentro al riquadro più piccolo. */
.apertura__foto-full{
  position: absolute;
  inset: 18px;
  z-index: 0;
  overflow: hidden;
  clip-path: inset(0 calc(50% - 5px) 0 calc(50% - 5px));
  animation: ap-foto-allarga 1.6s cubic-bezier(.22,.85,.23,1) .1s both;
}
@media (min-width: 640px){
  .apertura__foto-full{ inset: 38px; }
}
.apertura__foto-full img{
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
  display: block;
  filter: grayscale(1); /* richiesta di Luca: foto in bianco e nero */
}
@keyframes ap-foto-allarga{
  from{ clip-path: inset(0 calc(50% - 5px) 0 calc(50% - 5px)); }
  to{   clip-path: inset(0 0 0 0); }
}

.apertura__centro{
  position: relative;
  z-index: 2;
  min-height: 100svh;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  gap: clamp(18px, 3.4vh, 40px);
  padding: 24px 20px;
}

/* Riquadro quadrato con il video (446×800 verticale in origine, ritagliato
   a quadrato con object-fit: cover). Compare con una dissolvenza dolce
   dopo che la foto si è già allargata, per non sovrapporre due movimenti
   diversi nello stesso istante. */
.apertura__quadro{
  position: relative;
  width: min(52vw, 52svh, 420px);
  aspect-ratio: 1 / 1;
  flex: 0 0 auto;
  overflow: hidden;
  background: var(--bianco-caldo); /* colore di attesa finché il video non carica: bianco, non più blu (richiesta di Luca 2026-09-24) */
  opacity: 0;
  animation: ap-quadro-comparire 1s ease-out 1.35s forwards;
}
.apertura__quadro-video{
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  /* Ritocco a vista: il soggetto (tavolo e divano) sta nella metà
     inferiore del fotogramma verticale originale, quindi l'inquadratura
     si sposta un po' più in basso rispetto al centro puro. */
  object-position: center 62%;
  display: block;
}
@keyframes ap-quadro-comparire{ to{ opacity: 1; } }

/* ---- le tre foto (v1, inerte in v2: vedi nota sopra) ---- */
.apertura__foto{
  position: absolute;
  left: 0;
  right: 0;
  bottom: 0;
  z-index: 1;
  display: flex;
  justify-content: center;
  align-items: flex-end;
  gap: clamp(6px, 1.4vw, 24px);
  padding-inline: 12px;
}
.apertura__pannello{
  position: relative;
  flex: 0 0 auto;
  /* Formato allungato (+50% di altezza, richiesta di Luca): in larghezza
     non c'è spazio, tre foto affiancate riempiono già lo schermo.
     object-fit ritaglia i lati, il soggetto resta al centro. */
  width: min(29vw, 352px);
  aspect-ratio: 3 / 6.1;
  overflow: hidden;
  /* RICHIESTA DI LUCA (2026-09-24): via il blu anche come sfondo
     provvisorio (visibile un istante prima che la foto carichi). */
  background: var(--bianco-caldo);
  transform: translateY(118vh);
  animation: ap-sale 2.6s cubic-bezier(.16,.82,.24,1) var(--ritardo) both;
}
.apertura__pannello img{
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
/* sfalsate: altezze di riposo diverse, tutte dentro la sezione */
.apertura__pannello--sinistra{ margin-bottom: 9vh;   --ritardo: 6.15s; }
.apertura__pannello--centro  { margin-bottom: 0;     --ritardo: 5.25s; }
.apertura__pannello--destra  { margin-bottom: 4.5vh; --ritardo: 4.35s; }

@media (min-width: 900px){
  .apertura__pannello{ width: min(26vw, 320px); aspect-ratio: 3 / 5.2; }
}

@keyframes ap-comparire{ to{ opacity: 1; } }
@keyframes ap-centra{ to{ transform: translateX(0); } }
@keyframes ap-sale{ to{ transform: translateY(0); } }

/* Usata da main.js per far ripartire la sequenza dall'inizio (pulsante
   "Rivedi", presente solo finché la bozza è in revisione). */
.ferma-animazioni, .ferma-animazioni *{ animation: none !important; }

.rivedi-apertura{
  position: fixed;
  top: env(safe-area-inset-top, 0px);
  right: 0;
  z-index: 300;
  margin: 14px;
  padding: 9px 16px;
  border: 1px solid color-mix(in oklab, var(--ap-testo) 30%, transparent);
  border-radius: var(--radius);
  /* RICHIESTA DI LUCA (2026-09-24): via il blu, velo scuro neutro. */
  background: rgba(0,0,0,.45);
  -webkit-backdrop-filter: blur(6px);
          backdrop-filter: blur(6px);
  color: var(--ap-testo);
  font-family: var(--font-corpo);
  font-size: 12px;
  letter-spacing: .18em;
  text-transform: uppercase;
}
.rivedi-apertura:focus-visible{ outline: 2px solid var(--ap-testo); outline-offset: 3px; }

/* Accessibilità (ha sempre la priorità): con "riduci animazioni" attivo
   nel sistema operativo tutto compare fermo e completo. */
@media (prefers-reduced-motion: reduce){
  .apertura__titolo{ animation: none; transform: translateX(0); }
  .apertura__lettera-c,
  .apertura__resto > span,
  .apertura__sottotitolo{ animation: none; opacity: 1; }
  .apertura__pannello{ animation: none; transform: translateY(0); }
  /* Home v3: niente striscia che si allarga né dissolvenza del video,
     tutto compare già nello stato finale. */
  .apertura__foto-full{ animation: none; clip-path: inset(0 0 0 0); }
  .apertura__quadro{ animation: none; opacity: 1; }
}

/* Velo di rivelazione riutilizzabile per altre foto di copertina (Camere,
   Bar, Location). Di default il velo è invisibile (opacity:0): se il
   piccolo script che lo attiva (main.js) non parte, la foto resta
   semplicemente visibile, mai nascosta per errore. */
.velo-rivelazione{ position: relative; overflow: hidden; }
.velo-rivelazione::before{
  content: "";
  position: absolute;
  inset: 0;
  z-index: 1;
  background-color: rgba(19, 50, 77, var(--velo-opacita));
  opacity: 0;
  transition: opacity .5s ease-out;
  pointer-events: none;
}
.velo-rivelazione--pronto::before{ opacity: 1; }
.velo-rivelazione--rivelato::before{ opacity: 0; }
@media (prefers-reduced-motion: reduce){
  .velo-rivelazione::before{ transition: none; opacity: 0 !important; }
}

/* ============================================================
   Hero (usato in Bar; in Home l'hero è ".apertura" qui sopra)
   ============================================================ */
.hero{
  position: relative;
  min-height: 520px;
  display: flex;
  align-items: flex-end;
  color: var(--bianco);
  overflow: hidden;
}
.hero__sfondo{
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.hero__scurimento{
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg, rgba(19,50,77,.15) 0%, rgba(19,50,77,.75) 100%);
}
.hero__contenuto{
  position: relative;
  z-index: 1;
  padding: 48px 20px 64px;
  max-width: 1200px;
  margin: 0 auto;
  width: 100%;
}
.hero__contenuto h1{
  color: var(--bianco);
  font-size: 34px;
  font-weight: 500;
}
.hero__contenuto p{ color: var(--bianco); font-size: 18px; max-width: 50ch; }
@media (min-width: 900px){
  .hero{ min-height: 640px; }
  .hero__contenuto h1{ font-size: 60px; }
}

/* Testata senza foto vera (Capo Verde, La storia — struttura-v2.md §4):
   riusa ".foto-in-arrivo" come sfondo della testata invece di una foto,
   quindi niente sfumatura scura (non serve, lo sfondo è già chiaro) e
   testo scuro invece che bianco, leggibile lo stesso. */
.hero .foto-in-arrivo{
  position: absolute;
  inset: 0;
  aspect-ratio: auto;
  width: 100%;
  height: 100%;
}
.hero--segnaposto .hero__scurimento{ display: none; }
.hero--segnaposto .hero__contenuto h1,
.hero--segnaposto .hero__contenuto p{ color: var(--blu-primario); }

/* ============================================================
   Card camera
   ============================================================ */
.card-camera{
  background: var(--bianco);
  border: 1px solid var(--bordo);
  border-radius: var(--radius);
  overflow: hidden;
  display: flex;
  flex-direction: column;
}
.card-camera__foto-wrapper{
  aspect-ratio: 3 / 4;
  background: var(--bianco-caldo);
  overflow: hidden;
}
.card-camera__foto-wrapper img{
  width: 100%;
  height: 100%;
  object-fit: cover;
}
.card-camera__corpo{
  padding: 20px;
  display: flex;
  flex-direction: column;
  gap: 8px;
  flex: 1;
}
.card-camera__prezzo{
  font-weight: 600;
  color: var(--blu-primario);
}
.card-camera .btn{ margin-top: 12px; align-self: flex-start; }

/* Riquadro "foto in arrivo" (caso limite: foto mancante) */
.foto-in-arrivo{
  aspect-ratio: 3 / 4;
  background: var(--bianco-caldo);
  border: 1px dashed var(--bordo);
  display: flex;
  align-items: center;
  justify-content: center;
  color: var(--testo-secondario);
  font-size: 14px;
  text-align: center;
  padding: 16px;
}

/* Galleria foto verticale (dettaglio camera) */
.galleria{
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(180px, 1fr));
  gap: 16px;
}
.galleria img{
  width: 100%;
  aspect-ratio: 3/4;
  object-fit: cover;
  border-radius: var(--radius);
}

/* Immagine ampia (solo per l'unica foto orizzontale) */
.foto-ampia{
  width: 100%;
  aspect-ratio: 4/3;
  object-fit: cover;
}
@media (min-width: 900px){
  .foto-ampia{ aspect-ratio: 16/9; }
}

/* ============================================================
   Liste informazioni (dettaglio camera, ecc.)
   ============================================================ */
.info-lista{
  display: grid;
  gap: 16px;
  grid-template-columns: 1fr;
  margin: 24px 0;
}
@media (min-width: 640px){
  .info-lista{ grid-template-columns: repeat(2, 1fr); }
}
.info-voce dt{
  font-size: 14px;
  color: var(--testo-secondario);
  margin-bottom: 4px;
}
.info-voce dd{ margin: 0; font-weight: 500; }

/* ============================================================
   Moduli (form)
   ============================================================ */
.modulo{
  max-width: 480px;
}
.campo{
  margin-bottom: 20px;
}
.campo label{
  display: block;
  font-weight: 500;
  margin-bottom: 6px;
}
.campo input[type="text"],
.campo input[type="email"],
.campo input[type="tel"],
.campo input[type="date"],
.campo select,
.campo textarea{
  width: 100%;
  min-height: 44px;
  padding: 10px 12px;
  border: 1px solid var(--bordo);
  border-radius: var(--radius);
  font-family: var(--font-corpo);
  font-size: 16px;
  color: var(--blu-primario);
  background: var(--bianco);
}
.campo textarea{ min-height: 100px; resize: vertical; }
.campo small{ display: block; margin-top: 4px; color: var(--testo-secondario); }
.campo--errore input, .campo--errore select, .campo--errore textarea{
  border-color: var(--errore);
}
.campo__errore-testo{
  color: var(--errore);
  font-size: 14px;
  margin-top: 4px;
  display: block;
}
.scelta-gruppo{
  display: flex;
  gap: 16px;
  flex-wrap: wrap;
}
.scelta-gruppo label{
  display: flex;
  align-items: center;
  gap: 8px;
  border: 1px solid var(--bordo);
  border-radius: var(--radius);
  padding: 10px 16px;
  min-height: 44px;
  cursor: pointer;
  font-weight: 500;
}
.scelta-gruppo input:checked + span,
.scelta-gruppo label:has(input:checked){
  border-color: var(--blu-primario);
}

/* ============================================================
   Menu bar (colazioni / aperitivi)
   ============================================================ */
.voce-menu{
  display: flex;
  justify-content: space-between;
  gap: 16px;
  align-items: flex-start;
  padding: 16px 0;
  border-bottom: 1px solid var(--bordo);
}
.voce-menu__nome{ font-weight: 500; }
.voce-menu__prezzo{ white-space: nowrap; font-weight: 600; }
.voce-menu--con-checkbox{ align-items: center; }
.voce-menu--con-checkbox input[type="checkbox"]{
  width: 20px; height: 20px; margin-right: 12px;
}

.blocco-aperitivi{
  background: var(--bianco-caldo);
  border-radius: var(--radius);
  padding: 24px;
}
.blocco-aperitivi .voce-menu{ border-bottom-color: var(--bordo); cursor: default; }
.nota-non-prenotabile{
  color: var(--testo-secondario);
  font-style: italic;
  margin-top: 16px;
}

/* ============================================================
   Footer
   ============================================================ */
.footer{
  /* CORREZIONE BUG (2026-09-23), stessa causa di "main{position:relative}"
     qui sopra (vedi il commento largo accanto a quella regola): in
     index.html il <footer> è fratello di <main>, non un suo discendente.
     La correzione fatta su <main> non lo riguarda: da solo, senza
     "position", restava sotto ".fondo-apertura" e spariva "bianco su
     bianco" in fondo alla Home. Stesso rimedio, stesso motivo: renderlo
     "posizionato" senza spostarlo. Nelle altre 13 pagine non c'è
     ".fondo-apertura", quindi qui non cambia nulla. */
  position: relative;
  background: var(--blu-primario);
  color: var(--bianco);
  padding: 64px 0 32px;
}
.footer a{ color: var(--bianco); text-decoration: none; }
.footer a:hover{ color: var(--blu-accento); }
.footer__cta{
  padding-bottom: 40px;
  margin-bottom: 40px;
  border-bottom: 1px solid var(--bordo-su-scuro);
}
.footer__griglia{
  display: grid;
  gap: 32px;
  grid-template-columns: 1fr;
  margin-bottom: 32px;
}
@media (min-width: 640px){
  .footer__griglia{ grid-template-columns: repeat(3, 1fr); }
}
.footer__colonna h3{ color: var(--bianco); font-size: 16px; margin-bottom: 16px; }
.footer__colonna ul li{ margin-bottom: 8px; }
.footer__basso{
  border-top: 1px solid rgba(255,255,255,.2);
  padding-top: 24px;
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
  justify-content: space-between;
  align-items: center;
  font-size: 14px;
  color: rgba(255,255,255,.7);
}

/* ============================================================
   Utilità varie
   ============================================================ */
.testo-secondario{ color: var(--testo-secondario); }
.centro{ text-align: center; }
.mt-0{ margin-top: 0; }
.intro-pagina{ max-width: 65ch; }
.link-torna{
  display: inline-block;
  margin-top: 32px;
  font-weight: 500;
}
.sr-only{
  position: absolute;
  width: 1px; height: 1px;
  padding: 0; margin: -1px;
  overflow: hidden;
  clip: rect(0,0,0,0);
  white-space: nowrap;
  border: 0;
}
.didascalia{
  font-size: 14px;
  color: var(--testo-secondario);
  margin-top: 8px;
}


/* ============================================================
   Menu laterale (bozza 3, corretto il 2026-09-23 su specifica del
   designer — docs/design/menu-laterale-bozza3.md, variante A). Luca:
   «il rettangolo a sinistra non deve avere lo sfondo bianco» — tolto
   non solo il colore ma tutto il pannello (sfondo, bordo, sfocatura,
   angoli): resta un elenco di sole icone "a giorno". Colore adattivo
   (var(--ap-testo), la stessa dell'apertura) + un alone/ombra portata
   dietro icone e scritte (var(--menu-alone)) per restare leggibili
   anche sopra una fotografia. Variante B (riga verticale) scartata dal
   designer, non applicata.
   "A comparsa": l'opacita' segue --chiaro, quindi il menu e' invisibile
   sul blu profondo dell'apertura e compare man mano che il fondo
   schiarisce. Sulle altre pagine --chiaro vale 1: e' sempre presente.
   Premendo la prima voce la barra si allarga verso destra e a fianco di
   ogni simbolo compare la sua parola.
   ============================================================ */
/* Menu nascosto su richiesta di Luca (2026-09-23): regola unica, valida
   su tutte le pagine perché questo foglio di stile è condiviso. Scelta
   volutamente minima e facile da annullare (basta togliere questa riga)
   invece di cancellare l'HTML del menu da ogni pagina. Le pagine restano
   raggiungibili dalle 6 tessere della Home e dai link nel footer. */
.menu-laterale{ display: none; }
.menu-laterale{
  --u: 15px;                    /* l'unita' di "spazio" fra le voci */
  position: fixed;
  left: 0;
  top: 50%;
  transform: translateY(-50%);
  z-index: 150;
  width: 64px;
  padding: calc(var(--u) * 1.4) 0;
  background: none;             /* era: color-mix bianco 76% — TOLTO */
  color: var(--ap-testo);       /* era: var(--blu-primario), fisso — ORA ADATTIVO */
  opacity: var(--chiaro);
  overflow: hidden;
  transition: width .38s cubic-bezier(.22,.9,.28,1);
  /* RIMOSSE: border, border-left, border-radius, backdrop-filter */
}
/* mentre e' invisibile non deve nemmeno essere cliccabile */
.menu-laterale--spento{ pointer-events: none; }

.menu-laterale ul{
  display: flex;
  flex-direction: column;
  gap: var(--u);
}
.menu-laterale li{ display: flex; }
/* i tre "spazi" chiesti da Luca fra la lingua e il letto */
.menu-laterale li.stacco{ margin-top: calc(var(--u) * 2); }

.menu-laterale__voce{
  display: flex;
  align-items: center;
  gap: 16px;
  width: 100%;
  padding: 5px 0 5px 19px;
  border: 0;
  background: none;
  color: inherit;
  font-family: var(--font-corpo);
  font-size: 15px;
  letter-spacing: .14em;
  text-transform: uppercase;
  text-decoration: none;
  white-space: nowrap;
  cursor: pointer;
}
.menu-laterale__voce:focus-visible{ outline: 2px solid var(--blu-accento); outline-offset: 2px; }
.menu-laterale__voce{
  text-shadow: 0 1px 3px var(--menu-alone);
}
.menu-laterale__icona{
  flex: 0 0 24px; width: 24px; height: 24px; display: block;
  filter: drop-shadow(0 1px 3px var(--menu-alone));
}
.menu-laterale__sigla{
  flex: 0 0 24px;
  text-align: center;
  font-size: 13px;
  letter-spacing: .04em;
}
.menu-laterale__testo{
  opacity: 0;
  transform: translateX(-8px);
  transition: opacity .28s ease, transform .38s cubic-bezier(.22,.9,.28,1);
}
.menu-laterale--aperto{ width: 232px; }
.menu-laterale--aperto .menu-laterale__testo{ opacity: 1; transform: none; }

/* Apertura anche al passaggio del mouse (richiesta di Luca sulla v1, mai
   realizzata — riportata anche qui, struttura-v2.md, contesto del compito):
   su schermi con mouse il menu si allarga anche solo passandoci sopra,
   senza bisogno di cliccare. Il click (sopra, main.js) resta comunque
   attivo: serve su touch (dove :hover non esiste) e per chi preferisce
   aprirlo e lasciarlo aperto. :focus-within apre il menu anche navigando
   da tastiera (Tab), cosi' le parole non restano nascoste a chi non usa
   il mouse. Non serve JavaScript aggiuntivo: e' puro CSS. */
.menu-laterale:hover,
.menu-laterale:focus-within{ width: 232px; }
.menu-laterale:hover .menu-laterale__testo,
.menu-laterale:focus-within .menu-laterale__testo{ opacity: 1; transform: none; }

/* Voce "Home" (bozza 3, punto F.1 approvato da Luca il 2026-09-23): a
   differenza delle altre, la sua icona non compare nella barra stretta:
   esiste solo quando il menu e' aperto, perche' serve a tornare alla
   Home dalle pagine interne, non a orientarsi nella barra chiusa. */
.menu-laterale li.solo-aperto{ display: none; }
.menu-laterale--aperto li.solo-aperto{ display: flex; }

@media (prefers-reduced-motion: reduce){
  .menu-laterale, .menu-laterale__testo{ transition: none; }
}

/* ============================================================
   Sottolineatura "delicata" sotto l'icona della sezione visibile
   (bozza 3, sez. C del designer) — solo sulla Home. Il wrapper
   (.menu-laterale__icona-cont) serve solo a posizionare la riga esatta-
   mente sotto l'icona. Se il JS che aggiunge/toglie la classe
   "menu-laterale__voce--attiva" non parte, la riga resta invisibile
   (opacity/scaleX a 0): il menu funziona comunque, e' solo un indizio
   visivo in piu'.
   ============================================================ */
.menu-laterale__icona-cont{
  position: relative;
  display: inline-flex;
  flex: 0 0 24px;
}
.menu-laterale__icona-cont .menu-laterale__icona{ flex: 0 0 24px; }
.menu-laterale__sottolineatura{
  position: absolute;
  left: 50%;
  bottom: -4px;                 /* 4px sotto il bordo inferiore dell'icona */
  width: 18px;
  height: 1px;
  background: var(--blu-accento);
  transform: translateX(-50%) scaleX(0);
  transform-origin: center;
  opacity: 0;
  pointer-events: none;
  /* durata di SCOMPARSA (220ms): questa e' la regola che si applica
     quando la classe "--attiva" viene tolta */
  transition: opacity .22s cubic-bezier(.22,1,.36,1),
              transform .22s cubic-bezier(.22,1,.36,1);
}
.menu-laterale__voce--attiva .menu-laterale__sottolineatura{
  opacity: .85;                 /* mai 1 pieno: resta "delicata" */
  transform: translateX(-50%) scaleX(1);
  /* durata di COMPARSA (380ms): si applica quando la classe arriva */
  transition: opacity .38s cubic-bezier(.22,1,.36,1),
              transform .38s cubic-bezier(.22,1,.36,1);
}
@media (prefers-reduced-motion: reduce){
  .menu-laterale__sottolineatura,
  .menu-laterale__voce--attiva .menu-laterale__sottolineatura{
    transition: none;
  }
}

/* ============================================================
   Foto di transizione ("respiro") tra due sezioni della Home — mai la
   stessa impostazione delle sezioni di contenuto, per il ritmo
   pieno/vuoto voluto da Luca (struttura-bozza3.md, sez. A ed E).
   ============================================================ */
.respiro{ padding: 40px 0; }
@media (min-width: 900px){ .respiro{ padding: 64px 0; } }

/* Variante "piccola e fuori centro" — dettaglio corridoio */
.respiro__foto{
  width: 60%;
  max-width: 340px;
  margin-left: auto;
  margin-right: 0;
}
.respiro__foto--sinistra{ margin-left: 0; margin-right: auto; }
.respiro__foto img{
  width: 100%;
  aspect-ratio: 3/4;
  object-fit: cover;
  border-radius: var(--radius);
}
.respiro__didascalia{
  font-family: var(--font-corpo);
  font-style: italic;
  font-size: 14px;
  color: var(--testo-secondario);
  margin-top: 10px;
  text-align: right;
}
.respiro__didascalia--sinistra{ text-align: left; }
@media (min-width: 640px){
  .respiro__foto{ width: 38%; }
}

/* Variante "grande ma solo visiva" — foto cerniera dopo Aperitivi.
   La foto (giardino-corte-copertura) è verticale/quadra, non orizzontale
   come l'unica altra foto panoramica del sito: invece di un ritaglio a
   piena larghezza (che l'avrebbe tagliata troppo in alto/basso), resta
   in un riquadro centrale più contenuto, a piena altezza percepita ma
   senza "bleed" sui bordi dello schermo. */
.respiro__foto-centrale{
  max-width: 720px;
  margin: 0 auto;
}
.respiro__foto-centrale img{
  width: 100%;
  aspect-ratio: 4/5;
  object-fit: cover;
  border-radius: var(--radius);
}
@media (min-width: 900px){
  .respiro__foto-centrale{ max-width: 880px; }
}

/* ============================================================
   Griglia dei sei argomenti — Home v2 (struttura-v2.md, §2)
   Griglia STATICA (3 colonne desktop, 1 mobile — 2026-09-23 era 2), sempre opaca al 100% a
   riposo — impaginazione uguale a masseriamoroseta.it. Sopra, un effetto
   aggiunto: un'onda di dissolvenza in sequenza che attraversa le sei
   tessere una sola volta quando la sezione entra nello schermo (§2.2).
   Dimensione delle tessere: nessuna misura esatta indicata dal designer
   (segnaposto "[da confermare col tester]"); scelto aspect-ratio 3/4,
   coerente con le altre foto verticali già usate nel resto del sito
   (.card-camera__foto-wrapper, .foto-in-arrivo) — scelta dello
   sviluppatore, da confermare.
   ============================================================ */
.argomenti__griglia{
  display: grid;
  grid-template-columns: 1fr;
  gap: 24px;
}
@media (min-width: 768px){
  /* 3 colonne × 2 righe (richiesta di Luca 2026-09-23, era 2×3). */
  .argomenti__griglia{ grid-template-columns: repeat(3, 1fr); gap: 32px; }
}

.argomenti__tile{
  position: relative;
  display: block;
  aspect-ratio: 3 / 4;
  overflow: hidden;
  background: var(--bianco-caldo);
  text-decoration: none;
  color: inherit;
  /* angoli squadrati, apposta (§2.1): stesso ragionamento degli altri
     elementi a piena larghezza di questa revisione */
}
/* Con 3 colonne le tessere sono più strette: aspect-ratio meno alto
   (4/5 invece di 3/4) perché non diventino troppo strette e allungate
   (richiesta di Luca 2026-09-23). Va DOPO ".argomenti__tile" qui sopra
   per vincere nella cascata (stessa importanza, ordine nel file). */
@media (min-width: 768px){
  .argomenti__tile{ aspect-ratio: 4 / 5; }
}
.argomenti__tile img{
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
/* Il componente ".foto-in-arrivo" (riusato per Colazioni/Capo Verde/La
   storia) ha di suo un'altezza fissa (aspect-ratio 3/4): qui viene
   allargato per riempire tutta la tessera, che ha già la sua proporzione
   impostata sopra — evita due "altezze proprie" sommate una sopra
   l'altra. */
.argomenti__tile .foto-in-arrivo{
  position: absolute;
  inset: 0;
  aspect-ratio: auto;
  width: 100%;
  height: 100%;
}
/* Sfumatura scura in basso, solo sulle tessere con foto vera: garantisce
   il contrasto del titolo bianco (§2.3), stesso principio di
   ".hero__scurimento" già in uso su bar.html, qui alta solo circa il 40%
   della tessera invece di tutta l'altezza. */
.argomenti__scrim{
  position: absolute;
  inset: 0;
  background: linear-gradient(180deg,
                rgba(10,27,41,0) 40%,
                rgba(10,27,41,.55) 70%,
                rgba(10,27,41,.88) 100%);
  pointer-events: none;
}
.argomenti__testo{
  position: absolute;
  left: 0; right: 0; bottom: 0;
  z-index: 1;
  padding: 20px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  color: var(--bianco);
}
/* Variante per le tessere senza foto (sfondo chiaro): testo scuro, senza
   sfumatura sopra — su un fondo chiaro il contrasto è già garantito senza
   bisogno di scurire nulla. */
.argomenti__tile--segnaposto .argomenti__testo{ color: var(--blu-primario); }
.argomenti__titolo{
  font-family: var(--font-titoli);
  font-weight: 500;
  font-size: clamp(28px, 5vw, 56px);
  line-height: 1.05;
  letter-spacing: .04em;
}
.argomenti__link{
  font-family: var(--font-corpo);
  font-size: 14px;
  letter-spacing: .04em;
}

/* ---- Onda di dissolvenza in sequenza (§2.2), un solo passaggio ----
   Attivata da main.js aggiungendo ".argomenti--animata" alla sezione
   quando entra nello schermo (IntersectionObserver "one-shot": osserva
   una volta sola e poi smette). Se lo script non parte, le tessere
   restano semplicemente ferme a opacità 1 — mai un problema, solo un
   piccolo effetto in meno da vedere. */
@keyframes argomenti-onda{
  0%, 100%{ opacity: 1; }
  50%{ opacity: .3; }   /* mai 0: non deve mai sembrare un buco (§2.2) */
}
.argomenti--animata .argomenti__tile{
  animation: argomenti-onda .5s ease-out;
}
/* Ritardo progressivo: 150ms fra una tessera e la successiva, nello
   stesso ordine fisso della griglia (Camere→...→La storia). Numeri
   PROPOSTI dal designer (§2.2), non richiesti da Luca — punto di
   partenza reversibile modificando solo questi sei numeri. */
.argomenti--animata .argomenti__tile:nth-child(1){ animation-delay: 0ms; }
.argomenti--animata .argomenti__tile:nth-child(2){ animation-delay: 150ms; }
.argomenti--animata .argomenti__tile:nth-child(3){ animation-delay: 300ms; }
.argomenti--animata .argomenti__tile:nth-child(4){ animation-delay: 450ms; }
.argomenti--animata .argomenti__tile:nth-child(5){ animation-delay: 600ms; }
.argomenti--animata .argomenti__tile:nth-child(6){ animation-delay: 750ms; }
/* Se il puntatore è sopra la tessera nel suo istante di turno, resta a
   opacità 1: non deve mai spegnersi sotto il dito/mouse mentre si decide
   se cliccare (§2.2). */
.argomenti__tile:hover,
.argomenti__tile:focus-visible{
  animation: none !important;
  opacity: 1 !important;
}
@media (prefers-reduced-motion: reduce){
  /* Con "riduci le animazioni" attivo la sequenza non parte affatto
     (§2.4): resta la griglia statica, sempre opaca, senza aggiunte. */
  .argomenti--animata .argomenti__tile{ animation: none; opacity: 1; }
}

/* ============================================================
   BLOCCO AGGIUNTO — estensione v2 (2026-09-24): pagine prototipo
   (prenota, ordina-colazione, admin) e pagine legali scheletro.
   Riusa il piu' possibile i componenti gia' esistenti sopra; qui solo
   cio' che manca. Nessun colore nuovo salvo la fascia rossa di
   sicurezza dell'admin (unico punto ammesso, vedi
   docs/design/struttura-v2-estensione.md §4.1). Nessuna dipendenza
   esterna: solo CSS.
   ============================================================ */

/* Fascia "PROTOTIPO DIMOSTRATIVO" / "DEMO" — sempre visibile, grigio
   chiaro coerente col resto (mai blu pieno), ripetuta in ogni schermata
   del flusso finto. */
.fascia-demo{
  background: var(--bianco-caldo);
  border-top: 1px solid var(--bordo);
  border-bottom: 1px solid var(--bordo);
  color: var(--blu-primario);
  font-family: var(--font-corpo);
  font-weight: 600;
  text-align: center;
  padding: 14px 20px;
  font-size: 15px;
}

/* Fascia rossa di sicurezza — SOLO in admin.html, unico punto del sito
   dove e' ammesso un colore diverso da bianco/blu (avviso, non
   decorazione). */
.fascia-attenzione{
  background: #C0392B;
  color: #fff;
  font-family: var(--font-corpo);
  font-weight: 700;
  text-align: center;
  padding: 16px 20px;
  font-size: 16px;
  line-height: 1.4;
}

/* Passi numerati (prenota.html, ordina-colazione.html): titolo di passo
   in Megrim, come gli altri titoli del sito. */
.passo{ padding: 48px 0; border-top: 1px solid var(--bordo); }
.passo:first-of-type{ border-top: none; }
.passo__titolo{
  font-family: var(--font-titoli);
  font-weight: 400;
  font-size: clamp(22px, 3vw, 30px);
  color: var(--blu-primario);
  margin: 0 0 20px 0;
}

/* Calendario finto (griglia di giorni con 2 stati) */
.calendario-demo{
  display: grid;
  grid-template-columns: repeat(7, 1fr);
  gap: 6px;
  max-width: 420px;
  margin: 16px 0;
}
.calendario-demo__giorno{
  border: 1px solid var(--bordo);
  padding: 8px 4px;
  text-align: center;
  font-size: 13px;
  cursor: pointer;
  background: #fff;
  color: var(--blu-primario);
}
.calendario-demo__giorno[aria-pressed="true"]{
  border-color: var(--blu-accento);
  background: var(--blu-accento);
  color: #fff;
}
.calendario-demo__giorno--occupato{
  background: var(--bianco-caldo);
  color: var(--testo-secondario);
  text-decoration: line-through;
  cursor: not-allowed;
}
.calendario-demo__giorno--occupato span{ display:block; font-size: 10px; text-decoration: none; }

/* Riquadri di scelta grandi (camera nel prototipo prenotazione, "al
   bar"/"in camera" nel prototipo colazioni) */
.scelta-riquadro{
  display: block;
  border: 1px solid var(--bordo);
  padding: 20px;
  cursor: pointer;
  background: #fff;
  text-align: left;
}
.scelta-riquadro[aria-pressed="true"]{ border-color: var(--blu-accento); box-shadow: inset 0 0 0 1px var(--blu-accento); }
.scelta-riquadro__prezzo{ font-weight: 600; color: var(--blu-primario); margin-top: 6px; display:block; }

/* Contapezzi +/- per le voci del menu colazione */
.contapezzi{ display: inline-flex; align-items: center; gap: 10px; }
.contapezzi button{
  width: 30px; height: 30px;
  border: 1px solid var(--bordo);
  background: #fff;
  color: var(--blu-primario);
  font-size: 16px;
  cursor: pointer;
  line-height: 1;
}
.contapezzi button:hover{ border-color: var(--blu-accento); color: var(--blu-accento); }
.contapezzi__valore{ min-width: 18px; text-align: center; font-weight: 600; }

/* Riepilogo prenotazione/ordine */
.riepilogo-box{
  border: 1px solid var(--bordo);
  padding: 24px;
  max-width: 480px;
}
.riepilogo-box dl{ margin: 0; }
.riepilogo-box dt{ font-weight: 500; color: var(--testo-secondario); font-size: 14px; margin-top: 10px; }
.riepilogo-box dd{ margin: 0; font-size: 16px; }
.riepilogo-box .riepilogo-box__totale{ font-weight: 700; font-size: 20px; color: var(--blu-primario); margin-top: 16px; border-top: 1px solid var(--bordo); padding-top: 12px; }

/* Pannello admin: piu' sobrio, bordi sottili, niente foto grandi */
.admin-tab{
  display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 24px;
}
.admin-tab button{
  border: 1px solid var(--bordo);
  background: #fff;
  padding: 10px 18px;
  font-family: var(--font-corpo);
  cursor: pointer;
  color: var(--blu-primario);
}
.admin-tab button[aria-selected="true"]{ border-color: var(--blu-accento); color: var(--blu-accento); font-weight: 600; }
.admin-sezione{ display: none; }
.admin-sezione--attiva{ display: block; }
.tabella-admin{ width: 100%; border-collapse: collapse; margin: 16px 0; }
.tabella-admin th, .tabella-admin td{
  border: 1px solid var(--bordo);
  padding: 10px 12px;
  text-align: left;
  font-size: 15px;
}
.tabella-admin th{ background: var(--bianco-caldo); font-weight: 600; }
.upload-finto{
  border: 1px dashed var(--bordo);
  padding: 32px;
  text-align: center;
  color: var(--testo-secondario);
  max-width: 480px;
}
.admin-miniature{ display: flex; gap: 12px; margin-top: 16px; flex-wrap: wrap; }
.admin-miniature span{
  width: 72px; height: 72px;
  border: 1px solid var(--bordo);
  display: flex; align-items: center; justify-content: center;
  font-size: 11px; color: var(--testo-secondario); text-align:center;
  background: var(--bianco-caldo);
}

/* Pagine legali scheletro */
.fascia-legale{
  background: var(--bianco-caldo);
  border: 1px solid var(--bordo);
  color: var(--blu-primario);
  font-family: var(--font-corpo);
  font-weight: 600;
  padding: 16px 20px;
  margin: 24px 0;
}
.elenco-legale li{ margin-bottom: 10px; }

/* Selettore lingua nel menu laterale (sotto "Home"), stesso trattamento
   del selettore gia' presente nel footer. */
.menu-laterale__lingue{
  display: flex;
  gap: 6px;
  padding: 5px 0 5px 19px;
  font-size: 13px;
  letter-spacing: .04em;
}
.menu-laterale__lingue button{
  border: none; background: none; cursor: pointer;
  color: inherit; opacity: .65; font-family: var(--font-corpo);
  padding: 0;
}
.menu-laterale__lingue button[aria-current="true"]{ opacity: 1; color: var(--blu-accento); font-weight: 600; }

/* Griglia delle 10 camere nel prototipo di prenotazione (prenota.html) */
.scelta-camere-griglia{
  display: grid;
  grid-template-columns: repeat(2, 1fr);
  gap: 16px;
  margin: 20px 0 32px;
}
@media (min-width: 640px){ .scelta-camere-griglia{ grid-template-columns: repeat(3, 1fr); } }
@media (min-width: 900px){ .scelta-camere-griglia{ grid-template-columns: repeat(5, 1fr); } }
.scelta-camere-griglia .scelta-riquadro{ padding: 10px; font-size: 13px; }

/* Selettore ospiti (adulti/bambini) nel prototipo prenotazione */
.selettore-ospiti{ display: flex; flex-wrap: wrap; gap: 24px; margin: 20px 0; }
.selettore-ospiti__voce{ display: flex; align-items: center; gap: 10px; }
