/* 核心动画库 - 所有酷炫特效 */

/* ================================
   基础动画
================================ */

/* 淡入效果 */
@keyframes fadeIn {
  from {
    opacity: 0;
  }
  to {
    opacity: 1;
  }
}

/* 滑入效果 */
@keyframes slideInUp {
  from {
    opacity: 0;
    transform: translateY(2rem);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes slideInDown {
  from {
    opacity: 0;
    transform: translateY(-2rem);
  }
  to {
    opacity: 1;
    transform: translateY(0);
  }
}

@keyframes slideInLeft {
  from {
    opacity: 0;
    transform: translateX(-2rem);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

@keyframes slideInRight {
  from {
    opacity: 0;
    transform: translateX(2rem);
  }
  to {
    opacity: 1;
    transform: translateX(0);
  }
}

/* 缩放效果 */
@keyframes scaleIn {
  from {
    opacity: 0;
    transform: scale(0.95);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

@keyframes scaleInBounce {
  from {
    opacity: 0;
    transform: scale(0.3);
  }
  50% {
    transform: scale(1.1);
  }
  to {
    opacity: 1;
    transform: scale(1);
  }
}

/* 旋转效果 */
@keyframes rotate {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

@keyframes rotateIn {
  from {
    opacity: 0;
    transform: rotate(-200deg);
  }
  to {
    opacity: 1;
    transform: rotate(0deg);
  }
}

/* ================================
   3D 动画效果
================================ */

/* 3D翻转效果 */
@keyframes card3DFlip {
  0% {
    transform: perspective(1000px) rotateY(0deg);
  }
  50% {
    transform: perspective(1000px) rotateY(-90deg);
  }
  100% {
    transform: perspective(1000px) rotateY(0deg);
  }
}

@keyframes card3DFlipHorizontal {
  0% {
    transform: perspective(1000px) rotateX(0deg);
  }
  50% {
    transform: perspective(1000px) rotateX(90deg);
  }
  100% {
    transform: perspective(1000px) rotateX(0deg);
  }
}

/* 3D摇摆效果 */
@keyframes swing3D {
  0%, 100% {
    transform: perspective(1000px) rotateY(0deg);
  }
  25% {
    transform: perspective(1000px) rotateY(10deg);
  }
  75% {
    transform: perspective(1000px) rotateY(-10deg);
  }
}

/* ================================
   文字动画
================================ */

/* 打字机效果 */
@keyframes typewriter {
  0% {
    width: 0;
  }
  100% {
    width: 100%;
  }
}

@keyframes blinkCursor {
  0%, 100% {
    border-right-color: transparent;
  }
  50% {
    border-right-color: var(--primary);
  }
}

/* 霓虹灯效果 */
@keyframes neonGlow {
  0%, 100% {
    text-shadow: 
      0 0 5px var(--primary),
      0 0 10px var(--primary),
      0 0 15px var(--primary);
  }
  50% {
    text-shadow: 
      0 0 10px var(--primary),
      0 0 20px var(--primary),
      0 0 30px var(--primary),
      0 0 40px var(--primary);
  }
}

@keyframes neonFlicker {
  0%, 100% {
    opacity: 1;
  }
  50% {
    opacity: 0.8;
  }
}

/* 文字波浪效果 */
@keyframes textWave {
  0%, 100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(-10px);
  }
}

/* 文字揭示效果 */
@keyframes textReveal {
  from {
    opacity: 0;
    transform: translateY(20px) scale(0.9);
  }
  to {
    opacity: 1;
    transform: translateY(0) scale(1);
  }
}

/* 文字旋转/滚动效果 */
@keyframes textRotate {
  0% {
    transform: translateY(0%);
  }
  100% {
    transform: translateY(-75%); /* (Number of items - 1) / Number of items */
  }
}

/* 卡片闪光效果 */
@keyframes cardShimmer {
  0% {
    transform: translateX(-100%) skewX(-20deg);
  }
  100% {
    transform: translateX(200%) skewX(-20deg);
  }
}

/* 脉冲球效果 */
@keyframes pulseOrb {
  0% {
    transform: scale(0.9);
    box-shadow: 0 0 0 0 rgba(255, 255, 255, 0.7);
  }

  70% {
    transform: scale(1);
    box-shadow: 0 0 0 10px rgba(255, 255, 255, 0);
  }

  100% {
    transform: scale(0.9);
    box-shadow: 0 0 0 0 rgba(255, 255, 255, 0);
  }
}

/* 时间轴项目入场动画 */
@keyframes timelineItemEnter {
  from {
    opacity: 0;
    transform: scale(0.9) translateY(20px) rotate(-3deg);
  }
  to {
    opacity: 1;
    transform: scale(1) translateY(0) rotate(0deg);
  }
}


/* ================================
   粒子和装饰动画
================================ */

/* 粒子飘落效果 */
@keyframes petalFall {
  0% {
    transform: translateY(-100vh) rotate(0deg);
    opacity: 1;
  }
  100% {
    transform: translateY(100vh) rotate(360deg);
    opacity: 0;
  }
}

@keyframes heartFall {
  0% {
    transform: translateY(-100vh) rotate(0deg) scale(1);
    opacity: 0.8;
  }
  50% {
    opacity: 1;
  }
  100% {
    transform: translateY(100vh) rotate(180deg) scale(0.5);
    opacity: 0;
  }
}

/* 浮动效果 */
@keyframes float {
  0%, 100% {
    transform: translateY(0px);
  }
  50% {
    transform: translateY(-20px);
  }
}

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

/* 心跳效果 */
@keyframes heartbeat {
  0%, 100% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.2);
  }
}

@keyframes heartbeatGentle {
  0%, 100% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.05);
  }
}

/* 闪烁效果 */
@keyframes sparkle {
  0%, 100% {
    opacity: 0.3;
    transform: scale(0.8);
  }
  50% {
    opacity: 1;
    transform: scale(1.2);
  }
}

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

/* 脉冲光晕 */
@keyframes pulseGlow {
  0%, 100% {
    box-shadow: var(--shadow-glow-rose);
    transform: scale(1);
  }
  50% {
    box-shadow: 0 0 30px rgba(232, 113, 113, 0.5);
    transform: scale(1.02);
  }
}

@keyframes pulseGlowGold {
  0%, 100% {
    box-shadow: var(--shadow-glow-gold);
    transform: scale(1);
  }
  50% {
    box-shadow: 0 0 40px rgba(229, 157, 57, 0.4);
    transform: scale(1.02);
  }
}

/* ================================
   加载动画
================================ */

/* 旋转加载 */
@keyframes spin {
  to {
    transform: rotate(360deg);
  }
}

@keyframes spinReverse {
  to {
    transform: rotate(-360deg);
  }
}

/* 波浪加载 */
@keyframes wave {
  0%, 100% {
    transform: scale(1);
  }
  50% {
    transform: scale(1.1);
  }
}

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

/* 进度条动画 */
@keyframes progressFill {
  from {
    width: 0%;
  }
  to {
    width: 100%;
  }
}

/* ================================
   照片和媒体动画
================================ */

/* 照片浮现效果 */
@keyframes photoReveal {
  0% {
    clip-path: circle(0% at 50% 50%);
    opacity: 0;
  }
  100% {
    clip-path: circle(100% at 50% 50%);
    opacity: 1;
  }
}

@keyframes photoRevealFromLeft {
  0% {
    clip-path: polygon(0% 0%, 0% 0%, 0% 100%, 0% 100%);
    opacity: 0;
  }
  100% {
    clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%);
    opacity: 1;
  }
}

/* 图片滤镜动画 */
@keyframes imageEnhance {
  0% {
    filter: brightness(0.8) contrast(0.8) saturate(0.8);
  }
  100% {
    filter: brightness(1) contrast(1) saturate(1.1);
  }
}

/* ================================
   背景动画
================================ */

/* 渐变动画 */
@keyframes gradientShift {
  0% {
    background-position: 0% 50%;
  }
  50% {
    background-position: 100% 50%;
  }
  100% {
    background-position: 0% 50%;
  }
}

/* 彩虹渐变 */
@keyframes rainbow {
  0% {
    background-position: 0% 50%;
  }
  50% {
    background-position: 100% 50%;
  }
  100% {
    background-position: 0% 50%;
  }
}

/* ================================
   滚动动画
================================ */

/* 视差效果 */
@keyframes parallaxMove {
  to {
    transform: translateY(-50px);
  }
}

/* 滚动指示器 */
@keyframes scrollBounce {
  0%, 100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(10px);
  }
}

