@keyframes pageReveal {
  from {
    opacity: 0;
    filter: blur(12px);
  }
  to {
    opacity: 1;
    filter: blur(0);
  }
}

@keyframes loaderPulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: 0.7; transform: scale(0.98); }
}

@keyframes loaderBar {
  to { width: 100%; }
}

@keyframes blobFloat {
  0%, 100% { transform: translate(0, 0) scale(1); }
  33% { transform: translate(30px, -40px) scale(1.05); }
  66% { transform: translate(-20px, 20px) scale(0.95); }
}

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

@keyframes glowPulse {
  0%, 100% { opacity: 0.4; }
  50% { opacity: 0.7; }
}

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

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

@keyframes blink {
  50% { opacity: 0; }
}

@keyframes shimmer {
  to { transform: translateX(100%); }
}

@keyframes pulse {
  0%, 100% { opacity: 1; transform: scale(1); }
  50% { opacity: 0.5; transform: scale(1.2); }
}

@keyframes borderRotate {
  to { --border-angle: 360deg; }
}

@keyframes statusPop {
  0% { transform: scale(0.9); opacity: 0; }
  100% { transform: scale(1); opacity: 1; }
}

@property --border-angle {
  syntax: "<angle>";
  initial-value: 0deg;
  inherits: false;
}

/* Scroll reveal */
.reveal,
.reveal-left,
.reveal-right,
.reveal-scale,
.reveal-item {
  opacity: 0;
  transition: opacity 0.8s var(--ease-out), transform 0.8s var(--ease-out), filter 0.8s;
}

.reveal {
  transform: translateY(40px);
  filter: blur(6px);
}

.reveal-left {
  transform: translateX(-50px);
  filter: blur(4px);
}

.reveal-right {
  transform: translateX(50px);
  filter: blur(4px);
}

.reveal-scale {
  transform: scale(0.9);
  filter: blur(4px);
}

.reveal-item {
  transform: translateY(30px);
}

.reveal.is-visible,
.reveal-left.is-visible,
.reveal-right.is-visible,
.reveal-scale.is-visible {
  opacity: 1;
  transform: none;
  filter: blur(0);
}

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

.reveal-stagger .reveal-item:nth-child(1) { transition-delay: 0.1s; }
.reveal-stagger .reveal-item:nth-child(2) { transition-delay: 0.2s; }
.reveal-stagger .reveal-item:nth-child(3) { transition-delay: 0.3s; }
.reveal-stagger .reveal-item:nth-child(4) { transition-delay: 0.4s; }
.reveal-stagger .reveal-item:nth-child(5) { transition-delay: 0.5s; }
.reveal-stagger .reveal-item:nth-child(6) { transition-delay: 0.6s; }
.reveal-stagger .reveal-item:nth-child(7) { transition-delay: 0.7s; }
.reveal-stagger .reveal-item:nth-child(8) { transition-delay: 0.8s; }

/* Stagger skills */
.skill-card {
  opacity: 0;
  transform: translateY(24px);
  transition: opacity 0.5s var(--ease-out), transform 0.5s var(--ease-out);
}

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