/* ==========================================================================
   Softbnb property page — CINEMATIC theme
   Spec: docs/property-themes.md · markup: resources/views/property/themes/cinematic.blade.php
   Loaded after css/softbnb-ds.css and css/property-themes/shared.css.

   Follows the site's day/night switch (body.dark-mode, set in header.blade.php).
   At night the --sb-* tokens are re-pointed to the design system's dark values on
   .pp--cinematic (root, .pp-overlays, every dialog, the preview pill), so every
   shared component follows; by day they resolve from the design system's light
   block, because each of those elements also carries .sb-page / .sb-modal.
   The HERO is the exception and stays a white-on-photograph treatment in both
   modes — see sections 0b and 0c.

   Layout tokens
     --cin-gap      section rhythm      96px desktop · 56px phone
     --cin-glass    glass surface used on the hero (pills, booking bar)
   ========================================================================== */


/* ==========================================================================
   0. Tokens — the dark palette, in both site modes
   ========================================================================== */

/* Mode-independent tokens. --cin-gap is layout, not colour, and --cin-glass /
   --cin-glass-border are measured against the hero PHOTOGRAPH, which is still a
   photograph at noon — see section 0c. All three must survive in light mode, so
   they cannot ride inside the dark palette block below. */
.pp--cinematic {
  --cin-gap:   96px;
  --cin-glass: rgba(26, 22, 20, 0.74);
  --cin-glass-border: rgba(255, 255, 255, 0.14);
}

/* The dark palette. Every value is untouched; only the gate moved. The bare
   `.pp--cinematic` selector that used to lead this list is what made the theme
   ignore the site's day/night switch: it is (0,1,0), the same weight as the
   design system's light block on .sb-page/.sb-modal, and cinematic.css loads
   afterwards, so it won on source order alone and the page was dark at noon.
   `.pp-preview.pp--cinematic` stays: the theme-picker chip is a swatch OF this
   theme and is dark in both site modes.
   --cin-gap is repeated here deliberately — see the note under the mobile
   override below. */
body.dark-mode .pp--cinematic,
.pp-preview.pp--cinematic {
  color-scheme: dark;
  --sb-ink:            #F5F0EB;
  --sb-ink-soft:       #D9D0C7;
  --sb-bg:             #0F0D0C;
  --sb-surface:        #1A1614;
  --sb-surface-2:      #221D1A;
  --sb-surface-3:      #2C2521;
  --sb-border:         #332B26;
  --sb-border-strong:  #4A3F37;
  --sb-text:           #F1EAE4;
  --sb-muted:          #A99E95;   /* 7.1:1 on --sb-bg, 6.2:1 on --sb-surface */
  --sb-muted-2:        #8B8078;
  --sb-primary-soft:   rgba(230, 51, 56, 0.16);
  --sb-gold:           #FF8A8D;
  --sb-gold-soft:      #2A2118;
  --sb-success:        #4ADE80;
  --sb-warning:        #FBBF24;
  --sb-error:          #F87171;
  --sb-shadow-1: 0 1px 2px rgba(0, 0, 0, 0.4), 0 2px 8px rgba(0, 0, 0, 0.3);
  --sb-shadow-2: 0 2px 6px rgba(0, 0, 0, 0.45), 0 12px 28px rgba(0, 0, 0, 0.4);
  --sb-shadow-3: 0 8px 20px rgba(0, 0, 0, 0.5), 0 28px 60px rgba(0, 0, 0, 0.55);

  --cin-gap:   96px;
  --pp-focus: #fff;
}
/* NOTE, and the reason --cin-gap is declared twice above: this override is
   (0,1,0) and has always lost to the dark block's (0,2,1) at night, so on a phone
   the section rhythm is 56px by day and 96px at night. That is a pre-existing
   bug, but fixing it here would change the dark rendering, which this change is
   not allowed to do. Repeating --cin-gap in the dark block reproduces tonight's
   output exactly. Fix separately with:
     @media (max-width: 767.98px) { body.dark-mode .pp--cinematic { --cin-gap: 56px; } } */
@media (max-width: 767.98px) {
  .pp--cinematic { --cin-gap: 56px; }
}

.pp.pp--cinematic {
  background: var(--sb-bg);
  color: var(--sb-text);
  padding-bottom: var(--sb-8);
}
/* The canvas behind the page: head.blade.php paints <body style="background-color:#fcfcfc">,
   so rubber-band overscroll above the dark hero would flash white. A literal (the --sb-*
   tokens are scoped to .sb-page/.sb-modal and do not reach <body>) = --sb-bg above. */
body.dark-mode.pp-body--cinematic { background-color: #0F0D0C !important; }
/* Day: the same job, the other way. The (0,3,0) + !important is not decoration —
   header.blade.php ships `body:not(.dark-mode){background-color:#FFF9F9}` at
   (0,2,0), and this theme is pushed through @stack('css') BEFORE bootstrap,
   style.css and the header's inline <style>. A plain (0,2,0) light rule would tie
   and lose on source order, and the overscroll gutter would then read #FFF9F9
   against a #FFFDFB page. #FFFDFB is the design system's light --sb-bg. */
body.pp-body--cinematic:not(.dark-mode) { background-color: #FFFDFB !important; }
.pp.pp--cinematic .pp-block__title,
.pp.pp--cinematic .pp-cin-h2 { color: var(--sb-ink); }

/* Focus rings: white reads on every dark surface here. */
.pp.pp--cinematic :focus-visible,
.pp-overlays.pp--cinematic :focus-visible { outline-color: #fff; }


/* ==========================================================================
   1. Site header over the hero (≥ 992px)
      header.blade.php paints the fixed nav white (or #0f172a in dark mode,
      `body.dark-mode:not(.page-home) .site-topnav`, (0,3,1) !important).
      Our rules carry #sbNav → (1,3,x), so they win from the pushed stylesheet.
      The page-home / .hero-banner mechanism is NOT used (it hides the mobile bar).
   ========================================================================== */

@media (min-width: 992px) {
  /* Pull the page up under the 66px spacer so the hero starts at the top edge. */
  body.pp-body--cinematic .pp.pp--cinematic { margin-top: -66px; }

  /* Transparent while the hero is under the nav… */
  body.pp-body--cinematic.pp-hero-in-view #sbNav.site-topnav,
  body.pp-body--cinematic #sbNav.site-topnav.at-top {
    background: transparent !important;
    border-bottom-color: transparent !important;
    box-shadow: none !important;
  }
  /* …dark glass once the story starts (never the white bar over a dark page). */
  body.pp-body--cinematic:not(.pp-hero-in-view) #sbNav.site-topnav:not(.at-top) {
    background: rgba(15, 13, 12, 0.9) !important;
    border-bottom: 1px solid rgba(255, 255, 255, 0.08) !important;
    box-shadow: 0 2px 20px rgba(0, 0, 0, 0.4) !important;
    -webkit-backdrop-filter: blur(14px);
    backdrop-filter: blur(14px);
  }

  body.pp-body--cinematic #sbNav .site-topnav__link { color: #fff; }
  body.pp-body--cinematic #sbNav .site-topnav__link:hover {
    background: rgba(255, 255, 255, 0.15);
    color: #fff !important;
  }
  body.pp-body--cinematic #sbNav .site-topnav__inbox-badge { border-color: transparent; }
  body.pp-body--cinematic #sbNav .site-topnav__user-btn,
  body.pp-body--cinematic #sbNav .site-topnav__dm {
    background: rgba(26, 22, 20, 0.6);
    border-color: rgba(255, 255, 255, 0.28);
    color: #fff;
    -webkit-backdrop-filter: blur(12px);
    backdrop-filter: blur(12px);
  }
  body.pp-body--cinematic #sbNav .site-topnav__user-btn i { color: rgba(255, 255, 255, 0.82); }
  body.pp-body--cinematic #sbNav .site-topnav__user-btn:hover,
  body.pp-body--cinematic #sbNav .site-topnav__dm:hover {
    background: rgba(26, 22, 20, 0.8);
    border-color: rgba(255, 255, 255, 0.55);
  }
  body.pp-body--cinematic #sbNav .site-topnav__dm-track { background: rgba(255, 255, 255, 0.35); }
  body.dark-mode.pp-body--cinematic #sbNav .site-topnav__dm-track { background: #E63338; }
}


/* ==========================================================================
   2. Shared primitives of this theme
   ========================================================================== */

.pp--cinematic .pp-cin-section { padding-bottom: var(--cin-gap); }
.pp--cinematic .pp-cin-intro { padding-top: var(--cin-gap); }

.pp--cinematic .pp-cin-eyebrow {
  margin: 0 0 var(--sb-2);
  font-family: var(--sb-font-meta);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: var(--sb-muted);
}

.pp--cinematic .pp-cin-h2 {
  font-family: var(--sb-font-display);
  font-size: clamp(24px, 2.6vw, 36px);
  font-weight: var(--sb-w-bold);
  line-height: 1.25;
  letter-spacing: -0.012em;
  text-wrap: balance;
}
.pp--cinematic .pp-cin-h2--sm { font-size: clamp(22px, 2.2vw, 30px); }

.pp--cinematic .pp-cin-card {
  padding: 36px;
  border-radius: 24px;
  background: var(--sb-surface);
  --pp-section-bg: var(--sb-surface);
}
@media (max-width: 767.98px) {
  .pp--cinematic .pp-cin-card { padding: 22px; border-radius: 20px; }
}

