/*
  ALTERRA VR — Birthday animation v4 / 2026-10-20
  Only animation for blocks 05–09: location, party details, first VR,
  FAQ and closing enquiry. No layout, dimensions, pricing, copy, links,
  desktop/mobile breakpoints or app behavior are changed.
  Existing .bp-reveal.is-in observer + .bp-motion-v1 preference gate.
*/
@keyframes bp-v4-soft-in {
  from { opacity: .18; transform: translate3d(0, 9px, 0); }
  to   { opacity: 1; transform: translate3d(0, 0, 0); }
}
@keyframes bp-v4-fade-in {
  from { opacity: .12; }
  to   { opacity: 1; }
}
@keyframes bp-v4-picture-enter {
  from { opacity: .65; transform: scale(1.025); }
  to   { opacity: 1; transform: scale(1); }
}
@keyframes bp-v4-faq-answer-in {
  from { opacity: 0; transform: translate3d(0, -6px, 0); }
  to   { opacity: 1; transform: translate3d(0, 0, 0); }
}
/* 05: address card, map links, reviews and ratings. */
html.bp-motion-v1 .bp-location-map.bp-reveal.is-in > :is(.bp-location-actions, p:not(.bp-kicker)),
html.bp-motion-v1 .bp-location-trust.bp-reveal.is-in > :is(h3, p:not(.bp-kicker), .bp-location-ratings) {
  animation: bp-v4-soft-in 620ms cubic-bezier(.2,.73,.25,1) both;
}
html.bp-motion-v1 .bp-location-map.is-in > .bp-location-actions,
html.bp-motion-v1 .bp-location-trust.is-in > .bp-location-ratings { animation-delay: 100ms; }
/* 06: section introduction then the 6 useful fact cards. */
html.bp-motion-v1 .bp-details-v1 .bp-section-head.bp-reveal.is-in > :is(h2, .bp-details-lead) {
  animation: bp-v4-soft-in 600ms cubic-bezier(.2,.73,.25,1) both;
}
html.bp-motion-v1 .bp-details-v1 .bp-section-head.is-in > .bp-details-lead { animation-delay: 90ms; }
html.bp-motion-v1 .bp-details-v1 .bp-detail.bp-reveal.is-in > :is(.bp-detail-icon, .bp-detail-tag, h3, p) {
  animation: bp-v4-fade-in 600ms ease-out both;
}
html.bp-motion-v1 .bp-details-v1 .bp-detail.is-in > .bp-detail-icon { animation-delay: 35ms; }
html.bp-motion-v1 .bp-details-v1 .bp-detail.is-in > .bp-detail-tag { animation-delay: 95ms; }
html.bp-motion-v1 .bp-details-v1 .bp-detail.is-in > h3 { animation-delay: 150ms; }
html.bp-motion-v1 .bp-details-v1 .bp-detail.is-in > p { animation-delay: 200ms; }
/* 07: gentle one-time photo arrival, then explanation and checklist. */
html.bp-motion-v1 .bp-risk-v1 .bp-risk-visual.bp-reveal.is-in > img {
  animation: bp-v4-picture-enter 850ms cubic-bezier(.2,.73,.25,1) both;
}
html.bp-motion-v1 .bp-risk-v1 .bp-risk-copy.bp-reveal.is-in > :is(h2, .bp-risk-lead, .bp-risk-checks) {
  animation: bp-v4-soft-in 660ms cubic-bezier(.2,.73,.25,1) both;
}
html.bp-motion-v1 .bp-risk-v1 .bp-risk-copy.is-in > .bp-risk-lead { animation-delay: 85ms; }
html.bp-motion-v1 .bp-risk-v1 .bp-risk-copy.is-in > .bp-risk-checks { animation-delay: 155ms; }
/* 08: native <details> keeps keyboard and click behavior. Only the
   revealed answer fades/slides in, no height measurement or JS hacks. */
