/* InfoIschia Hotel Detail Page Styles
   Extracted from hotel_detail.html inline styles for maintainability.
   Linked only by the hotel detail template. */

/* ============================================
   CSS VARIABLES (inherits from common.css)
   ============================================ */
:root {
    --primary: #1e3c72;
    --primary-dark: #152a4f;
    --secondary: #2a5298;
    --accent: #f5a623;
    --accent-hover: #e09000;
    --light-bg: #f8f9fa;
    --shadow-sm: 0 2px 8px rgba(0,0,0,0.08);
    --shadow-md: 0 4px 20px rgba(0,0,0,0.12);
    --shadow-lg: 0 8px 30px rgba(0,0,0,0.15);
    --radius-sm: 8px;
    --radius-md: 12px;
    --radius-lg: 16px;
    /* === Palette redesign 2026-04-22 === */
    --cta-orange:         #f5a623;   /* CTA "Salva Preventivo" */
    --cta-orange-hover:   #d98f0e;   /* hover CTA */
    --price-amber:        #e08b1a;   /* prezzo principale, bordi card selezionata */
    --price-struck:       #8b3a2f;   /* prezzo barrato + badge -% */
    --supplement-neutral: #495057;   /* supplementi, prezzi/notte, trattamento non sel. */
    --badge-best-green:   #3d8a5e;   /* badge "Miglior prezzo" */
    --savings-bg:         #e8f5ea;   /* banda risparmio sticky */
    --savings-text:       #1e6b2e;   /* testo banda risparmio */
    --savings-border:     #c8e6cd;   /* bordo banda risparmio */
    --card-selected-bg:   #fdf8f0;   /* bg card camera/trattamento selezionata */
    /* === T.60.g — Calendar tokens (owner mockup) === */
    --ii-cal-avail-bg:    #e8f3ee;
    --ii-cal-avail-text:  #2a6a47;
    --ii-cal-range-bg:    rgba(30,60,114,0.10);
    --ii-cal-range-fill:  #1e3c72;
    /* === T.62.c — Modal mobile tokens (owner mockup) === */
    /* T.62.h (owner): beige #f5f1ea sembrava saturo → token neutri freddi (grigio chiaro). */
    --ii-hair:            #e7e7eb;       /* separatori sottili (era #e5e1d8 warm) */
    --ii-bg-soft:         #f4f5f8;       /* body / room row (era #f5f1ea beige warm) */
    --ii-ink1:            #1a1a1a;       /* testo principale */
    --ii-ink3:            #6b6b6b;       /* testo secondario (era #8a8a8a, alzato per WCAG AA su testi piccoli) */
    --ink3:               #6b6b6b;       /* alias usato da var(--ink3, …) sparsi nel file (prima non definito → fallback #8a8a8a) */
    /* === Leggibilità — token line-height (additivi, nessun effetto finché non referenziati) === */
    --lh-tight:           1.15;          /* titoli/prezzi a riga singola */
    --lh-base:            1.5;           /* testo corrente */
    --lh-relaxed:         1.65;          /* paragrafi lunghi */
}

/* ============================================
   T.60.g — Calendar custom (owner mockup)
   Grafica pura HTML/CSS, no flatpickr dependency.
   La logica di stato (available/range) viene applicata via classi
   .day.is-available, .day.is-unavailable, .day.is-range-start, .is-range-end, .is-range-middle
   dal renderer JS (logica server-side esistente: window.availableArrivals, window.blockedDates).
   ============================================ */
.ii-cal { font-family: inherit; }
.ii-cal__header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 14px; }
.ii-cal__title { font-size: 15px; font-weight: 800; color: var(--primary, #1e3c72); margin: 0; }
.ii-cal__nav { width: 30px; height: 30px; border-radius: 50%; background: #f5f1ea; color: var(--primary, #1e3c72); border: 0; display: inline-flex; align-items: center; justify-content: center; cursor: pointer; transition: background .12s; font-size: 14px; line-height: 1; }
.ii-cal__nav:hover { background: var(--primary, #1e3c72); color: #fff; }
.ii-cal__nav:disabled { opacity: 0.3; cursor: not-allowed; }
.ii-cal__weekdays { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; margin-bottom: 4px; }
.ii-cal__weekday { font-size: 10.5px; font-weight: 800; color: #6b6b6b; letter-spacing: 0.6px; text-align: center; padding: 4px 0; text-transform: uppercase; }
.ii-cal__grid { display: grid; grid-template-columns: repeat(7, 1fr); gap: 4px; }
.ii-cal__day-empty { padding: 8px 0; }
.day { padding: 8px 0; text-align: center; font-size: 13px; font-weight: 600; border-radius: 6px; transition: background .12s; user-select: none; }
.day.is-available { background: var(--ii-cal-avail-bg); color: var(--ii-cal-avail-text); cursor: pointer; }
.day.is-available:hover { background: #d4e9dc; }
.day.is-unavailable { background: transparent; color: #8a8a8a; opacity: 0.4; cursor: not-allowed; }
.day.is-range-start { background: var(--ii-cal-range-fill); color: #fff; font-weight: 800; border-radius: 6px 0 0 6px; }
.day.is-range-end { background: var(--ii-cal-range-fill); color: #fff; font-weight: 800; border-radius: 0 6px 6px 0; }
.day.is-range-middle { background: var(--ii-cal-range-bg); color: var(--primary, #1e3c72); border-radius: 0; }

/* ============================================
   T.63 (2026-05-29) — Box età bambini (riquadro con badge numerato)
   Mockup "Date e ospiti" Image #2. Una riga per bambino.
   ============================================ */
.hd-bp-ages { display: flex; flex-direction: column; gap: 6px; margin-top: 8px; background: #fff; border: 1px solid var(--ii-hair, #e7e7eb); border-radius: 8px; padding: 8px 10px; }
.hd-bp-age-row { display: flex; align-items: center; gap: 10px; }
.hd-bp-age-badge { flex: 0 0 auto; width: 22px; height: 22px; border-radius: 50%; background: #e8efff; color: var(--primary, #1e3c72); font-size: 11px; font-weight: 800; display: inline-flex; align-items: center; justify-content: center; }
.hd-bp-age-label { flex: 1 1 auto; font-size: 13px; font-weight: 700; color: var(--ii-ink1, #1a1a1a); }
.hd-bp-age-row .hd-bp-age-select { flex: 0 0 auto; background: #f4f5f8; border: 1px solid var(--ii-hair, #e7e7eb); border-radius: 6px; color: var(--primary, #1e3c72); font-size: 12.5px; font-weight: 700; padding: 6px 26px 6px 10px; -webkit-appearance: none; appearance: none; background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'><path fill='%231e3c72' d='M3 5l3 3 3-3z'/></svg>"); background-position: right 8px center; background-repeat: no-repeat; background-size: 10px; }

/* ============================================
   T.62.c — Modal "Date e ospiti" mobile restyle (owner mockup)
   Viewport: <576px. Riusa classi .hd-bp-* esistenti, solo CSS.
   Logica selezione date / multi-room / età INVARIATA.
   ============================================ */
@media (max-width: 575.98px) {
    /* Full-screen sheet bianco.
       T.63.b (2026-05-29) FIX iOS header tagliato: `100vh` su iOS = viewport GRANDE
       (barra indirizzi nascosta), più alto dell'area visibile → con il dialog
       `modal-dialog-centered` l'header (titolo+X+Reset) finiva NASCOSTO sotto la barra
       indirizzi e il footer in basso. Fix: `100dvh` (dynamic viewport height = area
       realmente visibile, segue la barra indirizzi) con fallback `vh` per browser
       vecchi, + `align-items: flex-start` per ancorare lo sheet in ALTO (non centrato)
       così header e footer restano sempre dentro lo schermo. */
    .modal-dialog.modal-xl, .modal-dialog.modal-lg { margin: 0 !important; max-width: 100% !important; height: 100vh !important; height: 100dvh !important; max-height: 100vh !important; max-height: 100dvh !important; align-items: flex-start !important; }
    .hd-bp-modal { border-radius: 0 !important; box-shadow: none !important; height: 100vh !important; height: 100dvh !important; max-height: 100vh !important; max-height: 100dvh !important; display: flex; flex-direction: column; background: #fff !important; font-family: system-ui, -apple-system, 'Segoe UI', sans-serif; }

    /* HEADER sticky top: X | "Date e ospiti" | Reset
       T.62.h (owner): padding ridotto 10×16 per meno spazio sopra. */
    .hd-bp-modal__header { flex-shrink: 0; padding: 10px 16px !important; background: #fff !important; border-bottom: 1px solid var(--ii-hair, #e5e1d8) !important; display: flex !important; justify-content: space-between !important; align-items: center !important; position: relative; gap: 0; }
    .hd-bp-modal__heading { flex: 1; justify-content: center; align-items: center; gap: 0; }
    /* 2026-06-07 owner: testo/box modale "Date e ospiti" ingranditi (mobile). */
    .hd-bp-modal__title { font-size: 16px !important; font-weight: 800 !important; color: var(--primary, #1e3c72) !important; }
    .hd-bp-modal__subtitle { display: none !important; }
    .hd-bp-modal__header .btn-close { position: absolute !important; left: 16px !important; top: 50% !important; transform: translateY(-50%); margin: 0 !important; padding: 0 !important; filter: none !important; background: none !important; border: 0 !important; opacity: 1 !important; color: var(--ii-ink1, #1a1a1a) !important; width: 24px; height: 24px; font-size: 20px; line-height: 1; }
    .hd-bp-modal__header .btn-close::before { content: '×'; }
    .hd-bp-modal__header .btn-close * { display: none; }
    .hd-bp-modal__reset-mobile { display: inline-block !important; position: absolute !important; right: 16px !important; top: 50% !important; transform: translateY(-50%); background: none !important; border: 0 !important; color: var(--secondary, #2a5298) !important; font-size: 11px !important; font-weight: 600 !important; padding: 4px 0 !important; }

    /* BODY — T.63.d (2026-05-29 owner): scroll FALLBACK riabilitato sul mobile.
       T.63.c aveva bloccato lo scroll (overflow:hidden) per evitare il jitter della barra
       indirizzi iOS, ma su schermi corti (iPhone SE / barra URL visibile) il contenuto
       NON entrava nel viewport e veniva COPERTO/TAGLIATO senza modo di raggiungerlo.
       Fix: overflow-y:auto + overscroll-behavior:contain. Header/footer sono sibling del
       body (flex-shrink:0), quindi lo scroll è solo interno e non li sposta mai;
       `contain` blocca la propagazione al documento → niente rubber-band/jitter barra URL.
       Su schermi alti non scrolla (contenuto entra); su schermi corti scrolla e niente
       resta tagliato. Validato: viewport 600px → 113px scrollabili, header+footer fissi. */
    .hd-bp-modal__body { flex: 1 1 auto; overflow-y: auto !important; min-height: 0; padding: 12px !important; background: #fff !important; overscroll-behavior: contain; -webkit-overflow-scrolling: touch; }

    /* RECAP PILL sotto header — T.62.i: padding 6×12, margin top -12 (= negativo body padding),
       margin-bottom 4 (era 8). Riduce drasticamente spazio header→composizione. */
    .hd-bp-summary { padding: 6px 12px !important; margin: -12px -12px 4px !important; border-bottom: 0 !important; background: #fff; gap: 6px !important; flex-wrap: wrap; min-height: 0; }
    /* Se la summary è completamente vuota (no pill, no notti, no guests) la nasconde. */
    .hd-bp-summary:has(.hd-bp-summary__date-pill.is-empty:only-child) { display: none !important; }
    .hd-bp-summary__pills { gap: 6px !important; align-items: center; }
    .hd-bp-summary__date-pill { padding: 5px 10px !important; background: var(--primary, #1e3c72) !important; color: #fff !important; border-radius: 999px !important; font-size: 10.5px !important; font-weight: 700 !important; display: inline-flex; align-items: center; gap: 5px; }
    .hd-bp-summary__date-pill i { font-size: 10px; }
    /* T.62.e (owner): mobile no-date → pill completamente nascosta (no fallback testo). */
    .hd-bp-summary__date-pill.is-empty { display: none !important; }
    .hd-bp-summary__meta { font-size: 10px !important; color: var(--ii-ink3, #8a8a8a) !important; font-weight: 600; }
    /* Hide chip ospiti (info è nella sezione Composizione) e Cancella tutto (Reset header). */
    .hd-bp-summary__meta--guests, #hdBpSummaryRooms { display: none !important; }
    .hd-bp-summary__reset { display: none !important; }

    /* BOX "COMPOSIZIONE OSPITI" — card bianca. T.62.h: meno spazio (padding 10, mb 10). */
    .hd-bp-rooms-card { background: #fff !important; border-radius: 10px !important; padding: 10px !important; margin-bottom: 10px !important; border: 0 !important; }
    .hd-bp-rooms-card__header { gap: 10px !important; margin-bottom: 10px !important; align-items: flex-start; }
    .hd-bp-rooms-card__title { font-size: 16px !important; font-weight: 800 !important; color: var(--primary, #1e3c72) !important; }
    .hd-bp-rooms-card__subtitle { font-size: 11px !important; color: var(--ii-ink3, #8a8a8a) !important; margin-top: 2px !important; }
    .hd-bp-rooms-card__footer { display: none !important; /* info "Puoi aggiungere ancora N camere" nascosto in mobile, già nel subtitle. */ }

    /* + Aggiungi camera (outline → disabled state quando rooms === max) */
    .hd-bp-add-room-btn { border: 1.5px solid var(--primary, #1e3c72) !important; background: #fff !important; padding: 6px 11px !important; border-radius: 999px !important; font-size: 10.5px !important; font-weight: 700 !important; color: var(--primary, #1e3c72) !important; }
    .hd-bp-add-room-btn__dot { display: none; }
    .hd-bp-add-room-btn::before { content: '+'; font-weight: 800; font-size: 13px; margin-right: 4px; }
    .hd-bp-add-room-btn:disabled { background: var(--ii-bg-soft, #f5f1ea) !important; border-color: var(--ii-hair, #e5e1d8) !important; color: var(--ii-ink3, #8a8a8a) !important; cursor: default !important; }

    /* ROW SINGOLA CAMERA — T.62.g (owner mockup Image #10): bg light beige #f5f1ea,
       NO border. Il contrasto col card esterna bianca evidenzia la singola camera. */
    .hd-bp-room { background: var(--ii-bg-soft, #f5f1ea) !important; border: 0 !important; border-radius: 8px !important; padding: 10px 12px !important; gap: 8px !important; flex-direction: column !important; align-items: stretch !important; position: relative; margin-bottom: 8px; }
    .hd-bp-room:last-child { margin-bottom: 0; }
    /* Riga 1: titolo + remove */
    .hd-bp-room__info { min-width: 0 !important; padding-right: 36px; /* leave space for remove btn */ }
    .hd-bp-room__name { font-size: 13px !important; font-weight: 800 !important; color: var(--primary, #1e3c72) !important; display: inline; }
    /* Meta inline accanto al nome (es. " · 2 adulti, 1 bambino") */
    .hd-bp-room__meta { font-size: 12px !important; color: var(--ii-ink3, #8a8a8a) !important; font-weight: 600 !important; display: inline; margin-top: 0 !important; }
    .hd-bp-room__meta::before { content: ' · '; }
    /* Remove btn */
    .hd-bp-room__remove { position: absolute !important; top: 8px !important; right: 8px !important; width: 26px !important; height: 26px !important; border: 1px solid var(--ii-hair, #e5e1d8) !important; background: #fff !important; color: #4a4a4a !important; border-radius: 50% !important; padding: 0 !important; display: inline-flex; align-items: center; justify-content: center; font-size: 10px; }
    .hd-bp-room__remove i { font-size: 10px; }

    /* Riga 2: stepper Adulti + Bambini in 2 colonne 1fr 1fr */
    .hd-bp-room__counters { display: grid !important; grid-template-columns: 1fr 1fr !important; gap: 8px !important; width: 100%; }
    /* Counter wrapper = card bianca con bordo light. */
    /* T.63.e (2026-05-29 owner): campi Adulti/Bambini più ALTI su mobile (touch comfort).
       padding verticale 4→9px + bottoni 24→28px = field height ~46px. */
    .hd-bp-counter { flex: initial !important; min-width: 0 !important; background: #fff; border: 1px solid var(--ii-hair, #e5e1d8); border-radius: 8px; padding: 12px 12px; display: flex !important; flex-direction: row !important; justify-content: space-between !important; align-items: center !important; gap: 0 !important; }
    .hd-bp-counter__label { font-size: 13px !important; font-weight: 800 !important; color: var(--ii-ink3, #8a8a8a) !important; letter-spacing: 0.4px !important; text-transform: uppercase; }
    .hd-bp-counter__row { background: transparent !important; padding: 0 !important; gap: 7px !important; }
    /* T.62.f (owner): btn +/- bg #f4f5f8 leggero (era beige), interno bianco. */
    .hd-bp-counter__btn { width: 33px !important; height: 33px !important; border-radius: 8px !important; border: 0 !important; background: #f4f5f8 !important; color: var(--primary, #1e3c72) !important; font-size: 18px !important; font-weight: 800 !important; box-shadow: none !important; padding: 0; }
    .hd-bp-counter__btn:disabled { opacity: 0.4 !important; }
    .hd-bp-counter__val { font-size: 16px !important; font-weight: 800 !important; color: var(--ii-ink1, #1a1a1a) !important; min-width: 18px !important; }

    /* Riga 3 (T.62.f owner): chip età bambini AUTO-width, non full.
       Restano nella stessa grid 2 colonne dei counter ADULTI/BAMBINI
       (3° figlio = età primo bambino, 4° = età secondo, ecc). */
    .hd-bp-room__counters > .hd-bp-counter:nth-child(n+3) {
        background: #fff;
        border: 1px solid var(--ii-hair, #e5e1d8);
        border-radius: 6px;
        padding: 3px 7px 3px 9px;
        flex-direction: row !important;
        gap: 5px !important;
        font-size: 9.5px;
    }
    .hd-bp-room__counters > .hd-bp-counter:nth-child(n+3) .hd-bp-counter__label {
        font-size: 9.5px !important;
        font-weight: 700 !important;
        letter-spacing: 0.2px !important;
        text-transform: none;
    }
    .hd-bp-age-select { background: none !important; border: 0 !important; color: var(--primary, #1e3c72) !important; font-size: 10.5px !important; font-weight: 800 !important; padding: 0 12px 0 2px !important; outline: none !important; min-width: 0 !important; -webkit-appearance: none; appearance: none; background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='10' height='10' viewBox='0 0 12 12'><path fill='%231e3c72' d='M3 5l3 3 3-3z'/></svg>") !important; background-position: right center !important; background-repeat: no-repeat !important; background-size: 10px !important; }

    /* T.63 — riquadro età full-width sotto i counter, fuori dalla grid 2-col. */
    .hd-bp-ages { margin-top: 8px; padding: 11px 12px; gap: 8px; }
    .hd-bp-age-row { gap: 10px; }
    .hd-bp-age-badge { width: 26px !important; height: 26px !important; font-size: 13px !important; }
    .hd-bp-age-label { font-size: 14.5px; font-weight: 700; }
    .hd-bp-age-row .hd-bp-age-select { font-size: 14px; padding: 8px 28px 8px 11px; }

    /* DIVIDER "Ora scegli le date" — T.62.h: margin più stretto 10/8. */
    .hd-bp-divider { margin: 10px 0 8px !important; display: flex; align-items: center; gap: 10px; }
    .hd-bp-divider::before, .hd-bp-divider::after { content: ''; flex: 1; height: 1px; background: var(--ii-hair, #e5e1d8); position: static; }
    .hd-bp-divider span { background: transparent !important; padding: 0 !important; font-size: 10px !important; font-weight: 800 !important; letter-spacing: 0.5px !important; color: var(--ii-ink3, #8a8a8a) !important; text-transform: uppercase !important; }

    /* BOX CALENDARIO (1 mese, design tokens da T.60.g già definiti) */
    .hd-bp-calendar .calendar-container { background: #fff !important; border-radius: 10px !important; padding: 14px !important; border: 0 !important; }
    /* Flatpickr overrides — header mese + frecce coerenti con tokens. */
    .hd-bp-calendar .flatpickr-months { margin-bottom: 14px !important; padding: 0 !important; }
    .hd-bp-calendar .flatpickr-current-month { font-size: 13.5px !important; color: var(--ii-ink1, #1a1a1a) !important; font-weight: 800 !important; }
    .hd-bp-calendar .flatpickr-current-month .cur-month,
    .hd-bp-calendar .flatpickr-current-month .flatpickr-monthDropdown-months,
    .hd-bp-calendar .flatpickr-current-month input.cur-year { font-size: 13.5px !important; color: var(--ii-ink1, #1a1a1a) !important; font-weight: 800 !important; }
    .hd-bp-calendar .flatpickr-prev-month, .hd-bp-calendar .flatpickr-next-month {
        width: 30px !important; height: 30px !important; border-radius: 50% !important;
        background: var(--ii-bg-soft, #f5f1ea) !important; border: 0 !important;
        color: var(--primary, #1e3c72) !important;
        display: flex !important; align-items: center; justify-content: center;
    }
    .hd-bp-calendar .flatpickr-prev-month svg, .hd-bp-calendar .flatpickr-next-month svg { width: 14px; height: 14px; fill: var(--primary, #1e3c72); }
    /* T.62.d — Header mese flatpickr: titolo compatto "Luglio 2026" senza spazi
       (era split "Luglio" + dropdown + input year con gap). */
    .hd-bp-calendar .flatpickr-current-month { gap: 4px !important; font-size: 13.5px !important; }
    .hd-bp-calendar .flatpickr-current-month .flatpickr-monthDropdown-months,
    .hd-bp-calendar .flatpickr-current-month input.cur-year { padding: 0 !important; margin: 0 !important; min-width: 0 !important; }

    /* T.62.d — Day cells: stati available/unavailable più contrastati nel mobile.
       .available-arrival = giorno cliccabile → verde (token --ii-cal-avail-bg).
       Tutto il resto (non-available, non-selected, non-in-range) = grey opacity 0.4. */
    .hd-bp-calendar .flatpickr-day { color: var(--ii-ink3, #8a8a8a) !important; opacity: 0.4; cursor: not-allowed; background: transparent !important; }
    .hd-bp-calendar .flatpickr-day.available-arrival,
    .hd-bp-calendar .flatpickr-day.valid-checkout {
        background: var(--ii-cal-avail-bg, #e8f3ee) !important;
        color: var(--ii-cal-avail-text, #2a6a47) !important;
        opacity: 1 !important;
        cursor: pointer !important;
        font-weight: 700 !important;
    }
    .hd-bp-calendar .flatpickr-day.selected,
    .hd-bp-calendar .flatpickr-day.startRange,
    .hd-bp-calendar .flatpickr-day.endRange {
        background: var(--ii-cal-range-fill, #1e3c72) !important;
        color: #fff !important;
        opacity: 1 !important;
        font-weight: 800 !important;
    }
    .hd-bp-calendar .flatpickr-day.inRange {
        background: var(--ii-cal-range-bg, rgba(30,60,114,0.10)) !important;
        color: var(--primary, #1e3c72) !important;
        opacity: 1 !important;
    }
    .hd-bp-calendar .flatpickr-day.flatpickr-disabled { color: var(--ii-ink3, #8a8a8a) !important; opacity: 0.4 !important; cursor: not-allowed !important; background: transparent !important; }
    .hd-bp-calendar .flatpickr-day.prevMonthDay,
    .hd-bp-calendar .flatpickr-day.nextMonthDay { visibility: hidden; }
    /* T.62.n (owner spec finale): tipografia & geometria calendar uniformata.
       Day cells 13/600, padding 8px 0, border-radius 6, gap 4.
       Available: bg #e8f3ee color #2a6a47.
       Unavailable: bg transparent color #8a8a8a opacity 0.4.
       Range start/end: bg #1e3c72 color #fff fw 800.
       Range middle: bg rgba(30,60,114,0.10) color #1e3c72.
       Title 15/800/#1a1a1a · Frecce 30×30 round bg #f5f1ea svg 14 navy
       · Weekday 10.5/800/#8a8a8a ls 0.6. */
    .hd-bp-calendar .flatpickr-day { font-size: 13px !important; font-weight: 600 !important; padding: 9px 0 !important; height: auto !important; line-height: 1.2 !important; margin: 1px 0 !important; max-width: none !important; border-radius: 6px !important; }
    .hd-bp-calendar .flatpickr-days, .hd-bp-calendar .dayContainer { gap: 4px !important; }
    .hd-bp-calendar .flatpickr-weekday { font-size: 10.5px !important; font-weight: 800 !important; color: #6b6b6b !important; letter-spacing: 0.6px !important; padding: 4px 0 !important; height: auto !important; }
    .hd-bp-calendar .calendar-container { padding: 14px !important; }
    .hd-bp-calendar .flatpickr-current-month { font-size: 17px !important; font-weight: 800 !important; color: var(--ii-ink1, #1a1a1a) !important; }
    .hd-bp-calendar .flatpickr-current-month .cur-month,
    .hd-bp-calendar .flatpickr-current-month .flatpickr-monthDropdown-months,
    .hd-bp-calendar .flatpickr-current-month input.cur-year { font-size: 17px !important; font-weight: 800 !important; color: var(--ii-ink1, #1a1a1a) !important; }
    .hd-bp-calendar .flatpickr-months { margin-bottom: 14px !important; }
    .hd-bp-calendar .flatpickr-prev-month, .hd-bp-calendar .flatpickr-next-month { width: 30px !important; height: 30px !important; border-radius: 50% !important; background: #f5f1ea !important; color: var(--primary, #1e3c72) !important; }
    .hd-bp-calendar .flatpickr-prev-month svg, .hd-bp-calendar .flatpickr-next-month svg { width: 14px !important; height: 14px !important; fill: var(--primary, #1e3c72) !important; }

    /* T.62.r — STANDARD GRIGLIA CALENDARIO RESPONSIVE (tutti gli smartphone).
       BUG (Android ~360px / iPhone SE 320px): la 7ª colonna (DOM) veniva tagliata
       fuori a destra. Causa: le celle .flatpickr-day hanno width:42px fissa
       (.inline-calendar regola base, riga ~837). In una grid `repeat(7, 1fr)`
       l'1fr è `minmax(auto, 1fr)`: il minimo `auto` = min-content della cella =
       42px fissi → su viewport stretti (7×46+gap ≈ 346px > ~308px disponibili)
       le track NON si restringono e la griglia deborda; .flatpickr-days {overflow:hidden}
       clippa l'ultima colonna.
       FIX standard: `minmax(0, 1fr)` consente alle colonne di scendere sotto il
       min-content, e le celle diventano fluide (width:100%) riempiendo la propria
       track. Specificità .hd-bp-calendar.inline-calendar (0,3,0) per vincere sulla
       regola base .inline-calendar .flatpickr-day (0,2,0) a prescindere dall'ordine.
       Risultato: 7 colonne sempre uguali e visibili da 320px in su. */
    .hd-bp-calendar.inline-calendar .flatpickr-weekdaycontainer,
    .hd-bp-calendar.inline-calendar .dayContainer {
        grid-template-columns: repeat(7, minmax(0, 1fr)) !important;
    }
    .hd-bp-calendar.inline-calendar .flatpickr-days { width: 100% !important; }
    .hd-bp-calendar.inline-calendar .flatpickr-day {
        width: 100% !important;
        max-width: 100% !important;
        min-width: 0 !important;
        flex-basis: auto !important;
        margin: 0 !important;
    }

    /* T.62.d — Divider "ORA SCEGLI LE DATE" linee laterali ::before/::after
       (era solo background centrale, no linee). */
    .hd-bp-divider { display: flex !important; align-items: center !important; gap: 10px !important; margin: 16px 0 10px !important; }
    .hd-bp-divider::before, .hd-bp-divider::after { content: '' !important; flex: 1 !important; height: 1px !important; background: var(--ii-hair, #e5e1d8) !important; position: static !important; left: auto !important; right: auto !important; top: auto !important; }
    .hd-bp-divider span { background: transparent !important; padding: 0 !important; font-size: 9px !important; font-weight: 800 !important; color: var(--ii-ink3, #8a8a8a) !important; letter-spacing: 0.5px !important; text-transform: uppercase !important; }

    /* T.62.d — Bottone Conferma SEMPRE amber pieno (no disabled visual). */
    .hd-bp-btn--primary { opacity: 1 !important; }
    .hd-bp-btn--primary:disabled { opacity: 1 !important; box-shadow: 0 3px 12px rgba(245,166,35,0.35) !important; background: var(--accent, #f5a623) !important; cursor: pointer !important; }

    /* STICKY BOTTOM (CTA) — T.62.i: bottoni più piccoli. */
    .hd-bp-modal__footer { flex-shrink: 0; padding: 8px 12px 10px !important; background: #fff !important; border-top: 1px solid var(--ii-hair, #e5e1d8) !important; box-shadow: 0 -4px 16px rgba(0,0,0,0.06) !important; display: flex !important; gap: 8px !important; }
    .hd-bp-modal__footer-hint { display: none !important; }
    /* T.62.p / T.62.q (owner): footer mobile entrambi i bottoni allineati a destra.
       L'element è un <form> → senza !important Bootstrap form-style sovrascrive width.
       Aggiunto anche flex:1 per assicurare che il form occupi tutto lo spazio rimanente
       (il footer parent ha justify-content: space-between dal CSS desktop). */
    .hd-bp-modal__footer-actions { width: 100% !important; flex: 1 1 auto !important; display: flex !important; gap: 8px !important; margin: 0 !important; justify-content: flex-end !important; }
    .hd-bp-btn--ghost { background: none !important; color: #4a4a4a !important; border: 1px solid var(--ii-hair, #e5e1d8) !important; padding: 9px 14px !important; border-radius: 9px !important; font-size: 11.5px !important; font-weight: 700 !important; flex: 0 0 auto !important; min-width: 0 !important; width: auto !important; }
    .hd-bp-btn--primary { flex: 0 0 auto !important; background: var(--accent, #f5a623) !important; color: #fff !important; padding: 10px 22px !important; border-radius: 9px !important; font-size: 12.5px !important; font-weight: 800 !important; box-shadow: 0 3px 12px rgba(245,166,35,0.35) !important; display: inline-flex; justify-content: center; align-items: center; gap: 5px; }
    .hd-bp-btn--primary i { font-size: 11px; }
}

html { overflow-x: hidden; -webkit-overflow-scrolling: touch; scroll-behavior: smooth; }
body { overflow-x: hidden; position: relative; width: 100%; font-family: 'Segoe UI', system-ui, -apple-system, sans-serif; background: var(--light-bg); line-height: var(--lh-base); }

/* 2026-06-01 (owner bug "la pagina su mobile si muove a destra/sinistra"):
   i wrapper `.container.hd-wrap-1440` hanno padding orizzontale 0 inline ma
   contengono `.row` Bootstrap con margini negativi (-12px/lato). Senza il
   padding del container che li assorbe, le row sforano di 12px per lato e su
   iOS Safari `overflow-x:hidden` sul body NON blocca il pan orizzontale.
   Fix mobile-scoped: ripristina il gutter (12px) per assorbire i margini
   negativi (modello Bootstrap standard). `!important` per vincere lo style
   inline `padding-left/right:0`. Layout desktop 1440 invariato.
   `overflow-x: clip` su html come hardening iOS (non crea uno scroll container,
   compatibile con position:sticky). */
html { overflow-x: clip; }
@media (max-width: 991.98px) {
    .hd-wrap-1440 { padding-left: 12px !important; padding-right: 12px !important; }
    /* 2026-06-05 owner ("i box sono più stretti del box date"): nello stato
       "senza date" le sezioni (Informazioni/Servizi/Posizione...) stanno dentro
       .hd-with-date-wrap > .hd-wrap-1440 → gutter doppio (12+12=24px) → più
       strette del box-date. Il gutter è già fornito dal wrapper esterno
       (.hd-no-date-grid, 12px), quindi azzero il padding orizzontale
       dell'annidato: le sezioni si allargano alla stessa larghezza del box-date. */
    .hd-with-date-wrap > .hd-wrap-1440 { padding-left: 0 !important; padding-right: 0 !important; }
    /* 2026-06-06 owner ("mobile scrollando si muove a destra/sinistra"): nello stato
       WITH-DATE (.hd-wd-grid) il wrapper NON aveva gutter e l'annidato .hd-wrap-1440 è
       azzerato (riga sopra) → le .row Bootstrap (margin -12px) sbordavano di 12px e su
       iOS la pagina "ballava" lateralmente nonostante html overflow-x:clip. Gli do il
       gutter 12px: assorbe i -12px (il no-date resta gestito da .hd-no-date-grid). */
    .hd-with-date-wrap.hd-wd-grid { padding-left: 12px !important; padding-right: 12px !important; }
}

/* Header styles are in _header.html partial — do NOT duplicate here */

/* ============================================
   HERO SECTION
   ============================================ */
.hero-image { position: relative; width: 100%; height: 550px; overflow: hidden; }
.hero-image img { width: 100%; height: 100%; object-fit: cover; object-position: center center; }
.hero-badges-top { position: absolute; top: 15px; right: 15px; z-index: 10; display: flex; gap: 8px; }
.hero-badges-top .badge { font-size: 0.85rem; padding: 6px 12px; box-shadow: 0 2px 8px rgba(0,0,0,0.3); }

.hero-overlay { position: absolute; bottom: 0; left: 0; right: 0; background: linear-gradient(transparent, rgba(0,0,0,0.8)); padding: 3rem 0 2.2rem; color: white; }
.hero-overlay h1 { font-size: 2.5rem; font-weight: 700; line-height: var(--lh-tight); text-shadow: 2px 2px 8px rgba(0,0,0,0.5); }
.hero-subtitle { color: rgba(255,255,255,0.9); font-size: 0.95rem; text-shadow: 1px 1px 4px rgba(0,0,0,0.5); }
.stars { color: var(--accent); font-size: 1.2rem; }

/* NATIVE-ONLY hero tweaks 2026-05-20: padding-bottom ridotto così
   titolo + stelle scendono verso il bordo inferiore dell'hero (più
   "incollati" al fondo), mantenendo una piccola distanza dal bordo.
   Stelle ingrandite. Scope stretto `body.page-hotel-detail` → la
   variante AVES condivide questo file CSS ma mantiene i valori globali
   originali (byte-invariante). Le classi `.hero-meta-row` /
   `.hero-photo-count` / `.hero-distances-strip` / `.cta-contact-btn`
   esistono solo nel template nativo → non serve scoparle. */
body.page-hotel-detail .hero-overlay { padding: 3rem 0 1.1rem; }
body.page-hotel-detail .stars { font-size: 1.55rem; text-shadow: 1px 1px 3px rgba(0,0,0,0.55); }

/* Hero: stelle + contatore foto sotto al nome (native scheda hotel) */
.hero-meta-row { color: #fff; }
.hero-photo-count { background: rgba(0,0,0,0.55); color: #fff; border: 1px solid rgba(255,255,255,0.3); padding: 8px 14px; border-radius: var(--radius-sm); font-size: 0.95rem; font-weight: 600; cursor: pointer; backdrop-filter: blur(4px); transition: background 0.2s; line-height: 1.1; }
.hero-photo-count:hover { background: rgba(0,0,0,0.75); }

/* Distanze strip subito sotto l'hero (anteprima rapida; la card
   "Posizione" completa con indirizzo+mappa resta più sotto, stessa
   palette delle badge per coerenza). */
.hero-distances-strip { display: flex; flex-wrap: wrap; gap: 0.5rem; padding: 0.9rem 0 0.5rem; }
.hero-distances-strip .badge { background: rgba(30,60,114,0.08); color: var(--primary); font-size: 0.85rem; font-weight: 600; padding: 0.5em 0.85em; border-radius: 999px; }
.hero-distances-strip .badge .bi { font-size: 0.95rem; }

/* CTA contatto (telefono + WhatsApp gemelli): font-size responsive per
   mobile così "Chiama ora 081 18555211" resta su 1 riga sotto i 576px. */
.cta-contact-btn { padding: 14px 24px; font-size: 1.1rem; border-radius: 12px; font-weight: 700; line-height: 1.2; white-space: nowrap; }

/* Badge valutazione hero: sfondo blu primario, testo bianco */
.hero-badges-top .badge-rating-hero { background: var(--primary); color: #fff; }

@media (max-width: 575.98px) {
    body.page-hotel-detail .hero-overlay { padding: 2rem 0 0.9rem; }
    body.page-hotel-detail .stars { font-size: 1.4rem; }
    .hero-photo-count { font-size: 0.9rem; padding: 7px 12px; }
    .hero-distances-strip .badge { font-size: 0.78rem; padding: 0.4em 0.7em; }
    .cta-contact-btn { padding: 12px 14px; font-size: 0.95rem; }
}

/* Back to results link — 2026-05-26 FIX [Image #62] PROD:
   rimosso backdrop-filter blur cross-base perché iOS Safari combina
   blur con altri stacking context dell'hero e rende un blob bianco
   gigante che copre titolo/indirizzo. bg solido (no semi-transparency)
   per non aver bisogno del blur. */
.back-to-results { color: white; font-size: 0.9rem; font-weight: 600; background: rgba(0,0,0,0.65); padding: 8px 16px; border-radius: 20px; transition: background 0.2s; }
.back-to-results:hover { color: white; background: rgba(0,0,0,0.75); }
.back-to-results i { font-size: 0.9rem; }

/* View all photos button */
.hero-gallery-btn { position: absolute; bottom: 80px; right: 20px; z-index: 10; background: rgba(0,0,0,0.7); color: white; border: 1px solid rgba(255,255,255,0.3); padding: 8px 16px; border-radius: var(--radius-sm); font-size: 0.85rem; font-weight: 600; cursor: pointer; transition: all 0.2s; backdrop-filter: blur(4px); }
.hero-gallery-btn:hover { background: rgba(0,0,0,0.9); transform: translateY(-1px); }

/* Slider */
.hero-image .carousel, .hero-image .carousel-inner, .hero-image .carousel-item { height: 100%; width: 100%; }
.hero-image .carousel-control-prev, .hero-image .carousel-control-next { width: 10%; opacity: 0.8; }
.hero-image .carousel-indicators { bottom: 40px; }
.hero-image .carousel-indicators button { width: 10px; height: 10px; border-radius: 50%; }

/* ============================================
   QUICK INFO BAR
   ============================================ */
.quick-info-bar { background: white; border-bottom: 1px solid #e9ecef; padding: 0.75rem 0; position: relative; z-index: 11; }
.quick-info-items { display: flex; align-items: center; gap: 1.5rem; flex-wrap: wrap; }
.quick-info-item { display: flex; align-items: center; gap: 0.5rem; }
.quick-info-rating { background: var(--primary); color: white; font-weight: 700; font-size: 1.1rem; padding: 4px 10px; border-radius: var(--radius-sm); line-height: 1.2; }
.quick-info-rating small { font-weight: 400; font-size: 0.75rem; opacity: 0.8; }
.quick-info-icon { font-size: 1.1rem; }
.quick-info-label { font-size: 0.85rem; font-weight: 500; color: #555; }

/* ============================================
   PREMIUM BUTTON
   ============================================ */
.btn-premium { background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%); border: none; color: white; font-family: 'Segoe UI', system-ui, sans-serif; font-weight: 600; letter-spacing: 0.3px; box-shadow: 0 4px 18px rgba(30, 60, 114, 0.35); transition: all 0.3s ease; }
.btn-premium:hover { background: linear-gradient(135deg, var(--secondary) 0%, var(--primary) 100%); box-shadow: 0 6px 24px rgba(30, 60, 114, 0.45); transform: translateY(-2px); color: white; }
.btn-premium:active { transform: translateY(0); }

/* ============================================
   BOOKING BOX
   ============================================ */
.booking-main { background: white; border-radius: var(--radius-lg); box-shadow: 0 8px 30px rgba(30, 60, 114, 0.10); padding: 2rem; margin-top: 1.5rem; position: relative; z-index: 10; }
.price-big { font-size: 2.8rem; font-weight: 800; color: var(--price-amber); line-height: var(--lh-tight); letter-spacing: -0.02em; }
.price-big small { font-size: 1.2rem; font-weight: 400; color: #666; }
.summary-box { background: white; border: 2px solid #e9ecef; border-radius: 16px; padding: 1.5rem; text-align: center; }

/* ============================================
   OPTION CARDS (Room, Treatment, Accommodation)
   ============================================ */
.option-card { border: 2px solid #e9ecef; border-radius: var(--radius-md); padding: 1.1rem 1.15rem; margin-bottom: 0.75rem; cursor: pointer; transition: all 0.2s; }
.option-card:hover { border-color: var(--primary); background: #f8f9fa; }
.option-card.selected { border-color: var(--price-amber); background: var(--card-selected-bg); box-shadow: 0 0 0 1px var(--price-amber); }
.option-card input[type="radio"] { display: none; }
.option-card .price-tag { font-weight: 500; font-size: 14px; color: var(--supplement-neutral); }
.option-card.selected .price-tag { font-weight: 800; font-size: 16px; color: var(--price-amber); }

/* Room card enhancement */
.room-option-card { padding: 1rem 1.15rem; }
.room-option-card .room-card-name { font-size: 0.95rem; word-wrap: break-word; line-height: 1.3; }

/* Rate option cards (F/T side by side) */
.rate-option-card { padding: .65rem .75rem; margin-bottom: 0; min-width: 0; }
.rate-option-card .fw-bold { font-size: 1.05rem; }
.rate-option-card.selected {
    border-left-width: 4px;
    border-left-color: var(--price-amber);
    background: var(--card-selected-bg, #fff7ec);
    box-shadow: 0 0 0 1px var(--price-amber), 0 2px 6px rgba(245, 166, 35, 0.18);
}
.rate-option-card.selected .fw-bold { color: var(--price-amber); }
.room-type-group { background: #fcfcfe; }
.room-type-group:has(.rate-option-card.selected) {
    border-color: var(--price-amber) !important;
    box-shadow: 0 0 0 1px var(--price-amber);
}

/* AVES flat rate row — one row per (room, board, rate) combination */
.aves-rate-row {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 1rem;
    padding: 0.85rem 1rem;
    margin-bottom: 0.6rem;
    border: 1.5px solid #e0e7f0;
    border-radius: 12px;
    background: #fff;
    cursor: pointer;
    transition: border-color 0.15s, background-color 0.15s, box-shadow 0.15s;
}
.aves-rate-row:hover { border-color: #b8c5d6; background: #fafbfd; }
.aves-rate-row.selected {
    border-color: var(--price-amber);
    background: var(--card-selected-bg);
    box-shadow: 0 0 0 1px var(--price-amber);
}
.aves-rate-row input[type="radio"] { display: none; }
.aves-rate-row__info { flex: 1 1 auto; min-width: 0; }
.aves-rate-row__name {
    font-weight: 700;
    font-size: 0.95rem;
    color: #1a1a1a;
    text-transform: uppercase;
    letter-spacing: 0.02em;
    line-height: 1.2;
}
.aves-rate-row.selected .aves-rate-row__name { color: #1a1a1a; }
.aves-rate-row__board {
    font-size: 0.82rem;
    color: #666;
    margin-top: 4px;
    line-height: 1.25;
    display: flex;
    align-items: center;
    gap: 5px;
    flex-wrap: wrap;
}
.aves-rate-row__board i { color: var(--secondary); font-size: 0.85rem; }
.aves-rate-row__badge {
    display: inline-flex;
    align-items: center;
    gap: 3px;
    font-size: 0.7rem;
    font-weight: 600;
    padding: 2px 7px;
    border-radius: 10px;
    white-space: nowrap;
    margin-top: 4px;
}
.aves-rate-row__badge--flex { color: #198754; background: #d1f4dd; }
.aves-rate-row__badge--nrr { color: #b06000; background: #fde9c4; }
.aves-rate-row__price {
    text-align: right;
    flex-shrink: 0;
}
.aves-rate-row__price-value {
    font-weight: 800;
    font-size: 1.75rem;
    color: #1a1a1a;
    line-height: 1;
}
.aves-rate-row__price-meta {
    font-size: 0.75rem;
    color: #888;
    margin-top: 4px;
    display: flex;
    align-items: center;
    justify-content: flex-end;
    gap: 4px;
}
.aves-rate-row.selected .aves-rate-row__price-value { color: var(--price-amber); }

@media (max-width: 575.98px) {
    .aves-rate-row { padding: 0.75rem 0.85rem; gap: 0.6rem; }
    .aves-rate-row__name { font-size: 0.85rem; }
    .aves-rate-row__board { font-size: 0.75rem; }
    .aves-rate-row__price-value { font-size: 1.45rem; }
    .aves-rate-row__badge { font-size: 0.65rem; padding: 1px 6px; }
}
.room-option-card .room-features { display: flex; gap: 5px; flex-wrap: wrap; margin-top: 4px; }
.room-option-card .room-feature { display: inline-flex; align-items: center; gap: 3px; font-size: 0.72rem; color: #666; background: #f0f4f8; padding: 2px 8px; border-radius: 20px; white-space: nowrap; }
.room-option-card .room-feature i { font-size: 0.65rem; color: var(--secondary); }
.room-option-card.selected .room-feature { background: #fdefd4; color: var(--price-amber); }
.room-option-card.selected .room-feature i { color: var(--price-amber); }
.room-badge-best { font-size: 0.7rem; padding: 4px 8px; white-space: nowrap; flex-shrink: 0; background-color: var(--badge-best-green) !important; color: #fff !important; }
.room-supplement-tag { font-weight: 700; color: var(--supplement-neutral); font-size: 0.9rem; white-space: nowrap; flex-shrink: 0; }

/* Legacy room-features compat */
.option-card .room-features { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 6px; }
.option-card .room-feature { display: inline-flex; align-items: center; gap: 3px; font-size: 0.75rem; color: #888; background: #f0f0f0; padding: 2px 8px; border-radius: 20px; }

/* ============================================
   TRANSPORT
   ============================================ */
.city-search-wrapper { position: relative; }
#cityResults { position: absolute; top: 100%; left: 0; right: 0; z-index: 100; max-height: 250px; overflow-y: auto; }
#cityResults .list-group-item { cursor: pointer; }
#cityResults .list-group-item:hover { background: #f0f0f0; }
.transport-option { border: 2px solid #e9ecef; border-radius: 10px; padding: 1rem; margin-bottom: 0.5rem; cursor: pointer; transition: all 0.2s; }
.transport-option:hover { border-color: #28a745; }
.transport-option.selected { border-color: #28a745; background: #e8f5e9; }

/* ============================================
   INFO CARDS
   ============================================ */
.info-card { background: white; border-radius: var(--radius-md); box-shadow: var(--shadow-sm); padding: 1.5rem; margin-bottom: 1.2rem; transition: box-shadow 0.2s; }
.info-card:hover { box-shadow: var(--shadow-md); }
.info-card h5 { color: var(--primary); margin-bottom: 1rem; font-size: 1.1rem; font-weight: 700; }

/* Description section — editorial style, no card box */
.description-section { padding: 24px 0 16px; border-bottom: 1px solid #e9ecef; margin-bottom: 1.2rem; }
.description-section h5 { color: var(--primary); font-size: 1.1rem; font-weight: 700; margin-bottom: 12px; }
.description-section .hotel-description { font-size: 0.92rem; line-height: 1.7; color: #374151; }
.description-section .hotel-description p { margin-bottom: 0.6rem; }
.description-section .hotel-description.collapsed { max-height: 7em; overflow: hidden; position: relative; }
.description-section .hotel-description.collapsed::after { content: ''; position: absolute; bottom: 0; left: 0; right: 0; height: 3em; background: linear-gradient(to top, #ffffff 0%, transparent 100%); pointer-events: none; }
.description-toggle { display: inline-flex; align-items: center; gap: 4px; background: none; border: none; color: var(--primary); font-size: 0.85rem; font-weight: 600; padding: 8px 0; cursor: pointer; }
.description-toggle:hover { color: var(--accent); }
.included-item { display: flex; align-items: center; gap: 0.5rem; padding: 0.5rem 0; font-size: 0.9rem; line-height: 1.3; }
.included-item i { color: #28a745; font-size: 0.85rem; }

/* Servizi Hotel Inclusi — griglia pacchetto base (Task C, owner 2026-06-06) */
.hd-base-package-section h5 { display: flex; align-items: center; }
.hd-base-package-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 2px 24px; }
@media (max-width: 575.98px) { .hd-base-package-grid { grid-template-columns: 1fr; } }

/* ============================================
   OFFERTA IN VETRINA — card stato no-date (Task B, owner 2026-06-06)
   ============================================ */
/* Wrap della card vetrina come figlia diretta di .hd-no-date-grid.
   Mobile: order -2 → sopra la sidebar "verifica disponibilità" (order -1) e il main (0).
   Desktop: spanna entrambe le colonne, full-width in cima. */
.hd-vetrina-wrap { order: -2; }
@media (min-width: 992px) { .hd-vetrina-wrap { grid-column: 1 / -1; } }
.hd-vetrina {
    background: #fff;
    border: 1.5px solid rgba(245, 166, 35, 0.40);
    border-radius: 16px;
    box-shadow: 0 6px 24px rgba(30, 60, 114, 0.10);
    overflow: hidden;
    margin-bottom: 22px;
}
.hd-vetrina__bar {
    display: flex; align-items: center; justify-content: space-between; gap: 8px;
    background: var(--primary, #1e3c72); color: #fff;
    padding: 9px 16px; font-size: 12.5px; font-weight: 800;
    letter-spacing: 0.5px; text-transform: uppercase;
}
.hd-vetrina__brand { display: inline-flex; align-items: center; gap: 6px; }
.hd-vetrina__brand .bi-stars { color: #ffd166; }
.hd-vetrina__flag {
    display: inline-flex; align-items: center; gap: 5px;
    font-size: 11px; font-weight: 800; letter-spacing: 0.2px;
    padding: 3px 9px; border-radius: 999px; text-transform: none; white-space: nowrap;
}
.hd-vetrina__flag--urgent { background: #ffe08a; color: #8a4b00; }
.hd-vetrina__flag--scarcity { background: rgba(255, 255, 255, 0.18); color: #fff; }
.hd-vetrina__body { padding: 16px 18px 18px; }
.hd-vetrina__head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; }
.hd-vetrina__date { font-size: 15px; font-weight: 700; color: var(--primary, #1e3c72); display: inline-flex; align-items: center; gap: 7px; flex-wrap: wrap; }
.hd-vetrina__nights { color: #6b7280; font-weight: 600; }
.hd-vetrina__gift {
    flex: 0 0 auto; width: 50px; height: 50px; border-radius: 50%;
    background: #e8f6ee; color: #1f8a4d;
    display: flex; align-items: center; justify-content: center; font-size: 22px;
}
.hd-vetrina__chips { display: flex; flex-wrap: wrap; gap: 8px; margin: 12px 0 14px; }
.hd-vetrina__chip {
    display: inline-flex; align-items: center; gap: 5px;
    font-size: 12.5px; font-weight: 700; padding: 5px 11px; border-radius: 999px;
}
.hd-vetrina__chip--treat { background: #eef2f7; color: var(--primary, #1e3c72); }
.hd-vetrina__chip--pkg { background: #e8f6ee; color: #1f6e44; }
.hd-vetrina__priceline { display: flex; align-items: center; justify-content: space-between; gap: 14px; flex-wrap: wrap; }
.hd-vetrina__price-wrap { display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; }
.hd-vetrina__struck { font-size: 16px; text-decoration: line-through; color: #9ca3af; font-weight: 600; }
.hd-vetrina__price { font-size: 32px; font-weight: 800; color: #e8821e; line-height: 1; letter-spacing: -0.5px; }
.hd-vetrina__per { font-size: 12.5px; color: #6b7280; font-weight: 600; }
.hd-vetrina__savings-inline { font-size: 13px; font-weight: 700; color: #1f8a4d; white-space: nowrap; }
.hd-vetrina__savings-inline strong { font-weight: 800; }
.hd-vetrina__cta {
    display: inline-flex; align-items: center; gap: 7px;
    background: var(--primary, #1e3c72); color: #fff !important;
    font-weight: 800; font-size: 14.5px; padding: 12px 22px; border-radius: 999px;
    text-decoration: none; transition: background 0.2s, transform 0.1s;
}
.hd-vetrina__cta:hover { background: var(--primary-dark, #152a4f); transform: translateY(-1px); }
.hd-vetrina__note { margin-top: 12px; font-size: 13.5px; font-weight: 600; display: inline-flex; align-items: center; gap: 7px; }
.hd-vetrina__note--savings { color: #1f8a4d; }
.hd-vetrina__note--savings strong { font-weight: 800; }
.hd-vetrina__note--incl { color: #1a2235; }
.hd-vetrina__note--incl .bi { color: #1f8a4d; }
@media (min-width: 768px) {
    .hd-vetrina__body { padding: 18px 22px 20px; }
    .hd-vetrina__price { font-size: 36px; }
    .hd-vetrina__cta { font-size: 15px; padding: 13px 26px; }
}
@media (max-width: 400px) {
    .hd-vetrina__price { font-size: 28px; }
    .hd-vetrina__cta { width: 100%; justify-content: center; }
    .hd-vetrina__priceline { gap: 10px; }
}
/* scroll-anchor per il deep-link "Vai all'offerta" (#hd-prenota) */
.hd-prenota-anchor { display: block; height: 0; scroll-margin-top: 90px; }

/* ============================================
   ACCENT BUTTON
   ============================================ */
.btn-accent { background: var(--cta-orange); border: none; color: white; font-weight: 600; padding: 1rem 2rem; font-size: 1.1rem; border-radius: 10px; transition: all 0.2s; }
.btn-accent:hover { background: var(--cta-orange-hover); color: white; transform: translateY(-2px); box-shadow: 0 4px 15px rgba(245,166,35,0.4); }

/* ============================================
   AMENITIES GRID
   ============================================ */
.amenities-grid { display: grid; grid-template-columns: repeat(4, 1fr); gap: 12px; }
.amenity-item { display: flex; flex-direction: column; align-items: center; text-align: center; padding: 10px 4px; border-radius: 12px; transition: background 0.2s; }
.amenity-item:hover { background: #f0f4f8; }
.amenity-icon { width: 48px; height: 48px; border-radius: 14px; display: flex; align-items: center; justify-content: center; font-size: 1.25rem; margin-bottom: 6px; transition: transform 0.2s; background: linear-gradient(135deg, #eef2f7 0%, #e3e9f0 100%); color: var(--primary); }
.amenity-item:hover .amenity-icon { transform: scale(1.1); background: linear-gradient(135deg, #dce4ed 0%, #cdd7e4 100%); }
.amenity-label { font-size: 0.78rem; color: #374151; font-weight: 500; line-height: 1.3; }

/* 2026-06-06 owner — "Cosa include l'offerta" reso come il link nativo
   "Pacchetto incluso" (.hd-room-pkg-link): niente pill/bordo, icona regalo ambra,
   testo navy SOTTOLINEATO. Subito dopo il trattamento nella room card AVES. */
.hd-quota-btn {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    margin: 0;
    padding: 0;
    border: none;
    background: none;
    color: var(--primary, #1e3c72);
    font-size: 0.85rem;
    font-weight: 600;
    line-height: 1.2;
    cursor: pointer;
    text-decoration: none;
    white-space: nowrap;
}
.hd-quota-btn__txt { text-decoration: underline; text-underline-offset: 2px; }
.hd-quota-btn:hover .hd-quota-btn__txt { color: var(--secondary, #2a5298); }
.hd-quota-btn i { color: var(--accent, #f5a623); font-size: 0.95rem; }

/* Amenities show more/less */
.amenities-grid.collapsed .amenity-item:nth-child(n+9) { display: none; }
.amenities-toggle { background: none; border: 1px solid #dee2e6; color: var(--primary); font-size: 0.85rem; font-weight: 600; padding: 6px 16px; border-radius: 20px; cursor: pointer; transition: all 0.2s; margin-top: 12px; }
.amenities-toggle:hover { background: var(--primary); color: white; border-color: var(--primary); }

/* ============================================
   HOTEL DESCRIPTION (Markdown)
   ============================================ */
.hotel-description p { margin-bottom: 0.75rem; }
.hotel-description p:last-child { margin-bottom: 0; }
.hotel-description ul, .hotel-description ol { margin-bottom: 0.75rem; padding-left: 1.5rem; }
.hotel-description h1, .hotel-description h2, .hotel-description h3 { margin-top: 1rem; margin-bottom: 0.5rem; font-size: 1.1rem; }

/* ============================================
   GALLERY
   ============================================ */
/* Legacy grid (kept for compat) */
.gallery-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
.gallery-thumb { position: relative; border-radius: var(--radius-sm); overflow: hidden; height: 100px; display: block; cursor: pointer; }
.gallery-thumb-large { grid-column: span 2; height: 160px; }
.gallery-thumb img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.3s; }
.gallery-thumb:hover img { transform: scale(1.08); }
.gallery-thumb-overlay { position: absolute; inset: 0; background: rgba(0,0,0,0); transition: background 0.3s; display: flex; align-items: center; justify-content: center; }
.gallery-thumb-overlay i { color: white; font-size: 1.5rem; opacity: 0; transition: opacity 0.3s; }
.gallery-thumb:hover .gallery-thumb-overlay { background: rgba(0,0,0,0.3); }
.gallery-thumb:hover .gallery-thumb-overlay i { opacity: 1; }
.gallery-thumb-more { position: absolute; inset: 0; background: rgba(0,0,0,0.6); color: white; font-size: 1.5rem; font-weight: 700; display: flex; align-items: center; justify-content: center; }

/* Gallery v2 — Larger thumbnails, hotel-style grid */
.gallery-grid-v2 { display: grid; grid-template-columns: 1fr 1fr; gap: 6px; }
.gallery-thumb-v2 { position: relative; border-radius: var(--radius-sm); overflow: hidden; height: 130px; display: block; cursor: pointer; }
.gallery-thumb-featured { grid-column: span 2; height: 200px; }
.gallery-thumb-v2 img { width: 100%; height: 100%; object-fit: cover; transition: transform 0.3s; }
.gallery-thumb-v2:hover img { transform: scale(1.05); }
.gallery-thumb-v2 .gallery-thumb-overlay { position: absolute; inset: 0; background: rgba(0,0,0,0); transition: background 0.3s; display: flex; align-items: center; justify-content: center; }
.gallery-thumb-v2 .gallery-thumb-overlay i { color: white; font-size: 1.5rem; opacity: 0; transition: opacity 0.3s; }
.gallery-thumb-v2:hover .gallery-thumb-overlay { background: rgba(0,0,0,0.25); }
.gallery-thumb-v2:hover .gallery-thumb-overlay i { opacity: 1; }
.gallery-thumb-v2 .gallery-thumb-more { position: absolute; inset: 0; background: rgba(0,0,0,0.55); color: white; font-size: 1.8rem; font-weight: 700; display: flex; align-items: center; justify-content: center; backdrop-filter: blur(2px); }

/* Gallery lightbox modal — Iter 1.B Task O: light navy bg (no più nero
   pesante), caption titolo foto in basso. */
.gallery-lightbox .modal-content {
    background: rgba(21, 41, 79, 0.92);  /* primary-dark con leggera trasparenza */
    backdrop-filter: blur(8px);
    -webkit-backdrop-filter: blur(8px);
    border: none;
    border-radius: 0;
}
/* Caption overlay (titolo/alt della foto corrente) */
.gallery-lightbox .gallery-caption {
    position: absolute;
    left: 50%;
    bottom: 64px;
    transform: translateX(-50%);
    max-width: min(640px, 90%);
    background: rgba(0, 0, 0, 0.55);
    color: #fff;
    padding: 8px 16px;
    border-radius: 999px;
    font-size: 14px;
    font-weight: 600;
    text-align: center;
    pointer-events: none;
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
    z-index: 90;
    line-height: 1.3;
}
@media (max-width: 575.98px) {
    .gallery-lightbox .gallery-caption {
        bottom: 72px;
        font-size: 12.5px;
        padding: 6px 12px;
    }
}
/* overflow-y:hidden overrides Bootstrap modal-fullscreen (overflow-y:auto) — prevents iOS scroll
   container from swallowing tap events on buttons (arrows + X). Content fits within 85vh anyway. */
.gallery-lightbox .modal-body { display: flex; align-items: center; justify-content: center; min-height: 80vh; padding: 0; overflow-y: hidden; -webkit-overflow-scrolling: auto; }
.gallery-lightbox .modal-body img { max-height: 85vh; max-width: 100%; object-fit: contain; }
.gallery-lightbox .btn-close { position: absolute; top: 15px; right: 15px; z-index: 100; filter: invert(1); opacity: 0.8; touch-action: manipulation; }
.gallery-lightbox .btn-close:hover { opacity: 1; }
.gallery-lightbox .gallery-nav { position: absolute; top: 50%; transform: translateY(-50%); background: rgba(255,255,255,0.15); border: none; color: white; width: 48px; height: 48px; border-radius: 50%; display: flex; align-items: center; justify-content: center; font-size: 1.5rem; cursor: pointer; transition: all 0.2s; backdrop-filter: blur(4px); z-index: 100; touch-action: manipulation; }
.gallery-lightbox .gallery-nav:hover { background: rgba(255,255,255,0.3); }
.gallery-lightbox .gallery-nav.prev { left: 15px; }
.gallery-lightbox .gallery-nav.next { right: 15px; }
.gallery-lightbox .gallery-counter { position: absolute; bottom: 20px; left: 50%; transform: translateX(-50%); color: rgba(255,255,255,0.7); font-size: 0.9rem; font-weight: 500; }
.gallery-lightbox .gallery-thumbnails { display: flex; gap: 4px; justify-content: center; padding: 12px 0; overflow-x: auto; }
.gallery-lightbox .gallery-thumbnails img { width: 60px; height: 40px; object-fit: cover; border-radius: 4px; opacity: 0.5; cursor: pointer; transition: opacity 0.2s; }
.gallery-lightbox .gallery-thumbnails img.active { opacity: 1; outline: 2px solid white; }

/* ============================================
   STICKY BARS
   ============================================ */
.sticky-booking-bar { position: fixed; bottom: 0; left: 0; right: 0; z-index: 1050; background: white; box-shadow: 0 -4px 20px rgba(0,0,0,0.15); padding: 12px 16px; border-top: 1px solid #eee; transition: transform 0.3s ease; }
.sticky-booking-bar.hidden { transform: translateY(100%); }

/* T.53 (2026-05-26 owner): rimossa display:none desktop. La sticky-price-bar
   ora appare anche su desktop quando booking-main scrolla fuori dal viewport
   (JS IntersectionObserver + toggle .hidden). Su mobile <992 viene soppressa
   da body.has-hd-sticky-cta (la nuova hd-sticky-mobile-cta la sostituisce). */

/* T.53.b (2026-05-26 owner): layout desktop esteso con riepilogo (guests +
   date + treatment) sx, prezzo center, CTA Prenota compatto dx. */
@media (min-width: 992px) {
    .sticky-price-bar .sticky-bottom-row {
        display: grid !important;
        grid-template-columns: 1fr auto auto !important;
        gap: 24px !important;
        padding: 10px 24px !important;
        align-items: center;
        max-width: 1320px;
        margin: 0 auto;
    }
    .sticky-recap {
        display: flex;
        flex-direction: column;
        gap: 2px;
        min-width: 0;
    }
    .sticky-recap__title {
        font-size: 13px;
        font-weight: 600;
        color: #6b7280;
        line-height: 1.3;
    }
    .sticky-recap__title strong {
        color: var(--primary, #1e3c72);
        font-weight: 800;
    }
    .sticky-recap__meta {
        display: flex;
        gap: 14px;
        flex-wrap: wrap;
        font-size: 13px;
        font-weight: 600;
        color: var(--primary, #1e3c72);
    }
    .sticky-recap__meta-item {
        display: inline-flex;
        align-items: center;
        gap: 5px;
        white-space: nowrap;
    }
    .sticky-recap__meta-item i {
        color: var(--accent, #f5a623);
        font-size: 14px;
    }
    /* T.53.c — Transport chip (popolato da JS) e Savings chip (server) */
    .sticky-recap__meta-item--transport strong {
        color: var(--price-amber, #e08b1a);
        font-weight: 800;
        margin-left: 4px;
    }
    .sticky-recap__meta-item--savings {
        background: rgba(30, 60, 114, 0.06);
        padding: 3px 10px;
        border-radius: 999px;
        font-weight: 700;
    }
    .sticky-recap__meta-item--savings strong {
        color: var(--price-amber, #e08b1a);
        font-weight: 800;
        margin-left: 3px;
    }
    .sticky-recap__savings-spark {
        color: var(--primary, #1e3c72);
        font-size: 14px;
        font-weight: 900;
        margin-right: 2px;
    }
    .sticky-price-bar .sticky-price-block {
        text-align: right;
        display: flex;
        flex-direction: column;
        align-items: flex-end;
        gap: 2px;
        line-height: 1;
    }
    .sticky-price-bar .sticky-price-big {
        font-size: 26px !important;
        color: var(--price-amber, #e08b1a) !important;
    }
    .sticky-price-bar .sticky-price-struck {
        font-size: 13px;
        color: var(--price-struck, #8b3a2f);
        text-decoration: line-through;
        font-weight: 600;
    }
    .sticky-price-bar .sticky-price-night {
        font-size: 12px;
        color: #6b7280;
        font-weight: 500;
    }
    .sticky-btn--compact {
        width: auto !important;
        padding: 9px 18px !important;
        font-size: 13.5px !important;
        border-radius: 999px !important;
        background: var(--accent, #f5a623) !important;
        color: #fff !important;
        box-shadow: 0 3px 10px rgba(245, 166, 35, 0.32) !important;
    }
    .sticky-btn--compact:hover {
        background: var(--accent-hover, #e09000) !important;
    }
    /* Hide sticky-price-night meta on desktop (la durata è già in __meta-item). */
    .sticky-price-bar .sticky-price-night { display: none; }
}

/* Sticky bar Variante B — banda risparmio + riga prezzo/CTA */
.sticky-price-bar { position: fixed; bottom: 0; left: 0; right: 0; z-index: 1060; background: #fff; border-top: 1px solid #e5e7eb; box-shadow: 0 -4px 16px rgba(0,0,0,0.06); padding: 0; padding-bottom: env(safe-area-inset-bottom, 0px); transition: transform 0.3s ease; }
/* iOS Safari: la toolbar dinamica lascia un gap sotto la barra fixed (bottom:0
   è ancorato al layout viewport). Estendo lo sfondo bianco della barra sotto di
   essa con uno "skirt", così il gap non appare come spazio vuoto. Si muove con la
   barra quando è .hidden e non aggiunge scroll (absolute, pointer-events:none). */
.sticky-price-bar::after { content: ""; position: absolute; left: 0; right: 0; top: 100%; height: 60vh; background: #fff; pointer-events: none; }
.sticky-price-bar.hidden { transform: translateY(100%); }

/* Riga superiore — banda risparmio (condizionale) */
.sticky-savings-band { width: 100%; background: var(--savings-bg); color: var(--savings-text); border-bottom: 1px solid var(--savings-border); text-align: center; padding: 7px 15px; font-size: 11px; font-weight: 700; }

/* Riga inferiore — prezzo + CTA */
.sticky-bottom-row { display: grid; grid-template-columns: auto 1fr; gap: 14px; align-items: center; padding: 9px 15px 14px; background: #fff; }
.sticky-price-block { display: flex; flex-direction: column; gap: 1px; }
.sticky-price-big { font-size: 21px; font-weight: 800; color: #0f2942; line-height: 1.1; }
.sticky-price-struck { font-size: 11px; text-decoration: line-through; color: #9ca3af; margin-right: 3px; }
.sticky-price-night { font-size: 10px; font-weight: 500; color: var(--supplement-neutral); }
.sticky-price-bar .sticky-btn { background: var(--cta-orange); color: white; border: none; padding: 12px 18px; border-radius: 11px; font-weight: 700; font-size: 13.5px; cursor: pointer; transition: all 0.2s; white-space: nowrap; width: 100%; box-shadow: 0 3px 12px rgba(245, 95, 37, 0.3); }
.sticky-price-bar .sticky-btn:hover { background: var(--cta-orange-hover); transform: translateY(-1px); }

/* Classi per prezzo barrato e badge sconto nella card principale */
.price-struck-text { color: var(--price-struck); text-decoration: line-through; }
.badge-discount { background: var(--price-struck) !important; color: #fff !important; }

/* Badge "[Titolo Promo] -X%" — pill style, sfondo rosso pieno, testo
   bianco bold, leggermente più compatto. 2026-05-21: restyling owner-
   driven (pill rotondo + più gap dal barrato per non sembrare
   incollato). Usato SOLO nel box riepilogo prezzo principale. */
.promo-disc-badge { display: inline-block; background: #d32f2f; color: #fff; font-size: .7rem; font-weight: 700; line-height: 1; padding: 5px 12px; border-radius: 999px; letter-spacing: .02em; white-space: nowrap; }
/* Piano Famiglia: badge "Risparmi €X" verde, a fianco del badge nome piano. */
.promo-disc-badge-save { background: #198754; }

/* Layout D — big price centered, struck price + discount badge on its
   own row underneath. Applied on both server render and JS recalc so
   the markup is identical (no re-render flash). 2026-05-21: gap
   aumentato a 14px per dare aria tra prezzo barrato e badge promo. */
.price-centered-wrap { text-align: center; }
.price-centered-wrap .price-big { display: block; }
.price-disc-row { display: flex; align-items: center; justify-content: center; gap: 14px; margin-top: 4px; flex-wrap: wrap; }

/* ============================================
   CONTACT BUTTONS
   ============================================ */
.contact-btn { display: flex; align-items: center; justify-content: center; text-decoration: none; border-radius: var(--radius-md); padding: 12px 14px; transition: all 0.2s; gap: 8px; }
.contact-btn i { font-size: 1.3rem; flex-shrink: 0; }
.contact-btn-label { font-size: 0.75rem; color: #666; line-height: 1; }
.contact-btn-value { font-size: 1rem; font-weight: 700; line-height: 1.3; }
.contact-btn-phone { background: white; border: 2px solid var(--primary); }
.contact-btn-phone i { color: var(--primary); }
.contact-btn-phone .contact-btn-value { color: var(--primary); }
.contact-btn-phone:hover { background: #f0f4f8; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(30, 60, 114, 0.15); }
.contact-btn-whatsapp { background: #25D366; border: 2px solid #25D366; }
.contact-btn-whatsapp i { color: white; }
.contact-btn-whatsapp .contact-btn-label { color: rgba(255,255,255,0.85); }
.contact-btn-whatsapp .contact-btn-value { color: white; }
.contact-btn-whatsapp:hover { background: #20b858; border-color: #20b858; transform: translateY(-1px); box-shadow: 0 4px 12px rgba(37, 211, 102, 0.3); }

/* CTA main button pulse animation */
.cta-main-btn { position: relative; overflow: hidden; }
.cta-main-btn::after { content: ''; position: absolute; inset: 0; background: linear-gradient(90deg, transparent 0%, rgba(255,255,255,0.15) 50%, transparent 100%); transform: translateX(-100%); animation: ctaShimmer 3s ease-in-out infinite; }
@keyframes ctaShimmer { 0%, 100% { transform: translateX(-100%); } 50% { transform: translateX(100%); } }

/* ============================================
   CALENDAR (Flatpickr)
   ============================================ */
.calendar-container { background: white; border-radius: var(--radius-md); padding: 1.5rem; }
.flatpickr-calendar { box-shadow: none !important; width: 100% !important; }
.flatpickr-months { margin-bottom: 10px; }
.flatpickr-day { border-radius: 50%; margin: 2px; height: 40px; line-height: 40px; }
/* T.63 (2026-05-29): la palette del calendario MODAL (available-arrival, valid-checkout,
   selected, inRange, disabled, stop-sale) è ora definita UNA SOLA VOLTA, scoped
   `.hd-bp-calendar`, nel <style> inline dei template (hotel_detail.html / aves_hotel_detail.html).
   Le vecchie regole globali `.flatpickr-day.available-arrival { border: 2px solid #4caf50 }`,
   `.valid-checkout`, `.checkout-invalid`, `.day-price` sono state rimosse: erano modal-only
   (le classi le aggiunge solo #availabilityCalendar) e il loro `!important` vinceva sul blocco
   scoped pulito, producendo le celle bordate/ingombranti dell'Image #1.
   Le regole generiche per #dateRange (selected navy, inRange) restano qui sotto. */
.flatpickr-day.selected, .flatpickr-day.startRange, .flatpickr-day.endRange { background: var(--primary) !important; border-color: var(--primary) !important; }
.flatpickr-day.inRange { background: #e3f2fd !important; border-color: #e3f2fd !important; }
.flatpickr-day.flatpickr-disabled { color: #ccc !important; }
.legend-dot { display: inline-block; width: 12px; height: 12px; border-radius: 50%; margin-right: 5px; }
.legend-dot.available { background: #4caf50; }
.legend-dot.selected { background: var(--primary); }
.legend-dot.unavailable { background: #ccc; }

/* Inline calendar in modal */
.inline-calendar .calendar-container { max-width: 100%; margin: 0 auto; padding: 5px; overflow-x: hidden; }
.inline-calendar .flatpickr-calendar { margin: 0 auto; }
.inline-calendar .flatpickr-months { padding: 8px 0 12px 0; display: flex !important; }
.inline-calendar .flatpickr-month { font-size: 1rem; flex: 1; }
.inline-calendar .flatpickr-innerContainer { display: flex !important; gap: 20px; justify-content: center; }
.inline-calendar .flatpickr-rContainer { width: auto !important; }
.inline-calendar .flatpickr-weekdaycontainer { display: grid !important; grid-template-columns: repeat(7, 1fr) !important; width: 100% !important; margin-bottom: 6px; }
.inline-calendar .flatpickr-weekday { width: auto !important; max-width: none !important; font-size: 0.75rem; font-weight: 600; text-align: center; }
.inline-calendar .dayContainer { display: grid !important; grid-template-columns: repeat(7, 1fr) !important; width: 100% !important; justify-items: center !important; min-width: unset !important; max-width: 100% !important; }
.inline-calendar .flatpickr-days { width: auto !important; }
.inline-calendar .flatpickr-day { height: 42px !important; width: 42px !important; max-width: 42px !important; flex-basis: 42px !important; display: flex !important; flex-direction: column !important; align-items: center !important; justify-content: center !important; line-height: 1 !important; }
.inline-calendar .flatpickr-day .day-number { font-size: 1.1rem; font-weight: 600; display: block !important; width: 100% !important; text-align: center !important; }
.inline-calendar .flatpickr-day .day-price { font-size: 9px !important; color: #28a745; display: block !important; width: 100% !important; text-align: center !important; }
.inline-calendar .flatpickr-day.inRange,
.inline-calendar .flatpickr-day.selected,
.inline-calendar .flatpickr-day.startRange,
.inline-calendar .flatpickr-day.endRange { display: flex !important; flex-direction: column !important; align-items: center !important; justify-content: center !important; }

/* T.63 (2026-05-29): grid-fix 7-colonne promosso a regola base (mobile + desktop).
   Vince su `.inline-calendar .flatpickr-day { width:42px }` (0,2,0) grazie a
   `.hd-bp-calendar.inline-calendar` (0,3,0). Celle fluide = nessun debordo, 7 colonne uguali. */
.hd-bp-calendar.inline-calendar .flatpickr-weekdaycontainer,
.hd-bp-calendar.inline-calendar .dayContainer {
    grid-template-columns: repeat(7, minmax(0, 1fr)) !important;
}
.hd-bp-calendar.inline-calendar .flatpickr-days { width: 100% !important; }
.hd-bp-calendar.inline-calendar .flatpickr-day {
    width: 100% !important;
    max-width: 100% !important;
    min-width: 0 !important;
    flex-basis: auto !important;
    margin: 1px 0 !important;
}

/* ============================================================
   2026-06-02 owner — Calendario #bookingPopup PIÙ COMPATTO.
   Scoped a #bookingPopup (ID) per vincere su tutte le regole
   `.hd-bp-calendar`/`.inline-calendar` (anche !important) senza
   toccare il groviglio esistente. Riduce celle e numeri.
   ============================================================ */
/* Mobile: celle meno alte + numeri più piccoli (erano ~46px / ~19px). */
#bookingPopup .hd-bp-calendar .flatpickr-day { height: 40px !important; border-radius: 8px !important; }
#bookingPopup .hd-bp-calendar .flatpickr-day .day-number { font-size: 15px !important; font-weight: 600 !important; }
#bookingPopup .hd-bp-calendar .flatpickr-weekday { font-size: 10px !important; }
@media (min-width: 576px) {
    /* Desktop: celle più basse + numeri più piccoli (modale resta 820 per non
       tagliare i 2 mesi affiancati). La larghezza cella è data dalla grid 1fr. */
    #bookingPopup .hd-bp-calendar .flatpickr-day { height: 32px !important; }
    #bookingPopup .hd-bp-calendar .flatpickr-day .day-number { font-size: 13.5px !important; }
}
   ospiti", (2) età bambino che resta INLINE a destra dei counter invece di andare SOTTO.
   ROOT CAUSE scroll: bootstrap rende il modal `modal-dialog-scrollable` (max-height:100%
   legato alla finestra) → il contenuto (summary + composizione + calendario dual-month a
   celle 40px) supera l'altezza utile su finestre desktop normali (<~840px) → scrollbar
   presente SEMPRE, anche a 0 bambini (overflow ~65px misurato @viewport 800).
   ROOT CAUSE età: `.hd-bp-room` è flex-row con flex-wrap (≥576) e `.hd-bp-ages` è il 4°
   figlio → finisce INLINE a destra di info+counters, schiacciato (ages_sameRowAsCounters).
   FIX: (A) box età `flex-basis:100%` → va a capo FULL-WIDTH sotto i counter; (B) recupero
   ~110px verticali (celle 40→30px ad ALTEZZA, larghezza INVARIATA ~50px dalla catena qui
   sotto; padding/margini sezioni compattati) → il contenuto entra senza scroll su finestre
   ≥~814px (0 figli ≥~777px). body padding ha !important nel template inline → override via
   specificità `.hd-bp-modal` (0,2,0). Validato in-browser @viewport 800: 0-child overflow
   0px, 1-child 14px (era 68); celle 50×30 (larghezza piena mantenuta). Mobile (<768) intatto. */
@media (min-width: 768px) {
    /* Espansione catena flatpickr per riempire la larghezza del modal (eredità T.63.e) */
    .hd-bp-calendar.inline-calendar .flatpickr-innerContainer,
    .hd-bp-calendar.inline-calendar .flatpickr-rContainer,
    .hd-bp-calendar.inline-calendar .flatpickr-weekdays,
    .hd-bp-calendar.inline-calendar .flatpickr-days { width: 100% !important; max-width: 100% !important; }
    .hd-bp-calendar.inline-calendar .flatpickr-days { display: flex !important; }
    .hd-bp-calendar.inline-calendar .flatpickr-weekdaycontainer,
    .hd-bp-calendar.inline-calendar .dayContainer { flex: 1 1 0 !important; width: auto !important; min-width: 0 !important; max-width: none !important; }
    /* Celle: larghezza piena (~50px dalla griglia 1fr) MA altezza ridotta 40→30 per far
       entrare il contenuto senza scroll. Proporzione 50×30 = gradevole, NON schiacciata. */
    .hd-bp-calendar.inline-calendar .flatpickr-day { height: 30px !important; line-height: 28px !important; margin: 0 !important; padding: 0 !important; font-size: 14px !important; }
    .hd-bp-calendar .flatpickr-weekday { padding: 2px 0 !important; }
    .hd-bp-calendar .flatpickr-months { padding-top: 4px !important; padding-bottom: 6px !important; margin-bottom: 6px !important; }
    .hd-bp-calendar .calendar-container { padding: 6px 18px 8px !important; }

    /* (A) Box età bambino → FULL-WIDTH sotto i counter (era inline a destra, schiacciato).
       `.hd-bp-room` è flex-wrap:wrap → flex-basis:100% lo manda a capo su riga propria. */
    .hd-bp-room { align-items: flex-start !important; }
    .hd-bp-room .hd-bp-ages { flex: 1 1 100% !important; width: 100% !important; margin-top: 6px !important; padding: 6px 10px !important; gap: 5px !important; }
    .hd-bp-room .hd-bp-age-row .hd-bp-age-select { padding-top: 5px !important; padding-bottom: 5px !important; }

    /* (B) Recupero verticale: compatta padding/margini delle sezioni del body. */
    .hd-bp-modal .hd-bp-modal__body { padding: 14px 22px 8px !important; }
    .hd-bp-summary { padding-bottom: 8px !important; margin-bottom: 10px !important; }
    .hd-bp-rooms-card { padding: 12px 16px !important; margin-bottom: 10px !important; }
    .hd-bp-rooms-card__header { margin-bottom: 8px !important; }
    .hd-bp-divider { margin: 8px 0 6px !important; }
}

/* ============================================================
   2026-06-03 — Calendario #bookingPopup A PIENA LARGHEZZA.
   PROBLEMA: i due mesi (flatpickr-innerContainer è display:flex
   + justify-content:center, riga 936) restavano a larghezza-
   contenuto e CENTRATI nel modale (modal-xl largo) → grossi
   margini vuoti ai lati.
   FIX: il wrapper dei due mesi diventa una GRID 1fr 1fr a width
   100%; ogni mese (rContainer) width 100%; le griglie giorni e
   weekday repeat(7,1fr) a piena larghezza; celle width 100%.
   ALTEZZA celle INVARIATA (no aspect-ratio) per non riaprire lo
   scroll del modale chiuso dall'owner il 2026-06-02.
   I 2 mesi esistono solo ≥768px (Flatpickr showMonths responsivo:
   sotto 768 rende 1 mese), quindi il blocco vive in @media 768.
   Scope `#bookingPopup .hd-bp-calendar.inline-calendar` (1,3,0)
   → vince sul groviglio legacy e sugli <style> inline duplicati
   nei due template. Vale sia per scheda nativa che AVES (CSS
   condiviso). NON tocca colori/stati/frecce/logica selezione. */
@media (min-width: 768px) {
    /* (1) Catena contenitore a piena larghezza. NB: Flatpickr multi-mese ha UN SOLO
       .flatpickr-rContainer; i due mesi sono i due figli di .flatpickr-days /
       .flatpickr-weekdays → quindi la grid 1fr 1fr va LÌ, non su innerContainer. */
    #bookingPopup .hd-bp-calendar.inline-calendar .flatpickr-innerContainer,
    #bookingPopup .hd-bp-calendar.inline-calendar .flatpickr-rContainer {
        display: block !important;
        width: 100% !important;
        max-width: 100% !important;
    }
    /* (2) I DUE MESI affiancati = grid 1fr 1fr (giorni + riga weekday allineate) */
    #bookingPopup .hd-bp-calendar.inline-calendar .flatpickr-days,
    #bookingPopup .hd-bp-calendar.inline-calendar .flatpickr-weekdays {
        display: grid !important;
        grid-template-columns: 1fr 1fr !important;
        gap: 24px !important;
        width: 100% !important;
        max-width: 100% !important;
    }
    /* (3) Ogni griglia mese: 7 colonne pari a piena larghezza della sua metà */
    #bookingPopup .hd-bp-calendar.inline-calendar .dayContainer,
    #bookingPopup .hd-bp-calendar.inline-calendar .flatpickr-weekdaycontainer {
        display: grid !important;
        grid-template-columns: repeat(7, 1fr) !important;
        width: 100% !important;
        max-width: 100% !important;
        min-width: 0 !important;
        flex: initial !important;
    }
    /* (4) Celle giorno: riempiono la colonna in larghezza E sono più alte
       (richiesta owner "allargalo in altezza"): 44px invece dei 30/32 compatti
       → proporzione più gradevole rispetto alla larghezza ~49px della colonna. */
    #bookingPopup .hd-bp-calendar.inline-calendar .flatpickr-day {
        width: 100% !important;
        max-width: 100% !important;
        min-width: 0 !important;
        flex-basis: auto !important;
        height: 44px !important;
        line-height: 1 !important;
    }
    /* (5) Nomi giorni (LUN..DOM) centrati sulle colonne dei numeri */
    #bookingPopup .hd-bp-calendar.inline-calendar .flatpickr-weekday {
        width: auto !important;
        max-width: none !important;
        text-align: center !important;
    }
    /* (6) Riduce lo spazio tra la riga dei nomi dei mesi (Giugno/Luglio) e le
       date (richiesta owner). Comprime padding/margine di .flatpickr-months. */
    #bookingPopup .hd-bp-calendar.inline-calendar .flatpickr-months {
        padding-top: 2px !important;
        padding-bottom: 2px !important;
        margin-bottom: 2px !important;
    }
    #bookingPopup .hd-bp-calendar.inline-calendar .flatpickr-weekdays {
        margin-top: 0 !important;
        padding-top: 0 !important;
    }
    /* (7) Box "età bambini": full-width SOTTO i counter, UNA RIGA PER BAMBINO
       (richiesta owner). La regola legacy `flex:1 1 100%` veniva resettata da
       una regola inline del template → qui scope #bookingPopup (1,2,0) la vince.
       `.hd-bp-room` è flex-wrap:wrap → flex-basis 100% manda il box a capo a
       tutta larghezza; flex-direction:column impila una riga per bambino. */
    #bookingPopup .hd-bp-room { flex-wrap: wrap !important; align-items: flex-start !important; }
    #bookingPopup .hd-bp-room .hd-bp-ages {
        flex: 1 1 100% !important;
        width: 100% !important;
        flex-direction: column !important;
        align-items: stretch !important;
        margin-top: 10px !important;
    }
    #bookingPopup .hd-bp-room .hd-bp-age-row { width: 100% !important; }
}

/* Calendar locked state — after check-in/check-out selected */
.inline-calendar.calendar-locked .flatpickr-day:not(.selected):not(.startRange):not(.endRange):not(.inRange) {
    opacity: 0.4;
    cursor: default;
}
.inline-calendar.calendar-locked .flatpickr-day.inRange {
    opacity: 0.7;
}

/* ============================================
   CTA BOTTOM SECTION
   ============================================ */
.cta-bottom-section { background: linear-gradient(135deg, #f8f9fa 0%, #e9ecef 100%); padding: 2.5rem 1rem; margin-top: 2rem; border-top: 1px solid #dee2e6; }

/* Footer — override base.html generic footer styles */
footer.site-footer { margin-top: 0; }

/* Mobile offcanvas styles are in _header.html partial — do NOT duplicate here */

/* ============================================
   WIZARD MODAL
   ============================================ */
#wizardModal .modal-dialog { max-width: 550px; }
#wizardModal .wizard-room-card { border: 1px solid #e0e0e0; border-radius: var(--radius-md); padding: 15px; margin-bottom: 15px; background: white; }
#wizardModal .wizard-room-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 10px; }
#wizardModal .wizard-counter { display: flex; align-items: center; gap: 8px; }
#wizardModal .wizard-counter button { width: 32px; height: 32px; padding: 0; display: flex; align-items: center; justify-content: center; border-radius: 6px; }
#wizardModal .wizard-counter .count { min-width: 30px; text-align: center; font-weight: bold; }
#wizardModal .btn-warning { background: var(--accent); border-color: var(--accent); color: white; }
#wizardModal .btn-warning:hover { background: #e8951e; border-color: #e8951e; }
#wizardModal .btn-warning:disabled { background: #ccc; border-color: #ccc; cursor: not-allowed; opacity: 0.5; }

/* Stepper controls */
.wizard-stepper-row { display: flex; align-items: center; gap: 12px; }
.wizard-stepper-group { flex: 1; }
.wizard-stepper-group label { font-size: 0.8rem; color: #666; margin-bottom: 4px; display: block; }
.stepper-control { display: flex; align-items: center; gap: 0; border: 1px solid #dee2e6; border-radius: var(--radius-sm); overflow: hidden; }
.stepper-control button { width: 44px; height: 44px; border: none; background: #f8f9fa; font-size: 1.1rem; font-weight: 700; color: var(--primary); cursor: pointer; display: flex; align-items: center; justify-content: center; transition: background 0.15s; }
.stepper-control button:hover:not(:disabled) { background: #e9ecef; }
.stepper-control button:disabled { color: #ccc; cursor: not-allowed; }
.stepper-control .stepper-value { min-width: 40px; text-align: center; font-weight: 700; font-size: 1rem; color: var(--primary); }
.wizard-ages-row { display: flex; gap: 8px; flex-wrap: wrap; margin-top: 8px; }
.wizard-ages-row select { width: auto; min-width: 90px; }
.wizard-room-price-estimate { font-size: 0.85rem; color: #666; padding-top: 8px; border-top: 1px solid #f0f0f0; margin-top: 10px; }
.wizard-room-price-estimate .price-value { font-weight: 700; color: var(--accent); }
.wizard-remaining { background: #e3f2fd; border-radius: var(--radius-sm); padding: 10px 14px; font-size: 0.9rem; margin-bottom: 16px; }
.wizard-remaining.all-assigned { background: #e8f5e9; color: #2e7d32; }
.wizard-remaining.has-error { background: #fce4ec; color: #c62828; }

/* Room group cards */
.room-group-card .card-header { background: linear-gradient(135deg, var(--primary) 0%, var(--secondary) 100%); color: white; }
.room-group-card .occupant-display { display: flex; align-items: center; gap: 15px; padding: 10px; background: #f8f9fa; border-radius: var(--radius-sm); margin-bottom: 15px; }
.room-group-card .occupant-item { display: flex; align-items: center; gap: 6px; }
.room-group-card .occupant-count { font-weight: 700; font-size: 1.1rem; color: var(--primary); }
.room-group-card .occupant-label { font-size: 0.9rem; color: #666; }
.btn-remove-room { background: none; border: none; color: rgba(255,255,255,0.7); font-size: 1.2rem; cursor: pointer; padding: 4px 8px; border-radius: 50%; }
.btn-remove-room:hover { color: white; background: rgba(255,255,255,0.15); }

/* Distribution summary */
.distribution-summary { background: #f8f9fa; border: 1px solid #e9ecef; border-radius: var(--radius-md); padding: 14px 18px; margin-bottom: 16px; }
.distribution-summary .room-line { font-size: 0.9rem; color: #555; padding: 2px 0; }

/* ============================================
   RESPONSIVE BREAKPOINTS
   ============================================ */

/* Tablet */
@media (max-width: 768px) {
    .hero-image { height: 380px; }
    .hero-overlay h1 {
        font-size: 1.6rem;
        text-shadow: 2px 2px 10px rgba(0,0,0,0.8);
        /* Long hotel names ("Ischia Experience 4 stelle") were truncated by the
           hero-gallery-btn ("X foto") on iPhone SE. Allow wrapping + reserve
           right-side space so the title and gallery button never overlap. */
        word-break: break-word;
        overflow-wrap: anywhere;
        line-height: 1.15;
        max-width: calc(100% - 96px);
    }
    .hero-subtitle { font-size: 0.8rem; }
    .hero-overlay { padding: 2rem 0 2rem; }
    .booking-main { margin-top: 1rem; }
    .booking-main .text-muted.mb-1 { font-size: 1.1rem !important; text-align: center; }
    .booking-main .d-flex.align-items-center.gap-4.mb-3 { justify-content: center; }
    .booking-main .badge { font-size: 0.95rem !important; padding: 8px 14px !important; }
    .booking-main p.mb-3 { text-align: center; }
    .booking-main .btn-outline-secondary { display: block; margin: 0 auto; width: fit-content; }
    .quick-info-items { gap: 1rem; }
    .quick-info-label { font-size: 0.8rem; }
    .hero-gallery-btn { bottom: 100px; right: 12px; font-size: 0.8rem; padding: 6px 12px; }

    /* Calendar */
    .flatpickr-calendar .flatpickr-months .flatpickr-month { font-size: 18px !important; }
    .flatpickr-calendar .flatpickr-day { font-size: 16px !important; height: 42px !important; line-height: 42px !important; }
    .flatpickr-calendar .flatpickr-weekday { font-size: 14px !important; }

    /* Booking selects */
    #adultsSelect, #childrenSelect { font-size: 13px !important; padding: 0.4rem 0.5rem !important; width: 70px !important; }
    #childAgesInputs select { max-width: 55px !important; font-size: 13px !important; padding: 0.25rem 0.5rem !important; }

    /* Inline calendar mobile */
    .inline-calendar .dayContainer { width: 100% !important; min-width: unset !important; max-width: 100% !important; justify-content: space-around !important; }
    .inline-calendar .flatpickr-innerContainer { gap: 0 !important; flex-direction: column !important; }
    .inline-calendar .flatpickr-weekdaycontainer { justify-content: space-around !important; }
    .inline-calendar .flatpickr-weekday { width: auto !important; max-width: none !important; flex: 1 !important; flex-basis: auto !important; }
    .inline-calendar .flatpickr-current-month { font-size: 1.6rem !important; font-weight: 700 !important; }
    .inline-calendar .flatpickr-weekday { font-size: 0.95rem !important; font-weight: 700 !important; }
    .inline-calendar .flatpickr-day { height: 46px !important; width: 46px !important; max-width: 46px !important; flex-basis: 46px !important; margin: 0px !important; font-size: 1.2rem !important; font-weight: 600 !important; }
    .inline-calendar .flatpickr-day .day-number { font-size: 1.2rem; font-weight: 600; }
    .inline-calendar .flatpickr-day .day-price { font-size: 9px !important; }

    /* iOS auto-zoom prevention */
    select, input[type="text"], input[type="number"], input[type="search"],
    input[type="email"], input[type="tel"], textarea { font-size: 16px !important; }
}

/* Small phone */
@media (max-width: 576px) {
    .amenities-grid { grid-template-columns: repeat(4, 1fr); gap: 8px; }
    .amenity-item { padding: 8px 2px; }
    .amenity-icon { width: 42px; height: 42px; font-size: 1.1rem; border-radius: 12px; }
    .amenity-label { font-size: 0.74rem; }

    /* Gallery v2 mobile */
    .gallery-thumb-featured { height: 160px; }
    .gallery-thumb-v2 { height: 100px; }

    /* Room cards mobile — hide variant/amenity badges, fix badge overlap */
    .room-option-card .room-features { display: none; }
    .room-option-card .room-card-name { font-size: 0.88rem; }
    .room-badge-best { font-size: 0.6rem; padding: 3px 6px; }

    /* Sticky price bar mobile */
    .sticky-price-bar .sticky-price-amount { font-size: 1.5rem; }
    .sticky-price-bar .sticky-price-detail { max-width: 120px; }

    /* Wizard bottom-sheet */
    #wizardModal .modal-dialog { margin: 0; max-width: 100%; min-height: auto; position: fixed; bottom: 0; left: 0; right: 0; transform: translateY(0); }
    #wizardModal .modal-content { border-radius: var(--radius-lg) var(--radius-lg) 0 0; max-height: 85vh; overflow-y: auto; }
    #wizardModal .modal-body { padding: 12px; }
    .wizard-stepper-row { gap: 8px; }
    .stepper-control button { width: 48px; height: 48px; font-size: 1.2rem; }
    .wizard-ages-row select { min-width: 80px; height: 44px; }
    .btn-remove-room { min-width: 44px; min-height: 44px; }

    /* Booking popup bottom-sheet */
    #bookingPopup .modal-dialog { margin: 0; max-width: 100%; position: fixed; bottom: 0; left: 0; right: 0; }
    #bookingPopup .modal-content { border-radius: var(--radius-lg) var(--radius-lg) 0 0; max-height: 90vh; }
    #bookingPopup .modal-header { border-radius: var(--radius-lg) var(--radius-lg) 0 0; }

    /* Quote modal fullscreen on mobile */
    #quoteModal .modal-dialog { margin: 0; max-width: 100%; width: 100%; height: 100dvh; height: 100%; }
    #quoteModal .modal-content { border-radius: 0; height: 100%; border: none; }
    #quoteModal .modal-body { overflow-y: auto; padding: 0.75rem; }
    #quoteModal .modal-header { padding: 0.6rem 0.75rem; }
    #quoteModal .modal-footer { padding: 0.5rem 0.75rem; }
    #quoteModal #quoteMultiRoomRecap .bg-light { padding: 0.5rem 0.65rem !important; }
    #quoteModal #quoteMultiRoomRecap h6 { font-size: 0.8rem; margin-bottom: 0.4rem !important; }
    #quoteModal #quoteRecapLines > div { padding: 0.25rem 0; font-size: 0.82rem; }
    #quoteModal #quoteMultiRoomRecap hr { margin: 0.35rem 0; }
    #quoteModal .form-label { margin-bottom: 0.2rem; font-size: 0.88rem; }
    #quoteModal .mb-3 { margin-bottom: 0.5rem !important; }
    #quoteModal .form-control { padding: 0.35rem 0.6rem; font-size: 0.9rem; }
    #quoteModal textarea.form-control { rows: 2; }
}

/* iOS safe area for fixed bars */
@supports (padding-bottom: env(safe-area-inset-bottom)) {
    .sticky-booking-bar { padding-bottom: calc(12px + env(safe-area-inset-bottom)); }
    .sticky-price-bar { padding-bottom: calc(6px + env(safe-area-inset-bottom)); }
}

/* ============================================
   iOS MOBILE FIXES
   ============================================ */

/* Bottom spacer — prevent footer from being hidden behind sticky bar */
.v2-footer { padding-bottom: 80px; }

/* Suppress iOS tap highlight */
a, button, .option-card, .transport-option, .gallery-thumb, .gallery-thumb-v2 {
    -webkit-tap-highlight-color: transparent;
}

/* iOS momentum scroll inside modals */
.modal-body { -webkit-overflow-scrolling: touch; }

/* Prevent iOS rubber-band overscroll when modal is open */
body.modal-open { overscroll-behavior: none; }

/* Touch targets — ensure minimum 44px for interactive elements on mobile */
@media (max-width: 768px) {
    .option-card { min-height: 44px; }
    .amenities-toggle { min-height: 44px; padding: 10px 16px; }
    .hero-gallery-btn { min-height: 44px; min-width: 44px; display: flex; align-items: center; justify-content: center; }
    .gallery-lightbox .gallery-nav { width: 44px; height: 44px; }
    .gallery-lightbox .btn-close { width: 44px; height: 44px; }
    /* CTA buttons */
    .cta-bottom-section .btn { min-height: 48px; }
}

/* Hide WhatsApp sticky button on hotel detail page */
.whatsapp-sticky { display: none; }

/* Safe area for landscape mode (notch on sides) */
@supports (padding-left: env(safe-area-inset-left)) {
    .sticky-price-bar { padding-left: calc(16px + env(safe-area-inset-left)); padding-right: calc(16px + env(safe-area-inset-right)); }
    .sticky-booking-bar { padding-left: calc(16px + env(safe-area-inset-left)); padding-right: calc(16px + env(safe-area-inset-right)); }
}

/* ============================================
   MOBILE TYPOGRAPHY BOOST (max-width: 767px)
   Applies ONLY to scrollable content — sticky bar excluded by design.
   !important is required where inline styles exist on stay-date elements.
   ============================================ */
@media (max-width: 767px) {
    /* 2026-06-02 owner: la sticky bar mobile NON è più sempre visibile.
       Compare (slide-up) solo quando il box Prenota (.booking-main) esce dallo
       schermo; l'IntersectionObserver gestisce il toggle .hidden. Era forzata
       `transform: none` (sempre visibile) → ora usa l'hide base translateY(100%). */
    .sticky-price-bar.hidden { transform: translateY(100%); }

    /* Label "Il tuo soggiorno" */
    .stay-label { font-size: 12px; }
    /* Date numero (02, 13) — inline style override */
    .stay-date-num { font-size: 32px !important; }
    /* Date mese (/08, /05) — inline style override */
    .stay-date-month { font-size: 17px !important; }
    /* Label Check-in / Check-out */
    .stay-ci-label { font-size: 11px; font-weight: 600; }
    /* Freccia tra date — fs-4 override */
    .stay-arrow { font-size: 22px !important; font-weight: 600; }
    /* Pills "11 notti / 2 adulti" */
    .stay-pill { font-size: 12px !important; padding: 5px 14px !important; }
    /* Bottone "Modifica selezione" */
    .stay-modify-btn { font-size: 12px !important; padding: 7px 18px !important; }
    /* Badge promo long-stay (solo tipografia, colore invariato perché dinamico) */
    .stay-promo-badge { font-size: 12px !important; padding: 6px 14px !important; }
    /* Prezzo grande card */
    .price-big { font-size: 38px; }
    /* Prezzo barrato */
    .price-struck-text { font-size: 14px; }
    /* Badge -X% */
    .badge-discount { font-size: 12px; padding: 3px 10px; }
    /* Prezzo/notte */
    #perNightPrice { font-size: 13px; font-weight: 500; }
    /* Descrizione camera+trattamento nel summary */
    #totalDetails { font-size: 12px; }
    /* Padding card prezzo */
    .summary-box { padding: 1rem; }
}

/* Social proof banner (_social_proof.html) on the hotel scheda must clear the
   fixed bottom sticky bar (.sticky-price-bar / .sticky-booking-bar, z-index
   1060 > sp 1040) so it isn't hidden behind it. Scoped to body.page-hotel-detail
   → search_results and other pages keep the default bottom:80px. */
body.page-hotel-detail .sp-notification { bottom: 100px; }
@media (max-width: 768px) {
    body.page-hotel-detail .sp-notification { bottom: 150px; }
}

/* "Torna ai risultati": nascosto di default su OGNI viewport (mobile E
   desktop); l'IIFE aggiunge .is-visible SOLO con referrer/nav interno
   affidabile. Niente attributo `hidden` (le utility Bootstrap
   `.d-inline-flex{display:inline-flex!important}` lo scavalcavano →
   il bottone risultava sempre visibile). Classe custom = deterministica. */
.back-to-results { display: none !important; }
.back-to-results.is-visible { display: inline-flex !important; }
/* Hero overlay variant: when toggled visible by JS, render as flex
   to keep icon+label aligned inside the absolute-positioned pill. */
.hd-hero-mosaic__back-overlay.back-to-results.is-visible {
    display: inline-flex !important;
}

/* Modal "Modifica selezione" — mese e anno del calendario troppo piccoli
   (16px). Ingranditi per leggibilità su mobile. */
#avesDatesModal .flatpickr-current-month .cur-month,
#avesDatesModal .flatpickr-current-month .flatpickr-monthDropdown-months,
#avesDatesModal .flatpickr-current-month .numInputWrapper .cur-year,
#avesDatesModal .flatpickr-current-month input.cur-year {
    font-size: 1.35rem !important;
    font-weight: 700 !important;
}
#avesDatesModal .flatpickr-current-month {
    padding-top: 6px;
    height: auto;
}
#avesDatesModal .flatpickr-months .flatpickr-month {
    height: 42px;
}

/* ═══════════════════════════════════════════════════════════════════
   PARITÀ SCHEDA AVES — set curato portato da HoEscape a tutti i portali
   (spec agent-os/specs/2026-05-16-1914-aves-detail-infoischia-parity).
   Scope = body.page-hotel-detail-aves → solo aves_hotel_detail.html;
   la scheda nativa hotel_detail.html non ha la classe -aves (bleed
   impossibile). hoescape.css non è toccato: su HoEscape le sue regole
   html[data-portal="offertehoescape"] hanno specificità maggiore e
   vincono se divergono → HoEscape identico per costruzione. Colori via
   var(--*) di :root (hotel-detail.css) → identità InfoIschia mantenuta.
   SKIP #1 (testo bottone), #4 (load hoescape.css), #7b (capitalize).
═══════════════════════════════════════════════════════════════════ */

/* #3 — Badge "N notti" col blu brand var(--primary), non il blu Bootstrap. */
body.page-hotel-detail-aves .badge.hoe-nights-badge {
    background-color: var(--primary);
    color: #ffffff;
}

/* #13 — Box "Gli ospiti adorano…" + chip. */
body.page-hotel-detail-aves .hoe-loved-box h5 {
    color: var(--primary);
    display: flex;
    align-items: center;
}
body.page-hotel-detail-aves .hoe-loved-box h5 .bi-heart-fill {
    color: var(--accent);
}
body.page-hotel-detail-aves .hoe-loved-chip {
    display: inline-flex;
    align-items: center;
    background: var(--light-bg, #f8f9fa);
    color: var(--primary);
    border: 1px solid rgba(30, 60, 114, .15);
    border-radius: 999px;
    padding: 6px 14px;
    font-size: .9rem;
    font-weight: 600;
}
body.page-hotel-detail-aves .hoe-loved-chip .bi {
    color: var(--accent);
}

/* #5/#6/#7/#8 — Hero: titolo a sinistra, stelle SOTTO il nome (mobile+desktop).
   !important per battere le utility Bootstrap (align-items-center gap-3).
   #7b ESCLUSO: niente text-transform:capitalize (rischio doppia maiuscola). */
body.page-hotel-detail-aves .hero-overlay .container {
    text-align: left;
    padding-bottom: 20px;
}
body.page-hotel-detail-aves .hero-title-row {
    flex-direction: column !important;
    align-items: flex-start !important;
    gap: .2rem !important;
}
body.page-hotel-detail-aves .hero-title-row .hotel-name-title {
    text-align: left;
    line-height: 1.15;
    font-size: 2rem;
    text-shadow: 0 2px 6px rgba(0,0,0,.55), 0 1px 16px rgba(0,0,0,.5);
}
@media (min-width: 992px) {
    body.page-hotel-detail-aves .hero-title-row .hotel-name-title {
        font-size: 2.85rem;
    }
}
body.page-hotel-detail-aves .hero-title-row .stars {
    line-height: 1;
    padding-top: 4px;
    text-shadow: 0 1px 4px rgba(0,0,0,.45);
}

/* #14 — Badge "N foto" in basso a destra (era a metà hero). */
body.page-hotel-detail-aves .hero-image .hero-gallery-btn {
    top: auto !important;
    bottom: 20px !important;
}

/* #15 — Slider hero senza pallini/dot. */
body.page-hotel-detail-aves .hero-image .carousel-indicators {
    display: none !important;
}

/* #17 — Barra distanze: icona in accent (la barra base è già portale-neutra). */
body.page-hotel-detail-aves .hotel-distances-bar .hotel-distance-icon i {
    color: var(--accent);
}

/* #16 — "Apri in Google Maps" rimosso (mappa interna sufficiente). */
body.page-hotel-detail-aves .hotel-map-extlink {
    display: none !important;
}

/* #12 — Sticky bar mobile: box compatto, testo grande/forte (stato attuale
   HoEscape). .sticky-price-bar è già solo mobile (hidden >768px). */
body.page-hotel-detail-aves .sticky-price-bar {
    padding-top: 0;
    padding-bottom: 0;
}
/* 2026-05-27 owner: su mobile la sticky-recap (Totale soggiorno per N adulti +
   data + notti + treatment + room) non serve — basta prezzo + Prenota. */
@media (max-width: 991.98px) {
    body.page-hotel-detail-aves .sticky-price-bar .sticky-recap { display: none !important; }
    body.page-hotel-detail-aves .sticky-price-bar .sticky-bottom-row {
        grid-template-columns: 1fr auto !important;
    }
}

/* 2026-05-27 owner: fix overflow card camera AVES — il prezzo a destra
   (text-end flex-shrink-0) usciva 96px fuori dal box su 390px viewport
   perché il badge "PERNOTTAMENTO E PRIMA COLAZIONE" non andava a capo.
   Soluzioni applicate sulla card:
     1. min-width:0 sulla colonna sinistra (pattern Bootstrap per truncation)
     2. flex-wrap sulla riga badge sotto il nome camera
     3. word-break sui badge per testi molto lunghi  */
body.page-hotel-detail-aves .room-option-card .flex-grow-1 {
    min-width: 0;
}
body.page-hotel-detail-aves .room-option-card .flex-grow-1 .mt-1 {
    display: flex;
    flex-wrap: wrap;
    gap: 4px 6px;
}
body.page-hotel-detail-aves .room-option-card .flex-grow-1 .badge {
    white-space: normal;
    word-break: break-word;
    text-align: left;
}
/* 2026-05-27 owner: nome camera lungo (>20 chr) deve wrappare a capo su
   mobile invece di restare clamped su una riga. */
@media (max-width: 575.98px) {
    body.page-hotel-detail-aves .room-option-card .fw-semibold {
        white-space: normal;
        word-break: break-word;
        line-height: 1.25;
    }
    /* 2026-05-27 owner: badge trattamento (PERNOTTAMENTO E PRIMA COLAZIONE,
       MEZZA PENSIONE, ecc.) erano troppo grandi su mobile. */
    body.page-hotel-detail-aves .room-option-card .badge {
        font-size: 0.62rem !important;
        font-weight: 500 !important;
        padding: 0.22em 0.42em !important;
        line-height: 1.2 !important;
    }
    body.page-hotel-detail-aves .room-option-card .badge i {
        font-size: 0.85em !important;
    }
}
body.page-hotel-detail-aves .sticky-price-bar .sticky-bottom-row {
    gap: 10px;
    align-items: center;
}
body.page-hotel-detail-aves .sticky-price-bar .sticky-btn {
    font-size: 18px;
    font-weight: 800;
    padding: 9px 16px;
    line-height: 1.1;
}
body.page-hotel-detail-aves .sticky-price-bar .sticky-price-big,
body.page-hotel-detail-aves .sticky-price-bar .sticky-price-amount {
    font-size: 24px;
    font-weight: 800;
    line-height: 1.05;
}
body.page-hotel-detail-aves .sticky-price-bar a[href^="tel:"] {
    font-size: 18px;
    font-weight: 800;
    line-height: 1.1;
}

/* #9/#10/#11 — Mobile: nascondi duplicati hero + sottotitolo località
   (la località resta nel badge in alto, le distanze nella barra dedicata). */
@media (max-width: 768px) {
    body.page-hotel-detail-aves .hero-subtitle,
    body.page-hotel-detail-aves .hero-subtitle-distance,
    body.page-hotel-detail-aves .quick-info-item--rating,
    body.page-hotel-detail-aves .quick-info-item--stars {
        display: none !important;
    }
}

/* "Verifica disponibilità e prezzi" — CTA blocco senza-date.
   HoEscape stila .no-dates-cta-card via hoescape.css (caricato SOLO per
   offertehoescape) → su InfoIschia il blocco restava piatto (Immagine 1).
   Qui portiamo lo STESSO pannello arrotondato tenue, centrato, anche a
   InfoIschia, ma in palette InfoIschia: titolo var(--primary) navy,
   pulsante pieno var(--accent) arancione. Scoped html:not([data-skin="hoe"])
   → ogni portale hoe-skin (HoEscape, Montagne) resta byte-identico per
   costruzione (comandamento: HoEscape mai regredito). Nessuna regola
   .no-dates-cta-card senza il guard → impossibile il bleed sulla skin hoe. */
html:not([data-skin="hoe"]) body.page-hotel-detail-aves .no-dates-cta-card {
    background: var(--light-bg, #f8f9fa);
    border: 1px solid rgba(30, 60, 114, 0.12);
    border-radius: 16px;
    padding: 32px 24px;
    margin: 24px auto 8px;
    max-width: 760px;
}
html:not([data-skin="hoe"]) body.page-hotel-detail-aves .no-dates-cta-card .no-dates-cta-title {
    font-size: 1.5rem;
    font-weight: 800;
    color: var(--primary, #1e3c72);
}
html:not([data-skin="hoe"]) body.page-hotel-detail-aves .no-dates-cta-card .no-dates-cta-sub {
    font-size: 1rem;
}
html:not([data-skin="hoe"]) body.page-hotel-detail-aves .no-dates-cta-card .no-dates-cta-btn {
    background: var(--accent, #f5a623);
    border: none;
    color: #fff;
    border-radius: 50px;
    padding: 0.85rem 2.25rem;
}
html:not([data-skin="hoe"]) body.page-hotel-detail-aves .no-dates-cta-card .no-dates-cta-btn:hover {
    background: var(--accent-hover, #e09000);
    color: #fff;
    transform: translateY(-2px);
    box-shadow: 0 4px 15px rgba(245, 166, 35, 0.4);
}

/* ============================================================
   Bundle 16 — uniformare promo / camere / trattamenti
   ============================================================
   Box riepilogo principale: scadenza + scarsità sotto il badge.
   Card camere: prezzo barrato + scontato grande arancione.
   Card trattamenti: stesso pattern barrato + scontato.
*/

/* Box riepilogo: righe info promo (scadenza, "ne restano solo X"). */
.promo-summary-line {
    font-size: 0.8rem;
    color: #555;
    margin-top: 4px;
    text-align: center;
    line-height: 1.35;
}

/* Card camera — colonna prezzo desktop+mobile coerente. */
.room-card-price-col {
    flex-shrink: 0;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    align-self: flex-end;   /* 2026-06-06 owner — prezzo allineato in basso nella card */
    gap: 2px;
    min-width: 78px;
}
.room-card-price-struck {
    font-size: 0.85rem;
    color: var(--price-struck, #888);
    text-decoration: line-through;
    line-height: 1;
}
.room-card-price-big {
    font-size: 1.45rem;
    font-weight: 800;
    color: var(--price-amber, #f5a623);
    line-height: 1.05;
}

/* Card trattamento — stesso pattern di room-card-price-col. */
.treatment-price-col {
    /* 2026-05-25 Step T.7 — struck a SINISTRA del big inline (era stacked verticale). */
    display: flex;
    flex-direction: row;
    align-items: baseline;
    justify-content: flex-end;
    gap: 8px;
    min-width: 78px;
}
.treatment-price-struck {
    font-size: 0.85rem;
    color: var(--price-struck, #888);
    text-decoration: line-through;
    line-height: 1;
}
.treatment-price-big {
    font-size: 1.3rem;
    font-weight: 800;
    color: var(--price-amber, #f5a623);
    line-height: 1.05;
}

/* Mobile breakpoint: leggermente più contenuto per non spaccare il layout. */
@media (max-width: 575.98px) {
    .room-card-price-big { font-size: 1.3rem; }
    .treatment-price-big { font-size: 1.15rem; }
    .room-card-price-col,
    .treatment-price-col { min-width: 68px; }
    .promo-summary-line { font-size: 0.78rem; }
}

/* ============================================================
   Native hotel detail — follow-up 6 fix 2026-05-21
   CSS additivo; nessuna regola base modificata.
   ============================================================ */

/* Hero distances inline (Fix #2) — pill bianche su hero scuro,
   visibili da lg in su; .hero-distances-strip esterna gestisce mobile. */
.hero-distances-row {
    align-items: center;
}
.hero-distance-pill {
    display: inline-flex;
    align-items: center;
    background: rgba(255, 255, 255, 0.18);
    color: #fff;
    padding: 4px 12px;
    border-radius: 999px;
    font-size: 0.85rem;
    font-weight: 500;
    backdrop-filter: blur(4px);
    -webkit-backdrop-filter: blur(4px);
    line-height: 1.4;
    white-space: nowrap;
}
.hero-distance-pill i {
    color: #fff;
    opacity: 0.92;
}

/* Modale "Modifica selezione" — sezione ospiti (Fix #5).
   Restyling cosmetico mirato: NESSUN cambio di logica/ID/handler. */
#bookingPopup .guest-selector-card {
    background: var(--light-bg, #f8f9fa);
    border-radius: 12px;
    padding: 16px;
}
#bookingPopup .guest-selector-card label.form-label {
    font-size: 0.7rem;
    letter-spacing: 0.04em;
    text-transform: uppercase;
    color: var(--primary, #1e3c72);
    font-weight: 700;
    margin-bottom: 6px;
}
#bookingPopup .guest-selector-card .form-select {
    border-radius: 8px;
    border-color: #dee2e6;
    font-weight: 500;
}
#bookingPopup .guest-selector-card .form-select:focus {
    border-color: var(--primary, #1e3c72);
    box-shadow: 0 0 0 0.2rem rgba(30, 60, 114, 0.15);
}
#bookingPopup .guest-add-room-btn {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    border-radius: 999px;
    padding: 4px 12px !important;
    font-weight: 600;
    font-size: 0.78rem !important;
    border: 1.5px solid var(--primary, #1e3c72) !important;
    background: transparent !important;
    background-image: none !important;
    color: var(--primary, #1e3c72) !important;
    text-decoration: none;
    box-shadow: none !important;
    transition: background 0.15s, color 0.15s;
}
#bookingPopup .guest-add-room-btn i { font-size: 0.85rem; }
#bookingPopup .guest-add-room-btn:hover,
#bookingPopup .guest-add-room-btn:focus {
    background: var(--primary, #1e3c72) !important;
    background-image: none !important;
    color: #fff !important;
    text-decoration: none;
}
#bookingPopup .guest-room-row {
    position: relative;
    background: #fff;
    border: 1px solid #e9ecef;
    border-radius: 10px;
    padding: 14px 36px 12px 14px;
    margin-bottom: 10px;
}
#bookingPopup .guest-room-row .room-title {
    font-size: 0.78rem;
    font-weight: 700;
    color: var(--primary, #1e3c72);
    letter-spacing: 0.04em;
    text-transform: uppercase;
    margin-bottom: 8px;
}
#bookingPopup .guest-remove-room-btn {
    position: absolute;
    top: 8px;
    right: 8px;
    background: transparent;
    border: none;
    color: #6c757d;
    padding: 4px 6px;
    line-height: 1;
    border-radius: 50%;
    cursor: pointer;
    transition: color 0.15s, background 0.15s;
}
#bookingPopup .guest-remove-room-btn:hover,
#bookingPopup .guest-remove-room-btn:focus {
    color: #dc3545;
    background: rgba(220, 53, 69, 0.08);
    outline: none;
}
#bookingPopup .guest-remove-room-btn i {
    font-size: 1.05rem;
}

/* ============================================================
   Bundle 17 — Promo riepilogo "card peach + chip bianchi"
   ============================================================
   Replica look del mockup owner: prezzo grande + barrato/badge
   + chip bianchi con icone (clock arancione, fire rosso) dentro
   una card peach (#fff5e6). Live countdown (DD HH MM SS) per
   display_mode='countdown'.
*/

.promo-summary-card {
    background: #fff5e6;
    border-radius: 18px;
    padding: 22px 22px 18px;
    margin-top: 8px;
}

.promo-summary-card .price-big {
    text-align: center;
    margin-bottom: 6px;
}

.promo-summary-card .price-disc-row {
    justify-content: center;
    margin-bottom: 12px;
    flex-wrap: wrap;
}

/* Chip bianchi info promo */
.promo-summary-chip {
    background: #fff;
    border-radius: 12px;
    padding: 10px 14px;
    margin-top: 10px;
    display: flex;
    align-items: center;
    gap: 12px;
    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.04);
}

.promo-summary-chip-icon {
    width: 30px;
    height: 30px;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 14px;
    flex-shrink: 0;
    line-height: 1;
}

.promo-summary-chip-icon-clock {
    background: #ffe6c2;
    color: var(--accent, #f5a623);
}

.promo-summary-chip-icon-fire {
    background: #fde4e4;
    color: #d32f2f;
}

.promo-summary-chip-text {
    color: #2a2a2a;
    font-size: 0.92rem;
    font-weight: 500;
    line-height: 1.3;
    flex: 1;
    min-width: 0;
}

/* Countdown live: DD HH MM SS */
.promo-summary-chip-countdown .promo-summary-chip-text {
    display: flex;
    align-items: center;
    gap: 10px;
    flex-wrap: wrap;
}

.promo-cd-label {
    color: #555;
    font-size: 0.85rem;
    font-weight: 500;
}

.promo-cd-segments {
    display: inline-flex;
    gap: 6px;
    align-items: baseline;
}

.promo-cd-seg {
    display: inline-flex;
    align-items: baseline;
    gap: 1px;
    background: #fff7eb;
    padding: 3px 7px;
    border-radius: 6px;
    min-width: 38px;
    justify-content: center;
}

.promo-cd-num {
    font-weight: 800;
    font-size: 0.95rem;
    color: var(--accent, #f5a623);
    font-variant-numeric: tabular-nums;
    line-height: 1.15;
    transition: transform 180ms ease;
    display: inline-block;
}

.promo-cd-num.is-tick {
    /* Pulse al cambio secondo per dare vita al countdown. */
    transform: scale(1.18);
}

.promo-cd-unit {
    font-size: 0.7rem;
    font-weight: 600;
    color: #999;
    margin-left: 1px;
    text-transform: lowercase;
}

/* Stato scaduto: chip rosso "Promo scaduta". */
.promo-summary-chip-countdown.is-expired {
    background: #fde4e4;
}
.promo-summary-chip-countdown.is-expired .promo-cd-label {
    color: #d32f2f;
    font-weight: 600;
}
.promo-summary-chip-countdown.is-expired .promo-cd-segments {
    display: none;
}

/* Mobile tweak: padding e font ridotti. */
@media (max-width: 575.98px) {
    .promo-summary-card {
        padding: 18px 16px 14px;
        border-radius: 16px;
    }
    .promo-summary-chip {
        padding: 9px 11px;
        gap: 10px;
    }
    .promo-summary-chip-text { font-size: 0.86rem; }
    .promo-cd-seg { min-width: 34px; padding: 3px 5px; }
    .promo-cd-num { font-size: 0.88rem; }
    .promo-cd-unit { font-size: 0.66rem; }
    .promo-cd-label { font-size: 0.8rem; }
}

/* ============================================================
   2026-05-21: chip compatti dentro la card peach (allineamento
   al look /cerca screenshot owner). Override scoped per maggiore
   specificità — le regole base sopra restano per altri contesti.
   ============================================================ */
.promo-summary-card .promo-summary-chip {
    padding: 7px 12px;
    gap: 9px;
    margin-top: 8px;
}
.promo-summary-card .promo-summary-chip-icon {
    width: 24px;
    height: 24px;
    font-size: 12px;
}
.promo-summary-card .promo-summary-chip-text {
    font-size: 0.85rem;
    font-weight: 500;
}
@media (max-width: 575.98px) {
    .promo-summary-card .promo-summary-chip {
        padding: 6px 10px;
        gap: 8px;
    }
    .promo-summary-card .promo-summary-chip-icon {
        width: 22px;
        height: 22px;
        font-size: 11px;
    }
    .promo-summary-card .promo-summary-chip-text { font-size: 0.8rem; }
}

/* ============================================================
   2026-05-22: redesign booking-flow utility (Step 2 del 14)
   
   3 nuove utility per il redesign hotel detail booking-flow:
   - .hd-savings-band   (verde, banda risparmio sopra sidebar)
   - .hd-urgency-band   (rossa, countdown o data fissa scadenza promo)
   - .hd-scarcity-chip  (pill rossa, "Restano N camere")
   
   Prefisso .hd- per evitare collisione con .sticky-savings-band
   (CSS legacy, banda topbar full-width sticky promo flash).
   Tokens già definiti come CSS variables nel :root iniziale.
   ============================================================ */

/* — Savings band (verde, sconto risparmio totale) ——————————————— */
.hd-savings-band {
    background: linear-gradient(90deg, #3d8a5e 0%, #2f6b4a 100%);
    color: #fff;
    padding: 10px 18px;
    display: flex;
    align-items: center;
    gap: 8px;
}
.hd-savings-band__icon {
    font-size: 13px;
    line-height: 1;
    flex-shrink: 0;
}
.hd-savings-band__label {
    font-size: 12.5px;
    font-weight: 700;
}
.hd-savings-band__amount {
    margin-left: auto;
    font-weight: 800;
    font-size: 14px;
}

/* — Urgency band (rossa, countdown o data fissa) ——————————————— */
.hd-urgency-band {
    background: linear-gradient(90deg, #8b3a2f 0%, #6b2a22 100%);
    color: #fff;
    padding: 10px 18px;
    display: flex;
    align-items: center;
    gap: 8px;
}
.hd-urgency-band__icon {
    font-size: 13px;
    line-height: 1;
    flex-shrink: 0;
}
.hd-urgency-band__label {
    font-size: 12px;
    font-weight: 700;
    opacity: 0.95;
}
.hd-urgency-band__value {
    margin-left: auto;
    display: inline-flex;
    gap: 4px;
    align-items: center;
}
.hd-urgency-band__digit {
    background: rgba(255,255,255,0.18);
    padding: 2px 6px;
    border-radius: 4px;
    font-family: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
    font-size: 13.5px;
    font-weight: 800;
    min-width: 24px;
    text-align: center;
}
.hd-urgency-band__sep {
    opacity: 0.7;
    font-weight: 700;
}
.hd-urgency-band__date {
    font-family: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
    font-size: 13px;
    font-weight: 700;
}
.hd-urgency-band__time {
    font-family: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
    font-size: 12.5px;
    font-weight: 600;
    opacity: 0.9;
}
.hd-urgency-band__dot {
    opacity: 0.65;
    font-size: 12px;
}
@media (max-width: 768px) {
    .hd-urgency-band {
        padding: 8px 14px;
    }
    .hd-urgency-band__icon {
        font-size: 12px;
    }
    .hd-urgency-band__label {
        font-size: 11px;
    }
    .hd-urgency-band__digit {
        font-size: 12px;
    }
    .hd-urgency-band__date {
        font-size: 12px;
    }
    .hd-urgency-band__time {
        font-size: 11px;
    }
}

/* — Scarcity chip (pill rossa, "Restano N camere") ——————————————— */
.hd-scarcity-chip {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    background: #fff1ed;
    color: #8b3a2f;
    border: 1px solid rgba(139, 58, 47, 0.2);
    padding: 4px 10px;
    border-radius: 999px;
    font-size: 11.5px;
    font-weight: 800;
    letter-spacing: 0.2px;
    line-height: 1.2;
}
.hd-scarcity-chip__icon {
    font-size: 11px;
    line-height: 1;
}
.hd-scarcity-chip--sm {
    padding: 3px 8px;
    font-size: 10.5px;
}
.hd-scarcity-chip--sm .hd-scarcity-chip__icon {
    font-size: 10px;
}

/* ============================================================
   2026-05-22 Step 3 — HeroMosaic (redesign booking-flow)
   
   Sostituisce .hero-image (preservato per portal_use_hoe_skin).
   Layout: title block sopra + grid mosaico 2fr 1fr 1fr × 2 rows,
   1 big photo + 4 thumbnail, 5° con overlay "Mostra tutte N foto".
   max-width 1200px, height 440px, radius 14px, gap 4px.
   ============================================================ */
.hd-hero-mosaic {
    background: #fff;
    padding: 14px 0 0;
}
.hd-hero-mosaic .container {
    max-width: 1440px;
    padding: 0 24px;
}
.hd-hero-mosaic__back-overlay {
    position: absolute;
    left: 14px;
    bottom: 14px;
    background: rgba(0, 0, 0, 0.65);
    color: #fff;
    /* 2026-05-26: rimosso backdrop-filter blur — su iOS Safari rendeva
       blob bianco enorme sovra l'hero (vedi [Image #60] PROD). bg ora
       più opaco per compensare la mancanza di blur. */
    padding: 8px 14px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 600;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    width: auto;
    max-width: max-content;
    height: auto;
    contain: layout;
    border: 1px solid rgba(255, 255, 255, 0.22);
    z-index: 3;
    line-height: 1;
    transition: background .15s ease;
}
.hd-hero-mosaic__back-overlay:hover {
    background: rgba(0, 0, 0, 0.72);
    color: #fff;
}
.hd-hero-mosaic__back-overlay i { font-size: 11px; line-height: 1; }
@media (max-width: 767.98px) {
    .hd-hero-mosaic__back-overlay {
        left: 10px;
        bottom: 10px;
        padding: 6px 12px;
        font-size: 11.5px;
    }
}

.hd-hero-mosaic__title-row {
    display: flex;
    justify-content: space-between;
    align-items: flex-end;
    margin-bottom: 14px;
    gap: 16px;
    flex-wrap: wrap;
}
.hd-hero-mosaic__title-block { flex: 1 1 auto; min-width: 0; }
.hd-hero-mosaic__name {
    margin: 0;
    font-size: 36px;
    font-weight: 800;
    color: #1a2235;
    letter-spacing: -0.7px;
    line-height: 1.1;
}
.hd-hero-mosaic__meta {
    display: flex;
    align-items: center;
    gap: 12px;
    margin-top: 6px;
    flex-wrap: wrap;
}
.hd-hero-mosaic__stars {
    display: inline-flex;
    gap: 2px;
    color: var(--accent, #f5a623);
    font-size: 15px;
    line-height: 1;
}
.hd-hero-mosaic__stars i { line-height: 1; }
.hd-hero-mosaic__address {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 13.5px;
    color: #374151;
    text-decoration: none;
}
.hd-hero-mosaic__address i { color: var(--secondary, #2a5298); font-size: 13px; }

.hd-hero-mosaic__actions {
    display: flex;
    align-items: center;
    gap: 14px;
    flex-shrink: 0;
}
.hd-hero-mosaic__action-btn {
    background: none;
    border: none;
    color: var(--secondary, #2a5298);
    font-size: 12px;
    font-weight: 600;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    padding: 4px 0;
}
.hd-hero-mosaic__action-btn:hover { color: var(--primary, #1e3c72); }
.hd-hero-mosaic__rating-chip {
    display: inline-flex;
    align-items: center;
    gap: 8px;
}
.hd-hero-mosaic__rating-score {
    background: var(--primary, #1e3c72);
    color: #fff;
    font-weight: 800;
    font-size: 15px;
    padding: 6px 12px;
    border-radius: 8px;
    line-height: 1;
}
.hd-hero-mosaic__rating-score small {
    font-size: 9.5px;
    opacity: 0.7;
    font-weight: 600;
}
.hd-hero-mosaic__rating-label {
    font-size: 12px;
    font-weight: 700;
    color: #1a2235;
    line-height: 1.1;
}

/* Grid mosaic 2fr 1fr 1fr × 2 rows */
.hd-hero-mosaic__grid {
    display: grid;
    grid-template-columns: 2fr 1fr 1fr;
    grid-template-rows: 1fr 1fr;
    gap: 4px;
    height: 440px;
    border-radius: 14px;
    overflow: hidden;
    position: relative;
}
.hd-hero-mosaic__cell {
    position: relative;
    overflow: hidden;
    background: #e9ecef;
    text-decoration: none;
}
.hd-hero-mosaic__cell img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
    transition: transform .35s ease;
}
.hd-hero-mosaic__cell:hover img { transform: scale(1.04); }
/* big photo a sinistra: span 2 rows */
.hd-hero-mosaic__cell--1 { grid-column: 1; grid-row: 1 / span 2; }
.hd-hero-mosaic__cell--2 { grid-column: 2; grid-row: 1; }
.hd-hero-mosaic__cell--3 { grid-column: 3; grid-row: 1; }
.hd-hero-mosaic__cell--4 { grid-column: 2; grid-row: 2; }
.hd-hero-mosaic__cell--5 { grid-column: 3; grid-row: 2; }

/* fallback 1 sola immagine */
.hd-hero-mosaic__grid--count-1 .hd-hero-mosaic__cell--1 {
    grid-column: 1 / -1;
    grid-row: 1 / -1;
}
/* 2-4 immagini: best-effort, evita "vuoti" lasciando le celle disponibili */
.hd-hero-mosaic__grid--count-2 .hd-hero-mosaic__cell--1 { grid-column: 1 / 2; grid-row: 1 / span 2; }
.hd-hero-mosaic__grid--count-2 .hd-hero-mosaic__cell--2 { grid-column: 2 / 4; grid-row: 1 / span 2; }
.hd-hero-mosaic__grid--count-3 .hd-hero-mosaic__cell--1 { grid-column: 1; grid-row: 1 / span 2; }
.hd-hero-mosaic__grid--count-3 .hd-hero-mosaic__cell--2 { grid-column: 2 / 4; grid-row: 1; }
.hd-hero-mosaic__grid--count-3 .hd-hero-mosaic__cell--3 { grid-column: 2 / 4; grid-row: 2; }
.hd-hero-mosaic__grid--count-4 .hd-hero-mosaic__cell--1 { grid-column: 1; grid-row: 1 / span 2; }
.hd-hero-mosaic__grid--count-4 .hd-hero-mosaic__cell--2 { grid-column: 2; grid-row: 1; }
.hd-hero-mosaic__grid--count-4 .hd-hero-mosaic__cell--3 { grid-column: 3; grid-row: 1; }
.hd-hero-mosaic__grid--count-4 .hd-hero-mosaic__cell--4 { grid-column: 2 / 4; grid-row: 2; }

.hd-hero-mosaic__more-overlay {
    position: absolute;
    bottom: 12px;
    right: 12px;
    background: #fff;
    color: var(--primary, #1e3c72);
    padding: 8px 14px;
    border-radius: 8px;
    font-size: 12px;
    font-weight: 700;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    box-shadow: 0 4px 12px rgba(0,0,0,0.18);
    pointer-events: none;
}
.hd-hero-mosaic__cell--5 { position: relative; }
.hd-hero-mosaic__cell--5::after {
    content: '';
    position: absolute;
    inset: 0;
    background: rgba(0,0,0,0.35);
    pointer-events: none;
}
.hd-hero-mosaic__cell--5 .hd-hero-mosaic__more-overlay { z-index: 2; }

/* Mobile (< 768px): mosaic collapsa a foto singola full-width + bottone */
@media (max-width: 767.98px) {
    .hd-hero-mosaic { padding: 8px 0 0; }
    .hd-hero-mosaic .container { padding: 0 16px; }
    .hd-hero-mosaic__name { font-size: 26px; letter-spacing: -0.5px; }
    .hd-hero-mosaic__title-row { flex-direction: column; align-items: flex-start; }
    .hd-hero-mosaic__actions {
        width: 100%;
        justify-content: space-between;
        margin-top: 4px;
    }
    .hd-hero-mosaic__action-btn span { display: none; }
    .hd-hero-mosaic__rating-label { display: none; }
    .hd-hero-mosaic__grid {
        grid-template-columns: 1fr !important;
        grid-template-rows: 1fr !important;
        height: 220px;
        border-radius: 10px;
    }
    .hd-hero-mosaic__cell {
        grid-column: 1 / -1 !important;
        grid-row: 1 / -1 !important;
        display: none;
    }
    .hd-hero-mosaic__cell--1 { display: block; }
    .hd-hero-mosaic__more-overlay { bottom: 10px; right: 10px; }
    /* su mobile l'overlay "Mostra tutte" va sulla foto principale */
    .hd-hero-mosaic__cell--1::after {
        content: '';
        position: absolute;
        inset: 0;
        background: linear-gradient(180deg, rgba(0,0,0,0) 50%, rgba(0,0,0,0.35) 100%);
        pointer-events: none;
    }
}

/* ============================================================
   2026-05-22 Step 4 — ModifySelectionBar (statica, scorre col contenuto)

   Compact bar sotto HeroMosaic: date + ospiti + bottone Modifica.
   Owner decision: non-sticky (scrolla via con la pagina).
   ============================================================ */
.hd-modify-bar {
    /* 2026-05-25 Iter 1.C Step P — modify-bar diventa "card" coerente con
       booking-main / pacchetto / trip. Stessa max-width (1440), stessa
       shadow soft, radius pari ai box sottostanti. Niente border-bottom
       a piena pagina (era look "strip"). */
    background: #fff;
    border-radius: var(--radius-lg, 16px);
    box-shadow: 0 8px 30px rgba(30, 60, 114, 0.10);
    border: 1px solid #e9ecef;
    /* 2026-05-25 — 1440px full bleed coerente con photo gallery e box
       booking / pacchetto / trip (tutti portati a 1440 con padding 0). */
    margin: 18px auto 0;
    max-width: 1440px;
}
.hd-modify-bar__inner {
    /* outer ora ha max-width 1416 → inner non duplica il vincolo. */
    margin: 0;
    padding: 12px 24px;
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
}
.hd-modify-bar__group {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 13px;
    color: #374151;
}
.hd-modify-bar__icon {
    color: var(--secondary, #2a5298);
    font-size: 14px;
    line-height: 1;
}
.hd-modify-bar__dates {
    font-weight: 700;
    color: #1a2235;
    font-size: 15px;
}
.hd-modify-bar__nights-pill {
    background: #f8f9fa;
    color: #374151;
    padding: 2px 8px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 700;
}
.hd-modify-bar__divider {
    width: 1px;
    height: 24px;
    background: #e9ecef;
    flex-shrink: 0;
}
.hd-modify-bar__guests-primary {
    font-weight: 700;
    color: #1a2235;
    font-size: 15px;
}
.hd-modify-bar__guests-secondary {
    color: #6b7280;
    font-size: 15px;
}
.hd-modify-bar__edit-btn {
    margin-left: auto;
    background: none;
    color: var(--primary, #1e3c72);
    border: 1px solid var(--primary, #1e3c72);
    padding: 6px 14px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 700;
    cursor: pointer;
    line-height: 1.4;
    transition: all .15s ease;
    white-space: nowrap;
}
.hd-modify-bar__edit-btn:hover {
    background: var(--primary, #1e3c72);
    color: #fff;
}
@media (max-width: 767.98px) {
    .hd-modify-bar__inner {
        padding: 10px 16px;
        gap: 10px;
    }
    .hd-modify-bar__group {
        font-size: 12.5px;
        gap: 6px;
    }
    .hd-modify-bar__divider { display: none; }
    .hd-modify-bar__edit-btn {
        margin-left: 0;
        width: 100%;
        order: 99;
        padding: 8px 14px;
    }
    .hd-modify-bar__guests-secondary { display: none; }
}

/* (rimosso override body overflow — era per sticky, ora bar non-sticky) */

/* ============================================================
   2026-05-22 Step 5 — GuestsLoveBar (chip-grid ambra)
   
   Sostituisce la lista bullet legacy. Sfondo peach gradient,
   icone circolari ambra 28px, testo bold 12.5px.
   Grid auto-fit per 1-5+ booking_reasons.
   ============================================================ */
.hd-guests-love {
    background: linear-gradient(135deg, #fdf8f0 0%, #fff7eb 100%);
    border: 1px solid rgba(245, 166, 35, 0.20);
    border-radius: 14px;
    padding: 16px 18px;
    margin-bottom: 22px;
}
.hd-guests-love__header {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 12px;
}
.hd-guests-love__heart {
    color: var(--price-amber, #e08b1a);
    font-size: 14px;
    line-height: 1;
}
.hd-guests-love__title {
    margin: 0;
    font-size: 14px;
    font-weight: 800;
    color: var(--price-amber, #e08b1a);
    letter-spacing: 0.3px;
    text-transform: uppercase;
    line-height: 1.2;
}
.hd-guests-love__grid {
    display: grid;
    /* 2026-06-06 owner: ogni voce stesso spazio a prescindere dai caratteri →
       colonne a larghezza uguale (4 su desktop, 2 sotto i 768px). */
    grid-template-columns: repeat(4, 1fr);
    gap: 14px;
}
@media (max-width: 767.98px) {
    .hd-guests-love__grid { grid-template-columns: repeat(2, 1fr); }
}
.hd-guests-love__item {
    display: flex;
    align-items: center;  /* spunta verde inline-aligned col text, no più top-anchored */
    gap: 8px;
    line-height: 1.3;
}
.hd-guests-love__icon {
    align-self: center;
    flex-shrink: 0;
}
.hd-guests-love__icon {
    /* Iter 1.B owner feedback: no più cerchio amber, solo spunta verde inline. */
    width: auto;
    height: auto;
    border-radius: 0;
    background: transparent;
    border: none;
    color: #3d8a5e;  /* greenBest (bundle II.greenBest) */
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    font-size: 16px;
    font-weight: 700;
}
.hd-guests-love__icon i { line-height: 1; }
.hd-guests-love__text {
    font-size: 14px;
    font-weight: 600;
    color: #1a2235;
    line-height: 1.3;
    align-self: center;
}
@media (max-width: 575.98px) {
    .hd-guests-love {
        padding: 14px 14px;
        border-radius: 12px;
    }
    .hd-guests-love__grid {
        grid-template-columns: repeat(2, 1fr);
        gap: 10px;
    }
    .hd-guests-love__text { font-size: 13.5px; }
}

/* ============================================================
   2026-05-22 Step 6-10+13 — Redesign batch (CSS-veneer)
   
   Restyle esistente .summary-box, .room-card-*, .sticky-bottom-row
   senza toccare markup. Aggiunge save band + urgency band via
   nuovi gate Jinja (template addition minimo).
   ============================================================ */

/* Sidebar prezzo (.booking-main + .summary-box) — booking-style */
.booking-main .summary-box {
    border-radius: 16px;
    overflow: hidden;
    box-shadow: 0 8px 30px rgba(30, 60, 114, 0.10);
    border: 1px solid #e9ecef;
    padding: 0 !important;
    background: #fff;
}
.booking-main .summary-box > * { padding-left: 18px; padding-right: 18px; }
.booking-main .summary-box .hd-savings-band,
.booking-main .summary-box .hd-urgency-band { padding-left: 18px; padding-right: 18px; margin: 0 -18px; }
.booking-main .promo-summary-card { padding-top: 18px; }
.booking-main .price-big { font-size: 2.5rem !important; font-weight: 800 !important; color: var(--price-amber, #e08b1a) !important; line-height: var(--lh-tight) !important; letter-spacing: -1px; }
.booking-main .price-struck-text { color: var(--price-struck, #8b3a2f) !important; font-weight: 600; }
.booking-main .promo-disc-badge {
    background: var(--price-struck, #8b3a2f);
    color: #fff !important;
    border-radius: 999px !important;
    padding: 4px 10px !important;
    font-size: 11px !important;
    font-weight: 800 !important;
}

/* Room picker cards — versione pulita senza thumbnail/features
   (non rimuoviamo il markup, ridimensioniamo la thumb per non
   sprecare spazio e diamo focus al nome+prezzo) */
.room-card-thumb {
    width: 64px !important;
    height: 64px !important;
    border-radius: 8px !important;
}
.room-card-name {
    font-size: 15px;
    font-weight: 700;
    color: #1a2235;
    letter-spacing: -0.2px;
}
/* 2026-06-06 owner — badge "Spiaggia inclusa" (pacchetto cond di periodo) accanto al titolo
   "Scegli la tua camera" (desktop + mobile). Popolato via JS dal cond del 1° card camera;
   :empty → nascosto finché il JS non lo riempie. */
.hd-beach-badge {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    vertical-align: middle;
    margin-left: 10px;
    background: #fff;
    border: 1.5px solid var(--primary, #1e3c72);
    border-radius: 999px;
    padding: 3px 15px 3px 4px;
    white-space: nowrap;
    box-shadow: 0 1px 3px rgba(30, 60, 114, 0.12);
}
.hd-beach-badge__icon {
    flex: 0 0 26px;
    width: 26px;
    height: 26px;
    border-radius: 7px;   /* quadrato arrotondato (squircle), non cerchio */
    background: var(--accent, #f5a623);
    display: grid;
    place-items: center;
    color: #fff;
}
.hd-beach-badge__icon i { font-size: 13px; line-height: 1; }
.hd-beach-badge__txt { display: flex; flex-direction: column; line-height: 1.06; text-align: left; }
.hd-beach-badge__main { font-size: 12px; font-weight: 800; color: var(--primary, #1e3c72); letter-spacing: 0.2px; }
.hd-beach-badge__sub { font-size: 8.5px; font-weight: 800; letter-spacing: 0.7px; text-transform: uppercase; color: var(--accent, #f5a623); }
.hd-beach-badge:empty { display: none !important; }
/* Box riepilogo (booking col + clone dock): SOLO il titolo del pacchetto extra periodo (testo, no badge). */
.hd-summary-extra { display: flex; align-items: center; gap: 8px; margin: 10px 0 2px; font-size: 13px; font-weight: 700; color: var(--primary, #1e3c72); }
.hd-summary-extra i { color: var(--accent, #f5a623); font-size: 15px; line-height: 1; }
.hd-summary-extra:empty { display: none !important; }
.room-card-price-big {
    font-size: 1.5rem !important;
    font-weight: 800 !important;
    color: var(--price-amber, #e08b1a) !important;
    line-height: 1.1;
}
.room-card-price-struck {
    color: var(--price-struck, #8b3a2f);
    font-size: 0.85rem;
    font-weight: 600;
}

/* Mobile sticky bottom bar — colori nuovi */
.sticky-price-big { color: var(--price-amber, #e08b1a) !important; font-weight: 800; }
.sticky-price-struck { color: var(--price-struck, #8b3a2f); }
.sticky-btn {
    background: linear-gradient(135deg, var(--accent, #f5a623) 0%, var(--accent-hover, #d98f0e) 100%) !important;
    border: none !important;
    border-radius: 12px !important;
    font-weight: 800 !important;
    padding: 12px 24px !important;
    box-shadow: 0 4px 14px rgba(245, 166, 35, 0.45) !important;
}

/* Treatment picker radio — restyle */
.treatment-picker-radio,
.treatment-card,
.treatment-option {
    border-radius: 10px;
}
.treatment-card.active,
.treatment-option.active {
    background: var(--card-selected-bg, #fdf8f0);
    border-color: var(--accent, #f5a623) !important;
}

/* PriceSummarySidebar wrappers per top savings band */
.booking-main .summary-pre-band {
    margin: 0 -18px;
}

/* GuestsLoveBar dentro col-12 — assicura full width */
.col-12 .hd-guests-love { margin-left: 0; margin-right: 0; }

/* ============================================================
   2026-05-22 Step 11/12/14 — Modali + browse no-date restyle
   
   CSS-veneer su modali esistenti (#bookingPopup, #packageModal,
   #galleryLightbox) + suggestion-card della sidebar browse.
   Niente refactor markup: solo restyle look.
   ============================================================ */

/* — Modal chrome unificato (tutti i modali principali) ——————— */
#bookingPopup .modal-content,
#packageModal .modal-content,
#quoteModal .modal-content,
#wizardModal .modal-content {
    border-radius: 16px;
    border: none;
    box-shadow: 0 20px 60px rgba(30, 60, 114, 0.20);
    overflow: hidden;
}
#bookingPopup .modal-header,
#packageModal .modal-header,
#quoteModal .modal-header,
#wizardModal .modal-header {
    background: linear-gradient(135deg, var(--primary, #1e3c72) 0%, var(--secondary, #2a5298) 100%);
    color: #fff;
    border-bottom: none;
    padding: 18px 24px;
}
#bookingPopup .modal-header .modal-title,
#packageModal .modal-header .modal-title,
#quoteModal .modal-header .modal-title,
#wizardModal .modal-header .modal-title {
    font-weight: 800;
    letter-spacing: -0.3px;
}
#bookingPopup .modal-header .btn-close,
#packageModal .modal-header .btn-close,
#quoteModal .modal-header .btn-close,
#wizardModal .modal-header .btn-close {
    filter: brightness(0) invert(1);
    opacity: 0.9;
}
#bookingPopup .modal-body,
#packageModal .modal-body,
#quoteModal .modal-body,
#wizardModal .modal-body {
    padding: 22px 24px;
}
#bookingPopup .modal-footer,
#packageModal .modal-footer,
#quoteModal .modal-footer,
#wizardModal .modal-footer {
    border-top: 1px solid #e9ecef;
    padding: 16px 24px;
    background: #f8f9fa;
}

/* Modal calendar (#bookingPopup) — restyle date selector */
#bookingPopup .selected-dates-display,
#bookingPopup #selectedDatesDisplay {
    background: #fdf8f0;
    border: 1px solid rgba(245, 166, 35, 0.25);
    border-radius: 12px;
    padding: 12px 16px;
    color: #1a2235;
    font-weight: 700;
}

/* Multi-room modal editor (#modalRoomGroupsEditor) — restyle */
#modalRoomGroupsEditor .guest-selector-card,
.guest-selector-card {
    /* 2026-05-25 Step T.7 — calendario modal compatto: padding ridotto. */
    border-radius: 12px !important;
    border: 1px solid #e9ecef !important;
    background: #fff;
    padding: 12px 14px !important;
}
.guest-selector-card .row.g-3 {
    --bs-gutter-y: 0;
}
.guest-selector-card .form-label.small {
    font-size: 10.5px !important;
    margin-bottom: 2px !important;
    letter-spacing: 0.4px;
    text-transform: uppercase;
    color: #6b7280;
}
.guest-selector-card .form-select {
    padding: 4px 26px 4px 10px !important;
    font-size: 13px !important;
    height: auto !important;
    min-height: 30px;
}
.guest-selector-card .mt-3 {
    margin-top: 8px !important;
}
.guest-selector-card .guest-add-room-btn {
    padding: 6px 14px !important;
    font-size: 12.5px !important;
}
.guest-selector-card .room-title {
    font-weight: 700;
    color: #1a2235;
    font-size: 14px;
}
.guest-add-room-btn {
    background: linear-gradient(135deg, var(--accent, #f5a623) 0%, var(--accent-hover, #d98f0e) 100%) !important;
    border: none !important;
    border-radius: 12px !important;
    color: #fff !important;
    font-weight: 700 !important;
    padding: 10px 20px !important;
    box-shadow: 0 4px 14px rgba(245, 166, 35, 0.35) !important;
}
.guest-remove-room-btn {
    color: var(--price-struck, #8b3a2f) !important;
    background: none !important;
    border: none !important;
}

/* Step 14 — sidebar suggestion (browse no-date) restyle */
.booking-main .suggestion-card,
.stay-dates-card {
    background: linear-gradient(135deg, #fdf8f0 0%, #fff7eb 100%);
    border: 1px solid rgba(245, 166, 35, 0.20);
    border-radius: 14px;
    padding: 18px 16px;
}
.stay-date-num {
    color: var(--primary, #1e3c72) !important;
    letter-spacing: -1px;
}
.stay-pill {
    background: #fff !important;
    color: var(--primary, #1e3c72) !important;
    border: 1px solid #e9ecef !important;
    border-radius: 999px !important;
    padding: 4px 10px !important;
    font-size: 11px !important;
    font-weight: 700 !important;
}

/* PromoExpiryBand auto-show: posiziona sotto savings band se entrambe presenti */
.hd-savings-band + .hd-urgency-band { margin-top: 0; }

/* Fix: sticky bottom bar mobile, prevent overlay on modify-bar */
@media (max-width: 991.98px) {
    .sticky-bottom-row { box-shadow: 0 -4px 14px rgba(0,0,0,0.12) !important; }
}

/* Bottoni CTA principali (Prenota ora) — unificati */
.btn-book,
.btn-book-now,
#bookNowBtn,
.startDirectBooking,
.startBookingBtn {
    background: linear-gradient(135deg, var(--accent, #f5a623) 0%, var(--accent-hover, #d98f0e) 100%) !important;
    border: none !important;
    color: #fff !important;
    font-weight: 800 !important;
    padding: 12px 24px !important;
    border-radius: 12px !important;
    box-shadow: 0 4px 14px rgba(245, 166, 35, 0.45) !important;
    transition: all .2s ease !important;
}
.btn-book:hover,
.btn-book-now:hover,
#bookNowBtn:hover {
    transform: translateY(-1px);
    box-shadow: 0 6px 20px rgba(245, 166, 35, 0.55) !important;
}

/* ============================================================
   2026-05-22 Step 6+7+8 CSS final — picker cleanup + accordion
   ============================================================ */

/* Step 6 — Room cards puliti: niente features chips (design "booking flow"
   mostra solo nome + prezzo, no clutter). 2026-05-25 Step T.5: ripristinata
   visibilità thumbnail + pill "Vedi foto" per le camere con foto. */
.room-features {
    display: none !important;
}
.room-badge-best {
    display: none !important;
}
.room-card-name {
    font-size: 16px !important;
    font-weight: 700 !important;
    color: #1a2235;
    letter-spacing: -0.2px;
}

/* Step 7 — Treatment picker pulito (niente delta sui treatment) */
.treatment-delta,
[class*="treatment-delta"],
.treat-delta {
    display: none !important;
}

/* Step 8 — Pacchetto Incluso accordion booking-style */
.hd-package-card,
.hd-trip-card {
    background: #fff;
    border: 1px solid #e9ecef;
    border-radius: var(--radius-lg, 16px);
    /* 2026-05-25 Iter 1.C Step P — shadow coerente con booking-main +
       modify-bar (richiesto per uniformità visiva tra i box). */
    box-shadow: 0 8px 30px rgba(30, 60, 114, 0.10);
    padding: 16px 18px;
    margin-bottom: 12px;
}
.hd-package-card__header,
.hd-trip-card__header {
    display: flex;
    align-items: center;
    gap: 10px;
    cursor: pointer;
    user-select: none;
}
.hd-package-card__icon-wrap {
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: linear-gradient(135deg, var(--primary, #1e3c72) 0%, var(--secondary, #2a5298) 100%);
    color: #fff;
    display: flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    font-size: 16px;
}
.hd-trip-card__icon-wrap {
    background: linear-gradient(135deg, #fdf8f0 0%, #fff7eb 100%);
    color: var(--price-amber, #e08b1a);
    border: 1.5px solid var(--accent, #f5a623);
}
.hd-package-card__title,
.hd-trip-card__title {
    flex: 1;
    font-size: 15px;
    font-weight: 800;
    color: #1a2235;
    margin: 0;
    line-height: 1.2;
}
.hd-package-card__subtitle,
.hd-trip-card__subtitle {
    font-size: 12px;
    color: #6b7280;
    margin-top: 2px;
}
.hd-package-card__chev,
.hd-trip-card__chev {
    color: var(--secondary, #2a5298);
    transition: transform .2s ease;
    font-size: 12px;
}
.hd-package-card__chev.is-open,
.hd-trip-card__chev.is-open {
    transform: rotate(180deg);
}
.hd-package-card__body {
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid #f1f3f5;
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 10px 18px;
}
.hd-package-card__item {
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 13px;
    color: #374151;
}
.hd-package-card__item i {
    color: var(--primary, #1e3c72);
    font-size: 14px;
}

/* Step 14 — CercaPrezzoSidebar (no-date) */
.hd-cerca-prezzo-widget {
    background: #fff;
    border: 1px solid #e9ecef;
    border-radius: 16px;
    padding: 22px 20px;
    box-shadow: 0 8px 30px rgba(30, 60, 114, 0.10);
}
.hd-cerca-prezzo-widget__title {
    font-size: 16px;
    font-weight: 800;
    color: #1a2235;
    margin: 0 0 6px;
}
.hd-cerca-prezzo-widget__subtitle {
    font-size: 12.5px;
    color: #6b7280;
    margin-bottom: 16px;
}
.hd-cerca-prezzo-widget__cta {
    width: 100%;
    background: linear-gradient(135deg, var(--accent, #f5a623) 0%, var(--accent-hover, #d98f0e) 100%);
    color: #fff;
    border: none;
    font-weight: 800;
    padding: 12px;
    border-radius: 12px;
    box-shadow: 0 4px 14px rgba(245, 166, 35, 0.45);
    margin-top: 12px;
}
.hd-cerca-prezzo-widget__suggestion {
    margin-top: 16px;
    padding: 12px;
    background: #fdf8f0;
    border-radius: 10px;
    border: 1px solid rgba(245, 166, 35, 0.20);
    text-align: center;
    font-size: 12.5px;
    color: #374151;
}
.hd-cerca-prezzo-widget__suggestion-title {
    font-weight: 700;
    color: var(--price-amber, #e08b1a);
    text-transform: uppercase;
    font-size: 11px;
    letter-spacing: 0.4px;
    margin-bottom: 4px;
}

/* Step 13 — Urgency band hookup nella sidebar */
.summary-box .hd-urgency-band {
    margin: 0 -18px;
}

/* Step 8 — chevron rotate sul Bootstrap collapse show/hide */
.hd-package-card__header[aria-expanded="false"] .hd-package-card__chev,
.hd-trip-card__header[aria-expanded="false"] .hd-package-card__chev { transform: rotate(0deg); }
.hd-package-card__header[aria-expanded="true"] .hd-package-card__chev,
.hd-trip-card__header[aria-expanded="true"] .hd-package-card__chev { transform: rotate(180deg); }

/* ============================================================
   2026-05-22 Block 2 — RoomPicker + PriceSummarySidebar refactor
   
   CSS aggressivo che traduce booking-flow.jsx RoomPicker e
   PriceSummarySidebar nello styling del template legacy.
   ============================================================ */

/* RoomPicker — card camera compatte 3-col booking-flow */
.option-card.room-option-card {
    background: #fff !important;
    border: 1.5px solid #e9ecef !important;
    border-radius: 12px !important;
    padding: 14px 16px !important;
    margin-bottom: 10px !important;
    cursor: pointer !important;
    transition: all .15s ease !important;
    position: relative;
}
.option-card.room-option-card:hover {
    border-color: var(--accent, #f5a623) !important;
    background: #fffdf8 !important;
}
.option-card.room-option-card.selected {
    background: var(--card-selected-bg, #fdf8f0) !important;
    border-color: var(--accent, #f5a623) !important;
    box-shadow: 0 0 0 3px rgba(245, 166, 35, 0.15) !important;
}
.option-card.room-option-card .room-card-name {
    font-size: 16px !important;
    font-weight: 700 !important;
    color: #1a2235 !important;
    letter-spacing: -0.2px !important;
}
.option-card.room-option-card .room-card-price-big {
    font-size: 1.6rem !important;
    font-weight: 800 !important;
    color: var(--price-amber, #e08b1a) !important;
    line-height: 1.1 !important;
}
.option-card.room-option-card .badge.bg-warning {
    background: #fff7eb !important;
    color: var(--price-amber, #e08b1a) !important;
    border: 1px solid rgba(245,166,35,.35);
    font-size: 10.5px !important;
    font-weight: 700 !important;
    padding: 3px 8px !important;
    border-radius: 999px !important;
}

/* PriceSummarySidebar — sidebar prezzo completa booking-flow */
.booking-main .summary-box {
    padding: 0 !important;
    overflow: hidden;
    background: #fff;
}
.booking-main .summary-box > *:not(.hd-savings-band):not(.hd-urgency-band) {
    padding-left: 18px !important;
    padding-right: 18px !important;
}
.booking-main .summary-box .promo-summary-card {
    background: transparent !important;
    border: none !important;
    box-shadow: none !important;
    padding: 16px 18px 8px !important;
    margin: 0 !important;
}
.booking-main .summary-box .price-big {
    font-size: 2.6rem !important;
    font-weight: 800 !important;
    color: var(--price-amber, #e08b1a) !important;
    line-height: 1 !important;
    letter-spacing: -1.2px;
    text-align: center;
}
.booking-main .summary-box .price-disc-row {
    justify-content: center !important;
    align-items: center !important;
    gap: 12px !important;
    margin-top: 8px !important;
}
.booking-main .summary-box .price-struck-text {
    color: var(--price-struck, #8b3a2f) !important;
    font-size: 1.05rem !important;
    font-weight: 600 !important;
    text-decoration: line-through;
}
.booking-main .summary-box .promo-disc-badge {
    background: var(--price-struck, #8b3a2f) !important;
    color: #fff !important;
    border-radius: 999px !important;
    padding: 4px 11px !important;
    font-size: 11.5px !important;
    font-weight: 800 !important;
    letter-spacing: 0.2px;
}

/* Caption "Prezzo per..." sotto il price-big */
.booking-main .summary-box-meta {
    text-align: center;
    font-size: 12.5px;
    color: #6b7280;
    margin-top: 4px;
    margin-bottom: 12px;
}

/* CTA principale "Prenota" gradient amber */
.cta-direct-booking-btn,
#directBookingBtn {
    background: linear-gradient(135deg, var(--accent, #f5a623) 0%, var(--accent-hover, #d98f0e) 100%) !important;
    color: #fff !important;
    border: none !important;
    font-weight: 800 !important;
    border-radius: 12px !important;
    padding: 14px 24px !important;
    box-shadow: 0 6px 18px rgba(245, 166, 35, 0.45) !important;
    transition: all .2s ease !important;
}
.cta-direct-booking-btn:hover,
#directBookingBtn:hover {
    transform: translateY(-1px);
    box-shadow: 0 8px 22px rgba(245, 166, 35, 0.55) !important;
}

/* Pulsanti secondari WA/Phone (più puliti) */
.cta-contact-btn {
    border-radius: 12px !important;
    font-weight: 700 !important;
    padding: 12px 18px !important;
    border: 1px solid #e9ecef !important;
    transition: all .15s ease !important;
}
.cta-main-btn {
    border-radius: 12px !important;
    font-weight: 700 !important;
    border: 1.5px solid var(--primary, #1e3c72) !important;
    color: var(--primary, #1e3c72) !important;
}

/* "Conferma entro X" + "Restano N camere" già stylized via .hd-urgency-band + .hd-scarcity-chip */

/* Spacing booking-main / summary-box riepilogo */
.booking-main .summary-box .alert {
    margin: 0 18px 12px !important;
    border-radius: 10px !important;
}

/* ============================================================
   2026-05-22 Block 3 — Descrizione + Reviews + Browse refactor
   ============================================================ */

/* Descrizione section + Info cards generic */
.description-section,
.info-card {
    background: #fff !important;
    border: 1px solid #e9ecef !important;
    border-radius: 14px !important;
    padding: 18px 20px !important;
    margin-bottom: 16px !important;
    /* 2026-05-25 Step T.9 — shadow uniforme con tutti gli altri box
       (modify-bar / booking-main / trip / package). */
    box-shadow: 0 8px 30px rgba(30, 60, 114, 0.10) !important;
}
.description-section h5,
.info-card h5,
.info-card h6 {
    font-weight: 800 !important;
    color: #1a2235 !important;
    letter-spacing: -0.3px !important;
    margin-bottom: 12px !important;
}
.hotel-description {
    font-size: 14.5px;
    color: #374151;
    line-height: 1.6;
}
.description-toggle {
    background: none !important;
    border: none !important;
    color: var(--secondary, #2a5298) !important;
    font-weight: 700 !important;
    padding: 6px 0 !important;
    margin-top: 8px !important;
}
.description-toggle:hover {
    color: var(--primary, #1e3c72) !important;
}

/* Reviews block — card pulite stile booking-flow */
.review-card,
[class*="review-item"],
.testimonial-card {
    background: #fff !important;
    border: 1px solid #e9ecef !important;
    border-radius: 12px !important;
    padding: 16px 18px !important;
    margin-bottom: 12px !important;
}
.review-author,
.review-name {
    font-weight: 800 !important;
    color: #1a2235 !important;
    font-size: 14px !important;
}
.review-date {
    color: #6b7280 !important;
    font-size: 12px !important;
}
.review-score-chip,
[class*="review-score"] {
    background: var(--primary, #1e3c72) !important;
    color: #fff !important;
    border-radius: 8px !important;
    padding: 4px 9px !important;
    font-size: 12px !important;
    font-weight: 800 !important;
}
.review-title {
    font-weight: 700 !important;
    color: #1a2235 !important;
    margin-top: 8px !important;
    font-size: 14px !important;
}
.review-text {
    color: #374151 !important;
    font-size: 13.5px !important;
    line-height: 1.5 !important;
    margin-top: 6px !important;
}

/* Browse no-date sidebar — widget Cerca prezzo */
.suggestion-card,
.stay-dates-card,
.booking-main .text-center[style*="suggestion"] {
    background: linear-gradient(135deg, #fdf8f0 0%, #fff7eb 100%) !important;
    border: 1px solid rgba(245, 166, 35, 0.25) !important;
    border-radius: 14px !important;
    padding: 18px 16px !important;
}
.stay-date-num {
    color: var(--primary, #1e3c72) !important;
    font-weight: 800 !important;
    letter-spacing: -1px !important;
}
.stay-date-month {
    color: var(--secondary, #2a5298) !important;
    font-weight: 600 !important;
}
.stay-pill {
    background: #fff !important;
    color: var(--primary, #1e3c72) !important;
    border: 1px solid rgba(245,166,35,.30) !important;
    border-radius: 999px !important;
    padding: 4px 12px !important;
    font-size: 11.5px !important;
    font-weight: 700 !important;
    margin-right: 6px !important;
}

/* Services grid (col-lg-4 sidebar mappa) restyle */
.services-grid,
.amenities-grid {
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
    gap: 10px;
}
.service-item,
.amenity-item,
[class*="amenity-chip"] {
    background: #fff;
    border: 1px solid #e9ecef;
    border-radius: 10px;
    padding: 10px 12px;
    font-size: 13px;
    display: flex;
    align-items: center;
    gap: 8px;
    color: #374151;
}
.service-item i,
.amenity-item i {
    color: var(--secondary, #2a5298);
    font-size: 16px;
}

/* Map block */
.map-block,
[id^="hotelMap"] {
    border-radius: 14px !important;
    overflow: hidden;
}

/* Per-night box restyle */
#perNightPrice {
    color: #6b7280 !important;
    font-size: 12.5px !important;
    margin-top: 8px !important;
}

/* Section spacing globali nella col-12/col-lg-8 (descrizione) */
.col-lg-8 > .info-card,
.col-lg-8 > .description-section,
.col-12 > .info-card,
.col-12 > .description-section {
    margin-bottom: 14px !important;
}

/* Alert info (date ottimizzate, ecc.) restyle */
.alert.alert-warning {
    background: #fff7eb !important;
    border: 1px solid rgba(245, 166, 35, 0.30) !important;
    color: var(--price-amber, #e08b1a) !important;
    border-radius: 10px !important;
}
.alert.alert-info {
    background: #eef4ff !important;
    border: 1px solid rgba(42, 82, 152, 0.20) !important;
    color: var(--primary, #1e3c72) !important;
    border-radius: 10px !important;
}

/* Hero distance pills (le pill bianche sopra hero) — già definite,
   ma harden per non-glass se non c'è bg foto sopra */


/* ──────────────────────────────────────────────────────────────────────
   Hotel Detail 2026 — Bundle handoff alignment (Iter 1, 2026-05-25)
   ────────────────────────────────────────────────────────────────────── */

/* SavingsBanner (Delta #3) — Bundle: components/blocks.jsx:SavingsBanner.
   Gradient blu navy→secondary→3a78c9, sparkle icon round, pill bianca
   con -X%. Variants: --mobile (compact, sticky-cta sibling), --desktop
   (sidebar). Mai verde — convenzione esplicita README handoff. */
.hd-savings-banner {
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    gap: 10px;
    color: #fff;
    background: linear-gradient(95deg, var(--primary, #1e3c72) 0%, var(--secondary, #2a5298) 55%, #3a78c9 100%);
}
.hd-savings-banner__sheen {
    position: absolute;
    inset: 0;
    background:
        radial-gradient(60% 100% at 110% 50%, rgba(255, 255, 255, 0.18), transparent 60%),
        radial-gradient(40% 100% at -10% 50%, rgba(255, 255, 255, 0.10), transparent 60%);
    pointer-events: none;
}
.hd-savings-banner__icon-wrap {
    width: 26px;
    height: 26px;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.22);
    border: 1px solid rgba(255, 255, 255, 0.30);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    position: relative;
    color: #fff;
    font-size: 13px;
    line-height: 1;
}
.hd-savings-banner__body {
    flex: 1 1 auto;
    min-width: 0;
    position: relative;
    line-height: 1;
}
.hd-savings-banner__label {
    font-size: 9.5px;
    font-weight: 800;
    letter-spacing: 1.1px;
    color: rgba(255, 255, 255, 0.78);
    text-transform: uppercase;
    margin-bottom: 2px;
}
.hd-savings-banner__amount-row {
    display: flex;
    align-items: baseline;
    gap: 6px;
    flex-wrap: wrap;
}
.hd-savings-banner__amount {
    font-size: 17px;
    font-weight: 800;
    letter-spacing: -0.3px;
}
.hd-savings-banner__sub {
    font-size: 11px;
    font-weight: 600;
    color: rgba(255, 255, 255, 0.82);
}
.hd-savings-banner__pill {
    position: relative;
    background: rgba(255, 255, 255, 0.95);
    color: var(--primary, #1e3c72);
    padding: 5px 9px;
    border-radius: 999px;
    font-size: 11.5px;
    font-weight: 800;
    letter-spacing: 0.2px;
    box-shadow: 0 1px 0 rgba(0, 0, 0, 0.05);
    flex-shrink: 0;
    line-height: 1.2;
}

/* Mobile variant — sits flush above the sticky CTA row, no top radius */
.hd-savings-banner--mobile {
    padding: 9px 14px 9px 12px;
    border-radius: 0;
}

/* Desktop variant — sits at the top of the booking sidebar card,
   slightly more breathing room and rounded top corners */
.hd-savings-banner--desktop {
    padding: 11px 16px 11px 14px;
    border-top-left-radius: 16px;
    border-top-right-radius: 16px;
}
.hd-savings-banner--desktop .hd-savings-banner__amount {
    font-size: 18px;
}


/* StickyMobile bottom CTA (Delta #2) — Bundle handoff rigid rules:
   ONLY struck + final + amber CTA. NO /notte, NO ·N camere, NO other meta.
   The orphan .sticky-booking-bar (defined ~L362) is superseded by this. */
/* 2026-06-05 — la sticky CTA mobile compare/scompare col gating sul box prenota
   (vedi JS sticky in hotel_detail/ota/aves: setStickyHidden). */
.hd-sticky-mobile-cta { transition: transform 0.28s ease; }
.hd-sticky-mobile-cta.hidden { transform: translateY(110%); }
/* 2026-06-05 owner SESSIONE 2 (item 5): nascondi la sticky quando un input
   (campo città trasporto) è in focus su mobile, così la tastiera non la fa
   salire sopra il campo. !important per battere gli stati expanded/visible. */
.hd-sticky-mobile-cta.hd-sticky-hidden-by-input { transform: translateY(120%) !important; }
/* Soppressione del dock quando un modal Bootstrap è aperto (es. "Modifica date"
   → #bookingPopup, gallery, ecc.): senza, il dock (z-index 1070) resterebbe in
   primo piano e coprirebbe il modal. Doppia classe → specificità 0,2,0 + !important
   batte la regola navy `.hd-sticky-mobile-cta { display:block !important }` (0,1,0). */
.hd-sticky-mobile-cta.hd-modal-suppressed { display: none !important; }
/* owner 2026-06-07: soppressione del dock mobile mentre il configuratore
   "Aggiungi viaggio" (#hdTripBody) è aperto — evita il conflitto tra il dock e
   la CTA "Conferma" del viaggio. Classe DEDICATA (≠ hd-modal-suppressed) così
   gli stati restano indipendenti se si apre un modal sopra il configuratore. */
.hd-sticky-mobile-cta.hd-trip-suppressed { display: none !important; }
.hd-sticky-mobile-cta {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 1050;
    background: #fff;
    border-top: 1px solid var(--hair, #e9ecef);
    box-shadow: 0 -4px 16px rgba(0, 0, 0, 0.08);
    padding: 0;  /* SavingsBanner inside has its own padding when present */
    /* 2026-05-26 Step T.35 [Image #63] FIX iOS Safari: position:fixed
       perdeva ancoraggio al viewport durante scroll (bar appariva in
       mezzo alla pagina invece che al bottom). Forzo compositor layer
       con translateZ + will-change + backface-visibility hidden, pattern
       noto per stabilizzare fixed elements su iOS Safari WebKit. */
    transform: translateZ(0);
    -webkit-transform: translateZ(0);
    will-change: transform;
    -webkit-backface-visibility: hidden;
    backface-visibility: hidden;
}
.hd-sticky-mobile-cta__row {
    display: grid;
    grid-template-columns: auto 1fr;
    gap: 12px;
    align-items: center;
    padding: 10px 14px calc(10px + env(safe-area-inset-bottom, 0px));
}
.hd-sticky-mobile-cta__price {
    display: flex;
    flex-direction: row;
    align-items: center;
    gap: 7px;
    line-height: 1.1;
    min-width: 0;
}
.hd-sticky-mobile-cta__struck {
    font-size: 11px;
    text-decoration: line-through;
    color: var(--price-struck, #9ca3af);
    font-weight: 600;
}
.hd-sticky-mobile-cta__final {
    font-size: 22px;
    font-weight: 800;
    color: var(--ink, #1a1a1a);
    letter-spacing: -0.4px;
    line-height: 1;
}
.hd-sticky-mobile-cta__btn {
    background: var(--accent, #f5a623);
    color: #fff !important;
    border: none;
    padding: 12px 18px;
    border-radius: 11px;
    font-size: 14px;
    font-weight: 800;
    text-decoration: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    box-shadow: 0 3px 12px rgba(245, 166, 35, 0.35);
    white-space: nowrap;
    transition: background 0.15s ease, box-shadow 0.15s ease, transform 0.05s ease;
}
.hd-sticky-mobile-cta__btn:hover,
.hd-sticky-mobile-cta__btn:focus {
    background: var(--accent-hover, #d98f0e);
    box-shadow: 0 5px 18px rgba(245, 166, 35, 0.45);
    color: #fff !important;
    text-decoration: none;
}
.hd-sticky-mobile-cta__btn:active {
    transform: translateY(1px);
}
.hd-sticky-mobile-cta__btn i {
    font-size: 13px;
    line-height: 1;
}

/* Body padding so the sticky bar never overlaps page content above the
   footer. Only applies when the bar is actually rendered (Jinja toggles
   the class). Desktop hides the bar entirely. */
@media (max-width: 991.98px) {
    body.has-hd-sticky-cta {
        padding-bottom: calc(84px + env(safe-area-inset-bottom, 0px));
    }
    body.has-hd-sticky-cta.has-hd-sticky-cta--with-savings {
        padding-bottom: 122px;  /* extra room for SavingsBanner row */
    }
}
@media (min-width: 992px) {
    .hd-sticky-mobile-cta {
        display: none !important;
    }
}


/* BookingSidebar desktop sticky (Delta #1) — Bundle handoff alignment.
   The existing .summary-box (col-lg-3 left, "Il tuo soggiorno" card) already
   carries the bundle-style chrome (radius 16, border, shadow). What was
   missing is the sticky behavior: it scrolled away with the page on desktop.
   Now it sticks at top:86px (clearing the header) so the user sees price
   + dates + CTA while scrolling the rooms/treatments grid inside
   .booking-main. Scope limitation: .booking-main is ~570-700px tall, so
   sticky releases once the user scrolls past the booking block (into the
   Pacchetto Incluso / Aggiungi Viaggio / Reviews sections). Full-page
   sticky would require a 2-col grid refactor wrapping the whole content
   beside the sidebar — deferred to Fase 2 (out of scope for Iter 1). */
@media (min-width: 992px) {
    /* Keep Bootstrap default .row > .col stretch so the column container is
       tall enough for the inner .summary-box to stay sticky across the whole
       right-column content (rooms, treatments, reviews). Collapsing the col
       (e.g. with align-self: flex-start) breaks long-scroll sticky because
       the sticky element can only stick inside its parent's box. */
    .booking-main .summary-box {
        position: sticky;
        top: 86px;
        max-height: calc(100vh - 110px);
        overflow-y: auto;
    }
    /* Subtle scrollbar so long summary cards don't dominate the page */
    .booking-main .summary-box::-webkit-scrollbar {
        width: 6px;
    }
    .booking-main .summary-box::-webkit-scrollbar-thumb {
        background: rgba(30, 60, 114, 0.18);
        border-radius: 3px;
    }
    .booking-main .summary-box::-webkit-scrollbar-thumb:hover {
        background: rgba(30, 60, 114, 0.32);
    }
}


/* QuickInfoBar (Delta #4) — Bundle handoff alignment.
   Info-pills strip below the hero with stars + distances + amenities.
   Sticky white band with subtle border — sits above the .hd-modify-bar.
   Hidden on mobile (md-and-up only) — mobile has its own header pills. */
.hd-quick-info-bar {
    background: #fff;
    border-bottom: 1px solid var(--hair, #e9ecef);
    padding: 12px 0;
    position: sticky;
    top: 0;
    z-index: 90;
    box-shadow: 0 1px 0 rgba(0, 0, 0, 0.02);
}
.hd-quick-info-bar__inner {
    max-width: 1440px;
    margin: 0 auto;
    padding: 0 24px;
    display: flex;
    align-items: center;
    gap: 18px;
    flex-wrap: wrap;
}
.hd-quick-info-bar__pill {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    font-size: 13px;
    color: var(--ink2, #4a4a4a);
    font-weight: 600;
    line-height: 1.2;
    white-space: nowrap;
}
.hd-quick-info-bar__icon {
    font-size: 14px;
    color: var(--secondary, #2a5298);
    line-height: 1;
}
.hd-quick-info-bar__icon--accent {
    color: var(--accent, #f5a623);
}
.hd-quick-info-bar__divider {
    width: 1px;
    height: 32px;
    background: var(--hair, #e9ecef);
    display: inline-block;
}


/* PromoExpiryBand (Delta #5) — Bundle handoff alignment.
   2026-05-25 Iter 1.C Step T: gradient ambra → marrone (allineato al design
   owner che mostra colore caldo arancione/marrone, NON dark red).
   Box countdown marrone scuro con testo bianco per leggibilità + monospace. */
.hd-promo-expiry-band {
    background: linear-gradient(90deg, #e08b1a 0%, #b8651a 55%, #8b3a2f 100%);
    color: #fff;
    padding: 10px 18px;
    display: flex;
    align-items: center;
    gap: 8px;
    font-size: 12px;
    line-height: 1.2;
    /* T.23 (2026-05-26 owner): shine line — overlay che richiede position:relative
       + overflow:hidden per contenere lo sweep dell'animazione. Attivo solo
       su --countdown (urgenza alta), no su --fixed (data lontana). */
    position: relative;
    overflow: hidden;
    isolation: isolate;
}
.hd-promo-expiry-band--countdown::after {
    content: "";
    position: absolute;
    top: 0;
    left: -40%;
    width: 35%;
    height: 100%;
    background: linear-gradient(
        100deg,
        transparent 0%,
        rgba(255, 255, 255, 0) 30%,
        rgba(255, 255, 255, 0.28) 50%,
        rgba(255, 255, 255, 0) 70%,
        transparent 100%
    );
    transform: skewX(-18deg);
    animation: hd-promo-expiry-shine 3.6s ease-in-out infinite;
    pointer-events: none;
    z-index: 1;
}
@keyframes hd-promo-expiry-shine {
    0%   { left: -40%; }
    55%  { left: 110%; }
    100% { left: 110%; }
}
@media (prefers-reduced-motion: reduce) {
    .hd-promo-expiry-band--countdown::after { animation: none; opacity: 0; }
}
/* Icon + label + value devono stare sopra la shine */
.hd-promo-expiry-band > * { position: relative; z-index: 2; }
.hd-promo-expiry-band__icon {
    /* Icon "clock" round con bg trasparente bianco — coerente con SavingsBanner */
    font-size: 11px;
    color: #fff;
    line-height: 1;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.25);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}
.hd-promo-expiry-band__label {
    font-size: 12.5px;
    font-weight: 700;
    color: #fff !important;
    opacity: 1;
}
.hd-promo-expiry-band__value {
    margin-left: auto;
    display: inline-flex;
    align-items: center;
    gap: 6px;
}
.hd-promo-expiry-band--countdown .hd-promo-expiry-band__value {
    gap: 4px;
}
.hd-promo-expiry-band__box {
    /* Box marrone scuro per contrast con il gradient ambra del band */
    background: #5a2818;
    color: #fff;
    padding: 4px 8px;
    border-radius: 4px;
    font-family: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
    font-size: 13.5px;
    font-weight: 800;
    min-width: 28px;
    text-align: center;
    letter-spacing: 1px;
}
.hd-promo-expiry-band__sep {
    opacity: 0.7;
    font-weight: 700;
}
.hd-promo-expiry-band__date,
.hd-promo-expiry-band__time {
    font-family: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
    font-size: 13px;
    font-weight: 700;
}
.hd-promo-expiry-band__time {
    font-size: 12.5px;
    font-weight: 600;
    opacity: 0.9;
}

/* Mobile compact */
@media (max-width: 575.98px) {
    .hd-promo-expiry-band {
        padding: 8px 14px;
        font-size: 11px;
    }
    .hd-promo-expiry-band__icon { font-size: 12px; }
    .hd-promo-expiry-band__label { font-size: 11px; }
    .hd-promo-expiry-band__box { font-size: 12px; }
    .hd-promo-expiry-band__date { font-size: 12px; }
    .hd-promo-expiry-band__time { font-size: 11px; }
}


/* Legacy CSS marked for cleanup (Fase 2) — superseded by Iter 1 partials.
   Keep the rules dormant for now to avoid breaking other portals/pages
   that may still reference these classes. Deletion is scheduled for the
   next iteration once cross-page scan confirms no live consumers:
     .hd-savings-band     → superseded by .hd-savings-banner (Delta #3)
     .hd-urgency-band     → superseded by .hd-promo-expiry-band (Delta #5)
     .sticky-booking-bar  → orphan since 2026-05-22, superseded by
                            .hd-sticky-mobile-cta (Delta #2). The HTML
                            already does not include it. */


/* BrowseSearchStrip — Bundle 2026 redesign (Iter 1.B, no-date state).
   Sticky band that replaces .hd-modify-bar when no checkin/checkout in
   querystring. Bundle source: components/booking-states.jsx:91.
   CSS lives here (not in a new hotel-detail-2026.css) for consistency
   with the other Iter 1 selectors and to avoid the body-class-gate
   pitfall that bit the previous (reverted) attempt. */
.hd-browse-search-strip {
    background: #fff;
    border-bottom: 1px solid var(--hair, #e5e1d8);
    position: sticky;
    top: 0;
    z-index: 40;
}
.hd-browse-search-strip__inner {
    max-width: 1440px;
    margin: 0 auto;
    padding: 14px 24px;
    display: flex;
    align-items: center;
    gap: 12px;
}
.hd-browse-search-strip__icon {
    font-size: 14px;
    color: #d97706;  /* II.priceAmber — info-icon amber per bundle spec */
    line-height: 1;
    flex-shrink: 0;
}
.hd-browse-search-strip__text {
    font-size: 13px;
    color: var(--ink2, #4a4a4a);
    line-height: 1.4;
}
.hd-browse-search-strip__text strong {
    color: var(--ink, #1a1a1a);
    font-weight: 700;
}
.hd-browse-search-strip__btn {
    margin-left: auto;
    background: var(--primary, #1e3c72);
    color: #fff;
    border: none;
    padding: 8px 16px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 700;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 5px;
    flex-shrink: 0;
    line-height: 1.2;
    transition: background 0.15s ease, box-shadow 0.15s ease;
}
.hd-browse-search-strip__btn:hover,
.hd-browse-search-strip__btn:focus {
    background: var(--primary-dark, #15294f);
    box-shadow: 0 2px 8px rgba(30, 60, 114, 0.25);
    outline: none;
}
.hd-browse-search-strip__btn:active {
    transform: translateY(1px);
}
.hd-browse-search-strip__btn-icon {
    font-size: 12px;
    color: #fff;
    line-height: 1;
}

/* Iter 1.B owner feedback: BrowseSearchStrip nascosta su mobile — la
   CercaPrezzo card inline sopra serve già come CTA dates. */
@media (max-width: 767.98px) {
    .hd-browse-search-strip {
        display: none !important;
    }
    /* Iter 1.B owner feedback: "togliamo sempre mobile Gratuito · Preventivo". */
    .hd-cerca-prezzo-sidebar__trust {
        display: none;
    }
    /* Iter 1.B owner feedback v2: "800m Spiaggia 500m Centro possiamo
       rimuoverli sempre mobile" — la distances-strip mobile-only nascosta
       proprio (era stata appena riordinata, ora il requisito è rimozione). */
    .hd-no-date-grid__main > .container.d-lg-none {
        display: none !important;
    }
}


/* Bundle 2026 redesign (Iter 1.B): hide the legacy #stickyBookingBar
   ("Verifica disponibilità e prezzi" + "Preventivo gratuito, senza
   impegno") on desktop. On the new no-date layout the sticky top
   BrowseSearchStrip already prompts the user to add dates, and the
   inline "Verifica disponibilità e prezzi" button is also visible —
   keeping the bottom-fixed bar on desktop is redundant and visually
   noisy. Mobile keeps the bar accessible to the thumb at the bottom
   of the viewport (no other sticky CTA exists in the no-date case). */
@media (min-width: 992px) {
    #stickyBookingBar.sticky-booking-bar {
        display: none !important;
    }
}


/* CercaPrezzoSidebar (Iter 1.B, no-date state).
   Sticky right sidebar shown when user has no checkin/checkout selected.
   Bundle source: components/booking-states.jsx → CercaPrezzoSidebar (L9).
   Wrapper layout (grid 8/4 col) is added inline in hotel_detail.html
   around the no-date content sections — see template L? for the wiring. */
.hd-cerca-prezzo-sidebar {
    background: #fff;
    border-radius: 16px;
    border: 1px solid var(--hair, #e5e1d8);
    box-shadow: 0 8px 30px rgba(30, 60, 114, 0.10);
    overflow: hidden;
    position: sticky;
    top: 78px;
}
.hd-cerca-prezzo-sidebar__header {
    background: linear-gradient(135deg, var(--primary, #1e3c72) 0%, var(--secondary, #2a5298) 100%);
    color: #fff;
    padding: 16px 18px;
    /* Iter 1.B owner feedback: "prezzo a destra, partire da a sinistra" */
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    flex-wrap: wrap;
}
.hd-cerca-prezzo-sidebar__label {
    font-size: 14px;
    opacity: 0.9;
    font-weight: 600;
}
.hd-cerca-prezzo-sidebar__price-row {
    display: flex;
    align-items: baseline;
    gap: 6px;
    margin-top: 0;
}
.hd-cerca-prezzo-sidebar__price {
    font-size: 36px;
    font-weight: 800;
    letter-spacing: -1px;
    line-height: 1;
}
.hd-cerca-prezzo-sidebar__price-sub {
    font-size: 14px;
    opacity: 0.9;
}
.hd-cerca-prezzo-sidebar__treatment {
    font-size: 11.5px;
    opacity: 0.85;
    margin-top: 4px;
}
.hd-cerca-prezzo-sidebar__body {
    padding: 18px;
}
.hd-cerca-prezzo-sidebar__cta-headline {
    font-size: 13px;
    color: var(--ink, #1a1a1a);
    font-weight: 700;
    margin-bottom: 12px;
}
.hd-cerca-prezzo-sidebar__form {
    border: 1px solid var(--hair, #e5e1d8);
    border-radius: 10px;
    overflow: hidden;
    margin-bottom: 8px;
}
.hd-cerca-prezzo-sidebar__dates {
    display: grid;
    grid-template-columns: 1fr 1fr;
    border-bottom: 1px solid var(--hair, #e5e1d8);
}
.hd-cerca-prezzo-sidebar__field {
    appearance: none;
    -webkit-appearance: none;
    background: #fff;
    border: none;
    padding: 12px 14px;
    text-align: left;
    cursor: pointer;
    display: flex;
    flex-direction: column;
    width: 100%;
    line-height: 1.2;
    transition: background 0.12s ease;
}
.hd-cerca-prezzo-sidebar__field:hover,
.hd-cerca-prezzo-sidebar__field:focus {
    background: #f6f9ff;
    outline: none;
}
.hd-cerca-prezzo-sidebar__dates .hd-cerca-prezzo-sidebar__field:first-child {
    border-right: 1px solid var(--hair, #e5e1d8);
}
.hd-cerca-prezzo-sidebar__field--guests {
    flex-direction: row;
    align-items: center;
    justify-content: space-between;
}
.hd-cerca-prezzo-sidebar__field-block {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 2px;
}
.hd-cerca-prezzo-sidebar__field-label {
    font-size: 10px;
    font-weight: 800;
    color: var(--ink3, #8a8a8a);
    letter-spacing: 0.6px;
    text-transform: uppercase;
}
.hd-cerca-prezzo-sidebar__field-value {
    font-size: 13.5px;
    color: var(--ink3, #8a8a8a);
    margin-top: 4px;
    font-style: italic;
}
.hd-cerca-prezzo-sidebar__field-value--solid {
    color: var(--ink, #1a1a1a);
    font-weight: 700;
    font-style: normal;
    margin-top: 2px;
}
.hd-cerca-prezzo-sidebar__field-chev {
    color: var(--ink3, #8a8a8a);
    font-size: 14px;
    line-height: 1;
}
.hd-cerca-prezzo-sidebar__cta {
    width: 100%;
    background: var(--accent, #f5a623);
    color: #fff;
    border: none;
    padding: 14px 16px;
    border-radius: 12px;
    font-size: 14.5px;
    font-weight: 800;
    cursor: pointer;
    box-shadow: 0 4px 14px rgba(245, 166, 35, 0.4);
    margin-bottom: 10px;
    margin-top: 4px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 8px;
    transition: background 0.15s ease, box-shadow 0.15s ease, transform 0.05s ease;
}
.hd-cerca-prezzo-sidebar__cta:hover,
.hd-cerca-prezzo-sidebar__cta:focus {
    background: var(--accent-hover, #d98f0e);
    box-shadow: 0 6px 18px rgba(245, 166, 35, 0.5);
    outline: none;
}
.hd-cerca-prezzo-sidebar__cta:active {
    transform: translateY(1px);
}
.hd-cerca-prezzo-sidebar__cta-icon {
    font-size: 14px;
    line-height: 1;
}
.hd-cerca-prezzo-sidebar__trust {
    font-size: 11.5px;
    color: var(--ink3, #8a8a8a);
    text-align: center;
    margin-bottom: 14px;
}
.hd-cerca-prezzo-sidebar__contacts {
    border-top: 1px solid var(--hair, #e5e1d8);
    padding-top: 12px;
}
.hd-cerca-prezzo-sidebar__contacts-label {
    font-size: 11.5px;
    color: var(--ink2, #4a4a4a);
    margin-bottom: 8px;
}
.hd-cerca-prezzo-sidebar__contacts-grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 8px;
}
.hd-cerca-prezzo-sidebar__contact-btn {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 5px;
    padding: 10px;
    border-radius: 10px;
    font-size: 12.5px;
    font-weight: 700;
    text-decoration: none;
    line-height: 1.2;
    transition: all 0.15s ease;
}
.hd-cerca-prezzo-sidebar__contact-btn--whatsapp {
    background: #25D366;
    color: #fff !important;
    border: none;
}
.hd-cerca-prezzo-sidebar__contact-btn--whatsapp:hover,
.hd-cerca-prezzo-sidebar__contact-btn--whatsapp:focus {
    background: #1ebd5b;
    color: #fff !important;
    text-decoration: none;
}
.hd-cerca-prezzo-sidebar__contact-btn--phone {
    background: #fff;
    color: var(--primary, #1e3c72) !important;
    border: 1.5px solid var(--primary, #1e3c72);
}
.hd-cerca-prezzo-sidebar__contact-btn--phone:hover,
.hd-cerca-prezzo-sidebar__contact-btn--phone:focus {
    background: #f6f9ff;
    color: var(--primary, #1e3c72) !important;
    text-decoration: none;
}

/* Iter 1.B Task G — proper 2-col grid layout (bundle VariantCBrowse L121).
   Wraps the no-date content sections in .hd-no-date-grid (1fr | 380px on
   desktop), with the CercaPrezzoSidebar as the sticky right-column child.
   Mobile degrades to single col with the sidebar hidden — the bottom
   #stickyBookingBar serves the thumb-reach CTA. */
.hd-no-date-grid {
    display: grid;
    grid-template-columns: minmax(0, 1fr);  /* minmax(0,1fr) prevents min-content expansion */
    gap: 28px;
    max-width: 1440px;
    margin: 0 auto;
    padding: 24px;
    align-items: flex-start;
}
/* Force both grid items to honor the column width (prevents min-content
   overflow when a nested element has long unbreakable content). */
.hd-no-date-grid__main,
.hd-no-date-grid__sidebar {
    min-width: 0;
}
@media (min-width: 992px) {
    .hd-no-date-grid {
        grid-template-columns: minmax(0, 1fr) 380px;
    }
    .hd-no-date-grid__sidebar {
        position: sticky;
        top: 86px;
        max-height: calc(100vh - 100px);
        overflow-y: auto;
    }
    /* Subtle scrollbar in the sticky sidebar */
    .hd-no-date-grid__sidebar::-webkit-scrollbar { width: 6px; }
    .hd-no-date-grid__sidebar::-webkit-scrollbar-thumb {
        background: rgba(30, 60, 114, 0.18);
        border-radius: 3px;
    }
}
@media (max-width: 991.98px) {
    /* Iter 1.B Task U — mobile no-date: CercaPrezzoSidebar diventa una card
       full-width ABOVE the main content (order -1 sposta il box prezzo prima
       di GLI OSPITI ADORANO). Bundle target: scheda mobile no-date mostra
       prezzo + form date + CTA in alto, content sotto. */
    .hd-no-date-grid__sidebar {
        order: -1;
    }
    .hd-no-date-grid {
        padding: 12px;
        gap: 16px;
    }
    /* The fixed bottom #stickyBookingBar becomes redundant when the inline
       price card is already visible above the fold — hide it in no-date. */
    body.has-hd-cerca-prezzo-sidebar #stickyBookingBar.sticky-booking-bar {
        display: none !important;
    }
}

/* Within the grid context, neutralize the inner .container max-width/padding
   so the existing nested .container > .row > .col-12 structures don't
   re-introduce their own 1200px center + 24px padding (which would clash
   with the grid column). */
.hd-no-date-grid__main .container,
.hd-no-date-grid__main .container-fluid {
    max-width: 100% !important;
    padding-left: 0;
    padding-right: 0;
    margin-left: 0;
    margin-right: 0;
}
/* Bootstrap .row applies negative side margins (~ -12px) to compensate for
   .col padding. With .container padding zeroed above, those negatives push
   .row past the viewport edge causing horizontal overflow on mobile.
   Reset both .row negatives and .col paddings inside the grid scope. */
.hd-no-date-grid__main .row {
    margin-left: 0 !important;
    margin-right: 0 !important;
}
.hd-no-date-grid__main [class*="col-"] {
    padding-left: 0 !important;
    padding-right: 0 !important;
}

/* Iter 1.B owner feedback: "il box gli ospiti adoranano deve partire
   alliniato con il box prezzo". Neutralize Bootstrap .mt-4 (24px) on
   the FIRST visible .row inside the main column so its first content
   section (GLI OSPITI ADORANO) lines up flush with the sticky sidebar
   top edge (both controlled by .hd-no-date-grid padding:24). */
.hd-no-date-grid__main .container .row.mt-4:first-child {
    margin-top: 0 !important;
}

/* Iter 1.B owner feedback: "la mappa mettiamola sotto ai servizi".
   In the no-date grid only, force the 8/4 split of Servizi/Posizione
   to stack vertically so the map sits below the services. Scoped to
   not affect the with-date layout where the side-by-side split is
   intentional (and constrained by the booking-main width). */
.hd-no-date-grid__main .col-lg-8,
.hd-no-date-grid__main .col-lg-4 {
    flex: 0 0 100% !important;
    max-width: 100% !important;
}


/* Iter 1.B Task H — Servizi della struttura 4-col card grid
   (bundle source: components/blocks.jsx → ServicesGrid L32).
   Scope limited to the no-date grid context to avoid regressing the
   with-date amenities styling. First 4 items render as featured
   bordered cards with icon-box; remaining items render as compact
   horizontal rows. */
.hd-no-date-grid .amenities-grid {
    gap: 10px 16px;
}
.hd-no-date-grid .amenities-grid .amenity-item {
    flex-direction: row !important;
    align-items: center !important;
    text-align: left !important;
    gap: 10px !important;
    padding: 12px 12px !important;
}
/* Iter 1.B owner feedback: "Servizi e strutture 4 max per ogni riga".
   4 cols on desktop (wide main col) — on mobile (≤575px) la wide=366 / 4
   non basta più, degrada a 2 cols. */
.hd-no-date-grid .amenities-grid {
    grid-template-columns: repeat(4, minmax(0, 1fr)) !important;
}
@media (max-width: 575.98px) {
    .hd-no-date-grid .amenities-grid {
        grid-template-columns: repeat(2, minmax(0, 1fr)) !important;
    }
}

/* Iter 1.B owner feedback: "togliamo quella card blu dai primi 4 servizi,
   restano tutti normali". All amenity-item now share the same compact
   horizontal style (no featured card chrome for the first 4). */
.hd-no-date-grid .amenities-grid .amenity-item {
    padding: 6px 0 !important;
    background: transparent;
    border: none;
}
.hd-no-date-grid .amenities-grid .amenity-item .amenity-icon {
    width: auto;
    height: auto;
    border-radius: 0;
    background: transparent !important;
    color: var(--secondary, #2a5298) !important;
    font-size: 16px;
    margin-bottom: 0;
    flex-shrink: 0;
    line-height: 1;
}
.hd-no-date-grid .amenities-grid .amenity-item .amenity-icon i {
    color: var(--secondary, #2a5298);
}
.hd-no-date-grid .amenities-grid .amenity-item .amenity-label {
    font-size: 13.5px;
    color: var(--ink2, #4a4a4a);
    font-weight: 500;
    text-align: left;
}
.hd-no-date-grid .amenities-grid .amenity-item:hover {
    background: rgba(30, 60, 114, 0.06);
    transform: none;
}
.hd-no-date-grid .amenities-grid .amenity-item:hover .amenity-icon {
    transform: none;
}


/* Iter 1.B Task I — info mini-grid (CHECK-IN / CHECK-OUT / ANIMALI / APERTURA)
   Mostrato sotto la descrizione "Informazioni sulla struttura". Layout 4-col
   desktop, 2-col mobile. Allineato al target Desktop_1280.html. */
.hd-info-grid {
    display: grid;
    grid-template-columns: repeat(4, 1fr);
    gap: 18px;
    margin: 20px 0 0;
    padding-top: 18px;
    border-top: 1px solid var(--hair, #e5e1d8);
}
.hd-info-grid__item {
    display: flex;
    flex-direction: column;
    gap: 4px;
    min-width: 0;
}
.hd-info-grid__label {
    font-size: 10px;
    font-weight: 700;
    color: var(--ink3, #8a8a8a);
    letter-spacing: 0.6px;
    text-transform: uppercase;
}
.hd-info-grid__value {
    font-size: 14px;
    color: var(--ink, #1a1a1a);
    font-weight: 600;
    line-height: 1.3;
}
@media (max-width: 575.98px) {
    .hd-info-grid {
        grid-template-columns: repeat(2, 1fr);
        gap: 14px;
    }
}


/* Iter 1.B Task V — Mobile hero full-bleed + title overlay.
   Owner feedback: "hero con la foto e gallery mobile dalla schermata
   passata è full, il titolo della struttura con stelle località e
   comune va sulla foto". Mobile (<768px): mostra solo la 1a foto a
   tutta larghezza, sovrappone titolo+stelle+address+rating chip in
   basso col gradient scuro per leggibilità. Pulsante Salva e counter
   "X/N foto" come pill overlay top corners. */
@media (max-width: 767.98px) {
    .hd-hero-mosaic {
        margin-bottom: 0;
    }
    .hd-hero-mosaic .container {
        max-width: 100%;
        padding: 0 !important;
        position: relative;
    }
    /* Posiziona il title-row come overlay sopra la foto */
    .hd-hero-mosaic__title-row {
        position: absolute;
        bottom: 14px;
        left: 14px;
        right: 14px;
        z-index: 5;
        margin: 0;
        gap: 8px;
        align-items: flex-end;
        justify-content: flex-start;  /* sovrascrive space-between desktop */
    }
    .hd-hero-mosaic__title-block {
        flex: 1 1 100% !important;
        width: 100% !important;
        max-width: 100% !important;
    }
    .hd-hero-mosaic__title-block {
        color: #fff;
        text-align: left;
        display: flex;
        flex-direction: column;
        align-items: flex-start;
        gap: 2px;  /* ridotto da 4 → 2 (owner: meno spazio tra nome e indirizzo) */
    }
    .hd-hero-mosaic__name {
        color: #fff !important;
        font-size: 22px !important;
        font-weight: 800;
        line-height: 1.15;
        text-shadow: 0 2px 12px rgba(0, 0, 0, 0.5);
        margin: 0;  /* ridotto da 0 0 6px → 0 */
        text-align: left;
    }
    .hd-hero-mosaic__meta {
        gap: 8px;
        flex-wrap: wrap;
        justify-content: flex-start;
        align-items: center;
    }
    /* Owner feedback: "il punteggio va dopo l'indirizzo".
       Order esplicito per evitare reflow su flex-wrap. */
    .hd-hero-mosaic__address { order: 1; }
    .hd-hero-mosaic__title-block .hd-hero-mosaic__rating-chip { order: 2; }
    .hd-hero-mosaic__stars,
    .hd-hero-mosaic__stars i {
        color: var(--accent, #f5a623) !important;
        text-shadow: 0 1px 4px rgba(0, 0, 0, 0.45);
    }
    .hd-hero-mosaic__address {
        color: #fff !important;
        font-size: 13px !important;
        font-weight: 600;
        text-shadow: 0 1px 4px rgba(0, 0, 0, 0.5);
    }
    /* Iter 1.B owner feedback: "il pin sopra hero va via". Nascondo
       l'icona bi-geo-alt-fill nell'address overlay del hero su mobile. */
    .hd-hero-mosaic__address i {
        display: none;
    }
    /* Rating chip inline dopo address (era top-right in __actions, ora
       template-moved dentro __meta). Mobile: pill compatto navy. */
    .hd-hero-mosaic__title-block .hd-hero-mosaic__rating-chip {
        display: inline-flex;
        align-items: center;
        gap: 1px;
        background: var(--primary, #1e3c72);
        color: #fff;
        padding: 1px 6px;
        border-radius: 999px;
        font-size: 9px;
        font-weight: 700;
        line-height: 1.2;
        box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25);
    }
    .hd-hero-mosaic__title-block .hd-hero-mosaic__rating-score {
        font-weight: 800;
    }
    .hd-hero-mosaic__title-block .hd-hero-mosaic__rating-score small {
        font-size: 7.5px;
        font-weight: 600;
        opacity: 0.8;
    }
    .hd-hero-mosaic__title-block .hd-hero-mosaic__rating-label {
        display: none;  /* mobile: solo numero, no "Ottimo" label */
    }
    /* Save button nascosto su mobile (target Image #12 non lo mostra). */
    .hd-hero-mosaic__actions {
        display: none;
    }
    .hd-hero-mosaic__action-btn {
        background: rgba(0, 0, 0, 0.55) !important;
        color: #fff !important;
        border: none !important;
        padding: 6px 10px !important;
        border-radius: 999px !important;
        font-size: 12px !important;
        backdrop-filter: blur(6px);
        -webkit-backdrop-filter: blur(6px);
    }
    .hd-hero-mosaic__action-btn span {
        display: none;
    }
    .hd-hero-mosaic__action-btn i {
        font-size: 14px;
        line-height: 1;
    }
    /* Hide rating chip on mobile (it lives in the overlay title row inline)
       OR keep it as a small chip inline next to address. Keep visible: */
    .hd-hero-mosaic__rating-chip {
        order: -1;  /* prima del Salva nel row destro */
    }
    /* Grid mobile: solo 1 foto full-bleed (height ~340px), nascondi 2-5 */
    .hd-hero-mosaic__grid {
        position: relative;
        display: block !important;
        height: 340px;
        border-radius: 0;
        margin: 0;
        gap: 0;
    }
    .hd-hero-mosaic__cell {
        display: none !important;
    }
    .hd-hero-mosaic__cell--1 {
        display: block !important;
        position: absolute !important;
        inset: 0 !important;
        height: 100% !important;
        width: 100% !important;
        border-radius: 0 !important;
    }
    .hd-hero-mosaic__cell--1 img {
        width: 100%;
        height: 100%;
        object-fit: cover;
    }
    /* Gradient overlay scuro per leggibilità del title row */
    .hd-hero-mosaic__grid::after {
        content: '';
        position: absolute;
        left: 0;
        right: 0;
        bottom: 0;
        height: 60%;
        background: linear-gradient(180deg, rgba(0,0,0,0) 0%, rgba(0,0,0,0.65) 100%);
        pointer-events: none;
        z-index: 2;
    }
    /* Mostra tutte N foto: rimpicciolisce in pill counter top-right */
    .hd-hero-mosaic__more-overlay {
        position: absolute !important;
        top: 12px !important;
        right: 12px !important;
        background: rgba(0, 0, 0, 0.55) !important;
        color: #fff !important;
        padding: 6px 12px !important;
        border-radius: 999px !important;
        font-size: 12px !important;
        font-weight: 600 !important;
        z-index: 4;
        backdrop-filter: blur(6px);
        -webkit-backdrop-filter: blur(6px);
        bottom: auto !important;
        left: auto !important;
        right: 12px !important;
        gap: 6px;
        display: inline-flex !important;
        align-items: center;
    }
    /* The "more overlay" lives inside cell--5 which is hidden on mobile.
       Move it out: re-show only this overlay even though parent is hidden. */
    .hd-hero-mosaic__cell--5 {
        display: contents !important;
    }
    .hd-hero-mosaic__cell--5 img {
        display: none !important;
    }
    /* Back to results stays bottom-left if visible */
    .hd-hero-mosaic__back-overlay {
        left: 12px !important;
        bottom: 12px !important;
        z-index: 7;
    }
}


/* Iter 1.C — With-date layout refactor (Step A) → 2026-06-05 owner:
   DESKTOP 70/30 "PAGE-WIDE". In stato offers_data la pagina è 2 colonne a
   livello pagina: sinistra ~70% = TUTTO il contenuto scrollabile (camere +
   sezioni descrittive Aggiungi Viaggio / Gli Ospiti Adorano / descrizione /
   servizi / posizione+mappa / gallery); destra ~30% = SOLO il box prezzo
   (#hdPriceSummaryCard) sticky che segue lo scroll per l'INTERA altezza del
   contenuto a sinistra.

   Tecnica (mobile-safe, ZERO DOM-move): la classe .hd-wd-grid è messa sul
   wrapper page-level .hd-with-date-wrap SOLO in stato offers_data e queste
   regole vivono SOLO in @media (min-width:992px) → sotto i 992px nulla cambia
   (una colonna, ordine camere → box prezzo → sezioni, identico a prima).

   Su desktop .hd-with-date-wrap diventa un grid 2 colonne. .booking-main e il
   suo .row usano display:contents → si "appiattiscono" così le loro col
   (camere col-lg-5, box prezzo col-lg-4) diventano grid-item DIRETTI del grid
   page-level INSIEME alle sezioni-sorelle. Il box prezzo viene piazzato nella
   colonna destra con grid-row che span tutte le righe → il suo containing
   block è ora .hd-with-date-wrap (alto quanto tutta la pagina) e lo sticky
   copre l'intera altezza, non più solo .booking-main. Il markup/JS del box
   prezzo (#hdPriceSummaryCard, recap supplementi, pay-mini, transport chip,
   sticky refresh) resta INVARIATO: cambia solo il placement CSS. */
@media (min-width: 992px) {
    /* 2026-06-05 owner — sticky page-wide del box prezzo: il body NON deve essere
       scroll-container. La propagazione viewport (html overflow-x:clip) faceva
       computare body a `overflow: hidden auto` → scroll-container → position:sticky
       rotto. Forziamo clip+visible SOLO desktop e SOLO quando non c'è uno scroll-lock
       attivo (modali Bootstrap .modal-open / hoescape .hoe-no-scroll), così lo
       scroll-lock dei modali resta intatto. Mobile (<992px) invariato. */
    body:not(.modal-open):not(.hoe-no-scroll) {
        overflow-x: clip !important;
        overflow-y: visible !important;
    }
    /* col-lg-3 "Il tuo soggiorno" resta nascosto su desktop (info duplicate). */
    .booking-main .row > .col-lg-3 {
        display: none !important;
    }

    /* Page-level grid: 70% contenuto | 30% box prezzo. */
    .hd-with-date-wrap.hd-wd-grid {
        display: grid;
        grid-template-columns: minmax(0, 1fr) minmax(0, 30%);
        column-gap: 24px;
        align-items: start;
    }

    /* booking-main = grid-item colonna sinistra (mantiene il card chrome
       originale da riga 443: bg/raggio/ombra/padding). NIENTE display:contents
       (rompeva l'offset dello sticky page-wide del box prezzo → top errato). */
    .hd-with-date-wrap.hd-wd-grid > .booking-main {
        grid-column: 1;
        min-width: 0;
        margin-bottom: 0 !important;
    }
    /* col-lg-5 (camere) riempie booking-main (override 41.67% Bootstrap). */
    .hd-with-date-wrap.hd-wd-grid > .booking-main .row > .col-lg-5 {
        flex: none !important;
        width: 100% !important;
        max-width: 100% !important;
    }

    /* Tutte le sezioni-sorelle (Aggiungi Viaggio, Servizi/posizione/gallery)
       restano nella colonna sinistra, impilate sotto le camere. */
    .hd-with-date-wrap.hd-wd-grid > .container.hd-wrap-1440 {
        grid-column: 1;
        min-width: 0;
    }

    /* Box prezzo (col-lg-4) → colonna destra, sticky per TUTTA la pagina.
       grid-row: 1 / -1 + align-self:start lo ancorano in cima alla colonna
       destra e gli danno come containing block l'intero grid (page-tall) →
       lo sticky non si ferma più alla fine di .booking-main. */
    .hd-with-date-wrap.hd-wd-grid > .col-lg-4 {
        grid-column: 2;
        /* span su tutte le righe implicite generate dagli item della colonna
           sinistra. `span 999` è robusto con tracce implicite (a differenza di
           `1 / -1` che span solo fino all'ultima linea ESPLICITA) → l'area del
           box copre l'intera altezza del contenuto a sinistra e lo sticky
           segue lo scroll per tutta la pagina. */
        grid-row: 1 / span 999;
        min-width: 0;
        /* override larghezza % Bootstrap (.col-lg-4 = 33.33%): riempie la cella 30%. */
        flex: none !important;
        width: 100% !important;
        max-width: 100% !important;
        position: sticky;
        top: 86px;
        align-self: start;
        margin-top: 1.5rem;
    }

    /* 2026-06-05 owner — su desktop la sidebar prezzo sticky a destra SOSTITUISCE
       la barra sticky in basso: nascondi SOLO quella desktop (#stickyPriceBar).
       La barra mobile #hdStickyMobileCta è già desktop-hidden (riga ~3540) e resta
       attiva <992px. Il JS toggla solo .hidden (transform), mai display → questa vince. */
    #stickyPriceBar.sticky-price-bar {
        display: none !important;
    }
}

/* PriceSummary card (cima della sidebar destra with-date) */
.hd-price-summary-card {
    background: #fff;
    border-radius: 16px;
    border: 1px solid var(--hair, #e5e1d8);
    box-shadow: 0 8px 30px rgba(30, 60, 114, 0.10);
    padding: 18px;
    margin-bottom: 16px;
}
.hd-price-summary-card__label {
    font-size: 13px;
    color: var(--ink3, #8a8a8a);
    margin-bottom: 4px;
}
/* 2026-06-02 owner: box "Miglior prezzo garantito" in cima alla price card.
   Usa le variabili di tema → colori del portale (HoEscape navy→azzurro). */
.hd-bestprice-box {
    display: flex;
    align-items: center;
    gap: 11px;
    background: linear-gradient(135deg, var(--primary, #1e3c72), var(--secondary, #2a5298));
    color: #fff;
    /* Full-bleed header della card: annulla i 18px di padding della card,
       angoli alti = radius card (16px), angoli bassi dritti. */
    margin: -18px -18px 16px;
    padding: 13px 16px;
    border-radius: 16px 16px 0 0;
}
/* HoEscape: gradiente verde brand (lime → verde scuro per tenere il testo bianco leggibile). */
[data-skin="hoe"] .hd-bestprice-box {
    background: linear-gradient(135deg, #8cb93a 0%, #557d1c 100%);
}
.hd-bestprice-box__icon {
    flex-shrink: 0;
    width: 32px;
    height: 32px;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.18);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 1.05rem;
}
.hd-bestprice-box__text { display: flex; flex-direction: column; line-height: 1.25; }
.hd-bestprice-box__title { font-size: 0.9rem; font-weight: 800; letter-spacing: 0.3px; text-shadow: 0 1px 2px rgba(0, 0, 0, 0.22); }
.hd-bestprice-box__sub { font-size: 0.78rem; font-weight: 400; opacity: 0.92; }
.hd-price-summary-card__price {
    font-size: 36px;
    font-weight: 800;
    color: var(--price-amber, #e08b1a);
    letter-spacing: -1px;
    line-height: 1;
}
.hd-price-summary-card__sub {
    font-size: 13px;
    color: var(--ink2, #4a4a4a);
    margin-top: 4px;
}
.hd-price-summary-card__chips {
    margin-top: 14px;
    background: #f8f6f1;
    border-radius: 10px;
    padding: 12px;
    display: flex;
    flex-direction: column;
    gap: 10px;
}
/* 2026-06-02 owner — card AVES: dettagli (date/camera/acconto) come righe semplici,
   FUORI dai riquadri grigi; prezzo + caption appena sopra il CTA. Scoped a #hdPriceSummaryCard
   per non toccare la card nativa (offers_data) né il desktop. */
#hdPriceSummaryCard .hd-price-summary-card__chips { background: transparent; padding: 0; margin-top: 12px; }
#hdPriceSummaryCard .hd-pay-mini { background: transparent; padding: 0; margin-top: 8px; }
/* Acconto: importo subito dopo il testo (no allineamento a destra). */
#hdPriceSummaryCard .hd-pay-mini__row { justify-content: flex-start; gap: 6px; }
#hdPriceSummaryCard .hd-pay-mini__label { flex: 0 0 auto; }
/* Spazio ridotto tra acconto e riga prezzo; "Totale soggiorno" inline a sinistra del prezzo. */
#hdPriceSummaryCard .hd-price-summary-card__price-row--above-cta { margin-top: 8px; }
.hd-price-summary-card__total-caption {
    font-size: 13px;
    font-weight: 500;
    color: var(--ink3, #6b6b6b);
    align-self: center;
}
.hd-price-summary-card__chip {
    display: grid;
    grid-template-columns: 16px 1fr;
    column-gap: 8px;
    row-gap: 2px;
    align-items: start;
}
/* 2026-06-07 owner: tooltip trattamento/loco — comportamento condiviso (vale anche
   per OTA, le cui copie inline restano a 575px). MOBILE+TABLET (<=991px): la tooltip
   diventa card centrata fixed in basso così non esce mai dallo schermo. Specificità
   .hd-loco-info.is-open .hd-loco-tip (0,3,0) > base inline → vince. */
@media (max-width: 991px) {
    .hd-loco-info.is-open .hd-loco-tip {
        position: fixed; left: 12px; right: 12px; bottom: 84px; top: auto;
        transform: none; width: auto; min-width: 0; max-width: none;
        z-index: 2000; padding: 14px 16px; font-size: 13px;
    }
    .hd-loco-info.is-open .hd-loco-tip::after { display: none; }
    .hd-loco-info.is-open .hd-loco-tip__close { display: inline-flex; }
    .hd-loco-info.is-open .hd-loco-tip { padding-right: 34px; }
}
/* Chip riepilogo: l'icona info resta INLINE col testo (il chip è grid 2-col:
   senza wrapper l'icona era il 3° grid item → andava a capo sotto su desktop). */
.hd-treat-chip-wrap { display: flex; align-items: flex-start; gap: 4px; min-width: 0; }
.hd-treat-chip-wrap .hd-price-summary-card__chip-main { min-width: 0; }
.hd-treat-chip-wrap .hd-loco-info { flex-shrink: 0; margin-top: 1px; }
/* 2026-06-07 owner — tooltip "i" del TRATTAMENTO: si apre SEMPRE sopra e ancorato a
   DESTRA (cresce verso SINISTRA) così non viene mai tagliato — su hover E su click,
   chip inline (price card) E chip sticky, mobile E desktop. Override del base
   (centrato → esce a destra) e del fixed-bottom mobile. Scoped a .hd-treat-chip-info
   → le altre tooltip "loco" restano invariate. */
.hd-treat-chip-info { position: relative; }
.hd-treat-chip-info .hd-loco-tip {
    left: auto !important; right: 0 !important;
    transform: none !important;
    bottom: calc(100% + 8px) !important; top: auto !important;
    width: max-content !important; max-width: min(300px, 80vw) !important;
    white-space: normal !important;
}
.hd-treat-chip-info .hd-loco-tip::after { display: none !important; }
.hd-loco-info.hd-treat-chip-info.is-open .hd-loco-tip {
    position: absolute !important;
    left: auto !important; right: 0 !important;
    bottom: calc(100% + 8px) !important; top: auto !important;
    transform: none !important;
    width: max-content !important; max-width: min(300px, 80vw) !important;
    z-index: 2600 !important;
}
/* 2026-06-07 owner (OTA) — riga acconto "Alla conferma versi (N%)" sul totale
   (soggiorno + nave), subito prima del "Totale". Markup solo OTA-nave (#hdAccontoConferma);
   il display flex/none è gestito da updateGrandTotal(). */
.hd-grand-total__acconto { align-items: baseline; justify-content: space-between; gap: 8px; margin-top: 8px; }
.hd-grand-total__acconto .hd-grand-total__acconto-cap { font-size: 13px; font-weight: 700; color: var(--primary, #1e3c72); }
.hd-grand-total__acconto .hd-grand-total__acconto-val { font-size: 15px; font-weight: 800; color: var(--accent-hover, #e09000); }
.hd-price-summary-card__chip i {
    grid-column: 1;
    grid-row: 1 / span 2;
    color: var(--secondary, #2a5298);
    font-size: 14px;
    line-height: 1.2;
    align-self: center;
}
.hd-price-summary-card__chip-main {
    grid-column: 2;
    grid-row: 1;
    font-size: 13px;
    font-weight: 700;
    color: var(--ink, #1a1a1a);
    line-height: 1.25;
}
/* "Da regolare in loco" subito sopra il Totale, separato da una linea
   (owner 2026-06-04): linea → loco → Totale. */
.hd-price-summary-card__chip--at-hotel {
    border-top: 1px solid #ececf2;
    padding-top: 10px;
    margin-top: 10px;
}
/* T.28.l (2026-05-26 owner): chip "Da pagare in hotel" font normal, NO grassetto.
   small annotation "non rientra nel totale" greyed. */
.hd-price-summary-card__chip--at-hotel .hd-price-summary-card__chip-main {
    font-weight: 500;
    color: var(--ink2, #4a5568);
}
.hd-price-summary-card__chip--at-hotel .hd-price-summary-card__chip-main small {
    font-weight: 400;
    color: #6b6b6b;
    margin-left: 2px;
}
.hd-price-summary-card__chip--at-hotel .hd-price-summary-card__chip-price {
    font-weight: 600;
    color: #4a5568;
}
.hd-price-summary-card__chip-sub {
    grid-column: 2;
    grid-row: 2;
    font-size: 11.5px;
    color: var(--ink3, #8a8a8a);
    line-height: 1.2;
}
/* 2026-06-06 owner — AVES price-card: chip "main-only" (camera / trattamento / data).
   Il trattamento è una riga grigia piccola subito SOTTO la camera (niente icona →
   il main resta in colonna 2, allineato sotto il nome camera). La data porta
   notti+adulti tutto sul main (una riga). Vale desktop sidebar + clone dock. */
.hd-aves-chip--treatment { margin-top: -4px; }
.hd-aves-chip--treatment .hd-price-summary-card__chip-main {
    font-size: 11.5px;
    font-weight: 500;
    color: var(--ink3, #8a8a8a);
}
/* 2026-06-07 owner — chip trattamento "plain" (nativo+OTA): via icona decorativa a
   sinistra (bi-egg-fried) → niente colonna 16px, solo testo + "i" info inline.
   AVES non ha --plain (chip propria, esclusa). */
.hd-price-summary-card__chip--plain { grid-template-columns: 1fr; }


/* Iter 1.C Step B — stepped headers "1 · Scegli camera" / "2 · Scegli
   trattamento" con number badge navy + counter "N tipologie disponibili"
   a destra (when present). */
.hd-step-header {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 12px;
    margin: 0 0 14px;
    flex-wrap: wrap;
}
/* 2026-06-06 owner — DESKTOP: badge "Spiaggia inclusa" (plus del periodo) allineato a
   DESTRA nella riga "Scegli la tua camera" (su mobile resta inline dopo il titolo). */
@media (min-width: 768px) {
    .hd-step-header__title { flex: 1 1 auto; }
    .hd-step-header__title #hdStepBeachBadge { margin-left: auto; }
}
.hd-step-header--mt {
    margin-top: 24px;
}
.hd-step-header__title {
    display: inline-flex;
    align-items: center;
    gap: 10px;
    font-size: 18px;
    font-weight: 800;
    color: var(--primary, #1e3c72);
    letter-spacing: -0.2px;
    margin: 0;
    line-height: 1.2;
}
.hd-step-header__num {
    display: inline-flex;
    align-items: center;
    justify-content: center;
    width: 26px;
    height: 26px;
    border-radius: 50%;
    background: var(--primary, #1e3c72);
    color: #fff;
    font-size: 13px;
    font-weight: 800;
    flex-shrink: 0;
}
.hd-step-header__counter {
    font-size: 12.5px;
    color: var(--ink3, #8a8a8a);
    font-weight: 600;
    white-space: nowrap;
}
/* Iter 1.C: tipologia camera inline dopo "Scegli la tua camera" header. */
.hd-step-header__typology {
    color: var(--ink2, #4a4a4a);
    font-weight: 600;
    font-size: 0.85em;
    margin-left: 8px;
    padding-left: 8px;
    border-left: 1px solid var(--hair, #e5e1d8);
}
/* 2026-06-04 owner: trattamento UNICO mostrato DENTRO ogni card camera,
   sotto il nome (non nell'header). Blu standard del sito, senza icona.
   Il contenitore del nome camera è un flex-row (nowrap): forziamo il
   wrap e basis 100% così la riga trattamento va SEMPRE a capo, su riga
   propria full-width sotto il nome. Critico su mobile. */
.hd-room-card__treatment {
    display: block;
    flex: 1 0 100%;
    width: 100%;
    color: var(--primary, #1e3c72);
    font-weight: 600;
    font-size: 0.82rem;
    line-height: 1.25;
    margin: 2px 0 4px;
    white-space: normal;
}
/* Forza il wrap del contenitore (flex-row nowrap) che ospita nome +
   riga trattamento, così quest'ultima cade su una nuova riga.
   !important per battere il nowrap del layout flex della card. */
div:has(> .hd-room-card__treatment) {
    flex-wrap: wrap !important;
}

/* 2026-06-05 owner — "Vedi pacchetto incluso": LINK TESTUALE (icona regalo)
   INLINE subito dopo la tipologia camera ("Comfort · Vedi pacchetto incluso").
   Apre il modal #packageModal per-camera. Solo testo, niente pillola/gradient. */
.hd-room-pkg-link {
    display: inline-flex;
    align-items: center;
    gap: 5px;
    margin: 0;
    padding: 0;
    border: none;
    background: none;
    color: var(--primary, #1e3c72);
    font-weight: 600;
    font-size: 0.85rem;
    line-height: 1.2;
    vertical-align: baseline;
    cursor: pointer;
    text-decoration: none;
    white-space: nowrap;
}
/* solo il TESTO è sottolineato (icona no), come da mockup owner */
.hd-room-pkg-link__txt { text-decoration: underline; text-underline-offset: 2px; }
.hd-room-pkg-link:hover .hd-room-pkg-link__txt { color: var(--secondary, #2a5298); }
.hd-room-pkg-link i { color: var(--accent, #f5a623); font-size: 0.95rem; }
/* separatore: barretta verticale tra nome tipologia e link pacchetto.
   font-size:0 nasconde il carattere "·" presente nel markup. */
.hd-room-pkg-sep {
    display: inline-block;
    width: 1px;
    height: 13px;
    background: #ccd2da;
    margin: 0 9px;
    vertical-align: middle;
    position: relative;
    top: -1px;
    font-size: 0;
    line-height: 0;
}
/* NB: l'override mobile per mandare "Vedi pacchetto incluso" A CAPO (card camera
   stretta) NON può stare qui: le regole @media (max-width:767.98px) più avanti
   (≈L6392) forzano nome+pkg+prezzo su una riga con specificità alta (0,6,1) e
   vincerebbero. Il fix vive in fondo al file in @media (max-width:575.98px). */


/* Iter 1.C Step C — Card camera/trattamento restyle 3-col / 2-col grid.
   Target Image #15: side-by-side cards, amber border + bg per selected,
   nome top + prezzi bottom. */
@media (min-width: 768px) {
    /* Room cards 3-col grid */
    .hd-room-cards-grid {
        /* Iter 1.C owner feedback v2: "card delle camere devono andare
           una sotto all'altra" — stack verticale. Treatment grid resta 2-col. */
        display: flex;
        flex-direction: column;
        gap: 10px;
    }
    .hd-room-cards-grid > .option-card.room-option-card {
        margin: 0 !important;
        display: flex;
        flex-direction: column;
        padding: 14px;
        border: 1px solid var(--hair, #e5e1d8);
        background: #fff;
        border-radius: 12px;
        cursor: pointer;
        transition: border-color 0.15s, box-shadow 0.15s;
    }
    .hd-room-cards-grid > .option-card.room-option-card.selected {
        border-color: var(--accent, #f5a623);
        background: rgba(245, 166, 35, 0.04);
        box-shadow: 0 0 0 3px rgba(245, 166, 35, 0.18);
    }
    /* Single-column stacked: layout horizontal con thumb left, name center, price right. */
    .hd-room-cards-grid > .option-card.room-option-card .d-flex {
        flex-direction: row !important;
        align-items: center !important;
        gap: 12px !important;
    }
    .hd-room-cards-grid > .option-card.room-option-card .room-card-thumb {
        width: 90px !important;
        height: 70px;
        object-fit: cover;
        border-radius: 8px;
        flex-shrink: 0;
    }
    .hd-room-cards-grid > .option-card.room-option-card .room-card-price-col {
        text-align: right !important;
        margin: 0 !important;
        flex-shrink: 0;
        padding-top: 0;
        border: none !important;
        /* Iter 1.C owner feedback: "prezzo barrato sulla stessa linea
           del prezzo scontato, subito prima". Override del base
           .room-card-price-col che è flex-direction column. */
        display: flex !important;
        flex-direction: row !important;
        align-items: baseline !important;
        gap: 8px;
        justify-content: flex-end;
    }
    /* Treatment 2-col grid */
    .hd-treatment-cards-grid {
        display: grid;
        grid-template-columns: repeat(2, minmax(0, 1fr));
        gap: 12px;
    }
    .hd-treatment-cards-grid > .option-card {
        margin: 0 !important;
    }
}


/* Iter 1.C Step E — AggiungiViaggio "Da €X/persona" pill right.
   Mini pill nel header del trip-card. */
.hd-trip-card__from-pill {
    display: inline-flex;
    align-items: center;
    background: rgba(245, 166, 35, 0.10);
    color: var(--price-amber, #e08b1a);
    padding: 4px 10px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 700;
    line-height: 1.2;
    margin-right: 10px;
    flex-shrink: 0;
}


/* Iter 1.C owner feedback: rating chip desktop in __actions accanto a
   Save button. Mobile mantiene il chip in __meta inline. Duplicato HTML
   per evitare reflow complesso; CSS responsive mostra solo uno dei due. */
@media (min-width: 768px) {
    /* Desktop: nascondi rating chip nel __meta (inline dopo address) */
    .hd-hero-mosaic__title-block .hd-hero-mosaic__rating-chip {
        display: none !important;
    }
}
@media (max-width: 767.98px) {
    /* Mobile: nascondi rating chip nel __actions (top-right) */
    .hd-hero-mosaic__actions .hd-hero-mosaic__rating-chip {
        display: none !important;
    }
}

/* Iter 1.C owner feedback: "Raggiungi Ischia Con Noi sotto al box a
   destra va tolto" — sezione transport selector nella sidebar destra
   nascosta. Resta visibile l'accordion "Aggiungi il viaggio" sotto il
   Pacchetto Incluso che fa lo stesso lavoro (selector trasporti). */
.hd-raggiungi-ischia-card {
    display: none !important;
}


/* Iter 1.C Step K — PriceSummaryCard PROMO state (target Image #20).
   Layout when vm.promo_context.has_promo + struck price:
   - Savings band navy header con label promo + amount risparmio amber dx.
   - Body bianco: struck price + −X% pill rosso bordeaux INLINE sopra il
     prezzo grande amber. */
.hd-price-summary-card--promo {
    padding: 0 !important;
    overflow: hidden;
}
.hd-price-summary-card--promo .hd-price-summary-card__body {
    padding: 18px;
}
.hd-price-summary-card:not(.hd-price-summary-card--promo) .hd-price-summary-card__body {
    padding: 0;
}
.hd-price-summary-card__savings-band {
    background: linear-gradient(135deg, var(--primary, #1e3c72) 0%, var(--secondary, #2a5298) 100%);
    color: #fff;
    padding: 10px 16px;
    display: flex;
    align-items: center;
    gap: 8px;
    border-bottom: 2px solid var(--accent, #f5a623);
}
.hd-price-summary-card__savings-icon {
    color: var(--accent, #f5a623);
    font-size: 14px;
    line-height: 1;
}
.hd-price-summary-card__savings-label {
    font-size: 13px;
    font-weight: 700;
    flex: 1 1 auto;
    line-height: 1.2;
}
.hd-price-summary-card__savings-amount {
    font-size: 14px;
    font-weight: 800;
    color: var(--accent, #f5a623);
    white-space: nowrap;
}
/* Struck row sopra il prezzo big (legacy) + price-row inline (T.37) */
.hd-price-summary-card__struck-row {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 2px;
}
/* T.37 (2026-05-26 owner): struck + badge sconto + finale TUTTO su una riga. */
.hd-price-summary-card__price-row {
    display: flex;
    align-items: baseline;
    flex-wrap: wrap;
    column-gap: 10px;
    row-gap: 4px;
    margin-top: 2px;
}
.hd-price-summary-card__price-row .hd-price-summary-card__price {
    margin-left: auto;
}
/* T.37.c (2026-05-26 owner): label "Totale soggiorno per..." spostata
   SOTTO la price-row (era sopra). Più piccola, gray.
   T.37.d (2026-05-27 owner): override — label torna SOPRA la price-row.
   Il modifier `--below` è ora obsoleto (non più applicato dal template
   T.37.d) ma lascio la regola CSS dormiente per compat se altri use-site
   lo referenziassero. Aggiunto nuovo modifier `--below-label` per la
   price-row che ora sta SOTTO la label, con spacing top accentuato. */
.hd-price-summary-card__label--below {
    margin-top: 6px;
    margin-bottom: 0;
}
.hd-price-summary-card__price-row--below-label {
    margin-top: 8px;
}
@media (max-width: 767.98px) {
    .hd-price-summary-card__price-row {
        column-gap: 8px;
    }
    .hd-price-summary-card__price-row .hd-price-summary-card__price {
        margin-left: auto;
        font-size: 30px;
    }
}
.hd-price-summary-card__struck {
    font-size: 14px;
    color: var(--price-struck, #8b3a2f);
    text-decoration: line-through;
    font-weight: 600;
}
.hd-price-summary-card__pct-pill {
    background: #8b3a2f;
    color: #fff;
    font-size: 11px;
    font-weight: 800;
    padding: 2px 7px;
    border-radius: 999px;
    line-height: 1.3;
    letter-spacing: 0.2px;
}


/* Iter 1.C Step N — Pacchetto Incluso: Extra periodo styling. */
.hd-package-card__extra {
    margin-top: 14px;
    padding: 12px;
    background: rgba(245, 166, 35, 0.06);
    border: 1px solid rgba(245, 166, 35, 0.25);
    border-radius: 10px;
    grid-column: 1 / -1;
}
.hd-package-card__extra-header {
    display: flex;
    align-items: center;
    gap: 8px;
    margin-bottom: 8px;
}
.hd-package-card__extra-badge {
    background: var(--accent, #f5a623);
    color: #fff;
    font-size: 10.5px;
    font-weight: 800;
    padding: 3px 8px;
    border-radius: 999px;
    letter-spacing: 0.4px;
    text-transform: uppercase;
}
.hd-package-card__extra-title {
    font-size: 14px;
    font-weight: 700;
    color: var(--ink, #1a1a1a);
}
.hd-package-card__extra-items {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    gap: 6px 14px;
}
.hd-package-card__item--extra i {
    color: var(--accent, #f5a623) !important;
}

/* ============================================================
   2026-05-25 Iter 1.C Step S — Aggiungi il viaggio inline
   (tabs + cards radio). Design da bundle handoff: tabs
   orizzontali, cards con radio bordo arancione su selezione,
   prezzo a destra, footer total impact.
   ============================================================ */
.hd-trip-card__current {
    display: inline-flex;
    align-items: center;
    background: var(--light-bg, #f5f1ea);
    color: #1a2235;
    border-radius: 999px;
    padding: 6px 14px;
    font-size: 13px;
    font-weight: 700;
    margin-right: 8px;
}
.hd-trip-card__current-sep { margin: 0 4px; opacity: 0.5; }
.hd-trip-card__current-price { color: var(--price-amber, #e08b1a); }

.hd-trip-card__inner {
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid #f1f3f5;
}

.hd-trip-tabs {
    display: flex;
    gap: 24px;
    flex-wrap: wrap;
    border-bottom: 1px solid #e9ecef;
    margin-bottom: 16px;
}
.hd-trip-tab {
    background: none;
    border: none;
    padding: 8px 0 12px;
    font-size: 14px;
    font-weight: 600;
    color: #6b7280;
    cursor: pointer;
    position: relative;
    transition: color 0.15s;
}
.hd-trip-tab:hover { color: #1a2235; }
.hd-trip-tab.active {
    color: var(--primary, #1e3c72);
}
.hd-trip-tab.active::after {
    content: '';
    position: absolute;
    left: 0;
    right: 0;
    bottom: -1px;
    height: 2px;
    background: var(--primary, #1e3c72);
}

.hd-trip-panel__intro {
    font-size: 13px;
    color: #6b7280;
    margin-bottom: 10px;
}
.hd-trip-panel__intro--note {
    background: rgba(30, 60, 114, 0.04);
    padding: 12px 14px;
    border-radius: 10px;
    color: #1a2235;
}

.hd-trip-option {
    display: grid;
    grid-template-columns: auto 1fr auto;
    align-items: center;
    gap: 14px;
    border: 1.5px solid #e9ecef;
    border-radius: 12px;
    padding: 14px 16px;
    margin-bottom: 8px;
    cursor: pointer;
    transition: border-color 0.15s, background 0.15s;
    background: #fff;
}
.hd-trip-option:hover { border-color: #d1d5db; }
.hd-trip-option.is-selected {
    border-color: var(--accent, #f5a623);
    background: rgba(245, 166, 35, 0.04);
}
.hd-trip-option__radio { display: none; }
.hd-trip-option__radio-visual {
    width: 18px;
    height: 18px;
    border-radius: 50%;
    border: 2px solid #d1d5db;
    flex-shrink: 0;
    position: relative;
}
.hd-trip-option.is-selected .hd-trip-option__radio-visual {
    border-color: var(--accent, #f5a623);
}
.hd-trip-option.is-selected .hd-trip-option__radio-visual::after {
    content: '';
    position: absolute;
    inset: 3px;
    border-radius: 50%;
    background: var(--accent, #f5a623);
}
.hd-trip-option__body {
    display: flex;
    flex-direction: column;
    gap: 2px;
    min-width: 0;
}
.hd-trip-option__title {
    font-size: 15px;
    font-weight: 700;
    color: #1a2235;
    display: inline-flex;
    align-items: center;
    gap: 8px;
}
.hd-trip-option__title i {
    color: var(--primary, #1e3c72);
}
.hd-trip-option__meta {
    font-size: 13px;
    color: #6b7280;
}
.hd-trip-option__meta--accent {
    color: var(--price-amber, #e08b1a);
}
.hd-trip-option__price {
    text-align: right;
    line-height: 1.15;
}
.hd-trip-option__price-big {
    display: block;
    font-size: 18px;
    font-weight: 800;
    color: var(--price-amber, #e08b1a);
}
.hd-trip-option__price-unit {
    display: block;
    font-size: 11px;
    color: #6b7280;
}

.hd-trip-footer {
    margin-top: 12px;
    padding: 10px 14px;
    background: rgba(30, 60, 114, 0.04);
    border-radius: 10px;
    font-size: 13px;
    color: #1a2235;
}
.hd-trip-footer strong { color: var(--price-amber, #e08b1a); }

@media (max-width: 768px) {
    .hd-trip-tabs { gap: 14px; }
    .hd-trip-tab { font-size: 13px; }
    .hd-trip-option { grid-template-columns: auto 1fr; }
    .hd-trip-option__price { grid-column: 1 / -1; text-align: left; padding-left: 32px; }
    .hd-trip-option__price-big { display: inline; font-size: 16px; }
    .hd-trip-option__price-unit { display: inline; margin-left: 4px; }
}

/* Step S.2 — Viaggio dalla tua città search */
.hd-trip-city-search {
    position: relative;
}
.hd-trip-city-search input {
    width: 100%;
    border: 1.5px solid #e9ecef;
    border-radius: 10px;
    padding: 10px 14px;
    font-size: 15px;
}
.hd-trip-city-search input:focus {
    outline: none;
    border-color: var(--primary, #1e3c72);
}
.hd-trip-city-results {
    position: absolute;
    top: calc(100% + 4px);
    left: 0;
    right: 0;
    background: #fff;
    border: 1px solid #e9ecef;
    border-radius: 10px;
    box-shadow: 0 8px 24px rgba(30, 60, 114, 0.12);
    max-height: 280px;
    overflow-y: auto;
    z-index: 50;
}
.hd-trip-city-result {
    display: flex;
    justify-content: space-between;
    align-items: center;
    padding: 10px 14px;
    text-decoration: none;
    color: #1a2235;
    border-bottom: 1px solid #f1f3f5;
    transition: background 0.1s;
    font-size: 14px;
}
.hd-trip-city-result:last-child { border-bottom: none; }
.hd-trip-city-result:hover {
    background: var(--light-bg, #f5f1ea);
    color: var(--primary, #1e3c72);
}
.hd-trip-city-result__price {
    background: rgba(40, 167, 69, 0.12);
    color: #198754;
    border-radius: 999px;
    padding: 3px 10px;
    font-size: 12px;
    font-weight: 700;
}
.hd-trip-city-result--empty {
    padding: 14px;
    color: #6b7280;
    font-size: 13px;
    text-align: center;
}
/* Header banner quando search non trova città dirette e mostra "vicine" */
.hd-trip-city-result--header {
    padding: 10px 14px;
    background: rgba(245, 166, 35, 0.08);
    color: #1a2235;
    font-size: 13px;
    border-bottom: 1px solid #f1f3f5;
    cursor: default;
    pointer-events: none;
}
.hd-trip-city-result--header strong { color: var(--price-amber, #e08b1a); }
.hd-trip-city-result--nearby {
    border-left: 3px solid var(--price-amber, #e08b1a);
}
.hd-trip-city-result__dist {
    color: #6b7280;
    font-size: 11px;
    margin-left: 4px;
    font-weight: 400;
}

.hd-trip-option__rt-pill {
    background: var(--light-bg, #f5f1ea);
    color: #6b7280;
    border-radius: 999px;
    padding: 2px 8px;
    font-size: 10px;
    font-weight: 700;
}
.hd-trip-option__meta--success {
    color: #198754;
}
.hd-trip-option.is-disabled {
    opacity: 0.5;
    pointer-events: none;
}

/* ============================================================
   2026-05-25 Iter 1.C Step T.2 — Scarcity pill (Ultime N camere)
   Variante "pill" arancione/ambra con icona round dot fiamma.
   Usata in 2 surface: PriceSummaryCard (sotto ExpiryBand) e
   stepped header "1 · Scegli la tua camera".
   ============================================================ */
.hd-scarcity-row {
    background: #fff;
    padding: 12px 18px 0;
}
/* T.38 (2026-05-26 owner): riduce spazio tra ScarcityPill e price-row
   sotto. Era ~30px verticale, ora ~4px (owner: ulteriore riduzione). */
.hd-scarcity-row + .hd-price-summary-card__body {
    padding-top: 2px !important;
}

/* T.41 (2026-05-26 owner): info banner "Trasferimenti e Passaggi Marittimi
   inclusi" in cima ai panel city / ferry / transfer. NO panel "Traghetto
   con auto" (auto è opzione paid separata). Gradient verde soft + check
   icon, padding compact mobile-friendly. */
.hd-trip-panel__included {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: linear-gradient(135deg, rgba(40, 167, 69, 0.10), rgba(40, 167, 69, 0.04));
    color: #1f7837;
    border: 1px solid rgba(40, 167, 69, 0.25);
    border-radius: 999px;
    padding: 6px 14px;
    font-size: 13px;
    font-weight: 700;
    margin-bottom: 12px;
    line-height: 1.2;
    max-width: max-content;
}
.hd-trip-panel__included i {
    color: #28a745;
    font-size: 14px;
}
@media (max-width: 767.98px) {
    .hd-trip-panel__included {
        font-size: 12px;
        padding: 5px 12px;
        margin-bottom: 10px;
        white-space: normal;
        max-width: 100%;
    }
}
.hd-scarcity-pill {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    color: var(--price-amber, #e08b1a);
    font-size: 13px;
    font-weight: 700;
    line-height: 1.2;
    white-space: nowrap;
}
.hd-scarcity-pill__dot {
    width: 10px;
    height: 10px;
    border-radius: 50%;
    background: var(--price-amber, #e08b1a);
    flex-shrink: 0;
    box-shadow: 0 0 0 3px rgba(224, 139, 26, 0.18);
}
.hd-scarcity-pill strong {
    font-weight: 800;
    color: var(--price-amber, #e08b1a);
}
.hd-step-header__right {
    display: inline-flex;
    align-items: center;
    gap: 14px;
}
.hd-step-header__right .hd-scarcity-pill {
    /* nel header room è inline col counter */
    font-size: 12.5px;
}

@media (max-width: 575.98px) {
    .hd-step-header__right { gap: 8px; flex-wrap: wrap; justify-content: flex-end; }
    .hd-scarcity-pill { font-size: 12px; }
}

/* Chiama + WhatsApp side-by-side compact */
.hd-contact-row {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 8px;
    margin-top: 8px;
}
.hd-contact-btn {
    padding: 8px 10px;
    font-size: 13px;
    font-weight: 700;
    border-radius: 10px;
    color: #fff !important;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    white-space: nowrap;
}
.hd-contact-btn i { font-size: 14px; }
.hd-contact-btn--phone { background: var(--primary, #1e3c72); }
.hd-contact-btn--phone:hover { background: var(--primary-dark, #152a4f); color: #fff; }
.hd-contact-btn--whatsapp { background: #25D366; }
.hd-contact-btn--whatsapp:hover { background: #1ebe5d; color: #fff; }

/* Trip actions Conferma/Rimuovi */
.hd-trip-actions {
    display: flex;
    gap: 10px;
    margin-top: 12px;
    flex-wrap: wrap;
}
.hd-trip-action {
    flex: 1;
    min-width: 0;
    padding: 10px 14px;
    border-radius: 10px;
    font-size: 14px;
    font-weight: 700;
    border: none;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    transition: background 0.15s, border-color 0.15s;
}
.hd-trip-action--remove {
    background: #fff;
    color: #6b7280;
    border: 1.5px solid #e9ecef;
}
.hd-trip-action--remove:hover { color: #8b3a2f; border-color: #8b3a2f; }
.hd-trip-action--confirm {
    background: var(--accent, #f5a623);
    color: #fff;
}
.hd-trip-action--confirm:hover { background: var(--accent-hover, #e09000); }

/* Auto > 4m facoltativo (sub-option sotto la card car) */
.hd-trip-option-wrap {
    display: flex;
    flex-direction: column;
    gap: 0;
    margin-bottom: 8px;
}
.hd-trip-option-wrap .hd-trip-option { margin-bottom: 0; border-bottom-left-radius: 0; border-bottom-right-radius: 0; }
.hd-trip-suboption {
    display: grid;
    grid-template-columns: auto 1fr auto;
    align-items: center;
    gap: 10px;
    padding: 10px 16px;
    background: #fafaf6;
    border: 1.5px solid #e9ecef;
    border-top: none;
    border-bottom-left-radius: 12px;
    border-bottom-right-radius: 12px;
    cursor: pointer;
    font-size: 13px;
    color: #374151;
}
.hd-trip-suboption:hover { background: #f5f1ea; }
.hd-trip-suboption input[type="checkbox"] {
    accent-color: var(--accent, #f5a623);
    width: 16px; height: 16px;
    cursor: pointer;
}
.hd-trip-suboption__body i { color: var(--primary, #1e3c72); margin-right: 4px; }
.hd-trip-suboption__price {
    font-weight: 800;
    color: var(--price-amber, #e08b1a);
}

/* "Vedi foto" pill cliccabile sopra/sotto la thumbnail della room card */
.hd-room-card-thumb-wrap {
    flex-shrink: 0;
    cursor: pointer;
    display: flex !important;
    flex-direction: column;
    align-items: center;
    gap: 6px;
}
.hd-room-card-thumb-wrap .room-card-thumb {
    display: block;
}
.hd-room-card-photos-btn {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    background: var(--primary, #1e3c72);
    color: #fff;
    font-size: 11px;
    font-weight: 700;
    padding: 4px 10px;
    border-radius: 999px;
    white-space: nowrap;
    transition: background 0.15s;
}
.hd-room-card-thumb-wrap:hover .hd-room-card-photos-btn {
    background: var(--primary-dark, #152a4f);
}

/* Step T.5 — box Posizione + mappa full-width 1440 anche nello stato with-date.
   Occupa entrambe le colonne della row .col-lg-7 + .col-lg-8 sottostante. */
.hd-position-col {
    flex: 0 0 100% !important;
    max-width: 100% !important;
    width: 100% !important;
}
.hd-position-card {
    width: 100%;
}

/* Step T.6 — Servizi full-width 1440 (era col-lg-8 = ~933px) */
.hd-services-col {
    flex: 0 0 100% !important;
    max-width: 100% !important;
    width: 100% !important;
}

/* "Vedi foto" inline — testo semplice con icona, no box (Step T.6.b owner) */
.hd-room-card-photos-btn--inline {
    display: inline-flex !important;
    align-items: center;
    gap: 4px;
    background: transparent;
    color: var(--primary, #1e3c72) !important;
    font-size: 12px;
    font-weight: 600;
    padding: 0;
    margin-left: 10px;
    border: none;
    cursor: pointer;
    vertical-align: middle;
    text-decoration: none;
    transition: color 0.15s;
}
.hd-room-card-photos-btn--inline:hover {
    color: var(--accent, #f5a623) !important;
    text-decoration: underline;
}
.hd-room-card-photos-btn--inline i { font-size: 14px; }

/* Step T.8 — Wishlist heart nel PriceSummaryCard */
.hd-price-summary-card__label-row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 8px;
    margin-bottom: 4px;
}
.hd-wishlist-heart {
    background: none;
    border: none;
    padding: 4px 8px;
    cursor: pointer;
    color: #d1d5db;
    font-size: 22px;
    line-height: 1;
    transition: color 0.15s, transform 0.15s;
}
.hd-wishlist-heart:hover {
    color: #e08b1a;
    transform: scale(1.1);
}
.hd-wishlist-heart.is-active {
    color: #e74c3c;
}
.hd-wishlist-heart.is-active:hover {
    color: #c0392b;
}

/* Step T.22.b — preventivo + heart su stessa riga, button più compatto */
.hd-quote-row {
    display: grid;
    grid-template-columns: 1fr auto;
    gap: 8px;
    margin-top: 8px;
    align-items: stretch;
}
.hd-quote-btn {
    padding: 8px 14px !important;
    font-size: 13px !important;
    font-weight: 700;
    border-radius: 10px !important;
    border: 1.5px solid var(--primary, #1e3c72) !important;
    color: var(--primary, #1e3c72) !important;
    background: #fff !important;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
}
.hd-quote-btn:hover {
    background: var(--light-bg, #f5f1ea) !important;
}
.hd-quote-btn i { font-size: 14px; }
.hd-wishlist-heart--inline {
    width: 38px;
    height: 38px;
    border: 1.5px solid #e9ecef;
    border-radius: 10px;
    background: #fff;
    padding: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    transition: border-color 0.15s, color 0.15s, background 0.15s;
}
.hd-wishlist-heart--inline:hover {
    border-color: #e74c3c;
    color: #e74c3c;
    transform: none;
    background: #fff;
}
.hd-wishlist-heart--inline.is-active {
    border-color: #e74c3c;
    background: rgba(231, 76, 60, 0.08);
}

/* Step T.11 — "Ti potrebbe interessare" similar hotels (3-col grid) */
.hd-similar-section { margin-top: 24px; }
.hd-similar-card {
    background: #fff;
    border: 1px solid #e9ecef;
    border-radius: 16px;
    box-shadow: 0 8px 30px rgba(30, 60, 114, 0.10);
    padding: 22px 24px;
}
.hd-similar-card__title {
    color: var(--primary, #1e3c72);
    font-size: 1.2rem;
    font-weight: 700;
    margin-bottom: 18px;
    display: flex;
    align-items: center;
    gap: 8px;
}
.hd-similar-card__title i { color: #e74c3c; }
.hd-similar-grid {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
    gap: 16px;
}
.hd-similar-tile {
    display: flex;
    flex-direction: column;
    border: 1px solid #e9ecef;
    border-radius: 12px;
    overflow: hidden;
    text-decoration: none;
    color: inherit;
    transition: transform 0.15s, box-shadow 0.15s, border-color 0.15s;
    background: #fff;
}
.hd-similar-tile:hover {
    transform: translateY(-3px);
    box-shadow: 0 8px 24px rgba(30, 60, 114, 0.10);
    border-color: var(--accent, #f5a623);
    color: inherit;
}
.hd-similar-tile__img {
    position: relative;
    width: 100%;
    aspect-ratio: 16 / 10;
    overflow: hidden;
    background: #f5f1ea;
}
.hd-similar-tile__img img {
    width: 100%; height: 100%; object-fit: cover;
    transition: transform 0.3s;
}
.hd-similar-tile:hover .hd-similar-tile__img img { transform: scale(1.04); }
.hd-similar-tile__img-placeholder {
    display: flex; align-items: center; justify-content: center;
    width: 100%; height: 100%; font-size: 2rem; color: #d1d5db;
}
.hd-similar-tile__body { padding: 12px 14px; }
.hd-similar-tile__name {
    font-size: 15px;
    font-weight: 700;
    color: #1a2235;
    line-height: 1.3;
    margin-bottom: 4px;
}
.hd-similar-tile__meta {
    display: flex;
    align-items: center;
    gap: 10px;
    font-size: 12.5px;
    color: #6b7280;
    flex-wrap: wrap;
}
.hd-similar-tile__stars { color: var(--accent, #f5a623); letter-spacing: 1px; }
.hd-similar-tile__rating { margin-top: 8px; }
.hd-similar-tile__rating-chip {
    background: rgba(40, 167, 69, 0.12);
    color: #198754;
    border-radius: 999px;
    padding: 2px 8px;
    font-size: 11.5px;
    font-weight: 700;
}

@media (max-width: 768px) {
    .hd-similar-grid { grid-template-columns: 1fr; }
}

/* Step T.3.b — Toast container feedback (top-right) */
.hd-toast-container {
    position: fixed;
    top: 90px;
    right: 24px;
    z-index: 2000;
    display: flex;
    flex-direction: column;
    gap: 10px;
    pointer-events: none;
}
.hd-toast {
    background: #1a2235;
    color: #fff;
    padding: 12px 18px;
    border-radius: 12px;
    box-shadow: 0 12px 32px rgba(0, 0, 0, 0.25);
    font-size: 14px;
    font-weight: 600;
    min-width: 240px;
    max-width: 360px;
    transform: translateX(20px);
    opacity: 0;
    transition: transform 0.25s ease, opacity 0.25s ease;
    pointer-events: auto;
}
.hd-toast.is-visible { transform: translateX(0); opacity: 1; }
.hd-toast i { font-size: 18px; margin-right: 6px; vertical-align: middle; }
.hd-toast small {
    display: block;
    font-size: 12px;
    font-weight: 400;
    opacity: 0.85;
    margin-top: 2px;
}
.hd-toast--success { background: #198754; }
.hd-toast--success i { color: #c4f0d2; }
.hd-toast--info { background: var(--primary, #1e3c72); }

/* Step T.12.b — stato "viaggio aggiunto" sul trip-card */
.hd-trip-card.is-trip-added {
    background: linear-gradient(180deg, #f0fdf4 0%, #fff 60%);
    border-color: #198754;
}
.hd-trip-card.is-trip-added .hd-trip-card__icon-wrap {
    background: #198754 !important;
    color: #fff;
}
.hd-trip-card.is-trip-added .hd-trip-card__icon-wrap i::before {
    content: "\F26B"; /* bi-check-circle-fill */
}
.hd-trip-card.is-trip-added .hd-trip-card__title {
    color: #198754;
}
.hd-trip-card.is-trip-added .hd-trip-card__title::before {
    content: "✓ ";
    font-weight: 800;
}
.hd-trip-card.is-trip-added .hd-trip-card__subtitle {
    color: #1a2235;
    font-weight: 600;
}
/* Step T.26/T.30 — Quando trip confermato: nasconde i tabs originali
   ma LASCIA visibile il summary VariantC (ora dentro #hdTripBody).
   Il collapse Bootstrap gestisce show/hide dell'intero body — così
   l'utente può riaprire l'accordion col chevron e vedere il summary
   (con bottoni Modifica/Rimuovi). 2026-05-26 owner request. */
.hd-trip-card.is-trip-added .hd-trip-card__inner {
    display: none !important;
}

/* Step T.14 — chip trasporto nel PriceSummaryCard con prezzo a destra */
.hd-price-summary-card__chip--transport {
    justify-content: space-between;
}
.hd-price-summary-card__chip-price {
    font-weight: 800;
    color: var(--price-amber, #e08b1a);
    font-size: 13px;
    margin-left: auto;
    white-space: nowrap;
}

/* Step T.21 — "Come paghi" 2-step numerati con connettore verticale.
   Design owner: header shield primary, step num round in pill primary,
   valori navy bold a destra. */
.hd-price-summary-card__payments {
    margin-top: 16px;
    padding: 14px 16px;
    background: #fff;
    border: 1px solid #e9ecef;
    border-radius: 12px;
}
.hd-payments__header {
    display: flex;
    align-items: center;
    gap: 7px;
    margin-bottom: 12px;
    font-size: 12px;
    font-weight: 800;
    color: var(--primary, #1e3c72);
    letter-spacing: 0.6px;
}
.hd-payments__header i {
    color: var(--primary, #1e3c72);
    font-size: 14px;
}
.hd-payments__steps {
    position: relative;
}
/* Connettore verticale tra step (linea tratteggiata) */
.hd-payments__steps::before {
    content: "";
    position: absolute;
    left: 13px;
    top: 24px;
    bottom: 24px;
    width: 0;
    border-left: 2px dashed #e9ecef;
    z-index: 0;
}
.hd-payments__step {
    display: grid;
    grid-template-columns: auto 1fr auto;
    align-items: center;
    gap: 12px;
    padding: 6px 0;
    position: relative;
    z-index: 1;
}
.hd-payments__step + .hd-payments__step { padding-top: 10px; }
.hd-payments__step-num {
    width: 26px;
    height: 26px;
    border-radius: 50%;
    background: #fff;
    border: 2px solid var(--primary, #1e3c72);
    color: var(--primary, #1e3c72);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 12px;
    font-weight: 800;
    flex-shrink: 0;
}
.hd-payments__step-num--accent {
    border-color: var(--accent, #f5a623);
    color: var(--accent, #f5a623);
}
.hd-payments__step-body {
    min-width: 0;
}
.hd-payments__step-title {
    font-size: 13.5px;
    font-weight: 700;
    color: #1a2235;
    line-height: 1.25;
}
.hd-payments__step-when {
    color: #6b7280;
    font-weight: 500;
}
.hd-payments__step-meta {
    font-size: 11.5px;
    color: #6b7280;
    margin-top: 2px;
}
.hd-payments__step-value {
    font-weight: 800;
    color: var(--price-amber, #e08b1a);
    font-size: 14px;
    white-space: nowrap;
}
.hd-payments__step--note .hd-payments__step-title { font-size: 12.5px; }
.hd-payments__step--note .hd-payments__step-meta { font-size: 11px; }

/* ============================================================
   2026-05-25 Step T.26 — Transport Block VariantC (POST-selezione)
   Stepper orizzontale con check + breakdown table + payment alert.
   Spec design: gradient navy header, alert giallo-arancione,
   Rimuovi outline rosso, Conferma amber.
   ============================================================ */
.hd-transport-card {
    background: #fff;
    border: 1px solid var(--ii-hair, #e9ecef);
    border-radius: 14px;
    overflow: hidden;
    margin-top: 14px;
    box-shadow: 0 4px 16px rgba(30, 60, 114, 0.08);
}
.hd-transport-card__header {
    background: linear-gradient(135deg, var(--ii-primary, #1e3c72) 0%, var(--ii-secondary, #2a5298) 100%);
    color: #fff;
    padding: 14px 18px;
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 16px;
}
.hd-transport-card__header-left { min-width: 0; flex: 1; }
.hd-transport-card__eyebrow {
    font-size: 10.5px;
    font-weight: 800;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.78);
    margin-bottom: 4px;
}
.hd-transport-card__title {
    font-size: 15px;
    font-weight: 700;
    color: #fff;
    line-height: 1.3;
}
.hd-transport-card__route { color: rgba(255, 255, 255, 0.92); font-weight: 600; }
.hd-transport-card__header-right { text-align: right; flex-shrink: 0; }
.hd-transport-card__total-label {
    font-size: 10.5px;
    font-weight: 800;
    letter-spacing: 1px;
    text-transform: uppercase;
    color: rgba(255, 255, 255, 0.78);
}
.hd-transport-card__total {
    font-size: 22px;
    font-weight: 800;
    color: var(--ii-priceAmber, #f5a623);
    line-height: 1;
    margin-top: 2px;
}

.hd-transport-stepper {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(140px, 1fr));
    gap: 0;
    padding: 14px 18px;
    border-bottom: 1px solid var(--ii-hair, #e9ecef);
}
.hd-transport-step {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 6px 12px 6px 0;
    border-right: 1px dashed #e5e1d8;
}
.hd-transport-step:last-child { border-right: none; }
.hd-transport-step__check {
    width: 22px;
    height: 22px;
    border-radius: 50%;
    background: var(--ii-greenBest, #3d8a5e);
    color: #fff;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    font-size: 14px;
    line-height: 1;
}
.hd-transport-step__body { min-width: 0; }
.hd-transport-step__label {
    font-size: 10px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: 0.5px;
    color: var(--ii-ink3, #8a8a8a);
}
.hd-transport-step__value {
    font-size: 13px;
    font-weight: 700;
    color: #1a2235;
    margin-top: 1px;
    line-height: 1.2;
}

.hd-transport-dates {
    display: flex;
    align-items: center;
    gap: 8px;
    padding: 10px 18px;
    font-size: 12.5px;
    color: var(--ii-ink3, #8a8a8a);
    border-bottom: 1px solid var(--ii-hair, #e9ecef);
}
.hd-transport-dates i { color: var(--ii-primary, #1e3c72); }

.hd-transport-breakdown {
    padding: 12px 18px;
}
.hd-transport-breakdown__row {
    display: flex;
    justify-content: space-between;
    align-items: center;
    gap: 10px;
    padding: 6px 0;
    font-size: 13px;
    color: #1a2235;
}
.hd-transport-breakdown__row + .hd-transport-breakdown__row {
    border-top: 1px dashed #f1f3f5;
}
.hd-transport-breakdown__label {
    color: #4a4a4a;
    display: flex;
    align-items: center;
    gap: 8px;
}
.hd-transport-breakdown__value {
    font-weight: 800;
    color: #1a2235;
    white-space: nowrap;
}
.hd-transport-breakdown__badge {
    background: rgba(245, 166, 35, 0.15);
    color: #b96b00;
    border-radius: 999px;
    padding: 2px 8px;
    font-size: 10px;
    font-weight: 800;
    letter-spacing: 0.4px;
}

.hd-transport-train-note {
    margin: 0 18px 12px;
    padding: 10px 12px;
    background: rgba(30, 60, 114, 0.05);
    border-left: 3px solid var(--ii-primary, #1e3c72);
    border-radius: 6px;
    font-size: 12px;
    color: #4a4a4a;
    display: flex;
    align-items: center;
    gap: 8px;
}
.hd-transport-train-note i { color: var(--ii-primary, #1e3c72); }

.hd-transport-pay-alert {
    margin: 0 18px 12px;
    padding: 10px 14px;
    background: linear-gradient(90deg, rgba(245, 166, 35, 0.12) 0%, rgba(245, 166, 35, 0.06) 100%);
    border: 1px solid rgba(245, 166, 35, 0.35);
    border-radius: 8px;
    font-size: 12px;
    color: #8b3a2f;
    display: flex;
    align-items: center;
    gap: 8px;
    font-weight: 600;
}
.hd-transport-pay-alert i { color: var(--ii-priceAmber, #e08b1a); font-size: 15px; flex-shrink: 0; }

.hd-transport-actions {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
    padding: 12px 18px 16px;
}
.hd-transport-action {
    padding: 10px 14px;
    border-radius: 10px;
    font-size: 13.5px;
    font-weight: 700;
    border: none;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 6px;
    transition: background 0.15s, border-color 0.15s, color 0.15s;
}
.hd-transport-action--remove {
    background: #fff;
    color: #c0392b;
    border: 1.5px solid #c0392b;
}
.hd-transport-action--remove:hover { background: #c0392b; color: #fff; }
.hd-transport-action--confirm {
    background: var(--ii-accent, var(--accent, #f5a623));
    color: #fff;
}
.hd-transport-action--confirm:hover { background: var(--ii-accent, var(--accent-hover, #e09000)); }

@media (max-width: 575.98px) {
    .hd-transport-card__header { flex-direction: column; align-items: flex-start; }
    .hd-transport-card__header-right { text-align: left; }
    .hd-transport-stepper { grid-template-columns: 1fr; }
    .hd-transport-step { border-right: none; border-bottom: 1px dashed #e5e1d8; }
    .hd-transport-step:last-child { border-bottom: none; }
    .hd-transport-actions { grid-template-columns: 1fr; }
}

/* ============================================================
   2026-05-25 Step T.29 — Mobile refactor (≤768px)
   Promo strip verde sotto hero + "Gli ospiti adorano" 3-bullets.
   ============================================================ */
.hd-mobile-promo-strip {
    display: flex;
    align-items: center;
    gap: 10px;
    margin: 12px 14px 8px;
    padding: 10px 12px;
    background: linear-gradient(95deg, rgba(40, 167, 69, 0.10) 0%, rgba(40, 167, 69, 0.04) 100%);
    border: 1px solid rgba(40, 167, 69, 0.30);
    border-radius: 10px;
}
.hd-mobile-promo-strip__check {
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: #198754;
    color: #fff;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    font-size: 14px;
}
.hd-mobile-promo-strip__body { min-width: 0; flex: 1; }
.hd-mobile-promo-strip__label {
    font-size: 13px;
    font-weight: 700;
    color: #198754;
    line-height: 1.2;
}
.hd-mobile-promo-strip__amount {
    font-size: 12px;
    color: #1a2235;
    margin-top: 1px;
}
.hd-mobile-promo-strip__amount strong { color: var(--price-amber, #e08b1a); font-weight: 800; }

.hd-mobile-guests-love {
    margin: 8px 14px 12px;
    padding: 12px;
    background: #fff;
    border: 1px solid #e9ecef;
    border-radius: 10px;
}
.hd-mobile-guests-love__title {
    font-size: 11px;
    font-weight: 800;
    color: var(--price-amber, #e08b1a);
    letter-spacing: 1px;
    margin-bottom: 8px;
}
.hd-mobile-guests-love__list {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 5px;
}
.hd-mobile-guests-love__list li {
    font-size: 13px;
    color: #1a2235;
    display: flex;
    align-items: center;
    gap: 6px;
}
.hd-mobile-guests-love__list li i {
    color: #198754;
    font-size: 14px;
    flex-shrink: 0;
}

/* Step T.29.h — Variante "intro" mobile no-date: hd-guests-love subito
   dopo hero. Spacing ridotto + margin laterali a 14px. */
.hd-guests-love--mobile-intro {
    margin: 12px 14px 8px !important;
}
/* Nasconde la copia legacy di hd-guests-love (sotto in col-12) su mobile
   no-date per evitare duplicazione (la intro sopra basta). */
body.has-hd-cerca-prezzo-sidebar .col-12 > .hd-guests-love {
    display: none;
}
@media (min-width: 768px) {
    body.has-hd-cerca-prezzo-sidebar .col-12 > .hd-guests-love {
        display: block !important;
    }
}

/* Step T.29 Fase 2 — Header sticky mobile (back + logo + heart + photo count) */
.hd-mobile-header {
    position: sticky;
    top: 0;
    z-index: 1100;
    background: #fff;
    padding: 8px 14px;
    border-bottom: 1px solid #e9ecef;
    box-shadow: 0 2px 8px rgba(0, 0, 0, 0.04);
    align-items: center;
    gap: 10px;
    min-height: 52px;
}
.hd-mobile-header__back {
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: var(--light-bg, #f5f1ea);
    color: var(--primary, #1e3c72);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 18px;
    text-decoration: none;
    flex-shrink: 0;
}
.hd-mobile-header__back:hover { background: #e9ecef; }
.hd-mobile-header__logo {
    flex: 1;
    text-align: center;
    font-size: 16px;
    font-weight: 800;
    text-decoration: none;
    color: var(--primary, #1e3c72);
    letter-spacing: -0.3px;
    display: inline-flex;
    align-items: center;
    justify-content: center;
}
/* T.83 2026-05-27 — logo portal-aware <img> (replaces hardcoded InfoIschia spans).
   Height capped to fit 56px sticky header; width auto preserves aspect ratio
   for whatever logo `site_logo_url` resolves to per-portal. */
.hd-mobile-header__logo-img {
    height: 28px;
    max-height: 32px;
    width: auto;
    max-width: 140px;
    object-fit: contain;
    display: block;
}
.hd-mobile-header__actions {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    flex-shrink: 0;
}
.hd-mobile-header__heart {
    width: 34px;
    height: 34px;
    border-radius: 50%;
    background: var(--light-bg, #f5f1ea);
    color: #6b7280;
    border: none;
    padding: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
    cursor: pointer;
    transition: color 0.15s, background 0.15s;
}
.hd-mobile-header__heart:hover { color: #e74c3c; }
.hd-mobile-header__heart.is-active { color: #e74c3c; background: rgba(231, 76, 60, 0.10); }
.hd-mobile-header__photo-count {
    background: var(--primary, #1e3c72);
    color: #fff;
    padding: 6px 12px;
    border-radius: 999px;
    font-size: 11.5px;
    font-weight: 700;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    white-space: nowrap;
}
.hd-mobile-header__photo-count i { font-size: 12px; }

/* Sposta hero sotto l'header sticky + nasconde title-row sopra le foto */
@media (max-width: 767.98px) {
    /* Step T.29.d — owner request: la navbar legacy del sito resta (è l'header
       standard del sito). Rimuoviamo invece il hd-mobile-header duplicato. */
    .hd-mobile-header { display: none !important; }

    /* Step T.29.k — owner request: rimuovi su mobile (con date selezionate)
       3 elementi: banner promo verde "Al volo", pills distanze hotel,
       box "Il tuo soggiorno" legacy con date+adulti+Modifica selezione. */
    .hd-mobile-promo-strip { display: none !important; }
    .hero-distances-strip { display: none !important; }
    .booking-main > .row > .col-lg-3:first-child { display: none !important; }
    /* Step T.29.l — owner request: rimuovi su mobile la descrizione
       "Aliscafo, traghetto o transfer dall'aeroporto — opzionale" sotto
       il titolo del box "Aggiungi il viaggio". */
    .hd-trip-card__subtitle { display: none !important; }

    /* Step T.29.n/p — Mobile room cards: nome+Vedi foto+prezzi tutti su
       UNICA riga (no wrap). Single col grid, owner request. */
    .hd-room-cards-grid {
        grid-template-columns: 1fr !important;
        gap: 10px;
    }
    .hd-room-cards-grid .option-card {
        padding: 16px 14px;
        border: 1.5px solid #e9ecef;
        border-radius: 14px;
        background: #fff;
    }
    .hd-room-cards-grid .option-card.selected {
        border-color: var(--accent, #f5a623);
        background: rgba(245, 166, 35, 0.08);
    }
    /* Outer flex row no-wrap: forza tutto su 1 riga */
    .hd-room-cards-grid .option-card > .d-flex.align-items-start {
        flex-wrap: nowrap !important;
        align-items: center !important;
        gap: 6px !important;
    }
    .hd-room-cards-grid .option-card > .d-flex.align-items-start > div[style*="flex: 1"] {
        min-width: 0;
        display: flex;
        align-items: baseline;
        gap: 6px;
        flex-wrap: nowrap;
    }
    .hd-room-cards-grid .option-card > .d-flex.align-items-start > div[style*="flex: 1"] > .mb-1 {
        display: flex;
        align-items: baseline;
        gap: 6px;
        margin-bottom: 0 !important;
        flex-wrap: nowrap;
        white-space: nowrap;
    }
    .hd-room-cards-grid .room-card-name {
        font-size: 14px !important;   /* 2026-06-06 owner — nome più piccolo su mobile così "Vedi foto" sta in riga */
        font-weight: 800;
        color: #1a2235;
        line-height: var(--lh-tight);
        white-space: nowrap;
    }
    /* "Vedi foto" come link navy underline (no pill bg) */
    .hd-room-cards-grid .hd-room-card-photos-btn--inline {
        background: transparent !important;
        color: var(--primary, #1e3c72) !important;
        font-size: 13px !important;
        font-weight: 700 !important;
        padding: 0 !important;
        margin-left: 2px;
        text-decoration: underline;
        border-radius: 0 !important;
        white-space: nowrap;
    }
    .hd-room-cards-grid .hd-room-card-photos-btn--inline i { display: none; }
    /* Prezzi a destra: nowrap */
    .hd-room-cards-grid .room-card-price-col {
        display: flex !important;
        flex-direction: row !important;
        align-items: baseline;
        gap: 6px;
        flex-shrink: 0;
        white-space: nowrap;
    }
    .hd-room-cards-grid .room-card-price-struck {
        font-size: 13px;
        color: var(--price-struck, #8b3a2f);
        font-weight: 600;
        text-decoration: line-through;
    }
    .hd-room-cards-grid .room-card-price-big {
        font-size: 20px;
        font-weight: 800;
        color: var(--price-amber, #e08b1a);
        letter-spacing: -0.5px;
    }
    /* Nascondi badge "Su richiesta" mobile per non rompere il single row */
    .hd-room-cards-grid .option-card .badge { display: none !important; }
    /* Nascondi features chips */
    .hd-room-cards-grid .room-features { display: none !important; }

    /* ============================================================
       2026-06-05 owner SESSIONE 2 — card camere/trattamenti mobile più
       leggibili: box larghi, prezzo barrato SOPRA lo scontato, "Vedi foto"
       subito dopo il nome, font trattamenti ridotto. Supera il layout
       "tutto su una riga" (T.29.n/p) che risultava compresso. */

    /* Item 1 — box troppo stretti: .booking-main aveva padding 2rem (32px)
       → card a 32px dai bordi. Riduco a 14px così room/treatment/transport
       si allargano (coerenti col gutter 12px della pagina). */
    .booking-main { padding-left: 14px !important; padding-right: 14px !important; }
    .hd-room-cards-grid { gap: 12px; }

    /* Item 3 + arieggia: nome + "Vedi foto" su una riga, "Vedi pacchetto
       incluso" a capo sotto (via flex order, niente cambio markup). */
    .hd-room-cards-grid .option-card > .d-flex.align-items-start {
        align-items: flex-start !important;
    }
    .hd-room-cards-grid .option-card > .d-flex.align-items-start > div[style*="flex: 1"] {
        display: block;
    }
    .hd-room-cards-grid .option-card > .d-flex.align-items-start > div[style*="flex: 1"] > .mb-1 {
        flex-wrap: wrap !important;
        white-space: normal !important;
        align-items: baseline;
        column-gap: 8px;
        row-gap: 2px;
    }
    .hd-room-cards-grid .room-card-name { white-space: normal; order: 0; }
    .hd-room-cards-grid .hd-room-card-photos-btn--inline { order: 1; margin-left: 0; }
    /* 2026-06-05 owner: tasto foto = [icona] "Vedi foto" SENZA conteggio (mobile).
       Mostro il testo, l'icona resta, nascondo "(N)". */
    .hd-room-cards-grid .hd-room-card-photos-btn--inline i { display: inline-block !important; }
    .hd-room-cards-grid .hd-room-card-photos-btn__txt { display: inline !important; }
    .hd-room-cards-grid .hd-room-card-photos-btn__count { display: none !important; }
    /* 2026-06-05 owner: via "da €895" dall'header tipologia su mobile. */
    .hd-typology-card__from { display: none !important; }
    .hd-room-cards-grid .hd-room-pkg-sep { display: none !important; }
    .hd-room-cards-grid .hd-room-pkg-link { order: 2; flex: 0 0 100%; margin-top: 1px; }

    /* 2026-06-06 owner — prezzo barrato A SINISTRA dello scontato (affiancato), colonna in basso. */
    .hd-room-cards-grid .room-card-price-col {
        flex-direction: row !important;
        align-items: baseline !important;
        gap: 6px !important;
        justify-content: flex-end;
    }
    .hd-room-cards-grid .room-card-price-struck { font-size: 12px; }
    .hd-room-cards-grid .room-card-price-big { font-size: 22px; line-height: 1.05; }

    /* Item 4 — font trattamenti ridotto (era 14.5px / 0.82rem) */
    .hd-treatment-cards-grid .option-card strong { font-size: 13px !important; line-height: 1.2; }
    .hd-room-card__treatment { font-size: 0.74rem !important; line-height: 1.15; margin: 1px 0 3px !important; }

    /* Step T.29.q — owner request: nello stepped header "Scegli la tua
       camera" mobile, nasconde "Ultime N camere disponibili" e
       "N tipologie disponibili" (info ridondante per mobile compact). */
    .hd-step-header__right { display: none !important; }

    /* Step T.29.s — owner request: ridurre caratteri trattamenti mobile.
       Card più compatte (nome + prezzi). Stesso pattern delle room cards. */
    .hd-treatment-cards-grid .option-card {
        padding: 12px 14px;
    }
    .hd-treatment-cards-grid .option-card strong {
        font-size: 14.5px;
        font-weight: 700;
        line-height: 1.25;
    }
    .hd-treatment-cards-grid .treatment-price-big {
        font-size: 17px !important;
        font-weight: 800;
        color: var(--price-amber, #e08b1a);
    }
    .hd-treatment-cards-grid .treatment-price-struck {
        font-size: 12px;
        color: var(--price-struck, #8b3a2f);
        font-weight: 600;
    }
    .hd-treatment-cards-grid .treatment-price-col {
        min-width: 60px;
        gap: 4px;
    }
    /* Step T.33/T.33.c (2026-05-26 owner): tabs "Aggiungi viaggio" mobile
       sostituiti da custom dropdown (più bello del select nativo OS, icone
       per ogni opzione, integrazione con palette navy/amber del sito). */
    .hd-trip-tabs { display: none !important; }
    .hd-trip-tabs-dropdown {
        position: relative;
        margin: 8px 0 14px;
    }
    .hd-trip-tabs-dropdown__toggle {
        display: flex;
        align-items: center;
        justify-content: space-between;
        width: 100%;
        padding: 12px 14px;
        background: #fff;
        border: 1.5px solid #e9ecef;
        border-radius: 12px;
        font-size: 14.5px;
        font-weight: 700;
        color: var(--primary, #1e3c72);
        cursor: pointer;
        transition: border-color .15s, box-shadow .15s;
    }
    .hd-trip-tabs-dropdown__toggle:focus,
    .hd-trip-tabs-dropdown.is-open .hd-trip-tabs-dropdown__toggle {
        outline: none;
        border-color: var(--primary, #1e3c72);
        box-shadow: 0 0 0 3px rgba(30, 60, 114, 0.10);
    }
    .hd-trip-tabs-dropdown__label {
        display: inline-flex;
        align-items: center;
        gap: 10px;
        min-width: 0;
        overflow: hidden;
        text-overflow: ellipsis;
        white-space: nowrap;
    }
    .hd-trip-tabs-dropdown__label > i {
        color: var(--accent, #f5a623);
        font-size: 17px;
        flex-shrink: 0;
    }
    .hd-trip-tabs-dropdown__chev {
        font-size: 13px;
        color: var(--primary, #1e3c72);
        transition: transform .2s;
        flex-shrink: 0;
        margin-left: 8px;
    }
    .hd-trip-tabs-dropdown.is-open .hd-trip-tabs-dropdown__chev {
        transform: rotate(180deg);
    }
    .hd-trip-tabs-dropdown__menu {
        position: absolute;
        top: calc(100% + 6px);
        left: 0;
        right: 0;
        z-index: 50;
        background: #fff;
        border: 1.5px solid #e9ecef;
        border-radius: 12px;
        list-style: none;
        margin: 0;
        padding: 0;
        box-shadow: 0 8px 24px rgba(0, 0, 0, 0.12);
        max-height: 0;
        overflow: hidden;
        opacity: 0;
        pointer-events: none;
        transition: max-height .2s, opacity .15s, padding .15s;
    }
    .hd-trip-tabs-dropdown.is-open .hd-trip-tabs-dropdown__menu {
        max-height: 400px;
        opacity: 1;
        pointer-events: auto;
        padding: 6px;
    }
    .hd-trip-tabs-dropdown__item {
        display: flex;
        align-items: center;
        gap: 12px;
        padding: 11px 12px;
        border-radius: 8px;
        cursor: pointer;
        font-size: 14px;
        font-weight: 600;
        color: var(--primary, #1e3c72);
        transition: background .12s;
    }
    .hd-trip-tabs-dropdown__item:hover,
    .hd-trip-tabs-dropdown__item:focus {
        background: rgba(30, 60, 114, 0.06);
        outline: none;
    }
    .hd-trip-tabs-dropdown__item > i {
        color: var(--accent, #f5a623);
        font-size: 17px;
        width: 20px;
        text-align: center;
        flex-shrink: 0;
    }
    /* T.33.b (2026-05-26 owner): finché il select mostra il placeholder
       "Guarda le opzioni", nasconde TUTTI i tab panels sotto (no ferry
       di default). JS rimuove la classe al primo change del select. */
    .hd-trip-card__inner.hd-trip-tabs--unselected .hd-trip-panel {
        display: none !important;
    }

    /* Step T.29.aa (2026-05-26 owner): nome trattamento > 22 char → prezzi
       stacked verticali (struck sopra, big sotto). JS DOMContentLoaded
       applica la classe .hd-treatment-card--long-name al label. */
    .hd-treatment-cards-grid .option-card.hd-treatment-card--long-name .treatment-price-col {
        flex-direction: column !important;
        align-items: flex-end !important;
        gap: 1px !important;
        min-width: 0 !important;
    }
    .hd-treatment-cards-grid .option-card.hd-treatment-card--long-name .treatment-price-struck {
        font-size: 11px !important;
        line-height: 1.1 !important;
    }
    .hd-treatment-cards-grid .option-card.hd-treatment-card--long-name .treatment-price-big {
        font-size: 16px !important;
        line-height: 1.1 !important;
    }
}

/* Step T.29.b — owner request: SOLO MOBILE: nasconde titolo+indirizzo sopra
   le foto e collassa il mosaic a single-cell. Il titolo è già renderizzato
   come overlay sulla foto hero (.hd-hero-mosaic__mobile-overlay).
   FIX 2026-05-26: queste regole erano leakate su desktop perché stavano
   fuori dal media query (titolo, stelle, indirizzo scomparsi su desktop). */
@media (max-width: 767.98px) {
    .hd-hero-mosaic { padding-top: 4px; }
    .hd-hero-mosaic__title-row { display: none !important; }
    .hd-hero-mosaic .container { padding: 0 !important; }
    .hd-hero-mosaic__grid {
        border-radius: 0 !important;
        height: 320px !important;
        grid-template-columns: 1fr !important;
        grid-template-rows: 1fr !important;
    }
    .hd-hero-mosaic__cell:not(.hd-hero-mosaic__cell--1) { display: none !important; }
    .hd-hero-mosaic__cell--1 { grid-column: 1 / -1 !important; grid-row: 1 / -1 !important; }
}

/* Step T.29.b — Hero overlay mobile titolo + indirizzo + score */
.hd-hero-mosaic__mobile-overlay {
    position: absolute;
    left: 14px;
    right: 14px;
    bottom: 16px;
    color: #fff;
    text-shadow: 0 2px 6px rgba(0, 0, 0, 0.85);
    z-index: 2;
    pointer-events: none;
}
.hd-hero-mosaic__mobile-overlay__stars {
    /* 2026-05-31 owner: stelle più grandi su scheda mobile (2ª passata). */
    font-size: 18px;
    color: #f5a623;
    letter-spacing: 1px;
    margin-bottom: 4px;
    display: block;
}
.hd-hero-mosaic__mobile-overlay__name {
    /* 2026-05-31 owner: nome hotel più grande su scheda mobile (2ª passata). */
    font-size: 31px;
    font-weight: 800;
    line-height: 1.15;
    margin: 0 0 1px;
    color: #fff;
}
.hd-hero-mosaic__mobile-overlay__meta {
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
    /* 2026-05-31 owner: località più grande su scheda mobile. */
    font-size: 15px;
    font-weight: 600;
}
.hd-hero-mosaic__mobile-overlay__address {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    color: rgba(255, 255, 255, 0.95);
}
.hd-hero-mosaic__mobile-overlay__rating {
    background: rgba(255, 255, 255, 0.95);
    color: var(--primary, #1e3c72);
    padding: 3px 10px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-shadow: none;
    margin-left: auto;
    pointer-events: auto;
}
/* Gradient overlay scuro sull'immagine per leggibilità testo (titolo bianco
   su foto chiare/affollate). Scrim più alto e più scuro alla base. */
.hd-hero-mosaic__grid::after {
    content: '';
    position: absolute;
    left: 0; right: 0; bottom: 0;
    height: 65%;
    background: linear-gradient(to top, rgba(0, 0, 0, 0.78) 0%, rgba(0, 0, 0, 0.35) 35%, rgba(0, 0, 0, 0) 100%);
    pointer-events: none;
    border-radius: inherit;
    z-index: 1;
}
@media (min-width: 768px) {
    .hd-hero-mosaic__mobile-overlay { display: none !important; }
    .hd-hero-mosaic__grid::after { display: none !important; }
}

/* Step T.29.e — Photo count badge top-right su hero mobile */
.hd-hero-mosaic__photo-count-badge {
    position: absolute;
    top: 14px;
    right: 14px;
    z-index: 3;
    background: rgba(20, 30, 50, 0.85);
    color: #fff;
    padding: 7px 14px;
    border-radius: 999px;
    font-size: 13px;
    font-weight: 700;
    cursor: pointer;
    display: inline-flex;
    align-items: center;
    gap: 6px;
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
    border: 1px solid rgba(255, 255, 255, 0.18);
}
.hd-hero-mosaic__photo-count-badge i { font-size: 13px; }
.hd-hero-mosaic__photo-count-badge:hover { background: rgba(20, 30, 50, 0.95); color: #fff; }

/* Step T.29.e — Heart wishlist nel bottom overlay accanto al rating */
.hd-hero-mosaic__mobile-overlay__heart {
    /* 2026-05-31 owner: cuoricino spinto a destra della riga località. */
    margin-left: auto;
    width: 36px;
    height: 36px;
    border-radius: 50%;
    background: rgba(255, 255, 255, 0.85);
    color: #6b7280;
    border: none;
    padding: 0;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 16px;
    cursor: pointer;
    text-shadow: none;
    pointer-events: auto;
    backdrop-filter: blur(6px);
    -webkit-backdrop-filter: blur(6px);
    transition: color 0.15s, background 0.15s;
}
.hd-hero-mosaic__mobile-overlay__heart:hover { color: #e74c3c; background: #fff; }
.hd-hero-mosaic__mobile-overlay__heart.is-active { color: #e74c3c; background: #fff; }

/* Step T.29.e/y/z — Back-to-results restyle mobile.
   2026-05-26 FIX [Image #60/#62] PROD: il blob bianco gigante è causato
   da combinazione max-content + position absolute + display inline-flex
   su iOS Safari + parent stacking context dell'hero mosaic. Switch a
   width: fit-content + max-width: 60vw + flex: 0 0 auto + radius
   ridotto 22px (no 999px pill estrema) + shadow minima. */
@media (max-width: 767.98px) {
    .hd-hero-mosaic__back-overlay.is-visible {
        top: 14px !important;
        left: 14px !important;
        bottom: auto !important;
        right: auto !important;
        background: #fff !important;
        color: #1a2235 !important;
        padding: 7px 14px !important;
        border-radius: 22px !important;
        font-size: 13px !important;
        font-weight: 700 !important;
        z-index: 3 !important;
        backdrop-filter: none !important;
        -webkit-backdrop-filter: none !important;
        width: fit-content !important;
        max-width: 60vw !important;
        min-width: 0 !important;
        height: auto !important;
        display: inline-flex !important;
        flex: 0 0 auto !important;
        align-items: center !important;
        gap: 6px !important;
        contain: layout !important;
        transform: none !important;
        filter: none !important;
        border: 1px solid rgba(30, 60, 114, 0.12) !important;
        box-shadow: 0 1px 4px rgba(0, 0, 0, 0.20) !important;
        line-height: 1 !important;
    }
    .hd-hero-mosaic__back-overlay.is-visible i { color: #1a2235 !important; font-size: 13px !important; }
    /* Heart wishlist nel mobile overlay aveva STESSO pattern (bg white
       semitrasparente + backdrop-filter blur) che su iOS Safari poteva
       spillover. Bg solido + no blur. */
    .hd-hero-mosaic__mobile-overlay__heart {
        background: rgba(255, 255, 255, 0.98) !important;
        backdrop-filter: none !important;
        -webkit-backdrop-filter: none !important;
    }
    /* Photo count badge top-right: anche qui no blur (background dark
       quindi blob meno evidente, ma per coerenza). */
    .hd-hero-mosaic__photo-count-badge {
        backdrop-filter: none !important;
        -webkit-backdrop-filter: none !important;
    }
}

/* Step T.29.m/o — Modify bar mobile layout fedele al mockup owner:
   [📅 icon round] | "26 mag → 28 mag 2026"  | [Modifica pill outline]
                   | "2 notti · 2 adulti · 1 camera"      <- row 2 gray
   Full-width come gli altri box sotto (no margin laterale).
*/
@media (max-width: 767.98px) {
    .hd-modify-bar {
        margin: 10px 0 0 !important;
        max-width: 100% !important;
        border-radius: 0 !important;
        box-shadow: 0 4px 14px rgba(30, 60, 114, 0.08);
        border: none !important;
        border-top: 1px solid #e9ecef !important;
        border-bottom: 1px solid #e9ecef !important;
    }
    .hd-modify-bar__inner {
        display: grid !important;
        grid-template-columns: auto 1fr auto;
        align-items: center;
        gap: 2px 12px;
        padding: 12px 16px !important;
        justify-content: initial;
        max-width: 1440px;
    }
    /* Icon calendario sx (span 2 rows) — round bg navy soft */
    .hd-modify-bar__group:first-child .hd-modify-bar__icon {
        grid-row: 1 / span 2;
        grid-column: 1;
        width: 38px;
        height: 38px;
        border-radius: 8px;
        background: rgba(30, 60, 114, 0.08);
        color: var(--primary, #1e3c72);
        display: inline-flex !important;
        align-items: center;
        justify-content: center;
        font-size: 16px;
        margin-right: 0;
    }
    /* Date group: row 1, col 2 (solo date, no più nights pill che ora è in row 2 via JS) */
    .hd-modify-bar__group:first-child {
        grid-column: 2;
        grid-row: 1;
        display: flex;
        align-items: baseline;
        gap: 6px;
        line-height: 1.2;
    }
    .hd-modify-bar__dates {
        font-size: 15px;
        font-weight: 800;
        color: #1a2235;
    }
    /* Divider hidden */
    .hd-modify-bar__divider { display: none !important; }
    /* Guests group: row 2, col 2 (ora include anche __nights-pill spostato via JS) */
    .hd-modify-bar__group:nth-child(3) {
        grid-column: 2;
        grid-row: 2;
        display: flex;
        align-items: center;
        gap: 4px;
        margin-top: 0;
    }
    .hd-modify-bar__group:nth-child(3) .hd-modify-bar__icon { display: none !important; }
    /* "2 notti" inline, stesso color/size del guests (gray secondary) */
    .hd-modify-bar__group:nth-child(3) .hd-modify-bar__nights-pill {
        background: transparent !important;
        padding: 0 !important;
        font-size: 12.5px !important;
        font-weight: 600 !important;
        color: #6b7280 !important;
        border-radius: 0 !important;
        margin-right: 4px;
    }
    .hd-modify-bar__group:nth-child(3) .hd-modify-bar__nights-pill::after { content: ' ·'; }
    .hd-modify-bar__guests-primary,
    .hd-modify-bar__guests-secondary {
        font-size: 12.5px !important;
        color: #6b7280 !important;
        font-weight: 600 !important;
    }
    /* Modify pill outline col 3 span 2 rows */
    .hd-modify-bar__edit-btn {
        grid-column: 3;
        grid-row: 1 / span 2;
        background: transparent !important;
        border: 1.5px solid var(--primary, #1e3c72) !important;
        color: var(--primary, #1e3c72) !important;
        padding: 7px 18px !important;
        border-radius: 999px !important;
        font-size: 13px !important;
        font-weight: 700 !important;
    }
}

/* Step T.29.f legacy — la vecchia sticky bar mobile (sfondo bianco, prezzo amber,
   CTA amber pill, riga "Stai risparmiando") è stata SOSTITUITA dal dock NAVY
   (.hd-sticky-mobile-cta navy block più sotto, 2026-06-05 "claude design").
   Le regole visive legacy sono state RIMOSSE perché confliggevano col dock:
     - `.hd-sticky-mobile-cta__final { color: amber !important }` vinceva sul bianco
       del dock (il totale restava arancione);
     - `.hd-sticky-mobile-cta { background:#fff }` competeva col gradiente navy.
   Qui resta SOLO la soppressione delle barre legacy (.sticky-price-bar /
   .sticky-booking-bar) quando il dock è attivo, per evitare overlap. */
@media (max-width: 991.98px) {
    .hd-sticky-mobile-cta .hd-savings-banner--mobile { display: none !important; }
    /* Step T.30 — il dock VM-driven sostituisce le barre legacy: sopprimile. */
    body.has-hd-sticky-cta .sticky-price-bar,
    body.has-hd-sticky-cta .sticky-booking-bar {
        display: none !important;
    }
}

/* Step T.24 — Multi-room group header coerente con single-room stepped header */
.hd-mr-group-header {
    display: flex;
    align-items: center;
    gap: 12px;
    padding: 12px 16px;
    background: linear-gradient(180deg, rgba(30, 60, 114, 0.04) 0%, #fff 100%);
    border-bottom: 1px solid var(--hair, #e9ecef);
}
.hd-mr-group-num {
    width: 28px;
    height: 28px;
    border-radius: 50%;
    background: var(--primary, #1e3c72);
    color: #fff;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 13px;
    font-weight: 800;
    flex-shrink: 0;
}
.hd-mr-group-title-wrap { flex: 1; min-width: 0; }
.hd-mr-group-title {
    font-size: 14.5px;
    font-weight: 800;
    color: var(--primary, #1e3c72);
    line-height: 1.2;
}
.hd-mr-group-meta {
    font-size: 11.5px;
    color: #6b7280;
    font-weight: 600;
    margin-top: 2px;
}

/* Multi-room treatment selector: grid 3-col coerente con single-room. */
.hd-mr-treatments-grid {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
    gap: 8px;
}
.hd-mr-treatments-grid .option-card {
    margin-bottom: 0 !important;
}
@media (max-width: 575.98px) {
    .hd-mr-treatments-grid { grid-template-columns: 1fr; }
}

/* Step T.22.c — Pay-mini "Come paghi oggi" compact block (sidebar) */
.hd-pay-mini {
    background: var(--ii-bg, #f5f1ea);
    border-radius: 8px;
    padding: 8px 10px;
    font-size: 11.5px;
    line-height: 1.3;
    margin-top: 12px;
}
.hd-pay-mini__row {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 10px;
}
.hd-pay-mini__label {
    color: var(--ii-ink3, #8a8a8a);
    flex: 1;
    min-width: 0;
}
.hd-pay-mini__amount {
    color: #4a4a4a;
    font-weight: 700;
    white-space: nowrap;
}
.hd-pay-mini__sep {
    height: 0;
    border-top: 1px dashed #e5e1d8;
    margin: 6px 0;
}
.hd-pay-mini__total {
    display: flex;
    justify-content: space-between;
    align-items: baseline;
    gap: 10px;
}
.hd-pay-mini__total-label {
    font-size: 12px;
    font-weight: 800;
    color: var(--ii-primary, var(--primary, #1e3c72));
}
.hd-pay-mini__total-amount {
    font-size: 16px;
    font-weight: 800;
    color: var(--ii-priceAmber, #d97706);
    letter-spacing: -0.3px;
    line-height: 1;
    white-space: nowrap;
}

/* Step T.16 — stepper +/- per quantità bagagli */
.hd-trip-stepper {
    display: inline-flex;
    align-items: center;
    gap: 0;
    border: 1.5px solid #e9ecef;
    border-radius: 999px;
    background: #fff;
    overflow: hidden;
    margin-left: auto;
    margin-right: 12px;
}
.hd-trip-stepper__btn {
    background: #fff;
    border: none;
    width: 28px;
    height: 28px;
    font-size: 16px;
    font-weight: 800;
    color: var(--primary, #1e3c72);
    cursor: pointer;
    transition: background 0.15s;
    line-height: 1;
}
.hd-trip-stepper__btn:hover {
    background: var(--light-bg, #f5f1ea);
}
.hd-trip-stepper__val {
    min-width: 28px;
    text-align: center;
    font-weight: 700;
    font-size: 14px;
    color: #1a2235;
    padding: 0 4px;
}
.hd-trip-suboption.hd-trip-baggage-wrap {
    grid-template-columns: auto 1fr auto auto;
}
.hd-trip-option__meta--schedules {
    color: #1a2235 !important;
    font-weight: 600;
    background: rgba(30, 60, 114, 0.06);
    padding: 2px 8px;
    border-radius: 999px;
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 11.5px !important;
}
.hd-trip-option.is-unavailable {
    opacity: 0.55;
    pointer-events: none;
}
.hd-trip-option.is-unavailable::after {
    content: 'Stop sales';
    position: absolute;
    top: 8px;
    right: 8px;
    background: #8b3a2f;
    color: #fff;
    padding: 2px 8px;
    border-radius: 999px;
    font-size: 10.5px;
    font-weight: 700;
}

/* Step T.20 — Step header numerato (1 Scegli passaggio / 2 Scegli orario) */
.hd-trip-step-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 12px;
    padding: 0 2px;
}
.hd-trip-step-header__num {
    background: var(--primary, #1e3c72);
    color: #fff;
    width: 22px;
    height: 22px;
    border-radius: 50%;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    font-size: 12px;
    font-weight: 800;
    flex-shrink: 0;
}
.hd-trip-step-header__title {
    font-size: 15px;
    font-weight: 700;
    color: #1a2235;
    flex: 1;
}
.hd-trip-step-header__meta {
    font-size: 12.5px;
    color: #6b7280;
    font-weight: 600;
    white-space: nowrap;
}
.hd-trip-step-header--inner {
    margin-bottom: 14px;
}

/* Maritime option card (Step T.20): grid radio | icon | body | price */
.hd-trip-option--maritime {
    grid-template-columns: auto auto 1fr auto;
}
.hd-trip-option__icon {
    /* T.47 (2026-05-26 owner): icona round amber su ogni hd-trip-option
       in panel ferry/transfer ora nascosta (era ridondante con titolo). */
    display: none !important;
}
/* T.47.b (2026-05-26 owner): quando un .hd-trip-option è .is-selected
   nel panel ferry/car/transfer, le altre opzioni scompaiono (UI focus
   sulla sola scelta confermata, look compatto). JS gestisce .is-selected. */
.hd-trip-panel[data-panel="ferry"]:has(.hd-trip-option.is-selected) .hd-trip-option-wrap:not(:has(.hd-trip-option.is-selected)),
.hd-trip-panel[data-panel="car"]:has(.hd-trip-option.is-selected) .hd-trip-option-wrap:not(:has(.hd-trip-option.is-selected)),
.hd-trip-panel[data-panel^="transfer"]:has(.hd-trip-option.is-selected) .hd-trip-option-wrap:not(:has(.hd-trip-option.is-selected)) {
    display: none !important;
}
.hd-trip-option__icon-legacy {
    width: 36px;
    height: 36px;
    border-radius: 8px;
    background: rgba(30, 60, 114, 0.06);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}
.hd-trip-option__icon i {
    color: var(--primary, #1e3c72);
    font-size: 18px;
    line-height: 1;
}
.hd-trip-option--maritime .hd-trip-option__title {
    display: flex;
    align-items: center;
    gap: 8px;
}
.hd-trip-option__duration-pill {
    background: var(--light-bg, #f5f1ea);
    color: #6b7280;
    border-radius: 999px;
    padding: 2px 9px;
    font-size: 11px;
    font-weight: 700;
}

/* Step T.18 — Orari maritime selezionabili (chip clickable) */
.hd-trip-schedules {
    border: 1.5px solid #e9ecef;
    border-top: none;
    border-bottom-left-radius: 12px;
    border-bottom-right-radius: 12px;
    background: #fafaf6;
    padding: 14px 16px 12px;
    margin-top: -1px;
    margin-bottom: 8px;
}

/* Step T.20 — Grid orari 2-col (Andata | Ritorno) */
.hd-trip-schedules__grid {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 16px;
}
.hd-trip-schedules__col {
    background: #fff;
    border: 1px solid #e9ecef;
    border-radius: 10px;
    padding: 12px 14px;
}
.hd-trip-schedules__col-header {
    display: flex;
    align-items: center;
    gap: 10px;
    margin-bottom: 10px;
    padding-bottom: 8px;
    border-bottom: 1px solid #f1f3f5;
}
.hd-trip-schedules__col-header > i {
    color: var(--primary, #1e3c72);
    font-size: 16px;
    width: 24px;
    height: 24px;
    border-radius: 50%;
    background: rgba(30, 60, 114, 0.08);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
}
.hd-trip-schedules__col-title {
    font-size: 13px;
    font-weight: 700;
    color: var(--primary, #1e3c72);
    line-height: 1.2;
}
.hd-trip-schedules__col-date {
    font-size: 11.5px;
    color: #6b7280;
    font-weight: 600;
    margin-top: 2px;
}
.hd-trip-schedules__slots {
    /* Auto-fit per stare tutto su una sola riga quando possibile.
       minmax(72px, 1fr) lascia che 4-5 card stiano comode su desktop. */
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(72px, 1fr));
    gap: 5px;
}

/* Time slot card — compatte, min-width 72px */
.hd-trip-time-slot {
    position: relative;
    display: flex;
    flex-direction: column;
    align-items: center;
    gap: 1px;
    background: #fff;
    border: 1.5px solid #e9ecef;
    border-radius: 8px;
    padding: 6px 4px;
    cursor: pointer;
    transition: border-color 0.15s, background 0.15s;
    font-family: inherit;
    min-width: 0;
}
.hd-trip-time-slot:hover {
    border-color: var(--primary, #1e3c72);
    background: var(--light-bg, #f5f1ea);
}
.hd-trip-time-slot.is-selected {
    border-color: var(--accent, #f5a623);
    background: rgba(245, 166, 35, 0.08);
    box-shadow: 0 0 0 2px rgba(245, 166, 35, 0.20);
}
.hd-trip-time-slot__dep {
    font-size: 13px;
    font-weight: 800;
    color: #1a2235;
    line-height: 1.1;
    font-family: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
}
.hd-trip-time-slot.is-selected .hd-trip-time-slot__dep {
    color: var(--accent, #e08b1a);
}
.hd-trip-time-slot__arr {
    font-size: 9.5px;
    color: #6b7280;
    font-weight: 600;
    white-space: nowrap;
    line-height: 1.1;
}
.hd-trip-time-slot__badge {
    position: absolute;
    top: -7px;
    right: -3px;
    background: #fde2e1;
    color: #c0392b;
    border-radius: 999px;
    padding: 1px 6px;
    font-size: 8.5px;
    font-weight: 800;
    letter-spacing: 0.3px;
    border: 2px solid #fafaf6;
}

@media (max-width: 768px) {
    .hd-trip-schedules__grid { grid-template-columns: 1fr; }
    .hd-trip-schedules__slots { grid-template-columns: repeat(3, 1fr); }
}
@media (max-width: 575.98px) {
    .hd-trip-schedules__slots { grid-template-columns: repeat(2, 1fr); }
}
.hd-trip-option-wrap .hd-trip-option + .hd-trip-schedules {
    margin-bottom: 0;
    border-bottom-left-radius: 0;
    border-bottom-right-radius: 0;
}
.hd-trip-schedules__group + .hd-trip-schedules__group {
    margin-top: 10px;
}
.hd-trip-schedules__label {
    font-size: 12px;
    font-weight: 700;
    color: #1a2235;
    margin-bottom: 8px;
    display: flex;
    align-items: center;
    gap: 6px;
}
.hd-trip-schedules__required {
    color: #c0392b;
}
.hd-trip-schedules__chips {
    display: flex;
    flex-wrap: wrap;
    gap: 6px;
}
.hd-trip-time-chip {
    background: #fff;
    border: 1.5px solid #d1d5db;
    color: #1a2235;
    padding: 5px 11px;
    border-radius: 999px;
    font-size: 12.5px;
    font-weight: 700;
    cursor: pointer;
    transition: border-color 0.15s, background 0.15s, color 0.15s;
    font-family: "JetBrains Mono", "SF Mono", Menlo, Consolas, monospace;
    letter-spacing: 0.5px;
}
.hd-trip-time-chip:hover {
    border-color: var(--primary, #1e3c72);
    background: var(--light-bg, #f5f1ea);
}
.hd-trip-time-chip.is-selected {
    background: var(--primary, #1e3c72);
    border-color: var(--primary, #1e3c72);
    color: #fff;
}

/* Car info: targa + modello */
.hd-trip-car-info {
    border: 1.5px solid #e9ecef;
    border-top: none;
    background: #fafaf6;
    padding: 14px 16px 12px;
    margin-top: -1px;
    margin-bottom: 8px;
}
.hd-trip-option-wrap .hd-trip-car-info {
    border-bottom-left-radius: 12px;
    border-bottom-right-radius: 12px;
}
.hd-trip-car-info__label {
    font-size: 12px;
    font-weight: 700;
    color: #1a2235;
    margin-bottom: 8px;
    display: flex;
    align-items: center;
    gap: 6px;
}
.hd-trip-car-info__fields {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: 10px;
}
.hd-trip-car-info__input {
    border: 1.5px solid #d1d5db;
    border-radius: 8px;
    padding: 8px 12px;
    font-size: 13.5px;
    background: #fff;
    transition: border-color 0.15s;
}
.hd-trip-car-info__input:focus {
    outline: none;
    border-color: var(--primary, #1e3c72);
}

/* Conferma disabled state */
.hd-trip-action--confirm:disabled {
    background: #d1d5db;
    color: #fff;
    cursor: not-allowed;
    opacity: 0.7;
}
.hd-trip-action--confirm:disabled:hover {
    background: #d1d5db;
}

@media (max-width: 575.98px) {
    .hd-trip-car-info__fields { grid-template-columns: 1fr; }
}

@media (max-width: 575.98px) {
    .hd-toast-container { top: 70px; right: 12px; left: 12px; }
    .hd-toast { min-width: 0; max-width: none; }
}

/* ════════════════════════════════════════════════════════════════════
   Gallery Lightbox v2 — T.43 (2026-05-26 owner redesign [Image #70/#71])
   Layout: top bar bianca (back+counter+actions) → foto centrale con
   frecce pill → bottom bar (categoria+titolo+desc+CTA) → thumbnail strip.
   Mobile: collassa header in pill compact + bottom CTA full-width.
   ════════════════════════════════════════════════════════════════════ */
.gallery-lightbox--v2 .modal-content {
    background: #f8f9fa;
    color: #1a1f2e;
    border: 0;
    height: 100%;
    display: flex;
    flex-direction: column;
}
.gallery-lightbox--v2 .modal-dialog {
    margin: 0;
    max-width: 100%;
    height: 100vh;
}

/* TOP BAR */
.gallery-lb__topbar {
    display: flex;
    align-items: center;
    justify-content: space-between;
    gap: 12px;
    padding: 14px 20px;
    background: #fff;
    border-bottom: 1px solid #e9ecef;
    flex-shrink: 0;
}
.gallery-lb__back {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background: #fff;
    border: 1px solid #e9ecef;
    color: var(--primary, #1e3c72);
    padding: 8px 14px;
    border-radius: 999px;
    font-size: 14px;
    font-weight: 700;
    cursor: pointer;
    transition: background .15s;
}
.gallery-lb__back:hover { background: #f1f3f5; }
.gallery-lb__counter {
    display: flex;
    align-items: baseline;
    gap: 4px;
    font-size: 18px;
    font-weight: 700;
    color: var(--primary, #1e3c72);
}
.gallery-lb__counter-num { color: var(--accent, #f5a623); font-size: 20px; }
.gallery-lb__counter-sep, .gallery-lb__counter-total { color: var(--primary, #1e3c72); }
.gallery-lb__counter-cat { color: var(--primary, #1e3c72); font-size: 15px; font-weight: 600; margin-left: 4px; }
.gallery-lb__actions { display: inline-flex; align-items: center; gap: 10px; }
.gallery-lb__heart,
.gallery-lb__play,
.gallery-lb__close {
    width: 40px;
    height: 40px;
    border-radius: 50%;
    border: 1px solid #e9ecef;
    background: #fff;
    color: var(--primary, #1e3c72);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    font-size: 16px;
    transition: background .15s;
}
.gallery-lb__heart:hover, .gallery-lb__play:hover, .gallery-lb__close:hover { background: #f1f3f5; }
.gallery-lb__heart.is-active { color: #e74c3c; }
.gallery-lb__play-dot {
    width: 12px;
    height: 12px;
    background: var(--primary, #1e3c72);
    border-radius: 50%;
}
.gallery-lb__play.is-playing .gallery-lb__play-dot { background: var(--accent, #f5a623); }

/* IMAGE STAGE */
.gallery-lb__stage {
    position: relative;
    flex: 1 1 auto;
    display: flex;
    align-items: center;
    justify-content: center;
    background: #f8f9fa;
    padding: 24px;
    min-height: 0;
    overflow: hidden;
}
.gallery-lb__stage img {
    max-width: 100%;
    max-height: 100%;
    object-fit: contain;
    border-radius: 8px;
}
.gallery-lb__nav {
    position: absolute;
    top: 50%;
    transform: translateY(-50%);
    width: 48px;
    height: 48px;
    border-radius: 50%;
    background: #fff;
    border: 0;
    box-shadow: 0 4px 16px rgba(0,0,0,0.10);
    color: var(--primary, #1e3c72);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    cursor: pointer;
    font-size: 22px;
    transition: background .15s, transform .15s;
    z-index: 5;
}
.gallery-lb__nav:hover { background: #f1f3f5; transform: translateY(-50%) scale(1.06); }
.gallery-lb__nav--prev { left: 18px; }
.gallery-lb__nav--next { right: 18px; }

/* INFO BAR */
.gallery-lb__info {
    background: #fff;
    border-top: 1px solid #e9ecef;
    padding: 16px 24px;
    display: flex;
    align-items: center;
    gap: 24px;
    flex-shrink: 0;
}
.gallery-lb__info-text { flex: 1 1 auto; min-width: 0; }
.gallery-lb__category {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background: rgba(245, 166, 35, 0.12);
    color: var(--price-amber, #e08b1a);
    padding: 4px 12px;
    border-radius: 999px;
    font-size: 12px;
    font-weight: 800;
    text-transform: uppercase;
    letter-spacing: 0.4px;
    margin-bottom: 8px;
}
.gallery-lb__category i { font-size: 11px; }
.gallery-lb__title {
    font-size: 22px;
    font-weight: 800;
    color: var(--primary, #1e3c72);
    margin: 0 0 4px;
    line-height: 1.25;
}
.gallery-lb__desc {
    font-size: 14px;
    color: #4a5568;
    margin: 0;
    line-height: 1.4;
}
.gallery-lb__cta-group {
    display: inline-flex;
    align-items: center;
    gap: 12px;
    flex-shrink: 0;
}
.gallery-lb__save {
    display: inline-flex;
    align-items: center;
    gap: 6px;
    background: #fff;
    color: var(--primary, #1e3c72);
    border: 1px solid #e9ecef;
    padding: 10px 18px;
    border-radius: 999px;
    font-size: 14px;
    font-weight: 700;
    cursor: pointer;
}
.gallery-lb__save:hover { background: #f1f3f5; }
.gallery-lb__verify {
    display: inline-flex;
    align-items: center;
    gap: 8px;
    background: var(--accent, #f5a623);
    color: #fff !important;
    padding: 12px 22px;
    border-radius: 999px;
    font-size: 14.5px;
    font-weight: 800;
    text-decoration: none !important;
    box-shadow: 0 4px 12px rgba(245, 166, 35, 0.35);
}
.gallery-lb__verify:hover { background: var(--accent-hover, #e09000); color: #fff; }

/* THUMBNAILS STRIP */
.gallery-lb__thumbs {
    background: #fff;
    border-top: 1px solid #e9ecef;
    padding: 14px 24px;
    display: flex;
    gap: 8px;
    overflow-x: auto;
    overflow-y: hidden;
    scrollbar-width: thin;
    flex-shrink: 0;
}
.gallery-lb__thumb {
    flex: 0 0 auto;
    width: 84px;
    height: 56px;
    border-radius: 8px;
    overflow: hidden;
    border: 2px solid transparent;
    padding: 0;
    background: #fff;
    cursor: pointer;
    transition: border-color .15s, transform .15s;
}
.gallery-lb__thumb img {
    width: 100%;
    height: 100%;
    object-fit: cover;
    display: block;
}
.gallery-lb__thumb:hover { transform: translateY(-1px); }
.gallery-lb__thumb.is-active {
    border-color: var(--accent, #f5a623);
    box-shadow: 0 0 0 2px rgba(245, 166, 35, 0.18);
}

/* MOBILE LAYOUT — collapse topbar + stack info+cta below stage */
@media (max-width: 767.98px) {
    .gallery-lb__topbar {
        padding: 12px 14px;
        gap: 8px;
    }
    .gallery-lb__back { padding: 6px 10px; font-size: 13px; }
    .gallery-lb__back-label { display: none; }
    .gallery-lb__counter { font-size: 16px; }
    .gallery-lb__counter-num { font-size: 17px; }
    .gallery-lb__counter-cat { display: none; }
    .gallery-lb__close, .gallery-lb__play { display: none !important; }
    .gallery-lb__heart { width: 36px; height: 36px; }
    .gallery-lb__stage { padding: 0; aspect-ratio: 4 / 3; flex: 0 0 auto; }
    .gallery-lb__stage img { border-radius: 0; }
    .gallery-lb__nav {
        width: 38px;
        height: 38px;
        font-size: 18px;
        box-shadow: 0 2px 10px rgba(0,0,0,0.18);
    }
    .gallery-lb__nav--prev { left: 10px; }
    .gallery-lb__nav--next { right: 10px; }
    .gallery-lb__info {
        flex-direction: column;
        align-items: stretch;
        gap: 10px;
        padding: 16px;
    }
    .gallery-lb__title { font-size: 19px; }
    .gallery-lb__desc { font-size: 13.5px; }
    .gallery-lb__cta-group { width: 100%; }
    .gallery-lb__verify { width: 100%; justify-content: center; padding: 14px 18px; }
    .gallery-lb__thumbs { padding: 10px 12px; gap: 6px; }
    .gallery-lb__thumb { width: 64px; height: 42px; border-radius: 6px; }
}

/* ════════════════════════════════════════════════════════════════════
   Tabella Supplementi hotel (T.28 — 2026-05-26 owner request).
   Layout 3-col desktop (Voce | Importo | Condizioni), 1-col mobile stacked.
   Riga mandatory ha bordo sinistro amber; optional gray.
   ════════════════════════════════════════════════════════════════════ */
.hd-supplements-card {
    background: #fff;
    border: 1px solid #e9ecef;
    border-radius: 14px;
    padding: 20px 22px;
    margin-top: 16px;
}
.hd-supplements-card h5 {
    margin: 0 0 6px;
    font-size: 18px;
    font-weight: 800;
    color: var(--primary, #1e3c72);
    display: flex;
    align-items: center;
}
.hd-supplements-table {
    display: flex;
    flex-direction: column;
    gap: 8px;
    margin-top: 8px;
}
.hd-supplements-row {
    display: grid;
    grid-template-columns: minmax(0, 1.6fr) minmax(0, 0.8fr) minmax(0, 1.3fr);
    gap: 14px;
    padding: 12px 14px;
    background: #f8f9fa;
    border-radius: 10px;
    border-left: 4px solid #e9ecef;
    align-items: center;
}
.hd-supplements-row.is-required {
    border-left-color: var(--accent, #f5a623);
    background: rgba(245, 166, 35, 0.04);
}
.hd-supplements-row--head {
    background: transparent;
    border-left: none;
    padding: 4px 14px;
    font-size: 12px;
    font-weight: 800;
    color: #6b7280;
    text-transform: uppercase;
    letter-spacing: 0.4px;
}
.hd-supplements-row__title {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 8px;
}
.hd-supplements-row__name strong {
    font-size: 15px;
    color: var(--primary, #1e3c72);
    font-weight: 700;
}
.hd-suppl-badge {
    display: inline-flex;
    align-items: center;
    gap: 4px;
    font-size: 11px;
    font-weight: 800;
    padding: 3px 10px;
    border-radius: 999px;
    text-transform: uppercase;
    letter-spacing: 0.3px;
    white-space: nowrap;
}
.hd-suppl-badge--required {
    background: var(--accent, #f5a623);
    color: #fff;
}
.hd-suppl-badge--optional {
    background: #e9ecef;
    color: #6b7280;
}
.hd-suppl-badge--payhotel {
    background: rgba(30, 60, 114, 0.10);
    color: var(--primary, #1e3c72);
}
.hd-suppl-badge--pet {
    background: rgba(245, 166, 35, 0.14);
    color: #b06a00;
}
.hd-supplements-row__info {
    width: 100%;
    margin-top: 6px;
    font-size: 13px;
    color: #4a5568;
    line-height: 1.4;
}
.hd-supplements-row__amount {
    display: flex;
    flex-direction: column;
    align-items: flex-start;
    gap: 2px;
}
.hd-suppl-amount {
    font-size: 17px;
    font-weight: 800;
    color: var(--price-amber, #e08b1a);
}
.hd-suppl-mode {
    font-size: 11.5px;
    color: #6b7280;
    font-weight: 500;
}
.hd-supplements-row__when {
    display: flex;
    flex-direction: column;
    gap: 4px;
    font-size: 12.5px;
    color: var(--primary, #1e3c72);
    font-weight: 600;
}
.hd-suppl-cond {
    display: inline-flex;
    align-items: center;
    gap: 6px;
}
.hd-suppl-cond i {
    color: var(--accent, #f5a623);
    font-size: 13px;
}

@media (max-width: 767.98px) {
    .hd-supplements-card { padding: 16px 14px; }
    .hd-supplements-row {
        grid-template-columns: 1fr;
        gap: 8px;
        padding: 12px 14px;
    }
    .hd-supplements-row--head { display: none; }
    .hd-supplements-row__amount {
        flex-direction: row;
        align-items: baseline;
        gap: 6px;
    }
    .hd-suppl-amount { font-size: 16px; }
    .hd-supplements-row__when {
        flex-direction: row;
        flex-wrap: wrap;
        gap: 10px;
    }
}

/* ════════════════════════════════════════════════════════════════════
   Supplementi inline nel booking-main (T.28.d — 2026-05-26 owner).
   Sostituisce hd-supplements-card sotto mappa. Layout: lista di row con
   checkbox sx + body (nome + badge + info) + price dx.
   ════════════════════════════════════════════════════════════════════ */
.hd-suppl-inline {
    background: #fff;
    border: 1px solid #e9ecef;
    border-radius: 12px;
    padding: 14px 16px;
    margin-top: 16px;
}
.hd-suppl-inline__title {
    font-size: 14px;
    font-weight: 800;
    color: var(--primary, #1e3c72);
    margin: 0 0 10px;
    display: flex;
    align-items: center;
    text-transform: uppercase;
    letter-spacing: 0.4px;
}
.hd-suppl-inline__title i {
    color: var(--accent, #f5a623);
    font-size: 16px;
}
.hd-suppl-row {
    display: grid;
    grid-template-columns: auto 1fr auto;
    gap: 12px;
    align-items: center;
    padding: 10px 12px;
    border-radius: 8px;
    background: #f8f9fa;
    margin-bottom: 6px;
    cursor: pointer;
    border-left: 3px solid #e9ecef;
    transition: background .15s, border-color .15s;
}
.hd-suppl-row:hover { background: #f1f3f5; }
.hd-suppl-row.is-required {
    background: rgba(245, 166, 35, 0.04);
    border-left-color: var(--accent, #f5a623);
    cursor: default;
}
.hd-suppl-row.is-on-request {
    background: rgba(255, 193, 7, 0.05);
    border-left-color: #ffc107;
}
/* T.28.f — supplemento NON applicabile alla camera selezionata: visibile MA
   greyed + disabled. */
.hd-suppl-row.is-not-applicable {
    opacity: 0.55;
    cursor: not-allowed;
    background: #f1f3f5;
    border-left-color: #ced4da;
}
.hd-suppl-row.is-not-applicable .hd-suppl-row__name strong { color: #6b7280; }
.hd-suppl-row.is-not-applicable .hd-suppl-row__price { color: #6b7280; }
.hd-suppl-row.is-not-applicable .hd-suppl-row__check { cursor: not-allowed; }
.hd-suppl-row__check {
    width: 18px;
    height: 18px;
    accent-color: var(--accent, #f5a623);
    cursor: pointer;
}
.hd-suppl-row__check--locked { cursor: not-allowed; opacity: 0.7; }
.hd-suppl-row__body {
    display: flex;
    flex-direction: column;
    min-width: 0;
}
.hd-suppl-row__name {
    font-size: 14px;
    font-weight: 700;
    color: var(--primary, #1e3c72);
    display: flex;
    align-items: center;
    gap: 8px;
    flex-wrap: wrap;
}
.hd-suppl-row__info {
    font-size: 12.5px;
    color: #4a5568;
    margin-top: 3px;
    line-height: 1.35;
}
/* ITEM #3 (2026-06-04 owner): descrizione supplemento come icona ⓘ + tooltip
   on-hover (niente testo inline). */
.hd-suppl-row__info-ic {
    color: var(--primary, #1e3c72);
    cursor: help;
    font-size: 14px;
    margin-left: 6px;
    vertical-align: middle;
    line-height: 1;
}
.hd-suppl-row__info-ic:hover { color: var(--secondary, #2a5298); }
/* Tooltip leggibile: larghezza ragionevole, testo a capo. */
.tooltip-inner { max-width: 280px; text-align: left; }
.hd-suppl-row__price {
    font-size: 14.5px;
    font-weight: 800;
    color: var(--price-amber, #e08b1a);
    white-space: nowrap;
    text-align: right;
    display: flex;
    flex-direction: column;
    align-items: flex-end;
    line-height: 1.1;
}
.hd-suppl-row__price small {
    font-size: 11px;
    color: #6b7280;
    font-weight: 500;
}
.hd-suppl-badge {
    display: inline-flex;
    align-items: center;
    gap: 3px;
    font-size: 10px;
    font-weight: 800;
    padding: 2px 8px;
    border-radius: 999px;
    text-transform: uppercase;
    letter-spacing: 0.3px;
    white-space: nowrap;
}
.hd-suppl-badge--required { background: var(--accent, #f5a623); color: #fff; }
.hd-suppl-badge--optional { background: #e9ecef; color: #6b7280; }
.hd-suppl-badge--onrequest { background: #fff3cd; color: #856404; border: 1px solid #ffeaa7; }
.hd-suppl-badge--payhotel {
    background: rgba(30, 60, 114, 0.10);
    color: var(--primary, #1e3c72);
}
.hd-suppl-badge--pet { background: rgba(245, 166, 35, 0.14); color: #b06a00; }
@media (max-width: 767.98px) {
    /* owner 2026-06-05: testo supplementi più piccolo su mobile + ⓘ tooltip
       attaccata al nome (margin ridotto). */
    .hd-suppl-inline { padding: 12px 14px; }
    .hd-suppl-inline__title { font-size: 13px; }
    .hd-suppl-row { padding: 9px 11px; grid-template-columns: auto 1fr auto; gap: 9px; }
    .hd-suppl-row__name { font-size: 12px; gap: 5px; }
    .hd-suppl-row__info-ic { font-size: 12.5px; margin-left: 4px; }
    .hd-suppl-row__price { font-size: 12.5px; }
    .hd-suppl-row__price small { font-size: 10px; }
    .hd-suppl-badge { font-size: 9px; padding: 1px 6px; }
}

/* T.61.g (2026-05-26 owner) — per-camera supplement block in multi-room.
 * Padding compatto rispetto a .hd-suppl-inline (la card sta dentro la
 * room-group-card, non come stand-alone). Margine top per separare dalle
 * room option-cards e bottom per separare dal subtotale.
 */
.hd-mr-suppl-block { margin: 14px 0 10px; }
.hd-mr-suppl-block .hd-suppl-inline.hd-mr-suppl-inline {
    padding: 12px 14px;
    margin-top: 0;
    box-shadow: none;
    border: 1px solid #e9ecef;
    border-radius: 10px;
    background: #fafbfc;
}
.hd-mr-suppl-block .hd-suppl-inline__title { font-size: 12.5px; margin-bottom: 8px; }
.hd-mr-suppl-block .hd-suppl-row { padding: 8px 10px; }
.hd-mr-suppl-block .hd-suppl-row__name { font-size: 13px; }
.hd-mr-suppl-block .hd-suppl-row__price { font-size: 13px; }
@media (max-width: 767.98px) {
    .hd-mr-suppl-block .hd-suppl-inline.hd-mr-suppl-inline { padding: 10px 12px; }
    .hd-mr-suppl-block .hd-suppl-row { padding: 8px 10px; }
}

/* ════════════════════════════════════════════════════════════════════
   Gruppo supplementi esclusivi — dropdown "a tema" (owner 2026-06-11).
   Sostituisce il <select> nativo (lista OS grigia, fuori tema) con un menu
   coerente con le righe supplemento: card morbide, bordo-sinistro accentato,
   nome navy + prezzo ambra, hover. Il <select> nativo resta nel DOM nascosto
   (.hd-suppl-dd__native) come sorgente per recompute/filtro/payload — la UI
   custom lo sincronizza (set value + dispatch change). Tema per-portale via
   var(--accent) [arancio II / lime HoEscape] e var(--price-amber).
   ════════════════════════════════════════════════════════════════════ */
.hd-suppl-group { margin-bottom: 12px; }
.hd-suppl-group__label {
    display: block;
    font-size: 12px;
    font-weight: 800;
    color: var(--primary, #1e3c72);
    text-transform: uppercase;
    letter-spacing: 0.4px;
    margin: 0 0 6px;
}
/* select nativo nascosto ma presente (sorgente logica, mai rimosso) */
.hd-suppl-dd__native { display: none !important; }

.hd-suppl-dd { position: relative; }
.hd-suppl-dd__trigger {
    width: 100%;
    display: grid;
    grid-template-columns: 1fr auto auto;
    align-items: center;
    gap: 10px;
    padding: 11px 13px;
    border: 1px solid #e9ecef;
    border-left: 3px solid #ced4da;
    border-radius: 8px;
    background: #f8f9fa;
    cursor: pointer;
    text-align: left;
    font: inherit;
    transition: border-color .15s, background .15s, box-shadow .15s;
}
.hd-suppl-dd__trigger:hover { background: #f1f3f5; }
.hd-suppl-dd__trigger:focus-visible {
    outline: none;
    box-shadow: 0 0 0 3px rgba(245, 166, 35, 0.22);
    border-color: var(--accent, #f5a623);
}
.hd-suppl-dd__trigger.has-selection {
    background: rgba(245, 166, 35, 0.06);
    border-left-color: var(--accent, #f5a623);
}
.hd-suppl-dd__value {
    font-size: 14px;
    font-weight: 700;
    color: var(--primary, #1e3c72);
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.hd-suppl-dd__price {
    font-size: 13.5px;
    font-weight: 800;
    color: var(--price-amber, #e08b1a);
    white-space: nowrap;
}
.hd-suppl-dd__chevron {
    display: inline-flex;
    color: var(--accent, #f5a623);
    transition: transform .2s ease;
}
.hd-suppl-dd.open .hd-suppl-dd__chevron { transform: rotate(180deg); }

.hd-suppl-dd__panel {
    display: none;
    position: absolute;
    z-index: 30;
    top: calc(100% + 6px);
    left: 0;
    right: 0;
    background: #fff;
    border: 1px solid #e9ecef;
    border-radius: 10px;
    box-shadow: 0 12px 32px rgba(30, 60, 114, 0.14);
    padding: 6px;
    max-height: 320px;
    overflow-y: auto;
    animation: hdSupplDdIn .14s ease;
}
.hd-suppl-dd.open .hd-suppl-dd__panel { display: block; }
@keyframes hdSupplDdIn {
    from { opacity: 0; transform: translateY(-4px); }
    to   { opacity: 1; transform: none; }
}
.hd-suppl-dd__opt {
    display: grid;
    grid-template-columns: 18px 1fr auto;
    align-items: center;
    gap: 10px;
    padding: 9px 10px;
    border-radius: 7px;
    border-left: 3px solid transparent;
    cursor: pointer;
    transition: background .12s;
}
.hd-suppl-dd__opt:hover { background: #f1f3f5; }
.hd-suppl-dd__opt.is-selected {
    background: rgba(245, 166, 35, 0.08);
    border-left-color: var(--accent, #f5a623);
}
.hd-suppl-dd__opt-check {
    color: var(--accent, #f5a623);
    font-size: 15px;
    line-height: 1;
    opacity: 0;
}
.hd-suppl-dd__opt.is-selected .hd-suppl-dd__opt-check { opacity: 1; }
.hd-suppl-dd__opt-name {
    font-size: 14px;
    font-weight: 700;
    color: var(--primary, #1e3c72);
}
.hd-suppl-dd__opt-price {
    font-size: 13px;
    font-weight: 800;
    color: var(--price-amber, #e08b1a);
    white-space: nowrap;
}
@media (max-width: 767.98px) {
    .hd-suppl-dd__trigger { padding: 10px 11px; }
    .hd-suppl-dd__value, .hd-suppl-dd__opt-name { font-size: 13px; }
    .hd-suppl-dd__price, .hd-suppl-dd__opt-price { font-size: 12.5px; }
}

/* ============================================
   iter3 (owner 2026-05-27) — TrustBanner
   Componente "Miglior prezzo garantito" mostrato nel PriceSummarySidebar
   quando NON c'è promo attiva (mutuamente esclusivo col SavingsBanner).
   Partial: templates/public/partials/_trust_banner.html.
   ============================================ */
.hd-trust-banner {
    position: relative;
    overflow: hidden;
    padding: 14px 18px 14px 16px;
    display: flex;
    align-items: center;
    gap: 12px;
    color: #fff;
    background: linear-gradient(
        95deg,
        var(--ii-primary, #1e3c72) 0%,
        var(--ii-secondary, #2a5298) 55%,
        #3a78c9 100%
    );
    /* iter4 owner refinement 2026-05-27: angoli arrotondati card-style
       + shadow leggero per profondità. Parent .hd-price-summary-card ha
       overflow:visible quindi il radius va applicato qui direttamente. */
    border-radius: 14px;
    box-shadow: 0 4px 14px rgba(30, 60, 114, 0.18);
}

.hd-trust-banner::before {
    content: '';
    position: absolute;
    inset: 0;
    background:
        radial-gradient(60% 100% at 110% 50%, rgba(255,255,255,0.18), transparent 60%),
        radial-gradient(40% 100% at -10% 50%, rgba(255,255,255,0.10), transparent 60%);
    pointer-events: none;
}

.hd-trust-banner::after {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    height: 1px;
    background: linear-gradient(
        90deg,
        transparent,
        rgba(255,255,255,0.5),
        transparent
    );
    pointer-events: none;
}

.hd-trust-banner__icon {
    width: 38px;
    height: 38px;
    border-radius: 50%;
    background: rgba(255,255,255,0.20);
    border: 1px solid rgba(255,255,255,0.32);
    display: inline-flex;
    align-items: center;
    justify-content: center;
    flex-shrink: 0;
    position: relative;
    box-shadow:
        inset 0 1px 2px rgba(255,255,255,0.3),
        0 2px 6px rgba(0,0,0,0.10);
    color: #fff;
    font-size: 18px;
}

.hd-trust-banner__body {
    flex: 1;
    min-width: 0;
    position: relative;
}

.hd-trust-banner__title {
    font-size: 13px;
    font-weight: 800;
    letter-spacing: 0.3px;
    color: #fff;
    text-transform: uppercase;
    line-height: 1.1;
}

.hd-trust-banner__sub {
    font-size: 11.5px;
    font-weight: 600;
    color: rgba(255,255,255,0.78);
    line-height: 1.2;
    margin-top: 3px;
}

/* ============================================================
   2026-05-31 owner: "tutto a 1440". L'hero (.hd-hero-mosaic) non era
   cappato (max-width:none) → su monitor >1440 sbordava full-width mentre
   recap + sezioni restano a 1440. Lo allineo cappandolo a 1440 centrato,
   come tutto il resto della scheda.
   ============================================================ */
@media (min-width: 992px) {
  .hd-hero-mosaic {
      max-width: 1440px;
      margin-left: auto !important;
      margin-right: auto !important;
  }
  /* 2026-05-31 owner: la foto hero era inset di 24px (.container padding)
     rispetto a recap + booking (bordo a 0) → non allineata. Tolgo l'inset
     orizzontale così hero/photogallery parte allo stesso bordo dei box sotto. */
  .hd-hero-mosaic > .container {
      padding-left: 0 !important;
      padding-right: 0 !important;
  }
  /* 2026-05-31 owner: titolo struttura + stelle più grandi su desktop (2ª passata).
     2026-06-05 owner: titolo ridotto (50px → 40px), risultava sproporzionato. */
  .hd-hero-mosaic__name {
      font-size: 40px !important;
  }
  .hd-hero-mosaic__stars,
  .hd-hero-mosaic__stars i {
      font-size: 24px !important;
  }
  /* 2026-05-31 owner: tasti "Modifica selezione" + "Mostra tutte le foto"
     più grandi su desktop. */
  .hd-modify-bar__edit-btn {
      font-size: 14px !important;
      padding: 8px 18px !important;
  }
  .hd-hero-mosaic__more-overlay {
      font-size: 14px !important;
      padding: 10px 16px !important;
  }
  /* 2026-05-31 owner: stato no-date — banner prezzi-base + griglia contenuti
     erano inset di 24px/lato (padding) mentre hero/titolo sono flush al box
     1440 → box "sfalsati". Azzero l'inset orizzontale così partono allo stesso
     bordo dell'hero (240→1680) su desktop. Il padding mobile resta intatto. */
  .hd-browse-search-strip__inner {
      padding-left: 0 !important;
      padding-right: 0 !important;
      /* 2026-05-31 owner: box "Aggiungi date" più grande su desktop. */
      padding-top: 20px !important;
      padding-bottom: 20px !important;
  }
  .hd-no-date-grid {
      padding-left: 0 !important;
      padding-right: 0 !important;
  }
  /* 2026-05-31 owner: font più grandi su desktop — località, banner prezzi-base,
     bottoni e header box prenotazione. (località 3ª passata) */
  .hd-hero-mosaic__meta {
      font-size: 24px !important;
  }
  .hd-browse-search-strip__text {
      font-size: 17px !important;
  }
  .hd-browse-search-strip__btn {
      font-size: 16px !important;
      padding-top: 11px !important;
      padding-bottom: 11px !important;
  }
  .hd-hero-mosaic__action-btn {
      font-size: 15px !important;
  }
}

/* 2026-05-31 owner: font box prenotazione (CercaPrezzoSidebar) più grandi su
   DESKTOP e MOBILE — applicati senza media query così valgono ovunque. */
.hd-cerca-prezzo-sidebar__label {
    font-size: 17px !important;
}
.hd-cerca-prezzo-sidebar__price-sub {
    font-size: 15px !important;
}
.hd-cerca-prezzo-sidebar__cta-headline {
    font-size: 15px !important;
}
.hd-cerca-prezzo-sidebar__field-label {
    font-size: 12px !important;
}
.hd-cerca-prezzo-sidebar__field-value {
    font-size: 15.5px !important;
}
.hd-cerca-prezzo-sidebar__cta {
    font-size: 17px !important;
}
.hd-cerca-prezzo-sidebar__contacts-label {
    font-size: 13px !important;
}
.hd-cerca-prezzo-sidebar__contact-btn {
    font-size: 16px !important;
}
/* 2026-05-31 owner: voci "Servizi e strutture" un po' più grandi (desktop+mobile). */
.amenity-item {
    font-size: 15px !important;
}
/* 2026-05-31 owner: testo descrizione struttura più grande (desktop+mobile). */
.hotel-description {
    font-size: 16.5px !important;
    line-height: 1.7 !important;
}

/* 2026-05-31 owner: voci "Servizi e strutture" più grandi solo su DESKTOP
   (in coda al file così vince sul blocco unificato a 15px). */
@media (min-width: 992px) {
    .amenity-item {
        font-size: 17px !important;
    }
}

/* ════════════════════════════════════════════════════════════════
   2026-06-01 (owner) — Ritocchi mobile scheda hotel
   1) Room card "Vedi foto (N)": solo icona fotocamera (label nascosta,
      testo troppo ingombrante su mobile).
   2) Hero: comune accanto alle stelle; indirizzo + rating chip nascosti.
   (Il bottone "Salva" hero è già display:none su mobile → il cuore
   preferiti vive solo nella sticky header in alto, vicino al photo-count.)
   ════════════════════════════════════════════════════════════════ */
@media (max-width: 768px) {
    /* 1) Room card: mostra l'icona, nascondi la label "Vedi foto". */
    .hd-room-cards-grid .hd-room-card-photos-btn--inline i { display: inline-block !important; margin-right: 1px; }
    .hd-room-card-photos-btn__txt { display: none !important; }

    /* 2) Comune accanto alle stelle (bianco, leggibile sull'hero). */
    .hd-hero-mosaic__stars { display: inline-flex; }
    .hd-hero-mosaic__comune-mobile {
        display: inline-flex;
        align-items: center;
        margin-left: 8px;
        color: #fff;
        font-size: 13px;
        font-weight: 600;
        text-shadow: 0 1px 4px rgba(0, 0, 0, 0.55);
        vertical-align: middle;
    }
    /* Via indirizzo + punteggio (rating) dall'hero su mobile. */
    .hd-hero-mosaic__address { display: none !important; }
    .hd-hero-mosaic__title-block .hd-hero-mosaic__rating-chip { display: none !important; }
}
/* Desktop: il comune resta solo nell'indirizzo, non duplicato vicino alle stelle. */
@media (min-width: 769px) {
    .hd-hero-mosaic__comune-mobile { display: none; }
}

/* ════════════════════════════════════════════════════════════════
   2026-06-01 (owner) — Hero mobile overlay: cuore in alto + comune
   accanto alle stelle (correzione: target overlay reale, non title-row).
   ════════════════════════════════════════════════════════════════ */
@media (max-width: 768px) {
    /* Wrapper top-right: [cuore] [📷 1/N] */
    .hd-hero-mosaic__top-actions {
        position: absolute;
        top: 14px;
        right: 14px;
        z-index: 6;
        display: flex;
        align-items: center;
        gap: 8px;
    }
    /* Badge foto: dentro il wrapper flex → niente più absolute proprio. */
    .hd-hero-mosaic__top-actions .hd-hero-mosaic__photo-count-badge {
        position: static !important;
        top: auto !important;
        right: auto !important;
    }
    /* Cuore preferiti tondo scuro, coerente col badge. */
    .hd-hero-mosaic__top-heart {
        display: inline-flex;
        align-items: center;
        justify-content: center;
        width: 34px;
        height: 34px;
        padding: 0;
        border: none;
        border-radius: 50%;
        background: rgba(20, 30, 50, 0.85);
        color: #fff;
        font-size: 15px;
        line-height: 1;
        cursor: pointer;
        -webkit-backdrop-filter: blur(6px);
        backdrop-filter: blur(6px);
    }
    .hd-hero-mosaic__top-heart i { line-height: 1; }
    .hd-hero-mosaic__top-heart.is-saved i,
    .hd-hero-mosaic__top-heart i.bi-heart-fill { color: #ff5a7a; }

    /* Comune accanto alle stelle (una riga). */
    .hd-hero-mosaic__mobile-overlay__starline {
        display: flex;
        align-items: center;
        gap: 8px;
        flex-wrap: wrap;
    }
    .hd-hero-mosaic__mobile-overlay__comune {
        color: #fff;
        font-size: 13px;
        font-weight: 600;
        text-shadow: 0 1px 4px rgba(0, 0, 0, 0.55);
    }
}


/* ===========================================================================
   "Discorso camere" — typology card (UNA card per tipologia con varianti).
   Renderizzata da templates/public/partials/_room_typology_cards.html quando
   una tipologia ha 2+ varianti. Le tipologie con 1 sola variante restano
   .option-card.room-option-card semplici (nessun wrapper).
   =========================================================================== */
.hd-typology-card {
    border: 1px solid var(--hair, #e5e1d8);
    border-radius: 12px;
    background: #fff;
    padding: 14px 14px 10px;
    margin: 0;
    display: flex;
    flex-direction: column;
    gap: 6px;
}
.hd-typology-card.is-best {
    border-color: var(--accent, #f5a623);
    box-shadow: 0 0 0 2px rgba(245, 166, 35, 0.12);
}
.hd-typology-card__head {
    display: flex;
    align-items: flex-start;
    justify-content: space-between;
    gap: 10px;
}
.hd-typology-card__title-wrap {
    display: flex;
    align-items: center;
    flex-wrap: wrap;
    gap: 8px;
    min-width: 0;
}
.hd-typology-card__title {
    font-size: 1.02rem;
    font-weight: 700;
    color: var(--primary, #1e3c72);
    line-height: 1.25;
    word-wrap: break-word;
}
.hd-typology-card__from {
    flex-shrink: 0;
    text-align: right;
    line-height: 1.1;
}
.hd-typology-card__from-label {
    display: block;
    font-size: 0.7rem;
    color: #888;
    text-transform: uppercase;
    letter-spacing: 0.03em;
}
.hd-typology-card__from-price {
    font-size: 1.1rem;
    font-weight: 700;
    color: var(--primary, #1e3c72);
}
.hd-typology-card__hint {
    font-size: 0.76rem;
    color: #6b7280;
    display: flex;
    align-items: center;
    gap: 5px;
}
.hd-typology-card__hint i {
    font-size: 0.8rem;
    color: var(--secondary, #2a5298);
}
.hd-typology-card__variants {
    display: flex;
    flex-direction: column;
    gap: 8px;
    margin-top: 2px;
}
/* Variant rows inside a typology card: lighter chrome than a standalone card
   (the typology card already provides the outer border/elevation). */
.hd-typology-card__variants .option-card.room-option-card.hd-variant-option {
    border: 1px solid var(--hair, #e5e1d8);
    border-radius: 10px;
    background: #fafafa;
    padding: 10px 12px;
    margin: 0;
    cursor: pointer;
    transition: border-color 0.15s, box-shadow 0.15s, background 0.15s;
}
.hd-typology-card__variants .option-card.room-option-card.hd-variant-option:hover {
    border-color: var(--secondary, #2a5298);
}
.hd-typology-card__variants .option-card.room-option-card.hd-variant-option.selected {
    border-color: var(--accent, #f5a623);
    background: rgba(245, 166, 35, 0.06);
    box-shadow: 0 0 0 2px rgba(245, 166, 35, 0.16);
}
.hd-typology-card__variants .option-card.room-option-card.hd-variant-option .room-card-name {
    font-size: 0.9rem;
}
/* Variant rows always lay out horizontally (name left, price right), even on
   desktop where the standalone room cards use a column header. */
.hd-typology-card__variants .option-card.room-option-card.hd-variant-option .d-flex {
    flex-direction: row !important;
    align-items: center !important;
    gap: 10px !important;
}
.hd-typology-card__variants .option-card.room-option-card.hd-variant-option .room-card-price-col {
    text-align: right !important;
    margin: 0 !important;
    padding-top: 0;
    border: none !important;
    flex-shrink: 0;
    display: flex !important;
    flex-direction: row !important;
    align-items: baseline !important;
    gap: 8px;
    justify-content: flex-end;
}
@media (max-width: 575px) {
    .hd-typology-card__title { font-size: 0.95rem; }
    .hd-typology-card__from-price { font-size: 1rem; }
    .hd-typology-card__variants .option-card.room-option-card.hd-variant-option .room-card-name { font-size: 0.85rem; }
}

/* 2026-06-05 owner SESSIONE 2 (item 2) — prezzo BARRATO sopra lo scontato su
   mobile. Override delle regole row più specifiche: L4901 (card singola) e
   L8446 (card variante). Posizionato DOPO entrambe per vincere il cascade. */
@media (max-width: 575.98px) {
    /* 2026-06-06 owner — nome camera leggermente più piccolo (così "Vedi foto" sta in riga). */
    .hd-room-cards-grid > .option-card.room-option-card .room-card-name { font-size: 14px !important; }
    /* 2026-06-06 owner — prezzo barrato A SINISTRA dello scontato (affiancato), non più impilato. */
    .hd-typology-card__variants .option-card.room-option-card.hd-variant-option .room-card-price-col,
    .hd-room-cards-grid > .option-card.room-option-card .room-card-price-col {
        flex-direction: row !important;
        align-items: baseline !important;
        justify-content: flex-end !important;
        gap: 6px !important;
        text-align: right !important;
    }
    .hd-typology-card__variants .room-card-price-struck,
    .hd-room-cards-grid .room-card-price-struck { font-size: 12px !important; line-height: 1.1; }
    .hd-typology-card__variants .room-card-price-big,
    .hd-room-cards-grid .room-card-price-big { font-size: 22px !important; line-height: 1.05; }
}

/* 2026-06-06 owner — CARD CAMERA MOBILE — layout definitivo (image #20):
   Riga 1: NOME camera completo (va a capo se lungo).
   Riga 2: "Foto · Pacchetto incluso" (etichette corte, stessa riga, "·" visibile).
   Colonna destra: prezzo BARRATO sopra lo SCONTATO (impilato), in alto a destra.
   Blocco autoritativo: dopo tutte le regole precedenti per vincere il cascade. */
@media (max-width: 767.98px) {
    /* card a RIGA: [colonna sinistra: nome + link]  [colonna prezzo a destra] */
    .hd-room-cards-grid .option-card > .d-flex.align-items-start {
        flex-direction: row !important;
        flex-wrap: nowrap !important;
        align-items: flex-start !important;
        gap: 10px !important;
    }
    .hd-room-cards-grid .option-card > .d-flex.align-items-start > div[style*="flex: 1"] {
        display: block !important; min-width: 0;
    }
    .hd-room-cards-grid .option-card > .d-flex.align-items-start > div[style*="flex: 1"] > .mb-1 {
        display: block !important; white-space: normal !important; margin-bottom: 0 !important;
    }
    /* Riga 1 — nome su riga propria */
    .hd-room-cards-grid .room-card-name {
        display: block !important; white-space: normal !important; font-size: 15px !important; margin-bottom: 2px;
    }
    /* Riga 2 — "Foto · Pacchetto incluso" inline ("·" visibile) */
    .hd-room-cards-grid .hd-room-card-photos-btn--inline {
        display: inline-flex !important; vertical-align: baseline; margin: 0 !important;
    }
    .hd-room-cards-grid .hd-room-card-photos-btn--inline i { display: inline-block !important; }
    .hd-room-cards-grid .hd-room-card-photos-btn__txt { display: inline !important; }
    .hd-room-cards-grid .hd-room-card-photos-btn__count { display: none !important; }
    .hd-room-cards-grid .hd-room-pkg-sep { display: inline !important; margin: 0 5px; color: #9aa1aa; }
    .hd-room-cards-grid .hd-room-pkg-link {
        display: inline-flex !important; flex: 0 0 auto !important; margin: 0 !important;
        width: auto !important; max-width: 100%; vertical-align: baseline;
    }
    /* Colonna prezzo a destra — BARRATO sopra lo SCONTATO, in alto */
    .hd-typology-card__variants .option-card.room-option-card.hd-variant-option .room-card-price-col,
    .hd-room-cards-grid > .option-card.room-option-card .room-card-price-col {
        flex: 0 0 auto !important;
        align-self: flex-start !important;
        flex-direction: column !important;
        align-items: flex-end !important;
        justify-content: flex-start !important;
        gap: 0 !important;
        margin: 0 !important;
    }
    .hd-room-cards-grid .room-card-price-struck { font-size: 12px !important; line-height: 1.2; }
    .hd-room-cards-grid .room-card-price-big { font-size: 22px !important; line-height: 1.05; }
    /* 2026-06-07 owner (OTA/nativo): prezzo camera allineato AL FONDO della card,
       cioè all'altezza del trattamento a destra (era in alto col nome). Batte il
       flex-start qui sopra via body:not() + !important. AVES escluso (markup proprio). */
    body:not(.page-hotel-detail-aves) .hd-typology-card__variants .option-card.room-option-card.hd-variant-option .room-card-price-col,
    body:not(.page-hotel-detail-aves) .hd-room-cards-grid > .option-card.room-option-card .room-card-price-col {
        align-self: flex-end !important;
    }
}

/* ===========================================================================
   "Magia mobile" (2026-06-05 owner) — bottom-sheet riepilogo aperto dal dock
   prezzo "Espandi" (#hdStickyMobileCta). Solo mobile; Prenota è DENTRO lo sheet.
=========================================================================== */
.hd-ms-backdrop {
    position: fixed; inset: 0; background: rgba(0, 0, 0, 0.45);
    opacity: 0; visibility: hidden; transition: opacity 0.25s ease;
    z-index: 1065;
}
.hd-ms-backdrop.is-open { opacity: 1; visibility: visible; }
.hd-ms-sheet {
    position: fixed; left: 0; right: 0; bottom: 0; z-index: 1070;
    background: #fff; border-radius: 18px 18px 0 0;
    box-shadow: 0 -8px 30px rgba(0, 0, 0, 0.18);
    transform: translateY(100%); transition: transform 0.32s cubic-bezier(0.4, 0, 0.2, 1);
    max-height: 85vh; display: flex; flex-direction: column;
}
.hd-ms-sheet.is-open { transform: translateY(0); }
.hd-ms-sheet__handle {
    width: 42px; height: 5px; border-radius: 3px; background: #d0d5dd;
    margin: 10px auto 2px; border: none; padding: 0; cursor: pointer;
}
.hd-ms-sheet__head {
    display: flex; align-items: center; justify-content: space-between;
    padding: 6px 18px 8px;
}
.hd-ms-sheet__title { font-weight: 700; color: var(--primary, #1e3c72); font-size: 1.05rem; }
.hd-ms-sheet__close { border: none; background: none; font-size: 1.7rem; line-height: 1; color: #9aa1aa; padding: 0 4px; }
.hd-ms-sheet__body { overflow-y: auto; -webkit-overflow-scrolling: touch; padding: 4px 18px 8px; flex: 1 1 auto; }
.hd-ms-row { display: flex; justify-content: space-between; gap: 14px; padding: 9px 0; border-bottom: 1px solid #f1f3f5; font-size: 0.93rem; }
.hd-ms-row__lbl { color: #6b6b6b; flex: 0 0 auto; }
.hd-ms-row__val { color: var(--primary, #1e3c72); font-weight: 600; text-align: right; }
.hd-ms-supl { padding: 6px 0; border-bottom: 1px solid #f1f3f5; }
.hd-ms-sheet__foot { padding: 12px 18px calc(12px + env(safe-area-inset-bottom, 0px)); border-top: 1px solid #eee; background: #fff; }
.hd-ms-sheet__total { display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 10px; }
.hd-ms-sheet__total-lbl { color: #6b6b6b; font-size: 0.95rem; }
.hd-ms-sheet__total-val { font-size: 1.45rem; font-weight: 800; color: var(--accent, #f5a623); }
.hd-ms-sheet__cta {
    display: flex; align-items: center; justify-content: center; gap: 8px;
    width: 100%; padding: 14px; border: none; border-radius: 12px;
    background: var(--accent, #f5a623); color: #fff; font-weight: 700; font-size: 1.05rem;
}
.hd-ms-sheet__cta:hover { filter: brightness(1.05); color: #fff; }
body.hd-ms-open { overflow: hidden; }
/* Sheet + backdrop sono SOLO mobile (il dock "Espandi" non esiste su desktop). */
@media (min-width: 992px) {
    .hd-ms-sheet, .hd-ms-backdrop { display: none !important; }
}


/* "Magia mobile" (2026-06-05 owner) — su mobile il box riepilogo inline
   (#hdBookingCol) è RIMOSSO: il suo contenuto va "pari pari" nel bottom-sheet
   "Espandi" del dock (clonato in #hdMobileSummaryBody). */
@media (max-width: 991.98px) {
    #hdBookingCol { display: none !important; }
}
/* Card riepilogo clonata dentro lo sheet: flatten della chrome (bg/ombra/raggio
   già forniti dallo sheet); mantiene il layout interno (chip, totale, acconto). */
.hd-ms-cardclone {
    box-shadow: none !important;
    border: none !important;
    border-radius: 0 !important;
    padding: 0 !important;
    margin: 0 !important;
    position: static !important;
    width: 100% !important;
    max-width: 100% !important;
}


/* ============ MOBILE booking dock NAVY — spec owner 2026-06-05 ("claude design") ====
   Pannello bottom unico (<992px): barra collassata (Totale + Riepilogo + Prenota)
   sempre visibile; tap su prezzo o "Riepilogo" apre/chiude il body = box prenota
   (#hdBookingCol) clonato. Backdrop scuro su apertura. Override del dock bianco. */
@media (max-width: 991.98px) {
    .hd-sticky-mobile-cta {
        background: linear-gradient(135deg, #1e3c72 0%, #2a66c2 100%) !important;
        border: none !important;
        border-radius: 18px 18px 0 0 !important;
        box-shadow: 0 -8px 32px rgba(26, 58, 92, 0.20) !important;
        padding: 0 !important;
        display: block !important;
        z-index: 1070;
        max-height: 92vh;
    }
    /* Dock SEMPRE visibile su mobile: il box inline (#hdBookingCol) è display:none,
       quindi il dock è l'unica UI prenota e va "fissa in basso". Neutralizza il
       gating .hidden (basato sulla visibilità del box, ora nascosto → non scattava). */
    .hd-sticky-mobile-cta.hidden { transform: translateY(0) translateZ(0) !important; }
    /* backdrop scuro dietro lo sheet espanso (tap = chiudi); sotto il pannello. */
    .hd-ms-backdrop {
        position: fixed; inset: 0; z-index: 1060;
        background: rgba(15, 38, 64, 0.45);
        opacity: 0; visibility: hidden; transition: opacity 0.28s ease;
    }
    .hd-ms-backdrop.is-open { opacity: 1; visibility: visible; }
    .hd-sticky-mobile-cta__notch {
        display: block; width: 44px; height: 5px; border-radius: 3px;
        background: rgba(255, 255, 255, 0.45); margin: 9px auto 0;
    }
    .hd-sticky-mobile-cta__header {
        display: flex; align-items: center; gap: 10px;
        /* padding-right > left: stacca i tasti (Riepilogo/Prenota) di qualche px
           dal bordo destro quando la barra è collassata (owner 2026-06-05). */
        padding: 8px 20px calc(10px + env(safe-area-inset-bottom, 0px)) 14px;
    }
    .hd-sticky-mobile-cta.is-expanded .hd-sticky-mobile-cta__header { padding-bottom: 8px; }
    .hd-sticky-mobile-cta__price-block { display: flex; flex-direction: column; line-height: 1.02; min-width: 0; margin-right: auto; padding-left: 6px; cursor: pointer; }
    /* 2026-06-06 owner: togli l'icona calendario dal box date (barra Modifica) su mobile.
       Selettore allineato a .hd-modify-bar__group:first-child (riga ~6885, stessa media query)
       + .bi-calendar3 → specificità (0,4,0) > (0,3,0) della regola che la forzava visibile. */
    .hd-modify-bar__group:first-child .hd-modify-bar__icon.bi-calendar3 { display: none !important; }
    .hd-sticky-mobile-cta__label { font-size: 10.5px; font-weight: 700; letter-spacing: 0.6px; text-transform: uppercase; color: rgba(255, 255, 255, 0.60); }
    .hd-sticky-mobile-cta__price { display: flex; flex-direction: row; align-items: center; gap: 7px; }
    .hd-sticky-mobile-cta__final { font-size: 27px; font-weight: 800; color: #fff !important; letter-spacing: -0.5px; line-height: 1.02; }
    .hd-sticky-mobile-cta__struck { font-size: 11px; text-decoration: line-through; color: rgba(255, 255, 255, 0.55) !important; font-weight: 600; }
    /* Task D (owner 2026-06-06) — riga risparmio nella barra collassata (offerta attiva) */
    .hd-sticky-mobile-cta__savings { display: flex; align-items: center; flex-wrap: wrap; gap: 5px; margin-top: 2px; font-size: 11.5px; font-weight: 600; color: rgba(255, 255, 255, 0.78); line-height: 1.1; }
    .hd-sticky-mobile-cta__savings strong { color: #b9e34b; font-weight: 800; }
    .hd-sticky-mobile-cta__pct { background: #b9e34b; color: #0f2640; font-size: 12px; font-weight: 800; padding: 2px 8px; border-radius: 999px; line-height: 1.3; white-space: nowrap; }
    /* "Riepilogo" — pill ghost */
    .hd-sticky-mobile-cta__riepilogo {
        display: inline-flex; align-items: center; justify-content: center; gap: 5px;
        min-height: 41px; flex: 0 0 auto;
        background: rgba(255, 255, 255, 0.12); color: #fff !important;
        border: 1.5px solid rgba(255, 255, 255, 0.35); border-radius: 11px;
        padding: 0 12px; font-size: 12.5px; font-weight: 800; white-space: nowrap;
    }
    .hd-sticky-mobile-cta__riepilogo i { font-size: 13px; }
    /* "Prenota" — lime pieno */
    .hd-sticky-mobile-cta__btn {
        display: inline-flex; align-items: center; justify-content: center; gap: 5px;
        min-height: 41px; flex: 0 0 auto;
        background: linear-gradient(135deg, #a4c639 0%, #8fb02e 100%) !important;
        color: #fff !important; border: none !important;
        border-radius: 11px !important; padding: 0 14px !important;
        font-size: 13px; font-weight: 800; white-space: nowrap;
        box-shadow: 0 6px 16px rgba(164, 198, 57, 0.45) !important;
    }
    .hd-sticky-mobile-cta__btn i { font-size: 13px; }
    .hd-sticky-mobile-cta__btn:hover, .hd-sticky-mobile-cta__btn:focus { filter: brightness(1.04); color: #fff !important; }
    /* body collassabile: clone del box riepilogo (#hdBookingCol) */
    .hd-sticky-mobile-cta__body {
        max-height: 0; overflow: hidden; background: #fff;
        transition: max-height 0.28s cubic-bezier(0.4, 0, 0.2, 1);
    }
    .hd-sticky-mobile-cta.is-expanded .hd-sticky-mobile-cta__body {
        max-height: 72vh; overflow-y: auto; -webkit-overflow-scrolling: touch;
        /* 2026-06-07 owner: lo scroll resta DENTRO lo sticky, non sfonda sulla pagina dietro. */
        overscroll-behavior: contain;
        padding: 12px 16px calc(14px + env(safe-area-inset-bottom, 0px));
    }
    /* il clone del box dentro il pannello: flatten chrome (lo sfondo è già il sheet) */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone { box-shadow: none !important; border: none !important; border-radius: 0 !important; padding: 0 !important; margin: 0 !important; width: 100% !important; max-width: 100% !important; display: block !important; }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-price-summary-card { box-shadow: none !important; border: none !important; padding: 0 !important; }
    /* owner 2026-06-06 (FIX box promo più stretto): in promo il body INTERNO della card
       ha padding 18px (.hd-price-summary-card--promo .__body, base CSS) mentre nel
       no-promo è 0 → nel clone il contenuto (nome/chip/prezzi/pay-mini) risultava
       rientrato di 18px IN PIÙ del no-promo, facendo sembrare tutto il box più stretto.
       Azzero il padding interno: il rientro del contenuto lo dà già il sheet __body (16px),
       come nel no-promo. Scoped al clone → desktop intatto. */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-price-summary-card--promo .hd-price-summary-card__body { padding: 0 !important; }
    /* owner 2026-06-06 (FIX fasce bianche ai lati): la card --promo ha overflow:hidden
       (serve sul box desktop per ritagliare la banda agli angoli 16px), ma nel clone
       della sheet ritaglia la banda full-bleed (margin negativo) ai bordi della card
       → 16px di bianco per lato. Nel dock il clip arrotondato lo fa già
       .hd-sticky-mobile-cta (overflow:hidden + radius 18px), quindi qui la card può
       sforare: overflow visible → la banda arriva davvero a filo dei bordi. La card
       no-promo non ha overflow:hidden, per questo era già piena. */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-price-summary-card--promo { overflow: visible !important; }
    /* 2026-06-05 owner SESSIONE 2 (item 7): nome hotel in cima al riepilogo
       espanso (iniettato via JS solo nel clone) + leggero polish, come nei mockup. */
    .hd-sticky-mobile-cta__body .hd-ms-hotelname {
        font-size: 18px; font-weight: 800; color: var(--primary, #1e3c72);
        line-height: 1.2; margin: 2px 0 12px; letter-spacing: -0.2px;
    }
    /* item 7 v2: righe pulite senza box/icone (come nel mockup) — solo nel dock. */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-price-summary-card__chips {
        background: transparent !important; border: none !important;
        padding: 0 !important; margin: 0 0 10px !important; gap: 4px !important;
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-price-summary-card__chip > i { display: none !important; }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-price-summary-card__chip {
        padding: 0 !important; background: transparent !important; border: none !important;
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-price-summary-card__chip-main {
        font-size: 14px; color: #6b7280; font-weight: 400 !important;
    }
    /* riga camera = bold navy (gli altri dettagli restano regular grigi) */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-ms-roomline {
        font-weight: 700 !important; color: #1e3c72 !important;
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-ms-roomline .hd-ms-occ {
        color: inherit !important; font-weight: inherit !important;
    }
    /* 2026-06-06 owner — dock AVES: la riga CAMERA in bold navy (parità con la
       .hd-ms-roomline del nativo; su AVES il clone NON applica le riscritture JS,
       i chip hanno classi stabili hd-aves-chip--*). Trattamento/data restano grigi. */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-aves-chip--room .hd-price-summary-card__chip-main {
        font-weight: 700 !important; color: #1e3c72 !important;
    }
    /* ===== item 8 (2026-06-05 owner): STATO SCONTO del sheet — riuso il componente
       .hd-savings-banner come header, rifinito alla spec (cerchio-icona come il
       no-promo, dimensioni esatte, pill bianca su navy, bottone Chiudi). Solo nel
       dock mobile. ===== */
    /* owner 2026-06-06: PARITÀ icona con lo stato no-promo (.hd-bestprice-box__icon).
       Prima l'icona ⭐ del savings-banner era nascosta nel clone → la banda promo
       partiva senza cerchio mentre il no-promo ("MIGLIOR PREZZO GARANTITO") mostrava
       lo scudo in un cerchio → "differenza" segnalata dall'owner. Ora il cerchio è
       IDENTICO (32px, stessa trasparenza, niente bordo) così entrambe le bande hanno
       lo schema [cerchio-icona] [titolo] … Chiudi. */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-savings-banner__icon-wrap {
        display: inline-flex !important;
        width: 32px !important; height: 32px !important;
        border-radius: 50% !important;
        background: rgba(255, 255, 255, 0.18) !important;
        border: none !important;
        align-items: center; justify-content: center;
        flex-shrink: 0; align-self: center;
        font-size: 1.05rem !important; color: #fff;
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-savings-banner__label {
        font-size: 9.5px; font-weight: 800; text-transform: uppercase;
        letter-spacing: .8px; color: rgba(255, 255, 255, .62);
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-savings-banner__amount {
        font-size: 20px; font-weight: 800; color: #fff;
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-savings-banner__sub {
        font-size: 12px; font-weight: 600; color: rgba(255, 255, 255, .7);
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-savings-banner__pill {
        background: #fff !important; color: #1e3c72 !important;
        font-size: 13px; font-weight: 800; padding: 7px 13px; border-radius: 999px;
    }
    /* owner 2026-06-06: HEADER UNICO anche per lo stato PROMO (savings-banner) —
       parità con "MIGLIOR PREZZO GARANTITO": banda a filo del top (full-bleed via
       margini negativi che sfondano il padding del body), angoli arrotondati e
       MANIGLIA/linea (::before) sopra. Prima il savings-banner restava rientrato e
       senza maniglia → "totalmente diverso" dal no-promo. */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-savings-banner {
        position: relative;
        /* owner 2026-06-06 (FIX Safari): il savings-banner ha overflow:hidden (BFC);
           su WebKit un BFC con width:auto NON si espande coi margini negativi → la
           banda restava rientrata (mentre il bestprice-box, senza overflow:hidden, era
           full-bleed). Larghezza ESPLICITA calc(100% + 36px) → full-bleed su tutti i motori. */
        box-sizing: border-box;
        width: calc(100% + 36px) !important;
        max-width: none !important;
        /* niente BFC: identico al .hd-bestprice-box (che è full-bleed su Safari).
           Lo __sheen è position:absolute inset:0 → non sfora. */
        overflow: visible !important;
        margin: 0 -18px 16px !important;
        padding: 24px 16px 13px !important;
        border-radius: 18px 18px 0 0 !important;
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-savings-banner::before {
        content: ''; position: absolute; top: 10px; left: 50%; transform: translateX(-50%);
        width: 44px; height: 5px; border-radius: 3px; background: rgba(255, 255, 255, .5);
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-savings-banner .hd-ms-sheet-close {
        align-self: center; margin-left: auto !important;
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-ms-sheet-close {
        border: none; border-radius: 999px;
        background: rgba(255, 255, 255, .18); color: #fff; cursor: pointer;
        display: inline-flex; align-items: center; gap: 5px; line-height: 1;
        padding: 6px 12px; font-size: 12.5px; font-weight: 700;
        flex-shrink: 0; margin-left: 8px;
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-ms-sheet-close:hover { background: rgba(255, 255, 255, .28); }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-ms-sheet-close i { font-size: 12px; }
    /* item 8: barrato "Totale soggiorno"/"Totale" in grigio line-through (spec). */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-price-summary-card__struck {
        color: #9ca3af !important; text-decoration: line-through; font-weight: 600;
    }
    /* ===== item 10 (2026-06-05 owner): sheet nave NO-promo → mockup (Image #10),
       scoped al dock, riusa classi/token esistenti. ===== */
    /* 3) "Totale soggiorno" è un SUBTOTALE → navy (il Totale grande resta ambra). */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-price-summary-card__price-row .hd-price-summary-card__price {
        color: #1e3c72 !important; font-size: 18px !important;
    }
    /* 4) "incluso" delle tratte nave → verde lime. */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-nave-package__incluso {
        color: #2e9e5b !important; font-weight: 700;
    }
    /* 2026-06-06 owner: "Totale soggiorno" e "Totale pacchetto nave" in grassetto. */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-price-summary-card__total-caption { font-weight: 700 !important; }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-nave-package__total { font-weight: 700 !important; }
    /* 1) banda "MIGLIOR PREZZO GARANTITO" → navy (era verde) + Chiudi a destra. */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-bestprice-box {
        background: linear-gradient(135deg, #1e3c72 0%, #2a66c2 100%) !important;
        position: relative;
        /* HEADER UNICO: la banda è l'INTERO header (un solo gradiente), a filo del
           top del sheet, con la maniglia disegnata sopra (::before). Il notch del
           dock è nascosto (sotto) → niente più "cucitura" tra maniglia e banda. */
        border-radius: 18px 18px 0 0 !important;
        margin-top: 0 !important;
        padding-top: 24px !important;
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-bestprice-box::before {
        content: ''; position: absolute; top: 10px; left: 50%; transform: translateX(-50%);
        width: 44px; height: 5px; border-radius: 3px; background: rgba(255, 255, 255, .5);
    }
    /* header unico: nascondo il notch del dock (la banda ha la sua maniglia ::before)
       e porto il body a filo del top dello sheet. */
    .hd-sticky-mobile-cta.is-expanded .hd-sticky-mobile-cta__notch { display: none !important; }
    .hd-sticky-mobile-cta.is-expanded .hd-sticky-mobile-cta__body { padding-top: 0 !important; }
    /* 2026-06-06 owner: gli angoli bianchi quadrati del body spuntavano oltre
       l'arrotondamento → ritaglio il dock alla sua forma arrotondata: gli angoli
       superiori diventano trasparenti (backdrop), niente più bianco. */
    .hd-sticky-mobile-cta.is-expanded { overflow: hidden !important; }
    /* Chiudi allineato alla riga "MIGLIOR PREZZO GARANTITO": in-flow (flex item),
       spinto a destra, centrato col testo (non sull'intera banda+maniglia). */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-bestprice-box .hd-ms-sheet-close {
        position: static !important; top: auto; right: auto; transform: none;
        margin-left: auto !important; align-self: center;
    }
    /* 2) occupazione nella riga camera + 5) icona info "loco". */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-ms-occ { color: #5a6577; font-weight: 600; }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-ms-loco-i { font-size: .85em; color: #9ca3af; }
    /* 2026-06-05 owner: allinea a sinistra i testi soggiorno (date/camera/trattamento).
       Il chip è display:grid con colonna icona riservata (l'icona è display:none ma
       la traccia grid NON collassa → testo a 40px). Lo porto a FLEX: l'icona nascosta
       non occupa spazio → testo a 16px (label sx, eventuale prezzo a dx). */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-price-summary-card__chip {
        display: flex; align-items: baseline; gap: 8px;
        justify-content: space-between; padding-left: 0 !important;
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-price-summary-card__chip-main { margin-left: 0 !important; }
    /* ===== owner 2026-06-06 (sheet aperto) — miglioramenti riepilogo ===== */
    /* (3) Riepilogo offerta in cima: trattamento + extra-pacchetto come pill badge. */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-ms-offer-row {
        display: flex; flex-wrap: wrap; gap: 6px; margin: 2px 0 12px;
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-ms-offer-chip {
        display: inline-flex !important; align-items: center; gap: 5px;
        background: #eef2f7 !important; color: #1e3c72 !important;
        padding: 5px 11px !important; border-radius: 999px !important;
        font-size: 12.5px !important; font-weight: 700 !important;
        margin: 0 !important; justify-content: flex-start !important;
        border: none !important; line-height: 1.2;
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-ms-offer-chip > i {
        display: inline-block !important; color: var(--primary, #1e3c72) !important; font-size: 12px !important;
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-ms-offer-chip .hd-price-summary-card__chip-main {
        color: inherit !important; font-weight: 700 !important; font-size: 12.5px !important;
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-ms-offer-chip--extra {
        background: #e8f6ee !important; color: #1f6e44 !important;
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-ms-offer-chip--extra > i { color: #1f8a4d !important; }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-ms-offer-chip--extra > span { color: inherit !important; font-weight: 700 !important; }
    /* 2026-06-07 owner — sticky-aperto: la chip trattamento (nativo+OTA, .--plain)
       resta in cima nella offer-row ma SENZA pill/bordo (solo testo + "i" info).
       L'extra-pacchetto mantiene il suo pill. AVES (con egg-fried, no --plain) invariata. */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-ms-offer-chip.hd-price-summary-card__chip--plain {
        background: transparent !important; border: none !important;
        border-radius: 0 !important; padding: 0 !important;
    }
    /* 2026-06-07 owner — sticky-aperto: il tooltip "i" del trattamento si apre
       SOPRA il testo e ancorato a DESTRA (cresce verso sinistra) così non viene
       tagliato dal bordo schermo. Nel clone il tap non setta is-open (i listener
       non vengono copiati dal cloneNode) → il tooltip appare via :hover con la
       posizione desktop (absolute a destra) e sfora: lo riposiziono a prescindere
       da is-open. Il transform sullo sheet rende inaffidabile position:fixed. */
    .hd-sticky-mobile-cta__body .hd-ms-offer-chip .hd-loco-info { position: relative; }
    .hd-sticky-mobile-cta__body .hd-ms-offer-chip .hd-loco-tip {
        position: absolute !important;
        left: auto !important; right: 0 !important;
        top: auto !important; bottom: calc(100% + 8px) !important;
        transform: none !important;
        width: max-content !important; max-width: 72vw !important;
        white-space: normal !important; z-index: 2500 !important;
    }
    .hd-sticky-mobile-cta__body .hd-ms-offer-chip .hd-loco-tip::after { display: none !important; }
    /* 2026-06-07 owner — clone aperto: chip date / camera+persone / trattamento TUTTI
       stesso carattere (solo il nome hotel più grande). Override del room-line bold navy. */
    .hd-sticky-mobile-cta__body .hd-ms-chips-uniform .hd-price-summary-card__chip-main,
    .hd-sticky-mobile-cta__body .hd-ms-chips-uniform .hd-ms-roomline,
    .hd-sticky-mobile-cta__body .hd-ms-chips-uniform .hd-ms-occ {
        font-size: 13.5px !important; font-weight: 400 !important; color: #4a4a4a !important;
    }
    /* 2026-06-07 owner — l'header "MIGLIOR PREZZO GARANTITO" resta FISSO in cima allo
       sheet mentre il contenuto scorre (era dentro il body scrollabile → scorreva via). */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-bestprice-box {
        position: sticky !important; top: 0 !important; z-index: 6 !important;
    }
    /* (2) Gerarchia: separatore + prezzo finale "Totale soggiorno" più in evidenza. */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-price-summary-card__price-row--above-cta {
        border-top: 1px solid #ececf1; margin-top: 14px !important; padding-top: 12px !important;
    }
    /* owner 2026-06-06: "Totale soggiorno" = totale FINALE → arancione + più grande
       (solo se NON c'è pacchetto nave: con la nave resta subtotale navy, il grande
       "Totale" sotto è già ambra). Marcato via JS .hd-ms-final-total. */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-ms-final-total .hd-price-summary-card__price {
        color: #e8821e !important; font-size: 25px !important;
    }
    /* 2026-06-05 owner: tasti secondari su UNICA riga — Salva preventivo 50% ·
       WhatsApp 25% · Telefono 25% (flex 2:1:1). Contatti icona-only (mockup). */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-quote-row {
        display: flex !important; flex-wrap: nowrap !important; gap: 8px;
        align-items: stretch; margin: 0 !important;
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-quote-row > .hd-quote-btn {
        flex: 1 1 auto !important; min-width: 0; margin: 0 !important;
    }
    /* WhatsApp/Telefono: quadrati piccoli fissi (Salva preventivo prende il resto). */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-quote-row > .hd-ms-contact-icon {
        flex: 0 0 52px !important; width: 52px; min-width: 0; margin: 0 !important;
        display: inline-flex; align-items: center; justify-content: center; gap: 0;
    }
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-quote-row > .hd-ms-contact-icon i { margin: 0 !important; font-size: 18px; }
    /* tasti più rifiniti: altezza uniforme, angoli morbidi. */
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-quote-row > .hd-quote-btn,
    .hd-sticky-mobile-cta__body .hd-ms-cardclone .hd-quote-row > .hd-ms-contact-icon {
        min-height: 50px !important; border-radius: 14px !important; font-weight: 700;
    }
    /* 390px: prezzo si restringe, i due tasti restano su una riga */
    @media (max-width: 400px) {
        .hd-sticky-mobile-cta__header { gap: 7px; padding-left: 12px; padding-right: 16px; }
        .hd-sticky-mobile-cta__final { font-size: 24px; }
        .hd-sticky-mobile-cta__riepilogo { padding: 0 10px; font-size: 12px; }
        .hd-sticky-mobile-cta__btn { padding: 0 12px; }
    }
    /* La barra (notch + header) è la zona di trascinamento: niente scroll nativo
       qui così lo swipe verticale apre/chiude lo sheet invece di scrollare la pagina. */
    .hd-sticky-mobile-cta__notch,
    .hd-sticky-mobile-cta__header { touch-action: none; }
    .hd-sticky-mobile-cta__notch { cursor: grab; }
    /* ── SHEET APERTO (.is-expanded): nascondiamo l'header (Totale + "Riepilogo" +
       "Prenota") — il riepilogo completo è nel body clonato sotto. Il NOTCH del dock
       è già `display:none !important` sopra (header-unico): in cima resta SOLO la
       banda blu (savings-banner / bestprice-box) con la sua maniglia `::before`.
       La barra COLLASSATA resta invariata.
       owner 2026-06-06: rimossa la vecchia ri-stilatura di `.is-expanded .__notch`
       (margin/width/bg) — era dead code (notch nascosto) e in conflitto. ── */
    .hd-sticky-mobile-cta.is-expanded .hd-sticky-mobile-cta__header { display: none; }
}


/* ============================================================================
   CARD CAMERA — "Vedi pacchetto incluso" A CAPO su TELEFONO (≤575.98px).
   owner 2026-06-05.

   Le regole @media (max-width:767.98px) (≈L6392) forzano nome + "Vedi pacchetto
   incluso" + prezzo su UNA sola riga (flex-wrap:nowrap; white-space:nowrap) con
   specificità 0,6,1 → su telefono il testo sfora e il PREZZO viene TAGLIATO
   (card a varianti Comfort/Superior). Qui, a fine file (sorgente più avanti →
   vince a parità di specificità) e SOLO su telefono (≤575.98px, sotto i tablet
   dove la riga unica ci sta), impiliamo la colonna testo in verticale e mandiamo
   il link su riga propria sotto il nome. La colonna prezzo torna leggibile.
   ============================================================================ */
@media (max-width: 575.98px) {
    /* colonna testo (nome/pkg/feature) → impila in verticale invece di 1 riga */
    .hd-room-cards-grid .option-card > .d-flex.align-items-start > div[style*="flex: 1"] {
        flex-direction: column;
        align-items: stretch;
        flex-wrap: nowrap;
        gap: 2px;
    }
    /* gruppo nome+link → permetti il wrap; il link va a capo (riga intera) */
    .hd-room-cards-grid .option-card > .d-flex.align-items-start > div[style*="flex: 1"] > .mb-1 {
        flex-wrap: wrap;
        white-space: normal;
        width: 100%;
    }
    /* la barretta "·" non serve più (nome e link non sono più sulla stessa riga) */
    .hd-room-cards-grid .option-card .hd-room-pkg-sep { display: none; }
    .hd-room-cards-grid .option-card .hd-room-pkg-link {
        flex: 0 0 100%;          /* riga propria nel flex-wrap (a capo sotto il nome) */
        margin-top: 4px;
        /* "Vedi pacchetto incluso" su UNA riga: la riga del link è libera a destra
           (il prezzo sta sulla riga del nome) e il testo (~180px) sta comunque
           dentro la card → niente overflow orizzontale. */
        white-space: nowrap;
        justify-content: flex-start;
    }
}
