4 Commits

View File

@@ -11,10 +11,12 @@ import TestimonialCardFive from '@/components/sections/testimonial/TestimonialCa
import FaqDouble from '@/components/sections/faq/FaqDouble';
import ContactSplit from '@/components/sections/contact/ContactSplit';
import FooterMedia from '@/components/sections/footer/FooterMedia';
import { Sparkles } from 'lucide-react';
import { Sparkles, X } from 'lucide-react';
export default function LandingPage() {
const [bubbles, setBubbles] = useState([]);
const [isVideoOpen, setIsVideoOpen] = useState(false);
const [videoUrl, setVideoUrl] = useState('');
useEffect(() => {
const handleMouseMove = (e) => {
@@ -23,8 +25,7 @@ export default function LandingPage() {
x: e.clientX,
y: e.clientY,
};
setBubbles((prev) => [...prev, newBubble]);
setBubbles((prev) => [...prev, newBubble]);
// Remove bubble after animation completes (2 seconds)
setTimeout(() => {
@@ -35,19 +36,108 @@ export default function LandingPage() {
window.addEventListener('mousemove', handleMouseMove);
return () => window.removeEventListener('mousemove', handleMouseMove);
}, []);
return (
<ThemeProvider
defaultButtonVariant="hover-magnetic"
defaultTextAnimation="reveal-blur"
borderRadius="soft"
contentWidth="smallMedium"
sizing="mediumLargeSizeMediumTitles"
background="circleGradient"
cardStyle="outline"
primaryButtonStyle="radial-glow"
secondaryButtonStyle="layered"
headingFontWeight="normal"
>
const openVideoPopup = (url) => {
setVideoUrl(url);
setIsVideoOpen(true);
};
const closeVideoPopup = () => {
setIsVideoOpen(false);
setVideoUrl('');
};
return (
<ThemeProvider
defaultButtonVariant="hover-magnetic"
defaultTextAnimation="reveal-blur"
borderRadius="soft"
contentWidth="smallMedium"
sizing="mediumLargeSizeMediumTitles"
background="circleGradient"
cardStyle="outline"
primaryButtonStyle="radial-glow"
secondaryButtonStyle="layered"
headingFontWeight="normal"
>
<style>{`
@keyframes shimmer {
0% {
background-position: -1000px 0;
}
100% {
background-position: 1000px 0;
}
}
h1, h2, h3 {
position: relative;
background: linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0.05) 50%, rgba(255, 255, 255, 0.1) 100%);
backdrop-filter: blur(10px);
-webkit-backdrop-filter: blur(10px);
border: 1px solid rgba(255, 255, 255, 0.2);
border-radius: 8px;
padding: 12px 16px;
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.1), inset 0 1px 2px rgba(255, 255, 255, 0.3);
animation: shimmer 3s infinite;
background-size: 1000px 100%;
background-image:
linear-gradient(90deg,
rgba(255, 255, 255, 0) 0%,
rgba(255, 255, 255, 0.2) 50%,
rgba(255, 255, 255, 0) 100%),
linear-gradient(135deg, rgba(255, 255, 255, 0.1) 0%, rgba(255, 255, 255, 0.05) 50%, rgba(255, 255, 255, 0.1) 100%);
}
h1 {
font-size: 2.5rem;
letter-spacing: -0.02em;
}
h2 {
font-size: 2rem;
letter-spacing: -0.015em;
}
h3 {
font-size: 1.5rem;
letter-spacing: -0.01em;
}
`}</style>
{/* Video Popup Modal */}
{isVideoOpen && (
<div className="fixed inset-0 z-50 flex items-center justify-center">
{/* Overlay Backdrop */}
<div
className="absolute inset-0 bg-black bg-opacity-75 pointer-events-auto"
onClick={closeVideoPopup}
/>
{/* Popup Container */}
<div className="relative z-10 w-full max-w-4xl mx-4 bg-black rounded-lg overflow-hidden shadow-2xl pointer-events-auto">
{/* Close Button */}
<button
onClick={closeVideoPopup}
className="absolute top-4 right-4 z-20 bg-white bg-opacity-20 hover:bg-opacity-40 rounded-full p-2 transition-all duration-200"
aria-label="Close video"
>
<X size={24} className="text-white" />
</button>
{/* Video Player */}
<div className="relative w-full bg-black" style={{ paddingBottom: '56.25%' }}>
<iframe
src={videoUrl}
className="absolute inset-0 w-full h-full"
frameBorder="0"
allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture"
allowFullScreen
title="Video player"
/>
</div>
</div>
</div>
)}
{/* Anatomical Shape Container */}
<div className="fixed inset-0 pointer-events-none overflow-hidden">
{bubbles.map((bubble) => (