/* 渐入动画 */ @keyframes fade-in { from { opacity: 0; } to { opacity: 1; } } /* 渐入上移动画 */ @keyframes fade-in-up { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } /* 渐入下移动画 */ @keyframes fade-in-down { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } } /* 缩放动画 */ @keyframes scale-in { from { opacity: 0; transform: scale(0.9); } to { opacity: 1; transform: scale(1); } } /* 应用动画类 */ .animate-fade-in { animation: fade-in 0.6s ease-out forwards; } .animate-fade-in-up { animation: fade-in-up 0.6s ease-out forwards; opacity: 0; } .animate-fade-in-down { animation: fade-in-down 0.6s ease-out forwards; } .animate-scale-in { animation: scale-in 0.6s ease-out forwards; } /* 发光脉冲效果 */ @keyframes glow-pulse { 0%, 100% { box-shadow: 0 0 20px rgba(99, 102, 241, 0.3); } 50% { box-shadow: 0 0 40px rgba(99, 102, 241, 0.6); } } .animate-glow-pulse { animation: glow-pulse 2s ease-in-out infinite; } /* 渐变背景动画 */ @keyframes gradient-shift { 0% { background-position: 0% 50%; } 50% { background-position: 100% 50%; } 100% { background-position: 0% 50%; } } .animate-gradient { background-size: 200% 200%; animation: gradient-shift 8s ease infinite; } /* 悬浮动画 */ @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } .animate-float { animation: float 3s ease-in-out infinite; } /* 旋转发光效果 */ @keyframes rotate-glow { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } .animate-rotate-glow { animation: rotate-glow 10s linear infinite; } /* 移动端触摸反馈动画 */ @keyframes tap-feedback { 0% { transform: scale(1); } 50% { transform: scale(0.95); } 100% { transform: scale(1); } } .animate-tap { animation: tap-feedback 0.2s ease-out; } /* 涟漪效果 */ @keyframes ripple { 0% { transform: scale(0); opacity: 1; } 100% { transform: scale(4); opacity: 0; } } .animate-ripple { animation: ripple 0.6s ease-out; } /* 弹性缩放动画 */ @keyframes bounce-scale { 0% { transform: scale(1); } 50% { transform: scale(1.05); } 100% { transform: scale(1); } } .animate-bounce-scale { animation: bounce-scale 0.3s ease-out; } /* 滑入动画 - 从左 */ @keyframes slide-in-left { from { opacity: 0; transform: translateX(-30px); } to { opacity: 1; transform: translateX(0); } } .animate-slide-in-left { animation: slide-in-left 0.4s ease-out forwards; opacity: 0; } /* 滑入动画 - 从右 */ @keyframes slide-in-right { from { opacity: 0; transform: translateX(30px); } to { opacity: 1; transform: translateX(0); } } .animate-slide-in-right { animation: slide-in-right 0.4s ease-out forwards; opacity: 0; } /* 脉冲缩放动画 */ @keyframes pulse-scale { 0%, 100% { transform: scale(1); } 50% { transform: scale(1.02); } } .animate-pulse-scale { animation: pulse-scale 2s ease-in-out infinite; } /* 隐藏滚动条 */ .scrollbar-hide { -ms-overflow-style: none; scrollbar-width: none; } .scrollbar-hide::-webkit-scrollbar { display: none; } /* 平滑滚动 */ .smooth-scroll { scroll-behavior: smooth; -webkit-overflow-scrolling: touch; } /* 涟漪扩散动画 */ @keyframes ripple-expand { 0% { transform: translate(-50%, -50%) scale(0); opacity: 1; } 100% { transform: translate(-50%, -50%) scale(40); opacity: 0; } } /* 微妙的悬浮动画 */ @keyframes float-subtle { 0%, 100% { transform: translateY(0) translateZ(0); } 50% { transform: translateY(-5px) translateZ(10px); } } .animate-float-subtle { animation: float-subtle 3s ease-in-out infinite; } /* 脉冲光环动画 */ @keyframes pulse-ring { 0% { transform: scale(0.95); opacity: 1; } 50% { transform: scale(1.05); opacity: 0.8; } 100% { transform: scale(0.95); opacity: 1; } } .animate-pulse-ring { animation: pulse-ring 2s ease-in-out infinite; } /* 发光脉冲动画 */ @keyframes pulse-glow { 0%, 100% { opacity: 0.5; } 50% { opacity: 1; } } .animate-pulse-glow { animation: pulse-glow 1.5s ease-in-out infinite; } /* 微妙的脉冲动画 */ @keyframes pulse-subtle { 0%, 100% { opacity: 1; } 50% { opacity: 0.8; } } .animate-pulse-subtle { animation: pulse-subtle 2s ease-in-out infinite; } /* 微妙的滑入动画 */ @keyframes slide-in-subtle { from { opacity: 0; transform: translateX(10px); } to { opacity: 1; transform: translateX(0); } } .animate-slide-in-subtle { animation: slide-in-subtle 0.5s ease-out; } /* 3D透视 */ .perspective-1000 { perspective: 1000px; } .transform-style-3d { transform-style: preserve-3d; } .transform-gpu { transform: translateZ(0); backface-visibility: hidden; will-change: transform; } /* 3D旋转效果 */ .hover\:rotate-y-2:hover { transform: translateY(-0.5rem) rotateY(2deg) translateZ(20px); } /* 按钮闪光效果 */ @keyframes button-shine { 0% { left: -100%; } 100% { left: 100%; } } .animate-button-shine { animation: button-shine 2s ease-in-out infinite; } /* 震动效果 */ @keyframes shake { 0%, 100% { transform: translateX(0); } 25% { transform: translateX(-5px); } 75% { transform: translateX(5px); } } .animate-shake { animation: shake 0.5s ease-in-out; } /* 弹跳效果 */ @keyframes bounce-in { 0% { opacity: 0; transform: scale(0.3) translateY(50px); } 50% { transform: scale(1.05) translateY(-10px); } 70% { transform: scale(0.9) translateY(0); } 100% { opacity: 1; transform: scale(1) translateY(0); } } .animate-bounce-in { animation: bounce-in 0.6s cubic-bezier(0.68, -0.55, 0.265, 1.55); } /* 呼吸灯效果 */ @keyframes breathe { 0%, 100% { opacity: 0.6; transform: scale(1); } 50% { opacity: 1; transform: scale(1.1); } } .animate-breathe { animation: breathe 2s ease-in-out infinite; }