- STANDARDIZED COLOR SCHEMES: Unified all service pages to use consistent purple theme (#6d28d9) - Removed theme-specific body classes from automation-flows.html and agentic-ai.html - Removed inline CSS color overrides from machine-learning.html, generative-ai.html, and data-analysis.html - Updated 15+ instances of hardcoded border colors to use rgba(var(--primary-color-rgb), 0.3) - Updated 5+ hover effects to use rgba(var(--primary-color-rgb), 0.4) for consistent glow colors - All service pages now maintain visual consistency with the main website - ENHANCED HERO PAGE: Improved data node scattering for better organic distribution - Repositioned core service nodes (ML, AI, Analytics, Automation) for natural scatter pattern - Enhanced industry nodes positioning with organic right-side distribution - Improved strategic nodes placement across right quadrant for better visual balance - Added varied animation delays and floating patterns for different node groups - Implemented micro-positioning adjustments for more natural appearance - Created size variations and rotation effects for enhanced organic feel - NEW FEATURES ADDED: - Enhanced CSS animations with varied floating patterns - Improved node interaction effects with staggered hover animations - Better responsive design for mobile devices - New documentation files for color standardization completion - TECHNICAL IMPROVEMENTS: - Updated hero-animation.css with enhanced organic scatter positioning - Maintained all existing functionality while improving visual aesthetics - Ensured cross-browser compatibility and mobile responsiveness
68 lines
3.2 KiB
JavaScript
68 lines
3.2 KiB
JavaScript
// Tech Marquee Animation Enhancement
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const techMarqueeContents = document.querySelectorAll('.tech-marquee-content');
|
|
const techItems = document.querySelectorAll('.tech-marquee-item');
|
|
|
|
// Adjust animation speed for each marquee
|
|
techMarqueeContents.forEach((marquee, index) => {
|
|
const isReversed = marquee.classList.contains('tech-marquee-content-reversed');
|
|
const marqueeItems = marquee.querySelectorAll('.tech-marquee-item');
|
|
const itemCount = marqueeItems.length / 2; // Account for duplicated items
|
|
|
|
// Set slightly different speeds for each marquee
|
|
const baseSpeed = isReversed ? 65 : 60;
|
|
const animationDuration = Math.max(30, Math.min(70, itemCount * 5)); // Between 30s and 70s
|
|
marquee.style.animationDuration = `${baseSpeed + (index * 10)}s`;
|
|
});
|
|
|
|
// Add 3D tilt effect on mouse move for each tech icon
|
|
techItems.forEach(item => {
|
|
const iconContainer = item.querySelector('.tech-icon-container');
|
|
|
|
if (iconContainer) {
|
|
item.addEventListener('mousemove', function(e) {
|
|
const rect = iconContainer.getBoundingClientRect();
|
|
const x = e.clientX - rect.left;
|
|
const y = e.clientY - rect.top;
|
|
|
|
const centerX = rect.width / 2;
|
|
const centerY = rect.height / 2;
|
|
|
|
const tiltX = (centerX - x) / 10;
|
|
const tiltY = (y - centerY) / 10;
|
|
|
|
iconContainer.style.transform = `perspective(500px) rotateX(${tiltY}deg) rotateY(${-tiltX}deg) scale3d(1.05, 1.05, 1.05)`;
|
|
});
|
|
|
|
item.addEventListener('mouseleave', function() {
|
|
iconContainer.style.transform = '';
|
|
});
|
|
}
|
|
});
|
|
// Removed pulse effects functionality - displaying raw icons without glow effects
|
|
// Add a parallax effect to create depth between the two marquees
|
|
window.addEventListener('mousemove', function(e) {
|
|
const containers = document.querySelectorAll('.tech-marquee-container');
|
|
|
|
containers.forEach((container, index) => {
|
|
const isReversed = container.classList.contains('tech-marquee-reversed');
|
|
const depth = isReversed ? 25 : 15; // Reduced sensitivity due to full width
|
|
const moveX = (e.clientX - window.innerWidth / 2) / depth;
|
|
const moveY = (e.clientY - window.innerHeight / 2) / depth;
|
|
|
|
// Limit the movement for a subtler effect with the full-width design
|
|
const maxMove = 10;
|
|
const limitedMoveX = Math.max(-maxMove, Math.min(maxMove, moveX));
|
|
const limitedMoveY = Math.max(-maxMove, Math.min(maxMove, moveY));
|
|
|
|
container.style.transform = `translate(${limitedMoveX}px, ${limitedMoveY}px)`;
|
|
});
|
|
});
|
|
|
|
// Add entrance animation for each tech item
|
|
const allMarquees = document.querySelectorAll('.tech-marquee-container');
|
|
allMarquees.forEach((marquee, marqueeIndex) => {
|
|
marquee.style.animationDelay = `${marqueeIndex * 0.2}s`;
|
|
});
|
|
});
|