| import { ArrowRight, Search, Microscope, TestTube, Dna, Shield, Zap, Users } from "lucide-react"; |
| import { Button } from "@/components/ui/button"; |
| import { motion } from "framer-motion"; |
|
|
| const Hero = () => { |
| const containerVariants = { |
| hidden: { opacity: 0 }, |
| visible: { |
| opacity: 1, |
| transition: { |
| staggerChildren: 0.15, |
| duration: 0.8 |
| } |
| } |
| }; |
|
|
| const itemVariants = { |
| hidden: { y: 30, opacity: 0 }, |
| visible: { |
| y: 0, |
| opacity: 1, |
| transition: { duration: 0.6, ease: "easeOut" } |
| } |
| }; |
|
|
| const floatingVariants = (duration: number, delay: number) => ({ |
| animate: { |
| y: [-10, 10, -10], |
| transition: { |
| duration, |
| repeat: Infinity, |
| ease: "easeInOut", |
| delay |
| } |
| } |
| }); |
|
|
| return ( |
| <motion.section |
| className="section-padding section-soft-wave relative overflow-visible" |
| initial="hidden" |
| animate="visible" |
| variants={containerVariants} |
| > |
| {/* Animated Grid Background (keep) */} |
| <div className="absolute inset-0 w-full h-full bg-[linear-gradient(to_right,#80808008_1px,transparent_1px),linear-gradient(to_bottom,#80808008_1px,transparent_1px)] bg-[size:48px_48px] [mask-image:radial-gradient(ellipse_60%_60%_at_50%_50%,#000_70%,transparent_100%)] pointer-events-none" /> |
| |
| <div className="container mx-auto px-4 sm:px-8 lg:px-16 relative z-10"> |
| <div className="grid lg:grid-cols-2 gap-20 items-center"> |
| <motion.div variants={itemVariants} className="space-y-12"> |
| <div className="space-y-8"> |
| {/* Tagline */} |
| <motion.div |
| variants={itemVariants} |
| className="text-brand text-lg font-semibold uppercase tracking-widest mb-4" |
| > |
| Precision Diagnostics. Personalized Care. |
| </motion.div> |
| <motion.h1 |
| variants={itemVariants} |
| className="text-5xl sm:text-6xl md:text-7xl font-extrabold text-gray-900 leading-tight tracking-tighter mb-8" |
| > |
| <span className="inline-block">Your Health,</span> |
| <br /> |
| <span className="gradient-text inline-block relative"> |
| Your Data, |
| </span> |
| <br /> |
| <span className="inline-block">Your Future.</span> |
| </motion.h1> |
| <motion.p |
| variants={itemVariants} |
| className="text-lg sm:text-xl text-gray-600 leading-relaxed max-w-xl mb-8" |
| > |
| Experience the future of personalized healthcare with our advanced diagnostic solutions. Precision testing tailored to your unique biology for informed health decisions. |
| </motion.p> |
| |
| {/* Premium Stats */} |
| <motion.div |
| variants={itemVariants} |
| className="flex items-center gap-8 pt-4" |
| > |
| <div className="flex items-center gap-2"> |
| <Users className="h-5 w-5 text-[#19A1E6]" /> |
| <span className="text-sm text-gray-600">10,000+ Patients</span> |
| </div> |
| <div className="flex items-center gap-2"> |
| <Shield className="h-5 w-5 text-green-600" /> |
| <span className="text-sm text-gray-600">99.9% Accuracy</span> |
| </div> |
| <div className="flex items-center gap-2"> |
| <Zap className="h-5 w-5 text-purple-600" /> |
| <span className="text-sm text-gray-600">24h Results</span> |
| </div> |
| </motion.div> |
| </div> |
| |
| {/* Main CTA above the fold */} |
| <motion.div variants={itemVariants} className="flex flex-col sm:flex-row gap-6"> |
| <Button className="hero-cta-primary group"> |
| <Microscope className="mr-3 h-6 w-6 group-hover:scale-110 transition-transform" /> |
| Book Your Test |
| <ArrowRight className="ml-3 h-6 w-6 group-hover:translate-x-1 transition-transform" /> |
| </Button> |
| <Button className="hero-cta-secondary group"> |
| <Search className="mr-3 h-6 w-6 group-hover:scale-110 transition-transform" /> |
| Explore Tests |
| </Button> |
| </motion.div> |
| </motion.div> |
| |
| <motion.div |
| variants={itemVariants} |
| className="relative" |
| > |
| {/* Single, high-quality hero image */} |
| <div className="rounded-3xl overflow-hidden shadow-2xl relative group"> |
| <motion.img |
| src="/placeholder.svg" |
| alt="Healthcare professional with patient consultation" |
| className="w-full h-[300px] sm:h-[400px] md:h-[500px] lg:h-[600px] object-cover transition-transform duration-700" |
| whileHover={{ scale: 1.05 }} |
| onError={e => { e.currentTarget.onerror = null; e.currentTarget.src = '/placeholder.svg'; }} |
| /> |
| </div> |
| </motion.div> |
| </div> |
| </div> |
| </motion.section> |
| ); |
| }; |
|
|
| |
| export const HeroWave = () => ( |
| <div className="absolute left-0 right-0 bottom-[-600px] z-0 pointer-events-none select-none" style={{overflow: 'visible'}} aria-hidden="true"> |
| <svg viewBox="0 0 1440 1000" fill="none" xmlns="http://www.w3.org/2000/svg" className="w-screen h-[1000px] block"> |
| <path d="M0,300 Q360,1000 720,800 Q1080,600 1440,950" stroke="#7cc7f8" strokeWidth="10" opacity="0.85" fill="none" /> |
| <path d="M0,400 Q360,1100 720,900 Q1080,700 1440,1000" stroke="#b6e0fa" strokeWidth="6" opacity="0.5" fill="none" /> |
| </svg> |
| </div> |
| ); |
|
|
| export default Hero; |
|
|