@keyframes animation-pulse {
  0% {
    box-shadow: 0 0 0 0 rgba(var(--pulse-color), 0.5);
  }
  70% {
    box-shadow: 0 0 0 var(--pulse-size) rgba(var(--pulse-color), 0);
  }
  100% {
    box-shadow: 0 0 0 0 rgba(var(--pulse-color), 0);
  }
}

/* 电磁波扩散效果 */
.animation-pulse {
  --pulse-color: 59, 130, 246;
  --pulse-size: 8px;
  animation: animation-pulse 1.5s infinite;
}

/* Modal动画 */
@keyframes animation-move-down-in {
  0% {
    transform: translate3d(0, 100%, 0);
    transform-origin: 0 0;
    opacity: 0;
  }
  100% {
    transform: translate3d(0, 0, 0);
    transform-origin: 0 0;
    opacity: 1;
  }
}
@keyframes animation-move-down-out {
  0% {
    transform: translate3d(0, 0, 0);
    transform-origin: 0 0;
    opacity: 1;
  }
  100% {
    transform: translate3d(0, 100%, 0);
    transform-origin: 0 0;
    opacity: 0;
  }
}
.animation-move-down-enter,
.animation-move-down-appear {
  animation-name: animation-move-down-in;
  animation-fill-mode: both;
  animation-duration: 0.25s;
}
.animation-move-down-leave {
  animation-name: animation-move-down-out;
  animation-fill-mode: both;
  animation-duration: 0.25s;
}

/* 旋转动画 */
@keyframes animation-rotate {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

.animation-rotate {
  transform-origin: center;
  animation: animation-rotate 0.75s linear infinite;
}

/* 定位高亮动画 */
@keyframes animation-locate-highlight {
  0% {
    background-color: transparent;
  }
  10% {
    background-color: var(--color-primary-mute);
  }
  70% {
    background-color: var(--color-primary-mute);
  }
  100% {
    background-color: transparent;
  }
}

.animation-locate-highlight {
  animation: animation-locate-highlight 2.5s ease-in-out;
}

/* 流光动画 */
@keyframes animation-shimmer {
  0% {
    background-position: 200% 0;
  }
  100% {
    background-position: -200% 0;
  }
}

.animation-shimmer {
  --color-shimmer-mid: var(--color-text-1);
  --color-shimmer-end: color-mix(in srgb, var(--color-text-1) 25%, transparent);
  background: linear-gradient(to left, var(--color-shimmer-end), var(--color-shimmer-mid), var(--color-shimmer-end));
  background-size: 200% 100%;
  background-clip: text;
  -webkit-background-clip: text;
  color: transparent;
  animation: animation-shimmer 3s linear infinite;
  will-change: background-position;
}

/* Reveal 动画 */
@keyframes animation-reveal {
  from {
    clip-path: inset(0 100% 0 0);
  }
  to {
    clip-path: inset(0 0 0 0);
  }
}

.animation-reveal {
  display: block;
  white-space: nowrap;
  animation: animation-reveal 0.5s linear both;
}
