8 Commits

Author SHA1 Message Date
7fffea958c Merge version_2 into main
Merge version_2 into main
2026-03-11 14:03:54 +00:00
2e2845b9a4 Update theme colors 2026-03-11 14:03:48 +00:00
b0110bb5cf Merge version_2 into main
Merge version_2 into main
2026-03-11 14:02:55 +00:00
535d4c52b6 Update theme colors 2026-03-11 14:02:49 +00:00
bb12693f1a Merge version_2 into main
Merge version_2 into main
2026-03-11 13:56:26 +00:00
d73f5995c2 Update src/app/page.tsx 2026-03-11 13:56:22 +00:00
4ce776e02c Merge version_1 into main
Merge version_1 into main
2026-03-11 13:50:44 +00:00
83bd59d87e Merge version_1 into main
Merge version_1 into main
2026-03-11 13:50:21 +00:00

View File

@@ -12,8 +12,175 @@ import SocialProofOne from '@/components/sections/socialProof/SocialProofOne';
import ContactSplitForm from '@/components/sections/contact/ContactSplitForm'; import ContactSplitForm from '@/components/sections/contact/ContactSplitForm';
import FooterSimple from '@/components/sections/footer/FooterSimple'; import FooterSimple from '@/components/sections/footer/FooterSimple';
import { Award, Sparkles, Star, Zap } from "lucide-react"; import { Award, Sparkles, Star, Zap } from "lucide-react";
import { useEffect } from "react";
export default function LandingPage() { export default function LandingPage() {
useEffect(() => {
// Create custom cursor element
const cursor = document.createElement('div');
cursor.id = 'flowing-cursor';
cursor.style.cssText = `
position: fixed;
width: 20px;
height: 20px;
border: 2px solid currentColor;
border-radius: 50%;
pointer-events: none;
z-index: 99999;
mix-blend-mode: screen;
box-shadow: 0 0 20px currentColor;
transition: opacity 0.3s ease;
opacity: 0;
`;
document.body.appendChild(cursor);
// Create trailing elements
const trails = [];
const maxTrails = 15;
let mouseX = 0;
let mouseY = 0;
let cursorX = 0;
let cursorY = 0;
let isMoving = false;
let moveTimeout;
// Color array for flowing effect
const colors = [
'#ff0080',
'#ff0099',
'#ff00b2',
'#ff00cc',
'#ff00e6',
'#e600ff',
'#cc00ff',
'#b200ff',
'#9900ff',
'#8000ff',
'#6600ff',
'#4d00ff',
'#3300ff',
'#1a00ff',
'#0066ff',
];
function createTrail(x, y, colorIndex) {
const trail = document.createElement('div');
trail.style.cssText = `
position: fixed;
width: 8px;
height: 8px;
border-radius: 50%;
pointer-events: none;
z-index: 99998;
left: ${x}px;
top: ${y}px;
background: ${colors[colorIndex % colors.length]};
box-shadow: 0 0 10px ${colors[colorIndex % colors.length]};
animation: fadeOutTrail 1s forwards;
`;
document.body.appendChild(trail);
trails.push({ element: trail, startTime: Date.now() });
return trail;
}
// Add animation keyframes
if (!document.getElementById('cursor-animation-styles')) {
const style = document.createElement('style');
style.id = 'cursor-animation-styles';
style.textContent = `
@keyframes fadeOutTrail {
0% {
opacity: 1;
transform: scale(1);
}
100% {
opacity: 0;
transform: scale(0.5);
}
}
`;
document.head.appendChild(style);
}
document.addEventListener('mousemove', (e) => {
mouseX = e.clientX;
mouseY = e.clientY;
// Show cursor
cursor.style.opacity = '1';
// Clear existing timeout
clearTimeout(moveTimeout);
isMoving = true;
// Hide cursor after 1 second of no movement
moveTimeout = setTimeout(() => {
isMoving = false;
cursor.style.opacity = '0';
}, 1000);
});
document.addEventListener('mouseleave', () => {
cursor.style.opacity = '0';
isMoving = false;
clearTimeout(moveTimeout);
});
document.addEventListener('mouseenter', () => {
if (isMoving) {
cursor.style.opacity = '1';
}
});
// Animation loop
function animate() {
// Smooth cursor movement
cursorX += (mouseX - cursorX) * 0.2;
cursorY += (mouseY - cursorY) * 0.2;
// Update cursor position
cursor.style.left = `${cursorX - 10}px`;
cursor.style.top = `${cursorY - 10}px`;
// Create trails periodically
if (isMoving && Math.random() > 0.7) {
const colorIndex = Math.floor((Date.now() / 50) % colors.length);
createTrail(cursorX, cursorY, colorIndex);
}
// Change cursor color based on time
const hue = (Date.now() / 20) % 360;
cursor.style.color = `hsl(${hue}, 100%, 50%)`;
// Clean up old trails
for (let i = trails.length - 1; i >= 0; i--) {
if (Date.now() - trails[i].startTime > 1000) {
trails[i].element.remove();
trails.splice(i, 1);
}
}
// Keep max trails limit
while (trails.length > maxTrails) {
trails[0].element.remove();
trails.shift();
}
requestAnimationFrame(animate);
}
animate();
// Cleanup
return () => {
cursor.remove();
trails.forEach(t => t.element.remove());
document.removeEventListener('mousemove', () => {});
document.removeEventListener('mouseleave', () => {});
document.removeEventListener('mouseenter', () => {});
};
}, []);
return ( return (
<ThemeProvider <ThemeProvider
defaultButtonVariant="bounce-effect" defaultButtonVariant="bounce-effect"