/* ═══════════════════════════════════════════════════════════════════
   CEANO — Animation CSS
   Обязательные стили для работы всех GSAP-анимаций.
   Подключить ПОСЛЕ основных стилей на всех страницах.
   ═══════════════════════════════════════════════════════════════════ */
    /* ===== PRELOADER ===== */
    body.is-preloading {
      overflow: hidden;
    }
    .page-preloader {
      position: fixed;
      inset: 0;
      z-index: 1000;
      display: grid;
      place-items: center;
      background: var(--eggshell);
      opacity: 1;
      visibility: visible;
      transition: opacity .65s ease, visibility 0s linear .65s;
    }
    .page-preloader.is-hidden {
      opacity: 0;
      visibility: hidden;
      pointer-events: none;
    }
    .page-preloader__spinner {
      width: min(54vw, 277.22px);
      min-width: 156px;
      aspect-ratio: 277.22 / 273.131;
      transform: rotate(113.58deg);
      transform-origin: center;
      animation: ceano-preloader-spin 1.35s linear infinite;
    }
    .page-preloader__graphic {
      display: block;
      width: 100%;
      height: 100%;
    }
    @keyframes ceano-preloader-spin {
      from { transform: rotate(113.58deg); }
      to   { transform: rotate(473.58deg); }
    }
    @media (prefers-reduced-motion: reduce) {
      .page-preloader { transition-duration: .3s; }
      .page-preloader__spinner { animation: none; }
    }



.request-info-image img {
  /* Запас высоты для параллакс-выхода (yPercent ±20%) */
  height: 140%;
  width: 100%;
  object-fit: cover;
  object-position: center;
  will-change: transform;
}
/* ─── will-change для анимируемых элементов ─────────────────────── */
.hero-title,
.contact-hero-title,
.contact-hero-copy {
  will-change: opacity;
}