html.bp-motion-v1 .bp-faq details[open] > p {
  animation: bp-v4-faq-answer-in 295ms cubic-bezier(.2,.7,.25,1) both;
}
/* 09: clear yet quiet close to the sales journey. */
html.bp-motion-v1 .bp-contact-copy.bp-reveal.is-in > :is(h2, .bp-selected),
html.bp-motion-v1 .bp-contact-actions.bp-reveal.is-in > :is(a, .bp-contact-meta) {
  animation: bp-v4-fade-in 620ms ease-out both;
}
html.bp-motion-v1 .bp-contact-copy.is-in > .bp-selected { animation-delay: 140ms; }
html.bp-motion-v1 .bp-contact-actions.is-in > a:nth-of-type(2) { animation-delay: 95ms; }
html.bp-motion-v1 .bp-contact-actions.is-in > .bp-contact-meta { animation-delay: 170ms; }
/* Mouse users get subtle, non-layout feedback. Touch has no hover effect. */
@media (hover:hover) and (pointer:fine) {
  html.bp-motion-v1 .bp-location-ratings a,
  html.bp-motion-v1 .bp-location-actions a {
    transition: transform 240ms ease, border-color 240ms ease, box-shadow 240ms ease, background-color 240ms ease;
  }
  html.bp-motion-v1 .bp-location-ratings a:hover,
  html.bp-motion-v1 .bp-location-actions a:hover {
    box-shadow: 0 8px 25px rgba(22,211,236,.09);
    border-color: rgba(92,236,251,.65);
  }
  html.bp-motion-v1 .bp-faq summary:hover { color: #cbf9ff; }
}
html.bp-motion-v1 .bp-faq summary:focus-visible,
html.bp-motion-v1 .bp-location a:focus-visible {
  outline: 2px solid #8cf4ff;
  outline-offset: 3px;
}
/* Lightweight transitions with no stagger on phones / tablets. */
@media (max-width:1100px) {
  html.bp-motion-v1 :is(
    .bp-location-map.is-in > .bp-location-actions,
    .bp-location-trust.is-in > .bp-location-ratings,
    .bp-details-v1 .bp-section-head.is-in > .bp-details-lead,
    .bp-details-v1 .bp-detail.is-in > *,
    .bp-risk-v1 .bp-risk-copy.is-in > *,
    .bp-contact-copy.is-in > *,
    .bp-contact-actions.is-in > *
  ) { animation-delay: 0ms; }
  html.bp-motion-v1 .bp-location :is(.bp-location-map,.bp-location-trust).is-in > :is(p,h3,.bp-location-actions,.bp-location-ratings),
  html.bp-motion-v1 .bp-details-v1 .bp-section-head.is-in > :is(h2,.bp-details-lead),
  html.bp-motion-v1 .bp-details-v1 .bp-detail.is-in > :is(.bp-detail-icon,.bp-detail-tag,h3,p),
  html.bp-motion-v1 .bp-risk-v1 .bp-risk-copy.is-in > :is(h2,.bp-risk-lead,.bp-risk-checks),
  html.bp-motion-v1 .bp-contact :is(.bp-contact-copy,.bp-contact-actions).is-in > :is(h2,.bp-selected,a,.bp-contact-meta) {
    animation-duration: 420ms;
    animation-delay: 0ms;
  }
  html.bp-motion-v1 .bp-risk-v1 .bp-risk-visual.is-in > img { animation-duration: 520ms; }
  html.bp-motion-v1 .bp-faq details[open] > p { animation-duration: 220ms; }
}
/* OS accessibility preference takes precedence even if changed live. */
@media (prefers-reduced-motion:reduce) {
  html .bp-location :is(.bp-location-map,.bp-location-trust) > *,
  html .bp-details-v1 .bp-section-head > *,
  html .bp-details-v1 .bp-detail > *,
  html .bp-risk-v1 .bp-risk-visual > img,
  html .bp-risk-v1 .bp-risk-copy > *,
  html .bp-faq details > p,
  html .bp-contact :is(.bp-contact-copy,.bp-contact-actions) > * {
    animation: none !important;
    opacity: 1 !important;
    transform: none !important;
    animation-delay: 0ms !important;
  }
  html .bp-location a { transition:none!important; }
}
