.reveal {
  opacity: 0;
  transform: translateY(20px);
  transition: 1.1s cubic-bezier(0.33, 1, 0.68, 1);
  will-change: transform, opacity;
}

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

.reveal-left {
  opacity: 0;
  transform: translateX(-30px);
  transition: 1.1s cubic-bezier(0.33, 1, 0.68, 1);
}

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

.reveal-right {
  opacity: 0;
  transform: translateX(30px);
  transition: 1.1s cubic-bezier(0.33, 1, 0.68, 1);
}

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

.reveal-scale {
  opacity: 0;
  transform: scale(0.92);
  transition: 1.1s cubic-bezier(0.33, 1, 0.68, 1);
}

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

.hover-tilt {
  transform-style: preserve-3d;
  transition: transform 0.4s ease;
}

.hover-tilt:hover {
  transform: perspective(800px) rotateX(4deg) rotateY(-4deg);
}

.hover-glow:hover {
  box-shadow: 0 0 0 1px rgba(96, 165, 250, 0.4), 0 20px 50px rgba(37, 99, 235, 0.3);
}

.text-shimmer {
  background: linear-gradient(90deg, rgba(255,255,255,0.2), rgba(255,255,255,0.8), rgba(255,255,255,0.2));
  background-size: 200% auto;
  color: transparent;
  -webkit-background-clip: text;
  animation: shimmer 2.4s linear infinite;
}

.split-char {
  display: inline-block;
  opacity: 0;
  transform: translateY(10px);
  animation: splitReveal 1s forwards cubic-bezier(0.33, 1, 0.68, 1);
  white-space: pre;
}

.gradient-char {
  background: linear-gradient(90deg, #ffffff 0%, #60A5FA 45%, #FBBF24 100%);
  -webkit-background-clip: text;
  color: transparent;
}

.shake {
  animation: shake 0.5s ease;
}

@keyframes shimmer {
  0% { background-position: 0% center; }
  100% { background-position: 200% center; }
}

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

@keyframes shake {
  0%, 100% { transform: translateX(0); }
  20%, 60% { transform: translateX(-6px); }
  40%, 80% { transform: translateX(6px); }
}
