.listing-page{background:var(--theme-surface)}.listing-heading{padding:36px 0 20px}.listing-title-row{display:flex;align-items:end;justify-content:space-between;gap:26px}.listing-heading h1{font-size:clamp(2.9rem,5vw,5.8rem);max-width:16ch;margin-top:8px}.business-meta{display:flex;gap:8px;flex-wrap:wrap;margin-top:15px}.listing-quick{display:flex;align-items:center;gap:9px;flex-wrap:nowrap}.listing-quick a,.listing-quick button{border:1px solid var(--line);background:var(--theme-paper,#fff);border-radius:999px;padding:9px 12px;font-weight:750}.listing-gallery-wrap{padding-bottom:28px}.listing-gallery{height:min(58vw,610px);min-height:440px;display:grid;grid-template-columns:1.7fr 1fr 1fr;grid-template-rows:1fr 1fr;gap:7px;border-radius:28px;overflow:hidden;background:var(--theme-primary-dark);position:relative}.gallery-cell{position:relative;border:0;padding:0;background:#111;overflow:hidden;cursor:zoom-in}.gallery-cell-1{grid-row:1/3}.gallery-cell img{width:100%;height:100%;object-fit:cover;transition:transform .45s var(--ease),filter .25s}.gallery-cell:hover img{transform:scale(1.025);filter:brightness(.94)}.gallery-count{position:absolute;right:16px;bottom:16px;z-index:3;background:var(--theme-paper,#fff);border:0;border-radius:999px;padding:10px 13px;font-weight:850;box-shadow:var(--shadow-md)}.listing-layout{display:grid;grid-template-columns:minmax(0,1fr) 330px;gap:38px;align-items:start;padding-bottom:90px}.listing-content{min-width:0;display:grid;gap:24px}.direct-panel{background:var(--theme-paper,#fff);color:var(--ink);border:1px solid var(--line);border-radius:24px;padding:20px;display:grid;gap:13px;box-shadow:var(--shadow-sm)}.direct-panel-head{display:flex;justify-content:space-between;align-items:center;gap:14px}.direct-panel-head>div{display:grid}.direct-actions{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px}.direct-actions .cta{display:flex;align-items:center;justify-content:center;gap:6px;min-height:48px;border-radius:14px;border:1px solid var(--line);font-weight:850;font-size:.84rem;text-align:center}.direct-actions .cta.primary{background:var(--theme-primary);color:var(--theme-on-primary);border-color:var(--theme-primary)}.direct-note{color:var(--muted)}.cta-available{background:var(--forest-50,#eef7f0);border-color:var(--forest-300,#8fc9a0);color:var(--forest-700,#1f5f38)}.cta-available .cta-icon{color:inherit}.cta-unavailable{background:var(--sand-50,#fdf1ef);border-color:#e6a79c;color:#a13f2f;cursor:not-allowed;opacity:.85}.cta-unavailable .cta-icon{color:inherit}.breadcrumb{margin-bottom:10px}.profile-section{background:var(--theme-paper,#fff);border:1px solid var(--line);border-radius:25px;padding:28px}.profile-section h2{font-size:clamp(1.8rem,3vw,2.7rem);margin-bottom:13px}.profile-lead{font-size:1.02rem;line-height:1.72;max-width:82ch}.profile-highlights{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin-top:22px}.profile-highlight{padding:15px;background:var(--theme-surface-alt);border-radius:15px}.profile-highlight strong{display:block;margin-bottom:3px;text-transform:capitalize}.profile-highlight span{font-size:.8rem;color:var(--muted)}.amenity-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:18px}.amenity-group{padding:18px;border-radius:18px;background:var(--theme-surface-alt)}.amenity-group h3{font-size:1rem;margin-bottom:10px}.clean-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 18px}.clean-list li{position:relative;padding-left:20px;color:var(--muted)}.clean-list li::before{content:"✓";position:absolute;left:0;color:var(--theme-primary-mid);font-weight:900}.amenity-group .clean-list{grid-template-columns:1fr}.location-intelligence{display:grid;grid-template-columns:340px 1fr;gap:18px}.location-card{padding:20px;background:var(--theme-secondary-soft);border:1px solid var(--line);border-radius:20px}.location-card .mini-map{height:190px;margin:14px 0;border-radius:15px;background:radial-gradient(circle at 40% 45%,var(--theme-accent) 0 7px,transparent 8px),linear-gradient(35deg,transparent 48%,rgba(255,255,255,.8) 49% 52%,transparent 53%),var(--theme-secondary-soft)}.partner-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.partner-item{border:1px solid var(--line);border-radius:16px;padding:14px;display:grid;align-content:center}.partner-item small{color:var(--muted)}.rules-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.rules-grid>div{padding:16px;background:var(--theme-surface-alt);border-radius:16px}.rules-grid span{display:block;font-size:.72rem;font-weight:850;text-transform:uppercase;letter-spacing:.08em;color:var(--muted);margin-bottom:6px}.rules-grid p{font-size:.9rem}.similar-section{background:var(--theme-surface-alt)}.similar-grid{grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:16px}.similar-grid .result-card-compact{border-radius:18px}.similar-grid .result-card-compact .result-media{min-height:140px}.similar-grid .result-card-compact .result-copy{padding:14px 15px;gap:6px}.similar-grid .result-card-compact .result-copy h2{font-size:1.02rem}.similar-grid .result-card-compact .result-bottom{margin-top:0}.similar-grid .result-card-compact .near-match strong{font-size:.86rem}.legal-info{padding:18px;border-left:4px solid var(--theme-accent);background:var(--theme-surface-alt);border-radius:0 16px 16px 0;margin-top:20px}.legal-info strong{display:block}.legal-info p+strong{margin-top:12px}.faq-list{display:grid}.faq-item{border-top:1px solid var(--line)}.faq-item:last-child{border-bottom:1px solid var(--line)}.faq-item summary{cursor:pointer;list-style:none;padding:17px 34px 17px 0;font-weight:800;position:relative}.faq-item summary::after{content:"+";position:absolute;right:3px;top:12px;font-size:1.5rem;color:var(--theme-accent)}.faq-item[open] summary::after{content:"−"}.faq-item p{padding:0 32px 18px 0;max-width:75ch}.listing-sidebar{min-width:0}.sidebar-sticky{position:sticky;top:calc(var(--header-h) + 18px);display:grid;gap:16px}.profile-promo{display:grid;background:var(--theme-paper,#fff);border:1px solid var(--line);border-radius:20px;overflow:hidden;position:relative;box-shadow:var(--shadow-sm)}.profile-promo img{width:100%;aspect-ratio:4/3;object-fit:cover}.profile-promo .promo-label{position:absolute;top:10px;left:10px;background:rgba(255,255,255,.94);border-radius:999px;padding:5px 8px;font-size:.65rem;font-weight:900;letter-spacing:.08em;text-transform:uppercase}.promo-copy{display:grid;padding:15px;gap:4px}.promo-copy small{color:var(--muted)}.sidebar-map{border-radius:20px;overflow:hidden;border:1px solid var(--line);background:var(--theme-paper,#fff)}.sidebar-map .profile-osm-map{border-radius:0;margin:0}.contact-summary,.claim-card{padding:20px;border-radius:20px}.contact-summary{background:var(--theme-paper,#fff);border:1px solid var(--line);display:grid;gap:10px}.contact-summary h3{font-size:1.2rem}.sidebar-whatsapp{width:100%;text-align:center}.claim-card{background:var(--theme-primary);color:var(--theme-on-primary)}.claim-card p{color:rgba(255,255,255,.74);margin:7px 0 13px}.promo-mobile{display:none}.location-mobile-map{display:none}.location-mobile-map .profile-osm-map{height:220px;border-radius:16px;margin:0 0 16px}.lightbox[hidden]{display:none}.lightbox{position:fixed;inset:0;z-index:300;background:rgba(6,12,10,.92);display:grid;grid-template-columns:70px minmax(0,1fr) 70px;align-items:center;padding:28px;backdrop-filter:blur(8px)}.lightbox figure{display:grid;justify-items:center;gap:10px;max-height:92vh}.lightbox figure img{display:block;max-width:min(1280px,100%);max-height:84vh;object-fit:contain;border-radius:10px;box-shadow:0 30px 90px rgba(0,0,0,.5)}.lightbox figcaption{color:rgba(255,255,255,.72);font-size:.82rem}.lightbox button{border:0;color:#fff;background:rgba(255,255,255,.12);width:48px;height:48px;border-radius:50%;font-size:2rem}.lightbox-close{position:absolute;right:22px;top:20px}.lightbox-prev{justify-self:start}.lightbox-next{justify-self:end}
@media(max-width:1080px){.listing-layout{grid-template-columns:minmax(0,1fr) 285px;gap:24px}.direct-actions{grid-template-columns:repeat(2,1fr)}.profile-highlights{grid-template-columns:repeat(2,1fr)}.amenity-grid{grid-template-columns:1fr 1fr}.location-intelligence{grid-template-columns:1fr}}
@media(max-width:820px){.listing-title-row{align-items:start;flex-direction:column}.listing-quick{flex-wrap:wrap}.listing-gallery{height:520px;min-height:0;grid-template-columns:1.5fr 1fr;grid-template-rows:2fr 1fr 1fr}.gallery-cell-1{grid-row:1/4}.gallery-cell-4,.gallery-cell-5{display:none}.listing-layout{grid-template-columns:1fr}.listing-sidebar{display:none}.promo-mobile{display:grid}.location-mobile-map{display:block}.profile-section{padding:22px}.lightbox{grid-template-columns:54px minmax(0,1fr) 54px;padding:16px}.lightbox button{width:42px;height:42px}}
@media(max-width:560px){.listing-heading{padding-top:22px}.listing-heading h1{font-size:2.7rem}.listing-gallery-wrap{width:100%;padding:0 0 22px}.listing-gallery{height:380px;border-radius:0;grid-template-columns:1fr;grid-template-rows:1fr}.gallery-cell-1{grid-row:auto}.gallery-cell:not(.gallery-cell-1){display:none}.gallery-count{right:12px;bottom:12px}.direct-actions{grid-template-columns:1fr 1fr}.profile-highlights,.amenity-grid,.rules-grid,.clean-list,.partner-grid{grid-template-columns:1fr}.profile-section{border-radius:20px}.listing-layout{width:min(calc(100% - 24px),var(--max))}.lightbox{display:block;padding:60px 12px 12px}.lightbox figure img{max-height:76vh}.lightbox-prev,.lightbox-next{position:absolute;top:50%;transform:translateY(-50%);z-index:2}.lightbox-prev{left:10px}.lightbox-next{right:10px}}
.profile-promo-placeholder{border:2px dashed var(--line);background:linear-gradient(160deg,var(--sand-50),var(--sand-100));transition:.2s var(--ease)}
.profile-promo-placeholder:hover{border-color:var(--theme-accent,var(--ember-500));box-shadow:var(--shadow-md)}
.profile-promo-placeholder .promo-copy{padding:26px 20px;text-align:center;justify-items:center;gap:6px}
.profile-promo-placeholder .promo-copy strong{font-family:var(--serif);font-size:1.15rem;font-weight:500}
.profile-promo-placeholder .promo-label-placeholder{position:static;margin:0 auto;background:var(--theme-accent-soft,var(--ember-100));color:var(--theme-accent,var(--ember-600))}
.profile-promo-placeholder .promo-placeholder-cta{margin-top:6px;font-weight:800;font-size:.82rem;color:var(--theme-accent,var(--ember-600))}
.promo-showcase{display:grid;gap:10px}
.promo-showcase-eyebrow{font-size:.72rem;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);padding:0 2px}
.promo-showcase-cta{width:100%;text-align:center;box-shadow:var(--shadow-sm)}
/* WhatsApp advertising banner: a square badge in a WhatsApp-green, not a site theme token -- it's an external brand
   colour, deliberately fixed regardless of market theme. #22C55E: a middle ground between the neon #25D366 icon
   green and the dull dark-teal #128C7E -- still a clean, bright green, just not blinding as a full solid square. */
.promo-whatsapp{aspect-ratio:1/1;border:0;background:#22C55E;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:10px;padding:18px;text-align:center;transition:filter .2s var(--ease),transform .2s var(--ease)}
.promo-whatsapp:hover{filter:brightness(1.1);transform:translateY(-2px)}
@media (prefers-reduced-motion:reduce){.promo-whatsapp{transition:none}.promo-whatsapp:hover{transform:none}}
.promo-whatsapp-icon{width:25%;max-width:52px;aspect-ratio:1/1;color:#fff}
.promo-whatsapp-icon svg{width:100%;height:100%;display:block}
.promo-whatsapp-cta{color:#fff;font-size:1.05rem;line-height:1.3;max-width:22ch}
.listing-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:14px;margin:0 0 24px;padding:16px 18px;border:1px solid var(--line);border-radius:var(--radius-md);background:var(--sand-50)}.listing-facts div{display:grid;gap:2px}.listing-facts dt{font-size:.8rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--muted)}.listing-facts dd{margin:0;font-weight:600}

/* listing header actions: one tidy row of compact single-line pills (location, share, save, compare) on every listing type */
.listing-quick{display:flex;flex-wrap:wrap;align-items:center;gap:8px}
.listing-quick>*{flex:0 0 auto}
.listing-quick a,.listing-quick button{display:inline-flex;align-items:center;justify-content:center;gap:6px;min-height:40px;padding:0 14px;white-space:nowrap;font-size:.9rem;font-weight:700;line-height:1}
.listing-quick .quick-location{flex:0 1 auto;min-width:0;display:inline-block;max-width:min(100%,240px);overflow:hidden;text-overflow:ellipsis;line-height:38px}
.listing-quick .heart-action,.listing-quick .heart-action[aria-pressed]{width:40px;min-height:40px;height:40px;padding:0}
.listing-quick .cmp-btn-head{padding:0 14px}
.listing-quick .cmp-btn svg{width:18px;height:18px}
@media(min-width:761px){.listing-title-row .listing-quick{justify-content:flex-end}}

/* POI cards (Scraping V2): grouped by taxonomy family; photo optional, attribution reachable via a tiny badge (see .poi-attrib below).
   Neither a fixed card width (dead space on a short row) nor uncapped flex-grow (a lone item balloons arbitrarily)
   actually closes every gap cleanly -- src/render-listing/poi.js's rowSizes() instead pre-computes, per family, how
   many items share each row (as evenly as the count allows: 5 -> a row of 3 + a row of 2, never a row of 4 + a
   leftover 1) and stamps that onto each card as data-of. A row of k cards is always exactly k equal shares of the
   full row width -- every row is completely full, and a card is only ever full-width when it is genuinely alone. */
.poi-note{color:var(--muted);font-size:.9rem;margin:0 0 20px}
.poi-family-group{margin-top:26px}
.poi-family-group:first-child{margin-top:0}
.poi-family-group h3{font-size:1.15rem;margin:0 0 12px}
.poi-grid{--poi-gap:16px;display:flex;flex-wrap:wrap;gap:var(--poi-gap)}
.poi-card{display:flex;flex-direction:column;border:1px solid var(--line);border-radius:var(--radius-md,16px);overflow:hidden;background:#fff;transition:transform .2s var(--ease)}
.poi-card[data-of="1"]{flex:0 0 100%}
.poi-card[data-of="2"]{flex:0 0 calc((100% - var(--poi-gap))/2)}
.poi-card[data-of="3"]{flex:0 0 calc((100% - 2*var(--poi-gap))/3)}
.poi-card:hover{transform:translateY(-3px)}
@media (prefers-reduced-motion:reduce){.poi-card{transition:none}.poi-card:hover{transform:none}}
.poi-figure{margin:0;position:relative}
.poi-figure img{display:block;width:100%;aspect-ratio:16/10;object-fit:cover}
/* attribution badge: a tiny "ⓘ" over the photo, same on desktop (hover) and mobile (tap/focus) -- author/licence/source
   stay reachable (a licence condition for most of this catalog's images), just not as an always-visible caption */
.poi-attrib{position:absolute;top:8px;right:8px;width:20px;height:20px;border-radius:50%;background:rgba(20,20,16,.6);color:#fff;font-size:13px;line-height:20px;text-align:center;cursor:help}
.poi-attrib-pop{position:absolute;top:26px;right:0;min-width:170px;max-width:230px;background:var(--theme-paper,#fff);color:var(--ink);border:1px solid var(--line);border-radius:10px;padding:8px 10px;font-size:11.5px;line-height:1.4;box-shadow:var(--shadow-md);opacity:0;visibility:hidden;transition:opacity .15s;z-index:3}
.poi-attrib:hover .poi-attrib-pop,.poi-attrib:focus .poi-attrib-pop,.poi-attrib:focus-within .poi-attrib-pop{opacity:1;visibility:visible}
.poi-attrib-pop a{color:inherit;text-decoration:underline}
.poi-body{display:flex;flex-direction:column;gap:6px;padding:14px 16px 16px;flex:1}
.poi-cat{font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}
.poi-body h3{margin:0;font-size:1.05rem;line-height:1.25}
.poi-desc{margin:0;font-size:.92rem;color:var(--muted);display:-webkit-box;-webkit-line-clamp:4;-webkit-box-orient:vertical;overflow:hidden}
.poi-dist{margin:4px 0 0;font-size:.92rem}
.poi-tier{align-self:flex-start;font-size:12px;border:1px solid var(--line);border-radius:999px;padding:2px 10px;color:var(--muted)}
@media (max-width:560px){.poi-card{flex-basis:100%!important}}

/* "Informazioni utili": compact rows, never photo cards (docs/LISTING_CONTENT_GOVERNANCE.md) */
.service-list{list-style:none;margin:0;padding:0;display:grid;gap:2px}
.service-row{display:flex;align-items:baseline;gap:10px;padding:11px 4px;border-bottom:1px solid var(--line)}
.service-row:last-child{border-bottom:0}
.service-cat{flex:0 0 auto;min-width:120px;font-size:12px;letter-spacing:.04em;text-transform:uppercase;color:var(--muted)}
.service-name{flex:1;font-weight:650}
.service-dist{flex:0 0 auto;color:var(--muted);font-size:.9rem}
@media (max-width:560px){.service-cat{min-width:88px;font-size:11px}}
