:root {
  /* Easing tokens. Two curves do all the work. */
  --pz-ease-out: cubic-bezier(0.16, 1, 0.3, 1);          /* arrival, settle */
  --pz-ease-std: cubic-bezier(0.4, 0, 0.2, 1);           /* state change */
  --pz-ease-in: cubic-bezier(0.7, 0, 1, 0.5);            /* exit */

  /* Timing tokens. Three durations. */
  --pz-t-micro: 180ms;     /* hover, focus, press */
  --pz-t-med: 450ms;       /* content reveal, card change */
  --pz-t-cinematic: 800ms; /* hero, page-enter */
}

/* ============================================================
   GLOBAL — smooth scroll, calm focus, no flash of unstyled motion
   ============================================================ */

html {
  scroll-behavior: smooth;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

* {
  -webkit-tap-highlight-color: transparent;
}

/* Premium focus ring. Quiet, two-tone, no flash. */
*:focus-visible {
  outline: 2px solid rgba(194, 65, 12, 0.55);
  outline-offset: 3px;
  border-radius: 2px;
  transition: outline-offset var(--pz-t-micro) var(--pz-ease-std);
}


/* ============================================================
   PAGE ENTER — one cinematic reveal on first paint
   The body fades in over 600ms. Subtle.
   ============================================================ */

body {
  animation: pz-page-enter var(--pz-t-cinematic) var(--pz-ease-out) both;
}

@keyframes pz-page-enter {
  from { opacity: 0; transform: translate3d(0, 6px, 0); }
  to   { opacity: 1; transform: translate3d(0, 0, 0); }
}


/* ============================================================
   LINKS — animated underline, calm
   ============================================================ */

a {
  transition: color var(--pz-t-micro) var(--pz-ease-std);
}

/* Editorial inline link underline already styled in v41 for posts.
   Keep that. Add a hover-lift in the prose. */
body.pz-clean-post .entry-content p a,
body.pz-clean-post .entry-content li a {
  background-image: linear-gradient(currentColor, currentColor);
  background-size: 0% 1px;
  background-repeat: no-repeat;
  background-position: 0 100%;
  transition: background-size var(--pz-t-med) var(--pz-ease-out),
              color var(--pz-t-micro) var(--pz-ease-std);
}

body.pz-clean-post .entry-content p a:hover,
body.pz-clean-post .entry-content li a:hover {
  background-size: 100% 1px;
}


/* ============================================================
   CARDS — premium hover physics
   Lift, soft shadow bloom, image scale. Transform-only.
   Applies to homepage cards, destination cards, hub cards.
   ============================================================ */

.pz-card,
.ast-article-post,
.pz-collection-card,
.pz-explore__card,
.pz-shortlist-card {
  transform: translate3d(0, 0, 0);
  transition:
    transform var(--pz-t-med) var(--pz-ease-out),
    box-shadow var(--pz-t-med) var(--pz-ease-out);
  will-change: transform;
}

.pz-card:hover,
.ast-article-post:hover,
.pz-collection-card:hover,
.pz-explore__card:hover,
.pz-shortlist-card:hover {
  transform: translate3d(0, -6px, 0);
  box-shadow:
    0 8px 28px -8px rgba(12, 10, 9, 0.18),
    0 24px 60px -20px rgba(12, 10, 9, 0.12);
}

/* Card image — gentle scale on parent hover */
.pz-card__fig,
.pz-card figure,
.ast-article-post .post-thumb-img-content,
.pz-collection-card__fig {
  overflow: hidden;
  border-radius: inherit;
}

.pz-card__fig img,
.pz-card figure img,
.ast-article-post .post-thumb-img-content img,
.pz-collection-card__fig img {
  transition: transform 700ms var(--pz-ease-out), filter var(--pz-t-med) var(--pz-ease-std);
  will-change: transform;
}

.pz-card:hover .pz-card__fig img,
.pz-card:hover figure img,
.ast-article-post:hover .post-thumb-img-content img,
.pz-collection-card:hover .pz-card__fig img,
.pz-collection-card:hover .pz-collection-card__fig img {
  transform: scale3d(1.045, 1.045, 1);
  filter: saturate(1.04);
}


/* ============================================================
   BUTTONS — tactile press
   ============================================================ */

button,
.wp-element-button,
.pz-btn,
.pz-cta {
  transition:
    transform var(--pz-t-micro) var(--pz-ease-std),
    box-shadow var(--pz-t-micro) var(--pz-ease-std),
    background-color var(--pz-t-micro) var(--pz-ease-std),
    color var(--pz-t-micro) var(--pz-ease-std);
}

button:active,
.wp-element-button:active,
.pz-btn:active,
.pz-cta:active {
  transform: translate3d(0, 1px, 0) scale3d(0.985, 0.985, 1);
}


/* ============================================================
   HEADER — backdrop blur, smooth hide on scroll-down
   ============================================================ */

header.site-header,
.ast-site-header-section,
.main-header-bar {
  transition:
    transform var(--pz-t-med) var(--pz-ease-std),
    background-color var(--pz-t-med) var(--pz-ease-std),
    backdrop-filter var(--pz-t-med) var(--pz-ease-std),
    box-shadow var(--pz-t-med) var(--pz-ease-std);
  will-change: transform;
}

body.pz-header-elevated header.site-header,
body.pz-header-elevated .ast-site-header-section,
body.pz-header-elevated .main-header-bar {
  background-color: rgba(255, 254, 252, 0.78) !important;
  backdrop-filter: saturate(160%) blur(14px);
  -webkit-backdrop-filter: saturate(160%) blur(14px);
  box-shadow: 0 1px 0 rgba(12, 10, 9, 0.06);
}

body.pz-header-hidden header.site-header,
body.pz-header-hidden .ast-site-header-section,
body.pz-header-hidden .main-header-bar {
  transform: translate3d(0, -100%, 0);
}


/* ============================================================
   HERO — subtle on-load reveal + scroll parallax
   ============================================================ */

.pz-clean-post__hero,
.pz-hero,
.pz-page-hero {
  overflow: hidden;
}

.pz-clean-post__hero img,
.pz-hero img,
.pz-page-hero img {
  transform: translate3d(0, var(--pz-parallax, 0px), 0) scale3d(1.04, 1.04, 1);
  transition: transform 80ms linear;
  will-change: transform;
}

/* Hero text — staggered reveal on load */
.pz-clean-post__hero .pz-hero__kicker,
.pz-clean-post__hero .pz-hero__title,
.pz-clean-post__hero .pz-hero__sub,
.pz-hero__kicker,
.pz-hero__title,
.pz-hero__sub {
  opacity: 0;
  transform: translate3d(0, 12px, 0);
  animation: pz-hero-up 1100ms var(--pz-ease-out) forwards;
}

.pz-clean-post__hero .pz-hero__kicker,
.pz-hero__kicker { animation-delay: 200ms; }

.pz-clean-post__hero .pz-hero__title,
.pz-hero__title { animation-delay: 320ms; }

.pz-clean-post__hero .pz-hero__sub,
.pz-hero__sub { animation-delay: 460ms; }

@keyframes pz-hero-up {
  to { opacity: 1; transform: translate3d(0, 0, 0); }
}


/* ============================================================
   SCROLL REVEAL — calm content fade on enter
   Class added by IntersectionObserver below.
   ============================================================ */

.pz-reveal {
  opacity: 0;
  transform: translate3d(0, 16px, 0);
  transition:
    opacity var(--pz-t-cinematic) var(--pz-ease-out),
    transform var(--pz-t-cinematic) var(--pz-ease-out);
  will-change: transform, opacity;
}

.pz-reveal.pz-reveal--in {
  opacity: 1;
  transform: translate3d(0, 0, 0);
}

/* Staggered children */
.pz-reveal-stagger > * {
  opacity: 0;
  transform: translate3d(0, 14px, 0);
  transition:
    opacity 700ms var(--pz-ease-out),
    transform 700ms var(--pz-ease-out);
}

.pz-reveal-stagger.pz-reveal--in > *:nth-child(1) { transition-delay: 0ms;   opacity: 1; transform: none; }
.pz-reveal-stagger.pz-reveal--in > *:nth-child(2) { transition-delay: 90ms;  opacity: 1; transform: none; }
.pz-reveal-stagger.pz-reveal--in > *:nth-child(3) { transition-delay: 180ms; opacity: 1; transform: none; }
.pz-reveal-stagger.pz-reveal--in > *:nth-child(4) { transition-delay: 270ms; opacity: 1; transform: none; }
.pz-reveal-stagger.pz-reveal--in > *:nth-child(5) { transition-delay: 360ms; opacity: 1; transform: none; }
.pz-reveal-stagger.pz-reveal--in > *:nth-child(6) { transition-delay: 450ms; opacity: 1; transform: none; }
.pz-reveal-stagger.pz-reveal--in > *:nth-child(n+7) { transition-delay: 540ms; opacity: 1; transform: none; }


/* ============================================================
   IMAGE LAZY-LOAD — calm fade-in
   ============================================================ */

img[loading="lazy"] {
  opacity: 0;
  transition: opacity 600ms var(--pz-ease-out);
}

img[loading="lazy"].pz-img-loaded,
img[loading="lazy"][src]:not([src=""]) {
  opacity: 1;
}


/* ============================================================
   MENU / DROPDOWN — premium reveal
   ============================================================ */

.sub-menu,
.pz-megamenu,
.pz-dropdown {
  transition:
    opacity var(--pz-t-med) var(--pz-ease-out),
    transform var(--pz-t-med) var(--pz-ease-out),
    visibility 0s linear var(--pz-t-med);
  transform: translate3d(0, 6px, 0);
  opacity: 0;
  visibility: hidden;
}

.menu-item:hover > .sub-menu,
.menu-item:focus-within > .sub-menu,
.pz-megamenu.is-open,
.pz-dropdown.is-open {
  transition:
    opacity var(--pz-t-med) var(--pz-ease-out),
    transform var(--pz-t-med) var(--pz-ease-out),
    visibility 0s linear 0s;
  opacity: 1;
  transform: translate3d(0, 0, 0);
  visibility: visible;
}


/* ============================================================
   SHORTLIST HEART — premium press
   ============================================================ */

.pz-heart-btn,
.pz-shortlist-btn,
button[data-shortlist] {
  transition:
    transform var(--pz-t-micro) var(--pz-ease-std),
    color var(--pz-t-micro) var(--pz-ease-std),
    background-color var(--pz-t-micro) var(--pz-ease-std);
}

.pz-heart-btn:active,
.pz-shortlist-btn:active,
button[data-shortlist]:active {
  transform: scale3d(0.88, 0.88, 1);
}

.pz-heart-btn.is-active,
.pz-shortlist-btn.is-active,
button[data-shortlist].is-active {
  animation: pz-heart-pop 380ms var(--pz-ease-out);
}

@keyframes pz-heart-pop {
  0%   { transform: scale3d(0.88, 0.88, 1); }
  40%  { transform: scale3d(1.18, 1.18, 1); }
  100% { transform: scale3d(1, 1, 1); }
}


/* ============================================================
   REDUCED MOTION — respect, never punish
   ============================================================ */

@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 1ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 1ms !important;
    scroll-behavior: auto !important;
  }

  html { scroll-behavior: auto; }

  .pz-reveal, .pz-reveal-stagger > * {
    opacity: 1 !important;
    transform: none !important;
  }
}