Spaces:
Running
Running
| /* βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| ResearchIT β Animations | |
| All @keyframes and animation utility classes. | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| /* ββ Skeleton shimmer βββββββββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| @keyframes shimmer { | |
| 0% { background-position: -200% 0; } | |
| 100% { background-position: 200% 0; } | |
| } | |
| /* ββ Fade in with upward slide ββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| @keyframes fadeInUp { | |
| from { | |
| opacity: 0; | |
| transform: translateY(10px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| } | |
| /* ββ Fade in only βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| @keyframes fadeIn { | |
| from { opacity: 0; } | |
| to { opacity: 1; } | |
| } | |
| /* ββ Toast slide in/out βββββββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| @keyframes toastIn { | |
| from { | |
| opacity: 0; | |
| transform: translateX(40px) scale(0.95); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateX(0) scale(1); | |
| } | |
| } | |
| @keyframes toastOut { | |
| from { | |
| opacity: 1; | |
| transform: translateX(0) scale(1); | |
| } | |
| to { | |
| opacity: 0; | |
| transform: translateX(40px) scale(0.95); | |
| } | |
| } | |
| /* ββ Save button pulse ββββββββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| @keyframes savePulse { | |
| 0% { transform: scale(1); } | |
| 40% { transform: scale(1.12); } | |
| 100% { transform: scale(1); } | |
| } | |
| /* ββ Checkmark pop (onboarding tile) ββββββββββββββββββββββββββββββββββββββββ */ | |
| @keyframes checkPop { | |
| 0% { transform: scale(0); } | |
| 60% { transform: scale(1.2); } | |
| 100% { transform: scale(1); } | |
| } | |
| /* ββ Loading dot pulse ββββββββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| @keyframes dotPulse { | |
| 0%, 80%, 100% { | |
| opacity: 0.3; | |
| transform: scale(0.8); | |
| } | |
| 40% { | |
| opacity: 1; | |
| transform: scale(1.1); | |
| } | |
| } | |
| /* ββ Card stagger entrance ββββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| @keyframes cardIn { | |
| from { | |
| opacity: 0; | |
| transform: translateY(16px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |
| } | |
| /* ββ Subtle glow pulse (hero, active elements) ββββββββββββββββββββββββββββββ */ | |
| @keyframes glowPulse { | |
| 0%, 100% { opacity: 0.4; } | |
| 50% { opacity: 0.7; } | |
| } | |
| /* ββ Spin (loading indicators) ββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| @keyframes spin { | |
| from { transform: rotate(0deg); } | |
| to { transform: rotate(360deg); } | |
| } | |
| /* ββ Gradient shift (brand/hero background) βββββββββββββββββββββββββββββββββ */ | |
| @keyframes gradientShift { | |
| 0% { background-position: 0% 50%; } | |
| 50% { background-position: 100% 50%; } | |
| 100% { background-position: 0% 50%; } | |
| } | |
| /* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| /* Utility animation classes */ | |
| /* ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ */ | |
| .animate-fade-in { | |
| animation: fadeIn 0.3s ease-out; | |
| } | |
| .animate-fade-in-up { | |
| animation: fadeInUp 0.4s ease-out; | |
| } | |
| .animate-card-in { | |
| animation: cardIn 0.35s ease-out both; | |
| } | |
| /* Staggered card entrance β assign via inline style or nth-child */ | |
| .animate-card-in:nth-child(1) { animation-delay: 0s; } | |
| .animate-card-in:nth-child(2) { animation-delay: 0.05s; } | |
| .animate-card-in:nth-child(3) { animation-delay: 0.1s; } | |
| .animate-card-in:nth-child(4) { animation-delay: 0.15s; } | |
| .animate-card-in:nth-child(5) { animation-delay: 0.2s; } | |
| .animate-card-in:nth-child(6) { animation-delay: 0.25s; } | |
| .animate-card-in:nth-child(7) { animation-delay: 0.3s; } | |
| .animate-card-in:nth-child(8) { animation-delay: 0.35s; } | |
| .animate-card-in:nth-child(9) { animation-delay: 0.4s; } | |
| .animate-card-in:nth-child(10) { animation-delay: 0.45s; } | |
| .animate-glow { | |
| animation: glowPulse 3s ease-in-out infinite; | |
| } | |
| .animate-spin { | |
| animation: spin 1s linear infinite; | |
| } | |
| .animate-gradient { | |
| background-size: 200% 200%; | |
| animation: gradientShift 4s ease infinite; | |
| } | |