/* ==========================================================================
   Villa Charm and Elegance — strato di tema
   Caricato DOPO custom.css: ridefinisce le variabili del tema originale
   invece di riscriverne le regole. Il tema usa --accent-color 58 volte,
   --primary-color 42 e --white-color 58, quindi cambiare qui ricolora tutto.

   I colori non sono scelti a occhio: sono campionati dalle foto della villa.
   Accanto a ognuno c'e' il valore misurato da cui deriva.
   ========================================================================== */

:root {
    /* --- Palette, misurata dalle foto -------------------------------------
       Blu Canalotto   persiane e cancello         misurati #284C77 / #0C2E5E
       Blu notte       acqua della piscina di sera misurato  #2E5B9A -> fondo
       Turchese        acqua di giorno             misurato  #0FC2D0
       Bianco calce    muro in ombra               misurato  #DAECF4
       Pietra          travertino del piano cucina misurato  #756C65
       --------------------------------------------------------------------- */
    --blu-canalotto: #0F4C81;
    --blu-canalotto-scuro: #0B3A63;
    --blu-notte: #0B2B45;
    --turchese: #12B8C8;
    --turchese-fondo: #0E7C88;
    /* tinta chiara per il testo sopra il blu e sopra le foto:
       5.3:1 sul menu blu, 7.2:1 sul velo scuro dell'hero */
    --turchese-chiaro: #5FDAE6;
    --bianco-calce: #F6F9FA;
    --pietra: #5A6B78;
    --pietra-chiara: #D9DDE0;

    /* --- Rimappatura delle variabili del tema originale ------------------- */
    --primary-color: var(--blu-notte);
    --secondary-color: var(--bianco-calce);
    --text-color: var(--pietra);
    --accent-color: var(--blu-canalotto);
    --white-color: #FFFFFF;
    --divider-color: #0B2B4520;
    --dark-divider-color: #FFFFFF24;
    --error-color: #C0392B;
    --default-font: "Karla", system-ui, -apple-system, "Segoe UI", sans-serif;
    --display-font: "Fraunces", Georgia, "Times New Roman", serif;

    /* --- Ritmo verticale: sezioni che non respirano tutte uguali ---------- */
    --sezione-y: clamp(4.5rem, 8vw, 8rem);
    --sezione-y-stretta: clamp(2.5rem, 4vw, 4rem);

    /* --- Variabili Bootstrap ----------------------------------------------
       Comandano da qui, non dal pannello Theme di Bootstrap Studio. Il
       pannello non legge questi valori (continua a mostrare #0d6efd) e quello
       che ci si scrive finisce in bss-overrides.css, caricato PRIMA di questo
       file: vincerebbe sempre questo blocco. Per spostare la palette nel
       pannello vedi CONSEGNA-BOOTSTRAP-STUDIO.md, "Palette". */
    --bs-primary: #0F4C81;
    --bs-primary-rgb: 15, 76, 129;
    --bs-secondary: #12B8C8;
    --bs-secondary-rgb: 18, 184, 200;
    --bs-body-bg: #FFFFFF;
    --bs-body-color: #5A6B78;
    --bs-emphasis-color: #0B2B45;
    --bs-heading-color: #0B2B45;
    --bs-body-font-family: var(--default-font);
    --bs-body-font-size: 1.0625rem;
    --bs-body-line-height: 1.7;
    --bs-border-color: #D9DDE0;
    --bs-border-radius: 6px;
    --bs-border-radius-sm: 4px;
    --bs-border-radius-lg: 12px;

    /* --- Scala degli angoli ------------------------------------------------
       Non un raggio unico su tutto: un valore uguale ovunque e' uno dei segni
       che tradiscono il tema Bootstrap non ritoccato. Qui la scala e' a tre
       gradini, e non e' arbitraria: il soggiorno della villa ha un grande arco
       circolare in cemento e la piscina ha i bordi raggiati, quindi l'angolo
       morbido viene dall'architettura, non dalla moda.
       Le fasce a tutta larghezza restano a spigolo: arrotondarle
       le staccherebbe dal bordo dello schermo. */
    --angolo-piccolo: 6px;    /* campi, pulsanti, riquadri piccoli */
    --angolo-medio: 12px;     /* immagini, schede, riquadri        */
    --angolo-grande: 20px;    /* immagini grandi e blocchi in rilievo */
    --bs-link-color: #0F4C81;
    --bs-link-color-rgb: 15, 76, 129;
    --bs-link-hover-color: #0B3A63;
}

/* ==========================================================================
   Tipografia
   Fraunces per i titoli (la meta' "Elegance"), Karla per il resto
   (la meta' "Charm", e piu' vicina all'insegna blu gia' sul muro).
   ========================================================================== */

body {
    font-family: var(--default-font);
    font-size: 1.0625rem;
    line-height: 1.7;
    color: var(--pietra);
}

/* La famiglia si applica ovunque; il COLORE solo ai tag nudi, altrimenti
   sovrascrive il bianco che il tema usa sulle sezioni scure e sull'hero. */
h1, h2, h3, h4, h5, h6,
.section-title h1,
.section-title h2,
.hero-content .section-title h1,
.hero-content .section-title h2,
.page-header-box h1 {
    font-family: var(--display-font);
    font-variation-settings: "SOFT" 20, "WONK" 0;
    font-weight: 600;
    letter-spacing: -0.015em;
}

h1, h2, h3, h4, h5, h6 {
    color: var(--blu-notte);
}

/* Sezioni scure, hero e testate: il testo resta bianco */
.dark-section h1, .dark-section h2, .dark-section h3,
.hero-content h1, .hero-content h2, .hero-content h3,
.page-header-box h1, .page-header-box h2 {
    color: var(--white-color);
}

/* Il tema mette i titoli tutti in maiuscolo: con un serif ad alto contrasto
   diventa illeggibile. Li riporto in caso normale e lascio il maiuscoletto
   solo agli occhielli. */
.section-title h1,
.section-title h2,
.hero-content .section-title h1,
.hero-content .section-title h2,
.page-header-box h1 {
    text-transform: none;
}

.section-title h3 {
    font-family: var(--default-font);
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.14em;
    font-size: 0.8125rem;
    color: var(--blu-canalotto);
}

/* Le parole evidenziate nei titoli: il tema le colora di accento */
.section-title h1 span,
.section-title h2 span {
    color: var(--blu-canalotto);
    font-style: italic;
}

/* ...ma sulle sezioni scure (dotazioni, video, banda "date libere") il blu
   Canalotto sul blu notte fa 1,6:1 e la parola sparisce. Li' va il turchese
   chiaro, gia' usato per il testo sopra il blu: 8,7:1 sul blu notte.
   L'hero della home era escluso (scelta del committente): dal 25/09/2026
   anche li' e' turchese, vedi "titolo dell'hero leggibile" in fondo. */
.section-title.dark-section h2 span {
    color: var(--turchese-chiaro);
}
/* ==========================================================================
   Velatura su hero e testate
   Il testo bianco sopra una foto non e' leggibile per conto suo: la villa e'
   bianca, il cielo siciliano e' pieno, e senza velatura il titolo sparisce.
   Gradiente e non tinta piatta, cosi' la foto resta leggibile in alto e il
   testo guadagna contrasto solo dove serve.
   ========================================================================== */

#hero::before,
.hero::before,
.page-header::before {
    background: linear-gradient(
        180deg,
        rgba(11, 43, 69, 0.55) 0%,
        rgba(11, 43, 69, 0.30) 38%,
        rgba(11, 43, 69, 0.72) 100%
    ) !important;
    opacity: 1 !important;
}

/* Ombra morbida sotto il testo dell'hero: regge anche sui punti piu' chiari */
.hero-content h1,
.hero-content h2,
.page-header-box h1 {
    text-shadow: 0 2px 24px rgba(11, 43, 69, 0.45);
}

/* ==========================================================================
   Il turchese
   Misurato #0FC2D0. Su bianco fa 2.4:1, quindi NON e' mai testo ne' linea
   sottile: solo riempimenti grandi, stati hover e elementi sopra le foto.
   Dove serve leggibilita' si usa --turchese-fondo (4.9:1).
   ========================================================================== */

::selection {
    background: var(--turchese);
    color: var(--blu-notte);
}

:focus-visible {
    outline: 3px solid var(--turchese);
    outline-offset: 2px;
    border-radius: 2px;
}

/* ==========================================================================
   Elemento firma: l'onda
   Ripresa dal volantino stampato della villa, dove una curva bianca taglia
   la foto della Scala dei Turchi. Divide le sezioni e si disegna allo scroll.
   ========================================================================== */

.onda {
    display: block;
    width: 100%;
    height: clamp(40px, 5vw, 80px);
    line-height: 0;
    color: var(--white-color);
}

.onda svg {
    display: block;
    width: 100%;
    height: 100%;
}

.onda--calce {
    color: var(--bianco-calce);
}

.onda--notte {
    color: var(--blu-notte);
}

/* il tratto che si disegna allo scroll (lo innesca GSAP in villa.js) */
.onda-tratto {
    fill: none;
    stroke: var(--turchese);
    stroke-width: 2;
    vector-effect: non-scaling-stroke;
}

/* ==========================================================================
   Ritmo delle sezioni
   ========================================================================== */

.sezione-ampia {
    padding-block: var(--sezione-y);
}

.sezione-stretta {
    padding-block: var(--sezione-y-stretta);
}

/* ==========================================================================
   Dati in evidenza (117 mq, 5 camere, 10 posti letto...)
   ========================================================================== */

.dato-chiave {
    display: flex;
    flex-direction: column;
    gap: 0.25rem;
    padding-block: 0.5rem;
}

.dato-chiave__numero {
    font-family: var(--display-font);
    font-size: clamp(2rem, 4vw, 3rem);
    font-weight: 600;
    line-height: 1;
    color: var(--blu-canalotto);
}

.dato-chiave__etichetta {
    font-size: 0.8125rem;
    font-weight: 600;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--pietra);
}

/* ==========================================================================
   Modulo di prenotazione Holidu
   L'iframe si ridimensiona da solo via postMessage (gestito in villa.js).
   ========================================================================== */

.prenota-holidu {
    width: 100%;
    max-width: 1280px;
    margin-inline: auto;
}

.prenota-holidu iframe {
    width: 100%;
    height: 1000px;
    border: none;
    display: block;
}

/* Holidu prevede un messaggio 'resize' per dire la sua altezza. Il 21/09/2026
   non arrivava; il 22/09/2026 si': l'ascoltatore in villa.js adatta il
   riquadro da solo. Queste altezze restano come riserva, se il messaggio
   smette di arrivare, e sono quelle che fanno stare il modulo senza tagliarlo. */
@media only screen and (max-width: 991px) {
    .prenota-holidu iframe { height: 1150px; }
}

@media only screen and (max-width: 767px) {
    .prenota-holidu iframe { height: 1250px; }
}

@media only screen and (max-width: 420px) {
    .prenota-holidu iframe { height: 1320px; }
}

.prenota-holidu__fallback {
    padding: 1.5rem;
    border: 1px solid var(--pietra-chiara);
    background: var(--bianco-calce);
}

/* Elenchi di condizioni: niente pallini, un trattino turchese al posto loro */
.elenco-condizioni {
    list-style: none;
    padding-left: 0;
    margin-top: 1rem;
}

.elenco-condizioni li {
    position: relative;
    padding-left: 1.75rem;
    margin-bottom: 0.75rem;
    line-height: 1.6;
}

.elenco-condizioni li::before {
    content: "";
    position: absolute;
    left: 0;
    top: 0.72em;
    width: 1rem;
    height: 2px;
    background: var(--turchese);
}

/* Le due sezioni della pagina di prenotazione */
.page-prenotazione {
    background: var(--white-color);
}

.page-condizioni {
    background: var(--bianco-calce);
}

.page-condizioni h3 {
    font-size: 1.25rem;
    margin-bottom: 0;
}

/* ==========================================================================
   Contrasti da correggere dopo il cambio palette
   Il tema usava un accento arancione: certi testi erano leggibili solo grazie
   a quello. Con il blu alcune combinazioni diventano blu-su-blu.
   ========================================================================== */

/* Menu mobile (SlickNav): il pannello ha sfondo --accent-color, quindi il
   testo in hover non puo' essere --primary-color. */
.slicknav_nav a,
.slicknav_nav .slicknav_row,
.slicknav_menu .slicknav_btn {
    color: var(--white-color);
}

/* NON toccare ::after sulle voci di menu: il tema ci disegna dentro le frecce
   dei sottomenu (content '\f107' di Font Awesome). Una regola ::after qui le
   cancella. L'hover si fa solo col colore.

   Il turchese pieno come testo farebbe 3.7:1 sul blu del menu, sotto la soglia
   di 4.5. --turchese-chiaro fa 5.3:1 sul menu e 7.2:1 sopra la foto. */
/* Desktop: una pillola attorno alla voce. Il contorno e' un box-shadow inset
   e non un border, cosi' non aggiunge due pixel di larghezza e le voci non
   ballano quando il mouse ci passa sopra.
   Il padding del tema e' 12px 15px !important: lo stringo un po' cosi' la
   pillola sta piu' aderente alla parola. */
.main-menu .navbar-nav > li > a {
    padding: 8px 14px !important;
    border-radius: 999px;
    transition: background-color 220ms ease, box-shadow 220ms ease, color 220ms ease;
}

.main-menu .navbar-nav > li > a:hover,
.main-menu .navbar-nav > li > a:focus,
.main-menu .navbar-nav > li:hover > a {
    background-color: rgba(18, 184, 200, 0.16);
    box-shadow: inset 0 0 0 1px var(--turchese-chiaro);
    color: var(--white-color);
}

/* Le voci dentro la tendina restano piatte: li' la pillola sarebbe rumore.
   Fondo blu, quindi il testo in hover va chiaro (5.3:1), mai blu su blu. */
.main-menu .navbar-nav ul li a:hover,
.main-menu .navbar-nav ul li a:focus,
.main-menu .navbar-nav ul li:hover > a {
    color: var(--turchese-chiaro);
    background-color: rgba(18, 184, 200, 0.14);
    box-shadow: none;
}

/* La tendina dei sottomenu: angoli morbidi come il resto del sito */
.main-menu .navbar-nav ul ul,
.main-menu ul ul {
    border-radius: var(--angolo-medio);
    overflow: hidden;
    box-shadow: 0 10px 30px rgba(11, 43, 69, 0.22);
}

/* ==========================================================================
   Selettore di lingua nella barra
   Sta FUORI da .main-menu di proposito: dentro, la regola del tema
   ".main-menu ul ul { visibility: hidden }" colpiva anche la sua tendina e
   non si apriva piu'.
   ========================================================================== */

.navbar > .container > .selettore-lingua,
.navbar .selettore-lingua {
    margin-left: 1.5rem;
}

@media (max-width: 991px) {
    .navbar .selettore-lingua {
        margin-left: auto;
        margin-right: 0.75rem;
    }
}

.slicknav_nav a,
.slicknav_nav .slicknav_row,
.slicknav_menu .slicknav_btn {
    color: var(--white-color);
}

.slicknav_nav a:hover,
.slicknav_nav a:focus,
.slicknav_nav .slicknav_row:hover,
.slicknav_nav .slicknav_row:focus,
.slicknav_nav .slicknav_item:hover > a {
    color: var(--turchese-chiaro) !important;
    background-color: transparent;
}

.header-sticky.active .main-menu .navbar-nav .nav-link:hover,
.header-sticky.active .main-menu .navbar-nav .nav-item:hover > .nav-link {
    color: var(--blu-canalotto);
}

/* La tendina dei sottomenu ha fondo BLU (--accent-color), non chiaro:
   il testo in hover va tenuto chiaro. La regola sta piu' sopra, insieme
   alle altre del menu. */

/* Icone social nell'hero.
   Il tema colora l'elemento <i>, non il link (.hero-social-media ul li i:hover),
   e lo porta a --accent-color: blu scuro sopra una foto, invisibile.
   Qui si colpisce anche la <i>, altrimenti la regola del tema vince. */
.hero-social-media ul li a,
.hero-social-media ul li a i,
.hero-social-media a {
    color: var(--white-color);
    opacity: 1;
    text-shadow: 0 1px 10px rgba(11, 43, 69, 0.6);
    transition: color 200ms ease, transform 200ms ease;
}

.hero-social-media ul li a:hover,
.hero-social-media ul li a:hover i,
.hero-social-media ul li i:hover,
.hero-social-media a:hover {
    color: var(--turchese-chiaro);
    transform: translateY(-2px);
}

/* Telefono in testata: sta sopra la foto dell'hero, e il tema lo porta a
   --accent-color in hover. Stessa trappola del footer. */
.header-contact-box-content h3,
.header-contact-box-content h3 a {
    color: var(--white-color);
    text-shadow: 0 1px 10px rgba(11, 43, 69, 0.55);
}

.header-contact-box-content h3 a:hover,
.header-contact-box-content h3 a:focus {
    color: var(--turchese-chiaro);
}

/* Quando l'intestazione diventa opaca allo scroll il fondo e' chiaro:
   li' il telefono torna scuro e l'ombra non serve. */
.header-sticky.active .header-contact-box-content h3,
.header-sticky.active .header-contact-box-content h3 a {
    color: var(--blu-notte);
    text-shadow: none;
}

.header-sticky.active .header-contact-box-content h3 a:hover {
    color: var(--blu-canalotto);
}

/* Stessa trappola ovunque il fondo sia scuro */
.dark-section a:hover,
.cta-box a:hover,
.our-experience a:hover {
    color: var(--turchese-chiaro);
}

.hero-social-media h3 {
    text-shadow: 0 1px 10px rgba(11, 43, 69, 0.6);
}

/* ==========================================================================
   I tab delle camere
   Nel tema sono testo nudo separato da pallini: non si capisce che sono
   cliccabili. Diventano pillole, come le voci del menu.
   ========================================================================== */

.property-tab-nav ul li .nav-link {
    padding: 0.55rem 1.4rem !important;
    border-radius: 999px;
    color: var(--blu-notte);
    box-shadow: inset 0 0 0 1px var(--pietra-chiara);
    background: var(--white-color);
    cursor: pointer;
    transition: background-color 200ms ease, color 200ms ease, box-shadow 200ms ease;
}

