/* ==========================================================================
   Motion effects — 3D tilt, smooth scroll (Lenis), page transitions
   (behaviour in js/modules/scroll-effects.js)
   ========================================================================== */

/* ---------- 3D tilt + gold glare ([data-tilt]) ----------
   JS sets --rx/--ry (rotation) and --gx/--gy (glare position).
   Elements can lift themselves with --lift (e.g. on :hover). */
[data-tilt] {
  --lift: 0px;
  position: relative;
  transform: perspective(1000px) rotateX(var(--rx, 0deg)) rotateY(var(--ry, 0deg)) translateY(var(--lift));
}

[data-tilt].is-tilting {
  transition-duration: 0.12s !important;
}

[data-tilt]::after {
  content: "";
  position: absolute;
  inset: 0;
  z-index: 2;
  border-radius: inherit;
  pointer-events: none;
  background: radial-gradient(circle at var(--gx, 50%) var(--gy, 50%), rgba(var(--zt-gold-rgb), 0.16), transparent 55%);
  opacity: 0;
  transition: opacity 0.3s ease;
}

[data-tilt].is-tilting::after {
  opacity: 1;
}

/* ---------- Lenis smooth scroll ---------- */
html.lenis,
html.lenis body {
  height: auto;
}

html.lenis {
  scroll-behavior: auto; /* Lenis does the smoothing */
}

.lenis:not(.lenis-autoToggle).lenis-stopped {
  overflow: clip;
}

.lenis.lenis-smooth [data-lenis-prevent] {
  overscroll-behavior: contain;
}

/* ---------- Cross-page transitions (View Transitions API) ----------
   Multi-page navigation fades/slides like an app; the navbar stays put. */
@view-transition {
  navigation: auto;
}

.site-navbar {
  view-transition-name: site-navbar;
}

::view-transition-old(root) {
  animation: page-out 0.25s ease both;
}

::view-transition-new(root) {
  animation: page-in 0.45s var(--ease-out) both;
}

@keyframes page-out {
  to { opacity: 0; transform: translateY(-12px); }
}

@keyframes page-in {
  from { opacity: 0; transform: translateY(16px); }
}

@media (prefers-reduced-motion: reduce) {
  ::view-transition-group(*),
  ::view-transition-old(*),
  ::view-transition-new(*) {
    animation: none !important;
  }
}
