/* ==========================================================================
   GERA REALTY — Motion
   Tasteful, purposeful micro-interactions only.
   ========================================================================== */

@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;
  }
}

/* Fade-up on scroll reveal */
.reveal {
  opacity: 0;
  transform: translateY(28px);
  transition: opacity 700ms cubic-bezier(0.4,0,0.2,1), transform 700ms cubic-bezier(0.4,0,0.2,1);
}
.reveal.is-visible { opacity: 1; transform: translateY(0); }

.reveal-stagger > * {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 640ms cubic-bezier(0.4,0,0.2,1), transform 640ms cubic-bezier(0.4,0,0.2,1);
}
.reveal-stagger.is-visible > * { opacity: 1; transform: translateY(0); }
.reveal-stagger.is-visible > *:nth-child(1) { transition-delay: 0ms; }
.reveal-stagger.is-visible > *:nth-child(2) { transition-delay: 90ms; }
.reveal-stagger.is-visible > *:nth-child(3) { transition-delay: 180ms; }
.reveal-stagger.is-visible > *:nth-child(4) { transition-delay: 270ms; }
.reveal-stagger.is-visible > *:nth-child(5) { transition-delay: 360ms; }

/* Image reveal (subtle scale-in clip) */
.img-reveal { overflow: hidden; }
.img-reveal img { transform: scale(1.12); opacity: 0; transition: transform 900ms cubic-bezier(0.16,1,0.3,1), opacity 700ms ease; }
.img-reveal.is-visible img { transform: scale(1); opacity: 1; }

/* Fade-in simple */
.fade-in { animation: grFadeIn 600ms ease both; }
@keyframes grFadeIn { from { opacity: 0; } to { opacity: 1; } }

/* Mobile menu slide handled via transform in style.css transitions */

/* Testimonial slide transition */
.testimonial-primary { animation: grTestimonialIn 480ms cubic-bezier(0.4,0,0.2,1); }
@keyframes grTestimonialIn {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: translateY(0); }
}

/* Location visual crossfade handled via opacity transition in style.css */

/* Button ripple-free press feedback already via transform in style.css */

/* Spinner for form loading state */
.spinner {
  width: 16px; height: 16px;
  border: 2px solid rgba(255,255,255,0.35);
  border-top-color: #fff;
  border-radius: 50%;
  animation: grSpin 700ms linear infinite;
  display: inline-block;
}
.btn-gr-outline .spinner, .gr-field ~ .spinner { border-color: rgba(11,31,58,0.25); border-top-color: var(--color-navy); }

@keyframes grSpin { to { transform: rotate(360deg); } }

.is-loading { pointer-events: none; opacity: 0.75; }

/* Success check pop */
@keyframes grPop {
  0% { transform: scale(0.8); opacity: 0; }
  60% { transform: scale(1.06); opacity: 1; }
  100% { transform: scale(1); }
}
.form-msg.is-success, .form-msg.is-error { animation: grPop 320ms cubic-bezier(0.4,0,0.2,1); }

/* Counter pulse when animating (optional subtle) */
.trust-num.is-counting, .proof-num.is-counting { transition: color 300ms ease; }
