/* Scroll reveal base */
[data-reveal] {
  opacity: 0;
  will-change: transform, opacity;
  transition: opacity 0.9s cubic-bezier(0.16, 1, 0.3, 1),
              transform 0.9s cubic-bezier(0.16, 1, 0.3, 1),
              filter 0.9s cubic-bezier(0.16, 1, 0.3, 1);
}

[data-reveal].revealed {
  opacity: 1;
  filter: none !important;
}

[data-reveal="slideUp"] { transform: translateY(50px); }
[data-reveal="slideLeft"] { transform: translateX(-50px); }
[data-reveal="slideRight"] { transform: translateX(50px); }
[data-reveal="scaleUp"] { transform: scale(0.82); }
[data-reveal="blur"] { filter: blur(10px); transform: translateY(15px); }
[data-reveal="fadeOnly"] { }
[data-reveal="floatIn"] { transform: translateY(30px); }
[data-reveal="slideUpFade"] { transform: translateY(40px) scale(0.98); }

.parallax-float {
  will-change: transform;
  transition: transform 0.35s cubic-bezier(0.25, 0.46, 0.45, 0.94) !important;
}

/* Space float — gentle floating */
@keyframes spaceFloat {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(var(--float-amplitude, -6px)); }
}

.space-float {
  animation: spaceFloat var(--float-period, 5s) ease-in-out infinite;
}

.space-float-alt {
  animation: spaceFloat var(--float-period, 4.5s) ease-in-out infinite;
  animation-delay: var(--float-delay, -1.5s);
}

/* Orbit ring rotation */
@keyframes orbitSpin {
  0% { transform: rotate(0deg); }
  100% { transform: rotate(360deg); }
}

@keyframes orbitSpinReverse {
  0% { transform: rotate(360deg); }
  100% { transform: rotate(0deg); }
}

/* Skill tag scale-in */
@keyframes scaleIn {
  0% { transform: scale(0) rotate(-5deg); opacity: 0; }
  100% { transform: scale(1) rotate(0deg); opacity: 1; }
}

.skill-scale-in {
  animation: scaleIn 0.5s cubic-bezier(0.34, 1.56, 0.64, 1) forwards;
  opacity: 0;
}

/* Photo glow pulse */
@keyframes glowPulse {
  0%, 100% { box-shadow: 0 0 60px rgba(139, 149, 165, 0.06), 0 0 120px rgba(139, 149, 165, 0.02); }
  50% { box-shadow: 0 0 90px rgba(139, 149, 165, 0.16), 0 0 160px rgba(139, 149, 165, 0.06); }
}

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

/* Typing cursor blink */
@keyframes cursorBlink {
  0%, 100% { opacity: 1; }
  50% { opacity: 0; }
}

.typing-cursor { animation: cursorBlink 0.8s step-end infinite; }
.typing-cursor.done { animation: none; opacity: 0; }

/* Nav dot bobble */
@keyframes dotBobble {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-2px); }
}

/* Progress bar shimmer */
@keyframes progressShimmer {
  0% { background-position: -200% 0; }
  100% { background-position: 200% 0; }
}

/* Text shimmer for headings */
@keyframes textShimmer {
  0% { background-position: -100% 0; }
  100% { background-position: 200% 0; }
}

.text-shimmer {
  background-size: 200% 100%;
  animation: textShimmer 4s linear infinite;
}

/* Gentle pulse for CTA */
@keyframes gentlePulse {
  0%, 100% { box-shadow: 0 0 0 0 rgba(139, 149, 165, 0.1); }
  50% { box-shadow: 0 0 20px 4px rgba(139, 149, 165, 0.08); }
}

/* Section divider glow */
.section-divider { position: relative; }
.section-divider::after {
  content: '';
  position: absolute;
  top: -1px; left: 50%;
  transform: translateX(-50%);
  width: 4px; height: 4px;
  border-radius: 50%;
  background: var(--accent);
  opacity: 0.2;
}

/* Hexagon glow border */
@keyframes hexGlow {
  0%, 100% { opacity: 0.3; }
  50% { opacity: 0.7; }
}