.property-tab-nav ul li .nav-link:hover,
.property-tab-nav ul li .nav-link:focus-visible {
    color: var(--blu-canalotto);
    box-shadow: inset 0 0 0 1px var(--blu-canalotto);
    background: rgba(15, 76, 129, 0.06);
}

.property-tab-nav ul li .nav-link.active {
    background: var(--blu-canalotto);
    color: var(--white-color);
    box-shadow: inset 0 0 0 1px var(--blu-canalotto);
}

/* Il tema mette un pallino fra un tab e l'altro: e' un ::before sul .nav-link
   (posizionato a right:-34px), non un ::after. Con le pillole e' rumore. */
.property-tab-nav ul li .nav-link::before,
.property-tab-nav ul li .nav-link::after {
    display: none !important;
    content: none !important;
}

.property-tab-nav ul {
    display: flex;
    flex-wrap: wrap;
    gap: 0.6rem;
    justify-content: center;
}

/* ==========================================================================
   Il riquadro del modulo Holidu
   Il widget cambia tutta la sua schermata quando si apre "Ospiti" o il
   calendario: senza una cornice non si capisce dove finisce il sito e dove
   comincia lo strumento di prenotazione.
   ========================================================================== */

.prenota-holidu {
    border: 1px solid var(--pietra-chiara);
    border-radius: 6px;
    background: var(--white-color);
    box-shadow: 0 2px 24px rgba(11, 43, 69, 0.08);
    overflow: hidden;
}

/* Barra di intestazione: dice a chiare lettere che da qui in giu' e' Holidu */
.prenota-holidu__testata {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    flex-wrap: wrap;
    padding: 0.875rem 1rem;
    background: var(--bianco-calce);
    border-bottom: 1px solid var(--pietra-chiara);
    font-size: 0.8125rem;
    color: var(--pietra);
}

.prenota-holidu__testata strong {
    color: var(--blu-notte);
    font-weight: 600;
}

.prenota-holidu__sicuro::before {
    content: "\f023"; /* lucchetto, Font Awesome */
    font-family: "Font Awesome 6 Free", "Font Awesome 5 Free";
    font-weight: 900;
    margin-right: 0.4rem;
    color: var(--turchese-fondo);
}

/* Il contenuto dentro l'iframe e' di Holidu e NON si puo' stilare da qui:
   e' un altro dominio (widget.holiduhost.com) e la same-origin policy blocca
   qualunque selettore, !important compreso. Verificato: contentDocument e'
   null e ogni scrittura alza SecurityError.

   Nel loro markup i contenitori sono "md:px-16", cioe' Tailwind mette il
   padding orizzontale solo da 768px in su: sotto quella soglia il contenuto
   arriva a filo. Lo compensiamo con il padding dell'iframe, che e' l'unica
   leva disponibile da fuori.

   Per colori e forma del widget si agisce invece dal pannello Holidu
   (themeColor, themeShape, colorPrimary): quelli sono suoi parametri. */
.prenota-holidu iframe {
    border-radius: 0 0 6px 6px;
    box-sizing: border-box;
    background: var(--white-color);
    padding-inline: 10px;
    /* Il CSS di Holidu ha html{scrollbar-gutter:stable}: sui computer con
       barre di scorrimento che occupano spazio (Windows) il modulo lascia
       una striscia vuota a destra. villa.js misura quella larghezza e la
       mette in --barra-holidu: la stessa si aggiunge a sinistra. Sui
       telefoni vale 0. */
    padding-left: calc(10px + var(--barra-holidu, 0px));
    /* Holidu non mette spazio sopra la barra di ricerca: con gli angoli
       arrotondati il bordo toccava il margine superiore del riquadro.
       villa.js aggiunge questo padding all'altezza che manda Holidu. */
    padding-top: 14px;
}

/* Sotto i 768px Holidu non mette padding: serve il nostro */
@media (max-width: 767.98px) {
    .prenota-holidu iframe {
        padding-inline: 16px;
        padding-left: calc(16px + var(--barra-holidu, 0px));
    }
    .prenota-holidu__testata {
        padding-inline: 16px;
    }
}

/* ==========================================================================
   Mappa
   ========================================================================== */

.mappa-villa {
    position: relative;
    width: 100%;
    aspect-ratio: 16 / 9;
    min-height: 320px;
    border: 1px solid var(--pietra-chiara);
    border-radius: 6px;
    overflow: hidden;
}

.mappa-villa iframe {
    width: 100%;
    height: 100%;
    border: 0;
    display: block;
}

/* ==========================================================================
   Angoli morbidi
   Applicati per ruolo, non a tappeto. Le fasce a tutta larghezza, l'hero e le
   testate di pagina restano a spigolo perche' toccano il bordo dello schermo.
   ========================================================================== */

/* Immagini dentro un contenitore: il raggio va sul contenitore, che ha
   overflow:hidden, altrimenti l'effetto di reveal esce dagli angoli */
.image-anime,
.reveal,
.apartment-image,
.amenities-img,
.project-img,
.post-featured-image,
.team-image,
.photo-gallery,
.video-gallery-image,
.property-tab-image,
.about-us-image-box-1 figure,
.about-us-image-box-2 figure,
.why-choose-img,
.our-experience-image figure,
.project-entry-image {
    border-radius: var(--angolo-medio);
    overflow: hidden;
}

.about-us-images figure,
.intro-video-box figure {
    border-radius: var(--angolo-grande);
    overflow: hidden;
}

/* Schede e riquadri */
.apartment-item,
.our-amenities-item,
.features-item,
.project-item,
.post-item,
.amenities-item,
.property-type-item,
.experience-counter-item,
.testimonial-item,
.cta-box,
.sidebar-cta-box,
.query-box,
.amenities-entry-box {
    border-radius: var(--angolo-medio);
}

/* Pulsanti e campi */
.btn-default,
.btn-default-white,
.readmore-btn,
button,
input:not([type="checkbox"]):not([type="radio"]),
textarea,
select,
.form-control {
    border-radius: var(--angolo-piccolo);
}

/* L'accordion delle domande */
.accordion-item,
.accordion-button,
.accordion-button:not(.collapsed) {
    border-radius: var(--angolo-piccolo);
}

/* Le icone tonde restano tonde */
.icon-box,
.dato-chiave__numero {
    border-radius: inherit;
}

/* Niente angoli su cio' che tocca il bordo dello schermo */
#hero,
.hero,
.page-header,
.main-header,
.main-footer,
.google-map,
section > .container-fluid > .row > [class*="col-"] > .google-map-iframe:not(.mappa-villa) {
    border-radius: 0;
}

/* ==========================================================================
   Accessibilita' e movimento
   ========================================================================== */

@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: .01ms !important;
        animation-iteration-count: 1 !important;
        transition-duration: .01ms !important;
        scroll-behavior: auto !important;
    }
}

/* ==========================================================================
   Il logo della villa
   Il marchio e' un adesivo: macchia blu, lettere bianche in negativo. Nella
   versione chiara la macchia diventa bianca e le lettere blu, cosi' funziona
   sia sopra la foto dell'hero sia sul footer blu notte; su fondo bianco la
   macchia sparisce e resta la sola scritta blu.
   ========================================================================== */

.navbar-brand img {
    height: 72px;
    width: auto;
    max-width: none;
}

@media (max-width: 991.98px) {
    .navbar-brand img { height: 54px; }
}

/* ==========================================================================
   I dischi blu sfalsati dietro le icone
   Il tema piazza dietro ogni icona un disco di --accent-color largo 40px
   ancorato a top:0 right:0. Nato come accento arancione che spuntava appena,
   in blu pieno diventa una macchia storta dietro un disegno a filo. Al suo
   posto una piastrella centrata con lo stesso raggio delle schede.
   ========================================================================== */

.about-detail-item .icon-box,
.property-type-item .icon-box,
.features-item .icon-box,
.amenities-item .icon-box,
.experience-counter-item .icon-box,
.why-choose-list-item .icon-box,
.amenities-entry-item .icon-box,
.contact-info-item .icon-box {
    display: inline-flex !important;
    align-items: center;
    justify-content: center;
    width: 64px;
    height: 64px;
    padding: 0 !important;
    flex: 0 0 auto;
    background-color: rgba(18, 184, 200, 0.13);
    box-shadow: inset 0 0 0 1px rgba(15, 76, 129, 0.12);
    border-radius: var(--angolo-medio);
    transition: background-color 260ms ease, box-shadow 260ms ease;
}

.about-detail-item .icon-box::before,
.property-type-item .icon-box::before,
.features-item .icon-box::before,
.amenities-item .icon-box::before,
.experience-counter-item .icon-box::before,
.why-choose-list-item .icon-box::before,
.amenities-entry-item .icon-box::before,
.contact-info-item .icon-box::before {
    display: none !important;
    content: none !important;
}

.about-detail-item .icon-box img,
.property-type-item .icon-box img,
.features-item .icon-box img,
.amenities-item .icon-box img,
.experience-counter-item .icon-box img,
.why-choose-list-item .icon-box img,
.amenities-entry-item .icon-box img,
.contact-info-item .icon-box img {
    position: static !important;
    width: auto !important;
    max-width: 34px !important;
    height: auto;
}

/* Passando sulla scheda la piastrella si riempie e l'icona va in negativo */
.features-item:hover .icon-box,
.amenities-item:hover .icon-box,
.why-choose-list-item:hover .icon-box,
.amenities-entry-item:hover .icon-box,
.property-type-item:hover .icon-box {
    background-color: var(--blu-canalotto);
    box-shadow: inset 0 0 0 1px var(--blu-canalotto);
}

.features-item:hover .icon-box img,
.amenities-item:hover .icon-box img,
.why-choose-list-item:hover .icon-box img,
.amenities-entry-item:hover .icon-box img,
.property-type-item:hover .icon-box img {
    filter: brightness(0) invert(1);
}

/* La scheda contatti si scurisce tutta al passaggio: qui la piastrella
   fa il contrario, diventa bianca e l'icona resta blu. */
.contact-info-item:hover .icon-box {
    background-color: var(--white-color);
    box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.9);
}

/* Al passaggio il tema porta a bianco titolo e paragrafi della scheda
   contatti, ma non i link dentro i paragrafi: telefono ed e-mail restavano
   blu sul blu (1:1) e sparivano. La transizione è sul link a riposo, così
   il colore sfuma insieme al resto della scheda invece di scattare. */
.contact-info-content a {
    transition: color 0.3s ease-in-out;
}

.contact-info-item:hover .contact-info-content a {
    color: var(--white-color);
}

.contact-info-item:hover .contact-info-content a:hover {
    text-decoration: underline;
}

/* Schede camera ("Posti letto", "Letti", "Aria condizionata", "TV"): il tema
   metteva l'icona da 40px accanto al testo; con la piastrella da 64px non ci
   sta piu', il testo va a capo sotto e restava attaccato (0px, e su telefono
   a volte 12 o 14). Qui la piastrella sta sopra come nelle schede servizi,
   con la stessa distanza del resto del sito: 20px, 10px su telefono.
   align-content: se la scheda accanto va su due righe, la riga si alza e
   senza questo lo spazio in piu' finiva fra icona e titolo (22px su "TV"). */
.property-type-item {
    align-content: flex-start;
}

.property-type-item .icon-box {
    margin: 0 0 20px 0;
}

.property-type-content {
    width: 100%;
}

@media (max-width: 767.98px) {
    .property-type-item .icon-box,
    .contact-info-item .icon-box {
        margin-bottom: 10px;
    }
}

@media (max-width: 767.98px) {
    .about-detail-item .icon-box,
    .property-type-item .icon-box,
    .features-item .icon-box,
    .amenities-item .icon-box,
    .experience-counter-item .icon-box,
    .why-choose-list-item .icon-box,
    .amenities-entry-item .icon-box,
    .contact-info-item .icon-box {
        width: 54px;
        height: 54px;
    }
    .about-detail-item .icon-box img,
    .property-type-item .icon-box img,
    .features-item .icon-box img,
    .amenities-item .icon-box img,
    .experience-counter-item .icon-box img,
    .why-choose-list-item .icon-box img,
    .amenities-entry-item .icon-box img,
    .contact-info-item .icon-box img {
        max-width: 28px !important;
    }
}

/* ==========================================================================
   Le schede dei consigli
   Due difetti: il pulsante "Continua" seguiva il testo, quindi con titoli di
   lunghezza diversa finiva a tre altezze diverse; e il riempimento blu
   dell'hover e' un rettangolo che sbordava dagli angoli tondi della scheda.
   ========================================================================== */

