diff --git a/Education/corporate-trainings.html b/Education/corporate-trainings.html index 5f9ca30..0d73b1b 100644 --- a/Education/corporate-trainings.html +++ b/Education/corporate-trainings.html @@ -1,4 +1,4 @@ - +
@@ -32,7 +32,7 @@




We conduct comprehensive analysis of your current workflows, team capabilities, and business objectives to identify specific training requirements and learning gaps.
Our experts develop bespoke curriculum, real-world case studies, and practical examples directly relevant to your industry and operational context.
We build comprehensive training materials including interactive presentations, hands-on exercises, and practical simulations that mirror your actual work environment.
Expert instructors deliver the training with continuous feedback collection and real-time adjustments to ensure maximum learning effectiveness and engagement.
We provide ongoing support including implementation guidance, troubleshooting assistance, and additional resources to ensure sustained learning impact.



























































© 2025 Gyannetra. All rights reserved. | Privacy Policy | Terms and Conditions
© 2024 Gyannetra. All rights reserved. | Privacy Policy | Terms and Conditions
-© 2025 Gyannetra. All rights reserved. | Privacy Policy | Terms and Conditions
© 2025 Gyannetra. All rights reserved. | Privacy Policy | Terms and Conditions
© 2025 Gyannetra. All rights reserved. | Privacy Policy | Terms and Conditions
- + - - + + + diff --git a/css/gn-hamburger-menu-fix.css b/css/gn-hamburger-menu-fix.css deleted file mode 100644 index e69de29..0000000 diff --git a/css/gn-hero-section-fix.css b/css/gn-hero-section-fix.css deleted file mode 100644 index e69de29..0000000 diff --git a/css/gn-mobile-responsive.css b/css/gn-mobile-responsive.css deleted file mode 100644 index e69de29..0000000 diff --git a/index.html b/index.html index 4c2d02d..1a7a243 100644 --- a/index.html +++ b/index.html @@ -646,133 +646,12 @@© 2025 Gyannetra. All rights reserved. | Privacy Policy | Terms and Conditions
Submitting...
- `; - form.appendChild(loadingOverlay); - - // Simulate form submission (replace with actual AJAX submission) - setTimeout(() => { - loadingOverlay.innerHTML = ` -Thank you! We'll be in touch soon.
- `; - loadingOverlay.classList.add('submission-success'); - - // Reset form after success - setTimeout(() => { - form.reset(); - form.removeChild(loadingOverlay); - - // Reset all floating labels - const labels = form.querySelectorAll('.floating-label'); - labels.forEach(label => { - label.classList.remove('label-active'); - }); - }, 3000); - }, 1500); -} - -// Special handling for contact form -function initContactForm(form) { - // Add animation for form sections - const formSections = form.querySelectorAll('.form-section'); - if (formSections.length > 1) { - // Create navigation buttons - const navigation = document.createElement('div'); - navigation.className = 'form-navigation'; - - let currentSection = 0; - - // Initially hide all sections except the first - formSections.forEach((section, index) => { - if (index > 0) { - section.classList.add('hidden-section'); - } - }); - - // Next button functionality - const nextBtn = document.createElement('button'); - nextBtn.type = 'button'; - nextBtn.className = 'btn btn-secondary next-section'; - nextBtn.textContent = 'Next'; - nextBtn.addEventListener('click', () => { - // Validate current section before proceeding - const currentInputs = formSections[currentSection].querySelectorAll('input, textarea, select'); - let sectionIsValid = true; - - currentInputs.forEach(input => { - if (!validateInput(input)) { - sectionIsValid = false; - } - }); - - if (sectionIsValid && currentSection < formSections.length - 1) { - formSections[currentSection].classList.add('hidden-section'); - formSections[currentSection].classList.add('section-left'); - currentSection++; - formSections[currentSection].classList.remove('hidden-section'); - - updateNavigationState(); - } - }); - - // Previous button functionality - const prevBtn = document.createElement('button'); - prevBtn.type = 'button'; - prevBtn.className = 'btn btn-outline prev-section'; - prevBtn.textContent = 'Previous'; - prevBtn.style.display = 'none'; - prevBtn.addEventListener('click', () => { - if (currentSection > 0) { - formSections[currentSection].classList.add('hidden-section'); - currentSection--; - formSections[currentSection].classList.remove('hidden-section'); - formSections[currentSection].classList.remove('section-left'); - - updateNavigationState(); - } - }); - - // Add navigation to form - navigation.appendChild(prevBtn); - navigation.appendChild(nextBtn); - form.appendChild(navigation); - - // Update navigation buttons state - function updateNavigationState() { - prevBtn.style.display = currentSection > 0 ? 'inline-block' : 'none'; - nextBtn.textContent = currentSection === formSections.length - 1 ? 'Submit' : 'Next'; - - // Replace next button with submit on last section - if (currentSection === formSections.length - 1) { - nextBtn.classList.add('submit-form'); - nextBtn.addEventListener('click', () => { - form.dispatchEvent(new Event('submit')); - }); - } else { - nextBtn.classList.remove('submit-form'); - } - } - } -} - -// Newsletter subscription form handling -function initNewsletterForm(form) { - form.addEventListener('submit', function(e) { - e.preventDefault(); - - const emailInput = form.querySelector('input[type="email"]'); - if (!emailInput) return; - - // Validate email - if (!validateInput(emailInput)) return; - - // Create animated check mark for subscription - const subscribeBtn = form.querySelector('button[type="submit"]'); - if (subscribeBtn) { - subscribeBtn.innerHTML = ''; - subscribeBtn.disabled = true; - - setTimeout(() => { - subscribeBtn.innerHTML = '✓'; - subscribeBtn.classList.add('subscribed'); - - // Display thank you message - const thankYou = document.createElement('div'); - thankYou.className = 'subscription-thanks'; - thankYou.textContent = 'Thank you for subscribing!'; - form.appendChild(thankYou); - - // Reset form after delay - setTimeout(() => { - form.reset(); - subscribeBtn.innerHTML = 'Subscribe'; - subscribeBtn.disabled = false; - subscribeBtn.classList.remove('subscribed'); - - if (form.contains(thankYou)) { - form.removeChild(thankYou); - } - }, 3000); - }, 1500); - } - }); -} diff --git a/js/form-subscribe.js b/js/form-subscribe.js deleted file mode 100644 index 078426a..0000000 --- a/js/form-subscribe.js +++ /dev/null @@ -1 +0,0 @@ -// \ No newline at end of file diff --git a/js/gn-hamburger-menu-fix.js b/js/gn-hamburger-menu-fix.js deleted file mode 100644 index e69de29..0000000 diff --git a/js/gn-mobile-navigation.js b/js/gn-mobile-navigation.js deleted file mode 100644 index e69de29..0000000 diff --git a/js/main.js b/js/main.js index c16c179..ebab61c 100644 --- a/js/main.js +++ b/js/main.js @@ -8,6 +8,7 @@ document.addEventListener('DOMContentLoaded', function() { initParallaxEffects(); initSectionTransitions(); initCursorEffects(); + initScrollEffects(); // Remove page loader when everything is ready setTimeout(() => { @@ -16,6 +17,39 @@ document.addEventListener('DOMContentLoaded', function() { }, 300); }); +// Initialize scroll effects for navbar +function initScrollEffects() { + const header = document.querySelector('.site-header'); + + if (!header) return; + + function handleScroll() { + const currentScrollY = window.scrollY; + + if (currentScrollY > 30) { + header.classList.add('scrolled'); + } else { + header.classList.remove('scrolled'); + } + } + + // Throttle scroll events for better performance + let ticking = false; + function onScroll() { + if (!ticking) { + requestAnimationFrame(function() { + handleScroll(); + ticking = false; + }); + ticking = true; + } + } + + window.addEventListener('scroll', onScroll, { passive: true }); + // Initial check + handleScroll(); +} + // Animate elements when they enter viewport function initScrollAnimations() { // Exclude hero content from scroll animations to prevent layout shifts diff --git a/js/menu-dropdown.js b/js/menu-dropdown.js index 7f87757..9aba84f 100644 --- a/js/menu-dropdown.js +++ b/js/menu-dropdown.js @@ -1,10 +1,9 @@ -// Fallback: Enhance dropdowns with fade/slide effect if not handled elsewhere -// (dropdown.js already handles logic, so this is for extra UI polish) +/** + * Menu and Dropdown functionality for Gyannetra website + */ // Global function for onclick handlers - ESSENTIAL FOR RESPONSIVENESS function toggleMobileMenu(event) { - console.log('🍔 toggleMobileMenu called directly!'); - if (event) { event.preventDefault(); event.stopPropagation(); @@ -14,21 +13,16 @@ function toggleMobileMenu(event) { const navLinks = document.querySelector('.nav-links'); if (hamburgerMenu && navLinks) { - console.log('🍔 Toggling menu state...'); - hamburgerMenu.classList.toggle('active'); navLinks.classList.toggle('active'); navLinks.classList.toggle('show'); const isOpen = navLinks.classList.contains('active'); - console.log('🍔 Menu is now:', isOpen ? 'OPEN' : 'CLOSED'); // Prevent body scrolling when menu is open document.body.style.overflow = isOpen ? 'hidden' : ''; - return false; // Prevent default action - } else { - console.error('❌ Hamburger menu or nav links not found!'); + return false; } } @@ -36,42 +30,17 @@ function toggleMobileMenu(event) { window.toggleMobileMenu = toggleMobileMenu; document.addEventListener('DOMContentLoaded', function() { - console.log('🚀 DOM loaded, initializing hamburger menu...'); - console.log('📱 Screen width:', window.innerWidth); - console.log('📱 Is mobile:', window.innerWidth <= 768); - - // Hamburger menu functionality with enhanced error handling const hamburgerMenu = document.querySelector('.hamburger-menu'); const navLinks = document.querySelector('.nav-links'); - console.log('🍔 Hamburger menu found:', !!hamburgerMenu); - console.log('🔗 Nav links found:', !!navLinks); - - if (hamburgerMenu) { - console.log('🍔 Hamburger menu element:', hamburgerMenu); - console.log('🍔 Hamburger menu styles:', window.getComputedStyle(hamburgerMenu).display); - } - - if (navLinks) { - console.log('🔗 Nav links element:', navLinks); - console.log('🔗 Nav links styles:', window.getComputedStyle(navLinks).display); - } - - if (hamburgerMenu && navLinks) {hamburgerMenu.addEventListener('click', function(e) { - e.stopPropagation(); // Prevent event bubbling - hamburgerMenu.classList.toggle('active'); - navLinks.classList.toggle('active'); - navLinks.classList.toggle('show'); // Support both class names - - // Prevent body scrolling when menu is open - if (navLinks.classList.contains('active') || navLinks.classList.contains('show')) { - document.body.style.overflow = 'hidden'; - } else { - document.body.style.overflow = ''; - } - - console.log('Hamburger menu clicked - active state:', hamburgerMenu.classList.contains('active')); // Debug - }); // Close menu when clicking on nav links (but not dropdowns) + if (hamburgerMenu && navLinks) { + // Enhanced click handler + hamburgerMenu.addEventListener('click', function(e) { + e.stopPropagation(); + toggleMobileMenu(); + }); + + // Close menu when clicking on nav links (but not dropdowns) navLinks.addEventListener('click', function(e) { if (e.target.classList.contains('nav-link') && !e.target.closest('.dropdown')) { hamburgerMenu.classList.remove('active'); @@ -102,171 +71,58 @@ document.addEventListener('DOMContentLoaded', function() { }); } - // Original dropdown enhancement code - document.querySelectorAll('.dropdown-menu').forEach(menu => { - menu.addEventListener('transitionend', function() { - if (!menu.classList.contains('show')) { - menu.style.display = ''; - } - }); - menu.addEventListener('show', function() { - menu.style.display = 'block'; - }); - }); + // Dropdown menu enhancements + const dropdowns = document.querySelectorAll('.dropdown'); - // ADDITIONAL: Enhanced mobile dropdown functionality for Services and Industries - function initializeMobileDropdowns() { - const dropdowns = document.querySelectorAll('.nav-links .dropdown'); - - dropdowns.forEach(dropdown => { - const trigger = dropdown.querySelector('.nav-link'); - const menu = dropdown.querySelector('.dropdown-menu'); - - if (trigger && menu) { - // Add click handler for mobile dropdown toggle - trigger.addEventListener('click', function(e) { - if (window.innerWidth <= 768) { - e.preventDefault(); - e.stopPropagation(); - - // Close other dropdowns first - dropdowns.forEach(otherDropdown => { - if (otherDropdown !== dropdown) { - otherDropdown.classList.remove('active'); - const otherMenu = otherDropdown.querySelector('.dropdown-menu'); - if (otherMenu) { - otherMenu.classList.remove('show'); - } - } - }); - - // Toggle current dropdown - dropdown.classList.toggle('active'); - menu.classList.toggle('show'); - - console.log('Mobile dropdown toggled:', dropdown.classList.contains('active')); - } - }); - - // Add visual feedback on touch - trigger.addEventListener('touchstart', function() { - if (window.innerWidth <= 768) { - this.style.transform = 'scale(0.98)'; - } - }); - - trigger.addEventListener('touchend', function() { - if (window.innerWidth <= 768) { - this.style.transform = ''; - } - }); - } - }); - } - // Initialize mobile dropdowns - initializeMobileDropdowns(); - - // FIXED: Consolidated hamburger menu logic - no duplicate event listeners - if (hamburgerMenu && navLinks) { - // Remove any existing click handlers to prevent conflicts - hamburgerMenu.onclick = null; + dropdowns.forEach(dropdown => { + const dropdownMenu = dropdown.querySelector('.dropdown-menu'); - // Single, comprehensive click handler - hamburgerMenu.addEventListener('click', function(e) { - e.preventDefault(); - e.stopPropagation(); + if (dropdownMenu) { + // Show dropdown on hover (desktop) + dropdown.addEventListener('mouseenter', function() { + if (window.innerWidth > 768) { + dropdownMenu.style.opacity = '1'; + dropdownMenu.style.visibility = 'visible'; + dropdownMenu.style.transform = 'translateY(0)'; + } + }); - // Toggle hamburger and navigation states - hamburgerMenu.classList.toggle('active'); - navLinks.classList.toggle('active'); - navLinks.classList.toggle('show'); + // Hide dropdown on mouse leave (desktop) + dropdown.addEventListener('mouseleave', function() { + if (window.innerWidth > 768) { + dropdownMenu.style.opacity = '0'; + dropdownMenu.style.visibility = 'hidden'; + dropdownMenu.style.transform = 'translateY(-10px)'; + } + }); - const isMenuOpen = navLinks.classList.contains('active') || navLinks.classList.contains('show'); - - // Handle body scroll - document.body.style.overflow = isMenuOpen ? 'hidden' : ''; - - // Close all dropdowns when hamburger menu closes - if (!isMenuOpen) { - const dropdowns = document.querySelectorAll('.nav-links .dropdown'); - dropdowns.forEach(dropdown => { - dropdown.classList.remove('active'); - const menu = dropdown.querySelector('.dropdown-menu'); - if (menu) { - menu.classList.remove('show'); - } - }); - } - console.log('Hamburger menu clicked - active state:', isMenuOpen); - }); - } else { - console.warn('Hamburger menu or nav links not found! Retrying in 500ms...'); - // Backup initialization after a short delay - setTimeout(function() { - const retryHamburger = document.querySelector('.hamburger-menu'); - const retryNavLinks = document.querySelector('.nav-links'); - - if (retryHamburger && retryNavLinks) { - console.log('Retry successful - initializing hamburger menu...'); - retryHamburger.addEventListener('click', function(e) { + // Toggle dropdown on click (mobile) + dropdown.addEventListener('click', function(e) { + if (window.innerWidth <= 768) { e.preventDefault(); - e.stopPropagation(); + const isVisible = dropdownMenu.style.maxHeight && dropdownMenu.style.maxHeight !== '0px'; - retryHamburger.classList.toggle('active'); - retryNavLinks.classList.toggle('active'); - retryNavLinks.classList.toggle('show'); + // Close all other dropdowns + dropdowns.forEach(otherDropdown => { + if (otherDropdown !== dropdown) { + const otherMenu = otherDropdown.querySelector('.dropdown-menu'); + if (otherMenu) { + otherMenu.style.maxHeight = '0px'; + otherMenu.style.opacity = '0'; + } + } + }); - const isMenuOpen = retryNavLinks.classList.contains('active') || retryNavLinks.classList.contains('show'); - document.body.style.overflow = isMenuOpen ? 'hidden' : ''; - - console.log('Retry hamburger clicked - active state:', isMenuOpen); - }); - } else { - console.error('Hamburger menu initialization failed even after retry!'); - } - }, 500); - } - - // ADDITIONAL: Direct fallback click handler for hamburger menu - // This ensures the hamburger works even if other scripts interfere - document.addEventListener('click', function(e) { - if (e.target.closest('.hamburger-menu')) { - e.preventDefault(); - e.stopPropagation(); - - const hamburger = e.target.closest('.hamburger-menu'); - const nav = document.querySelector('.nav-links'); - - if (hamburger && nav) { - hamburger.classList.toggle('active'); - nav.classList.toggle('active'); - nav.classList.toggle('show'); - - const isOpen = nav.classList.contains('active') || nav.classList.contains('show'); - document.body.style.overflow = isOpen ? 'hidden' : ''; - - console.log('Fallback hamburger handler triggered - menu open:', isOpen); - } + // Toggle current dropdown + if (isVisible) { + dropdownMenu.style.maxHeight = '0px'; + dropdownMenu.style.opacity = '0'; + } else { + dropdownMenu.style.maxHeight = dropdownMenu.scrollHeight + 'px'; + dropdownMenu.style.opacity = '1'; + } + } + }); } }); - - // Ensure hamburger lines are visible - document.querySelectorAll('.hamburger-line').forEach(line => { - line.style.display = 'block'; - line.style.opacity = '1'; - }); - - // Add window resize handler to close dropdowns when switching to desktop - window.addEventListener('resize', function() { - if (window.innerWidth > 768) { - const dropdowns = document.querySelectorAll('.nav-links .dropdown'); - dropdowns.forEach(dropdown => { - dropdown.classList.remove('active'); - const menu = dropdown.querySelector('.dropdown-menu'); - if (menu) { - menu.classList.remove('show'); - } - }); - } - }); }); \ No newline at end of file diff --git a/js/mobile-enhancements.js b/js/mobile-enhancements.js deleted file mode 100644 index e69de29..0000000 diff --git a/js/mobile-fix.js b/js/mobile-fix.js deleted file mode 100644 index 084c199..0000000 --- a/js/mobile-fix.js +++ /dev/null @@ -1,33 +0,0 @@ -/** - * Mobile navigation fix - ensures hamburger menu works properly on mobile devices - */ -document.addEventListener('DOMContentLoaded', function() { - // Get hamburger menu element - const hamburgerMenu = document.querySelector('.hamburger-menu'); - - if (hamburgerMenu) { - // Add additional click handler with logging - hamburgerMenu.addEventListener('touchstart', function(e) { - console.log('Hamburger touchstart triggered'); - // Prevent default touch behavior if needed - e.preventDefault(); - }, { passive: false }); - - // Log that the script has loaded - console.log('Mobile navigation fix loaded'); - - // Add visible indicator for debugging - if (window.innerWidth <= 768) { - hamburgerMenu.setAttribute('data-mobile-enhanced', 'true'); - } - - // Handle window resize - window.addEventListener('resize', function() { - if (window.innerWidth <= 768) { - hamburgerMenu.style.display = 'flex'; - } else { - hamburgerMenu.style.display = 'none'; - } - }); - } -}); diff --git a/js/page-specific.js b/js/page-specific.js deleted file mode 100644 index bbd4416..0000000 --- a/js/page-specific.js +++ /dev/null @@ -1,289 +0,0 @@ -/** - * Page-specific animations and effects for Gyannetra Website - * Handles unique interactions for different sections and pages - */ - -document.addEventListener('DOMContentLoaded', function() { - // Detect current page - const currentPath = window.location.pathname; - const pageName = currentPath.split('/').pop() || 'index.html'; - - // Initialize common elements - initCommonElements(); - - // Initialize page-specific effects - switch (pageName) { - case 'index.html': - initHomePage(); - break; - case 'about.html': - initAboutPage(); - break; - case 'contact.html': - initContactPage(); - break; - default: - // Check if it's a service page - if (currentPath.includes('/Services/')) { - initServicePage(); - } - // Check if it's an industry page - else if (currentPath.includes('/Industries/')) { - initIndustryPage(); - } - // Check if it's an education page - else if (currentPath.includes('/Education/')) { - initEducationPage(); - } - } -}); - -// Initialize elements common to all pages -function initCommonElements() { - // Initialize header scroll effect - initHeaderScroll(); - - // Initialize footer animations - initFooterAnimations(); - - // Initialize section entrance animations - initSectionAnimations(); -} - -// Header animation on scroll -function initHeaderScroll() { - const header = document.querySelector('.site-header'); - if (!header) return; - - let lastScrollY = 0; - - window.addEventListener('scroll', () => { - const scrollY = window.scrollY; - - // Add shadow and background when scrolling down - if (scrollY > 20) { - header.classList.add('header-scrolled'); - } else { - header.classList.remove('header-scrolled'); - } - - // Hide header when scrolling down quickly, show when scrolling up - if (scrollY > lastScrollY + 50) { - header.classList.add('header-hidden'); - } else if (scrollY < lastScrollY - 10) { - header.classList.remove('header-hidden'); - } - - lastScrollY = scrollY; - }); -} - -// Homepage specific animations -function initHomePage() { - // Initialize expertise item animations - initExpertiseItems(); - - // Initialize tech section parallax - initTechParallax(); -} - -// Expertise items hover and click effects -function initExpertiseItems() { - const expItems = document.querySelectorAll('.exp-item'); - - expItems.forEach(item => { - // Add hover effect - item.addEventListener('mouseenter', function() { - this.classList.add('exp-hover'); - }); - - item.addEventListener('mouseleave', function() { - this.classList.remove('exp-hover'); - }); - - // Add click animation - item.addEventListener('click', function() { - this.classList.add('exp-click'); - - setTimeout(() => { - this.classList.remove('exp-click'); - }, 300); - }); - }); - - // Add staggered entrance animation - expItems.forEach((item, index) => { - // Set staggered animation delay - item.style.animationDelay = `${index * 0.15}s`; - - // Add animation class - item.classList.add('animate-entrance'); - }); -} - -// Tech section parallax effect -function initTechParallax() { - const techSection = document.getElementById('technologies'); - if (!techSection) return; - - window.addEventListener('scroll', () => { - // Get section position - const rect = techSection.getBoundingClientRect(); - const viewportHeight = window.innerHeight; - - // Check if section is in viewport - if (rect.top < viewportHeight && rect.bottom > 0) { - // Calculate percentage scrolled through the section - const scrollPercentage = 1 - Math.max(0, Math.min(1, rect.bottom / (rect.height + viewportHeight))); - - // Apply parallax effect to tech icons - const techItems = document.querySelectorAll('.tech-icon-container'); - techItems.forEach((item, index) => { - const offsetFactor = (index % 3 - 1) * 20; // Different offset for each item - const translateY = scrollPercentage * offsetFactor; - item.style.transform = `translateY(${translateY}px)`; - }); - } - }); -} - -// About page specific animations -function initAboutPage() { - // Team member hover effects - const teamMembers = document.querySelectorAll('.team-member'); - if (teamMembers.length > 0) { - teamMembers.forEach(member => { - member.addEventListener('mouseenter', function() { - this.classList.add('member-hover'); - }); - - member.addEventListener('mouseleave', function() { - this.classList.remove('member-hover'); - }); - }); - } -} - -// Contact page specific functionality (animations removed) -function initContactPage() { - // Basic form input handling without animations - const formInputs = document.querySelectorAll('input, textarea'); - if (formInputs.length > 0) { - formInputs.forEach(input => { - // Add simplified focus effect (keep functionality but remove animations) - input.addEventListener('focus', function() { - this.parentElement.classList.add('input-focused'); - }); - - input.addEventListener('blur', function() { - if (!this.value) { - this.parentElement.classList.remove('input-focused'); - } - }); - - // Check for pre-filled inputs (functionality preserved) - if (input.value) { - input.parentElement.classList.add('input-focused'); - } - }); - } -} - -// Service page specific animations -function initServicePage() { - // Service cards animation - const serviceCards = document.querySelectorAll('.service-card'); - if (serviceCards.length > 0) { - serviceCards.forEach((card, index) => { - // Add staggered animation - card.style.animationDelay = `${index * 0.15}s`; - card.classList.add('animate-slide-up'); - }); - } -} - -// Industry page specific animations -function initIndustryPage() { - // Case study hover effects - const caseStudies = document.querySelectorAll('.case-study'); - if (caseStudies.length > 0) { - caseStudies.forEach(study => { - study.addEventListener('mouseenter', function() { - this.classList.add('case-hover'); - }); - - study.addEventListener('mouseleave', function() { - this.classList.remove('case-hover'); - }); - }); - } -} - -// Education page specific animations -function initEducationPage() { - // Course card effects - const courseCards = document.querySelectorAll('.course-card'); - if (courseCards.length > 0) { - courseCards.forEach(card => { - card.addEventListener('click', function() { - this.classList.toggle('card-expanded'); - }); - }); - } -} - -// Section entrance animations -function initSectionAnimations() { - const sections = document.querySelectorAll('section'); - - // Create intersection observer - const observer = new IntersectionObserver((entries) => { - entries.forEach(entry => { - if (entry.isIntersecting) { - entry.target.classList.add('section-visible'); - - // Animate children with delay - const children = entry.target.querySelectorAll('.animate-on-visible'); - children.forEach((child, index) => { - child.style.animationDelay = `${index * 0.1}s`; - child.classList.add('element-visible'); - }); - } - }); - }, { - threshold: 0.15, - rootMargin: '0px 0px -10% 0px' - }); - - // Observe all sections - sections.forEach(section => { - observer.observe(section); - section.classList.add('section-hidden'); - }); -} - -// Footer animations -function initFooterAnimations() { - const footer = document.querySelector('.site-footer'); - if (!footer) return; - - // Create intersection observer for footer - const observer = new IntersectionObserver((entries) => { - entries.forEach(entry => { - if (entry.isIntersecting) { - footer.classList.add('footer-visible'); - - // Staggered animation for footer columns - const columns = footer.querySelectorAll('.footer-col'); - columns.forEach((col, index) => { - col.style.animationDelay = `${index * 0.15}s`; - col.classList.add('col-visible'); - }); - } - }); - }, { - threshold: 0.2 - }); - - observer.observe(footer); -} \ No newline at end of file diff --git a/mobile-integration-script.js b/mobile-integration-script.js deleted file mode 100644 index e69de29..0000000 diff --git a/syntax-fix-script.js b/syntax-fix-script.js deleted file mode 100644 index e69de29..0000000