@keyframes scrollArrow {
  0%, 100% {
    opacity: 0.4;
    transform: translateY(-5px);
  }
  50% {
    opacity: 1;
    transform: translateY(5px);
  }
}

/* ================================
   特殊效果动画
================================ */

/* 爆炸效果 */
@keyframes explosion {
  0% {
    transform: scale(1);
    opacity: 1;
  }
  50% {
    transform: scale(1.5);
    opacity: 0.7;
  }
  100% {
    transform: scale(3);
    opacity: 0;
  }
}

/* 涟漪效果 */
@keyframes ripple {
  0% {
    transform: scale(0);
    opacity: 1;
  }
  100% {
    transform: scale(4);
    opacity: 0;
  }
}

/* 摇摆效果 */
@keyframes shake {
  0%, 100% {
    transform: translateX(0);
  }
  10%, 30%, 50%, 70%, 90% {
    transform: translateX(-5px);
  }
  20%, 40%, 60%, 80% {
    transform: translateX(5px);
  }
}

@keyframes wobble {
  0%, 100% {
    transform: translateX(0%);
  }
  15% {
    transform: translateX(-25px) rotate(-5deg);
  }
  30% {
    transform: translateX(20px) rotate(3deg);
  }
  45% {
    transform: translateX(-15px) rotate(-3deg);
  }
  60% {
    transform: translateX(10px) rotate(2deg);
  }
  75% {
    transform: translateX(-5px) rotate(-1deg);
  }
}

