Creative Design

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmodLorem ipsum dolor sit...

Graphic Thinking

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmodLorem ipsum dolor sit...

Graphic Thinking

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmodLorem ipsum dolor sit...

/* ---------- scroll progress ---------- */ const progress = document.getElementById('progress'); window.addEventListener('scroll', () => { const h = document.documentElement; const pct = h.scrollTop / (h.scrollHeight - h.clientHeight) * 100; progress.style.width = pct + '%'; }); const menuToggle = document.getElementById('menuToggle'); const mobileMenu = document.getElementById('mobileMenu'); menuToggle.addEventListener('click', () => { const open = mobileMenu.classList.toggle('open'); menuToggle.setAttribute('aria-expanded', open); }); mobileMenu.querySelectorAll('a').forEach(a => a.addEventListener('click', () => { mobileMenu.classList.remove('open'); menuToggle.setAttribute('aria-expanded', 'false'); })); const revealEls = document.querySelectorAll('.reveal, .reveal-stagger'); const io = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('in'); io.unobserve(entry.target); } }); }, { threshold: 0.15 }); revealEls.forEach(el => io.observe(el)); /* ---------- hero image placeholder loop ---------- */ const imgSlides = document.querySelectorAll('.img-slide'); const imgDots = document.querySelectorAll('.img-loop-dots span'); let imgIndex = 0; if (imgSlides.length){ setInterval(() => { imgIndex = (imgIndex + 1) % imgSlides.length; imgSlides.forEach((s, i) => s.classList.toggle('active', i === imgIndex)); imgDots.forEach((d, i) => d.classList.toggle('active', i === imgIndex)); }, 3000); }