/*
  Design tokens condivisi, estratti dal mockup (dove erano ripetuti
  identici in ogni singolo file HTML). Da qui in poi vivono in un unico
  posto: qualunque pagina reale li include tramite partials/public/head.ejs
  (o l'equivalente per le altre aree), invece di duplicare il <style>.
*/
:root{
  --ink:#182B26;
  --ink-soft:#54655F;
  --primary:#2F5D50;
  --primary-dark:#1C3B32;
  --primary-tint:#E8EFE9;
  --accent:#C79A4B;
  --accent-dark:#A87F38;
  --accent-tint:#F7EEDC;
  --paper:#FFFFFF;
  --paper-alt:#F6F4EE;
  --line:#E5E1D3;
  --radius-lg:18px;
  --radius-md:12px;
  --radius-sm:8px;
  --shadow-card: 0 10px 30px -14px rgba(24,43,38,.25);
  --shadow-pop: 0 24px 60px -20px rgba(24,43,38,.35);
  --header-h: 60px;
}

*{box-sizing:border-box;}
html{scroll-behavior:smooth;}
body{font-family:'Inter',sans-serif;color:var(--ink);background:var(--paper);-webkit-font-smoothing:antialiased;}
h1,h2,h3,h4,.font-display{font-family:'Fraunces',serif;letter-spacing:-.01em;}
.text-ink-soft{color:var(--ink-soft);}
.text-primary-c{color:var(--primary);}
.bg-paper-alt{background:var(--paper-alt);}
.small-caps{font-size:.72rem;letter-spacing:.14em;text-transform:uppercase;font-weight:700;}
.btn, .form-select, .form-control{min-height:44px;}

