Spaces:
Sleeping
Sleeping
| /* | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| Advanced Animations - iOS 26 Liquid Design | |
| βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ | |
| */ | |
| /* ============================================ | |
| LIQUID MORPHING ANIMATIONS | |
| ============================================ */ | |
| @keyframes liquidMorph { | |
| 0%, 100% { | |
| border-radius: 60% 40% 30% 70% / 60% 30% 70% 40%; | |
| } | |
| 50% { | |
| border-radius: 30% 60% 70% 40% / 50% 60% 30% 60%; | |
| } | |
| } | |
| .liquid-shape { | |
| animation: liquidMorph 8s ease-in-out infinite; | |
| } | |
| /* ============================================ | |
| FLOATING ANIMATIONS | |
| ============================================ */ | |
| @keyframes floatSlow { | |
| 0%, 100% { | |
| transform: translateY(0) rotate(0deg); | |
| } | |
| 33% { | |
| transform: translateY(-20px) rotate(2deg); | |
| } | |
| 66% { | |
| transform: translateY(-10px) rotate(-2deg); | |
| } | |
| } | |
| @keyframes floatFast { | |
| 0%, 100% { | |
| transform: translateY(0); | |
| } | |
| 50% { | |
| transform: translateY(-15px); | |
| } | |
| } | |
| .float-slow { | |
| animation: floatSlow 6s ease-in-out infinite; | |
| } | |
| .float-fast { | |
| animation: floatFast 3s ease-in-out infinite; | |
| } | |
| /* ============================================ | |
| GLOWING PULSE ANIMATIONS | |
| ============================================ */ | |
| @keyframes glowPulse { | |
| 0%, 100% { | |
| box-shadow: 0 0 20px rgba(150, 150, 150, 0.4), | |
| 0 0 40px rgba(150, 150, 150, 0.2), | |
| 0 0 60px rgba(150, 150, 150, 0.1); | |
| } | |
| 50% { | |
| box-shadow: 0 0 30px rgba(150, 150, 150, 0.6), | |
| 0 0 60px rgba(150, 150, 150, 0.4), | |
| 0 0 90px rgba(150, 150, 150, 0.2); | |
| } | |
| } | |
| .glow-pulse { | |
| animation: glowPulse 2s ease-in-out infinite; | |
| } | |
| /* ============================================ | |
| GRADIENT ANIMATIONS | |
| ============================================ */ | |
| @keyframes gradientShift { | |
| 0% { | |
| background-position: 0% 50%; | |
| } | |
| 50% { | |
| background-position: 100% 50%; | |
| } | |
| 100% { | |
| background-position: 0% 50%; | |
| } | |
| } | |
| .gradient-animated { | |
| background-size: 200% 200%; | |
| animation: gradientShift 10s ease infinite; | |
| } | |
| /* ============================================ | |
| RIPPLE EFFECT | |
| ============================================ */ | |
| @keyframes ripple { | |
| 0% { | |
| transform: scale(0); | |
| opacity: 1; | |
| } | |
| 100% { | |
| transform: scale(4); | |
| opacity: 0; | |
| } | |
| } | |
| .ripple-effect { | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .ripple-effect::after { | |
| content: ''; | |
| position: absolute; | |
| top: 50%; | |
| left: 50%; | |
| width: 20px; | |
| height: 20px; | |
| background: rgba(255, 255, 255, 0.5); | |
| border-radius: 50%; | |
| transform: translate(-50%, -50%) scale(0); | |
| opacity: 0; | |
| } | |
| .ripple-effect:active::after { | |
| animation: ripple 0.6s ease-out; | |
| } | |
| /* ============================================ | |
| BOUNCE ANIMATIONS | |
| ============================================ */ | |
| @keyframes bounceIn { | |
| 0% { | |
| opacity: 0; | |
| transform: scale(0.3); | |
| } | |
| 50% { | |
| opacity: 1; | |
| transform: scale(1.05); | |
| } | |
| 70% { | |
| transform: scale(0.9); | |
| } | |
| 100% { | |
| opacity: 1; | |
| transform: scale(1); | |
| } | |
| } | |
| .bounce-in { | |
| animation: bounceIn 0.6s cubic-bezier(0.68, -0.55, 0.265, 1.55); | |
| } | |
| /* ============================================ | |
| SLIDE ANIMATIONS | |
| ============================================ */ | |
| @keyframes slideInLeft { | |
| from { | |
| opacity: 0; | |
| transform: translateX(-100px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateX(0); | |
| } | |
| } | |
| @keyframes slideInRight { | |
| from { | |
| opacity: 0; | |
| transform: translateX(100px); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: translateX(0); | |
| } | |
| } | |
| .slide-in-left { | |
| animation: slideInLeft 0.6s ease; | |
| } | |
| .slide-in-right { | |
| animation: slideInRight 0.6s ease; | |
| } | |
| /* ============================================ | |
| SCALE ANIMATIONS | |
| ============================================ */ | |
| @keyframes scaleUp { | |
| from { | |
| opacity: 0; | |
| transform: scale(0.8); | |
| } | |
| to { | |
| opacity: 1; | |
| transform: scale(1); | |
| } | |
| } | |
| .scale-up { | |
| animation: scaleUp 0.4s ease; | |
| } | |
| /* ============================================ | |
| SHAKE ANIMATION (for errors) | |
| ============================================ */ | |
| @keyframes shake { | |
| 0%, 100% { | |
| transform: translateX(0); | |
| } | |
| 10%, 30%, 50%, 70%, 90% { | |
| transform: translateX(-10px); | |
| } | |
| 20%, 40%, 60%, 80% { | |
| transform: translateX(10px); | |
| } | |
| } | |
| .shake { | |
| animation: shake 0.5s; | |
| } | |
| /* ============================================ | |
| TYPING INDICATOR | |
| ============================================ */ | |
| @keyframes typing { | |
| 0%, 60%, 100% { | |
| transform: translateY(0); | |
| opacity: 0.5; | |
| } | |
| 30% { | |
| transform: translateY(-10px); | |
| opacity: 1; | |
| } | |
| } | |
| .typing-indicator span { | |
| display: inline-block; | |
| width: 8px; | |
| height: 8px; | |
| margin: 0 2px; | |
| background: currentColor; | |
| border-radius: 50%; | |
| opacity: 0.5; | |
| animation: typing 1.4s infinite; | |
| } | |
| .typing-indicator span:nth-child(2) { | |
| animation-delay: 0.2s; | |
| } | |
| .typing-indicator span:nth-child(3) { | |
| animation-delay: 0.4s; | |
| } | |
| /* ============================================ | |
| PROGRESS BAR ANIMATION | |
| ============================================ */ | |
| @keyframes progressFill { | |
| from { | |
| width: 0%; | |
| } | |
| to { | |
| width: var(--progress-width); | |
| } | |
| } | |
| .progress-animated { | |
| animation: progressFill 1.5s ease-out forwards; | |
| } | |
| /* ============================================ | |
| PARTICLE FLOAT | |
| ============================================ */ | |
| @keyframes particleFloat { | |
| 0% { | |
| transform: translateY(0) translateX(0); | |
| opacity: 0; | |
| } | |
| 10% { | |
| opacity: 1; | |
| } | |
| 90% { | |
| opacity: 1; | |
| } | |
| 100% { | |
| transform: translateY(-100vh) translateX(50px); | |
| opacity: 0; | |
| } | |
| } | |
| .particle { | |
| position: absolute; | |
| width: 4px; | |
| height: 4px; | |
| background: rgba(255, 255, 255, 0.5); | |
| border-radius: 50%; | |
| animation: particleFloat 15s linear infinite; | |
| } | |
| /* ============================================ | |
| BLUR IN ANIMATION | |
| ============================================ */ | |
| @keyframes blurIn { | |
| from { | |
| filter: blur(20px); | |
| opacity: 0; | |
| } | |
| to { | |
| filter: blur(0); | |
| opacity: 1; | |
| } | |
| } | |
| .blur-in { | |
| animation: blurIn 0.8s ease; | |
| } | |
| /* ============================================ | |
| ROTATION ANIMATIONS | |
| ============================================ */ | |
| @keyframes rotate360 { | |
| from { | |
| transform: rotate(0deg); | |
| } | |
| to { | |
| transform: rotate(360deg); | |
| } | |
| } | |
| .rotate-360 { | |
| animation: rotate360 2s linear infinite; | |
| } | |
| /* ============================================ | |
| WAVE ANIMATION | |
| ============================================ */ | |
| @keyframes wave { | |
| 0% { | |
| transform: translateX(-100%); | |
| } | |
| 100% { | |
| transform: translateX(100%); | |
| } | |
| } | |
| .wave-effect { | |
| position: relative; | |
| overflow: hidden; | |
| } | |
| .wave-effect::before { | |
| content: ''; | |
| position: absolute; | |
| top: 0; | |
| left: 0; | |
| width: 100%; | |
| height: 100%; | |
| background: linear-gradient(90deg, | |
| transparent, | |
| rgba(255, 255, 255, 0.2), | |
| transparent | |
| ); | |
| animation: wave 2s infinite; | |
| } | |
| /* ============================================ | |
| HOVER LIFT EFFECT | |
| ============================================ */ | |
| .hover-lift { | |
| transition: transform 0.3s ease, box-shadow 0.3s ease; | |
| } | |
| .hover-lift:hover { | |
| transform: translateY(-8px); | |
| box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3); | |
| } | |
| /* ============================================ | |
| BREATH ANIMATION | |
| ============================================ */ | |
| @keyframes breathe { | |
| 0%, 100% { | |
| transform: scale(1); | |
| opacity: 0.8; | |
| } | |
| 50% { | |
| transform: scale(1.1); | |
| opacity: 1; | |
| } | |
| } | |
| .breathe { | |
| animation: breathe 3s ease-in-out infinite; | |
| } | |
| /* ============================================ | |
| STAGGER ANIMATIONS | |
| ============================================ */ | |
| .stagger-item { | |
| opacity: 0; | |
| animation: fadeInUp 0.6s ease forwards; | |
| } | |
| .stagger-item:nth-child(1) { animation-delay: 0.1s; } | |
| .stagger-item:nth-child(2) { animation-delay: 0.2s; } | |
| .stagger-item:nth-child(3) { animation-delay: 0.3s; } | |
| .stagger-item:nth-child(4) { animation-delay: 0.4s; } | |
| .stagger-item:nth-child(5) { animation-delay: 0.5s; } | |
| .stagger-item:nth-child(6) { animation-delay: 0.6s; } | |
| /* ============================================ | |
| SMOOTH SCROLL REVEAL | |
| ============================================ */ | |
| .scroll-reveal { | |
| opacity: 0; | |
| transform: translateY(50px); | |
| transition: opacity 0.6s ease, transform 0.6s ease; | |
| } | |
| .scroll-reveal.revealed { | |
| opacity: 1; | |
| transform: translateY(0); | |
| } | |