.post-item {
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

.post-item-content {
    flex: 1 1 auto;
}

.post-item-btn {
    margin-top: auto;
}

.post-item-btn a,
.post-item-btn a::before {
    border-radius: 0 0 var(--angolo-medio) var(--angolo-medio);
}

/* Stessa cosa per le schede dei servizi, che hanno lo stesso pulsante */
.amenities-item {
    display: flex;
    flex-direction: column;
    overflow: hidden;
}

.amenities-item .amenities-item-content {
    flex: 1 1 auto;
}

.amenities-item .features-btn {
    margin-top: auto;
}

/* ==========================================================================
   I tab di "chi siamo"
   Stesso componente di quelli delle camere, ma con un'altra classe: erano
   rimasti testo nudo separato da pallini mentre gli altri erano gia' pillole.
   ========================================================================== */

.vision-mission-nav ul li .nav-link {
    padding: 0.55rem 1.4rem !important;
    border-radius: 999px;
    color: var(--blu-notte);
    box-shadow: inset 0 0 0 1px var(--pietra-chiara);
    background: var(--white-color);
    cursor: pointer;
    transition: background-color 200ms ease, color 200ms ease, box-shadow 200ms ease;
}

.vision-mission-nav ul li .nav-link:hover,
.vision-mission-nav ul li .nav-link:focus-visible {
    color: var(--blu-canalotto);
    box-shadow: inset 0 0 0 1px var(--blu-canalotto);
    background: rgba(15, 76, 129, 0.06);
}

.vision-mission-nav ul li .nav-link.active {
    background: var(--blu-canalotto);
    color: var(--white-color);
    box-shadow: inset 0 0 0 1px var(--blu-canalotto);
}

.vision-mission-nav ul li .nav-link::before,
.vision-mission-nav ul li .nav-link::after {
    display: none !important;
    content: none !important;
}

.vision-mission-nav ul {
    display: flex;
    flex-wrap: wrap;
    gap: 0.6rem;
}

/* Il tema stonda i campi con un selettore piu' specifico del mio, quindi
   la regola generica qui sopra non arrivava al modulo dei contatti. */
.contact-form .form-control,
.contact-form input,
.contact-form textarea,
.sidebar-search input,
.newsletter-form input,
.comment-form input,
.comment-form textarea {
    border-radius: var(--angolo-piccolo);
}

/* Nella pagina dei consigli le schede hanno un livello in piu' (.post-item-body)
   che in home non c'e': senza renderlo anch'esso una colonna flessibile il
   pulsante restava attaccato al testo e le schede finivano scalinate. */
.post-item-body {
    display: flex;
    flex-direction: column;
    flex: 1 1 auto;
}

.post-item-body .post-item-content {
    flex: 1 1 auto;
}

/* Impaginazione: il tema li fa quadrati con border-radius: 0px esplicito */
.page-pagination ul li a,
.page-pagination ul li span {
    border-radius: var(--angolo-piccolo);
}

/* Immagini grandi delle pagine di dettaglio, rimaste a spigolo vivo */
.amenities-featured-img figure,
.post-featured-image figure,
.project-entry-image figure,
.blog-single-image figure,
.amenities-single-image figure,
.service-featured-img figure {
    border-radius: var(--angolo-medio);
    overflow: hidden;
}

/* ==========================================================================
   Le icone sono glifi Font Awesome, non piu' immagini
   Font Awesome 6.7.2 Free era gia' nel progetto (CSS + webfont) e il tema lo
   usa per le frecce dei sottomenu. Un glifo dentro una scatola flex sta al
   centro per costruzione: gli SVG del tema portavano ognuno il proprio
   margine interno, per questo sembravano sempre un po' storti.
   ========================================================================== */

.about-detail-item .icon-box i,
.property-type-item .icon-box i,
.features-item .icon-box i,
.amenities-item .icon-box i,
.experience-counter-item .icon-box i,
.why-choose-list-item .icon-box i,
.amenities-entry-item .icon-box i,
.contact-info-item .icon-box i {
    font-size: 26px;
    line-height: 1;
    color: var(--blu-canalotto);
    transition: color 260ms ease;
}

.features-item:hover .icon-box i,
.amenities-item:hover .icon-box i,
.why-choose-list-item:hover .icon-box i,
.amenities-entry-item:hover .icon-box i,
.property-type-item:hover .icon-box i {
    color: var(--white-color);
}

/* La scheda contatti si scurisce tutta: qui la piastrella diventa bianca e
   il glifo deve restare blu, non seguire il resto del testo. */
.contact-info-item:hover .icon-box i {
    color: var(--blu-canalotto);
}

@media (max-width: 767.98px) {
    .about-detail-item .icon-box i,
    .property-type-item .icon-box i,
    .features-item .icon-box i,
    .amenities-item .icon-box i,
    .experience-counter-item .icon-box i,
    .why-choose-list-item .icon-box i,
    .amenities-entry-item .icon-box i,
    .contact-info-item .icon-box i {
        font-size: 22px;
    }
}

/* Telefono in testata: cerchio blu pieno, glifo bianco */
.header-contact-box .icon-box i {
    font-size: 14px;
    line-height: 1;
    color: var(--white-color);
}

/* Telefono nella sezione "chi siamo": cerchio bianco, glifo blu, che si
   inverte al passaggio come faceva l'immagine con il filtro. */
.about-contact-box .icon-box i {
    font-size: 20px;
    line-height: 1;
    color: var(--blu-canalotto);
    transition: color 300ms ease;
}

.about-contact-box:hover .icon-box i {
    color: var(--white-color);
}

/* ==========================================================================
   Angoli rimasti vivi
   Non erano una scelta: il controllo di coerenza girava su un elenco di
   selettori e questi non c'erano. Restano volutamente a spigolo le fasce a
   tutta larghezza (hero, testate, footer, mappa), dove l'angolo tondo
   sembrerebbe un errore di ritaglio.
   ========================================================================== */

/* Il pulsante freccia sulle schede camera (e sulle schede dei servizi) */
.apartment-btn a,
.project-btn a,
.post-btn a,
.amenities-btn a {
    border-radius: var(--angolo-piccolo);
}

/* Il riquadro scuro "Hai ancora un dubbio?" e la scheda camera in colonna */
.query-box,
.project-deatil-box,
.sidebar-cta-box,
.contact-info-item,
.sidebar-widget {
    border-radius: var(--angolo-medio);
    overflow: hidden;
}

/* La testata blu della scheda camera deve seguire l'angolo della scatola */
.project-deatil-box h2 {
    border-radius: 0;
}

/* ==========================================================================
   Maiuscole all'inglese
   Il tema mette text-transform: capitalize su una trentina di selettori: e'
   una convenzione tipografica inglese, e in italiano produce "Giardino E
   Spazi All'aperto" o "Cucina E Lavanderia". Qui la spengo e rimetto in
   maiuscolo solo la prima lettera con ::first-letter, cosi' i nomi propri
   restano come sono scritti ("camera Nuvola" -> "Camera Nuvola") e il testo
   nell'HTML non va toccato.
   ========================================================================== */

.about-detail-content h3,
.about-contact-content p,
.property-content-info h2,
.property-type-content h3,
.property-type-content p,
.features-item-content h3,
.amenities-item-content h3,
.why-choose-item-content h3,
.why-choose-item-content p,
.amenities-content h3,
.amenities-entry-item-content h3,
.project-title h3,
.project-deatil-item h3,
.project-deatil-item p,
.project-entry h2,
.contact-info-content h3,
.amenities-catagery-list ul li,
.faq-catagery-list ul li,
.property-tab-nav ul li .nav-link,
.vision-mission-nav ul li .nav-link {
    text-transform: none;
}

/* Rimasti fuori dal primo giro: menu ("Chi Siamo"), menu mobile, pulsante del
   video ("Guarda Il Video"), elenchi laterali e link sotto i servizi. Qui il
   testo nell'HTML ha gia' la maiuscola dove serve, oppure la mette il
   ::first-letter del <li> qui sotto. */
.main-menu ul li a,
.slicknav_nav .slicknav_row,
.slicknav_nav li a,
.intro-video .intro-video-box .video-play-button a,
.amenities-catagery-list ul li a,
.faq-catagery-list ul li a,
.amenities-entry-box-footer p a {
    text-transform: none;
}

.about-detail-content h3::first-letter,
.about-contact-content p::first-letter,
.property-content-info h2::first-letter,
.property-type-content h3::first-letter,
.property-type-content p::first-letter,
.features-item-content h3::first-letter,
.amenities-item-content h3::first-letter,
.why-choose-item-content h3::first-letter,
.why-choose-item-content p::first-letter,
.amenities-content h3::first-letter,
.amenities-entry-item-content h3::first-letter,
.project-title h3::first-letter,
.project-deatil-item h3::first-letter,
.project-deatil-item p::first-letter,
.project-entry h2::first-letter,
.contact-info-content h3::first-letter,
.amenities-catagery-list ul li::first-letter,
.faq-catagery-list ul li::first-letter,
.property-tab-nav ul li .nav-link::first-letter,
.vision-mission-nav ul li .nav-link::first-letter {
    text-transform: uppercase;
}

/* ==========================================================================
   Gli ultimi angoli vivi
   Box in barra laterale e immagine grande: erano fuori dall'elenco di
   selettori su cui girava il controllo, per questo su servizi, dettaglio
   servizio e domande frequenti restavano quadrati mentre le altre pagine no.
   ========================================================================== */

.faq-catagery-list,
.amenities-catagery-list,
.our-experience-img,
.our-experience-img figure,
.amenities-single-img,
.faq-single-img {
    border-radius: var(--angolo-medio);
    overflow: hidden;
}

/* Il pulsante del menu su mobile */
.slicknav_btn {
    border-radius: var(--angolo-piccolo);
}

/* ==========================================================================
   La banda di richiamo resta a spigolo vivo
   E' una fascia a tutta larghezza: gli angoli tondi la facevano sembrare
   ritagliata male sopra la sezione precedente.
   ========================================================================== */

.cta-box,
.cta-box *,
.cta-box *::before,
.cta-box *::after {
    border-radius: 0 !important;
}

/* ...tranne il pulsante, che resta tondo come tutti gli altri del sito: la
   regola qui sopra lo aveva squadrato insieme alla banda */
.cta-box .btn-default {
    border-radius: var(--angolo-piccolo) !important;
}

/* ==========================================================================
   Le piastrelle sulle sezioni scure
   Dotazioni e dettaglio piscina stanno su fondo blu notte: li' un velo di
   turchese al 13% e un glifo blu Canalotto spariscono, si vedevano solo in
   hover. Su fondo scuro la piastrella si schiarisce e il glifo passa al
   turchese chiaro (7,2:1 su #0B2B45); al passaggio si invertono.
   ========================================================================== */

.features-item .icon-box,
.amenities-entry-item .icon-box {
    /* il velo resta leggero per non mangiare il contrasto del glifo (5,7:1),
       a rendere percepibile la piastrella ci pensa il bordo (3,7:1) */
    background-color: rgba(95, 218, 230, 0.18);
    box-shadow: inset 0 0 0 1px rgba(95, 218, 230, 0.55);
}

.features-item .icon-box i,
.amenities-entry-item .icon-box i {
    color: var(--turchese-chiaro);
}

.features-item:hover .icon-box,
.amenities-entry-item:hover .icon-box {
    background-color: var(--turchese-chiaro);
    box-shadow: inset 0 0 0 1px var(--turchese-chiaro);
}

.features-item:hover .icon-box i,
.amenities-entry-item:hover .icon-box i {
    color: var(--blu-notte);
}

/* Nello stesso riquadro scuro, il piede era grigio su blu notte e il
   collegamento restava del blu del tema: 1,4:1, praticamente invisibile. */
.amenities-entry-box-footer p {
    color: rgba(255, 255, 255, 0.82);
}

.amenities-entry-box-footer p a {
    color: var(--turchese-chiaro);
    text-decoration-color: rgba(95, 218, 230, 0.5);
}

.amenities-entry-box-footer p a:hover {
    color: var(--white-color);
}

/* ==========================================================================
   L'icona nelle schede dei servizi
   Il tema centra il contenuto di .amenities-item con text-align: center.
   Rendendo la scheda una colonna flessibile — per attaccare "Continua" al
   fondo — text-align ha smesso di valere per la piastrella, che e' un
   elemento flex e non testo: restava incollata a sinistra mentre titolo e
   paragrafo erano al centro. Il centraggio dei figli di un flex lo fa
   align-self, non text-align.
   ========================================================================== */

.amenities-item > .icon-box {
    align-self: center;
}

/* ---------------------------------------------------------------------------
   Pagina 404.
   Pagina a se': niente intestazione, piede, caricamento. Il video del 404,
   il titolo e un pulsante, centrati in un solo schermo, senza scorrere.
   Il video prende il posto dell'illustrazione fissa: stessa resa della GIF
   originale, ma 2 MB invece di 10 e nitido sugli schermi ad alta densita'.
   Il fondo della pagina e' quello del video, misurato (#FAFAF8 circa): su
   bianco puro si vedeva il rettangolo del video.
   Chi ha attivo "riduci le animazioni" vede il fotogramma di partenza: il
   video lo ferma lo script in fondo a 404.html.
   --------------------------------------------------------------------------- */
.errore {
    min-height: 100vh;
    min-height: 100svh;
    background-color: #FAFAF9;
}

/* Il video si stringe quando lo schermo e' basso (telefono in orizzontale,
   portatile piccolo), cosi' titolo e pulsante restano sempre in vista.
   18rem = titolo, testo, pulsante e margini; 1.78 = 16:9 del video. */
.errore__video {
    display: block;
    width: 40rem;
    width: clamp(12rem, (100vh - 18rem) * 1.78, 40rem);
    width: clamp(12rem, (100svh - 18rem) * 1.78, 40rem);
    max-width: 100%;
    height: auto;
}

.errore__titolo {
    font-size: clamp(1.75rem, 1.2rem + 2vw, 2.75rem);
}

.errore__titolo span {
    color: var(--blu-canalotto);
    font-style: italic;
}

.errore__testo {
    max-width: 32rem;
}

/* Il pulsante del tema ha la freccia in avanti: ↗ ferma, → al passaggio.
   Qui si torna indietro: stessa freccia girata, ↖ ferma e ← al passaggio,
   con lo stesso quarto di giro. Lo spostamento resta quello del tema. */
.errore__pulsante::after {
    transform: translate(-18px, -50%) rotate(-90deg);
}

.errore__pulsante:hover::after {
    transform: translate(-18px, -50%) rotate(-135deg);
}

@media only screen and (max-width: 991px) {
    .errore__pulsante::after {
        transform: translate(-15px, -50%) rotate(-90deg);
    }

    .errore__pulsante:hover::after {
        transform: translate(-15px, -50%) rotate(-135deg);
    }
}

/* Entrata: lo stesso fadeInUp sfalsato che la pagina aveva con WOW.js,
   in CSS perche' qui le librerie del tema non si caricano. */
@keyframes errore-entra {
    from { opacity: 0; transform: translateY(16px); }
    to   { opacity: 1; transform: none; }
}

.errore__video,
.errore__titolo,
.errore__testo,
.errore__pulsante {
    animation: errore-entra 600ms cubic-bezier(0.2, 0.7, 0.3, 1) both;
}

.errore__titolo   { animation-delay: 120ms; }
.errore__testo    { animation-delay: 220ms; }
.errore__pulsante { animation-delay: 320ms; }

@media (prefers-reduced-motion: reduce) {
    .errore__video,
    .errore__titolo,
    .errore__testo,
    .errore__pulsante { animation: none; }
}


/* ---------------------------------------------------------------------------
   Pagine legali.
   Testo lungo da leggere, non da scorrere: misura di riga contenuta, titoli
   che si distinguono, tabelle che su telefono non escono dallo schermo.
   --------------------------------------------------------------------------- */
.page-legale { padding: 100px 0; }

.testo-legale { max-width: 46rem; }

.testo-legale h2 {
    font-size: clamp(1.25rem, 2.2vw, 1.6rem);
    margin: 2.6rem 0 .9rem;
    padding-top: 1.6rem;
    border-top: 1px solid rgba(15, 76, 129, .14);
}

.testo-legale h2:first-of-type { border-top: 0; padding-top: 0; margin-top: 1.4rem; }

.testo-legale p,
.testo-legale li { line-height: 1.75; }

.testo-legale ul { margin: 0 0 1.1rem 1.1rem; }
.testo-legale li { margin-bottom: .45rem; }

.testo-legale code {
    background: rgba(15, 76, 129, .08);
    padding: .1em .45em;
    border-radius: 4px;
    font-size: .9em;
}

.legale-avviso {
    background: rgba(15, 76, 129, .06);
    border-left: 3px solid #0F4C81;
    border-radius: 0 8px 8px 0;
    padding: 1rem 1.2rem;
    font-size: .93rem;
    margin-bottom: 2rem;
}

/* tabelle: su telefono scorrono in orizzontale invece di sfondare la pagina */
.tabella-legale {
    display: block;
    overflow-x: auto;
    width: 100%;
    border-collapse: collapse;
    margin: 0 0 1.6rem;
    font-size: .9rem;
}

.tabella-legale th,
.tabella-legale td {
    border-bottom: 1px solid rgba(15, 76, 129, .14);
    padding: .7rem .8rem;
    text-align: left;
    vertical-align: top;
    min-width: 8rem;
}

.tabella-legale thead th {
    border-bottom-width: 2px;
    white-space: nowrap;
}

/* un pulsante che sembra un link: riapre le preferenze sui cookie */
.btn-testo {
    background: none;
    border: 0;
    padding: 0;
    font: inherit;
    color: #0F4C81;
    text-decoration: underline;
    text-underline-offset: .18em;
    cursor: pointer;
}

.btn-testo:hover { text-decoration-thickness: 2px; }

@media only screen and (max-width: 767px) {
    .page-legale { padding: 60px 0; }
}


/* ---------------------------------------------------------------------------
   Consenso ai cookie.
   La barra sta in basso, arrotondata come il resto del sito, e non copre mai
   del tutto il contenuto. Il riquadro d'attesa prende esattamente il posto
   del contenuto spento, cosi' la pagina non salta quando si accende.
   --------------------------------------------------------------------------- */
.barra-cookie {
    position: fixed;
    left: 50%;
    bottom: 1.2rem;
    transform: translateX(-50%);
    z-index: 1200;
    width: min(72rem, calc(100vw - 2.4rem));
    background: #0F4C81;
    color: #fff;
    border-radius: 14px;
    box-shadow: 0 18px 50px rgba(9, 24, 44, .38);
    animation: cookieEntra .45s cubic-bezier(.2, .7, .3, 1) both;
}

@keyframes cookieEntra {
    from { opacity: 0; transform: translate(-50%, 18px); }
    to   { opacity: 1; transform: translate(-50%, 0); }
}

.barra-cookie__inner {
    display: flex;
    align-items: center;
    gap: 1.4rem;
    padding: 1.1rem 1.4rem;
}

.barra-cookie__testo {
    margin: 0;
    font-size: .88rem;
    line-height: 1.6;
}

.barra-cookie__testo a {
    color: #fff;
    text-decoration: underline;
    text-underline-offset: .18em;
    white-space: nowrap;
}

.barra-cookie__azioni {
    display: flex;
    gap: .7rem;
    flex-shrink: 0;
}

.btn-cookie {
    border: 1px solid #fff;
    background: #fff;
    color: #0F4C81;
    font-size: .84rem;
    font-weight: 600;
    letter-spacing: .02em;
    padding: .65rem 1.4rem;
    border-radius: 999px;
    cursor: pointer;
    white-space: nowrap;
    transition: background-color .3s ease, color .3s ease, border-color .3s ease;
}

.btn-cookie:hover { background: transparent; color: #fff; }

.btn-cookie--ghost {
    background: transparent;
    color: rgba(255, 255, 255, .88);
    border-color: rgba(255, 255, 255, .34);
}

.btn-cookie--ghost:hover {
    background: transparent;
    border-color: #fff;
    color: #fff;
}

/* --- il riquadro al posto del contenuto spento -------------------------- */
.attesa-consenso {
    display: grid;
    place-items: center;
    min-height: 18rem;
    padding: 2rem 1.5rem;
    background: rgba(15, 76, 129, .06);
    border: 1px dashed rgba(15, 76, 129, .3);
    border-radius: 12px;
    text-align: center;
}

.attesa-consenso__testo { max-width: 26rem; }

.attesa-consenso h3 {
    font-size: 1.15rem;
    margin-bottom: .5rem;
}

.attesa-consenso p {
    font-size: .88rem;
    line-height: 1.65;
    margin-bottom: 1.2rem;
}

.attesa-consenso .btn-default { margin-bottom: .7rem; }

.attesa-consenso__sempre {
    display: block;
    margin: 0 auto;
    font-size: .82rem;
    opacity: .8;
}

/* (16/10/2026) tolta «iframe[data-src] { display: none; }» del vecchio consenso:
   nascondeva la mappa anche dopo l'accettazione. Il riquadro di consenso.js
   copre l'iframe spento, non serve nasconderlo. */

@media only screen and (max-width: 767px) {
    .barra-cookie { bottom: .7rem; border-radius: 12px; }
    .barra-cookie__inner {
        flex-direction: column;
        align-items: stretch;
        gap: .9rem;
        padding: 1rem 1.1rem;
    }
    .barra-cookie__testo { font-size: .82rem; text-align: center; }
    .barra-cookie__azioni { justify-content: center; }
    .btn-cookie { flex: 1; padding: .7rem .9rem; }
    .attesa-consenso { min-height: 14rem; padding: 1.5rem 1rem; }
}


/* ---------------------------------------------------------------------------
   Tasto "torna su".
   Prende il linguaggio dell'unico pulsante che il tema ha, .btn-default:
   fondo pieno del colore d'accento e inversione al passaggio. Tondo perche'
   dentro c'e' solo una freccia.
   --------------------------------------------------------------------------- */
.torna-su {
    position: fixed;
    right: 24px;
    bottom: 24px;
    z-index: 900;
    display: grid;
    place-items: center;
    width: 44px;
    height: 44px;
    border-radius: 50%;
    background: var(--accent-color);
    color: var(--white-color);
    font-size: .9rem;
    text-decoration: none;
    opacity: 0;
    visibility: hidden;
    transform: translateY(10px);
    transition: opacity .4s ease, transform .4s ease, visibility .4s,
                background-color .5s ease-in-out, color .5s ease-in-out;
}

.torna-su:not(.si-vede) { pointer-events: none; }

.torna-su.si-vede {
    opacity: 1;
    visibility: visible;
    transform: none;
    animation: tornaSuEntra .5s cubic-bezier(.2, .7, .3, 1) both;
}

@keyframes tornaSuEntra {
    from { opacity: 0; transform: translateY(14px) scale(.88); }
    to   { opacity: 1; transform: none; }
}

/* la freccia si muove prima del cerchio, come nei pulsanti del tema */
.torna-su i {
    display: block;
    transition: transform .35s cubic-bezier(.2, .7, .3, 1);
}

.torna-su:hover i,
.torna-su:focus-visible i { transform: translateY(-3px); }

.torna-su:active { transform: scale(.93); }

.torna-su:hover,
.torna-su:focus-visible {
    background: var(--primary-color);
    color: var(--white-color);
}

.torna-su:focus-visible { outline: 2px solid var(--accent-color); outline-offset: 3px; }

body.con-barra-cookie .torna-su { bottom: calc(24px + var(--altezza-barra-cookie, 110px)); }

@media only screen and (max-width: 575px) {
    .torna-su { right: 16px; bottom: 16px; width: 40px; height: 40px; }
}

@media (prefers-reduced-motion: reduce) {
    .torna-su,
    .torna-su.si-vede { animation: none; transition: opacity .2s ease; }
    .torna-su i { transition: none; }
}








/* Il campo trappola per i robot: fuori dalla vista, ma non display:none,
   perche' i robot saltano quello che e' nascosto cosi'. */
.campo-robot {
    position: absolute !important;
    width: 1px;
    height: 1px;
    overflow: hidden;
    clip: rect(0 0 0 0);
    clip-path: inset(50%);
    white-space: nowrap;
}

/* ==========================================================================
   Etichette dei contatori sopra la foto della sezione video
   ("Metri quadri", "Ospiti", "Camere", "Piscina"). Il tema le colora di
   accento: nato arancione, dopo il cambio di palette era blu su foto scura
   e non si leggeva. Stesso turchese chiaro dei titoli sulle sezioni scure.
   ========================================================================== */

.intro-video-counter-item h3 {
    color: var(--turchese-chiaro);
}

/* ==========================================================================
   Bootstrap Studio: le <figure> come componente Figure
   L'importer riconosce una <figure> solo se ha la classe .figure di
   Bootstrap: senza, ogni foto del sito arriva come blocco Custom Code e non
   si puo' cambiare dal pannello (verificato con un import reale in BSS 8.0.1:
   83 blocchi sul sito italiano). Con la classe diventa Figure + Image,
   modificabile. Bootstrap pero' da' a .figure display:inline-block, e l'app
   aggiunge da sola .figure-img alle immagini dentro una Figure, con un
   margine sotto: qui li riporto al comportamento della <figure> del tema.
   ========================================================================== */

.figure {
    display: block;
}

.figure > .figure-img {
    margin-bottom: 0;
}

/* La citazione di spiagge-realmonte.html: figure.figure > blockquote.blockquote
   e' la forma che l'importer riconosce come componente Blockquote (un
   <blockquote> da solo diventa Custom Code). Il margine lo tiene gia' il
   blockquote del tema, la figure non ne aggiunge. */
.citazione {
    margin: 0;
}

/* ==========================================================================
   Home: modulo di prenotazione Holidu dentro l'hero
   Stesso riquadro di prenota.html (.prenota-holidu), in versione compatta.
   A questa larghezza il modulo intero e' alto circa 1200px: qui se ne
   mostrano 520 (400 sugli schermi bassi), cioe' la ricerca (arrivo,
   partenza, ospiti, "Verifica disponibilita'") e l'inizio della scheda con
   la foto; il resto si scorre dentro il riquadro, oppure si apre a tutta
   pagina dal link sotto.
   Il pulsante flottante "Mappa" di Holidu sta sempre in fondo al LORO
   riquadro visibile, e non c'e' nessun parametro per toglierlo (verificato
   nel codice del widget il 23/09/2026). Con l'iframe basso 520px finiva
   sopra la foto. Per questo qui l'iframe e' alto quanto il suo contenuto
   (l'altezza la manda Holidu col messaggio 'resize', la applica villa.js) e
   a scorrere e' la nostra .prenota-holidu__finestra: il pulsante resta cosi'
   in fondo al modulo, sopra il loro pie' di pagina, come sul sito Holidu.
   ========================================================================== */

.hero--prenota {
    padding: 170px 0 110px;
}

.prenota-holidu--hero {
    position: relative;
    z-index: 2;
    box-shadow: 0 18px 50px rgba(11, 43, 69, 0.35);
}

.prenota-holidu__finestra {
    height: 520px;
    overflow-y: auto;
    /* la barra di scorrimento prendeva spazio solo a destra e spostava il
       modulo: e' nascosta, il riquadro scorre lo stesso (rotella, dito) */
    scrollbar-width: none;
}

.prenota-holidu__finestra::-webkit-scrollbar {
    display: none;
}

/* Altezza di riserva finche' non arriva quella vera da Holidu: abbastanza
   alta da tenere il pulsante "Mappa" lontano dalla foto anche se il
   messaggio tardasse. */
.prenota-holidu--hero iframe {
    height: 1200px;
}

/* Testata del riquadro: qui fa da titolo, "Prenota la villa" deve vedersi */
.prenota-holidu--hero .prenota-holidu__testata {
    flex-direction: column;
    align-items: flex-start;
    gap: 0.2rem;
    padding: 1rem 1.25rem;
}

.prenota-holidu__titolo {
    font-family: var(--display-font);
    font-size: 1.375rem;
    font-weight: 600;
    line-height: 1.2;
    color: var(--blu-notte);
}

/* Con la colonna piu' stretta il titolo andava a capo spezzando
   "non / una stanza": la parte evidenziata resta su una riga sola. */
@media (min-width: 992px) {
    .hero--prenota .hero-content .section-title h1 span {
        white-space: nowrap;
    }
}

@media (min-width: 992px) and (max-width: 1199.98px) {
    .hero--prenota .hero-content .section-title h1 {
        font-size: 64px;
    }
}

/* Portatili con schermo basso (1366x768): il riquadro resta nella prima
   schermata, link "tutta pagina" compreso. */
@media (min-width: 992px) and (max-height: 820px) {
    .hero--prenota {
        padding: 150px 0 80px;
    }

    .prenota-holidu__finestra {
        height: 400px;
    }
}

.prenota-holidu__completa {
    display: block;
    padding: 0.75rem 1rem;
    border-top: 1px solid var(--pietra-chiara);
    background: var(--bianco-calce);
    color: var(--blu-canalotto);
    font-size: 0.875rem;
    font-weight: 600;
    text-align: center;
    transition: color 200ms ease;
}

.prenota-holidu__completa:hover,
.prenota-holidu__completa:focus {
    color: var(--blu-canalotto-scuro);
    text-decoration: underline;
}

@media (max-width: 991.98px) {
    .hero--prenota {
        padding: 170px 0 110px;
    }

    .prenota-holidu--hero {
        margin-top: 30px;
    }

    .prenota-holidu__finestra {
        height: 480px;
    }
}

/* ==========================================================================
   Cambio camera nelle schede (Nuvola, Arcobaleno, Sole, Stella)
   Bootstrap cambia scheda con una dissolvenza di 150ms: sembra un salto.
   Come nello slider delle recensioni, la pianta entra di lato e poi titolo,
   testo e dati salgono uno dopo l'altro. Si anima la <figure> e non il suo
   contenitore, cosi' la macchia di sfondo dietro la pianta resta ferma.
   Solo opacity e transform; con "riduci movimento" attivo le azzera la
   regola generale in cima al file.
   ========================================================================== */

@keyframes camera-entra-lato {
    from { opacity: 0; transform: translateX(-32px); }
    to   { opacity: 1; transform: none; }
}

@keyframes camera-entra-su {
    from { opacity: 0; transform: translateY(16px); }
    to   { opacity: 1; transform: none; }
}

.property-tab-item.active .property-tab-image figure {
    animation: camera-entra-lato 650ms cubic-bezier(0.2, 0.7, 0.3, 1) both;
}

.property-tab-item.active .property-content-info {
    animation: camera-entra-su 550ms cubic-bezier(0.2, 0.7, 0.3, 1) 100ms both;
}

.property-tab-item.active .property-type-item {
    animation: camera-entra-su 500ms cubic-bezier(0.2, 0.7, 0.3, 1) both;
}

.property-tab-item.active .property-type-item:nth-child(1) { animation-delay: 200ms; }
.property-tab-item.active .property-type-item:nth-child(2) { animation-delay: 270ms; }
.property-tab-item.active .property-type-item:nth-child(3) { animation-delay: 340ms; }
.property-tab-item.active .property-type-item:nth-child(4) { animation-delay: 410ms; }


/* ==========================================================================
   Piede di pagina
   Prima era tutto centrato e ogni recapito compariva due volte (l'e-mail a
   44 px, poi di nuovo come icona tonda; l'indirizzo sopra e poi nel
   copyright). Ora ogni cosa c'e' una volta sola, in quattro colonne che su
   telefono si impilano allineate a sinistra, dove l'occhio le scorre:
   dove siamo, come contattarci, le pagine, e in fondo i dati di legge.
   L'unico elemento in rilievo e' il pulsante WhatsApp, perche' e' da li'
   che arrivano davvero le richieste.
   ========================================================================== */

.main-footer {
    padding: clamp(3.5rem, 7vw, 6rem) 0 0;
    color: rgba(255, 255, 255, .78);
    font-size: 1rem;
}

/* --- Dove siamo ---------------------------------------------------------- */
.footer-marchio {
    margin-bottom: 1.5rem;
}

.footer-marchio img {
    height: 92px;
    width: auto;
}

.footer-indirizzo {
    font-style: normal;
    margin-bottom: .75rem;
}

/* l'indirizzo e' l'unica riga in Fraunces: e' la cosa che il footer di una
   casa vacanze deve dire prima di tutte le altre */
.footer-via {
    display: block;
    font-family: var(--display-font);
    font-variation-settings: "SOFT" 20, "WONK" 0;
    font-size: clamp(1.3rem, 2.2vw, 1.55rem);
    font-weight: 500;
    line-height: 1.25;
    letter-spacing: -0.01em;
    color: var(--white-color);
}

.footer-citta {
    display: block;
    margin-top: .3rem;
    line-height: 1.5;
}

.footer-freccia {
    display: inline-flex;
    align-items: center;
    gap: .4rem;
    min-height: 44px;
    font-weight: 600;
    color: var(--turchese-chiaro);
    text-decoration: none;
    transition: color .3s ease-in-out;
}

.footer-freccia i {
    font-size: .8em;
    transition: transform .3s ease-in-out;
}

.footer-freccia:hover,
.footer-freccia:focus-visible {
    color: var(--white-color);
}

.footer-freccia:hover i,
.footer-freccia:focus-visible i {
    transform: translateX(4px);
}

/* --- Titoli di colonna: lo stesso occhiello delle sezioni del sito ------- */
.main-footer .footer-titolo {
    font-family: var(--default-font);
    font-variation-settings: normal;
    font-size: .8125rem;
    font-weight: 600;
    letter-spacing: .14em;
    line-height: 1.4;
    text-transform: uppercase;
    color: var(--turchese-chiaro);
    margin-bottom: 1.1rem;
}

/* --- Contatti ------------------------------------------------------------ */
.btn-whatsapp {
    --bs-btn-padding-x: 1.25rem;
    --bs-btn-padding-y: .8rem;
    --bs-btn-font-weight: 600;
    --bs-btn-font-size: 1rem;
    --bs-btn-color: var(--blu-notte);
    --bs-btn-bg: var(--white-color);
    --bs-btn-border-color: var(--white-color);
    --bs-btn-hover-color: var(--blu-notte);
    --bs-btn-hover-bg: var(--turchese-chiaro);
    --bs-btn-hover-border-color: var(--turchese-chiaro);
    --bs-btn-active-color: var(--blu-notte);
    --bs-btn-active-bg: var(--turchese-chiaro);
    --bs-btn-active-border-color: var(--turchese-chiaro);
    --bs-btn-focus-box-shadow: none; /* il focus lo disegna l'outline comune del footer */
    --bs-btn-border-radius: var(--angolo-piccolo);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: .6rem;
    margin-bottom: 1.25rem;
    transition: background-color .3s ease-in-out, border-color .3s ease-in-out,
                color .3s ease-in-out;
}

.btn-whatsapp i {
    font-size: 1.3em;
}

.footer-recapiti {
    margin: 0;
}

.footer-recapiti a {
    display: inline-flex;
    align-items: baseline;
    gap: .75rem;
    padding: .45rem 0;
    color: rgba(255, 255, 255, .9);
    text-decoration: none;
    transition: color .3s ease-in-out;
}

.footer-recapiti i {
    flex: 0 0 1.1rem;
    text-align: center;
    font-size: .9rem;
    color: var(--turchese-chiaro);
}

/* l'e-mail e' lunga 31 caratteri: se non ci sta, va a capo invece di
   uscire dallo schermo */
.footer-recapiti span {
    min-width: 0;
    overflow-wrap: anywhere;
}

.footer-recapiti a:hover,
.footer-recapiti a:focus-visible,
.footer-menu a:hover,
.footer-menu a:focus-visible {
    color: var(--turchese-chiaro);
}

/* --- Pagine -------------------------------------------------------------- */
.footer-menu {
    margin: 0;
}

.footer-menu a {
    display: inline-block;
    padding: .45rem 0;
    color: rgba(255, 255, 255, .9);
    text-decoration: none;
    transition: color .3s ease-in-out;
}

/* il tema toglie l'outline a tutti i link (a:focus { outline: 0 }): qui,
   per chi naviga da tastiera, il punto in cui si trova torna visibile */
.main-footer a:focus-visible {
    outline: 2px solid var(--turchese-chiaro);
    outline-offset: 3px;
    border-radius: 2px;
}

/* --- Fondo: dati di legge e firma --------------------------------------- */
.footer-fondo {
    margin-top: clamp(3rem, 6vw, 4.5rem);
    padding: 1.75rem 0 2rem;
    border-top: 1px solid var(--dark-divider-color);
    font-size: .875rem;
    line-height: 1.6;
    color: rgba(255, 255, 255, .66);
}

.footer-fondo p {
    margin: 0;
}

.footer-legale {
    display: flex;
    flex-wrap: wrap;
    column-gap: 1.25rem;
    row-gap: .2rem;
}

/* CIN e CIR non si spezzano mai a meta': al massimo vanno a capo interi */
.footer-codici {
    display: flex;
    flex-wrap: wrap;
    column-gap: 1.25rem;
    row-gap: .2rem;
    font-variant-numeric: tabular-nums;
    letter-spacing: .02em;
}

.footer-codici span {
    white-space: nowrap;
}

/* la firma sta sotto i dati di legge, un gradino piu' piccola; tutto il
   fondo e' allineato a sinistra, cosi' l'angolo in basso a destra resta
   libero per il tasto "torna su" */
.footer-fondo .footer-firma {
    display: flex;
    flex-wrap: wrap;
    column-gap: 1.25rem;
    row-gap: .2rem;
    margin-top: .6rem;
    font-size: .8125rem;
}

.footer-firma-recapiti {
    display: flex;
    flex-wrap: wrap;
    column-gap: 1.25rem;
    row-gap: .2rem;
}

.footer-firma a {
    color: rgba(255, 255, 255, .85);
    text-decoration: underline;
    text-decoration-color: rgba(255, 255, 255, .3);
    text-underline-offset: .2em;
    overflow-wrap: anywhere;
    transition: color .3s ease-in-out, text-decoration-color .3s ease-in-out;
}

.footer-firma a:hover,
.footer-firma a:focus-visible {
    color: var(--white-color);
    text-decoration-color: currentColor;
}

@media (max-width: 991.98px) {
    .footer-marchio img { height: 76px; }
}

@media (max-width: 575.98px) {
    /* il pulsante prende tutta la riga: e' l'azione da fare col pollice */
    .btn-whatsapp { width: 100%; }

    /* spazio per il tasto "torna su", che su telefono sta sopra l'ultima riga */
    .footer-fondo { padding-bottom: 4.5rem; }
}

@media (max-width: 359.98px) {
    /* sui telefoni piu' stretti l'e-mail ci sta intera solo un punto sotto */
    .footer-recapiti { font-size: .9375rem; }
}

/* ==========================================================================
   Schede camera in home
   La freccia era un'icona blu scuro con bordo blu, appoggiata sulla foto:
   sul fondo scuro dell'immagine quasi spariva. Ora sta su un disco chiaro,
   e al passaggio si inverte (fondo blu, freccia bianca) come prima.
   Sui dispositivi touch il passaggio del mouse non esiste: la freccia si
   vede sempre, altrimenti compariva solo dopo il primo tocco.
   ========================================================================== */
.apartment-btn a {
    background: rgba(255, 255, 255, .92);
    border-color: transparent;
    box-shadow: 0 2px 10px rgba(11, 43, 69, .25);
}

.apartment-btn a:hover,
.apartment-btn a:focus-visible {
    background: var(--accent-color);
}

@media (hover: none) {
    .apartment-btn {
        opacity: 1;
        visibility: visible;
        top: 30px;
    }
}

/* Su telefono due schede per fila: testo e freccia si stringono */
@media (max-width: 767.98px) {
    /* il tema fissa 15 px di margine su ogni colonna (.row > *), cosi' le
       classi gx-* di Bootstrap non fanno effetto: lo spazio si stringe qui */
    .camere-griglia {
        margin-right: -8px;
        margin-left: -8px;
    }

    .camere-griglia > * {
        padding-right: 8px;
        padding-left: 8px;
    }

    .apartment-item {
        height: calc(100% - 16px);
        margin-bottom: 16px;
    }

    .apartments-content {
        right: 12px;
        bottom: 14px;
        left: 14px;
    }

    .apartments-content h3 {
        font-size: 15px;
        line-height: 1.25;
    }

    .apartment-btn,
    .apartment-item:hover .apartment-btn {
        top: 12px;
        right: 12px;
    }

    .apartment-btn a {
        width: 34px;
        height: 34px;
    }

    .apartment-btn img {
        max-width: 12px;
    }
}

/* ==========================================================================
   Home: foto dell'hero a rotazione
   Carousel di Bootstrap in dissolvenza, usato come sfondo: e' un componente
   nativo di Bootstrap Studio, quindi foto, intervallo e pausa si cambiano
   dal pannello Options. Ogni foto resta 6 secondi e mentre e' in scena si
   avvicina appena (8%), cosi' anche la foto ferma ha un po' di vita.
   Le foto sono in assets/img/hero/: per cambiarle basta sovrascrivere i file.
   La velatura blu dell'hero (.hero::before) resta sopra le foto: il titolo
   si legge su qualunque immagine.
   ========================================================================== */
.hero--foto {
    background: var(--blu-notte);
    isolation: isolate; /* il carosello puo' stare a z-index -1 senza sparire dietro il fondo */
}

.hero-foto {
    position: absolute;
    inset: 0;
    z-index: -1;
}

.hero-foto .carousel-inner,
.hero-foto .carousel-item {
    height: 100%;
}

.hero-foto__img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

/* Dissolvenza lenta. Bootstrap fa sparire la foto uscente dopo 0,6 s: con
   una dissolvenza piu' lunga si vedrebbe il fondo blu fra una foto e
   l'altra, quindi anche quel tempo va allineato. */
.hero-foto.carousel-fade .carousel-item {
    transition-duration: 1.6s;
}

.hero-foto.carousel-fade .active.carousel-item-start,
.hero-foto.carousel-fade .active.carousel-item-end {
    transition: opacity 0s 1.6s;
}

@keyframes hero-foto-avvicina {
    from { transform: scale(1); }
    to   { transform: scale(1.08); }
}

.hero-foto .carousel-item.active .hero-foto__img {
    animation: hero-foto-avvicina 9s ease-out forwards;
}

/* ==========================================================================
   Home: il video dell'hero
   Un <video> nostro (assets/video/hero-villa.mp4, 720p, 22 s, muto, in loop),
   non YouTube: nessun pulsante del lettore, in nessun caso. Sta sopra le
   foto a rotazione e sotto la velatura blu, e copre il riquadro come una
   foto (object-fit: cover). Resta invisibile finche' non sta davvero
   andando: se il telefono e' in risparmio energetico (iPhone lo blocca e
   mostrerebbe un pulsante play), se il file non arriva o c'e' "riduci
   movimento", si vedono le foto che scorrono come prima (vedi villa.js).
   ========================================================================== */
.hero-filmato {
    position: absolute;
    inset: 0;
    z-index: -1;
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    pointer-events: none;
    opacity: 0;
    transition: opacity .5s ease;
}

.hero-filmato--attivo {
    opacity: 1;
}

/* ==========================================================================
   Home: il modulo Holidu in vetro smerigliato
   Solo nella home (.prenota-holidu--hero): la pagina Prenota resta com'e'.
   Il vetro e' blu notte al 50% e sfoca la foto dietro: e' il riquadro, non
   il modulo. Dentro l'iframe comanda Holidu (vedi sopra), percio' il modulo
   resta su un fondo chiaro, appoggiato sul vetro come una scheda: i suoi
   testi grigi sono pensati per il bianco e li' si leggono.
   ========================================================================== */
.prenota-holidu--hero {
    padding: .5rem;
    border: 1px solid rgba(255, 255, 255, .22);
    border-radius: var(--angolo-grande);
    background: rgba(11, 43, 69, .5);
    -webkit-backdrop-filter: blur(18px) saturate(140%);
    backdrop-filter: blur(18px) saturate(140%);
    box-shadow: 0 24px 60px rgba(6, 24, 40, .45),
                inset 0 1px 0 rgba(255, 255, 255, .16);
}

/* Browser senza backdrop-filter: vetro piu' coprente, il testo resta leggibile */
@supports not ((-webkit-backdrop-filter: blur(1px)) or (backdrop-filter: blur(1px))) {
    .prenota-holidu--hero {
        background: rgba(11, 43, 69, .88);
    }
}

.prenota-holidu--hero .prenota-holidu__testata {
    padding: .75rem .85rem 1rem;
    border-bottom: 0;
    background: transparent;
}

.prenota-holidu--hero .prenota-holidu__titolo {
    color: var(--white-color);
}

.prenota-holidu--hero .prenota-holidu__sicuro {
    color: rgba(255, 255, 255, .85);
}

.prenota-holidu--hero .prenota-holidu__sicuro::before {
    color: var(--turchese-chiaro);
}

.prenota-holidu--hero .prenota-holidu__finestra {
    border-radius: var(--angolo-medio);
    background: rgba(255, 255, 255, .92);
}

.prenota-holidu--hero .prenota-holidu__completa {
    padding: .8rem 1rem .55rem;
    border-top: 0;
    background: transparent;
    color: var(--turchese-chiaro);
}

.prenota-holidu--hero .prenota-holidu__completa:hover,
.prenota-holidu--hero .prenota-holidu__completa:focus {
    color: var(--white-color);
}

/* ==========================================================================
   Home: titolo dell'hero leggibile su qualunque foto
   Con le foto a rotazione lo sfondo del titolo cambia ogni 6 secondi: il
   bianco spariva sulle foto chiare, il blu Canalotto su quelle scure.
   Richiesta del 25/09/2026: supera la scelta precedente del blu nell'hero.
   - la parola evidenziata passa al turchese chiaro, come sulle altre
     sezioni scure del sito (8,7:1 sul blu notte);
   - ombra piu' decisa, doppia: una stretta per il bordo delle lettere e una
     larga che scurisce l'intorno;
   - una velatura sfumata solo nella zona del titolo, cosi' il resto della
     foto resta luminoso.
   ========================================================================== */
.hero--foto .hero-content .section-title h1 span {
    color: var(--turchese-chiaro);
}

.hero--foto .hero-content .section-title h1,
.hero--foto .hero-content .section-title h3 {
    text-shadow: 0 1px 3px rgba(6, 24, 40, .55),
                 0 2px 24px rgba(6, 24, 40, .65);
}

.hero--foto .hero-content {
    isolation: isolate;
}

.hero--foto .hero-content::before {
    content: "";
    position: absolute;
    inset: -12% -18% -12% -30%;
    z-index: -1;
    background: radial-gradient(ellipse at 35% 50%,
                rgba(6, 24, 40, .55) 0%,
                rgba(6, 24, 40, .28) 45%,
                rgba(6, 24, 40, 0) 72%);
    pointer-events: none;
}

/* ==========================================================================
   Riquadro "Resta una domanda?" (colonna laterale)
   Fondo blu notte: il link "contatti" era blu Canalotto (1,6:1, non si
   vedeva), le icone di telefono ed e-mail erano blu, e al passaggio il
   tema portava il testo al blu, cioe' lo faceva sparire. Ora: link
   turchese chiaro, icone bianche, al passaggio il testo va al turchese.
   ========================================================================== */
.sidebar-cta-body p a {
    color: var(--turchese-chiaro);
    text-underline-offset: .2em;
    transition: color .3s ease-in-out;
}

.sidebar-cta-body p a:hover,
.sidebar-cta-body p a:focus-visible {
    color: var(--white-color);
}

.sidebar-cta-footer ul li,
.sidebar-cta-footer ul li a {
    color: var(--white-color);
    transition: color .3s ease-in-out;
}

.sidebar-cta-footer ul li:hover,
.sidebar-cta-footer ul li:hover a,
.sidebar-cta-footer ul li a:focus-visible {
    color: var(--turchese-chiaro);
}

.sidebar-cta-footer ul li img,
.sidebar-cta-footer ul li:hover img {
    filter: brightness(0) invert(1);
}

@media (min-width: 992px) {
    .sidebar-cta-box {
        padding-inline: 32px;
    }
}

/* l'e-mail e' lunga 31 caratteri: un punto piu' piccola ci sta su una riga;
   se proprio non ci sta, va a capo invece di uscire dal riquadro */
.sidebar-cta-footer ul li {
    font-size: .9375rem;
}

.sidebar-cta-footer ul li a {
    overflow-wrap: anywhere;
}

/* ==========================================================================
   Freccia "continua" nelle schede articolo (Consigli, home)
   Al passaggio il tema applicava invert(1) alla freccia blu notte: il
   negativo di #0B2B45 e' un rosa pesca. Per il bianco serve prima
   brightness(0).
   ========================================================================== */
.post-item-btn a:hover img {
    filter: brightness(0) invert(1);
}

/* ==========================================================================
   Caricamento: il logo che si compone
   Il marchio e' un adesivo, e il caricamento lo racconta cosi': la macchia
   blu si "attacca" al centro, le lettere ci cadono sopra una a una (VILLA,
   poi CHARM, poi AND ELEGANCE, piu' piccole e piu' svelte), la palma cresce
   dal basso e poi ondeggia. Sotto, un alone turchese respira piano.
   Dura circa 2,4 s; se la pagina non e' ancora pronta l'adesivo resta a
   galleggiare, al massimo fino a 5,5 s. Poi si stacca e il pannello sale.

   Le posizioni dei pezzi sono misurate sul logo vero (logo.png), in
   percentuale della macchia: il logo si ridimensiona intero. Immagini in
   assets/img/caricamento/ (2x la dimensione a cui si vedono).
   Parte solo alla prima pagina della visita e mai con "riduci movimento":
   lo decide lo script subito sotto il markup. Senza JavaScript resta
   nascosto (attributo hidden).
   ========================================================================== */
.caricamento {
    position: fixed;
    inset: 0;
    z-index: 2000;
    display: grid;
    place-items: center;
    overflow: hidden;
    background: var(--bianco-calce);
}

.caricamento[hidden] {
    display: none;
}

/* Niente overflow:hidden durante il caricamento: toglieva la barra di
   scorrimento, e quando ricompariva la pagina si stringeva di colpo di 15px
   mentre il pannello saliva. Lo scorrimento sotto il pannello lo blocca lo
   script (wheel e touchmove), la barra resta al suo posto. */

/* La barra di scorrimento sempre presente sui computer: nessuna pagina,
   pannello o finestra la fa sparire e ricomparire, quindi niente si sposta
   mai di lato. Sui telefoni la barra e' sovrapposta e questo non cambia nulla. */
html {
    overflow-y: scroll;
}

/* la 404 sta tutta in uno schermo: li' una barra vuota non serve */
html:has(> body > main.errore) {
    overflow-y: auto;
}

/* alone turchese dietro l'adesivo */
.caricamento::before {
    content: "";
    position: absolute;
    width: min(120vw, 900px);
    aspect-ratio: 1;
    border-radius: 50%;
    background: radial-gradient(circle, rgba(95, 218, 230, .35) 0%, rgba(95, 218, 230, 0) 62%);
    animation: caricamento-alone 3.2s ease-in-out infinite;
    animation-delay: calc(-1 * var(--fase, 0s));
}

.caricamento__adesivo {
    position: relative;
    width: min(80vw, 460px);
    aspect-ratio: 697 / 459;
    animation: caricamento-galleggia 3s ease-in-out 1.9s infinite;
}

.caricamento__fondo {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    filter: drop-shadow(0 14px 22px rgba(11, 43, 69, .22));
    opacity: 0;
    animation: caricamento-attacca .55s cubic-bezier(.34, 1.56, .64, 1) .1s forwards;
}

.caricamento__pezzo {
    position: absolute;
    height: auto;
    opacity: 0;
    --giro: -12deg;
    animation: caricamento-cade .5s cubic-bezier(.34, 1.56, .64, 1) forwards;
}

/* una si' e una no ruotano dall'altra parte: sembrano lanciate a mano */
.caricamento__pezzo:nth-of-type(even) {
    --giro: 12deg;
}

/* VILLA */
.caricamento__pezzo--v  { animation-delay: .45s; }
.caricamento__pezzo--i  { animation-delay: .52s; }
.caricamento__pezzo--l1 { animation-delay: .59s; }
.caricamento__pezzo--l2 { animation-delay: .66s; }
.caricamento__pezzo--a1 { animation-delay: .73s; }
/* CHARM */
.caricamento__pezzo--c  { animation-delay: .82s; }
.caricamento__pezzo--h  { animation-delay: .89s; }
.caricamento__pezzo--a2 { animation-delay: .96s; }
.caricamento__pezzo--r  { animation-delay: 1.03s; }
.caricamento__pezzo--m  { animation-delay: 1.10s; }
/* AND ELEGANCE: piu' piccole, arrivano piu' fitte */
.caricamento__pezzo--a3 { animation-delay: 1.20s; animation-duration: .4s; }
.caricamento__pezzo--n1 { animation-delay: 1.24s; animation-duration: .4s; }
.caricamento__pezzo--d  { animation-delay: 1.28s; animation-duration: .4s; }
.caricamento__pezzo--e1 { animation-delay: 1.34s; animation-duration: .4s; }
.caricamento__pezzo--l3 { animation-delay: 1.38s; animation-duration: .4s; }
.caricamento__pezzo--e2 { animation-delay: 1.42s; animation-duration: .4s; }
.caricamento__pezzo--g  { animation-delay: 1.46s; animation-duration: .4s; }
.caricamento__pezzo--a4 { animation-delay: 1.50s; animation-duration: .4s; }
.caricamento__pezzo--n2 { animation-delay: 1.54s; animation-duration: .4s; }
.caricamento__pezzo--e3 { animation-delay: 1.74s; animation-duration: .4s; }

/* La palma: il tronco finisce nella C di ELEGANCE. Cresce dal fondo
   (dove sta la C), poi il ciuffo ondeggia attorno allo stesso punto. */
.caricamento__pezzo--palma {
    transform-origin: 18% 96%;
    animation: caricamento-cresce .75s cubic-bezier(.34, 1.4, .64, 1) 1.5s forwards,
               caricamento-ondeggia 2.6s ease-in-out 2.25s infinite;
}

.caricamento__pezzo--v { left: 12.34%; top: 13.73%; width: 14.35%; }
.caricamento__pezzo--i { left: 23.24%; top: 11.76%; width: 11.19%; }
.caricamento__pezzo--l1 { left: 32.71%; top: 10.89%; width: 12.05%; }
.caricamento__pezzo--l2 { left: 44.76%; top: 9.59%; width: 12.05%; }
.caricamento__pezzo--a1 { left: 56.53%; top: 7.63%; width: 16.07%; }
.caricamento__pezzo--c { left: 8.75%; top: 46.62%; width: 12.20%; }
.caricamento__pezzo--h { left: 19.23%; top: 44.01%; width: 14.20%; }
.caricamento__pezzo--a2 { left: 30.99%; top: 43.36%; width: 12.20%; }
.caricamento__pezzo--r { left: 42.61%; top: 41.83%; width: 12.91%; }
.caricamento__pezzo--m { left: 54.23%; top: 40.52%; width: 15.21%; }
.caricamento__pezzo--a3 { left: 8.32%; top: 76.91%; width: 6.60%; }
.caricamento__pezzo--n1 { left: 14.92%; top: 76.25%; width: 7.60%; }
.caricamento__pezzo--d { left: 22.24%; top: 75.82%; width: 6.60%; }
.caricamento__pezzo--e1 { left: 32.57%; top: 74.73%; width: 6.17%; }
.caricamento__pezzo--l3 { left: 38.16%; top: 74.95%; width: 4.88%; }
.caricamento__pezzo--e2 { left: 43.62%; top: 73.86%; width: 6.31%; }
.caricamento__pezzo--g { left: 49.50%; top: 72.98%; width: 7.46%; }
.caricamento__pezzo--a4 { left: 56.53%; top: 72.33%; width: 6.89%; }
.caricamento__pezzo--n2 { left: 63.27%; top: 72.11%; width: 7.75%; }
.caricamento__pezzo--e3 { left: 77.47%; top: 70.15%; width: 6.46%; }
.caricamento__pezzo--palma { left: 70.88%; top: 26.58%; width: 23.53%; }

/* Uscita: l'adesivo si stacca (piccolo e svanisce), poi il pannello sale */
.caricamento.caricamento--esce .caricamento__adesivo {
    animation: caricamento-stacca .32s cubic-bezier(.4, 0, 1, 1) forwards;
}

.caricamento--esce {
    animation: caricamento-sale .62s cubic-bezier(.7, 0, .84, 0) .22s forwards;
}

@keyframes caricamento-attacca {
    0%   { opacity: 0; transform: scale(.35) rotate(-10deg); }
    55%  { opacity: 1; }
    100% { opacity: 1; transform: scale(1) rotate(0); }
}

@keyframes caricamento-cade {
    0%   { opacity: 0; transform: translateY(-70%) rotate(var(--giro)) scale(.5); }
    45%  { opacity: 1; }
    100% { opacity: 1; transform: none; }
}

@keyframes caricamento-cresce {
    0%   { opacity: 0; transform: scale(.2, 0); }
    30%  { opacity: 1; }
    100% { opacity: 1; transform: none; }
}

@keyframes caricamento-galleggia {
    0%, 100% { transform: translateY(0); }
    50%      { transform: translateY(-6px); }
}

@keyframes caricamento-alone {
    0%, 100% { transform: scale(.92); opacity: .75; }
    50%      { transform: scale(1.05); opacity: 1; }
}

@keyframes caricamento-stacca {
    to { transform: scale(.88) translateY(-10px); opacity: 0; }
}

@keyframes caricamento-sale {
    to { transform: translateY(-100%); }
}

/* --- Versione breve (dalla seconda pagina della visita) ------------------
   Il logo e' gia' composto: niente cadute, solo un piccolo "pop"
   dell'adesivo, la palma che ondeggia e l'alone. */
.caricamento--breve .caricamento__fondo,
.caricamento--breve .caricamento__pezzo {
    opacity: 1;
    animation: none;
}

.caricamento--breve .caricamento__pezzo--palma {
    animation: caricamento-ondeggia 2.6s ease-in-out infinite;
    animation-delay: calc(-1 * var(--fase, 0s));
}

.caricamento--breve .caricamento__adesivo {
    animation: caricamento-pop .45s cubic-bezier(.34, 1.56, .64, 1) both,
               caricamento-galleggia 3s ease-in-out .45s infinite;
}

/* --- Copertura prima di cambiare pagina ---------------------------------
   Il pannello scende dall'alto e copre la pagina che si lascia; la pagina
   nuova parte gia' coperta e poi il pannello risale. */
.caricamento--copre {
    animation: caricamento-scende .42s cubic-bezier(.16, 1, .3, 1) both;
}

@keyframes caricamento-pop {
    from { transform: scale(.9); opacity: 0; }
    to   { transform: scale(1);  opacity: 1; }
}

@keyframes caricamento-scende {
    from { transform: translateY(-100%); }
    to   { transform: translateY(0); }
}

/* --- Il cielo del caricamento: vento e nuvole ----------------------------
   Folate disegnate come l'icona del vento (un tratto che finisce in un
   ricciolo): attraversano lo schermo da sinistra a destra, si disegnano
   mentre entrano e si cancellano mentre escono. Una passa davanti
   all'adesivo, all'altezza della palma, le altre dietro. Le nuvole sono
   tenui e lente: sfondo, non protagoniste. */
.caricamento__cielo {
    position: absolute;
    inset: 0;
    pointer-events: none;
}

.caricamento__adesivo {
    z-index: 1;
}

/* le nuvole sono un <img> SVG (col colore dentro il file), non SVG inline:
   in Bootstrap Studio restano componenti Image */
.caricamento__nuvola {
    position: absolute;
    left: 0;
    height: auto;
    animation: caricamento-deriva 18s linear infinite;
}

.caricamento__nuvola--1 { top: 14%; width: clamp(110px, 15vw, 190px); animation-delay: calc(-5s - var(--fase, 0s)); }
.caricamento__nuvola--2 { top: 74%; width: clamp(80px, 11vw, 140px); animation-duration: 24s; animation-delay: calc(-15s - var(--fase, 0s)); }

.caricamento__vento {
    position: absolute;
    left: 0;
    width: clamp(62px, 7vw, 100px);
    opacity: 0;
    animation: caricamento-soffio-a 7.5s linear infinite;
}

/* Le linee dell'icona scorrono da sole, come nell'originale Meteocons
   (li' e' SMIL, qui CSS): un tratto lungo quanto il disegno che scivola
   lungo il percorso e finisce nel ricciolo. */
.caricamento__raffica {
    fill: none;
    stroke: var(--blu-canalotto);
    stroke-width: 18;
    stroke-linecap: round;
    stroke-miterlimit: 10;
}

.caricamento__raffica--a {
    stroke-dasharray: 148;
    animation: caricamento-raffica-a 6s linear infinite;
    animation-delay: calc(-1 * var(--fase, 0s));
}

.caricamento__raffica--b {
    stroke-dasharray: 110;
    animation: caricamento-raffica-b 6s linear infinite;
    animation-delay: calc(-1 * var(--fase, 0s));
}

/* Sei folate, tre modi di comparire: (a) entra dal bordo e svanisce a
   meta' strada, (b) compare in mezzo ed esce dal bordo, (c) nasce e muore
   dentro lo schermo. Velocita', altezze e fasi diverse, cosi' non
   sembrano un nastro trasportatore. Ritardi negativi: all'apertura sono
   gia' in giro, perche' il caricamento dura meno di un loro passaggio. */
.caricamento__vento--1 { top: 15%; animation-name: caricamento-soffio-a; animation-delay: calc(-2.3s - var(--fase, 0s)); }
.caricamento__vento--2 { top: 28%; animation-name: caricamento-soffio-c; animation-duration: 8.2s; animation-delay: calc(-1.9s - var(--fase, 0s)); width: clamp(46px, 5vw, 72px); }
.caricamento__vento--3 { top: 41%; animation-name: caricamento-soffio-b; animation-delay: calc(-5.1s - var(--fase, 0s)); }
.caricamento__vento--4 { top: 56%; animation-name: caricamento-soffio-c; animation-duration: 7.8s; animation-delay: calc(-3.1s - var(--fase, 0s)); }
.caricamento__vento--5 { top: 69%; animation-name: caricamento-soffio-a; animation-duration: 8.6s; animation-delay: calc(-0.5s - var(--fase, 0s)); width: clamp(48px, 5.4vw, 76px); }
.caricamento__vento--6 { top: 82%; animation-name: caricamento-soffio-b; animation-duration: 8s; animation-delay: calc(-3.85s - var(--fase, 0s)); }

/* la palma piega un po' di piu' verso destra, sotto il vento */
@keyframes caricamento-ondeggia {
    0%, 100% { transform: rotate(0); }
    35%      { transform: rotate(3deg); }
    70%      { transform: rotate(-1.5deg); }
}

@keyframes caricamento-raffica-a {
    to { stroke-dashoffset: 2960; }
}

@keyframes caricamento-raffica-b {
    to { stroke-dashoffset: 1540; }
}

/* entra dal bordo, svanisce a meta' strada */
@keyframes caricamento-soffio-a {
    0%   { transform: translate(-12vw, 0);    opacity: 0; }
    12%  { opacity: .5; }
    42%  { opacity: .5; }
    58%  { opacity: 0; }
    100% { transform: translate(110vw, -10px); opacity: 0; }
}

/* compare in mezzo, esce dal bordo */
@keyframes caricamento-soffio-b {
    0%   { transform: translate(-12vw, 0);    opacity: 0; }
    38%  { opacity: 0; }
    52%  { opacity: .5; }
    90%  { opacity: .5; }
    100% { transform: translate(110vw, -10px); opacity: 0; }
}

/* nasce e muore dentro lo schermo */
@keyframes caricamento-soffio-c {
    0%   { transform: translate(-12vw, 0);    opacity: 0; }
    22%  { opacity: 0; }
    34%  { opacity: .5; }
    60%  { opacity: .5; }
    74%  { opacity: 0; }
    100% { transform: translate(110vw, -10px); opacity: 0; }
}

@keyframes caricamento-deriva {
    from { transform: translateX(-25vw); }
    to   { transform: translateX(110vw); }
}

/* --- Uscita: alone, vento e nuvole spariscono insieme all'adesivo -------- */
.caricamento.caricamento--esce::before,
.caricamento.caricamento--esce .caricamento__cielo {
    animation: caricamento-svanisce .3s cubic-bezier(.4, 0, 1, 1) forwards;
}

@keyframes caricamento-svanisce {
    to { opacity: 0; }
}

/* --- Arrivo da un clic interno: il logo era gia' fermo, niente "pop" ----- */
.caricamento.caricamento--copre .caricamento__adesivo,
.caricamento.caricamento--continua .caricamento__adesivo {
    animation: caricamento-galleggia 3s ease-in-out infinite;
    animation-delay: calc(-1 * var(--fase, 0s));
}

/* ==========================================================================
   Galleria foto: la griglia
   Stessa griglia di prima (3 foto per fila sul computer, 2 sul telefono,
   stessi margini). Cambiano l'ingresso, il passaggio del mouse e la foto
   che si apre (la "lente", sotto).

   Ingresso: le foto salgono di poco e si posano, invece del fadeInUp del
   tema che le faceva arrivare da un'altezza intera e con ritardi fino a
   1,6 s. Il ritardo segue la colonna (0 / 0,1 / 0,2 s): ogni fila entra
   come un'onda corta, qualunque sia il punto della pagina.
   ========================================================================== */

@keyframes galleria-entra {
    from {
        opacity: 0;
        transform: translate3d(0, 32px, 0) scale(.96);
    }
    to {
        opacity: 1;
        transform: none;
    }
}

.galleria-entra {
    animation-name: galleria-entra;
}

.galleria-entra.animated {
    animation-duration: 1s;
    animation-timing-function: cubic-bezier(.16, 1, .3, 1);
}

/* La foto su cui si chiude la lente deve essere gia' ferma al suo posto:
   se l'ingresso non era ancora partito lo salta (lo aggiunge villa.js).
   !important perche' WOW scrive visibility e animation-name inline. */
.galleria .galleria-vista {
    visibility: visible !important;
    animation: none !important;
}

/* Il riflesso del tema (::after che cresce in altezza, lineare) qui diventa
   un velo blu dal basso: solo opacita', quindi fluido. */
.galleria .image-anime::after {
    inset: 0;
    width: auto;
    height: auto;
    left: 0;
    top: 0;
    transform: none;
    background: linear-gradient(180deg, rgba(11, 43, 69, 0) 45%, rgba(11, 43, 69, .38) 100%);
    opacity: 0;
    transition: opacity .6s cubic-bezier(.16, 1, .3, 1);
}

.galleria .image-anime:hover::after {
    height: auto;
    background-color: transparent;
    opacity: 1;
    transition: opacity .6s cubic-bezier(.16, 1, .3, 1);
}

/* height:auto perche' valga l'aspect-ratio del tema (1 / 0.81) e non
   l'altezza scritta nell'attributo height, che serve solo a riservare lo
   spazio prima che la foto arrivi */
.galleria .photo-gallery img {
    height: auto;
    transition: transform .9s cubic-bezier(.16, 1, .3, 1);
}

@media (hover: hover) {
    .galleria .photo-gallery a:hover img {
        transform: scale(1.045);
    }
}

/* Sul telefono niente hover: la foto risponde al tocco affondando appena. */
@media (hover: none) {
    .galleria .photo-gallery img {
        transition-duration: .25s;
    }
    .galleria .photo-gallery a:active img {
        transform: scale(.97);
    }
}

/* ==========================================================================
   Galleria foto: la lente (la foto aperta a tutto schermo)
   La costruisce villa.js al primo clic; nel codice della pagina non c'e'.

   Come si muove:
   - Apertura: la miniatura stessa si ingrandisce fino al suo posto e,
     mentre cresce, si "scopre": la miniatura e' ritagliata (object-fit:
     cover), la foto grande no, e il ritaglio si allarga insieme al
     movimento. Prima Magnific ingrandiva la foto intera partendo dal
     riquadro ritagliato, e la foto piccola si vedeva tagliata e schiacciata.
   - Scorrimento: la fila di foto segue il dito (o il mouse) uno a uno e al
     rilascio prosegue con la velocita' che aveva, frenata da una molla.
   - Chiusura: la foto torna nella sua miniatura con lo stesso movimento al
     contrario, anche se nel frattempo e' cambiata foto. Si chiude anche
     trascinandola in giu' o in su.
   Muovono solo transform, opacity e clip-path: niente ricalcolo della pagina.
   ========================================================================== */

.lente {
    --lente-su: 72px;
    --lente-giu: 92px;
    --lente-lato: 88px;
    position: fixed;
    inset: 0;
    z-index: 1500;
    overflow: hidden;
    touch-action: none;
    overscroll-behavior: contain;
    -webkit-user-select: none;
    user-select: none;
    -webkit-tap-highlight-color: transparent;
    color: var(--white-color);
}

.lente[hidden] {
    display: none;
}

.lente__velo {
    position: absolute;
    inset: 0;
    background: radial-gradient(120% 90% at 50% 45%, #0E3352 0%, #081E31 60%, #06182A 100%);
}

.lente__binario {
    position: absolute;
    inset: 0;
    will-change: transform;
}

.lente__diapo {
    position: absolute;
    inset: 0;
    display: grid;
    place-items: center;
    margin: 0;
    padding: var(--lente-su) var(--lente-lato) var(--lente-giu);
}

/* Larghezza e altezza le calcola lo script (foto intera nello spazio
   libero, mai ingrandita oltre la sua misura): cosi' la posizione finale e'
   nota prima ancora che la foto sia caricata. */
.lente__foto {
    display: block;
    max-width: 100%;
    max-height: 100%;
    border-radius: var(--angolo-medio);
    transform-origin: 50% 50%;
    -webkit-user-drag: none;
}

/* Col mouse: la lente dice che un clic ingrandisce; ingrandita, che la foto
   si sposta trascinandola. */
@media (hover: hover) {
    .lente__foto {
        cursor: zoom-in;
    }
    .lente--zoom .lente__foto {
        cursor: grab;
    }
    .lente--trascina .lente__foto {
        cursor: grabbing;
    }
}

/* Foto ingrandita: contatore e X restano, sopra una sfumatura scura che li
   tiene leggibili anche su una foto chiara. */
.lente__barra::before {
    content: "";
    position: absolute;
    inset: 0 0 -28px;
    z-index: -1;
    background: linear-gradient(180deg, rgba(6, 24, 42, .62), rgba(6, 24, 42, 0));
    opacity: 0;
    transition: opacity .35s cubic-bezier(.4, 0, .2, 1);
    pointer-events: none;
}

.lente--zoom .lente__barra::before {
    opacity: 1;
}

/* e via didascalia e frecce: tutto lo schermo e' per la foto */
.lente.lente--zoom .lente__didascalia,
.lente.lente--zoom .lente__freccia {
    opacity: 0;
    pointer-events: none;
}

/* Contatore, chiusura, frecce e didascalia: entrano dopo la foto e se ne
   vanno prima, cosi' non distraggono dal movimento principale. */
.lente__barra,
.lente__freccia,
.lente__didascalia {
    opacity: 0;
    transition: opacity .35s cubic-bezier(.4, 0, .2, 1), transform .5s cubic-bezier(.16, 1, .3, 1);
}

.lente__barra {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    display: flex;
    align-items: center;
    justify-content: space-between;
    height: var(--lente-su);
    padding: 0 20px 0 28px;
    transform: translate3d(0, -8px, 0);
}

.lente__didascalia {
    position: absolute;
    left: 50%;
    bottom: 0;
    width: min(90%, 60ch);
    height: var(--lente-giu);
    display: flex;
    align-items: center;
    justify-content: center;
    margin: 0;
    font-size: 1rem;
    line-height: 1.4;
    text-align: center;
    color: rgba(255, 255, 255, .82);
    transform: translate3d(-50%, 8px, 0);
}

.lente__didascalia > span {
    display: inline-block;
}

.lente--pronta .lente__barra,
.lente--pronta .lente__didascalia,
.lente--pronta .lente__freccia {
    opacity: 1;
    transform: translate3d(0, 0, 0);
}

.lente--pronta .lente__didascalia {
    transform: translate3d(-50%, 0, 0);
}

.lente--pronta .lente__freccia {
    transform: translate3d(0, -50%, 0);
}

/* durante il trascinamento e in uscita i comandi spariscono subito */
.lente--trascina .lente__barra,
.lente--trascina .lente__didascalia,
.lente--trascina .lente__freccia,
.lente--esce .lente__barra,
.lente--esce .lente__didascalia,
.lente--esce .lente__freccia {
    opacity: 0;
    transition-duration: .18s;
}

.lente__contatore {
    margin: 0;
    font-size: .9375rem;
    font-weight: 500;
    letter-spacing: .08em;
    font-variant-numeric: tabular-nums;
    color: rgba(255, 255, 255, .7);
}

.lente__numero {
    display: inline-block;
    min-width: 1ch;
    color: var(--white-color);
}

.lente__testo {
    display: inline-block;
}

/* Pulsanti: cerchi di vetro scuro. Le icone sono la stessa freccia SVG del
   selettore di lingua, usata come maschera e ruotata. */
.lente__chiudi,
.lente__freccia {
    display: grid;
    place-items: center;
    width: 48px;
    height: 48px;
    padding: 0;
    border: 1px solid rgba(255, 255, 255, .16);
    border-radius: 50%;
    background: rgba(255, 255, 255, .07);
    color: var(--white-color);
    cursor: pointer;
    transition: opacity .35s cubic-bezier(.4, 0, .2, 1), transform .5s cubic-bezier(.16, 1, .3, 1), background-color .25s ease, border-color .25s ease;
}

.lente__chiudi:hover,
.lente__freccia:hover {
    background: rgba(255, 255, 255, .16);
    border-color: rgba(255, 255, 255, .3);
}

.lente__chiudi:focus-visible,
.lente__freccia:focus-visible {
    outline: 2px solid var(--turchese-chiaro);
    outline-offset: 3px;
}

.lente__icona {
    display: block;
    width: 14px;
    height: 10px;
    background-color: currentColor;
    -webkit-mask: url("../img/icone/lingua-freccia.svg") center / contain no-repeat;
    mask: url("../img/icone/lingua-freccia.svg") center / contain no-repeat;
    transition: transform .35s cubic-bezier(.16, 1, .3, 1);
}

/* la croce: due tratti */
.lente__chiudi .lente__icona {
    position: relative;
    width: 16px;
    height: 16px;
    -webkit-mask: none;
    mask: none;
    background: none;
}

.lente__chiudi .lente__icona::before,
.lente__chiudi .lente__icona::after {
    content: "";
    position: absolute;
    left: 50%;
    top: 50%;
    width: 18px;
    height: 1.8px;
    border-radius: 1px;
    background: currentColor;
    transform: translate(-50%, -50%) rotate(45deg);
}

.lente__chiudi .lente__icona::after {
    transform: translate(-50%, -50%) rotate(-45deg);
}

.lente__chiudi:hover .lente__icona {
    transform: rotate(90deg);
}

.lente__freccia {
    position: absolute;
    top: 50%;
    transform: translate3d(0, -50%, 0);
}

.lente__freccia--prec {
    left: 20px;
}

.lente__freccia--succ {
    right: 20px;
}

.lente__freccia--prec .lente__icona {
    transform: rotate(90deg);
}

.lente__freccia--succ .lente__icona {
    transform: rotate(-90deg);
}

.lente__freccia--prec:hover .lente__icona {
    transform: rotate(90deg) translateY(2px);
}

.lente__freccia--succ:hover .lente__icona {
    transform: rotate(-90deg) translateY(2px);
}

.lente--pronta .lente__freccia[aria-disabled="true"] {
    opacity: .25;
    cursor: default;
}

/* Sul telefono niente frecce (si scorre col dito), foto quasi a tutto
   schermo, comandi piu' stretti. */
@media (max-width: 767.98px), (hover: none) {
    .lente {
        --lente-lato: 12px;
        --lente-su: 64px;
        --lente-giu: 84px;
    }
    .lente__freccia {
        display: none;
    }
    .lente__barra {
        padding: 0 10px 0 18px;
    }
    .lente__didascalia {
        font-size: .9375rem;
    }
}

/* La barra di scorrimento della pagina resta (vedi html, sopra): mentre la
   lente e' aperta prende i colori scuri, cosi' non fa una striscia chiara
   accanto al velo. */
.lente-aperta {
    scrollbar-color: #2A4A66 #06182A;
}

/* ==========================================================================
   Galleria video: la griglia
   Stessa griglia di prima (3 per fila sul computer, 2 sul tablet, 1 sul
   telefono). Il pulsante play e il titolo ora si vedono sempre: prima il
   play compariva solo col mouse sopra, e dal telefono non si capiva che
   erano video.
   ========================================================================== */

.galleria-video .video-gallery-image figure {
    position: relative;
    margin: 0;
}

.galleria-video .video-gallery-image img {
    width: 100%;
    height: auto;
    transition: transform .9s cubic-bezier(.16, 1, .3, 1);
}

/* velo dal basso, sempre presente: tiene leggibile il titolo. Era un
   riquadro scuro che cresceva da un punto (scale 0 -> 1, "all") */
.galleria-video .video-gallery-image a::before,
.galleria-video .video-gallery-image:hover a::before {
    opacity: .85;
    visibility: visible;
    transform: none;
    background: linear-gradient(180deg, rgba(11, 43, 69, 0) 38%, rgba(11, 43, 69, .78) 100%);
    transition: opacity .6s cubic-bezier(.16, 1, .3, 1);
}

/* il pulsante play: vetro chiaro, sempre visibile */
.galleria-video .video-gallery-image a::after {
    right: auto;
    width: 64px;
    height: 64px;
    padding-left: 4px;
    font-size: 18px;
    font-weight: 900;
    opacity: 1;
    visibility: visible;
    background: rgba(255, 255, 255, .16);
    border: 1px solid rgba(255, 255, 255, .6);
    -webkit-backdrop-filter: blur(8px);
    backdrop-filter: blur(8px);
    transform: translate(-50%, -50%) scale(1);
    transition: transform .5s cubic-bezier(.16, 1, .3, 1), background-color .35s ease, border-color .35s ease;
}

/* il titolo, sopra il velo; il link resta cliccabile sotto */
.galleria-video .video-titolo {
    position: absolute;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 2;
    margin: 0;
    padding: 18px 22px;
    font-family: var(--display-font);
    font-size: 1.125rem;
    font-weight: 600;
    line-height: 1.3;
    color: var(--white-color);
    pointer-events: none;
    transition: transform .6s cubic-bezier(.16, 1, .3, 1);
}

@media (hover: hover) {
    .galleria-video .video-gallery-image:hover img {
        transform: scale(1.045);
    }
    .galleria-video .video-gallery-image:hover a::before {
        opacity: 1;
    }
    .galleria-video .video-gallery-image:hover a::after {
        transform: translate(-50%, -50%) scale(1.12);
        background: var(--accent-color);
        border-color: var(--accent-color);
    }
    .galleria-video .video-gallery-image:hover .video-titolo {
        transform: translate3d(0, -4px, 0);
    }
}

@media (hover: none) {
    .galleria-video .video-gallery-image img {
        transition-duration: .25s;
    }
    .galleria-video .video-gallery-image a:active img {
        transform: scale(.97);
    }
}

/* come nella galleria foto: il riquadro su cui si chiude la lente salta
   l'ingresso se non l'aveva ancora fatto */
.galleria-video .galleria-vista {
    visibility: visible !important;
    animation: none !important;
}

/* ==========================================================================
   Lente dei video
   Stessa lente delle foto (vedi sopra), con al posto della foto un
   riquadro 16:9: sotto l'anteprima, sopra il lettore (YouTube, Vimeo o
   file), che sfuma dentro quando il video e' pronto. Mentre carica, un
   anello gira sopra l'anteprima.
   ========================================================================== */

.lente__schermo {
    position: relative;
}

.lente__poster {
    position: absolute;
    display: block;
    max-width: none;
    transform-origin: 50% 50%;
    -webkit-user-drag: none;
}

.lente__lettore {
    position: absolute;
    inset: 0;
    overflow: hidden;
    border-radius: var(--angolo-medio);
    background: #000;
    opacity: 0;
    transform-origin: 50% 50%;
    transition: opacity .5s cubic-bezier(.4, 0, .2, 1);
}

.lente__lettore--pronto {
    opacity: 1;
}

/* video in riproduzione: l'anteprima dietro non serve (vedi villa.js) */
.lente__schermo--gioca .lente__poster {
    visibility: hidden;
}

.lente__lettore iframe,
.lente__lettore video {
    position: absolute;
    inset: 0;
    display: block;
    width: 100%;
    height: 100%;
    border: 0;
}

/* riquadro nato da un pulsante (nessuna anteprima): e' del colore del
   pulsante, e il video ci sfuma dentro quando e' pronto */
.lente__lettore--pulsante iframe,
.lente__lettore--pulsante video {
    opacity: 0;
    transition: opacity .5s cubic-bezier(.4, 0, .2, 1);
}

.lente__lettore--pulsante.lente__lettore--caricato iframe,
.lente__lettore--pulsante.lente__lettore--caricato video {
    opacity: 1;
}

.lente__attesa {
    position: absolute;
    left: 50%;
    top: 50%;
    width: 44px;
    height: 44px;
    margin: -22px 0 0 -22px;
    border: 2px solid rgba(255, 255, 255, .25);
    border-top-color: var(--white-color);
    border-radius: 50%;
    opacity: 0;
    pointer-events: none;
    transition: opacity .3s ease;
    animation: lente-gira .9s linear infinite;
}

.lente__schermo--carica .lente__attesa {
    opacity: 1;
}

@keyframes lente-gira {
    to {
        transform: rotate(360deg);
    }
}

/* video fermo (quelli accanto, o dopo averlo lasciato): il play sopra
   l'anteprima, come nella griglia */
.lente__schermo::after {
    content: "\f04b";
    position: absolute;
    left: 50%;
    top: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 72px;
    height: 72px;
    padding-left: 4px;
    font-family: "Font Awesome 6 Free", "Font Awesome 5 Free";
    font-weight: 900;
    font-size: 20px;
    color: var(--white-color);
    background: rgba(255, 255, 255, .16);
    border: 1px solid rgba(255, 255, 255, .6);
    border-radius: 50%;
    -webkit-backdrop-filter: blur(8px);
    backdrop-filter: blur(8px);
    opacity: 0;
    transform: translate(-50%, -50%) scale(.9);
    transition: opacity .35s ease, transform .5s cubic-bezier(.16, 1, .3, 1);
    pointer-events: none;
}

.lente--pronta .lente__schermo--fermo::after {
    opacity: 1;
    transform: translate(-50%, -50%) scale(1);
}

.lente--video .lente__schermo--fermo {
    cursor: pointer;
}

/* un video solo (i pulsanti "Guarda il video"): niente contatore e frecce */
.lente--singolo .lente__contatore,
.lente--singolo .lente__freccia {
    display: none;
}

.lente__didascalia--vuota {
    visibility: hidden;
}

@media (prefers-reduced-motion: reduce) {
    .lente__attesa {
        animation-duration: 2.4s;
    }
}

/* ==========================================================================
   Il bollo al centro delle due foto (La villa, Servizi, Amenities)
   Stesso cerchio blu del tema, stessa misura; dentro, al posto dell'icona
   di un edificio del template, il logo-adesivo della villa (lettere blu
   con il contorno bianco dell'adesivo).
   ========================================================================== */
.why-choose-icon-box img {
    width: 76px;
    max-width: none;
    height: auto;
}

@media (max-width: 991.98px) {
    .why-choose-icon-box img {
        width: 62px;
    }
}

@media (max-width: 767.98px) {
    .why-choose-icon-box img {
        width: 50px;
    }
}


/* ==========================================================================
   Foto vere della villa (29/09/2026)
   Sono tutte orizzontali (16:9) e i riquadri del tema le ritagliano da soli
   con aspect-ratio + object-fit: cover. Dove il soggetto non sta al centro,
   una di queste classi sposta il ritaglio in orizzontale: 0% = si vede il
   bordo sinistro della foto, 100% = il bordo destro. !important perche' il
   tema fissa object-position su alcuni riquadri con selettori piu' forti.
   ========================================================================== */
.inquadra-15 { object-position: 15% 50% !important; }
.inquadra-20 { object-position: 20% 50% !important; }
.inquadra-25 { object-position: 25% 50% !important; }
.inquadra-35 { object-position: 35% 50% !important; }
.inquadra-45 { object-position: 45% 50% !important; }
.inquadra-60 { object-position: 60% 50% !important; }
.inquadra-75 { object-position: 75% 50% !important; }
.inquadra-85 { object-position: 85% 50% !important; }

/* Le <img> hanno width e height veri (servono a Bootstrap Studio e a non far
   saltare la pagina mentre carica). In questi riquadri il tema fissa solo la
   larghezza: senza height:auto il browser usava l'attributo (677 px) e le
   foto venivano lunghissime invece di prendere l'aspect-ratio del tema. */
.apartment-image img,
.amenities-img img,
.project-img img,
.post-featured-image img,
.vision-mission-tab-image img,
.our-experience-img img,
.property-tab-image img,
.project-entry-image img {
    height: auto;
}

/* "La casa" (home, servizi): al posto della figura scontornata su sfondo
   c'e' una foto, che riempie il riquadro */
.our-experience-img {
    padding-left: 0;
}

.our-experience-img img {
    object-fit: cover;
}

/* Riquadro "Resta una domanda?": le quattro miniature tonde sono foto
   della villa (prima erano volti di repertorio spacciati per ospiti) */
.cta-client-img img {
    width: 50px;
    height: 50px;
    max-width: none;
    object-fit: cover;
}

/* ==========================================================================
   Schede camera: lo slider delle foto
   Carosello nativo di Bootstrap (in Bootstrap Studio e' il componente
   Carousel). Le foto non partono da sole: si sfogliano con le frecce, i
   pallini o il dito. Con una sola foto frecce e pallini spariscono.
   ========================================================================== */

.slider-camera {
    margin-bottom: 40px;
    border-radius: var(--angolo-grande);
    overflow: hidden;
    background: var(--pietra-chiara);
}

.slider-camera .carousel-item img {
    height: auto;
    aspect-ratio: 16 / 9;
    object-fit: cover;
}

.slider-camera .carousel-control-prev,
.slider-camera .carousel-control-next {
    top: 50%;
    bottom: auto;
    width: 48px;
    height: 48px;
    margin: 0 16px;
    transform: translateY(-50%);
    background: rgba(11, 43, 69, .55);
    border-radius: 50% !important;
    opacity: 1;
    transition: background .3s ease;
}

.slider-camera .carousel-control-prev:hover,
.slider-camera .carousel-control-next:hover,
.slider-camera .carousel-control-prev:focus-visible,
.slider-camera .carousel-control-next:focus-visible {
    background: var(--accent-color);
}

.slider-camera .carousel-control-prev-icon,
.slider-camera .carousel-control-next-icon {
    width: 18px;
    height: 18px;
}

.slider-camera .carousel-indicators {
    margin-bottom: 14px;
}

.slider-camera .carousel-indicators [data-bs-target] {
    width: 10px;
    height: 10px;
    margin: 0 5px;
    border: 0;
    border-radius: 50% !important;
    opacity: .6;
}

.slider-camera .carousel-indicators .active {
    opacity: 1;
}

.slider-camera:not(:has(.carousel-item + .carousel-item)) .carousel-control-prev,
.slider-camera:not(:has(.carousel-item + .carousel-item)) .carousel-control-next,
.slider-camera:not(:has(.carousel-item + .carousel-item)) .carousel-indicators {
    display: none;
}

/* Il pulsante "guarda le date libere" sotto il testo della camera */
.camera-prenota {
    margin: 10px 0 40px;
}

/* "Le altre camere", in fondo a ogni scheda: la sezione sopra ha gia' il
   suo spazio sotto, qui serve solo quello finale */
.altre-camere {
    padding-bottom: 70px;
}

@media (max-width: 767.98px) {
    .slider-camera {
        margin-bottom: 30px;
        border-radius: var(--angolo-medio);
    }

    .slider-camera .carousel-control-prev,
    .slider-camera .carousel-control-next {
        width: 40px;
        height: 40px;
        margin: 0 10px;
    }

    .altre-camere {
        padding-bottom: 20px;
    }
}

/* ==========================================================================
   Articoli dei consigli: le foto dentro il testo
   ========================================================================== */

.foto-articolo {
    display: block;
    margin: 10px 0 30px;
}

.foto-articolo img {
    display: block;
    width: 100%;
    height: auto;
    margin-bottom: 10px;
    border-radius: var(--angolo-medio);
}

.foto-articolo .figure-caption {
    font-size: 15px;
    color: var(--text-color);
}

/* Schede camera sul telefono: la barra laterale scende sotto il contenuto,
   quindi lo spazio le serve sopra e non sotto */
@media (max-width: 991.98px) {
    .page-project-single .project-sidebar {
        margin-top: 40px;
        margin-bottom: 0;
    }
}

/* ==========================================================================
   Menu da computer: piu' corto
   Cinque voci invece di sette: "Home" la fa gia' il logo, Servizi e le
   pagine secondarie stanno nella tendina "Scopri". Le voci non vanno mai a
   capo ("Chi siamo" su due righe alzava la testata). Fra 992 e 1199 px
   (portatili piccoli, tablet in orizzontale) voci un po' piu' strette, cosi'
   telefono e lingua restano dentro lo schermo.
   ========================================================================== */

.main-menu .navbar-nav > li > a {
    white-space: nowrap;
}

@media (min-width: 992px) and (max-width: 1199.98px) {
    .main-menu .nav-menu-wrapper {
        margin: 0 10px;
    }

    .main-menu .navbar-nav > li > a {
        padding: 8px 10px !important;
        font-size: 16px;
    }
}

/* ==========================================================================
   Schede delle camere cliccabili per intero
   Sopra la foto il tema mette una velatura scura (figure::before, z-index 1)
   e il riquadro del titolo: stavano sopra il link della foto e si
   prendevano il clic. In "Camere" la velatura copre la meta' bassa, in home
   tutta la foto: si cliccava solo in alto, o solo sul nome. Ora velatura e
   riquadro lasciano passare il clic; il nome e la freccia restano link.
   ========================================================================== */

.project-img figure::before,
.apartment-image figure::before {
    pointer-events: none;
}

.project-title,
.apartments-content {
    pointer-events: none;
}

.project-title a,
.apartments-content a {
    pointer-events: auto;
}

/* Pagine camera: senza il video, l'elenco «Com'e' fatta» prende tutta la
   riga e si divide in due colonne */
.page-project-single .project-entry-list {
    width: 100%;
}

@media (min-width: 768px) {
    .page-project-single .project-entry-list ul {
        columns: 2;
        column-gap: 30px;
    }

    .page-project-single .project-entry-list ul li {
        break-inside: avoid;
    }
}

/* ==========================================================================
   CHI SIAMO (la-villa.html)
   Una pagina che racconta, con componenti suoi. Il filo e' l'arco tondo del
   soggiorno, quello che porta in cucina: le foto della pagina hanno la
   stessa forma. Fondi alternati bianco / bianco calce.
   ========================================================================== */

/* --- L'arco: cornice delle foto -------------------------------------------
   Raggi in percentuale con la barra (orizzontale / verticale): cosi' la cima
   e' un semicerchio esatto e gli angoli in basso restano di 12px. Con
   "999px" il browser riduceva in proporzione anche quelli in basso. */
.arco {
    display: block;
    margin: 0;
    overflow: hidden;
    aspect-ratio: 3 / 4;
    background: var(--pietra-chiara);
    border-radius: 50% 50% var(--angolo-medio) var(--angolo-medio) / 37.5% 37.5% var(--angolo-medio) var(--angolo-medio);
}

.arco--alto {
    aspect-ratio: 4 / 5;
    border-radius: 50% 50% var(--angolo-grande) var(--angolo-grande) / 40% 40% var(--angolo-grande) var(--angolo-grande);
}

.arco img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
    transition: transform .7s ease;
}

/* --- 1. La storia ---------------------------------------------------------- */
.storia,
.accoglienza,
.distanze {
    padding: var(--sezione-y) 0;
}

.storia-testo .section-title {
    margin-bottom: 28px;
}

/* l'attacco del racconto, in Fraunces, con la capolettera blu */
.storia-attacco {
    margin-bottom: 22px;
    font-family: var(--display-font);
    font-size: clamp(1.3rem, 1.05rem + 0.9vw, 1.7rem);
    line-height: 1.45;
    color: var(--primary-color);
}

.storia-attacco::first-letter {
    float: left;
    padding: 8px 12px 0 0;
    font-size: 3.3em;
    font-weight: 600;
    line-height: .8;
    color: var(--blu-canalotto);
}

.storia-video {
    display: inline-flex;
    align-items: center;
    gap: 14px;
    margin-top: 10px;
    font-size: 15px;
    font-weight: 700;
    letter-spacing: .06em;
    text-transform: uppercase;
    color: var(--accent-color);
}

.storia-video__icona {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 54px;
    height: 54px;
    border-radius: 50%;
    background: var(--accent-color);
    color: var(--white-color);
    transition: transform .3s ease, background-color .3s ease;
}

/* Nel cerchio c'e' una foto della villa: la lente dei video (villa.js)
   parte dall'immagine dentro il link, quindi il video si apre crescendo da
   questo cerchio e ci si richiude dentro. Senza foto si apriva da un
   rettangolo nero, grande quanto tutto il link. */
.storia-video__icona {
    position: relative;
    overflow: hidden;
}

.storia-video__icona img {
    position: absolute;
    inset: 0;
    width: 100%;
    height: 100%;
    border-radius: 50%;
    object-fit: cover;
}

/* velo blu sopra la foto, perche' il triangolo si legga */
.storia-video__icona::after {
    content: "";
    position: absolute;
    inset: 0;
    border-radius: 50%;
    background: rgba(15, 76, 129, .55);
    transition: background-color .3s ease;
}

.storia-video__icona i {
    position: relative;
    z-index: 1;
    margin-left: 3px;
    font-size: 16px;
}

.storia-video:hover .storia-video__icona::after,
.storia-video:focus-visible .storia-video__icona::after {
    background: rgba(11, 43, 69, .55);
}

.storia-video:hover,
.storia-video:focus-visible {
    color: var(--primary-color);
}

.storia-video:hover .storia-video__icona,
.storia-video:focus-visible .storia-video__icona {
    background: var(--primary-color);
    transform: scale(1.06);
}

/* --- 2. Le tappe: 1978, 2012, oggi ---------------------------------------
   Una linea sola che attraversa le tre colonne; il pallino di ogni tappa ci
   sta sopra. L'altezza dell'anno e' una variabile, cosi' linea e pallini
   restano allineati a ogni larghezza. */
.tappe {
    padding: var(--sezione-y) 0;
    background: var(--bianco-calce);
}

.tappe-linea {
    --anno-h: clamp(3rem, 2.1rem + 3vw, 4.75rem);
    position: relative;
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 40px;
    margin: 0;
    padding: 0;
    list-style: none;
}

.tappe-linea::before {
    content: "";
    position: absolute;
    top: calc(var(--anno-h) + 27px);
    left: 0;
    right: 0;
    height: 2px;
    background: linear-gradient(90deg, var(--blu-canalotto) 0%, var(--blu-notte) 100%);
}

.tappa__anno {
    position: relative;
    display: block;
    height: var(--anno-h);
    font-family: var(--display-font);
    font-size: var(--anno-h);
    font-weight: 600;
    line-height: 1;
    letter-spacing: -.02em;
    color: var(--blu-canalotto);
}

/* "oggi" in corsivo, come le parole evidenziate nei titoli */
.tappa:last-child .tappa__anno {
    font-style: italic;
}

.tappa__anno::after {
    content: "";
    position: absolute;
    left: 0;
    top: calc(100% + 20px);
    width: 16px;
    height: 16px;
    border: 3px solid var(--blu-canalotto);
    border-radius: 50%;
    background: var(--white-color);
}

.tappa__titolo {
    margin: 56px 0 10px;
    font-size: 1.35rem;
}

.tappa p {
    margin: 0;
}

/* --- 3. L'accoglienza: le cose che facciamo noi ------------------------- */
.noi-elenco {
    margin: 0;
    padding: 0;
    list-style: none;
}

.noi-voce {
    padding: 22px 0;
    border-top: 1px solid var(--divider-color);
}

.noi-voce:last-child {
    border-bottom: 1px solid var(--divider-color);
}

.noi-voce__frase {
    margin: 0 0 6px;
    font-size: clamp(1.25rem, 1.1rem + .5vw, 1.55rem);
    font-style: italic;
    color: var(--blu-canalotto);
}

.noi-voce p {
    margin: 0;
}

@media (min-width: 992px) {
    .noi-voce {
        display: grid;
        grid-template-columns: minmax(0, 15.5rem) minmax(0, 1fr);
        gap: 28px;
        align-items: baseline;
    }

    .noi-voce__frase {
        margin: 0;
    }

    /* la foto resta ferma mentre l'elenco scorre */
    .accoglienza-foto {
        position: sticky;
        top: 130px;
    }
}

/* --- 4. Dove si passa la giornata: quattro archi ------------------------- */
.colpo-occhio {
    padding: var(--sezione-y) 0;
    background: var(--bianco-calce);
}

.spazio {
    display: block;
    color: inherit;
}

.spazio:hover .arco img,
.spazio:focus-visible .arco img {
    transform: scale(1.05);
}

.spazio:focus-visible {
    outline: 2px solid var(--blu-canalotto);
    outline-offset: 6px;
    border-radius: var(--angolo-medio);
}

.spazio__nome {
    margin: 18px 0 6px;
    font-size: 1.25rem;
    transition: color .3s ease;
}

.spazio:hover .spazio__nome,
.spazio:focus-visible .spazio__nome {
    color: var(--blu-canalotto);
}

.spazio__testo {
    margin: 0;
    font-size: 15px;
    line-height: 1.55;
    color: var(--text-color);
}

.colpo-occhio__fine {
    margin-top: 50px;
    text-align: center;
}

/* --- 5. Dove siamo: il righello delle distanze ---------------------------
   Le mete stanno a distanza proporzionale ai chilometri veri, su una scala
   da 0 a 6 km (una tacca per chilometro). Su telefono il righello e'
   verticale. */
.distanze__intro {
    margin: 0;
}

.righello {
    position: relative;
    height: 230px;
    margin-top: 10px;
}

.righello::before {
    content: "";
    position: absolute;
    top: 114px;
    left: 0;
    right: 0;
    height: 3px;
    border-radius: 3px;
    background: linear-gradient(90deg, var(--blu-canalotto) 0%, var(--blu-notte) 100%);
}

/* le tacche dei chilometri */
.righello::after {
    content: "";
    position: absolute;
    top: 108px;
    left: 0;
    right: 0;
    height: 15px;
    background-image: linear-gradient(90deg, var(--pietra) 2px, transparent 2px);
    background-size: calc(100% / 6) 100%;
    opacity: .45;
}

.righello__casa {
    position: absolute;
    top: 138px;
    left: 0;
    z-index: 1;
    font-size: 13px;
    font-weight: 700;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--primary-color);
}

.righello__casa::before {
    content: "";
    position: absolute;
    top: -33px;
    left: 0;
    width: 20px;
    height: 20px;
    border: 4px solid var(--white-color);
    border-radius: 50%;
    background: var(--primary-color);
    box-shadow: 0 0 0 2px var(--primary-color);
}

.righello__mete {
    margin: 0;
    padding: 0;
    list-style: none;
}

.distanza {
    position: absolute;
    top: 115px;
    z-index: 1;
}

.distanza--1   { left: 16.6667%; }
.distanza--1-8 { left: 30%; }
.distanza--6   { left: 100%; }

.distanza::before {
    content: "";
    position: absolute;
    top: -9px;
    left: -9px;
    width: 18px;
    height: 18px;
    border: 3px solid var(--blu-canalotto);
    border-radius: 50%;
    background: var(--white-color);
}

.distanza a {
    position: absolute;
    bottom: 24px;
    left: 0;
    width: max-content;
    text-align: center;
    color: inherit;
    transform: translateX(-50%);
}

/* 1,8 km sta sotto la linea, se no toccherebbe l'etichetta di 1 km */
.distanza--1-8 a {
    top: 24px;
    bottom: auto;
}

.distanza--6 a {
    text-align: right;
    transform: translateX(calc(-100% + 9px));
}

.distanza__km {
    display: block;
    font-family: var(--display-font);
    font-size: 1.75rem;
    font-weight: 600;
    line-height: 1.15;
    color: var(--blu-canalotto);
}

.distanza__nome {
    display: block;
    font-weight: 700;
    color: var(--primary-color);
}

.distanza__cosa {
    display: block;
    font-size: 14px;
    color: var(--text-color);
}

.distanza a:hover .distanza__nome,
.distanza a:focus-visible .distanza__nome {
    color: var(--blu-canalotto);
    text-decoration: underline;
    text-underline-offset: 3px;
}

@media (max-width: 991.98px) {
    .accoglienza-foto {
        max-width: 440px;
    }

    .storia .arco--alto {
        max-width: 480px;
    }
}

@media (max-width: 767.98px) {
    .tappe-linea {
        grid-template-columns: minmax(0, 1fr);
        gap: 34px;
        padding-left: 36px;
    }

    .tappe-linea::before {
        top: 10px;
        bottom: 10px;
        left: 7px;
        right: auto;
        width: 2px;
        height: auto;
        background: linear-gradient(180deg, var(--blu-canalotto) 0%, var(--blu-notte) 100%);
    }

    .tappa__anno {
        height: auto;
    }

    .tappa__anno::after {
        top: calc(50% - 8px);
        left: -36px;
    }

    .tappa__titolo {
        margin-top: 10px;
    }

    .righello {
        height: 560px;
        margin: 30px 0 60px;
    }

    .righello::before {
        top: 0;
        bottom: 0;
        left: 9px;
        right: auto;
        width: 3px;
        height: auto;
        background: linear-gradient(180deg, var(--blu-canalotto) 0%, var(--blu-notte) 100%);
    }

    .righello::after {
        top: 0;
        bottom: 0;
        left: 3px;
        right: auto;
        width: 15px;
        height: auto;
        background-image: linear-gradient(180deg, var(--pietra) 2px, transparent 2px);
        background-size: 100% calc(100% / 6);
    }

    .righello__casa {
        top: -9px;
        left: 36px;
    }

    .righello__casa::before {
        top: -1px;
        left: -36px;
    }

    .distanza--1,
    .distanza--1-8,
    .distanza--6 {
        left: 10.5px;
    }

    .distanza--1   { top: 16.6667%; }
    .distanza--1-8 { top: 30%; }
    .distanza--6   { top: 100%; }

    .distanza a,
    .distanza--1-8 a,
    .distanza--6 a {
        top: 0;
        bottom: auto;
        left: 26px;
        text-align: left;
        transform: translateY(-17px);
    }

    .distanza__km {
        display: inline;
        margin-right: 6px;
        font-size: 1.35rem;
    }

    .distanza__nome {
        display: inline;
    }
}

@media (prefers-reduced-motion: reduce) {
    .arco img,
    .storia-video__icona {
        transition: none;
    }
}

/* "Dove siamo": titolo a sinistra, con la nota accanto (il tema centra i
   titoli dentro .section-row) */
.distanze .section-row .section-title {
    margin: 0;
    text-align: left;
}

@media (max-width: 991.98px) {
    .distanze__intro {
        margin-top: 16px;
    }
}

/* ==========================================================================
   SERVIZI (servizi.html)
   Tutto in una pagina. In testa "il conto del soggiorno": uno scontrino con
   le voci comprese, una per riga, e "compreso" al posto del prezzo. Accanto
   quello che non c'e'. Sotto, gli ambienti uno per uno, con un indice.
   ========================================================================== */

.compreso {
    padding: var(--sezione-y) 0;
    background: var(--bianco-calce);
}

.ambienti {
    padding: var(--sezione-y) 0;
}

/* --- Il conto --------------------------------------------------------------
   Carta bianca con il bordo in basso seghettato, come uno scontrino. Le voci
   hanno i puntini fino al prezzo. */
.conto {
    position: relative;
    padding: 40px 44px 44px;
    margin-bottom: 14px;
    background: var(--white-color);
    border-radius: var(--angolo-medio) var(--angolo-medio) 0 0;
    box-shadow: 0 18px 40px -24px rgba(11, 43, 69, .35);
}

.conto::after {
    content: "";
    position: absolute;
    left: 0;
    right: 0;
    bottom: -12px;
    height: 12px;
    background:
        linear-gradient(135deg, var(--white-color) 50%, transparent 50%) 0 0 / 16px 12px repeat-x,
        linear-gradient(225deg, var(--white-color) 50%, transparent 50%) 0 0 / 16px 12px repeat-x;
}

.conto__testa {
    margin: 0 0 24px;
    padding-bottom: 20px;
    border-bottom: 2px dashed var(--pietra-chiara);
    font-family: var(--display-font);
    font-size: 1.45rem;
    font-weight: 600;
    line-height: 1.2;
    color: var(--primary-color);
    text-align: center;
}

.conto__testa span {
    display: block;
    margin-top: 6px;
    font-family: var(--default-font);
    font-size: 13px;
    font-weight: 600;
    letter-spacing: .12em;
    text-transform: uppercase;
    color: var(--text-color);
}

.conto__righe {
    margin: 0 0 26px;
    padding: 0;
    list-style: none;
}

.conto__riga {
    display: flex;
    align-items: baseline;
    gap: 10px;
    padding: 9px 0;
    color: var(--primary-color);
}

/* i puntini fra la voce e il prezzo */
.conto__riga::after {
    content: "";
    order: 1;
    flex: 1 1 auto;
    min-width: 24px;
    border-bottom: 2px dotted var(--pietra-chiara);
    transform: translateY(-4px);
}

.conto__voce {
    order: 0;
}

.conto__prezzo {
    order: 2;
    flex: 0 0 auto;
    font-size: 13px;
    font-weight: 700;
    letter-spacing: .1em;
    text-transform: uppercase;
    color: var(--blu-canalotto);
}

.conto__riga--gratis .conto__prezzo {
    color: var(--primary-color);
}

.conto__piede {
    padding-top: 20px;
    border-top: 2px dashed var(--pietra-chiara);
    font-size: 15px;
}

/* --- Quello che non c'e' --------------------------------------------------- */
.non-ce {
    padding: 36px 36px 30px;
    border: 1px solid var(--divider-color);
    border-radius: var(--angolo-medio);
    background: var(--white-color);
}

.non-ce__titolo {
    margin: 0 0 18px;
    font-size: 1.45rem;
}

.non-ce__elenco {
    margin: 0;
    padding: 0;
    list-style: none;
}

.non-ce__voce {
    position: relative;
    padding: 16px 0 16px 40px;
    border-top: 1px solid var(--divider-color);
}

.non-ce__voce::before {
    content: "\f00d";
    position: absolute;
    top: 18px;
    left: 0;
    display: flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    border-radius: 50%;
    background: var(--bianco-calce);
    font-family: "Font Awesome 5 Free";
    font-size: 12px;
    font-weight: 900;
    color: var(--pietra);
}

.non-ce__nome {
    margin: 0 0 4px;
    font-size: 1.1rem;
}

.non-ce__voce p {
    margin: 0;
    font-size: 15px;
}

/* --- Ambienti: indice e schede -------------------------------------------- */
.ambienti .section-row .section-title {
    margin-bottom: 14px;
}

.ambienti__intro {
    margin: 0;
    text-align: center;
}

.ambienti-indice {
    margin: -40px 0 40px;
}

.ambienti-indice ul {
    display: flex;
    flex-wrap: wrap;
    justify-content: center;
    gap: 10px;
    margin: 0;
    padding: 0;
    list-style: none;
}

.ambienti-indice a {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    padding: 9px 16px;
    border: 1px solid var(--divider-color);
    border-radius: 999px;
    font-size: 15px;
    font-weight: 600;
    color: var(--primary-color);
    transition: background-color .25s ease, color .25s ease, border-color .25s ease;
}

.ambienti-indice a i {
    font-size: 14px;
    color: var(--blu-canalotto);
    transition: color .25s ease;
}

.ambienti-indice a:hover,
.ambienti-indice a:focus-visible {
    border-color: var(--blu-canalotto);
    background: var(--blu-canalotto);
    color: var(--white-color);
}

.ambienti-indice a:hover i,
.ambienti-indice a:focus-visible i {
    color: var(--white-color);
}

.ambiente {
    height: 100%;
    overflow: hidden;
    border: 1px solid var(--divider-color);
    border-radius: var(--angolo-medio);
    background: var(--white-color);
    /* l'intestazione fissa del sito non deve coprire il titolo */
    scroll-margin-top: 120px;
}

.ambiente__foto {
    display: block;
    margin: 0;
    aspect-ratio: 16 / 7;
    overflow: hidden;
    background: var(--pietra-chiara);
}

.ambiente__foto img {
    display: block;
    width: 100%;
    height: 100%;
    object-fit: cover;
}

.ambiente__corpo {
    padding: 26px 30px 30px;
}

.ambiente__titolo {
    display: flex;
    align-items: center;
    gap: 12px;
    margin: 0 0 16px;
    font-size: 1.4rem;
}

.ambiente__icona {
    display: flex;
    flex: 0 0 auto;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    border-radius: 50%;
    background: rgba(15, 76, 129, .08);
    font-size: 16px;
    color: var(--blu-canalotto);
}

.ambiente__elenco {
    margin: 0;
    padding: 0;
    list-style: none;
}

.ambiente__elenco li {
    position: relative;
    padding: 6px 0 6px 26px;
    line-height: 1.5;
}

.ambiente__elenco li::before {
    content: "\f00c";
    position: absolute;
    top: 8px;
    left: 0;
    font-family: "Font Awesome 5 Free";
    font-size: 13px;
    font-weight: 900;
    color: var(--blu-canalotto);
}

.ambiente__link {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    margin-top: 16px;
    font-weight: 700;
    color: var(--accent-color);
}

.ambiente__link:hover,
.ambiente__link:focus-visible {
    color: var(--primary-color);
    text-decoration: underline;
    text-underline-offset: 3px;
}

@media (max-width: 767.98px) {
    .conto {
        padding: 30px 22px 34px;
    }

    .conto__riga {
        font-size: 15px;
    }

    .non-ce {
        padding: 28px 22px 22px;
    }

    .ambienti-indice {
        margin: -10px 0 30px;
    }

    .ambiente__corpo {
        padding: 22px 22px 26px;
    }
}

/* ==========================================================================
   Ritmo delle entrate (WOW.js)
   Il tema le faceva durare 1 s con un'andatura uniforme: coi ritardi
   accorciati sembravano lente. 0,8 s con una frenata morbida in arrivo.
   I ritardi stanno nell'HTML (data-wow-delay): 0 / 0,1 / 0,2 / 0,3 s per
   colonna nelle griglie, niente nei testi da leggere, mai oltre 0,4 s.
   La galleria ha la sua entrata e resta com'e'.
   ========================================================================== */

.wow.animated:not(.galleria-entra) {
    animation-duration: .8s;
    animation-timing-function: cubic-bezier(.22, .61, .36, 1);
}

/* I titoli dentro gli articoli e nella pagina della piscina: il tema li
   metteva in MAIUSCOLO, nel resto del sito i titoli sono scritti normali */
.amenities-entry h2,
.post-entry h2,
.post-entry h3,
.post-entry h4,
.post-entry h5,
.post-entry h6 {
    text-transform: none;
}


/* casella obbligatoria dell'informativa privacy nel modulo contatti (16/10/2026) */
.form-privacy {
    display: flex;
    gap: 10px;
    align-items: flex-start;
    font-size: .9375rem;
    line-height: 1.5;
    cursor: pointer;
}

.form-privacy input {
    flex: none;
    width: 18px;
    height: 18px;
    margin-top: 3px;
    accent-color: var(--blu-canalotto);
}

/* ==========================================================================
   CONSENSO COOKIE (consenso.js, 16/10/2026)
   Banner in basso, sotto il caricamento (z-index 2000) e sopra tutto il
   resto. «Rifiuta» e «Accetta tutti» hanno lo stesso identico aspetto: il
   Garante chiede pari evidenza.
   ========================================================================== */
.consenso {
    position: fixed;
    left: 16px;
    right: 16px;
    bottom: 16px;
    z-index: 1900;
    max-width: 560px;
    max-height: calc(100vh - 32px);
    overflow-y: auto;
    padding: 24px 24px 20px;
    background: var(--white-color);
    color: var(--blu-notte);
    border-radius: var(--angolo-medio, 12px);
    box-shadow: 0 18px 50px rgba(11, 43, 69, .28);
    font-size: .9375rem;
    line-height: 1.55;
}

.consenso[hidden] { display: none; }

.consenso__titolo {
    margin: 0 32px 8px 0;
    font-size: 1.25rem;
    color: var(--blu-notte);
}

.consenso__testo { margin: 0 0 16px; color: var(--blu-notte); }

.consenso__testo a,
.consenso-segnaposto__link {
    color: var(--blu-canalotto);
    text-decoration: underline;
    text-underline-offset: .2em;
}

.consenso__chiudi {
    position: absolute;
    top: 10px;
    right: 12px;
    width: 36px;
    height: 36px;
    border: 0;
    background: none;
    color: var(--blu-notte);
    font-size: 1.75rem;
    line-height: 1;
    cursor: pointer;
}

.consenso__scelte { margin: 0 0 16px; display: grid; gap: 10px; }
.consenso__scelte[hidden] { display: none; }

.consenso__voce {
    display: flex;
    gap: 10px;
    align-items: flex-start;
    cursor: pointer;
}

.consenso__voce input {
    flex: none;
    width: 18px;
    height: 18px;
    margin-top: 3px;
    accent-color: var(--blu-canalotto);
}

.consenso__pulsanti,
.consenso-segnaposto__pulsanti {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 10px 12px;
}

.consenso__btn {
    padding: 10px 20px;
    border: 0;
    border-radius: var(--angolo-piccolo, 6px);
    background: var(--blu-canalotto);
    color: var(--white-color);
    font: inherit;
    font-weight: 600;
    cursor: pointer;
}

.consenso__btn:hover,
.consenso__btn:focus-visible { background: var(--blu-notte); }

.consenso__personalizza,
.footer-preferenze {
    padding: 0;
    border: 0;
    background: none;
    color: inherit;
    font: inherit;
    text-decoration: underline;
    text-underline-offset: .2em;
    cursor: pointer;
}

/* al posto di un video o della mappa, finche' non c'e' il consenso */
.consenso-segnaposto {
    position: absolute;
    inset: 0;
    z-index: 2;
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
    gap: 14px;
    padding: 24px;
    text-align: center;
    background: rgba(11, 43, 69, .92);
    color: var(--white-color);
}

.consenso-segnaposto p { max-width: 30rem; margin: 0; color: inherit; }
.consenso-segnaposto__pulsanti { justify-content: center; }
.consenso-segnaposto .consenso-segnaposto__link { color: var(--white-color); }
.mappa-villa { position: relative; }
