<div class="animation-stage"> <!-- Color Explosion Shockwaves --> <div class="explosion-wave ring-1"></div> <div class="explosion-wave ring-2"></div> <div class="explosion-particles"></div> <!-- Staggered Letter Text --> <h1 class="vibrating-flow-text"> <span style="--i:0">G</span> <span style="--i:1">r</span> <span style="--i:2">a</span> <span style="--i:3">c</span> <span style="--i:4">i</span> <span style="--i:5">e</span> <span class="space"></span> <span style="--i:6">E</span> <span style="--i:7">p</span> <span style="--i:8">l</span> <span style="--i:9">i</span> <span style="--i:10">n</span> <span style="--i:11">g</span> </h1> </div>
/* Container / Viewport Stage */ .animation-stage { position: relative; width: 100%; height: 450px; background-color: #080711; display: flex; justify-content: center; align-items: center; overflow: hidden; font-family: 'Poppins', 'Montserrat', sans-serif; } /* Individual Letter Styling & Sequential Reveal */ .vibrating-flow-text { display: flex; position: relative; z-index: 10; margin: 0; font-size: 3.5rem; font-weight: 900; text-transform: uppercase; letter-spacing: 4px; /* Whole text moves upward and vibrates */ animation: riseToTop 6s ease-in-out infinite; } .vibrating-flow-text span { display: inline-block; opacity: 0; background: linear-gradient(135deg, #00f2fe, #4facfe, #00dfd8); -webkit-background-clip: text; -webkit-text-fill-color: transparent; /* Individual letter stagger reveal + vibration */ animation: letterReveal 6s ease-in-out infinite, vibrateLetter 0.12s linear infinite; animation-delay: calc(var(--i) * 0.12s); } .vibrating-flow-text span.space { width: 1rem; } /* 1. Sequential Letter Appearance */ @keyframes letterReveal { 0% { opacity: 0; transform: translateY(30px) scale(0.6); } 15% { opacity: 1; transform: translateY(0) scale(1); } 65% { opacity: 1; transform: scale(1); filter: drop-shadow(0 0 10px rgba(0, 242, 254, 0.8)); } /* Burst/Explosion Flash at Top */ 70% { opacity: 1; transform: scale(1.4); filter: drop-shadow(0 0 25px #ff007f); background: linear-gradient(135deg, #ff007f, #7928ca, #ff007f); -webkit-background-clip: text; } 85%, 100% { opacity: 0; transform: scale(2) translateY(-20px); } } /* 2. Rising Motion to the Top */ @keyframes riseToTop { 0% { transform: translateY(120px); } 60% { transform: translateY(-130px); } 70% { transform: translateY(-140px) scale(1.1); } 85%, 100% { transform: translateY(-140px) scale(1.3); } } /* 3. Micro Vibration */ @keyframes vibrateLetter { 0%, 100% { transform: translate(0, 0); } 25% { transform: translate(-1px, 1px); } 50% { transform: translate(1px, -1px); } 75% { transform: translate(-1px, -1px); } } /* 4. Color Explosion Shockwaves at the Top */ .explosion-wave { position: absolute; top: 20%; left: 50%; width: 20px; height: 20px; border-radius: 50%; transform: translate(-50%, -50%) scale(0); opacity: 0; z-index: 2; pointer-events: none; } .ring-1 { border: 4px solid #ff007f; box-shadow: 0 0 30px #ff007f, inset 0 0 30px #ff007f; animation: explodeRing 6s ease-out infinite; animation-delay: 3.6s; } .ring-2 { border: 4px solid #00f2fe; box-shadow: 0 0 40px #00f2fe, inset 0 0 40px #00f2fe; animation: explodeRing 6s ease-out infinite; animation-delay: 3.75s; } @keyframes explodeRing { 0% { transform: translate(-50%, -50%) scale(0); opacity: 1; } 50% { opacity: 0.8; } 100% { transform: translate(-50%, -50%) scale(25); opacity: 0; } }
console.log('Editor loaded!'); let clickCount = 0; function handleClick() { clickCount++; const output = document.getElementById('output'); output.innerHTML = ` <h3>Clicked ${clickCount} time(s)!</h3> <p>Time: ${new Date().toLocaleTimeString()}</p> `; console.log(`Button clicked ${clickCount} times`); }
Login to leave a comment
No comments yet. Be the first!
No comments yet. Be the first!