.transition-effect {
  opacity: 0;
  transition: opacity 0.7s ease, transform 0.7s ease;
  will-change: opacity, transform;
}

.transition-effect.is-visible {
  opacity: 1;
  transform: none;
}

/* Fade */
.transition--fade-in {
  opacity: 0;
}

.transition--fade-out {
  opacity: 1;
}

.transition--fade-out.is-visible {
  opacity: 0;
}

/* Slide */
.transition--slide-left {
  transform: translateX(40px);
}

.transition--slide-right {
  transform: translateX(-40px);
}

.transition--slide-up {
  transform: translateY(40px);
}

.transition--slide-down {
  transform: translateY(-40px);
}

/* Zoom */
.transition--zoom-in {
  transform: scale(0.94);
}

.transition--zoom-out {
  transform: scale(1.06);
}

/* Parallax */
.transition-effect.transition--parallax {
  opacity: 1;
  transform: translateY(0);
  transition: transform 0.2s ease-out;
}

/* Page transition */
.transition--page-transition {
  opacity: 0;
  transform: translateY(20px);
}

.transition--page-transition.is-visible {
  opacity: 1;
  transform: none;
}

/* Respect reduced motion */
@media (prefers-reduced-motion: reduce) {
  .transition-effect,
  .transition-effect.is-visible,
  .transition-effect.transition--parallax,
  .transition--page-transition {
    opacity: 1;
    transform: none;
    transition: none;
  }
}
