/* Self-hosted fonts — override CDN @font-face in lovable.css.
   animations.css loads after lovable.css so these declarations win.
   Preloading in header.php ensures they arrive before first paint → no CLS. */
@font-face {
  font-family: Geist;
  font-style: normal;
  font-weight: 100 900;
  font-display: swap;
  src: url('../fonts/geist-latin-wght-normal.woff2') format('woff2-variations');
}
@font-face {
  font-family: 'Instrument Serif';
  font-style: normal;
  font-weight: 400;
  font-display: swap;
  src: url('../fonts/instrument-serif-latin-400-normal.woff2') format('woff2');
}
@font-face {
  font-family: 'Instrument Serif';
  font-style: italic;
  font-weight: 400;
  font-display: swap;
  src: url('../fonts/instrument-serif-latin-400-italic.woff2') format('woff2');
}
@font-face {
  font-family: 'JetBrains Mono';
  font-style: normal;
  font-weight: 100 800;
  font-display: swap;
  src: url('../fonts/jetbrains-mono-latin-wght-normal.woff2') format('woff2-variations');
}

:root {
  --ease-luxe: cubic-bezier(0.22, 1, 0.36, 1);
  --ease-standard: cubic-bezier(0.4, 0, 0.2, 1);
}

/* Page-load fade classes — neutralised (start visible, no flash) */
.js-fade-up-on-load,
.js-fade-up-on-load--delayed {
  opacity: 1;
  transform: none;
}

/* Scroll-reveal classes — neutralised (start visible, no flash) */
.reveal,
.reveal-heavy,
.reveal-subtle {
  opacity: 1;
  transform: none;
}

/* Stagger children — neutralised (start visible) */
.stagger-children > * {
  opacity: 1;
  transform: none;
}

/* Hero section viewport height — svh on mobile prevents CLS from browser
   toolbar appearing/disappearing. Desktop uses vh (no toolbar dynamics). */
#top {
  min-height: 100svh;
}
@media (min-width: 1024px) {
  #top {
    min-height: 100vh;
  }
}

/* Nav scroll state */
.site-header.is-scrolled,
header.is-scrolled,
nav.is-scrolled {
  background: rgba(12, 12, 16, 0.97) !important;
  backdrop-filter: blur(24px);
  -webkit-backdrop-filter: blur(24px);
}

/* Card hover lift */
.lift {
  transition: transform 0.6s var(--ease-luxe);
}
.lift:hover {
  transform: translateY(-4px);
}

/* Image zoom on hover */
.img-zoom {
  overflow: hidden;
}
.img-zoom img {
  transition: transform 1.2s ease-out;
}
.img-zoom:hover img {
  transform: scale(1.05);
}

/* Ping animation for available dot */
@keyframes ping {
  75%, 100% {
    transform: scale(2);
    opacity: 0;
  }
}
.animate-ping {
  animation: ping 1.6s ease-out infinite;
}

/* Marquee animation */
@keyframes marquee {
  from { transform: translateX(0); }
  to { transform: translateX(-50%); }
}
.marquee {
  animation: marquee 60s linear infinite;
}