/* Glass pill (hero) */
.pp--cinematic .pp-cin-pill {
  --pp-bw: 1px;
  --pp-bc: var(--cin-glass-border);
  display: inline-flex;
  align-items: center;
  gap: 10px;
  min-height: 44px;
  padding: 0 18px;
  border-radius: var(--sb-r-pill);
  background: var(--cin-glass);
  color: #fff;
  font-size: 14px;
  font-weight: var(--sb-w-medium);
  line-height: 1;
  white-space: nowrap;
  -webkit-backdrop-filter: blur(18px);
  backdrop-filter: blur(18px);
  transition: background-color var(--sb-dur-fast) var(--sb-ease), border-color var(--sb-dur-fast) var(--sb-ease);
}
.pp--cinematic .pp-cin-pill > i { font-size: 13px; }
.pp--cinematic .pp-cin-pill:hover { --pp-bc: rgba(255, 255, 255, 0.4); background: rgba(26, 22, 20, 0.88); }
.pp--cinematic .pp-cin-pill[hidden] { display: none !important; }

/* Share / save pills from shared/actions take the same glass. */
.pp--cinematic .pp-cin-hero__pills .pp-actions--dark .pp-action {
  --pp-bc: var(--cin-glass-border);
  min-height: 44px;
  padding: 0 18px;
  background: var(--cin-glass);
  font-size: 14px;
  -webkit-backdrop-filter: blur(18px);
  backdrop-filter: blur(18px);
}
.pp--cinematic .pp-cin-hero__pills .pp-actions--dark .pp-action:hover { --pp-bc: rgba(255, 255, 255, 0.4); background: rgba(26, 22, 20, 0.88); }
.pp--cinematic .pp-cin-hero__pills .pp-action .pp-action__on { color: var(--sb-primary); }


/* ==========================================================================
   3. Hero
   ========================================================================== */

.pp--cinematic .pp-cin-hero {
  position: relative;
  display: flex;
  min-height: min(88vh, 820px);
  min-height: min(88svh, 820px);
  background: var(--sb-surface-2);
  --pp-section-bg: var(--sb-surface-2);
  color: #fff;
}

/* Media layer: clips the Ken Burns drift; the section itself stays overflow:visible
   so the booking bar's calendar popover can escape. */
.pp--cinematic .pp-cin-hero__media {
  position: absolute;
  inset: 0;
  overflow: hidden;
  z-index: 0;
}
.pp--cinematic .pp-hero__slide {
  position: absolute;
  inset: 0;
  opacity: 0;
  transition: opacity 1400ms var(--sb-ease);
}
.pp--cinematic .pp-hero__slide.is-on { opacity: 1; z-index: 1; }
.pp--cinematic .pp-hero__slide img,
.pp--cinematic .pp-hero__video {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  object-position: center;
}
.pp--cinematic .pp-hero__slide img { transform: scale(1.04); will-change: transform; }
.pp--cinematic .pp-cin-hero.has-slideshow .pp-hero__slide.is-on img { animation: pp-cin-kb 9s linear both; }
.pp--cinematic .pp-cin-hero.is-paused .pp-hero__slide.is-on img { animation-play-state: paused; }
@keyframes pp-cin-kb {
  from { transform: scale(1.04) translate3d(0, 0, 0); }
  to   { transform: scale(1.13) translate3d(-1.6%, -1.2%, 0); }
}
/* The video the JS inserts sits above the slides once it really plays. */
.pp--cinematic .pp-hero__video { position: absolute; inset: 0; z-index: 0; opacity: 0; transition: opacity 800ms var(--sb-ease); }
.pp--cinematic .pp-cin-hero.is-playing .pp-hero__video { opacity: 1; z-index: 1; }

/* Legibility scrim — forgiving of 800px sources. */
.pp--cinematic .pp-cin-hero__scrim {
  position: absolute;
  inset: 0;
  z-index: 1;
  pointer-events: none;
  background: linear-gradient(180deg,
    rgba(15, 13, 12, 0.62) 0%,
    rgba(15, 13, 12, 0) 26%,
    rgba(15, 13, 12, 0) 42%,
    rgba(15, 13, 12, 0.9) 100%);
}

