Home
About Us
Services
GuruAcademy
Cybytes
Portfolio
Blog
Contact
Get Started
Send us a message
Full name
Email
Subject
Message
Send Message
Contact Details
Nairobi, Kenya
info@gurubyte.com
+254 700 123 456
Office Hours
Mon – Fri: 9:00 AM – 6:00 PM
Follow Us
Request a Proposal
// ---------- REVEAL ON SCROLL (IntersectionObserver based) ---------- const revealEls = document.querySelectorAll('.reveal'); if (revealEls.length) { // set initial styles revealEls.forEach(el => { el.style.opacity = '0'; el.style.transform = 'translateY(50px)'; el.style.transition = 'all 0.8s ease'; }); const revealObs = new IntersectionObserver((entries, obs) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.style.opacity = '1'; entry.target.style.transform = 'translateY(0)'; entry.target.classList.add('active'); // keep for CSS selectors if used obs.unobserve(entry.target); } }); }, { threshold: 0.1 }); revealEls.forEach(el => revealObs.observe(el)); } // ---------- OTHER ANIMATIONS (paused until intersect) ---------- const animatedElements = document.querySelectorAll('.animate-up, .animate-left, .animate-right'); if (animatedElements.length) { const animObs = new IntersectionObserver(entries => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.style.animationPlayState = 'running'; animObs.unobserve(entry.target); } }); }, { threshold: 0.2 }); animatedElements.forEach(el => { el.style.animationPlayState = 'paused'; if (el.classList.contains('animate-up')) { const index = Array.from(el.parentNode.children).indexOf(el); el.style.animationDelay = `${index * 0.2}s`; } animObs.observe(el); }); } // ---------- STICKY NAV ---------- const nav = document.querySelector('.main-nav'); if (nav) { window.addEventListener('scroll', () => { nav.classList.toggle('sticky', window.scrollY > 50); }); } // ---------- DROPDOWNS (guarded) ---------- const servicesToggle = document.getElementById('services-toggle'); const servicesDropdown = document.getElementById('services-dropdown'); const pagesToggle = document.getElementById('pages-toggle'); const pagesDropdown = document.getElementById('pages-dropdown'); if (servicesToggle && servicesDropdown) { servicesToggle.addEventListener('click', (e) => { e.preventDefault(); const show = servicesDropdown.style.display !== 'block'; servicesDropdown.style.display = show ? 'block' : 'none'; if (pagesDropdown) pagesDropdown.style.display = 'none'; }); } if (pagesToggle && pagesDropdown) { pagesToggle.addEventListener('click', (e) => { e.preventDefault(); const show = pagesDropdown.style.display !== 'block'; pagesDropdown.style.display = show ? 'block' : 'none'; if (servicesDropdown) servicesDropdown.style.display = 'none'; }); } // close dropdowns when clicking outside document.addEventListener('click', (e) => { if (servicesDropdown && !e.target.closest('#services-dropdown') && !e.target.closest('#services-toggle')) { servicesDropdown.style.display = 'none'; } if (pagesDropdown && !e.target.closest('#pages-dropdown') && !e.target.closest('#pages-toggle')) { pagesDropdown.style.display = 'none'; } }); // ---------- MOBILE MENU TOGGLE (guarded + accessible) ---------- const menuToggle = document.getElementById('mobile-menu'); const navLinks = document.querySelector('.nav-links'); if (menuToggle && navLinks) { menuToggle.setAttribute('role', 'button'); menuToggle.setAttribute('tabindex', '0'); menuToggle.setAttribute('aria-expanded', 'false'); const toggleMenu = (e) => { e && e.stopPropagation && e.stopPropagation(); const isActive = navLinks.classList.toggle('active'); menuToggle.setAttribute('aria-expanded', String(!!isActive)); }; menuToggle.addEventListener('click', toggleMenu); menuToggle.addEventListener('keydown', (e) => { if (e.key === 'Enter' || e.key === ' ') { e.preventDefault(); toggleMenu(); } }); // close menu when clicking outside document.addEventListener('click', (e) => { if (!e.target.closest('.main-nav') && navLinks.classList.contains('active')) { navLinks.classList.remove('active'); menuToggle.setAttribute('aria-expanded', 'false'); } }); } });