@keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes slideInRight { from { opacity: 0; transform: translateX(30px); } to { opacity: 1; transform: translateX(0); } } @keyframes slideOutRight { from { opacity: 1; transform: translateX(0); } to { opacity: 0; transform: translateX(30px); } } @keyframes scaleIn { from { opacity: 0; transform: scale(0.95); } to { opacity: 1; transform: scale(1); } } @keyframes inkSpread { from { transform: scaleX(0); } to { transform: scaleX(1); } } @keyframes shimmer { 0% { background-position: -200% 0; } 100% { background-position: 200% 0; } } /* 笔画描边动画 */ @keyframes strokeDraw { from { stroke-dashoffset: 1; } to { stroke-dashoffset: 0; } } /* 页面转场 */ .page-enter-active { animation: fadeInUp var(--duration-normal) var(--ease-out-smooth) both; } .page-leave-active { animation: fadeIn var(--duration-fast) ease reverse both; }