/* ==========================================================================
   Animations & Effects
   ========================================================================== */

/* Matrix Background */
.matrix-bg {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  z-index: -1;
  pointer-events: none;
}

/* ==========================================================================
   Reveal Animations
   ========================================================================== */

.reveal {
  opacity: 0;
  transform: translateY(60px);
  transition: all 0.8s cubic-bezier(0.5, 0, 0, 1);
}

.reveal.active {
  opacity: 1;
  transform: translateY(0);
}

/* Slide Animations */
.slide-left {
  opacity: 0;
  transform: translateX(-100px);
  transition: all 1s cubic-bezier(0.5, 0, 0, 1);
}

.slide-right {
  opacity: 0;
  transform: translateX(100px);
  transition: all 1s cubic-bezier(0.5, 0, 0, 1);
}

.slide-left.active,
.slide-right.active {
  opacity: 1;
  transform: translateX(0);
}

/* Scale Animation */
.scale-in {
  opacity: 0;
  transform: scale(0.8);
  transition: all 0.8s cubic-bezier(0.5, 0, 0, 1);
}

.scale-in.active {
  opacity: 1;
  transform: scale(1);
}

/* ==========================================================================
   Stagger Delays
   ========================================================================== */

.delay-100 {
  transition-delay: 0.1s;
}
.delay-200 {
  transition-delay: 0.2s;
}
.delay-300 {
  transition-delay: 0.3s;
}
.delay-400 {
  transition-delay: 0.4s;
}
.delay-500 {
  transition-delay: 0.5s;
}

/* ==========================================================================
   Fade Animations
   ========================================================================== */