/* Slide progress (phones): pure CSS, follows .is-on through :has(). */
.pp--cinematic .pp-cin-hero__dots {
  position: absolute;
  z-index: 2;
  left: 16px; right: 16px; top: 12px;
  display: none;
  gap: 4px;
  pointer-events: none;
}
.pp--cinematic .pp-cin-hero__dot { flex: 1 1 0; height: 3px; border-radius: 999px; background: rgba(255, 255, 255, 0.34); transition: background-color var(--sb-dur) var(--sb-ease); }
.pp--cinematic .pp-cin-hero:has(.pp-hero__slide:nth-child(1).is-on) .pp-cin-hero__dot:nth-child(1),
.pp--cinematic .pp-cin-hero:has(.pp-hero__slide:nth-child(2).is-on) .pp-cin-hero__dot:nth-child(2),
.pp--cinematic .pp-cin-hero:has(.pp-hero__slide:nth-child(3).is-on) .pp-cin-hero__dot:nth-child(3),
.pp--cinematic .pp-cin-hero:has(.pp-hero__slide:nth-child(4).is-on) .pp-cin-hero__dot:nth-child(4),
.pp--cinematic .pp-cin-hero:has(.pp-hero__slide:nth-child(5).is-on) .pp-cin-hero__dot:nth-child(5),
.pp--cinematic .pp-cin-hero:has(.pp-hero__slide:nth-child(6).is-on) .pp-cin-hero__dot:nth-child(6) { background: #fff; }

/* Content */
.pp--cinematic .pp-cin-hero__inner {
  position: relative;
  z-index: 2;
  display: flex;
  flex-direction: column;
  justify-content: flex-end;
  gap: 36px;
  width: 100%;
  padding-top: 110px;
  padding-bottom: 40px;
}
.pp--cinematic .pp-cin-hero__body {
  display: flex;
  align-items: flex-end;
  justify-content: space-between;
  gap: var(--sb-6);
}
.pp--cinematic .pp-cin-hero__text { display: flex; flex-direction: column; gap: 16px; min-width: 0; }

.pp--cinematic .pp-cin-hero__eyebrow {
  display: flex;
  align-items: center;
  gap: 12px;
  font-family: var(--sb-font-meta);
  font-size: 12px;
  font-weight: 500;
  letter-spacing: 0.12em;
  text-transform: uppercase;
  color: rgba(255, 255, 255, 0.86);
}
.pp--cinematic .pp-cin-hero__rule { flex: none; width: 44px; height: 4px; background: var(--sb-primary); }

.pp--cinematic .pp-cin-hero__title {
  font-family: var(--sb-font-display);
  font-size: clamp(38px, 4.8vw, 68px);
  font-weight: var(--sb-w-bold);
  line-height: 1.05;
  letter-spacing: -0.02em;
  color: #fff;
  text-wrap: balance;
  overflow-wrap: anywhere;
  text-shadow: 0 2px 24px rgba(0, 0, 0, 0.25);
}

.pp--cinematic .pp-cin-hero__facts { display: flex; flex-wrap: wrap; gap: 10px 24px; }
.pp--cinematic .pp-cin-hero__fact {
  display: inline-flex;
  align-items: center;
  gap: 8px;
  font-size: 16px;
  color: rgba(255, 255, 255, 0.92);
}
.pp--cinematic .pp-cin-hero__fact > i { width: 19px; text-align: center; font-size: 15px; color: rgba(255, 255, 255, 0.82); }
.pp--cinematic .pp-cin-hero__fact strong { font-weight: var(--sb-w-medium); color: #fff; }

.pp--cinematic .pp-cin-hero__pills { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 10px; flex: none; }
.pp--cinematic .pp-cin-hero__pills .pp-actions { gap: 10px; }

/* Booking bar across the bottom of the hero */
.pp--cinematic .pp-cin-hero__bar { min-width: 0; }

@media (min-width: 992px) {
  /* First visit: the site cookie notice is fixed over the bottom of the viewport, exactly
     where the bar sits. Lift the bar above it while the notice is open (the JS publishes
     the notice's footprint as --pp-consent-inset; see shared.css). */
  body.pp-consent-open .pp--cinematic .pp-cin-hero__inner {
    padding-bottom: calc(var(--pp-consent-inset, 0px) + 24px);
  }
  @media (prefers-reduced-motion: no-preference) {
    .pp--cinematic .pp-cin-hero__inner { transition: padding-bottom var(--sb-dur) var(--sb-ease-out); }
  }

  .pp--cinematic .pp-booking--bar {
    --pp-booking-bg: var(--cin-glass);
    --pp-booking-border: var(--cin-glass-border);
    --pp-booking-radius: 22px;
    --pp-booking-shadow: 0 24px 60px rgba(0, 0, 0, 0.35);
    --pp-booking-pad: 14px 16px 14px 28px;
    --pp-field-bg: transparent;
    --pp-field-border: var(--cin-glass-border);
    /* The fields column keeps a floor so the guest stepper is never squeezed under the
       running total (its content is ~400px with a date range picked). */
    grid-template-columns: auto minmax(320px, 1fr) auto auto;
    gap: var(--sb-2) var(--sb-5);
    min-height: 88px;
    color: #fff;
    -webkit-backdrop-filter: blur(18px);
    backdrop-filter: blur(18px);
  }
  .pp--cinematic .pp-booking--bar .pp-booking__head { gap: 3px; }
  .pp--cinematic .pp-booking--bar .pp-booking__price { color: #fff; }
  .pp--cinematic .pp-booking--bar .pp-booking__amount { font-size: 24px; }
  .pp--cinematic .pp-booking--bar .pp-booking__unit,
  .pp--cinematic .pp-booking--bar .pp-booking__rating { color: rgba(255, 255, 255, 0.7); }
  .pp--cinematic .pp-booking--bar .pp-booking__rating { font-family: var(--sb-font-meta); font-weight: var(--sb-w-normal); }
  .pp--cinematic .pp-booking--bar .pp-booking__rating > i { color: var(--sb-primary); }

  .pp--cinematic .pp-booking--bar .pp-booking__fields {
    border-width: 0;
    border-radius: 0;
    border-left: 1px solid var(--pp-field-border);
  }
  .pp--cinematic .pp-booking--bar .pp-booking__dates {
    min-height: 60px;
    padding: 0 22px;
    border-radius: 12px 0 0 12px;
  }
  .pp--cinematic .pp-booking--bar .pp-booking__dates:hover,
  .pp--cinematic .pp-booking--bar .pp-booking__dates[aria-expanded="true"] { background: rgba(255, 255, 255, 0.06); }
  .pp--cinematic .pp-booking--bar .pp-booking__label { color: rgba(255, 255, 255, 0.7); letter-spacing: 0.08em; }
  .pp--cinematic .pp-booking--bar .pp-booking__value { font-size: 16px; color: #fff; }
  .pp--cinematic .pp-booking--bar .pp-booking__value.is-empty { color: rgba(255, 255, 255, 0.72); }
  .pp--cinematic .pp-booking--bar .pp-booking__date-sep { color: rgba(255, 255, 255, 0.45); }
  .pp--cinematic .pp-booking--bar .pp-booking__guests { padding: 0 12px 0 22px; }
  .pp--cinematic .pp-booking--bar .pp-booking__hint { color: rgba(255, 255, 255, 0.7); }
  .pp--cinematic .pp-booking--bar .pp-stepper__btn { --pp-bc: rgba(255, 255, 255, 0.35); color: #fff; }
  .pp--cinematic .pp-booking--bar .pp-stepper__btn:hover:not(:disabled) { --pp-bc: #fff; background: rgba(255, 255, 255, 0.1); }
  .pp--cinematic .pp-booking--bar .pp-stepper__value { color: #fff; }

  /* Running total in its own column, beside the button. */
  .pp--cinematic .pp-booking--bar .pp-booking__line {
    grid-column: 3;
    grid-row: 1;
    align-self: center;
    padding-left: var(--sb-5);
    border-left: 1px solid var(--pp-field-border);
    min-height: 60px;
    display: flex;
    align-items: center;
    font-size: 16px;
    font-weight: var(--sb-w-bold);
    color: #fff;
    white-space: nowrap;

    /* This total is a COLUMN here, not a row, so it opens sideways: the fields
       give up width and the button slides across. The shared row-collapse
       (max-height) does not apply in this variant — overridden below. */
    max-height: none;
    max-width: 260px;
    overflow: hidden;
    transition: max-width var(--sb-dur) var(--sb-ease-out),
                opacity var(--sb-dur-fast) var(--sb-ease-out),
                padding-left var(--sb-dur) var(--sb-ease-out),
                border-left-color var(--sb-dur) var(--sb-ease-out);
  }
  .pp--cinematic .pp-booking--bar .pp-booking__line.is-collapsed {
    max-height: none;
    max-width: 0;
    opacity: 0;
    padding-left: 0;
    border-left-color: transparent;
    margin-block-start: 0;   /* the shared -8px is for the stacked layout */
  }
  @media (prefers-reduced-motion: reduce) {
    .pp--cinematic .pp-booking--bar .pp-booking__line { transition: none; }
  }
  .pp--cinematic .pp-booking--bar .pp-booking__actions { grid-column: 4; grid-row: 1; }
  .pp--cinematic .pp-booking--bar .pp-booking__submit {
    min-width: 0;
    min-height: 56px;
    padding: 0 34px;
    border-radius: 14px;
    font-size: 17px;
  }
  .pp--cinematic .pp-booking--bar .pp-booking__loading { color: rgba(255, 255, 255, 0.75); }
  .pp--cinematic .pp-booking--bar .pp-status {
    background: rgba(255, 255, 255, 0.06);
    border-color: rgba(255, 255, 255, 0.14);
    color: #fff;
  }
  .pp--cinematic .pp-booking--bar .pp-status strong { color: #fff; }
  .pp--cinematic .pp-booking--bar .pp-booking__blocked {
    background: rgba(255, 255, 255, 0.06);
    border-color: rgba(255, 255, 255, 0.14);
  }
  .pp--cinematic .pp-booking--bar .pp-booking__blocked-title { color: #fff; }
  .pp--cinematic .pp-booking--bar .pp-booking__blocked-text { color: rgba(255, 255, 255, 0.75); }

  /* The popover opens over the hero (the JS adds --up when it would leave the viewport). */
  .pp--cinematic .pp-booking--bar .pp-cal__popover { color: var(--sb-text); }
}

/* 992–1199px: not enough room for four columns once a quote exists — the running total
   drops to a second row across the bar and the button tightens up. */
@media (min-width: 992px) and (max-width: 1199.98px) {
  .pp--cinematic .pp-booking--bar {
    --pp-booking-pad: 12px 14px 12px 22px;
    gap: var(--sb-2) var(--sb-4);
  }
  .pp--cinematic .pp-booking--bar .pp-booking__line {
    grid-column: 1 / -1;
    grid-row: auto;
    min-height: 0;
    padding: 0 0 2px;
    border-left: 0;
    white-space: normal;
    font-size: 15px;
  }
  .pp--cinematic .pp-booking--bar .pp-booking__dates { padding: 0 16px; }
  .pp--cinematic .pp-booking--bar .pp-booking__guests { padding: 0 10px 0 16px; }
  .pp--cinematic .pp-booking--bar .pp-booking__submit { padding: 0 22px; font-size: 16px; }
}

/* Below 992px the bar is replaced by the shared mobile bar + booking sheet. */
@media (max-width: 991.98px) {
  .pp--cinematic .pp-cin-hero__bar { display: none; }

  .pp--cinematic .pp-cin-hero {
    min-height: min(72vh, 640px);
    min-height: min(72svh, 640px);
  }
  .pp--cinematic .pp-cin-hero__dots { display: flex; }
  .pp--cinematic .pp-cin-hero__inner { padding-top: 84px; padding-bottom: 28px; gap: 0; }
  .pp--cinematic .pp-cin-hero__body { flex-direction: column; align-items: stretch; gap: 16px; }
  .pp--cinematic .pp-cin-hero__text { gap: 12px; }
  .pp--cinematic .pp-cin-hero__rule { width: 32px; height: 3px; }
  .pp--cinematic .pp-cin-hero__title { font-size: clamp(32px, 9.5vw, 44px); line-height: 1.08; }
  .pp--cinematic .pp-cin-hero__facts { gap: 6px 14px; }
  .pp--cinematic .pp-cin-hero__fact { font-size: 14px; font-family: var(--sb-font-meta); color: rgba(255, 255, 255, 0.86); }
  .pp--cinematic .pp-cin-hero__fact > i { display: none; }
  .pp--cinematic .pp-cin-hero__fact strong { font-weight: var(--sb-w-normal); font-family: var(--sb-font-body); }
  /* The host level keeps its icon and reads as a small badge, so a generic level name
     ("Host") never wraps onto its own line as a bare word after the facts. */
  .pp--cinematic .pp-cin-hero__fact--level {
    gap: 6px;
    padding: 3px 10px;
    border: 1px solid rgba(255, 255, 255, 0.3);
    border-radius: var(--sb-r-pill);
    font-size: 13px;
    white-space: nowrap;
  }
  .pp--cinematic .pp-cin-hero__fact--level > i { display: inline-block; width: auto; font-size: 12px; }

  /* Pause + photos chips stay under the facts; share + save float to the top right.
     Compact type, but the hit area stays at the 44px touch-target floor. */
  .pp--cinematic .pp-cin-hero__pills { justify-content: flex-start; gap: 8px; }
  .pp--cinematic .pp-cin-pill { min-height: 44px; padding: 0 16px; font-size: 13px; }
  .pp--cinematic .pp-cin-pill > i { font-size: 12px; }
  /* The pause control is icon-only on phones (its aria-label carries the text). */
  .pp--cinematic .pp-cin-pill[data-pp-hero-toggle] { width: 44px; padding: 0; justify-content: center; }
  .pp--cinematic .pp-cin-pill[data-pp-hero-toggle] .pp-cin-pill__label {
    position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
    overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
  }
  .pp--cinematic .pp-cin-hero__pills .pp-actions {
    position: absolute;
    top: 24px;
    right: 16px;
    gap: 8px;
  }
  .pp--cinematic .pp-cin-hero__pills .pp-actions--dark .pp-action {
    --pp-bc: transparent;
    width: 44px;
    padding: 0;
    background: rgba(20, 16, 14, 0.42);
  }
  .pp--cinematic .pp-cin-hero__pills .pp-action .pp-action__label {
    position: absolute; width: 1px; height: 1px; margin: -1px; padding: 0;
    overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; border: 0;
  }
}


/* ==========================================================================
   4. Intro — lede + spec table
   ========================================================================== */

.pp--cinematic .pp-cin-intro {
  display: grid;
  grid-template-columns: repeat(12, minmax(0, 1fr));
  column-gap: var(--sb-5);
  row-gap: var(--sb-6);
  align-items: start;
}
.pp--cinematic .pp-cin-intro__lede { grid-column: 1 / span 7; min-width: 0; }
.pp--cinematic .pp-cin-spec { grid-column: 9 / span 4; min-width: 0; }

.pp--cinematic .pp-cin-intro .pp-about__text { max-width: none; }
.pp--cinematic .pp-cin-intro .pp-about__summary {
  font-size: clamp(19px, 1.9vw, 26px);
  line-height: 1.45;
  color: var(--sb-text);
  text-wrap: pretty;
}
.pp--cinematic .pp-cin-intro .pp-about__more { margin-top: var(--sb-6); }
.pp--cinematic .pp-cin-intro .pp-about__para { font-size: var(--sb-t-body); color: var(--sb-ink-soft); }
.pp--cinematic .pp-cin-intro .pp-about__toggle { margin-top: var(--sb-4); }
body.pp-body .pp--cinematic .pp-cin-intro .pp-readmore:not(.is-open) { max-height: 12em; }

.pp--cinematic .pp-cin-spec { display: block; border-top: 1px solid var(--sb-border); }
.pp--cinematic .pp-cin-spec__row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sb-4);
  min-height: 56px;
  padding: 8px 0;
  border-bottom: 1px solid var(--sb-border);
  font-size: 16px;
}
.pp--cinematic .pp-cin-spec__row dt { font-family: var(--sb-font-meta); color: var(--sb-muted); }
.pp--cinematic .pp-cin-spec__row dd { font-weight: var(--sb-w-medium); color: var(--sb-ink); text-align: right; }

@media (max-width: 991.98px) {
  .pp--cinematic .pp-cin-intro__lede,
  .pp--cinematic .pp-cin-spec { grid-column: 1 / -1; }
}
@media (max-width: 767.98px) {
  .pp--cinematic .pp-cin-intro { row-gap: var(--sb-6); }
  .pp--cinematic .pp-cin-intro .pp-about__summary { font-size: 17px; line-height: 1.6; }
  .pp--cinematic .pp-cin-intro .pp-cin-eyebrow { display: none; }
  /* The table becomes 2 × n stat cards. */
  .pp--cinematic .pp-cin-spec {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 10px;
    border-top: 0;
  }
  .pp--cinematic .pp-cin-spec__row {
    flex-direction: column-reverse;
    align-items: flex-start;
    justify-content: flex-end;
    gap: 2px;
    min-height: 0;
    padding: 16px;
    border: 1px solid var(--sb-border);
    border-radius: 16px;
  }
  .pp--cinematic .pp-cin-spec__row dt { font-size: 13px; }
  .pp--cinematic .pp-cin-spec__row dd { font-size: 22px; font-weight: var(--sb-w-bold); text-align: left; overflow-wrap: anywhere; }
  /* Stay rules live in the "Good to know" card; the cards keep the home's numbers + space type. */
  .pp--cinematic .pp-cin-spec__row--stay { display: none; }
  .pp--cinematic .pp-cin-spec__row:nth-child(odd):last-of-type { grid-column: 1 / -1; }
}


/* ==========================================================================
   5. The spaces — rail of tall photo cards
   ========================================================================== */

.pp--cinematic .pp-cin-spaces .pp-rail { --pp-rail-card: 300px; }
.pp--cinematic .pp-cin-spaces .pp-rail__head { margin-bottom: 28px; }
.pp--cinematic .pp-cin-spaces .pp-rail__head .pp-cin-eyebrow { margin-bottom: 8px; }
.pp--cinematic .pp-cin-spaces .pp-rail__btn { background: transparent; }
.pp--cinematic .pp-cin-spaces__track { gap: 20px; padding: 4px 2px 8px; }

.pp--cinematic .pp-cin-space__btn {
  position: relative;
  display: block;
  width: 100%;
  aspect-ratio: 3 / 4;
  overflow: hidden;
  border-radius: 20px;
  background: var(--sb-surface-3);
  color: #fff;
  text-align: left;
}
.pp--cinematic .pp-cin-space__btn img {
  display: block;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--sb-dur-slow) var(--sb-ease-out);
}
.pp--cinematic .pp-cin-space__btn::after {
  content: "";
  position: absolute;
  left: 0; right: 0; bottom: 0;
  height: 55%;
  background: linear-gradient(180deg, rgba(15, 13, 12, 0) 0%, rgba(15, 13, 12, 0.86) 100%);
  pointer-events: none;
}
.pp--cinematic .pp-cin-space__caption {
  position: absolute;
  z-index: 1;
  left: 20px; right: 20px; bottom: 18px;
  display: flex;
  flex-direction: column;
  gap: 2px;
}
.pp--cinematic .pp-cin-space__name { font-size: 19px; font-weight: var(--sb-w-medium); line-height: 1.25; overflow-wrap: anywhere; }
.pp--cinematic .pp-cin-space__meta { font-family: var(--sb-font-meta); font-size: 13px; color: rgba(255, 255, 255, 0.78); }
@media (hover: hover) and (pointer: fine) {
  .pp--cinematic .pp-cin-space__btn:hover img { transform: scale(1.04); }
}
@media (max-width: 767.98px) {
  .pp--cinematic .pp-cin-spaces .pp-rail__head { margin-bottom: 14px; }
  .pp--cinematic .pp-cin-spaces .pp-rail__head .pp-cin-eyebrow { display: none; }
  /* Bleed to the right edge of the phone. */
  .pp--cinematic .pp-cin-spaces__track { gap: 12px; margin-right: -16px; padding-right: 16px; scroll-padding-left: 0; }
  .pp--cinematic .pp-cin-spaces .pp-rail__track > * { flex-basis: 200px; max-width: 200px; }
  .pp--cinematic .pp-cin-space__btn { aspect-ratio: 200 / 270; }
  .pp--cinematic .pp-cin-space__caption { left: 16px; right: 16px; bottom: 14px; }
  .pp--cinematic .pp-cin-space__name { font-size: 17px; }
}


/* ==========================================================================
   6. Amenities — grid of bordered cells
   ========================================================================== */

.pp--cinematic .pp-cin-amenities .pp-block__title {
  font-size: clamp(24px, 2.6vw, 36px);
  font-weight: var(--sb-w-bold);
  line-height: 1.25;
  margin-bottom: 28px;
}
.pp--cinematic .pp-cin-amenities .pp-amenities__list {
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: 12px;
}
.pp--cinematic .pp-cin-amenities .pp-amenity {
  min-height: 84px;
  padding: 12px 22px;
  border: 1px solid var(--sb-border);
  border-radius: 16px;
  font-size: 16px;
  color: var(--sb-text);
}
.pp--cinematic .pp-cin-amenities .pp-amenity > i { font-size: 20px; color: var(--sb-muted); }
.pp--cinematic .pp-cin-amenities .pp-amenities__all,
.pp--cinematic .pp-cin-amenities__all { display: none; }
@media (max-width: 991.98px) {
  .pp--cinematic .pp-cin-amenities .pp-amenities__list { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .pp--cinematic .pp-cin-amenities .pp-amenity { min-height: 72px; padding: 10px 16px; font-size: 15px; }
}
@media (max-width: 767.98px) {
  .pp--cinematic .pp-cin-amenities .pp-cin-eyebrow { display: none; }
  .pp--cinematic .pp-cin-amenities .pp-block__title { margin-bottom: 18px; }
  .pp--cinematic .pp-cin-amenities .pp-amenities__list { gap: 10px 12px; }
  .pp--cinematic .pp-cin-amenities .pp-amenity { min-height: 44px; padding: 4px 0; border: 0; border-radius: 0; }
  .pp--cinematic .pp-cin-amenities .pp-amenity:nth-child(n + 9) { display: none; }
  .pp--cinematic .pp-cin-amenities__all { display: flex; margin-top: 18px; }
}


/* ==========================================================================
   7. Location — photo tile + map card
   ========================================================================== */

.pp--cinematic .pp-cin-where {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--sb-5);
  align-items: stretch;
}
.pp--cinematic .pp-cin-where__photo {
  position: relative;
  display: block;
  width: 100%;
  min-height: 460px;
  overflow: hidden;
  border-radius: 24px;
  background: var(--sb-surface-3);
}
.pp--cinematic .pp-cin-where__photo img {
  position: absolute;
  inset: 0;
  width: 100%;
  height: 100%;
  object-fit: cover;
  transition: transform var(--sb-dur-slow) var(--sb-ease-out);
}
@media (hover: hover) and (pointer: fine) {
  .pp--cinematic .pp-cin-where__photo:hover img { transform: scale(1.03); }
}
.pp--cinematic .pp-cin-where__card { display: flex; flex-direction: column; min-height: 460px; }
.pp--cinematic .pp-cin-where__card .pp-cin-h2 { margin-bottom: 8px; }

/* ── Location, wide variant (Option B) ─────────────────────────────────────
   The rectangular band from the design boards: heading above, one broad map
   below at 21:9, edge to edge across the measure. Temporary — it sits beside
   Option A only until the look is chosen. */
.pp--cinematic .pp-cin-wherewide__head { margin-bottom: var(--sb-5); }
.pp--cinematic .pp-cin-wherewide__head .pp-cin-h2 { margin-bottom: 8px; }
.pp--cinematic .pp-cin-wherewide .pp-location__place {
  margin-bottom: 18px;
  font-family: var(--sb-font-meta);
  font-size: 15px;
  color: var(--sb-muted);
}
.pp--cinematic .pp-cin-wherewide .pp-map {
  aspect-ratio: 21 / 9;
  min-height: 300px;
  max-height: 560px;
  border-radius: 24px;
  border-color: var(--sb-border);
}
.pp--cinematic .pp-cin-wherewide .pp-location__note { margin-top: 16px; }
@media (max-width: 991.98px) {
  .pp--cinematic .pp-cin-wherewide .pp-map { aspect-ratio: 4 / 3; min-height: 240px; }
}

/* Review-only label marking the two options apart. Remove with the losing block. */
.pp--cinematic .pp-cin-variant-tag {
  display: inline-block;
  align-self: flex-start;
  margin-bottom: 14px;
  padding: 5px 12px;
  border: 1px dashed var(--sb-border-strong);
  border-radius: var(--sb-r-pill);
  font-family: var(--sb-font-meta);
  font-size: 12px;
  letter-spacing: 0.06em;
  text-transform: uppercase;
  color: var(--sb-muted);
}
.pp--cinematic .pp-cin-where .pp-location { display: flex; flex-direction: column; flex: 1 1 auto; min-height: 0; }
.pp--cinematic .pp-cin-where .pp-location__place { margin-bottom: 18px; font-family: var(--sb-font-meta); font-size: 15px; }
.pp--cinematic .pp-cin-where .pp-location__place > i { display: none; }
.pp--cinematic .pp-cin-where .pp-map {
  flex: 1 1 auto;
  aspect-ratio: auto;
  min-height: 220px;
  max-height: none;
  border-color: var(--sb-border);
  border-radius: 16px;
  background: var(--sb-surface-2);
}
.pp--cinematic .pp-cin-where .pp-location__note {
  margin-top: 14px;
  align-items: center;
  gap: 8px;
  padding: 10px 14px;
  border-radius: var(--sb-r-pill);
  background: var(--sb-surface-2);
  color: var(--sb-text);
  font-size: 13px;
  font-weight: var(--sb-w-medium);
  align-self: flex-start;
}
.pp--cinematic .pp-cin-where .pp-location__note > i { margin-top: 0; color: var(--sb-muted); }
.pp--cinematic .pp-map.is-ready .pp-map__canvas { filter: brightness(0.85) contrast(1.05); }
@media (max-width: 991.98px) {
  .pp--cinematic .pp-cin-where { grid-template-columns: minmax(0, 1fr); }
  .pp--cinematic .pp-cin-where__photo { min-height: 0; aspect-ratio: 16 / 10; }
  .pp--cinematic .pp-cin-where__card { min-height: 0; }
  .pp--cinematic .pp-cin-where .pp-map { min-height: 240px; aspect-ratio: 4 / 3; }
}
@media (max-width: 767.98px) {
  .pp--cinematic .pp-cin-where__photo { display: none; }
  .pp--cinematic .pp-cin-where__card { padding: 0; background: transparent; --pp-section-bg: transparent; }
  .pp--cinematic .pp-cin-where .pp-cin-eyebrow { display: none; }
  .pp--cinematic .pp-cin-where .pp-location__note { font-size: 12px; }
}


/* ==========================================================================
   8. Host card + policy card
   ========================================================================== */

.pp--cinematic .pp-cin-trust {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: var(--sb-5);
  align-items: start;
}
.pp--cinematic .pp-cin-trust .pp-cin-eyebrow { margin-bottom: 22px; }

.pp--cinematic .pp-cin-hostcard .pp-host__card {
  padding: 0;
  border: 0;
  border-radius: 0;
  background: transparent;
  gap: 22px 18px;
}
.pp--cinematic .pp-cin-hostcard .pp-host__avatar { width: 88px; height: 88px; }
.pp--cinematic .pp-cin-hostcard .pp-host__name { font-size: 21px; }
.pp--cinematic .pp-cin-hostcard .pp-host__badges { gap: 8px; margin-top: 10px; }
.pp--cinematic .pp-cin-hostcard .pp-host__level,
.pp--cinematic .pp-cin-hostcard .pp-chip {
  min-height: 36px;
  padding: 0 14px;
  border: 1px solid var(--sb-border);
  background: var(--sb-surface-2);
  color: var(--sb-text);
  font-size: 14px;
}
.pp--cinematic .pp-cin-hostcard .pp-host__level { background: var(--pp-level, var(--sb-surface-2)); color: #fff; }
.pp--cinematic .pp-cin-hostcard .pp-host__stats { gap: 12px 40px; padding: 18px 0; border-top: 1px solid var(--sb-border); border-bottom: 1px solid var(--sb-border); }
.pp--cinematic .pp-cin-hostcard .pp-host__stat dd { font-size: 21px; }
.pp--cinematic .pp-cin-hostcard .pp-host__stat dt { font-size: 13px; }

.pp--cinematic .pp-cin-policycard .pp-policies__grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 22px 32px; }
.pp--cinematic .pp-cin-policycard .pp-policies__col:first-child { grid-column: 1 / -1; }
.pp--cinematic .pp-cin-policycard .pp-policies__col:first-child .pp-policies__title { font-size: 21px; margin-bottom: 14px; }
.pp--cinematic .pp-cin-policycard .pp-policies__col:first-child .pp-policies__title > i { display: none; }
.pp--cinematic .pp-cin-policycard .pp-policies__col:first-child .pp-policies__list { gap: 10px; font-family: var(--sb-font-meta); font-size: 14px; }
.pp--cinematic .pp-cin-policycard .pp-policies__col:first-child .pp-policies__list > li { padding-left: 26px; }
.pp--cinematic .pp-cin-policycard .pp-policies__col:first-child .pp-policies__list > li::before {
  content: "\f00c";
  top: 0.15em;
  left: 0;
  width: auto;
  height: auto;
  border-radius: 0;
  background: none;
  font-family: "Font Awesome 5 Free";
  font-weight: 900;
  font-size: 12px;
  color: var(--sb-success);
}
.pp--cinematic .pp-cin-policycard .pp-policies__title { font-size: 17px; font-weight: var(--sb-w-medium); }
.pp--cinematic .pp-cin-policycard .pp-policies__facts { font-size: 14px; }
.pp--cinematic .pp-cin-policycard .pp-report { margin-top: var(--sb-4); }
.pp--cinematic .pp-cin-policycard .pp-safety { margin-top: 22px; padding-top: 22px; border-top: 1px solid var(--sb-border); }
.pp--cinematic .pp-cin-policycard .pp-safety .pp-block__title { font-size: 17px; font-weight: var(--sb-w-medium); margin-bottom: 12px; }
.pp--cinematic .pp-cin-policycard .pp-safety .pp-amenities__list { grid-template-columns: minmax(0, 1fr); gap: 0; }
.pp--cinematic .pp-cin-policycard .pp-safety .pp-amenity { border: 0; padding: 6px 0; font-size: 15px; }
.pp--cinematic .pp-cin-policycard .pp-safety .pp-amenity > i { color: var(--sb-muted); }

@media (max-width: 991.98px) {
  .pp--cinematic .pp-cin-trust { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 767.98px) {
  .pp--cinematic .pp-cin-hostcard .pp-host__avatar { width: 60px; height: 60px; }
  .pp--cinematic .pp-cin-policycard .pp-policies__grid { grid-template-columns: minmax(0, 1fr); }
}


/* ==========================================================================
   9. CTA band
   ========================================================================== */

.pp--cinematic .pp-cin-cta {
  margin-bottom: var(--cin-gap);
  padding: 56px 0;
  border-top: 1px solid var(--sb-border);
  border-bottom: 1px solid var(--sb-border);
  background: var(--sb-surface);
  --pp-section-bg: var(--sb-surface);
}

/* Desktop: the CTA leaves the flow and docks to the bottom of the viewport, so
   price + Reserve are reachable from anywhere on the page. It stays hidden
   while the hero's own booking bar is on screen (body.pp-hero-in-view, set by
   js/property-page.js) — two primary actions at once is one too many. The band
   keeps its place in the document as a spacer so the footer never slides under
   it, and the bar is aria-hidden while off screen so it is not announced or
   tabbed into. */
@media (min-width: 992px) {
  .pp--cinematic .pp-cin-cta {
    position: fixed;
    left: 0;
    right: 0;
    /* Sits above the cookie notice on a first visit — that banner is fixed at
       the bottom with z-index 100000, so it would otherwise cover the primary
       action. --pp-consent-inset is published by js/property-page.js and is 0px
       once the notice is dismissed. */
    bottom: var(--pp-consent-inset, 0px);
    z-index: 900;                 /* under the 1000 site nav, over page content */
    margin-bottom: 0;
    padding: 20px 0;
    border-bottom: 0;
    background: color-mix(in srgb, var(--sb-surface) 88%, transparent);
    backdrop-filter: blur(20px) saturate(140%);
    -webkit-backdrop-filter: blur(20px) saturate(140%);
    box-shadow: 0 -8px 28px rgba(0, 0, 0, 0.28);

    /* Starts off screen. Nothing animates until JS has taken a real reading of
       the hero (body.pp-hero-armed), so the bar cannot flash in during load. */
    transform: translate3d(0, 115%, 0);
    opacity: 0;
    visibility: hidden;
  }

  /* Rising into place: 620ms, the same generous ease-out the homepage hero uses,
     with a small overshoot so the movement reads as deliberate rather than as a
     panel that was always there. The shadow and blur fade in behind it. */
  @keyframes pp-cin-dock-in {
    0%   { transform: translate3d(0, 115%, 0); opacity: 0; }
    55%  { opacity: 1; }
    72%  { transform: translate3d(0, -10px, 0); }
    88%  { transform: translate3d(0, 3px, 0); }
    100% { transform: translate3d(0, 0, 0); opacity: 1; }
  }
  /* Leaving is a fade, not a retreat: the bar lightens and lifts a few pixels
     rather than sliding back down. Watching it travel off screen reads as the
     page taking the booking away; a fade just quietly hands the hero's own bar
     back. It still returns by rising from below, so the arrival stays the
     moment you notice. visibility flips on the last frame so the bar leaves the
     tab order once it is invisible. */
  @keyframes pp-cin-dock-out {
    0%   { transform: translate3d(0, 0, 0);    opacity: 1; visibility: visible; }
    99%  { visibility: visible; }
    100% { transform: translate3d(0, -12px, 0); opacity: 0; visibility: hidden; }
  }

  body.pp-hero-armed:not(.pp-hero-in-view) .pp--cinematic .pp-cin-cta {
    visibility: visible;
    animation: pp-cin-dock-in 620ms var(--sb-ease-out) both;
  }
  /* Leaving is quicker than arriving — an exit that lingers feels sluggish. */
  /* Only ever plays for a bar that was really on screen (body.pp-dock-seen is
     set the first time the hero leaves the viewport). Without that guard this
     rule matches on page load, and its first frame is fully opaque — the bar
     would flash in and fade out before the visitor had scrolled at all. */
  body.pp-dock-seen.pp-hero-in-view .pp--cinematic .pp-cin-cta {
    animation: pp-cin-dock-out 340ms var(--sb-ease-out) both;
    pointer-events: none;
  }
  /* Browsers without color-mix still get a solid, legible bar. */
  @supports not (background: color-mix(in srgb, red 50%, transparent)) {
    .pp--cinematic .pp-cin-cta { background: var(--sb-surface); }
  }
  /* The docked bar carries the full booking form, so it needs the hero bar's
     horizontal layout rather than the old price-and-buttons arrangement. */
  .pp--cinematic .pp-cin-cta__inner { display: block; }
  .pp--cinematic .pp-cin-cta .pp-booking--bar { margin: 0; }

  /* The bar is out of the flow, so reserve the height it would have occupied —
     otherwise it sits permanently over the last of the footer. */
  body.pp-body--cinematic { padding-bottom: 104px; }
}

/* Reduced motion: the bar still appears and disappears, it just does not travel. */
@media (min-width: 992px) and (prefers-reduced-motion: reduce) {
  body.pp-hero-armed:not(.pp-hero-in-view) .pp--cinematic .pp-cin-cta {
    animation: none;
    transform: none;
    opacity: 1;
    visibility: visible;
  }
  body.pp-dock-seen.pp-hero-in-view .pp--cinematic .pp-cin-cta {
    animation: none;
    opacity: 0;
    visibility: hidden;
  }
}
.pp--cinematic .pp-cin-cta__inner {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: var(--sb-6);
}
.pp--cinematic .pp-cin-cta__text { display: flex; flex-direction: column; gap: 8px; min-width: 0; }
.pp--cinematic .pp-cin-cta__price { display: flex; align-items: baseline; gap: 8px; color: var(--sb-ink); }
.pp--cinematic .pp-cin-cta__amount { font-size: clamp(27px, 2.6vw, 36px); font-weight: var(--sb-w-bold); letter-spacing: -0.012em; line-height: 1.1; }
.pp--cinematic .pp-cin-cta__unit { font-family: var(--sb-font-meta); font-size: 17px; color: var(--sb-muted); }
.pp--cinematic .pp-cin-cta__line { font-family: var(--sb-font-meta); font-size: 15px; color: var(--sb-muted); text-wrap: pretty; }
.pp--cinematic .pp-cin-cta__actions { display: flex; flex-wrap: wrap; gap: 12px; flex: none; }
.pp--cinematic .pp-cin-cta__actions .pp-btn { min-height: 56px; border-radius: 14px; font-size: 16px; }
.pp--cinematic .pp-cin-cta__reserve { padding: 0 34px; font-size: 17px; }
@media (max-width: 991.98px) {
  .pp--cinematic .pp-cin-cta { padding: 40px 0; }
  .pp--cinematic .pp-cin-cta__inner { flex-direction: column; align-items: stretch; gap: var(--sb-5); }
  .pp--cinematic .pp-cin-cta__actions .pp-btn { flex: 1 1 auto; }
  /* The fixed mobile bar already carries Reserve — one primary action per view. */
  .pp--cinematic .pp-cin-cta__reserve { display: none; }
}


/* ==========================================================================
   10. Reviews + similar (legacy partials inside .pp-legacy, re-skinned)
   ========================================================================== */

.pp--cinematic .pp-cin-reviews .pp-block__title,
.pp--cinematic .pp-cin-similar .pp-block__title,
.pp--cinematic .pp-reviews .rv-head-title {
  font-size: clamp(24px, 2.2vw, 30px);
  font-weight: var(--sb-w-bold);
  line-height: 1.25;
}
.pp--cinematic .pp-cin-similar { padding-bottom: var(--sb-6); }
.pp--cinematic .pp-cin-similar .pp-rail { --pp-rail-card: 282px; }

/* partials.property_card ships its own white card + inline colours (and #1e293b in dark mode). */
.pp--cinematic .pp-rail__track .prop-card,
body.dark-mode .pp--cinematic .pp-rail__track .prop-card {
  background: var(--sb-surface) !important;
  border-color: var(--sb-border) !important;
  border-radius: 16px;
}
.pp--cinematic .pp-rail__track .prop-card:hover,
body.dark-mode .pp--cinematic .pp-rail__track .prop-card:hover {
  transform: translateY(-3px);
  box-shadow: 0 14px 30px rgba(0, 0, 0, 0.35) !important;
}
.pp--cinematic .pp-rail__track .prop-card__media { background: var(--sb-surface-3); }
.pp--cinematic .pp-rail__track .prop-card__name,
body.dark-mode .pp--cinematic .pp-rail__track .prop-card__name { color: var(--sb-ink) !important; font-size: 16px; font-weight: var(--sb-w-medium); }
.pp--cinematic .pp-rail__track .prop-card__name:hover,
body.dark-mode .pp--cinematic .pp-rail__track .prop-card__name:hover { color: var(--sb-gold) !important; }
.pp--cinematic .pp-rail__track .prop-card__city,
.pp--cinematic .pp-rail__track .prop-card__attrs,
.pp--cinematic .pp-rail__track .prop-card__rating-count,
.pp--cinematic .pp-rail__track .prop-card__min-stay,
body.dark-mode .pp--cinematic .pp-rail__track .prop-card__city,
body.dark-mode .pp--cinematic .pp-rail__track .prop-card__attrs,
body.dark-mode .pp--cinematic .pp-rail__track .prop-card__rating-count,
body.dark-mode .pp--cinematic .pp-rail__track .prop-card__min-stay { color: var(--sb-muted) !important; font-family: var(--sb-font-meta); }
.pp--cinematic .pp-rail__track .prop-card__rating-num,
body.dark-mode .pp--cinematic .pp-rail__track .prop-card__rating-num { color: var(--sb-ink) !important; }
.pp--cinematic .pp-rail__track .prop-card__footer,
body.dark-mode .pp--cinematic .pp-rail__track .prop-card__footer { border-color: var(--sb-border) !important; }
.pp--cinematic .pp-rail__track .prop-card__price { color: var(--sb-ink); font-weight: var(--sb-w-bold); }
.pp--cinematic .pp-rail__track .prop-card__price span { color: var(--sb-muted); }
.pp--cinematic .pp-rail__track .prop-card__host-badge,
body.dark-mode .pp--cinematic .pp-rail__track .prop-card__host-badge { border-color: var(--sb-surface) !important; }
.pp--cinematic .pp-rail__track .prop-card__fav,
body.dark-mode .pp--cinematic .pp-rail__track .prop-card__fav { background: rgba(20, 16, 14, 0.5) !important; }
/* "New" badge: the card ships #fff on #E63338 (4.28:1) at 8px — a darker red reads 5.6:1. */
.pp--cinematic .pp-rail__track .prop-card__rating-new,
body.dark-mode .pp--cinematic .pp-rail__track .prop-card__rating-new { background: #C8262B !important; color: #fff !important; }

.pp--cinematic .pp-new { background: var(--sb-surface); border-color: var(--sb-border); border-radius: 20px; padding: 24px; }


/* ==========================================================================
   11. Overlays (dialogs, mobile bar, preview) — small refinements on the dark tokens
   ========================================================================== */

.pp-overlays.pp--cinematic .pp-mobile-bar {
  background: var(--sb-surface);
  border-top-color: var(--sb-border);
  box-shadow: 0 -8px 24px rgba(0, 0, 0, 0.35);
}
.pp-overlays.pp--cinematic .pp-mobile-bar__cta { min-height: 52px; border-radius: 14px; font-size: 16px; }
.pp-overlays.pp--cinematic .pp-dialog { border-color: var(--sb-border); background: var(--sb-bg); }
.pp-overlays.pp--cinematic .pp-dialog::backdrop { background: rgba(6, 4, 3, 0.7); }
.pp-overlays.pp--cinematic .pp-backdrop { background: rgba(6, 4, 3, 0.7); }
.pp-overlays.pp--cinematic .pp-cal { --pp-cal-range: rgba(230, 51, 56, 0.2); }
.pp.pp--cinematic .pp-cal__popover { border-color: var(--sb-border); background: var(--sb-surface); }


/* ==========================================================================
   12. Motion safety
   ========================================================================== */

@media (prefers-reduced-motion: reduce) {
  .pp--cinematic .pp-hero__slide { transition: none; }
  .pp--cinematic .pp-hero__slide img { transform: none; animation: none !important; }
  .pp--cinematic .pp-cin-space__btn img,
  .pp--cinematic .pp-cin-where__photo img { transition: none; }
}


/* ==========================================================================
   0b. Tokens — the light palette (day)

   Deliberately four lines, not forty. layout.blade.php:59 renders
   <div class="sb-page pp pp--cinematic">, and :64 / :77 and dialogs.blade.php:58
   put .sb-modal on the preview chip, the overlays wrapper and every dialog — so
   softbnb-ds.css's light block (:15-137) already resolves all 18 --sb-* values
   and the three shadows on these very elements. Copying them in here would only
   create a second palette to keep in sync with the design system.
   ========================================================================== */

body:not(.dark-mode) .pp--cinematic:not(.pp-preview) {
  /* .pp-overlays and every .pp-dialog carry .sb-modal but NOT .sb-page, and the
     design system gives an explicit `color-scheme: light` only to .sb-page
     (softbnb-ds.css:203). Without this line those subtrees fall back to `normal`
     by day: they render light by accident, but the scrollbar in .pp-dialog__body
     and the native controls in the booking sheet are then unthemed. */
  color-scheme: light;

  /* The one token the theme has to state by day. shared.css:208 draws the ring as
     `outline: 3px solid var(--pp-focus, var(--sb-primary-strong))`; the dark
     branch pins #fff, which on #FFFDFB is 1.03:1 — keyboard focus would vanish
     across the whole page (WCAG 2.4.7 / 1.4.11). #14100E is ~18.6:1 on --sb-bg.
     Note this alone is NOT enough: :68-69 sets outline-color directly at higher
     specificity. That is handled below. */
  --pp-focus: #14100E;
}

/* ==========================================================================
   0c. Light-mode overrides — screen only

   @media screen, not bare rules: @media print (:1119-1177) is already a complete
   light treatment of this theme, and it works by HIDING the hero media, scrim,
   dots and pills (:1151-1155). Several rules below deliberately pin the hero dark
   because on screen the photograph is still there. Letting them reach paper would
   undo the print block.
   ========================================================================== */

@media screen {

  /* --- Focus ring ------------------------------------------------------------
     :68-69 sets outline-color: #fff directly, at (0,3,0), so it beats
     shared.css:208's var(--pp-focus, …) no matter what the token says. It has to
     be answered rule-for-rule, not token-for-token. */
  body:not(.dark-mode) .pp.pp--cinematic :focus-visible,
  body:not(.dark-mode) .pp-overlays.pp--cinematic :focus-visible {
    outline-color: var(--pp-focus, #14100E);
  }
  /* …except where the ring has a photograph behind it. The hero is white-on-image
     in both modes, so its controls keep a white ring. (0,5,1) clears the (0,4,1)
     rule above. The docked booking bar gets the same treatment in the ≥992px
     block below, where it becomes a dark glass plate. */
  body:not(.dark-mode) .pp.pp--cinematic .pp-cin-hero :focus-visible {
    outline-color: #fff;
  }
  /* The full-screen photo viewer is pinned dark in every mode — shared.css:1281,
     "Viewer (always dark: pinned colours)" — and pins its own white ring at
     shared.css:1327. That rule is (0,3,0) and would lose to the (0,4,1) above, so
     restate it here or the viewer gets an ink ring on #0c0908. */
  body:not(.dark-mode) .pp-overlays.pp--cinematic .pp-viewer :focus-visible {
    outline-color: #fff;
  }

  /* --- The hero stays a dark stage -------------------------------------------
     The hero keeps its white type by day because it sits on a photograph. But the
     media layer is conditional: cinematic.blade.php:64 renders it only
     `@if(count($cinSlides))`, so a listing with no photos — and every listing for
     the moment before the first slide paints — shows .pp-cin-hero's own
     background (:209) instead. By day --sb-surface-2 is #F7F3EE, and the scrim
     (:255-258) is fully transparent between its 26% and 42% stops, which is
     exactly where the title and facts sit: white on cream, ~1.1:1. The scrim
     element itself IS unconditional (blade:77), so the result reads as broken
     rather than merely faint.
     --sb-deep is the design system's one token that never inverts
     (softbnb-ds.css:37-38), so this is #14100E in both modes. */
  body:not(.dark-mode) .pp--cinematic .pp-cin-hero {
    background: var(--sb-deep);
    --pp-section-bg: var(--sb-deep);   /* mirrors the background, per the shared.css:196-199 contract */
  }
  /* Same shape, far from the hero: the spaces-rail cards carry a white caption
     over their own gradient (:648), and :632's --sb-surface-3 placeholder is
     #EFE8E0 by day. */
  body:not(.dark-mode) .pp--cinematic .pp-cin-space__btn { background: var(--sb-deep); }

  /* --- Host level chip -------------------------------------------------------
     :857 pins the label #fff because --pp-level is a saturated brand colour
     injected per host from the database (host.blade.php:39). That line also
     overrides shared.css:494's fallback of --sb-deep with --sb-surface-2 — fine at
     #221D1A, fatal at #F7F3EE (#fff on cream, ~1.05:1). It fires whenever
     $ppHostLvl['color'] is empty, which host.blade.php:39 explicitly allows via
     `?? ''`. Fix the fallback, not the white: when a real level colour IS present
     the chip is a saturated fill and white is correct in both modes. */
  body:not(.dark-mode) .pp--cinematic .pp-cin-hostcard .pp-host__level {
    background: var(--pp-level, var(--sb-deep));
  }

  /* --- Map -------------------------------------------------------------------
     :811 dims the map canvas unconditionally. property-page.js:1768 already picks
     its Google style array off body.dark-mode, so by day it renders the LIGHT
     basemap — and :811 then dims a light basemap inside what was a dark page:
     wrong twice over. shared.css:604 carries the night treatment (correctly gated
     on body.dark-mode), so this only stands :811 down; nothing changes at night. */
  body:not(.dark-mode) .pp--cinematic .pp-map.is-ready .pp-map__canvas { filter: none; }

  /* --- Shadows ---------------------------------------------------------------
     Shadows stay dark on a light canvas; what changes is the alpha and the tint.
     These are the design system's light elevation values — warm rgba(20,16,14),
     never pure black, which on cream reads as soot (softbnb-ds.css:135-137). */
  body:not(.dark-mode) .pp--cinematic .pp-rail__track .prop-card:hover {
    /* :1055. The !important is kept: partials.property_card styles the card inline. */
    box-shadow: 0 14px 30px rgba(20, 16, 14, 0.12) !important;
  }
  body:not(.dark-mode) .pp-overlays.pp--cinematic .pp-mobile-bar {
    /* :1094 overrides shared.css:1413, which is already the correct light value.
       Restated rather than deleted because shared.css is (0,2,0) and :1091 is
       (0,3,0) — standing down is not something the lower-specificity rule can do
       on its own. */
    box-shadow: 0 -6px 20px rgba(20, 16, 14, 0.08);
  }

  /* --- Calendar range --------------------------------------------------------
     :1100 pins a 20% red wash, which by day lands on a white popover (:1101).
     The design system ships an opaque light value for exactly this (#FDECEC);
     following the token keeps the property page in step with every other page. */
  body:not(.dark-mode) .pp-overlays.pp--cinematic .pp-cal { --pp-cal-range: var(--sb-primary-soft); }
}


/* ==========================================================================
   0d. Light mode, desktop — the site header, and the docked bar

   section 1 repaints #sbNav dark glass with white chrome for the whole page. Over the
   hero that is right in both modes: the nav is over a photograph. Past the hero
   it is right only at night, and section 1's own comment says why — "never the white bar
   over a dark page". By day the page below the hero is cream, so the premise
   inverts. Every rule here fires in exactly one state — light mode, hero gone, nav
   not at-top — and every value is restored from header.blade.php, not invented.
   Specificity: section 1's rules are (1,2,1)-(1,4,1) and several are !important, so each
   selector here repeats section 1's and adds :not(.dark-mode).
   ========================================================================== */

@media screen and (min-width: 992px) {

  body:not(.dark-mode).pp-body--cinematic:not(.pp-hero-in-view) #sbNav.site-topnav:not(.at-top) {
    background: #fff !important;                                /* header.blade.php:21 */
    border-bottom: 1px solid #e5e7eb !important;                /* header.blade.php:22 */
    box-shadow: 0 2px 16px rgba(0, 0, 0, 0.06) !important;      /* header.blade.php:23 */
  }

  body:not(.dark-mode).pp-body--cinematic:not(.pp-hero-in-view) #sbNav.site-topnav:not(.at-top) .site-topnav__link {
    color: #1a1a2e;                                             /* header.blade.php:44 — ~15:1 on #fff */
  }
  body:not(.dark-mode).pp-body--cinematic:not(.pp-hero-in-view) #sbNav.site-topnav:not(.at-top) .site-topnav__link:hover {
    /* :102-103 is white on a white-alpha wash. On the white bar that is a link
       that disappears when you point at it — worse than the resting state. The
       !important is not optional: :103 carries one. */
    background: rgba(230, 51, 56, 0.08);                        /* header.blade.php:49 */
    color: #E63338 !important;
  }

  /* The badge ring separates the count from whatever is behind it; :105 pins it
     transparent for the dark bar. */
  body:not(.dark-mode).pp-body--cinematic:not(.pp-hero-in-view) #sbNav.site-topnav:not(.at-top) .site-topnav__inbox-badge {
    border-color: #fff;                                         /* header.blade.php:89 */
  }

  /* :106-113 groups the avatar button and the day/night toggle into one dark-glass
     capsule. The site gives them different light chrome, so they separate here. */
  body:not(.dark-mode).pp-body--cinematic:not(.pp-hero-in-view) #sbNav.site-topnav:not(.at-top) .site-topnav__user-btn {
    background: #fff;                                           /* header.blade.php:98 */
    border-color: #e5e7eb;
    color: #1a1a2e;
  }
  body:not(.dark-mode).pp-body--cinematic:not(.pp-hero-in-view) #sbNav.site-topnav:not(.at-top) .site-topnav__user-btn i {
    color: #6b7280;                                             /* header.blade.php:104 — :114's 82% white is ~1.1:1 here */
  }
  body:not(.dark-mode).pp-body--cinematic:not(.pp-hero-in-view) #sbNav.site-topnav:not(.at-top) .site-topnav__user-btn:hover {
    border-color: #cbd5e1;
    box-shadow: 0 2px 10px rgba(0, 0, 0, 0.1);
  }
  body:not(.dark-mode).pp-body--cinematic:not(.pp-hero-in-view) #sbNav.site-topnav:not(.at-top) .site-topnav__dm {
    background: #f1f5f9;                                        /* header.blade.php:148 */
    border-color: #e2e8f0;
    color: #1a1a2e;
  }
  body:not(.dark-mode).pp-body--cinematic:not(.pp-hero-in-view) #sbNav.site-topnav:not(.at-top) .site-topnav__dm:hover {
    background: #e2e8f0;
    border-color: #cbd5e1;
  }
  /* The toggle's own track. Worth its own note: :120 is 35% white, which on the
     white scrolled bar leaves a thumb floating with no track — the control looks
     broken precisely when someone reaches for it to change the mode. :121 already
     handles the night case (#E63338); this is the missing half. */
  body:not(.dark-mode).pp-body--cinematic:not(.pp-hero-in-view) #sbNav.site-topnav:not(.at-top) .site-topnav__dm-track {
    background: #cbd5e1;                                        /* header.blade.php:158 */
  }

  /* --- The docked CTA band ---------------------------------------------------
     :933 fills the band with color-mix(--sb-surface 88%), near-white by day, and
     it is fixed so it is on screen constantly. :936's 0.28 black reads as a grey
     smear across the whole viewport on cream. */
  body:not(.dark-mode) .pp--cinematic .pp-cin-cta {
    box-shadow: 0 -8px 28px rgba(20, 16, 14, 0.10);
  }
  /* The band carries the booking bar (blade:283-287), which keeps --cin-glass, so
     it is a dark plate on a light band — its focus rings stay white like the
     hero's. Scoped to ≥992px on purpose: below that the band is an ordinary light
     section (:903-909) and takes the ink ring. */
  body:not(.dark-mode) .pp.pp--cinematic .pp-cin-cta :focus-visible {
    outline-color: #fff;
  }
}


