/* ANIMATION UTILS & KEYFRAMES */ .animate-fade-in { animation: fadeIn 0.5s var(--ease-out); } .animate-slide-up { animation: slideUp 0.5s var(--ease-out); } .animate-pulse { animation: pulse 2s infinite; } .animate-spin-slow { animation: spin 10s linear infinite; } .animate-float { animation: float 6s ease-in-out infinite; } .hover-lift { transition: transform 0.2s var(--ease-out); } .hover-lift:hover { transform: translateY(-2px); } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } @keyframes spin { from { transform: rotate(0deg); } to { transform: rotate(360deg); } } @keyframes float { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-10px); } } @keyframes slideUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } } @keyframes pulse { 0% { opacity: 1; } 50% { opacity: 0.5; } 100% { opacity: 1; } } @keyframes graffiti-shake { 0%, 100% { transform: rotate(-2deg); } 25% { transform: rotate(2deg); } 50% { transform: rotate(-2deg); } 75% { transform: rotate(2deg); } } /* Glitch Animations */ @keyframes glitch-anim-1 { 0% { clip: rect(20px, 9999px, 15px, 0); } 20% { clip: rect(60px, 9999px, 80px, 0); } 40% { clip: rect(10px, 9999px, 55px, 0); } 60% { clip: rect(90px, 9999px, 10px, 0); } 80% { clip: rect(30px, 9999px, 70px, 0); } 100% { clip: rect(50px, 9999px, 40px, 0); } } @keyframes glitch-anim-2 { 0% { clip: rect(60px, 9999px, 10px, 0); } 20% { clip: rect(10px, 9999px, 50px, 0); } 40% { clip: rect(90px, 9999px, 30px, 0); } 60% { clip: rect(20px, 9999px, 70px, 0); } 80% { clip: rect(40px, 9999px, 90px, 0); } 100% { clip: rect(15px, 9999px, 60px, 0); } } /* Boot Screen Animations */ @keyframes bootLoad { 0% { width: 0%; opacity: 1; } 30% { width: 45%; } 60% { width: 60%; } 80% { width: 85%; } 100% { width: 100%; opacity: 1; } } @keyframes bootFadeOut { to { opacity: 0; pointer-events: none; visibility: hidden; } } .boot-progress { animation: bootLoad 2.5s cubic-bezier(0.22, 1, 0.36, 1) forwards; } .fade-out-screen { animation: bootFadeOut 0.5s ease-out forwards; } /* Waveform Animation */ @keyframes wave { 0%, 100% { transform: scaleY(0.5); opacity: 0.5; } 50% { transform: scaleY(1.2); opacity: 1; } }