@keyframes fadeInUp {
  from {
    opacity: 0;
    transform: translateY(40px);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

.fade-in-up {
  animation: fadeInUp 0.8s ease forwards;
}

/* ==========================================================================
   Float Animations
   ========================================================================== */

@keyframes float {
  0%,
  100% {
    transform: translateY(0px);
  }
  50% {
    transform: translateY(-20px);
  }
}

@keyframes float-1 {
  0%,
  100% {
    transform: translateY(0px) rotate(0deg);
  }
  50% {
    transform: translateY(-15px) rotate(1deg);
  }
}

@keyframes float-2 {
  0%,
  100% {
    transform: translateY(0px) rotate(0deg);
  }
  50% {
    transform: translateY(-20px) rotate(-1deg);
  }
}

@keyframes float-3 {
  0%,
  100% {
    transform: translateY(0px) rotate(0deg);
  }
  50% {
    transform: translateY(-12px) rotate(0.5deg);
  }
}

.floating {
  animation: float 6s ease-in-out infinite;
}

.floating-1 {
  animation: float-1 6s ease-in-out infinite;
}

.floating-2 {
  animation: float-2 7s ease-in-out infinite;
}

.floating-3 {
  animation: float-3 8s ease-in-out infinite;
}

/* ==========================================================================
   Pulse & Glow Animations
   ========================================================================== */

@keyframes pulse-glow {
  0%,
  100% {
    box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.4);
  }
  50% {
    box-shadow: 0 0 30px 10px rgba(255, 255, 255, 0.2);
  }
}

@keyframes pulse-soft {
  0%,
  100% {
    opacity: 0.03;
  }
  50% {
    opacity: 0.08;
  }
}

.pulse-glow {
  animation: pulse-glow 3s ease-in-out infinite;
}

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

/* ==========================================================================
   Glitch Effect
   ========================================================================== */

.glitch {
  position: relative;
}

.glitch::before,
.glitch::after {
  content: attr(data-text);
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

.glitch::before {
  animation: glitch-1 2s infinite linear alternate-reverse;
  clip-path: polygon(0 0, 100% 0, 100% 35%, 0 35%);
  -webkit-clip-path: polygon(0 0, 100% 0, 100% 35%, 0 35%);
}

.glitch::after {
  animation: glitch-2 3s infinite linear alternate-reverse;
  clip-path: polygon(0 65%, 100% 65%, 100% 100%, 0 100%);
  -webkit-clip-path: polygon(0 65%, 100% 65%, 100% 100%, 0 100%);
}

@keyframes glitch-1 {
  0% {
    transform: translateX(0);
  }
  20% {
    transform: translateX(-3px);
  }
  40% {
    transform: translateX(3px);
  }
  60% {
    transform: translateX(-1px);
  }
  80% {
    transform: translateX(2px);
  }
  100% {
    transform: translateX(0);
  }
}

@keyframes glitch-2 {
  0% {
    transform: translateX(0);
  }
  20% {
    transform: translateX(3px);
  }
  40% {
    transform: translateX(-2px);
  }
  60% {
    transform: translateX(1px);
  }
  80% {
    transform: translateX(-3px);
  }
  100% {
    transform: translateX(0);
  }
}

/* ==========================================================================
   Text Effects
   ========================================================================== */

/* Text Highlight */
.highlight-text {
  background: linear-gradient(
    120deg,
    transparent 0%,
    transparent 50%,
    white 50%
  );
  background-size: 240% 100%;
  background-position: 100%;
  transition: background-position 0.8s ease;
  padding: 0.2em 0;
}

.highlight-text.active {
  background-position: 0;
  color: black;
}

/* Animated Line */
.animated-line {
  width: 0;
  transition: width 1s cubic-bezier(0.5, 0, 0, 1);
}

.animated-line.active {
  width: 12rem;
}

/* Border Animation */
.border-animate {
  position: relative;
}

.border-animate::after {
  content: "";
  position: absolute;
  bottom: 0;
  left: 0;
  width: 0;
  height: 3px;
  background: white;
  transition: width 0.6s ease;
}

.border-animate:hover::after {
  width: 100%;
}

/* ==========================================================================
   Image Effects
   ========================================================================== */

.image-zoom {
  overflow: hidden;
}

.image-zoom img {
  transition: transform 0.6s cubic-bezier(0.5, 0, 0, 1);
}

.image-zoom:hover img {
  transform: scale(1.1);
}

/* ==========================================================================
   Marquee Animation
   ========================================================================== */

@keyframes marquee {
  0% {
    transform: translateX(0);
  }
  100% {
    transform: translateX(-50%);
  }
}

.marquee-track {
  animation: marquee 20s linear infinite;
}

/* ==========================================================================
   Counter
   ========================================================================== */

.counter {
  display: inline-block;
}

/* ==========================================================================
   Hero Section Animation
   ========================================================================== */

/* Hero title animation */
.hero-animate h1 {
  opacity: 0;
  transform: translateY(40px);
  animation: heroFadeInUp 0.8s cubic-bezier(0.5, 0, 0, 1) forwards;
}

/* Hero line animation */
.hero-animate .hero-line {
  width: 0;
  animation: heroLineExpand 0.6s cubic-bezier(0.5, 0, 0, 1) 0.3s forwards;
}

/* Hero subtitle animation */
.hero-animate p {
  opacity: 0;
  transform: translateY(30px);
  animation: heroFadeInUp 0.8s cubic-bezier(0.5, 0, 0, 1) 0.5s forwards;
}

@keyframes heroFadeInUp {
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes heroLineExpand {
  to {
    width: 12rem;
  }
}

/* ==========================================================================
   Mobile Menu Animation
   ========================================================================== */

/* Menu container animation */
#mobile-menu {
  overflow: hidden;
  transition: max-height 0.4s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.3s ease,
    transform 0.3s ease;
}

.mobile-menu-closed {
  max-height: 0;
  opacity: 0;
  transform: translateY(-10px);
  pointer-events: none;
}

.mobile-menu-open {
  max-height: 500px;
  opacity: 1;
  transform: translateY(0);
  pointer-events: auto;
}

/* Hamburger icon animation */
#mobile-menu-btn {
  position: relative;
  width: 24px;
  height: 24px;
}

#mobile-menu-btn svg {
  transition: transform 0.3s ease;
}

#mobile-menu-btn.menu-open svg {
  transform: rotate(90deg);
}