/* ==========================================================================
   13. Print — the dark palette becomes ink on paper (browsers drop backgrounds)
   ========================================================================== */

@media print {
  .pp--cinematic,
  body.dark-mode .pp--cinematic,
  .pp-preview.pp--cinematic {
    color-scheme: light;
    --sb-ink:           #14100E;
    --sb-ink-soft:      #2B2B2B;
    --sb-bg:            #fff;
    --sb-surface:       #fff;
    --sb-surface-2:     #f6f3f0;
    --sb-surface-3:     #ece7e2;
    --sb-border:        #ddd;
    --sb-border-strong: #bbb;
    --sb-text:          #2B2B2B;
    --sb-muted:         #5C534C;
    --sb-muted-2:       #6E655E;
    --sb-gold:          #8A2C2E;
    --sb-gold-soft:     #f6f3f0;
    --cin-glass:        #fff;
    --cin-glass-border: #ddd;
    --sb-shadow-1: none;
    --sb-shadow-2: none;
    --sb-shadow-3: none;
  }
  body.pp-body--cinematic,
  body.dark-mode.pp-body--cinematic { background-color: #fff !important; }
  .pp.pp--cinematic { background: #fff; color: #2B2B2B; }
  /* No fixed site nav on paper, and no pulling the page up under its spacer. */
  body.pp-body--cinematic #sbNav.site-topnav { display: none !important; }
  body.pp-body--cinematic .pp.pp--cinematic { margin-top: 0; }
  .pp--cinematic .pp-cin-hero { min-height: 0; color: #14100E; }
  .pp--cinematic .pp-cin-hero__media,
  .pp--cinematic .pp-cin-hero__scrim,
  .pp--cinematic .pp-cin-hero__dots,
  .pp--cinematic .pp-cin-hero__pills,
  .pp--cinematic .pp-cin-cta { display: none; }
  .pp--cinematic .pp-cin-hero__inner { padding-top: 24px; padding-bottom: 24px; }
  .pp--cinematic .pp-cin-hero__eyebrow,
  .pp--cinematic .pp-cin-hero__title,
  .pp--cinematic .pp-cin-hero__fact,
  .pp--cinematic .pp-cin-hero__fact > i,
  .pp--cinematic .pp-cin-hero__fact strong,
  .pp--cinematic .pp-booking--bar { color: #14100E; }
  /* Every white / white-alpha text rule of the bar lives in the ≥992px block above at
     (0,3,0)–(0,4,0); :is() lifts this one to (0,4,0) so the muted placeholders, rating,
     labels, stepper and status become ink as well, not only the price. */
  .pp--cinematic .pp-booking--bar :is(.pp-booking__price, .pp-booking__unit, .pp-booking__rating,
      .pp-booking__label, .pp-booking__value, .pp-booking__value.is-empty, .pp-booking__date-sep,
      .pp-booking__hint, .pp-stepper__btn, .pp-stepper__value, .pp-booking__line,
      .pp-booking__loading, .pp-status, .pp-status strong,
      .pp-booking__blocked-title, .pp-booking__blocked-text) { color: #14100E; }
  .pp--cinematic .pp-booking--bar :is(.pp-booking__rating, .pp-booking__label, .pp-booking__hint,
      .pp-booking__unit, .pp-booking__value.is-empty, .pp-booking__date-sep,
      .pp-booking__blocked-text) { color: #5C534C; }
  .pp--cinematic .pp-booking--bar .pp-stepper__btn { --pp-bc: #bbb; }
  .pp--cinematic .pp-booking--bar { -webkit-backdrop-filter: none; backdrop-filter: none; }
  .pp--cinematic .pp-cin-card { border: 1px solid #ddd; }
}

/* ── Rare find ─────────────────────────────────────────────────────────────
   The app's RareFindBadge, as a popup: the same hero artwork sitting over a
   pale pill, shown only when the rating is strong and backed by enough
   reviews. The badge is authored inside the CTA band, which on desktop IS the
   fixed booking dock — js/property-page.js lifts the node into .pp-overlays so
   the popup floats clear of the sticky bar rather than riding inside it, and
   publishes --pp-rare-lift: the height of whatever is currently docked at the
   bottom (booking dock, mobile bar, public nav, cookie notice). */
.pp-overlays .pp-rare {
  position: fixed;
  /* Bottom centre: on the page's middle line, riding above the sticky booking
     area rather than inside it. */
  left: 50%;
  bottom: calc(var(--pp-rare-lift, 0px) + var(--sb-4));
  z-index: 2147482900;                 /* under .pp-toast, over the dock (900) */
  width: 266px;
  max-width: calc(100vw - 32px);
  padding: 0;
  border: 0;
  background: none;
  opacity: 0;
  transform: translate(-50%, 16px) scale(0.96);
  transition: opacity 300ms var(--sb-ease, cubic-bezier(.2,.7,.3,1)),
              transform 320ms var(--sb-ease-out, cubic-bezier(.16,1,.3,1));
  filter: drop-shadow(0 14px 30px rgba(230, 51, 56, 0.24));
}
.pp-overlays .pp-rare.is-in  { opacity: 1; transform: translate(-50%, 0) scale(1); }
.pp-overlays .pp-rare.is-out { opacity: 0; transform: translate(-50%, 10px) scale(0.98); }

/* The artwork overhangs the pill, as the app's SparkleImage does — it is the
   hero, so it is not boxed in with it. */
.pp-overlays .pp-rare__art {
  display: block;
  width: 172px;
  height: auto;
  margin: 0 auto -6px;
  pointer-events: none;
  user-select: none;
}
.pp-overlays .pp-rare.is-in .pp-rare__art { animation: pp-rare-art 720ms 60ms var(--sb-ease-out, cubic-bezier(.16,1,.3,1)) both; }
@keyframes pp-rare-art {
  0%   { transform: scale(0.72) translateY(10px); opacity: 0; }
  62%  { transform: scale(1.05) translateY(-2px); opacity: 1; }
  100% { transform: scale(1) translateY(0);       opacity: 1; }
}

.pp-overlays .pp-rare__pill {
  display: flex;
  align-items: center;
  gap: 10px;
  padding: 11px 13px;
  border: 1px solid rgba(230, 51, 56, 0.55);
  border-radius: 15px;
  background: linear-gradient(135deg, #fffdfd 0%, #fff4f4 100%);
}

.pp-overlays .pp-rare__gem {
  flex: 0 0 auto;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 34px;
  height: 34px;
  border-radius: 12px;
  background: #ffe4e4;
  color: #E63338;
}
/* The gem breathes on its own cycle, as it does in the app. */
.pp-overlays .pp-rare.is-in .pp-rare__gem { animation: pp-rare-gem 2600ms 700ms ease-in-out infinite; }
@keyframes pp-rare-gem {
  0%, 100% { transform: scale(1); }
  50%      { transform: scale(1.09); }
}

.pp-overlays .pp-rare__text { display: flex; flex-direction: column; min-width: 0; line-height: 1.3; }
.pp-overlays .pp-rare__text b {
  font-size: 15px; font-weight: 800; letter-spacing: -0.1px;
  color: var(--sb-ink, #0f172a);
}
.pp-overlays .pp-rare__text span {
  font-family: var(--sb-font-meta);
  font-size: 13px;
  color: var(--sb-muted, #64748b);
  white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
}

/* Sits on the artwork's top-right, where the app puts it. Anchored off the
   centre line rather than off the popup's right edge, so it stays on the
   artwork's corner whatever width the popup takes: half the artwork, less a
   nudge inwards to overlap it. */
.pp-overlays .pp-rare__close {
  position: absolute;
  top: 4px;
  left: 50%;
  transform: translateX(62px);       /* 172/2 - 24 */
  width: 26px; height: 26px;
  display: inline-flex; align-items: center; justify-content: center;
  border: 0; border-radius: 999px;
  background: rgba(255, 255, 255, 0.86);
  box-shadow: 0 2px 8px rgba(15, 23, 42, 0.18);
  color: var(--sb-ink, #0f172a);
  font-size: 17px; line-height: 1;
  cursor: pointer;
  transition: background 160ms var(--sb-ease, ease), transform 160ms var(--sb-ease, ease);
}
.pp-overlays .pp-rare__close:hover { background: #fff; transform: translateX(62px) scale(1.08); }
.pp-overlays .pp-rare__close:focus-visible { outline: 2px solid #E63338; outline-offset: 2px; }

@media (max-width: 991.98px) {
  /* --pp-rare-lift already carries the mobile bar, the public nav and the
     cookie notice, so only the artwork needs to come down a size. */
  .pp-overlays .pp-rare { width: 254px; }
  .pp-overlays .pp-rare__art { width: 156px; }
  .pp-overlays .pp-rare__close { transform: translateX(54px); }   /* 156/2 - 24 */
  .pp-overlays .pp-rare__close:hover { transform: translateX(54px) scale(1.08); }
}

@media (prefers-reduced-motion: reduce) {
  .pp-overlays .pp-rare { transition: opacity 120ms linear; transform: translateX(-50%); }
  .pp-overlays .pp-rare.is-in,
  .pp-overlays .pp-rare.is-out { transform: translateX(-50%); }
  .pp-overlays .pp-rare.is-in .pp-rare__art,
  .pp-overlays .pp-rare.is-in .pp-rare__gem { animation: none; }
}
