/* =================================================================
   Мебели Мемо — Animations
   Keyframes and animation utility classes kept separate from the
   structural styles for clarity.
   ================================================================= */

/* -----------------------------------------------------------------
   Pulsing decorative blobs (hero glow accents)
   ----------------------------------------------------------------- */
@keyframes pulse-soft {
  0%, 100% { opacity: 0.6; }
  50%      { opacity: 0.3; }
}

.hero__blob {
  animation: pulse-soft 4s ease-in-out infinite;
}

/* Offset the second blob so the two pulse out of sync */
.hero__blob--bottom {
  animation-delay: 1s;
}

/* -----------------------------------------------------------------
   Infinite horizontal marquee for the partners strip.
   The track is rendered three times in markup, so shifting it by
   one third produces a seamless, never-ending loop.
   ----------------------------------------------------------------- */
@keyframes partners-scroll {
  0%   { transform: translateX(0); }
  100% { transform: translateX(-33.333%); }
}

.partners__track--animated {
  animation: partners-scroll 20s linear infinite;
}

/* When the user pauses the strip (tap / click) we freeze the loop */
.partners__viewport.is-paused .partners__track--animated {
  animation-play-state: paused;
}

/* -----------------------------------------------------------------
   Scroll-reveal: elements fade and rise into view.
   js/main.js adds .reveal to candidates and toggles .is-visible
   via IntersectionObserver.
   ----------------------------------------------------------------- */
.reveal {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 700ms ease, transform 700ms ease;
  will-change: opacity, transform;
}

.reveal.is-visible {
  opacity: 1;
  transform: translateY(0);
}

/* -----------------------------------------------------------------
   Mobile menu slide-down
   ----------------------------------------------------------------- */
@keyframes menu-drop {
  from { opacity: 0; transform: translateY(-8px); }
  to   { opacity: 1; transform: translateY(0); }
}

.mobile-nav:not([hidden]) {
  animation: menu-drop 200ms ease;
}

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

  .reveal {
    opacity: 1;
    transform: none;
  }
}
