|
|
|
|
|
|
|
|
|
|
| @keyframes fadeIn {
|
| from {
|
| opacity: 0;
|
| }
|
| to {
|
| opacity: 1;
|
| }
|
| }
|
|
|
|
|
| @keyframes fadeInUp {
|
| from {
|
| opacity: 0;
|
| transform: translateY(20px);
|
| }
|
| to {
|
| opacity: 1;
|
| transform: translateY(0);
|
| }
|
| }
|
|
|
|
|
| @keyframes fadeInDown {
|
| from {
|
| opacity: 0;
|
| transform: translateY(-20px);
|
| }
|
| to {
|
| opacity: 1;
|
| transform: translateY(0);
|
| }
|
| }
|
|
|
|
|
| @keyframes slideInRight {
|
| from {
|
| opacity: 0;
|
| transform: translateX(30px);
|
| }
|
| to {
|
| opacity: 1;
|
| transform: translateX(0);
|
| }
|
| }
|
|
|
|
|
| @keyframes slideInLeft {
|
| from {
|
| opacity: 0;
|
| transform: translateX(-30px);
|
| }
|
| to {
|
| opacity: 1;
|
| transform: translateX(0);
|
| }
|
| }
|
|
|
|
|
| @keyframes scaleIn {
|
| from {
|
| opacity: 0;
|
| transform: scale(0.9);
|
| }
|
| to {
|
| opacity: 1;
|
| transform: scale(1);
|
| }
|
| }
|
|
|
|
|
| @keyframes spin {
|
| from {
|
| transform: rotate(0deg);
|
| }
|
| to {
|
| transform: rotate(360deg);
|
| }
|
| }
|
|
|
|
|
| @keyframes pulse {
|
| 0%, 100% {
|
| opacity: 1;
|
| }
|
| 50% {
|
| opacity: 0.5;
|
| }
|
| }
|
|
|
|
|
| @keyframes bounce {
|
| 0%, 100% {
|
| transform: translateY(0);
|
| }
|
| 50% {
|
| transform: translateY(-10px);
|
| }
|
| }
|
|
|
|
|
| @keyframes shake {
|
| 0%, 100% {
|
| transform: translateX(0);
|
| }
|
| 10%, 30%, 50%, 70%, 90% {
|
| transform: translateX(-5px);
|
| }
|
| 20%, 40%, 60%, 80% {
|
| transform: translateX(5px);
|
| }
|
| }
|
|
|
|
|
| @keyframes shimmer {
|
| 0% {
|
| background-position: -1000px 0;
|
| }
|
| 100% {
|
| background-position: 1000px 0;
|
| }
|
| }
|
|
|
|
|
| @keyframes progress {
|
| from {
|
| width: 0%;
|
| }
|
| to {
|
| width: 100%;
|
| }
|
| }
|
|
|
|
|
|
|
|
|
| .animate-fadeIn {
|
| animation: fadeIn 400ms cubic-bezier(0.4, 0, 0.2, 1);
|
| }
|
|
|
| .animate-fadeInUp {
|
| animation: fadeInUp 400ms cubic-bezier(0.4, 0, 0.2, 1);
|
| }
|
|
|
| .animate-fadeInDown {
|
| animation: fadeInDown 400ms cubic-bezier(0.4, 0, 0.2, 1);
|
| }
|
|
|
|
|
| .animate-slideInRight {
|
| animation: slideInRight 400ms cubic-bezier(0.4, 0, 0.2, 1);
|
| }
|
|
|
| .animate-slideInLeft {
|
| animation: slideInLeft 400ms cubic-bezier(0.4, 0, 0.2, 1);
|
| }
|
|
|
|
|
| .animate-scaleIn {
|
| animation: scaleIn 300ms cubic-bezier(0.4, 0, 0.2, 1);
|
| }
|
|
|
|
|
| .animate-spin {
|
| animation: spin 1s linear infinite;
|
| }
|
|
|
| .animate-spin-slow {
|
| animation: spin 2s linear infinite;
|
| }
|
|
|
|
|
| .animate-pulse {
|
| animation: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
|
| }
|
|
|
|
|
| .animate-bounce {
|
| animation: bounce 1s ease-in-out infinite;
|
| }
|
|
|
|
|
| .animate-shake {
|
| animation: shake 0.5s cubic-bezier(0.4, 0, 0.2, 1);
|
| }
|
|
|
|
|
| .animate-shimmer {
|
| background: linear-gradient(
|
| 90deg,
|
| #f1f5f9 0%,
|
| #e2e8f0 50%,
|
| #f1f5f9 100%
|
| );
|
| background-size: 1000px 100%;
|
| animation: shimmer 2s infinite;
|
| }
|
|
|
| [data-theme="dark"] .animate-shimmer {
|
| background: linear-gradient(
|
| 90deg,
|
| #1e293b 0%,
|
| #334155 50%,
|
| #1e293b 100%
|
| );
|
| }
|
|
|
|
|
|
|
| .transition-none {
|
| transition: none !important;
|
| }
|
|
|
| .transition-all {
|
| transition: all 200ms cubic-bezier(0.4, 0, 0.2, 1) !important;
|
| }
|
|
|
| .transition-fast {
|
| transition: all 150ms cubic-bezier(0.4, 0, 0.2, 1) !important;
|
| }
|
|
|
| .transition-slow {
|
| transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1) !important;
|
| }
|
|
|
|
|
|
|
| .hover-lift {
|
| transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1);
|
| }
|
|
|
| .hover-lift:hover {
|
| transform: translateY(-2px);
|
| }
|
|
|
| .hover-scale {
|
| transition: transform 200ms cubic-bezier(0.4, 0, 0.2, 1);
|
| }
|
|
|
| .hover-scale:hover {
|
| transform: scale(1.05);
|
| }
|
|
|
| .hover-shadow {
|
| transition: box-shadow 200ms cubic-bezier(0.4, 0, 0.2, 1);
|
| }
|
|
|
| .hover-shadow:hover {
|
| box-shadow: 0 8px 16px rgba(0, 0, 0, 0.12);
|
| }
|
|
|
|
|
|
|
| .skeleton {
|
| background: linear-gradient(
|
| 90deg,
|
| #f1f5f9 0%,
|
| #e2e8f0 50%,
|
| #f1f5f9 100%
|
| );
|
| background-size: 200% 100%;
|
| animation: shimmer 1.5s infinite;
|
| border-radius: 8px;
|
| }
|
|
|
| [data-theme="dark"] .skeleton {
|
| background: linear-gradient(
|
| 90deg,
|
| #1e293b 0%,
|
| #334155 50%,
|
| #1e293b 100%
|
| );
|
| }
|
|
|
| .skeleton-text {
|
| height: 16px;
|
| margin-bottom: 8px;
|
| }
|
|
|
| .skeleton-title {
|
| height: 24px;
|
| width: 60%;
|
| margin-bottom: 12px;
|
| }
|
|
|
| .skeleton-avatar {
|
| width: 40px;
|
| height: 40px;
|
| border-radius: 50%;
|
| }
|
|
|
| .skeleton-card {
|
| height: 200px;
|
| border-radius: 12px;
|
| }
|
|
|
|
|
|
|
| .stagger-item {
|
| animation: fadeInUp 400ms cubic-bezier(0.4, 0, 0.2, 1);
|
| animation-fill-mode: both;
|
| }
|
|
|
| .stagger-item:nth-child(1) { animation-delay: 0ms; }
|
| .stagger-item:nth-child(2) { animation-delay: 50ms; }
|
| .stagger-item:nth-child(3) { animation-delay: 100ms; }
|
| .stagger-item:nth-child(4) { animation-delay: 150ms; }
|
| .stagger-item:nth-child(5) { animation-delay: 200ms; }
|
| .stagger-item:nth-child(6) { animation-delay: 250ms; }
|
| .stagger-item:nth-child(7) { animation-delay: 300ms; }
|
| .stagger-item:nth-child(8) { animation-delay: 350ms; }
|
|
|
|
|
|
|
| .page-enter {
|
| opacity: 0;
|
| transform: translateY(20px);
|
| }
|
|
|
| .page-enter-active {
|
| opacity: 1;
|
| transform: translateY(0);
|
| transition: all 400ms cubic-bezier(0.4, 0, 0.2, 1);
|
| }
|
|
|
| .page-exit {
|
| opacity: 1;
|
| transform: translateY(0);
|
| }
|
|
|
| .page-exit-active {
|
| opacity: 0;
|
| transform: translateY(-20px);
|
| transition: all 300ms cubic-bezier(0.4, 0, 0.2, 1);
|
| }
|
|
|
|
|
|
|
| @media (prefers-reduced-motion: reduce) {
|
| *,
|
| *::before,
|
| *::after {
|
| animation-duration: 0.01ms !important;
|
| animation-iteration-count: 1 !important;
|
| transition-duration: 0.01ms !important;
|
| scroll-behavior: auto !important;
|
| }
|
|
|
| .animate-fadeIn,
|
| .animate-fadeInUp,
|
| .animate-fadeInDown,
|
| .animate-slideInRight,
|
| .animate-slideInLeft,
|
| .animate-scaleIn,
|
| .animate-spin,
|
| .animate-pulse,
|
| .animate-bounce,
|
| .animate-shake,
|
| .animate-shimmer,
|
| .skeleton,
|
| .stagger-item {
|
| animation: none !important;
|
| }
|
|
|
| .hover-lift:hover,
|
| .hover-scale:hover {
|
| transform: none !important;
|
| }
|
| }
|
|
|