
@keyframes fadeIn {
  from { opacity: 0; transform: translateY(10px); }
  to { opacity: 1; transform: translateY(0); }
}

.animate-fade-in {
  animation: fadeIn 0.5s ease-out forwards;
}

/* 渐变流光边框动画 */
@keyframes borderFlow {
  0% { background-position: 0% 50%; }
  50% { background-position: 100% 50%; }
  100% { background-position: 0% 50%; }
}

.glow-border {
  position: relative;
}

.glow-border::after {
  content: "";
  position: absolute;
  inset: -1px;
  background: linear-gradient(90deg, #3b82f6, #818cf8, #3b82f6);
  background-size: 200% 200%;
  z-index: -1;
  border-radius: inherit;
  opacity: 0.3;
  animation: borderFlow 3s linear infinite;
}

/* 聊天气泡平滑过渡 */
.chat-bubble {
  transition: all 0.2s cubic-bezier(0.4, 0, 0.2, 1);
}

.chat-bubble:hover {
  background: rgba(255, 255, 255, 0.05);
}