/* ================================
   组合动画类
================================ */

/* 入场动画 */
.animate-fade-in {
  animation: fadeIn var(--duration-leisurely) var(--ease-elegant);
}

.animate-slide-in-up {
  animation: slideInUp var(--duration-leisurely) var(--ease-elegant);
}

.animate-slide-in-down {
  animation: slideInDown var(--duration-leisurely) var(--ease-elegant);
}

.animate-slide-in-left {
  animation: slideInLeft var(--duration-leisurely) var(--ease-elegant);
}

.animate-slide-in-right {
  animation: slideInRight var(--duration-leisurely) var(--ease-elegant);
}

.animate-scale-in {
  animation: scaleIn var(--duration-leisurely) var(--ease-back);
}

.animate-scale-in-bounce {
  animation: scaleInBounce var(--duration-dramatic) var(--ease-bounce);
}

.animate-rotate-in {
  animation: rotateIn var(--duration-dramatic) var(--ease-back);
}

/* 循环动画 */
.animate-float {
  animation: float 6s var(--ease-in-out) infinite;
}

.animate-float-gentle {
  animation: floatGentle 4s var(--ease-in-out) infinite;
}

.animate-heartbeat {
  animation: heartbeat 2s var(--ease-in-out) infinite;
}

.animate-heartbeat-gentle {
  animation: heartbeatGentle 3s var(--ease-in-out) infinite;
}

.animate-sparkle {
  animation: sparkle 2s var(--ease-in-out) infinite;
}

.animate-twinkle {
  animation: twinkle 1.5s var(--ease-in-out) infinite;
}

.animate-pulse-glow {
  animation: pulseGlow 2s var(--ease-in-out) infinite;
}

.animate-pulse-glow-gold {
  animation: pulseGlowGold 2s var(--ease-in-out) infinite;
}

/* 特殊动画 */
.animate-neon-glow {
  animation: neonGlow 2s var(--ease-in-out) infinite alternate;
}

.animate-gradient-shift {
  background-size: 400% 400%;
  animation: gradientShift 4s var(--ease-in-out) infinite;
}

.animate-scroll-bounce {
  animation: scrollBounce 2s var(--ease-in-out) infinite;
}

/* 延迟动画 */
.animate-delay-100 {
  animation-delay: 100ms;
}

.animate-delay-200 {
  animation-delay: 200ms;
}

.animate-delay-300 {
  animation-delay: 300ms;
}

.animate-delay-500 {
  animation-delay: 500ms;
}

.animate-delay-700 {
  animation-delay: 700ms;
}

.animate-delay-1000 {
  animation-delay: 1000ms;
}