cool stuff
This commit is contained in:
38
index.html
38
index.html
@@ -17,42 +17,42 @@
|
||||
</header>
|
||||
|
||||
<main>
|
||||
<section class="hero">
|
||||
<section class="hero reveal">
|
||||
<div class="hero-text">
|
||||
<h2>He's Just <span class="glow">Him</span></h2>
|
||||
<p>Some yinglets are good. Some are great. And then there's Zeppo.</p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="facts">
|
||||
<section class="facts reveal">
|
||||
<h2>Why Zeppo is the Best</h2>
|
||||
<div class="card-grid">
|
||||
<div class="card">
|
||||
<div class="card reveal" style="transition-delay: 0.1s">
|
||||
<span class="emoji">⚡</span>
|
||||
<h3>Unmatched Swagger</h3>
|
||||
<p>Zeppo doesn't walk into a room — he arrives. Whiskers perfectly groomed, tail held high and shelltooth sharp. He knows he's him.</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card reveal" style="transition-delay: 0.2s">
|
||||
<span class="emoji">🧠</span>
|
||||
<h3>Galaxy Brain</h3>
|
||||
<p>Wits sharper than a creystone blade. Zeppo could scheme his way out of any jam and still have time to steal your lunch.</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card reveal" style="transition-delay: 0.3s">
|
||||
<span class="emoji">❤️</span>
|
||||
<h3>Big Heart (Literally)</h3>
|
||||
<p>Despite being a tiny rodent-person, his heart is the size of a melon. Loyal, fierce, and ride-or-die for his crew.</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card reveal" style="transition-delay: 0.4s">
|
||||
<span class="emoji">🦷</span>
|
||||
<h3>Magnificent Tooth</h3>
|
||||
<p>Name a better dental situation. You can't. That shelltooth has 10,000 PSI of pure charisma.</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card reveal" style="transition-delay: 0.5s">
|
||||
<span class="emoji">🌪️</span>
|
||||
<h3>Chaos Magnet</h3>
|
||||
<p>Where Zeppo goes, adventure follows. Not always good adventure, but never boring. The universe literally cannot ignore him.</p>
|
||||
</div>
|
||||
<div class="card">
|
||||
<div class="card reveal" style="transition-delay: 0.6s">
|
||||
<span class="emoji">👑</span>
|
||||
<h3>King Energy</h3>
|
||||
<p>No throne needed. Zeppo rules through sheer force of personality. Say his name three times and he appears to judge you.</p>
|
||||
@@ -60,7 +60,7 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="testimonials">
|
||||
<section class="testimonials reveal">
|
||||
<h2>What Others Are Saying</h2>
|
||||
<div class="testimonial-viewport">
|
||||
<div id="testimonial-track">
|
||||
@@ -80,29 +80,29 @@
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="stats">
|
||||
<section class="stats reveal">
|
||||
<h2>Zeppo by the Numbers</h2>
|
||||
<div class="stat-grid">
|
||||
<div class="stat">
|
||||
<span class="number">100%</span>
|
||||
<div class="stat reveal" style="transition-delay: 0.1s">
|
||||
<span class="number" data-target="100" data-suffix="%" data-duration="1000">100%</span>
|
||||
<span class="label">Pure Yinglet</span>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<span class="number">∞</span>
|
||||
<div class="stat reveal" style="transition-delay: 0.2s">
|
||||
<span class="number" data-target="100000" data-duration="2000" data-final="∞">∞</span>
|
||||
<span class="label">Swagger Units</span>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<span class="number">11/10</span>
|
||||
<div class="stat reveal" style="transition-delay: 0.3s">
|
||||
<span class="number" data-target="11" data-suffix="/10" data-duration="500">11/10</span>
|
||||
<span class="label">Whisker Rating</span>
|
||||
</div>
|
||||
<div class="stat">
|
||||
<span class="number">0</span>
|
||||
<div class="stat reveal" style="transition-delay: 0.4s">
|
||||
<span class="number" data-target="0">0</span>
|
||||
<span class="label">Enemies (They All Folded)</span>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section class="conclusion">
|
||||
<section class="conclusion reveal">
|
||||
<h2>The Verdict</h2>
|
||||
<p>Zeppo is the GOAT. Well, GY — Greatest Yinglet. In a world full of yinglets, he's the one you'd want on your side, in your corner, and absolutely never playing cards against.</p>
|
||||
<p class="final">Zeppo. Believe the hype.</p>
|
||||
|
||||
72
script.js
72
script.js
@@ -1004,7 +1004,11 @@
|
||||
var viewport = track.parentElement;
|
||||
var paused = false;
|
||||
var scrollPos = 0;
|
||||
var speed = 0.35;
|
||||
var speed = 0.55;
|
||||
|
||||
while (track.scrollHeight < viewport.clientHeight * 1.5) {
|
||||
track.appendChild(createElement(generateQuote()));
|
||||
}
|
||||
|
||||
function step() {
|
||||
try {
|
||||
@@ -1018,6 +1022,7 @@
|
||||
var distance = second.offsetTop - first.offsetTop;
|
||||
if (distance > 0 && scrollPos >= distance) {
|
||||
scrollPos -= distance;
|
||||
track.style.transform = 'translateY(' + (-scrollPos) + 'px)';
|
||||
track.removeChild(first);
|
||||
track.appendChild(createElement(generateQuote()));
|
||||
}
|
||||
@@ -1027,8 +1032,67 @@
|
||||
requestAnimationFrame(step);
|
||||
}
|
||||
|
||||
viewport.addEventListener('mouseenter', function () { paused = true; });
|
||||
viewport.addEventListener('mouseleave', function () { paused = false; });
|
||||
|
||||
step();
|
||||
|
||||
// Scroll reveal
|
||||
var reveals = document.querySelectorAll('.reveal');
|
||||
var revealObserver = new IntersectionObserver(function(entries) {
|
||||
entries.forEach(function(entry) {
|
||||
if (entry.isIntersecting) {
|
||||
entry.target.classList.add('revealed');
|
||||
}
|
||||
});
|
||||
}, { threshold: 0.1 });
|
||||
reveals.forEach(function(el) { revealObserver.observe(el); });
|
||||
|
||||
// Stat counter
|
||||
var statsSection = document.querySelector('.stats');
|
||||
if (statsSection) {
|
||||
var counted = false;
|
||||
var statObserver = new IntersectionObserver(function(entries) {
|
||||
entries.forEach(function(entry) {
|
||||
if (entry.isIntersecting && !counted) {
|
||||
counted = true;
|
||||
var numbers = document.querySelectorAll('.stat .number[data-target]');
|
||||
numbers.forEach(function(el) {
|
||||
var target = parseInt(el.getAttribute('data-target'));
|
||||
var suffix = el.getAttribute('data-suffix') || '';
|
||||
var current = 0;
|
||||
if (target <= 0) return;
|
||||
var duration = parseInt(el.getAttribute('data-duration')) || 1000;
|
||||
var final = el.getAttribute('data-final');
|
||||
var ticks = Math.min(target, Math.floor(duration / 10));
|
||||
var step = Math.max(1, Math.floor(target / ticks));
|
||||
var intervalMs = Math.max(10, Math.floor(duration / ticks));
|
||||
var timer = setInterval(function() {
|
||||
current += step;
|
||||
if (current >= target) {
|
||||
current = target;
|
||||
clearInterval(timer);
|
||||
if (final) {
|
||||
el.textContent = final;
|
||||
return;
|
||||
}
|
||||
}
|
||||
el.textContent = current + suffix;
|
||||
}, intervalMs);
|
||||
});
|
||||
}
|
||||
});
|
||||
}, { threshold: 0.5 });
|
||||
statObserver.observe(statsSection);
|
||||
}
|
||||
|
||||
// Sparkle particles
|
||||
for (var i = 0; i < 25; i++) {
|
||||
var dot = document.createElement('div');
|
||||
dot.className = 'particle';
|
||||
dot.style.left = Math.random() * 100 + '%';
|
||||
dot.style.top = Math.random() * 100 + '%';
|
||||
dot.style.animationDelay = Math.random() * 5 + 's';
|
||||
dot.style.animationDuration = (3 + Math.random() * 4) + 's';
|
||||
dot.style.width = (2 + Math.random() * 3) + 'px';
|
||||
dot.style.height = dot.style.width;
|
||||
document.body.appendChild(dot);
|
||||
}
|
||||
})();
|
||||
|
||||
89
style.css
89
style.css
@@ -7,6 +7,43 @@
|
||||
--accent-dim: #b87d1a;
|
||||
--text: #e8e8ee;
|
||||
--muted: #8888a0;
|
||||
--glow-rgb: 245, 166, 35;
|
||||
}
|
||||
|
||||
@keyframes fadeInUp {
|
||||
from { opacity: 0; transform: translateY(30px); }
|
||||
to { opacity: 1; transform: translateY(0); }
|
||||
}
|
||||
|
||||
@keyframes pulse {
|
||||
0%, 100% { opacity: 1; filter: drop-shadow(0 0 20px rgba(var(--glow-rgb), 0.3)); }
|
||||
50% { opacity: 0.85; filter: drop-shadow(0 0 40px rgba(var(--glow-rgb), 0.5)); }
|
||||
}
|
||||
|
||||
@keyframes float {
|
||||
0%, 100% { transform: translateY(0); }
|
||||
50% { transform: translateY(-8px); }
|
||||
}
|
||||
|
||||
@keyframes twinkle {
|
||||
0%, 100% { opacity: 0; transform: scale(0.5); }
|
||||
50% { opacity: 0.6; transform: scale(1); }
|
||||
}
|
||||
|
||||
@keyframes breathe {
|
||||
0%, 100% { box-shadow: 0 0 20px rgba(var(--glow-rgb), 0.1); }
|
||||
50% { box-shadow: 0 0 40px rgba(var(--glow-rgb), 0.25); }
|
||||
}
|
||||
|
||||
.reveal {
|
||||
opacity: 0;
|
||||
transform: translateY(30px);
|
||||
transition: opacity 0.7s ease, transform 0.7s ease;
|
||||
}
|
||||
|
||||
.reveal.revealed {
|
||||
opacity: 1;
|
||||
transform: translateY(0);
|
||||
}
|
||||
|
||||
* {
|
||||
@@ -23,6 +60,18 @@ body {
|
||||
overflow-x: hidden;
|
||||
}
|
||||
|
||||
/* Sparkle particles */
|
||||
.particle {
|
||||
position: fixed;
|
||||
width: 3px;
|
||||
height: 3px;
|
||||
background: var(--accent);
|
||||
border-radius: 50%;
|
||||
pointer-events: none;
|
||||
z-index: -1;
|
||||
animation: twinkle 4s ease-in-out infinite;
|
||||
}
|
||||
|
||||
header {
|
||||
text-align: center;
|
||||
padding: 4rem 1rem 2rem;
|
||||
@@ -64,7 +113,8 @@ h1 {
|
||||
-webkit-background-clip: text;
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
text-shadow: 0 0 40px rgba(245, 166, 35, 0.3);
|
||||
animation: pulse 3s ease-in-out infinite;
|
||||
filter: drop-shadow(0 0 30px rgba(var(--glow-rgb), 0.3));
|
||||
}
|
||||
|
||||
.hero p {
|
||||
@@ -99,12 +149,13 @@ section h2 {
|
||||
border: 1px solid #2a2a3a;
|
||||
border-radius: 1rem;
|
||||
padding: 2rem;
|
||||
transition: transform 0.2s, border-color 0.2s;
|
||||
transition: transform 0.3s, border-color 0.3s, box-shadow 0.3s;
|
||||
}
|
||||
|
||||
.card:hover {
|
||||
transform: translateY(-4px);
|
||||
border-color: var(--accent-dim);
|
||||
transform: translateY(-6px);
|
||||
border-color: var(--accent);
|
||||
box-shadow: 0 8px 32px rgba(var(--glow-rgb), 0.12);
|
||||
}
|
||||
|
||||
.card .emoji {
|
||||
@@ -142,6 +193,13 @@ section h2 {
|
||||
border-radius: 0.75rem;
|
||||
padding: 1.5rem;
|
||||
margin-bottom: 1rem;
|
||||
transition: transform 0.3s, border-color 0.3s, box-shadow 0.3s;
|
||||
}
|
||||
|
||||
.testimonial:hover {
|
||||
transform: translateX(4px);
|
||||
border-color: var(--accent-dim);
|
||||
box-shadow: 0 4px 20px rgba(var(--glow-rgb), 0.08);
|
||||
}
|
||||
|
||||
.testimonial p {
|
||||
@@ -169,6 +227,13 @@ section h2 {
|
||||
border: 1px solid #2a2a3a;
|
||||
border-radius: 1rem;
|
||||
padding: 2rem 1rem;
|
||||
transition: transform 0.3s, border-color 0.3s, box-shadow 0.3s;
|
||||
}
|
||||
|
||||
.stat:hover {
|
||||
transform: scale(1.05);
|
||||
border-color: var(--accent-dim);
|
||||
box-shadow: 0 4px 24px rgba(var(--glow-rgb), 0.1);
|
||||
}
|
||||
|
||||
.stat .number {
|
||||
@@ -207,6 +272,8 @@ section h2 {
|
||||
-webkit-text-fill-color: transparent;
|
||||
background-clip: text;
|
||||
margin-top: 1.5rem !important;
|
||||
animation: float 3s ease-in-out infinite;
|
||||
filter: drop-shadow(0 0 20px rgba(var(--glow-rgb), 0.2));
|
||||
}
|
||||
|
||||
footer {
|
||||
@@ -220,10 +287,22 @@ footer {
|
||||
|
||||
.testimonial-viewport {
|
||||
overflow: hidden;
|
||||
max-height: 320px;
|
||||
max-height: 480px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.testimonial-viewport::before {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
right: 0;
|
||||
height: 48px;
|
||||
background: linear-gradient(#151520, transparent);
|
||||
pointer-events: none;
|
||||
z-index: 1;
|
||||
}
|
||||
|
||||
.testimonial-viewport::after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
|
||||
Reference in New Issue
Block a user