Hero: Slider Codepen

<script> (function() // ---------- DOM elements ---------- const track = document.getElementById('slidesTrack'); const slides = Array.from(document.querySelectorAll('.slide')); const prevBtn = document.getElementById('prevBtn'); const nextBtn = document.getElementById('nextBtn'); const dotsContainer = document.getElementById('dotsContainer'); const progressFill = document.getElementById('progressFill');

.hero-content p font-size: 1.05rem; line-height: 1.5; color: #f0f0f0; margin-bottom: 2rem; font-weight: 400; text-shadow: 0 1px 2px rgba(0,0,0,0.2); max-width: 90%;

.btn-group display: flex; flex-wrap: wrap; gap: 1rem; hero slider codepen

/* overlay for better text contrast */ .slide::before content: ""; position: absolute; inset: 0; background: linear-gradient(105deg, rgba(0,0,0,0.75) 0%, rgba(0,0,0,0.4) 70%, rgba(0,0,0,0.2) 100%); z-index: 1;

// reset progress bar animation (visual + internal timer) function resetProgressBar() if (progressInterval) clearInterval(progressInterval); progressPercent = 0; if (progressFill) progressFill.style.width = '0%'; // start fresh progress interval that increments every 60ms for smooth fill (6 seconds = 6000ms) const stepTime = 60; // ms const totalSteps = autoDelay / stepTime; // 6000/60 = 100 steps let stepCount = 0; progressInterval = setInterval(() => if (isTransitioning) return; // pause increments if transitioning (but not critical) stepCount++; progressPercent = (stepCount / totalSteps) * 100; if (progressFill) progressFill.style.width = `$Math.min(progressPercent, 100)%`; if (stepCount >= totalSteps) // progress completed, auto slide will trigger via main timer // but we don't clear here because timer handles next slide. // We'll stop interval when resetProgressBar called again. , stepTime); const prevBtn = document.getElementById('prevBtn')

/* dots / pagination */ .slider-dots position: absolute; bottom: 1.8rem; left: 0; right: 0; display: flex; justify-content: center; gap: 0.8rem; z-index: 20;

/* hero slider wrapper */ .hero-slider position: relative; width: 100%; overflow: hidden; border-radius: 1.8rem; const nextBtn = document.getElementById('nextBtn')

@media (max-width: 520px) .hero-content h1 font-size: 1.8rem; .btn-group flex-direction: column; align-items: flex-start;