/* ---------- Buttons ---------- */
.btn-primary-c{background:var(--primary);border-color:var(--primary);color:#fff;font-weight:600;border-radius:999px;padding:.6rem 1.4rem;}
.btn-primary-c:hover{background:var(--primary-dark);border-color:var(--primary-dark);color:#fff;}
.btn-accent{background:var(--accent);border-color:var(--accent);color:var(--ink);font-weight:700;border-radius:999px;padding:.65rem 1.5rem;}
.btn-accent:hover{background:var(--accent-dark);border-color:var(--accent-dark);color:#fff;}
.btn-outline-c{border:1.5px solid var(--line);color:var(--ink);border-radius:999px;font-weight:600;background:#fff;display:flex;align-items:center;justify-content:center;}
.btn-outline-c:hover{border-color:var(--primary);color:var(--primary);}
.btn-ghost-c{color:var(--ink);font-weight:600;border-radius:999px;}
.btn-ghost-c:hover{background:var(--paper-alt);}

/* ---------- Bottone icona circolare (chat/telefono sulla scheda location,
   ecc.) — classe usata in più punti ma mai definita finora. ---------- */
.btn-icon-circle{width:44px;height:44px;border-radius:50%;border:1.5px solid var(--line);background:#fff;display:flex;align-items:center;justify-content:center;color:var(--ink);font-size:1.1rem;flex:0 0 auto;text-decoration:none;transition:all .15s ease;}
.btn-icon-circle:hover{border-color:var(--primary);color:var(--primary);background:var(--primary-tint);}

/* ---------- Header (shared) ---------- */
.site-header{border-bottom:1px solid var(--line);background:#fff;position:sticky;top:0;z-index:1030;height:var(--header-h);}
.logo-mark{font-family:'Fraunces',serif;font-weight:700;font-size:1.4rem;color:var(--primary-dark);letter-spacing:-.02em;}
.logo-mark span{color:var(--accent-dark);}
.nav-link-c{color:var(--ink-soft);font-weight:600;font-size:.92rem;}
.nav-link-c:hover{color:var(--primary);}
.burger-btn{border:1.5px solid var(--line);border-radius:10px;width:40px;height:40px;background:#fff;display:flex;align-items:center;justify-content:center;font-size:1.1rem;}

/* ---------- Header dashboard (cliente/location): condiviso qui invece che
   duplicato nei rispettivi CSS di area, perche' lo stesso header viene
   riusato anche sulle pagine pubbliche quando l'utente e' loggato (vedi
   partials/public/header.ejs) — le pagine pubbliche caricano solo questo
   foglio di stile, non i CSS delle dashboard, quindi se le regole restano
   solo li' l'header risulta senza stile fuori dalla propria area (bug
   segnalato dall'utente). ---------- */
.dash-header{height:var(--header-h);background:#fff;border-bottom:1px solid var(--line);position:sticky;top:0;z-index:1030;display:flex;align-items:center;}
.header-avatar{width:38px;height:38px;border-radius:50%;background:var(--primary-tint);color:var(--primary-dark);display:flex;align-items:center;justify-content:center;font-weight:700;font-size:.9rem;flex:0 0 auto;}
.dash-nav-link{display:flex;align-items:center;gap:.7rem;padding:.6rem .8rem;border-radius:var(--radius-sm);color:var(--ink-soft);text-decoration:none;font-weight:600;font-size:.9rem;margin-bottom:.15rem;}
.dash-nav-link i{font-size:1.1rem;width:20px;text-align:center;}
.dash-nav-link:hover{background:var(--paper-alt);color:var(--ink);}
.dash-nav-link.active{background:var(--primary-tint);color:var(--primary-dark);}
.dash-nav-divider{height:1px;background:var(--line);margin:.9rem 0;}

/* ---------- Venue card (usata in home, ricerca, dettaglio location) ---------- */
.venue-card{border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;background:#fff;box-shadow:var(--shadow-card);height:100%;transition:transform .18s ease, box-shadow .18s ease;display:flex;flex-direction:column;}
.venue-card:hover{transform:translateY(-3px);box-shadow:0 18px 40px -16px rgba(24,43,38,.3);}
/* Rapporto 4:3 via il classico trucco padding-top (invece della proprietà
   aspect-ratio): con .venue-card__media come figlio flex, l'altezza
   derivata da aspect-ratio non viene sempre trattata come "definita" dal
   motore di rendering per i figli in position:absolute/percentuale —
   risultato, l'immagine (diretta o dentro il carosello) restava alla
   propria proporzione naturale invece di essere ritagliata da object-fit
   (o, con un tentativo di fix successivo, collassava del tutto a altezza
   0). Il padding-top calcolato sulla larghezza è affidabile in ogni
   contesto, da sempre. */
.venue-card__media{position:relative;padding-top:75%;overflow:hidden;background:var(--paper-alt);}
.venue-card__media img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;}
.venue-card__media-empty{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--ink-soft);font-size:1.6rem;}
.venue-card__media .carousel, .venue-card__media .carousel-inner, .venue-card__media .carousel-item{position:absolute;inset:0;}
.venue-card__media .carousel-control-prev, .venue-card__media .carousel-control-next{width:20%;opacity:0;transition:opacity .15s ease;z-index:3;}
.venue-card__media:hover .carousel-control-prev, .venue-card__media:hover .carousel-control-next{opacity:1;}
.venue-card__media .carousel-control-prev-icon, .venue-card__media .carousel-control-next-icon{width:1.3rem;height:1.3rem;}
.venue-card__media .carousel-indicators-mini{position:absolute;bottom:.55rem;left:0;right:0;display:flex;justify-content:center;gap:.3rem;z-index:2;margin:0;}
.venue-card__media .carousel-indicators-mini button{width:5px;height:5px;border-radius:50%;background:rgba(255,255,255,.6);border:none;padding:0;transition:all .15s ease;}
.venue-card__media .carousel-indicators-mini button.active{background:#fff;width:14px;border-radius:999px;}
@media (hover:none){.venue-card__media .carousel-control-prev, .venue-card__media .carousel-control-next{opacity:1;}}
.venue-card__badges{position:absolute;top:.75rem;left:.75rem;z-index:4;display:flex;flex-direction:column;gap:.35rem;align-items:flex-start;}
.venue-card__badge{background:var(--accent);color:var(--ink);font-size:.68rem;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:.3rem .6rem;border-radius:999px;}
.venue-card__badge.verificata{background:var(--primary-dark);color:#fff;}
.venue-card__badge.non-verificato{background:var(--paper-alt);color:var(--ink-soft);border:1px solid var(--line);}
.venue-card__body{padding:1.1rem 1.15rem 1.2rem;display:flex;flex-direction:column;flex:1;}
.venue-card__cat{font-size:.7rem;font-weight:700;letter-spacing:.03em;color:var(--primary-dark);text-transform:uppercase;margin-bottom:.2rem;}
.venue-card__title{font-family:'Fraunces',serif;font-weight:600;font-size:1.15rem;margin-bottom:.15rem;color:var(--ink);text-decoration:none;display:block;}
.venue-card__title:hover{color:var(--primary);}
.venue-card__loc{font-size:.82rem;color:var(--ink-soft);display:flex;align-items:center;gap:.3rem;margin-bottom:.4rem;}
.venue-card__rating{font-size:.83rem;color:var(--ink);margin-bottom:.5rem;}
.venue-card__rating .stars{color:var(--accent-dark);}
.venue-card__desc{font-size:.86rem;color:var(--ink-soft);margin-bottom:.75rem;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.venue-card__meta{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.6rem;border-top:1px dashed var(--line);padding-top:.8rem;margin-top:auto;}
.venue-card__price .label{font-size:.7rem;color:var(--ink-soft);}
.venue-card__price .amount{font-family:'Fraunces',serif;font-weight:600;font-size:1.15rem;color:var(--ink);}
.venue-card__fav{position:absolute;top:.7rem;right:.7rem;z-index:4;width:36px;height:36px;border-radius:50%;background:rgba(255,255,255,.95);border:none;display:flex;align-items:center;justify-content:center;color:var(--ink-soft);}
.venue-card__fav.liked{color:#C0392B;}

/* ---------- Carosello orizzontale di venue-card (usato per "Altre
   location che potrebbero interessarti" e "Aumenta le tue possibilità"
   dopo l'invio di una richiesta) — scroll nativo con i pulsanti prev/next
   gestiti dal listener delegato in partials/public/footer.ejs. ---------- */
.venue-carousel{display:flex;gap:1.1rem;overflow-x:auto;scroll-snap-type:x mandatory;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding-bottom:.3rem;}
.venue-carousel::-webkit-scrollbar{display:none;}
.venue-carousel__item{flex:0 0 auto;width:78%;max-width:300px;scroll-snap-align:start;}
@media (min-width:768px){.venue-carousel__item{width:300px;}}
.carousel-nav-btns{display:flex;gap:.5rem;}

/* ---------- Autosuggest provincia (ricerca "Dove") — sostituisce il
   <datalist> nativo del browser, limitato alle poche province "in
   evidenza" e poco controllabile visivamente. ---------- */
.autosuggest-wrap{position:relative;}
.autosuggest-clear{display:none;position:absolute;top:50%;right:.5rem;transform:translateY(-50%);width:22px;height:22px;border:none;border-radius:50%;background:var(--paper-alt);color:var(--ink-soft);align-items:center;justify-content:center;font-size:.85rem;line-height:1;padding:0;cursor:pointer;z-index:5;}
.autosuggest-clear:hover{background:var(--line);color:var(--ink);}
.autosuggest-wrap.has-value .autosuggest-clear{display:flex;}
.autosuggest-wrap.has-value input{padding-right:2rem;}
.autosuggest-list{display:none;position:absolute;top:calc(100% + .4rem);left:0;right:0;background:#fff;border:1px solid var(--line);border-radius:var(--radius-md);box-shadow:var(--shadow-pop);max-height:260px;overflow-y:auto;z-index:20;padding:.4rem;}
.autosuggest-list.show{display:block;}
.autosuggest-item{display:flex;align-items:center;gap:.5rem;width:100%;text-align:left;border:none;background:none;padding:.55rem .7rem;border-radius:var(--radius-sm);font-size:.88rem;color:var(--ink);}
.autosuggest-item:hover, .autosuggest-item:focus-visible{background:var(--primary-tint);color:var(--primary-dark);}
.autosuggest-item i{color:var(--ink-soft);flex:0 0 auto;}
.autosuggest-item span{color:var(--ink-soft);font-size:.8rem;margin-left:auto;}

/* ---------- Chip (usato in venue-card e altrove) ---------- */
.chip-services{display:flex;flex-wrap:wrap;gap:.4rem;margin-bottom:.9rem;}
.chip{font-size:.72rem;font-weight:600;color:var(--primary-dark);background:var(--primary-tint);border:1px solid #D6E4DB;padding:.28rem .55rem;border-radius:999px;display:inline-flex;align-items:center;gap:.3rem;}

/* ---------- Filtri: grid di card con icona (es. "Informazioni importanti") ---------- */
.filter-check-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:.55rem;margin-bottom:.3rem;}
.filter-check-grid input{position:absolute;opacity:0;pointer-events:none;}
.filter-check-card{border:1.5px solid var(--line);border-radius:var(--radius-md);padding:.7rem .4rem;text-align:center;cursor:pointer;transition:all .15s ease;position:relative;height:86px;display:flex;flex-direction:column;align-items:center;justify-content:center;}
.filter-check-card i{font-size:1.25rem;color:var(--primary);display:block;margin-bottom:.3rem;}
.filter-check-card span{font-size:.74rem;font-weight:600;color:var(--ink);line-height:1.15;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;}
.filter-check-grid input:checked + .filter-check-card{border-color:var(--primary);background:var(--primary-tint);}
.filter-check-grid input:checked + .filter-check-card::after{content:"\F26E";font-family:"bootstrap-icons";position:absolute;top:.3rem;right:.4rem;color:var(--primary);font-size:.75rem;}

/* ---------- Slider "Prezzo massimo" (usato in /cerca e nelle pagine SEO
   categoria×provincia): stile nativo di Bootstrap sostituito con i colori
   del brand — il riempimento della traccia e' calcolato via JS (background
   inline), qui solo l'aspetto di traccia/cursore. ---------- */
.form-range{height:24px;padding:0;}
.form-range:focus{outline:none;box-shadow:none;}
.form-range::-webkit-slider-runnable-track{height:6px;border-radius:999px;background:linear-gradient(to right, var(--primary) var(--pct, 0%), var(--line) var(--pct, 0%));}
.form-range::-webkit-slider-thumb{-webkit-appearance:none;appearance:none;width:22px;height:22px;border-radius:50%;background:var(--primary);border:3px solid #fff;box-shadow:0 2px 8px rgba(24,43,38,.35);margin-top:-8px;cursor:pointer;transition:transform .15s ease;}
.form-range::-webkit-slider-thumb:hover{transform:scale(1.08);}
.form-range:focus-visible::-webkit-slider-thumb{outline:2px solid var(--primary);outline-offset:2px;}
.form-range::-moz-range-track{height:6px;border-radius:999px;background:var(--line);}
.form-range::-moz-range-progress{height:6px;border-radius:999px;background:var(--primary);}
.form-range::-moz-range-thumb{width:22px;height:22px;border-radius:50%;background:var(--primary);border:3px solid #fff;box-shadow:0 2px 8px rgba(24,43,38,.35);cursor:pointer;transition:transform .15s ease;}
.form-range::-moz-range-thumb:hover{transform:scale(1.08);}
.form-range:focus-visible::-moz-range-thumb{outline:2px solid var(--primary);outline-offset:2px;}

/* ---------- Filtri: "vedi altri" per liste lunghe di card (servizi extra,
   opzioni menu) ---------- */
.btn-vedi-altri{background:none;border:none;color:var(--primary-dark);font-weight:700;font-size:.82rem;padding:0;display:flex;align-items:center;gap:.3rem;}
.btn-vedi-altri:hover{color:var(--primary);}
.btn-vedi-altri::after{content:"\F282";font-family:"bootstrap-icons";font-weight:400;transition:transform .2s ease;}
.btn-vedi-altri[aria-expanded="true"]::after{transform:rotate(180deg);}

/* ---------- Toolbar filtri/ordina sticky (mobile) ---------- */
.mobile-toolbar{position:sticky;top:var(--header-h);z-index:1020;background:rgba(255,255,255,.96);backdrop-filter:blur(6px);border-bottom:1px solid var(--line);padding:.6rem 0;}
.mobile-toolbar .scroller{display:flex;gap:.5rem;overflow-x:auto;-webkit-overflow-scrolling:touch;scrollbar-width:none;padding:0 .1rem;}
.mobile-toolbar .scroller::-webkit-scrollbar{display:none;}
.filter-pill{flex:0 0 auto;display:inline-flex;align-items:center;gap:.4rem;border:1.5px solid var(--line);background:#fff;border-radius:999px;padding:.5rem .9rem;font-size:.84rem;font-weight:600;white-space:nowrap;color:var(--ink);text-decoration:none;}
.filter-pill.is-active{background:var(--primary-tint);border-color:var(--primary);color:var(--primary-dark);}
.filter-pill .badge-count{background:var(--primary);color:#fff;border-radius:999px;font-size:.68rem;padding:.1rem .4rem;font-weight:700;}
.filter-pill.filter-pill-remove{background:var(--primary-tint);border-color:var(--primary);color:var(--primary-dark);}
.filter-pill.filter-pill-remove i{font-size:.7rem;}

/* ---------- Offcanvas bottom-sheet (mobile): a tutta altezza, come nel
   mockup, non un riquadro parziale — altrimenti i filtri piu' lunghi
   (servizi extra, opzioni menu) restano tagliati fuori dallo schermo. ---------- */
.offcanvas-bottom{border-radius:20px 20px 0 0;--bs-offcanvas-height:100dvh;}
.drag-handle{width:42px;height:5px;background:#D8D2C0;border-radius:999px;margin:0 auto .7rem;flex:0 0 auto;}
.offcanvas-footer-sticky{position:sticky;bottom:0;background:#fff;border-top:1px solid var(--line);margin:0 -1.25rem calc(-1.1rem);padding:.9rem 1.25rem calc(.9rem + env(safe-area-inset-bottom));display:flex;gap:.6rem;flex:0 0 auto;}

/* ---------- Search recap (barra Dove/Categoria, usata in /cerca e nelle
   pagine SEO categoria×provincia) ---------- */
.search-recap{background:#fff;border-radius:var(--radius-lg);box-shadow:var(--shadow-pop);margin-top:-3.4rem;position:relative;z-index:5;}
.search-recap .field{padding:.9rem 1.2rem;border-right:1px solid var(--line);}
.search-recap .field:last-of-type{border-right:none;}
.search-recap .field label{display:block;font-size:.68rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:.15rem;}
.search-recap select, .search-recap input{border:none;padding:0;font-weight:600;font-size:16px;color:var(--ink);background:transparent;width:100%;min-height:auto;}
.search-recap select:focus, .search-recap input:focus{outline:none;box-shadow:none;}
@media (max-width:991.98px){
  .search-recap .field{border-right:none;border-bottom:1px solid var(--line);}
  .search-recap .field:last-of-type{border-bottom:none;}
}
/* campo "bloccato" (pagine SEO categoria×provincia, Dove/Categoria non editabili) */
.search-recap .field .val{font-weight:600;font-size:.92rem;color:var(--ink);display:flex;align-items:center;}
.search-recap .field.field-fixed{background:var(--paper-alt);}

.search-recap-mobile{background:#fff;border-radius:999px;box-shadow:var(--shadow-pop);margin-top:-1.9rem;position:relative;z-index:5;padding:.85rem 1.1rem;display:flex;align-items:center;gap:.7rem;border:1px solid var(--line);}
.search-recap-mobile .ico{width:38px;height:38px;border-radius:50%;background:var(--primary-tint);color:var(--primary);display:flex;align-items:center;justify-content:center;flex:0 0 auto;}
.search-recap-mobile .txt{flex:1;min-width:0;}
.search-recap-mobile .txt .t1{font-weight:700;font-size:.88rem;color:var(--ink);}
.search-recap-mobile .txt .t2{font-size:.75rem;color:var(--ink-soft);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

/* ---------- Radio list (usato nell'offcanvas "Ordina per") ---------- */
.radio-list{display:flex;flex-direction:column;gap:.55rem;}
.radio-list--inline{flex-direction:row;flex-wrap:wrap;}
.radio-list--inline .radio-item{padding:.5rem .8rem;min-height:auto;}
.radio-list--inline .dot{width:16px;height:16px;flex:0 0 16px;}
.radio-list--inline .txt{font-size:.85rem;}
.radio-list input{position:absolute;opacity:0;pointer-events:none;}
.radio-item{border:1.5px solid var(--line);border-radius:var(--radius-md);padding:.85rem 1rem;display:flex;align-items:center;gap:.75rem;cursor:pointer;transition:all .15s ease;min-height:44px;}
.radio-item .dot{width:19px;height:19px;border-radius:50%;border:2px solid #C9C3B2;flex:0 0 19px;position:relative;}
.radio-list input:checked + .radio-item{border-color:var(--primary);background:var(--primary-tint);}
.radio-list input:checked + .radio-item .dot{border-color:var(--primary);}
.radio-list input:checked + .radio-item .dot::after{content:"";position:absolute;inset:3px;border-radius:50%;background:var(--primary);}
.radio-item .txt{font-weight:600;font-size:.92rem;}

/* ---------- Checkbox list (stessa forma del radio-list ma multi-
   selezione, usato per "Opzioni menù": una manciata di opzioni, una lista
   verticale è più leggibile di una griglia di card per cosi' poche voci). ---------- */
.checkbox-list{display:flex;flex-direction:column;gap:.55rem;}
.checkbox-list input{position:absolute;opacity:0;pointer-events:none;}
.checkbox-item{border:1.5px solid var(--line);border-radius:var(--radius-md);padding:.85rem 1rem;display:flex;align-items:center;gap:.75rem;cursor:pointer;transition:all .15s ease;min-height:44px;}
.checkbox-item .box{width:19px;height:19px;border-radius:5px;border:2px solid #C9C3B2;flex:0 0 19px;position:relative;}
.checkbox-list input:checked + .checkbox-item{border-color:var(--primary);background:var(--primary-tint);}
.checkbox-list input:checked + .checkbox-item .box{border-color:var(--primary);background:var(--primary);}
.checkbox-list input:checked + .checkbox-item .box::after{content:"\F26E";font-family:"bootstrap-icons";position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:#fff;font-size:.65rem;}
.checkbox-item .txt{font-weight:600;font-size:.92rem;}

/* ---------- Checkbox generico (es. accettazione termini): nessuno stile
   personalizzato esisteva finora, restava il quadratino grezzo di default
   di Bootstrap invece dei colori del brand usati per radio/card. ---------- */
.form-check-input[type="checkbox"]{width:20px;height:20px;border:1.5px solid var(--line);border-radius:5px;cursor:pointer;}
.form-check-input[type="checkbox"]:checked{background-color:var(--primary);border-color:var(--primary);}
.form-check-input[type="checkbox"]:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-tint);}

/* ---------- Footer (shared) ---------- */
.site-footer{background:var(--primary-dark);color:#CFE0D8;}
.site-footer a{color:#CFE0D8;text-decoration:none;font-size:.88rem;}
.site-footer a:hover{color:#fff;}
.site-footer h6{color:#fff;font-weight:700;font-size:.82rem;letter-spacing:.05em;text-transform:uppercase;margin-bottom:1rem;}

/* ---------- Autenticazione (login/signup/forgot/reset) ---------- */
body.auth-body{background:var(--paper-alt);}
.auth-header{padding:1.3rem 0;text-align:center;}
.auth-shell{min-height:calc(100vh - 90px);display:flex;align-items:center;justify-content:center;padding:1.5rem 1rem 3rem;}
.auth-card{background:#fff;border-radius:var(--radius-lg);box-shadow:var(--shadow-pop);padding:2.2rem;width:100%;max-width:440px;}
.auth-tabs{display:flex;background:var(--paper-alt);border-radius:999px;padding:.3rem;margin-bottom:1.8rem;}
.auth-tab{flex:1;text-align:center;padding:.55rem .8rem;border-radius:999px;font-weight:700;font-size:.86rem;color:var(--ink-soft);background:none;border:none;transition:all .15s ease;}
.auth-tab.active{background:#fff;color:var(--primary-dark);box-shadow:0 2px 8px rgba(24,43,38,.12);}
.form-label-c{font-size:.83rem;font-weight:700;margin-bottom:.35rem;display:block;}
.form-control-c{border:1.5px solid var(--line);border-radius:var(--radius-sm);padding:.65rem .9rem;font-size:16px;width:100%;min-height:46px;}
.form-control-c:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-tint);outline:none;}
.is-invalid-c{border-color:#D98B78 !important;}
.is-invalid-c:focus{box-shadow:0 0 0 3px #FBEAE7 !important;}
.password-field{position:relative;}
.password-toggle{position:absolute;right:.9rem;top:50%;transform:translateY(-50%);background:none;border:none;color:var(--ink-soft);font-size:1rem;}
.password-strength{display:flex;gap:.3rem;margin-top:.4rem;}
.password-strength span{flex:1;height:4px;border-radius:999px;background:var(--paper-alt);}
.password-strength span.filled{background:var(--primary);}
.auth-divider{display:flex;align-items:center;gap:.8rem;margin:1.3rem 0;color:var(--ink-soft);font-size:.78rem;}
.auth-divider::before, .auth-divider::after{content:"";flex:1;height:1px;background:var(--line);}
.auth-footer-link{text-align:center;font-size:.88rem;color:var(--ink-soft);margin-top:1.4rem;}
.auth-footer-link a{color:var(--primary-dark);font-weight:700;text-decoration:none;}
.auth-footer-link a:hover{text-decoration:underline;}
.owner-cta-note{background:var(--accent-tint);border:1px solid #ECD9AF;border-radius:var(--radius-sm);padding:.7rem .9rem;font-size:.8rem;color:#8C6A2A;margin-top:1rem;display:flex;gap:.5rem;align-items:flex-start;}
.owner-cta-note i{margin-top:.1rem;flex:0 0 auto;}
.owner-cta-note a{color:#8C6A2A;font-weight:700;}
.form-error{background:#FBEAE7;border:1px solid #F0C4BB;color:#B3452F;border-radius:var(--radius-sm);padding:.7rem .9rem;font-size:.83rem;margin-bottom:1rem;display:none;align-items:center;gap:.5rem;}
.form-error.show{display:flex;}

/* .modal-body con pt-0 seguito da una .row con gutter (g-3 ecc.) risale sopra
   l'header per via del margin-top negativo di Bootstrap: senza position, la
   riga (successiva nel DOM) si disegna sopra l'header e intercetta i click
   sulla X. position:relative basta a farlo passare sempre sopra. */
.modal-header{position:relative;z-index:2;}

/* ---------- Wizard richiesta preventivo (modal condiviso: home, ricerca,
   dettaglio location — un solo partial incluso una volta per pagina) ---------- */
.wizard .modal-content{border:none;border-radius:22px;overflow:hidden;box-shadow:0 30px 80px -20px rgba(0,0,0,.35);position:relative;}
.wizard__header{display:flex;align-items:center;gap:1rem;padding:1.1rem 1.4rem .9rem;flex:0 0 auto;}
.wizard__close-confirm{position:absolute;inset:0;z-index:20;background:rgba(255,255,255,.98);border-radius:22px;display:none;flex-direction:column;align-items:center;justify-content:center;text-align:center;padding:2rem;}
.wizard__close-confirm.show{display:flex;}
.wizard__close-confirm i{font-size:2.2rem;color:var(--accent-dark);margin-bottom:.8rem;}
.wizard__close-confirm h4{font-family:'Fraunces',serif;font-weight:600;font-size:1.25rem;margin-bottom:.4rem;}
.wizard__close-confirm p{color:var(--ink-soft);font-size:.9rem;max-width:320px;margin-bottom:1.4rem;}
.wizard__close-confirm-actions{display:flex;gap:.6rem;flex-wrap:wrap;justify-content:center;}
.wizard__progress{flex:1;height:6px;background:var(--paper-alt);border-radius:999px;overflow:hidden;}
.wizard__progress-bar{height:100%;background:linear-gradient(90deg,var(--primary),var(--accent));width:16.6%;transition:width .35s cubic-bezier(.4,0,.2,1);border-radius:999px;}
.wizard__body{padding:.5rem 1.6rem 1.6rem;min-height:420px;overflow-x:hidden;}
.wizard__step{display:none;}
.wizard__step.active{display:block;}
.wizard__step.active.dir-fwd{animation:wizardSlideFwd .32s cubic-bezier(.22,.61,.36,1);}
.wizard__step.active.dir-back{animation:wizardSlideBack .32s cubic-bezier(.22,.61,.36,1);}
@keyframes wizardSlideFwd{from{opacity:0;transform:translateX(26px);}to{opacity:1;transform:translateX(0);}}
@keyframes wizardSlideBack{from{opacity:0;transform:translateX(-26px);}to{opacity:1;transform:translateX(0);}}
.wizard__eyebrow{font-size:.72rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:var(--accent-dark);margin-bottom:.35rem;}
.wizard__title{font-family:'Fraunces',serif;font-weight:600;font-size:1.4rem;margin-bottom:.3rem;}
.wizard__sub{color:var(--ink-soft);font-size:.88rem;margin-bottom:1.4rem;}
.wizard__package-banner{display:flex;align-items:center;gap:.7rem;background:var(--primary-tint);border:1px solid #D6E4DB;border-radius:var(--radius-md);padding:.7rem .9rem;margin-bottom:1.2rem;}
.wizard__package-banner i{font-size:1.3rem;color:var(--primary-dark);flex:0 0 auto;}
.wizard__package-banner .pb-name{font-weight:700;font-size:.9rem;color:var(--primary-dark);}
.wizard__package-banner .pb-price{font-size:.78rem;color:var(--ink-soft);}
.wizard__package-banner button{margin-left:auto;background:none;border:none;font-size:.78rem;font-weight:700;color:var(--primary-dark);text-decoration:underline;}

.event-type-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:.7rem;}
@media (max-width:576px){.event-type-grid{grid-template-columns:repeat(2,1fr);}}
.event-type-grid input{position:absolute;opacity:0;pointer-events:none;}
.event-type-card{border:1.5px solid var(--line);border-radius:var(--radius-md);padding:1rem .6rem;text-align:center;cursor:pointer;transition:all .15s ease;position:relative;min-height:96px;display:flex;flex-direction:column;align-items:center;justify-content:center;}
.event-type-card i{font-size:1.5rem;color:var(--primary);display:block;margin-bottom:.4rem;}
.event-type-card span{font-size:.83rem;font-weight:600;color:var(--ink);}
.event-type-grid input:checked + .event-type-card{border-color:var(--primary);background:var(--primary-tint);transform:scale(1.02);}
.event-type-grid input:checked + .event-type-card::after{content:"\F26E";font-family:"bootstrap-icons";position:absolute;top:.4rem;right:.5rem;color:var(--primary);font-size:.9rem;}

.inline-number{margin-top:.6rem;margin-left:2.35rem;display:none;}
.inline-number.show{display:block;}
.inline-number input{max-width:160px;border:1.5px solid var(--line);border-radius:var(--radius-sm);padding:.45rem .7rem;font-weight:600;font-size:16px;}

.quick-date-row{display:flex;flex-wrap:wrap;gap:.5rem;margin-bottom:1.1rem;}
.quick-date-row input{position:absolute;opacity:0;pointer-events:none;}
.quick-date-pill{border:1.5px solid var(--line);border-radius:999px;padding:.5rem 1rem;font-size:.85rem;font-weight:600;cursor:pointer;transition:all .15s ease;}
.quick-date-row input:checked + .quick-date-pill{background:var(--primary);border-color:var(--primary);color:#fff;}
.selected-date-note{display:none;align-items:center;gap:.5rem;background:var(--accent-tint);border:1px solid #ECD9AF;border-radius:var(--radius-sm);padding:.6rem .9rem;font-size:.88rem;font-weight:600;margin-bottom:1rem;}
.selected-date-note.show{display:flex;}
.selected-date-note a{color:var(--primary-dark);text-decoration:underline;font-weight:700;margin-left:auto;cursor:pointer;}
.cal-card{border:1px solid var(--line);border-radius:var(--radius-md);padding:1rem;}
.cal-nav{display:flex;align-items:center;justify-content:space-between;margin-bottom:.8rem;}
.cal-nav button{border:1px solid var(--line);background:#fff;border-radius:50%;width:34px;height:34px;min-height:34px;}
.cal-month{font-family:'Fraunces',serif;font-weight:600;}
.cal-grid{display:grid;grid-template-columns:repeat(7,1fr);gap:.25rem;text-align:center;}
.cal-grid .wd{font-size:.72rem;font-weight:700;color:var(--ink-soft);padding:.3rem 0;}
.cal-day{aspect-ratio:1;display:flex;align-items:center;justify-content:center;border-radius:8px;font-size:.85rem;cursor:pointer;color:var(--ink);min-height:38px;}
.cal-day:hover:not(.disabled):not(.empty){background:var(--primary-tint);}
.cal-day.disabled{color:#CFCABB;cursor:not-allowed;}
.cal-day.empty{visibility:hidden;}
.cal-day.selected{background:var(--primary);color:#fff;font-weight:700;}

.budget-value{font-family:'Fraunces',serif;font-size:2.1rem;font-weight:600;color:var(--primary-dark);text-align:center;margin-bottom:.3rem;}
.budget-value small{font-size:1rem;font-weight:500;color:var(--ink-soft);}
.skip-budget{font-size:.85rem;color:var(--ink-soft);text-decoration:underline;cursor:pointer;}

.wizard__step textarea, .wizard__step input[type=text], .wizard__step input[type=email], .wizard__step input[type=tel], .wizard__step input[type=password], .wizard__step input[type=number]{border:1.5px solid var(--line);border-radius:var(--radius-sm);padding:.6rem .8rem;font-size:16px;width:100%;}
.wizard__step textarea:focus, .wizard__step input:focus{border-color:var(--primary);box-shadow:0 0 0 3px var(--primary-tint);outline:none;}
.pwd-toggle-box{border:1px dashed var(--line);border-radius:var(--radius-sm);padding:.7rem .9rem;font-size:.85rem;color:var(--ink-soft);}
.wizard__footer{display:flex;align-items:center;justify-content:space-between;border-top:1px solid var(--line);padding:1rem 1.6rem;flex:0 0 auto;}
.wizard__step-label{font-size:.78rem;color:var(--ink-soft);font-weight:600;}
.is-invalid-shake{animation:wizardShake .35s;}
@keyframes wizardShake{10%,90%{transform:translateX(-1px);}20%,80%{transform:translateX(2px);}30%,50%,70%{transform:translateX(-4px);}40%,60%{transform:translateX(4px);}}
.field-error{color:#B3452F;font-size:.8rem;margin-top:.5rem;display:none;}
.field-error.show{display:block;}
.wizard__success{text-align:center;padding:1.5rem 0;}
.wizard__success i{font-size:3rem;color:var(--primary);animation:wizardPopIn .4s cubic-bezier(.22,.61,.36,1);}
.wizard__success-actions{display:flex;flex-wrap:wrap;gap:.6rem;justify-content:center;}
.wizard__dev-note{background:var(--accent-tint);border:1px solid #ECD9AF;border-radius:var(--radius-sm);padding:.7rem .9rem;font-size:.78rem;margin-top:1rem;text-align:left;}
.wizard__dev-note strong{display:block;margin-bottom:.3rem;color:#8C6A2A;}
.wizard__dev-note a{word-break:break-all;}
@keyframes wizardPopIn{from{transform:scale(.5);opacity:0;}to{transform:scale(1);opacity:1;}}

@media (max-width: 767.98px){
  #preventivoModal .modal-dialog{margin:0;max-width:100%;width:100%;height:100vh;height:100dvh;display:flex;align-items:flex-end;}
  #preventivoModal .modal-content{height:100%;width:100%;border-radius:0;display:flex;flex-direction:column;}
  #preventivoModal.fade .modal-dialog{transform:translateY(100%) !important;transition:transform .38s cubic-bezier(.32,.72,0,1) !important;}
  #preventivoModal.show .modal-dialog{transform:translateY(0) !important;}
  #preventivoModal .wizard__body{flex:1 1 auto;overflow-y:auto;min-height:0;}
  #preventivoModal .wizard__header{padding-top:calc(1.1rem + env(safe-area-inset-top));}
  #preventivoModal .wizard__footer{padding-bottom:calc(1rem + env(safe-area-inset-bottom));}
}
@media (min-width: 768px){#preventivoModal .modal-dialog{max-width:640px;}}

/* =========================================================
   PAGINE EVENTO — guida editoriale tipo evento x provincia
   ========================================================= */
.toc-card{background:#fff;border:1px solid var(--line);border-radius:var(--radius-lg);box-shadow:var(--shadow-pop);margin-top:-2.2rem;position:relative;z-index:5;padding:1.1rem 1.3rem;}
.toc-card h2{font-size:.95rem;margin-bottom:.7rem;}
.toc-list{display:flex;flex-wrap:wrap;gap:.5rem;}
.toc-list a{display:inline-flex;align-items:center;gap:.4rem;border:1px solid var(--line);border-radius:999px;padding:.4rem .8rem;font-size:.82rem;font-weight:600;color:var(--ink);text-decoration:none;}
.toc-list a:hover{border-color:var(--primary);color:var(--primary);}
.toc-list a .n{width:18px;height:18px;border-radius:50%;background:var(--primary-tint);color:var(--primary-dark);font-size:.68rem;font-weight:700;display:flex;align-items:center;justify-content:center;}

.editorial-pick{max-width:680px;margin:0 auto 1.1rem;text-align:center;scroll-margin-top:calc(var(--header-h) + 16px);}
.editorial-pick__rank{display:inline-flex;align-items:center;justify-content:center;width:46px;height:46px;border-radius:50%;background:var(--primary-dark);color:#fff;font-family:'Fraunces',serif;font-weight:700;font-size:1.25rem;margin-bottom:.6rem;}
.editorial-pick__quote{font-family:'Fraunces',serif;font-style:italic;font-size:1.15rem;line-height:1.5;color:var(--ink);}
.editorial-pick__quote strong{font-style:normal;color:var(--primary-dark);}

.ranked-venue{border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;background:#fff;box-shadow:var(--shadow-card);margin-bottom:2.4rem;}
.ranked-venue__gallery{position:relative;}
.ranked-venue__gallery .main-media{position:relative;aspect-ratio:16/9;overflow:hidden;background:var(--paper-alt);}
.ranked-venue__gallery .main-media .carousel-inner, .ranked-venue__gallery .main-media .carousel-item{height:100%;}
.ranked-venue__gallery img{width:100%;height:100%;object-fit:cover;display:block;}
.ranked-venue__gallery .carousel-control-prev, .ranked-venue__gallery .carousel-control-next{width:14%;opacity:.85;}
.ranked-venue__rank{position:absolute;top:.9rem;left:.9rem;width:42px;height:42px;border-radius:50%;background:var(--primary-dark);color:#fff;font-family:'Fraunces',serif;font-weight:700;font-size:1.15rem;display:flex;align-items:center;justify-content:center;box-shadow:0 6px 16px -6px rgba(0,0,0,.4);z-index:3;}
.ranked-venue__photo-count{position:absolute;bottom:.8rem;right:.8rem;background:rgba(24,43,38,.72);color:#fff;font-size:.76rem;font-weight:600;padding:.3rem .65rem;border-radius:999px;display:flex;align-items:center;gap:.35rem;z-index:3;}
.gallery-thumb-row{display:grid;grid-template-columns:repeat(5,1fr);gap:3px;background:var(--line);}
.gallery-thumb-row button{border:none;padding:0;aspect-ratio:1;overflow:hidden;background:none;cursor:pointer;}
.gallery-thumb-row img{width:100%;height:100%;object-fit:cover;display:block;opacity:.75;transition:opacity .15s ease;}
.gallery-thumb-row button:hover img, .gallery-thumb-row button.active img{opacity:1;}

.ranked-venue__body{padding:1.4rem 1.5rem;}
.ranked-venue__cat{font-size:.72rem;font-weight:700;letter-spacing:.03em;color:var(--primary-dark);text-transform:uppercase;margin-bottom:.2rem;}
.ranked-venue__title{margin-bottom:.3rem;}
.ranked-venue__title a{color:var(--ink);text-decoration:none;}
.ranked-venue__title a:hover{color:var(--primary);}
.ranked-venue__loc{font-size:.85rem;color:var(--ink-soft);margin-bottom:.4rem;display:flex;align-items:center;gap:.3rem;}
.ranked-venue__rating{font-size:.85rem;color:var(--ink);margin-bottom:.9rem;}
.ranked-venue__rating .stars{color:var(--accent-dark);}
.ranked-venue__facts{display:flex;flex-wrap:wrap;gap:1.4rem;margin-bottom:1rem;padding-bottom:1rem;border-bottom:1px dashed var(--line);}
.ranked-venue__fact{font-size:.85rem;}
.ranked-venue__fact b{font-family:'Fraunces',serif;display:block;font-size:1.02rem;}
.ranked-venue__fact span{font-size:.72rem;color:var(--ink-soft);}
.ranked-venue__desc-label{font-size:.7rem;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-soft);margin-bottom:.35rem;}
.ranked-venue__desc{font-size:.92rem;color:var(--ink-soft);line-height:1.7;margin-bottom:1.1rem;}
.ranked-venue__actions{display:flex;flex-wrap:wrap;gap:.6rem;}

.guide-card{display:block;border:1px solid var(--line);border-radius:var(--radius-lg);overflow:hidden;background:#fff;box-shadow:var(--shadow-card);text-decoration:none;color:var(--ink);height:100%;transition:transform .18s ease, box-shadow .18s ease;}
.guide-card:hover{transform:translateY(-3px);box-shadow:0 18px 40px -16px rgba(24,43,38,.3);color:var(--ink);}
.guide-card__media{aspect-ratio:4/3;background:var(--paper-alt);display:flex;align-items:center;justify-content:center;color:var(--ink-soft);font-size:1.8rem;}
.guide-card__media img{width:100%;height:100%;object-fit:cover;}
.guide-card__body{padding:1rem 1.1rem;}
.guide-card__title{font-family:'Fraunces',serif;font-weight:600;font-size:1rem;line-height:1.3;margin-bottom:.35rem;}
.guide-card__count{font-size:.76rem;color:var(--ink-soft);}

a:focus-visible, button:focus-visible, input:focus-visible, select:focus-visible{outline:2px solid var(--primary); outline-offset:2px;}
@media (prefers-reduced-motion: reduce){*{animation-duration:.01ms !important; transition-duration:.01ms !important;}}

/* ---------- Lightbox foto recensioni (condiviso: pagina pubblica location,
   dashboard location/cliente/admin — public/js/review-lightbox.js) ---------- */
.js-review-photo{cursor:pointer;}
#reviewLightboxModal .review-lightbox-content{background:#0F1E1A;border:none;}
#reviewLightboxModal .review-lightbox-close{position:absolute;top:1rem;right:1.2rem;background:none;border:none;color:#fff;font-size:1.5rem;z-index:5;}
#reviewLightboxModal .review-lightbox-stage{position:relative;display:flex;align-items:center;justify-content:center;min-height:50vh;}
#reviewLightboxModal .review-lightbox-stage img{max-width:100%;max-height:74vh;object-fit:contain;}
#reviewLightboxModal .review-lightbox-prev,#reviewLightboxModal .review-lightbox-next{position:absolute;top:50%;transform:translateY(-50%);background:rgba(255,255,255,.12);border:none;color:#fff;width:44px;height:44px;border-radius:50%;font-size:1.2rem;}
#reviewLightboxModal .review-lightbox-prev{left:1rem;}
#reviewLightboxModal .review-lightbox-next{right:1rem;}
#reviewLightboxModal .review-lightbox-counter{color:#fff;text-align:center;font-size:.85rem;opacity:.8;padding-bottom:1rem;}
