872 lines
45 KiB
HTML
872 lines
45 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
|
||
<head>
|
||
<meta charset="UTF-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||
<title>CleanHaul – Fast & Affordable Junk Removal Services</title>
|
||
<meta name="description"
|
||
content="Professional junk removal services. Same-day pickup, eco-friendly disposal, transparent pricing. Get a free quote today." />
|
||
<meta property="og:title" content="CleanHaul – Fast & Affordable Junk Removal Services" />
|
||
<meta property="og:description"
|
||
content="Professional junk removal services. Same-day pickup, eco-friendly disposal, transparent pricing. Get a free quote today." />
|
||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||
<link
|
||
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Poppins:wght@600;700;800;900&display=swap"
|
||
rel="stylesheet" />
|
||
<script src="https://cdn.tailwindcss.com">
|
||
</script>
|
||
<script src="https://unpkg.com/lucide@latest/dist/umd/lucide.min.js">
|
||
</script>
|
||
<script>
|
||
tailwind.config = {
|
||
theme: {
|
||
extend: {
|
||
fontFamily: {
|
||
sans: ['Inter', 'sans-serif'],
|
||
heading: ['Poppins', 'sans-serif'],
|
||
},
|
||
colors: {
|
||
background: '#f7f8fa',
|
||
foreground: '#0f1729',
|
||
card: '#ffffff',
|
||
'card-foreground': '#0f1729',
|
||
muted: '#f1f3f6',
|
||
'muted-foreground': '#6b7280',
|
||
border: '#e4e7ec',
|
||
brand: {
|
||
DEFAULT: '#1f9b5e',
|
||
foreground: '#ffffff',
|
||
secondary: '#e0b143',
|
||
'secondary-foreground': '#2a2415',
|
||
accent: '#dff0e3',
|
||
dark: '#0f1729',
|
||
light: '#f7f8fa',
|
||
},
|
||
},
|
||
animation: {
|
||
'fade-in': 'fadeIn 0.3s ease-out',
|
||
'spin-slow': 'spin 3s linear infinite',
|
||
'pulse-grow': 'pulseGrow 1.8s ease-in-out infinite',
|
||
'slide-up': 'slideUp 0.5s ease-out',
|
||
'slide-down': 'slideDown 0.4s ease-out',
|
||
'bounce-subtle': 'bounceSubtle 2s ease-in-out infinite',
|
||
'scale-in': 'scaleIn 0.4s ease-out',
|
||
'float': 'float 3s ease-in-out infinite',
|
||
},
|
||
keyframes: {
|
||
fadeIn: {
|
||
'0%': { opacity: '0', transform: 'translateY(-4px)' },
|
||
'100%': { opacity: '1', transform: 'translateY(0)' }
|
||
},
|
||
pulseGrow: {
|
||
'0%, 100%': { transform: 'scale(1)', opacity: '1' },
|
||
'50%': { transform: 'scale(1.08)', opacity: '0.8' },
|
||
},
|
||
slideUp: {
|
||
'0%': { opacity: '0', transform: 'translateY(30px)' },
|
||
'100%': { opacity: '1', transform: 'translateY(0)' },
|
||
},
|
||
slideDown: {
|
||
'0%': { opacity: '0', transform: 'translateY(-20px)' },
|
||
'100%': { opacity: '1', transform: 'translateY(0)' },
|
||
},
|
||
scaleIn: {
|
||
'0%': { opacity: '0', transform: 'scale(0.9)' },
|
||
'100%': { opacity: '1', transform: 'scale(1)' },
|
||
},
|
||
bounceSubtle: {
|
||
'0%, 100%': { transform: 'translateY(0)' },
|
||
'50%': { transform: 'translateY(-8px)' },
|
||
},
|
||
float: {
|
||
'0%, 100%': { transform: 'translateY(0px)' },
|
||
'50%': { transform: 'translateY(-10px)' },
|
||
},
|
||
},
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
<link rel="stylesheet" href="assets/style.css">
|
||
<link rel="icon" href="assets/dustbin.png">
|
||
</head>
|
||
|
||
<body class="bg-background text-foreground antialiased">
|
||
|
||
<!-- ============ PRELOADER ============ -->
|
||
<div id="preloader">
|
||
<div class="loader-inner">
|
||
<div class="loader-truck">
|
||
<i data-lucide="truck" class="w-16 h-16 text-brand" style="width:64px;height:64px;"></i>
|
||
</div>
|
||
<p class="text-white font-heading font-bold text-xl mt-4">Clean<span class="text-brand">Haul</span></p>
|
||
<div class="loader-bar">
|
||
<div class="loader-bar-fill"></div>
|
||
</div>
|
||
<p class="text-white/50 text-xs mt-3">Loading amazing service...</p>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- ============ NAVIGATION ============ -->
|
||
<nav id="navbar" class="fixed top-0 left-0 right-0 z-50 transition-all duration-300 bg-transparent">
|
||
<div class="container-main flex items-center justify-between h-16 md:h-20">
|
||
<a href="index.html" class="flex items-center gap-2 group">
|
||
<i data-lucide="truck" class="w-8 h-8 text-brand transition-transform group-hover:scale-110"></i>
|
||
<span class="text-xl font-bold font-heading">Clean<span class="text-brand">Haul</span></span>
|
||
</a>
|
||
<div class="hidden md:flex items-center gap-8">
|
||
<a href="index.html"
|
||
class="text-sm font-medium text-brand font-semibold transition-colors border-b-2 border-brand">Home</a>
|
||
<a href="services.html"
|
||
class="text-sm font-medium text-foreground/80 hover:text-brand transition-colors">Services</a>
|
||
<a href="pricing.html"
|
||
class="text-sm font-medium text-foreground/80 hover:text-brand transition-colors">Pricing</a>
|
||
<a href="about.html" class="text-sm font-medium text-foreground/80 hover:text-brand transition-colors">About</a>
|
||
<a href="contact.html"
|
||
class="text-sm font-medium text-foreground/80 hover:text-brand transition-colors">Contact</a>
|
||
<a href="tel:+18005551234" class="btn-brand btn-lg"><i data-lucide="phone" class="w-4 h-4"></i>Call Now</a>
|
||
</div>
|
||
<button id="mobileToggle" class="md:hidden p-2 text-foreground" aria-label="Toggle menu">
|
||
<i data-lucide="menu" class="w-6 h-6"></i>
|
||
</button>
|
||
</div>
|
||
<div id="mobileMenu" class="hidden md:hidden bg-white/98 backdrop-blur-md border-t border-border animate-fade-in">
|
||
<div class="container-main py-4 flex flex-col gap-3">
|
||
<a href="index.html" class="py-2 text-base font-medium text-foreground/80 hover:text-brand">Home</a>
|
||
<a href="services.html" class="py-2 text-base font-medium text-foreground/80 hover:text-brand">Services</a>
|
||
<a href="pricing.html" class="py-2 text-base font-medium text-foreground/80 hover:text-brand">Pricing</a>
|
||
<a href="about.html" class="py-2 text-base font-medium text-foreground/80 hover:text-brand">About</a>
|
||
<a href="contact.html" class="py-2 text-base font-medium text-foreground/80 hover:text-brand">Contact</a>
|
||
<a href="tel:+18005551234" class="btn-brand mt-2"><i data-lucide="phone" class="w-4 h-4"></i>Call Now</a>
|
||
</div>
|
||
</div>
|
||
</nav>
|
||
|
||
<!-- ============ HERO SECTION ============ -->
|
||
<section class="relative min-h-[90vh] flex items-center bg-brand-dark overflow-hidden">
|
||
<div class="absolute inset-0">
|
||
<img src="assets/hero-truck.jpg" alt="CleanHaul truck and team" class="w-full h-full object-cover opacity-25" />
|
||
<div class="absolute inset-0 bg-gradient-to-r from-brand-dark via-brand-dark/90 to-brand-dark/60"></div>
|
||
</div>
|
||
<div class="container-main py-32 w-full">
|
||
<div class="max-w-2xl" data-aos="fade-up">
|
||
<div class="flex flex-wrap gap-3 mb-6">
|
||
<span
|
||
class="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full bg-brand/20 text-brand text-xs font-semibold border border-brand/30"><i
|
||
data-lucide="clock" class="w-3.5 h-3.5"></i>Same-Day Service</span>
|
||
<span
|
||
class="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full bg-brand/20 text-brand text-xs font-semibold border border-brand/30"><i
|
||
data-lucide="leaf" class="w-3.5 h-3.5"></i>Eco-Friendly Disposal</span>
|
||
<span
|
||
class="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full bg-brand/20 text-brand text-xs font-semibold border border-brand/30"><i
|
||
data-lucide="shield" class="w-3.5 h-3.5"></i>Licensed & Insured</span>
|
||
</div>
|
||
<h1 class="text-4xl sm:text-5xl lg:text-6xl font-extrabold text-white leading-tight">Fast & Affordable <span
|
||
class="text-brand">Junk Removal</span> Services</h1>
|
||
<p class="mt-6 text-lg text-white/70 max-w-lg leading-relaxed">We remove unwanted junk quickly, safely, and
|
||
responsibly. Same-day service available — call now or get a free quote online.</p>
|
||
<div class="mt-8 flex flex-wrap gap-4">
|
||
<a href="contact.html" class="btn-brand btn-xl">Get Free Quote</a>
|
||
<a href="tel:+18005551234" class="btn-brand-outline btn-xl"
|
||
style="border-color:rgba(255,255,255,.3); color:#fff;"><i data-lucide="phone" class="w-5 h-5"></i>Call
|
||
Now</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============ SERVICES SECTION ============ -->
|
||
<section class="section-padding bg-background">
|
||
<div class="container-main">
|
||
<div class="text-center mb-14" data-aos="fade-up">
|
||
<span class="text-brand font-semibold text-sm uppercase tracking-wider">What We Do</span>
|
||
<h2 class="mt-2 text-3xl md:text-4xl font-bold">Our Services</h2>
|
||
<p class="mt-4 text-muted-foreground max-w-xl mx-auto">From household clutter to construction debris, we handle
|
||
all types of junk removal with care and efficiency.</p>
|
||
</div>
|
||
<div class="grid sm:grid-cols-2 lg:grid-cols-4 gap-6">
|
||
|
||
<div
|
||
class="group p-6 rounded-2xl bg-card border border-border hover:shadow-xl hover:-translate-y-1 transition-all duration-300"
|
||
data-aos="fade-up" data-aos-delay="100">
|
||
<div
|
||
class="w-14 h-14 rounded-xl bg-brand-accent flex items-center justify-center mb-5 group-hover:bg-brand transition-colors">
|
||
<i data-lucide="home" class="w-7 h-7 text-brand group-hover:text-white transition-colors"></i>
|
||
</div>
|
||
<h3 class="text-lg font-bold mb-2">Household Junk Removal</h3>
|
||
<p class="text-sm text-muted-foreground leading-relaxed mb-4">Furniture, appliances, clutter removal from your
|
||
home. We handle everything from single items to full house cleanouts.</p>
|
||
<a href="services.html"
|
||
class="inline-flex items-center gap-1 text-brand font-semibold text-sm hover:gap-2 transition-all">Learn
|
||
More <i data-lucide="arrow-right" class="w-4 h-4"></i></a>
|
||
</div>
|
||
|
||
<div
|
||
class="group p-6 rounded-2xl bg-card border border-border hover:shadow-xl hover:-translate-y-1 transition-all duration-300"
|
||
data-aos="fade-up" data-aos-delay="200">
|
||
<div
|
||
class="w-14 h-14 rounded-xl bg-brand-accent flex items-center justify-center mb-5 group-hover:bg-brand transition-colors">
|
||
<i data-lucide="building" class="w-7 h-7 text-brand group-hover:text-white transition-colors"></i>
|
||
</div>
|
||
<h3 class="text-lg font-bold mb-2">Office Cleanouts</h3>
|
||
<p class="text-sm text-muted-foreground leading-relaxed mb-4">Commercial junk and office waste removal. Desks,
|
||
chairs, electronics, and more cleared efficiently.</p>
|
||
<a href="services.html"
|
||
class="inline-flex items-center gap-1 text-brand font-semibold text-sm hover:gap-2 transition-all">Learn
|
||
More <i data-lucide="arrow-right" class="w-4 h-4"></i></a>
|
||
</div>
|
||
|
||
<div
|
||
class="group p-6 rounded-2xl bg-card border border-border hover:shadow-xl hover:-translate-y-1 transition-all duration-300"
|
||
data-aos="fade-up" data-aos-delay="300">
|
||
<div
|
||
class="w-14 h-14 rounded-xl bg-brand-accent flex items-center justify-center mb-5 group-hover:bg-brand transition-colors">
|
||
<i data-lucide="hammer" class="w-7 h-7 text-brand group-hover:text-white transition-colors"></i>
|
||
</div>
|
||
<h3 class="text-lg font-bold mb-2">Construction Debris</h3>
|
||
<p class="text-sm text-muted-foreground leading-relaxed mb-4">Cleanup after renovation projects. We remove
|
||
drywall, lumber, concrete, and construction waste.</p>
|
||
<a href="services.html"
|
||
class="inline-flex items-center gap-1 text-brand font-semibold text-sm hover:gap-2 transition-all">Learn
|
||
More <i data-lucide="arrow-right" class="w-4 h-4"></i></a>
|
||
</div>
|
||
|
||
<div
|
||
class="group p-6 rounded-2xl bg-card border border-border hover:shadow-xl hover:-translate-y-1 transition-all duration-300"
|
||
data-aos="fade-up" data-aos-delay="400">
|
||
<div
|
||
class="w-14 h-14 rounded-xl bg-brand-accent flex items-center justify-center mb-5 group-hover:bg-brand transition-colors">
|
||
<i data-lucide="leaf" class="w-7 h-7 text-brand group-hover:text-white transition-colors"></i>
|
||
</div>
|
||
<h3 class="text-lg font-bold mb-2">Yard Waste Removal</h3>
|
||
<p class="text-sm text-muted-foreground leading-relaxed mb-4">Branches, grass, outdoor waste removal. Keep
|
||
your yard clean and beautiful year-round.</p>
|
||
<a href="services.html"
|
||
class="inline-flex items-center gap-1 text-brand font-semibold text-sm hover:gap-2 transition-all">Learn
|
||
More <i data-lucide="arrow-right" class="w-4 h-4"></i></a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============ HOW IT WORKS ============ -->
|
||
<section class="section-padding bg-muted">
|
||
<div class="container-main">
|
||
<div class="text-center mb-14" data-aos="fade-up">
|
||
<span class="text-brand font-semibold text-sm uppercase tracking-wider">How It Works</span>
|
||
<h2 class="mt-2 text-3xl md:text-4xl font-bold">Simple 4-Step Process</h2>
|
||
</div>
|
||
<div class="grid sm:grid-cols-2 lg:grid-cols-4 gap-8">
|
||
|
||
<div class="text-center relative rounded-2xl bg-card border border-border p-8" data-aos="zoom-in"
|
||
data-aos-delay="100">
|
||
<div
|
||
class="w-16 h-16 rounded-full bg-brand text-white flex items-center justify-center mx-auto mb-5 shadow-lg">
|
||
<i data-lucide="calendar-check" class="w-7 h-7"></i>
|
||
</div>
|
||
<span
|
||
class="absolute top-0 left-1/2 -translate-x-1/2 -translate-y-2 w-7 h-7 rounded-full bg-brand-secondary text-brand-secondary-foreground text-xs font-bold flex items-center justify-center">1</span>
|
||
<h3 class="text-lg font-bold mb-2">Book Appointment</h3>
|
||
<p class="text-sm text-muted-foreground">Schedule online or call us for a convenient time slot.</p>
|
||
</div>
|
||
|
||
<div class="text-center relative rounded-2xl bg-card border border-border p-8" data-aos="zoom-in"
|
||
data-aos-delay="200">
|
||
<div
|
||
class="w-16 h-16 rounded-full bg-brand text-white flex items-center justify-center mx-auto mb-5 shadow-lg">
|
||
<i data-lucide="truck" class="w-7 h-7"></i>
|
||
</div>
|
||
<span
|
||
class="absolute top-0 left-1/2 -translate-x-1/2 -translate-y-2 w-7 h-7 rounded-full bg-brand-secondary text-brand-secondary-foreground text-xs font-bold flex items-center justify-center">2</span>
|
||
<h3 class="text-lg font-bold mb-2">We Arrive</h3>
|
||
<p class="text-sm text-muted-foreground">Our professional team arrives on time, ready to work.</p>
|
||
</div>
|
||
|
||
<div class="text-center relative rounded-2xl bg-card border border-border p-8" data-aos="zoom-in"
|
||
data-aos-delay="300">
|
||
<div
|
||
class="w-16 h-16 rounded-full bg-brand text-white flex items-center justify-center mx-auto mb-5 shadow-lg">
|
||
<i data-lucide="trash-2" class="w-7 h-7"></i>
|
||
</div>
|
||
<span
|
||
class="absolute top-0 left-1/2 -translate-x-1/2 -translate-y-2 w-7 h-7 rounded-full bg-brand-secondary text-brand-secondary-foreground text-xs font-bold flex items-center justify-center">3</span>
|
||
<h3 class="text-lg font-bold mb-2">Junk Removal</h3>
|
||
<p class="text-sm text-muted-foreground">We load and remove all your unwanted items quickly.</p>
|
||
</div>
|
||
|
||
<div class="text-center relative rounded-2xl bg-card border border-border p-8" data-aos="zoom-in"
|
||
data-aos-delay="400">
|
||
<div
|
||
class="w-16 h-16 rounded-full bg-brand text-white flex items-center justify-center mx-auto mb-5 shadow-lg">
|
||
<i data-lucide="recycle" class="w-7 h-7"></i>
|
||
</div>
|
||
<span
|
||
class="absolute top-0 left-1/2 -translate-x-1/2 -translate-y-2 w-7 h-7 rounded-full bg-brand-secondary text-brand-secondary-foreground text-xs font-bold flex items-center justify-center">4</span>
|
||
<h3 class="text-lg font-bold mb-2">Eco Disposal</h3>
|
||
<p class="text-sm text-muted-foreground">Items are recycled, donated, or disposed responsibly.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============ WHY CHOOSE US ============ -->
|
||
<section class="section-padding bg-background">
|
||
<div class="container-main">
|
||
<div class="text-center mb-14" data-aos="fade-up">
|
||
<span class="text-brand font-semibold text-sm uppercase tracking-wider">Why Us</span>
|
||
<h2 class="mt-2 text-3xl md:text-4xl font-bold">Why Choose CleanHaul?</h2>
|
||
</div>
|
||
<div class="grid sm:grid-cols-2 lg:grid-cols-4 gap-6">
|
||
|
||
<div class="p-6 rounded-2xl bg-brand-accent/50 text-center hover:shadow-lg transition-shadow duration-300"
|
||
data-aos="flip-left" data-aos-delay="100">
|
||
<div class="w-14 h-14 rounded-full bg-brand text-white flex items-center justify-center mx-auto mb-4"><i
|
||
data-lucide="clock" class="w-7 h-7"></i></div>
|
||
<h3 class="text-lg font-bold mb-2">Same-Day Service</h3>
|
||
<p class="text-sm text-muted-foreground">Need it gone today? We offer same-day pickup for most jobs.</p>
|
||
</div>
|
||
|
||
<div class="p-6 rounded-2xl bg-brand-accent/50 text-center hover:shadow-lg transition-shadow duration-300"
|
||
data-aos="flip-left" data-aos-delay="200">
|
||
<div class="w-14 h-14 rounded-full bg-brand text-white flex items-center justify-center mx-auto mb-4"><i
|
||
data-lucide="dollar-sign" class="w-7 h-7"></i></div>
|
||
<h3 class="text-lg font-bold mb-2">Affordable Pricing</h3>
|
||
<p class="text-sm text-muted-foreground">Transparent pricing with no hidden fees. Free estimates always.</p>
|
||
</div>
|
||
|
||
<div class="p-6 rounded-2xl bg-brand-accent/50 text-center hover:shadow-lg transition-shadow duration-300"
|
||
data-aos="flip-right" data-aos-delay="300">
|
||
<div class="w-14 h-14 rounded-full bg-brand text-white flex items-center justify-center mx-auto mb-4"><i
|
||
data-lucide="leaf" class="w-7 h-7"></i></div>
|
||
<h3 class="text-lg font-bold mb-2">Eco-Friendly Disposal</h3>
|
||
<p class="text-sm text-muted-foreground">We recycle and donate whenever possible to minimize landfill waste.
|
||
</p>
|
||
</div>
|
||
|
||
<div class="p-6 rounded-2xl bg-brand-accent/50 text-center hover:shadow-lg transition-shadow duration-300"
|
||
data-aos="flip-right" data-aos-delay="400">
|
||
<div class="w-14 h-14 rounded-full bg-brand text-white flex items-center justify-center mx-auto mb-4"><i
|
||
data-lucide="users" class="w-7 h-7"></i></div>
|
||
<h3 class="text-lg font-bold mb-2">Professional Team</h3>
|
||
<p class="text-sm text-muted-foreground">Licensed, insured, and trained professionals handle every job.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============ BEFORE & AFTER ============ -->
|
||
<section class="section-padding bg-muted">
|
||
<div class="container-main">
|
||
<div class="text-center mb-14" data-aos="fade-up">
|
||
<span class="text-brand font-semibold text-sm uppercase tracking-wider">Results</span>
|
||
<h2 class="mt-2 text-3xl md:text-4xl font-bold">Before & After</h2>
|
||
<p class="mt-4 text-muted-foreground max-w-xl mx-auto">See the dramatic transformations we deliver for our
|
||
customers.</p>
|
||
</div>
|
||
<div class="grid sm:grid-cols-2 lg:grid-cols-3 gap-6">
|
||
|
||
<div class="group rounded-2xl overflow-hidden shadow-md hover:shadow-xl transition-shadow" data-aos="fade-right"
|
||
data-aos-delay="100">
|
||
<img src="assets/before-after-1.jpg" alt="Garage cleanout"
|
||
class="w-full h-84 object-cover group-hover:scale-105 transition-transform duration-500" loading="lazy" />
|
||
</div>
|
||
|
||
<div class="group rounded-2xl overflow-hidden shadow-md hover:shadow-xl transition-shadow" data-aos="fade-up"
|
||
data-aos-delay="200">
|
||
<img src="assets/before-after-2.jpg" alt="Yard cleanup"
|
||
class="w-full h-84 object-cover group-hover:scale-105 transition-transform duration-500" loading="lazy" />
|
||
</div>
|
||
|
||
<div class="group rounded-2xl overflow-hidden shadow-md hover:shadow-xl transition-shadow" data-aos="fade-left"
|
||
data-aos-delay="300">
|
||
<img src="assets/before-after-3.jpg" alt="Office cleanout"
|
||
class="w-full h-84 object-cover group-hover:scale-105 transition-transform duration-500" loading="lazy" />
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============ TESTIMONIALS ============ -->
|
||
<section class="section-padding bg-background">
|
||
<div class="container-main">
|
||
<div class="text-center mb-14" data-aos="fade-up">
|
||
<span class="text-brand font-semibold text-sm uppercase tracking-wider">Testimonials</span>
|
||
<h2 class="mt-2 text-3xl md:text-4xl font-bold">What Our Customers Say</h2>
|
||
</div>
|
||
<div class="max-w-2xl mx-auto text-center" data-aos="zoom-in">
|
||
<i data-lucide="quote" class="w-10 h-10 text-brand/30 mx-auto mb-4"></i>
|
||
<p id="tText" class="text-lg leading-relaxed mb-6"></p>
|
||
<div id="tStars" class="flex justify-center gap-1 mb-3"></div>
|
||
<p id="tName" class="font-bold"></p>
|
||
<p id="tLocation" class="text-sm text-muted-foreground"></p>
|
||
<div class="flex justify-center gap-4 mt-8">
|
||
<button id="tPrev"
|
||
class="w-10 h-10 rounded-full border border-border flex items-center justify-center hover:bg-muted transition-colors"
|
||
aria-label="Previous"><i data-lucide="chevron-left" class="w-5 h-5"></i></button>
|
||
<button id="tNext"
|
||
class="w-10 h-10 rounded-full border border-border flex items-center justify-center hover:bg-muted transition-colors"
|
||
aria-label="Next"><i data-lucide="chevron-right" class="w-5 h-5"></i></button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
<script>
|
||
window.__testimonials = [
|
||
{
|
||
name: 'Sarah Mitchell', location: 'Homeowner', rating: 5,
|
||
text: 'CleanHaul was incredible! They showed up on time, cleared out our entire garage in under two hours, and the price was very fair. Highly recommend!'
|
||
},
|
||
{
|
||
name: 'James Rodriguez', location: 'Business Owner', rating: 5,
|
||
text: 'We used CleanHaul for our office relocation. They handled all the old furniture and equipment disposal professionally. Will use again for sure.'
|
||
},
|
||
{
|
||
name: 'Emily Chen', location: 'Homeowner', rating: 5,
|
||
text: 'Same-day service that actually delivered! Called in the morning, they were here by afternoon. Friendly crew, great work. Five stars all around.'
|
||
},
|
||
];
|
||
</script>
|
||
|
||
<!-- ============ CTA SECTION ============ -->
|
||
<section class="py-20 bg-brand relative overflow-hidden">
|
||
<div class="absolute inset-0 opacity-10">
|
||
<div class="absolute top-0 left-0 w-72 h-72 bg-white rounded-full -translate-x-1/2 -translate-y-1/2"></div>
|
||
<div class="absolute bottom-0 right-0 w-96 h-96 bg-white rounded-full translate-x-1/3 translate-y-1/3"></div>
|
||
</div>
|
||
<div class="container-main relative text-center" data-aos="fade-up">
|
||
<h2 class="text-3xl md:text-4xl lg:text-5xl font-extrabold text-white mb-4">Need Junk Removed Today?</h2>
|
||
<p class="text-lg text-white/80 mb-8 max-w-lg mx-auto">Don't let clutter take over. Get fast, reliable junk
|
||
removal at prices you'll love.</p>
|
||
<div class="flex flex-wrap justify-center gap-4">
|
||
<a href="contact.html" class="btn-brand-dark btn-xl">Book Service</a>
|
||
<a href="tel:+18005551234" class="btn-brand-outline btn-xl" style="border-color:#fff; color:#fff;"><i
|
||
data-lucide="phone" class="w-5 h-5"></i>Call Now</a>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============ QUOTE FORM ============ -->
|
||
<section class="section-padding bg-background">
|
||
<div class="container-main">
|
||
<div class="max-w-3xl mx-auto">
|
||
<div class="text-center mb-10" data-aos="fade-up">
|
||
<span class="text-brand font-semibold text-sm uppercase tracking-wider">Get Started</span>
|
||
<h2 class="mt-2 text-3xl md:text-4xl font-bold">Request a Free Quote</h2>
|
||
<p class="mt-4 text-muted-foreground">Fill out the form below and we'll get back to you within 24 hours.</p>
|
||
</div>
|
||
|
||
<form id="bookingForm" class="grid sm:grid-cols-2 gap-4" data-aos="fade-up" data-aos-delay="200">
|
||
<input type="text" placeholder="Full Name" required
|
||
class="rounded-xl border border-border bg-white px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-brand" />
|
||
<input type="tel" placeholder="Phone Number" required
|
||
class="rounded-xl border border-border bg-white px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-brand" />
|
||
<input type="email" placeholder="Email Address" required
|
||
class="rounded-xl border border-border bg-white px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-brand" />
|
||
<select required
|
||
class="rounded-xl border border-border bg-white px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-brand text-muted-foreground">
|
||
<option value="" disabled selected>Service Type</option>
|
||
<option>Household Junk Removal</option>
|
||
<option>Office Cleanouts</option>
|
||
<option>Construction Debris</option>
|
||
<option>Yard Waste Removal</option>
|
||
</select>
|
||
<input type="text" placeholder="Pickup Address" required
|
||
class="sm:col-span-2 rounded-xl border border-border bg-white px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-brand" />
|
||
<textarea placeholder="Tell us about your junk removal needs..." rows="4"
|
||
class="sm:col-span-2 rounded-xl border border-border bg-white px-4 py-3 text-sm focus:outline-none focus:ring-2 focus:ring-brand resize-none"></textarea>
|
||
<div class="sm:col-span-2"><button type="submit" class="btn-brand btn-xl w-full sm:w-auto">Request Free
|
||
Quote</button></div>
|
||
</form>
|
||
<div id="bookingSuccess" class="hidden text-center py-12" data-aos="scale-in">
|
||
<div class="w-16 h-16 rounded-full bg-brand-accent flex items-center justify-center mx-auto mb-4"><i
|
||
data-lucide="send" class="w-7 h-7 text-brand"></i></div>
|
||
<h3 class="text-2xl font-bold mb-2">Thank You!</h3>
|
||
<p class="text-muted-foreground">We'll get back to you within 24 hours with a free quote.</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</section>
|
||
|
||
<!-- ============ ENHANCED FOOTER ============ -->
|
||
<footer class="bg-brand-dark text-white">
|
||
<!-- Main Footer -->
|
||
<div class="container-main section-padding pb-8">
|
||
<div class="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-5 gap-10">
|
||
|
||
<!-- Brand Column -->
|
||
<div class="lg:col-span-1">
|
||
<div class="flex items-center gap-2 mb-4">
|
||
<i data-lucide="truck" class="w-7 h-7 text-brand"></i>
|
||
<span class="text-xl font-bold font-heading">Clean<span class="text-brand">Haul</span></span>
|
||
</div>
|
||
<p class="text-sm text-white/70 leading-relaxed mb-4">Fast, affordable, and eco-friendly junk removal
|
||
services. We handle the heavy lifting so you don't have to.</p>
|
||
<!-- Social Media Links -->
|
||
<div class="flex gap-3">
|
||
<!-- Facebook -->
|
||
<a href="#"
|
||
class="w-9 h-9 rounded-full bg-white/10 flex items-center justify-center hover:bg-brand transition-colors"
|
||
aria-label="Facebook">
|
||
<svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="0 0 24 24" fill="currentColor">
|
||
<path
|
||
d="M22 12.07C22 6.5 17.52 2 12 2S2 6.5 2 12.07c0 5.02 3.66 9.18 8.44 9.93v-7.03H7.9v-2.9h2.54V9.85c0-2.52 1.49-3.92 3.78-3.92 1.09 0 2.23.2 2.23.2v2.47H15.2c-1.24 0-1.63.78-1.63 1.57v1.89h2.77l-.44 2.9h-2.33V22c4.78-.75 8.43-4.91 8.43-9.93z" />
|
||
</svg>
|
||
</a>
|
||
|
||
<!-- Instagram -->
|
||
<a href="#"
|
||
class="w-9 h-9 rounded-full bg-white/10 flex items-center justify-center hover:bg-brand transition-colors"
|
||
aria-label="Instagram">
|
||
<svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="0 0 24 24" fill="currentColor">
|
||
<path
|
||
d="M7 2C4.24 2 2 4.24 2 7v10c0 2.76 2.24 5 5 5h10c2.76 0 5-2.24 5-5V7c0-2.76-2.24-5-5-5H7zm10 2a3 3 0 0 1 3 3v10a3 3 0 0 1-3 3H7a3 3 0 0 1-3-3V7a3 3 0 0 1 3-3h10zm-5 3.5A5.5 5.5 0 1 0 17.5 13 5.51 5.51 0 0 0 12 7.5zm0 2A3.5 3.5 0 1 1 8.5 13 3.5 3.5 0 0 1 12 9.5zm5.75-3.25a1.25 1.25 0 1 0 1.25 1.25 1.25 1.25 0 0 0-1.25-1.25z" />
|
||
</svg>
|
||
</a>
|
||
|
||
<!-- X (Twitter) -->
|
||
<a href="#"
|
||
class="w-9 h-9 rounded-full bg-white/10 flex items-center justify-center hover:bg-brand transition-colors"
|
||
aria-label="X">
|
||
<svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="0 0 24 24" fill="currentColor">
|
||
<path
|
||
d="M18.9 2H22l-6.77 7.74L23.2 22h-6.26l-4.9-6.4L6.45 22H3.34l7.24-8.28L.8 2h6.36l4.43 5.84L18.9 2zm-1.1 18h1.73L6.26 3.9H4.4L17.8 20z" />
|
||
</svg>
|
||
</a>
|
||
|
||
<!-- LinkedIn -->
|
||
<a href="#"
|
||
class="w-9 h-9 rounded-full bg-white/10 flex items-center justify-center hover:bg-brand transition-colors"
|
||
aria-label="LinkedIn">
|
||
<svg xmlns="http://www.w3.org/2000/svg" class="w-4 h-4" viewBox="0 0 24 24" fill="currentColor">
|
||
<path
|
||
d="M4.98 3.5A2.48 2.48 0 1 0 5 8.46a2.48 2.48 0 0 0-.02-4.96zM3 9h4v12H3zM9 9h3.83v1.71h.05c.53-1.01 1.84-2.08 3.79-2.08C20.22 8.63 21 10.97 21 14v7h-4v-6.21c0-1.48-.03-3.39-2.06-3.39-2.07 0-2.39 1.61-2.39 3.28V21H9z" />
|
||
</svg>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
<!-- Services Column -->
|
||
<div>
|
||
<h4 class="font-semibold text-lg mb-4">Services</h4>
|
||
<ul class="space-y-2 text-sm text-white/70">
|
||
<li><a href="services.html" class="hover:text-brand transition-colors">Household Junk Removal</a></li>
|
||
<li><a href="services.html" class="hover:text-brand transition-colors">Office Cleanouts</a></li>
|
||
<li><a href="services.html" class="hover:text-brand transition-colors">Construction Debris</a></li>
|
||
<li><a href="services.html" class="hover:text-brand transition-colors">Yard Waste Removal</a></li>
|
||
<li><a href="services.html" class="hover:text-brand transition-colors">Appliance Removal</a></li>
|
||
<li><a href="services.html" class="hover:text-brand transition-colors">Furniture Disposal</a></li>
|
||
</ul>
|
||
</div>
|
||
<!-- Quick Links Column -->
|
||
<div>
|
||
<h4 class="font-semibold text-lg mb-4">Quick Links</h4>
|
||
<ul class="space-y-2 text-sm text-white/70">
|
||
<li><a href="index.html" class="hover:text-brand transition-colors">Home</a></li>
|
||
<li><a href="pricing.html" class="hover:text-brand transition-colors">Pricing</a></li>
|
||
<li><a href="about.html" class="hover:text-brand transition-colors">About Us</a></li>
|
||
<li><a href="contact.html" class="hover:text-brand transition-colors">Contact</a></li>
|
||
<li><a href="blog-detail.html" class="hover:text-brand transition-colors">Blog</a></li>
|
||
<li><a href="faq.html" class="hover:text-brand transition-colors">FAQ</a></li>
|
||
</ul>
|
||
</div>
|
||
<!-- Service Areas Column -->
|
||
<div>
|
||
<h4 class="font-semibold text-lg mb-4">Service Areas</h4>
|
||
<ul class="space-y-2 text-sm text-white/70">
|
||
<li class="flex items-center gap-2"><i data-lucide="map-pin"
|
||
class="w-3.5 h-3.5 text-brand flex-shrink-0"></i>Downtown Metro</li>
|
||
<li class="flex items-center gap-2"><i data-lucide="map-pin"
|
||
class="w-3.5 h-3.5 text-brand flex-shrink-0"></i>North Suburbs</li>
|
||
<li class="flex items-center gap-2"><i data-lucide="map-pin"
|
||
class="w-3.5 h-3.5 text-brand flex-shrink-0"></i>South County</li>
|
||
<li class="flex items-center gap-2"><i data-lucide="map-pin"
|
||
class="w-3.5 h-3.5 text-brand flex-shrink-0"></i>East Valley</li>
|
||
<li class="flex items-center gap-2"><i data-lucide="map-pin"
|
||
class="w-3.5 h-3.5 text-brand flex-shrink-0"></i>West Hills</li>
|
||
<li class="flex items-center gap-2"><i data-lucide="map-pin"
|
||
class="w-3.5 h-3.5 text-brand flex-shrink-0"></i>Surrounding Counties</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<!-- Contact & Business Hours Column -->
|
||
<div>
|
||
<h4 class="font-semibold text-lg mb-4">Contact & Hours</h4>
|
||
<ul class="space-y-3 text-sm text-white/70">
|
||
<li class="flex items-center gap-2"><i data-lucide="phone" class="w-4 h-4 text-brand flex-shrink-0"></i><a
|
||
href="tel:+18005551234" class="hover:text-brand">(800) 555-1234</a></li>
|
||
<li class="flex items-center gap-2"><i data-lucide="mail" class="w-4 h-4 text-brand flex-shrink-0"></i><a
|
||
href="mailto:info@cleanhaul.com" class="hover:text-brand">info@cleanhaul.com</a></li>
|
||
<li class="flex items-start gap-2"><i data-lucide="map-pin"
|
||
class="w-4 h-4 text-brand flex-shrink-0 mt-0.5"></i><span>123 Clean Street, Suite 100<br />Metro City,
|
||
ST 12345</span></li>
|
||
<li class="border-t border-white/10 pt-3 mt-3">
|
||
<p class="font-semibold text-white mb-1">Business Hours</p>
|
||
<p class="text-xs">Mon – Fri: 6:00 AM – 8:00 PM</p>
|
||
<p class="text-xs">Saturday: 7:00 AM – 6:00 PM</p>
|
||
<p class="text-xs">Sunday: 8:00 AM – 4:00 PM</p>
|
||
</li>
|
||
<li class="border-t border-white/10 pt-3 mt-3">
|
||
<p class="font-semibold text-white mb-1">24/7 Support</p>
|
||
<p class="text-xs">Emergency services available</p>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Newsletter Signup -->
|
||
<div class="mt-10 pt-8 border-t border-white/10">
|
||
<div class="flex flex-col md:flex-row items-start md:items-center justify-between gap-6">
|
||
<div>
|
||
<h4 class="font-semibold text-lg mb-1">Subscribe to Our Newsletter</h4>
|
||
<p class="text-sm text-white/60">Get tips, special offers, and updates straight to your inbox.</p>
|
||
</div>
|
||
<div class="flex w-full md:w-auto gap-2">
|
||
<input type="email" placeholder="Enter your email"
|
||
class="footer-newsletter-input flex-1 md:w-64 rounded-xl bg-white/10 border border-white/20 px-4 py-3 text-sm text-white placeholder:text-white/40 focus:outline-none focus:ring-2 focus:ring-brand transition-all" />
|
||
<button class="btn-brand btn-lg whitespace-nowrap">Subscribe</button>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Payment Methods & Badges -->
|
||
<div class="mt-8 pt-8 border-t border-white/10">
|
||
<div class="flex flex-col md:flex-row items-center justify-between gap-6">
|
||
<div class="flex items-center gap-4 flex-wrap justify-center">
|
||
<span class="text-sm text-white/50">We Accept:</span>
|
||
<span class="px-3 py-1.5 rounded-lg bg-white/10 text-xs font-semibold text-white/80">💳 Visa</span>
|
||
<span class="px-3 py-1.5 rounded-lg bg-white/10 text-xs font-semibold text-white/80">💳 Mastercard</span>
|
||
<span class="px-3 py-1.5 rounded-lg bg-white/10 text-xs font-semibold text-white/80">💳 Amex</span>
|
||
<span class="px-3 py-1.5 rounded-lg bg-white/10 text-xs font-semibold text-white/80">💵 Cash</span>
|
||
<span class="px-3 py-1.5 rounded-lg bg-white/10 text-xs font-semibold text-white/80">📱 Apple Pay</span>
|
||
</div>
|
||
<div class="flex items-center gap-4 flex-wrap justify-center">
|
||
<span
|
||
class="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full bg-brand/20 text-brand text-xs font-semibold border border-brand/30"><i
|
||
data-lucide="shield-check" class="w-3.5 h-3.5"></i>Licensed & Insured</span>
|
||
<span
|
||
class="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full bg-brand/20 text-brand text-xs font-semibold border border-brand/30"><i
|
||
data-lucide="award" class="w-3.5 h-3.5"></i>5-Star Rated</span>
|
||
<span
|
||
class="inline-flex items-center gap-1.5 px-3 py-1.5 rounded-full bg-brand/20 text-brand text-xs font-semibold border border-brand/30"><i
|
||
data-lucide="leaf" class="w-3.5 h-3.5"></i>Eco Certified</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Bottom Bar -->
|
||
<div class="border-t border-white/10">
|
||
<div
|
||
class="container-main py-6 flex flex-col md:flex-row items-center justify-between gap-4 text-center md:text-left">
|
||
<p class="text-sm text-white/50">© <span id="year"></span> CleanHaul. All rights reserved.</p>
|
||
<div class="flex gap-6 text-sm text-white/50">
|
||
<a href="pricing.html" class="hover:text-brand transition-colors">Privacy Policy</a>
|
||
<a href="terms.html" class="hover:text-brand transition-colors">Terms of Service</a>
|
||
<a href="faq.html" class="hover:text-brand transition-colors">FAQs</a>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</footer>
|
||
<!-- ============ FLOATING BUTTONS ============ -->
|
||
<a href="tel:+18005551234"
|
||
class="md:hidden fixed bottom-6 left-6 z-50 w-14 h-14 rounded-full bg-brand text-white shadow-xl flex items-center justify-center hover:scale-110 transition-transform animate-pulse-grow"
|
||
aria-label="Call now">
|
||
<i data-lucide="phone" class="w-6 h-6"></i>
|
||
</a>
|
||
|
||
<button id="scrollTop"
|
||
class="fixed bottom-6 right-6 z-50 w-12 h-12 rounded-full bg-brand text-white shadow-xl items-center justify-center hover:scale-110 transition-all hidden"
|
||
aria-label="Scroll to top">
|
||
<i data-lucide="arrow-up" class="w-5 h-5"></i>
|
||
</button>
|
||
|
||
<!-- ============ SCRIPTS ============ -->
|
||
<script>
|
||
lucide.createIcons();
|
||
|
||
// ===== GLOBAL AOS OBSERVER =====
|
||
let aosObserver = null;
|
||
|
||
function initAOS() {
|
||
// Disconnect any existing observer to avoid duplicate triggers
|
||
if (aosObserver) {
|
||
aosObserver.disconnect();
|
||
aosObserver = null;
|
||
}
|
||
|
||
aosObserver = new IntersectionObserver((entries) => {
|
||
entries.forEach(entry => {
|
||
if (entry.isIntersecting) {
|
||
entry.target.classList.add('aos-in');
|
||
// Optional: stop observing after animation
|
||
// aosObserver.unobserve(entry.target);
|
||
}
|
||
});
|
||
}, {
|
||
threshold: 0.15,
|
||
rootMargin: '0px 0px -40px 0px'
|
||
});
|
||
|
||
// Observe all elements with [data-aos]
|
||
document.querySelectorAll('[data-aos]').forEach(el => {
|
||
// Remove any previously added inline styles that might block animation
|
||
el.style.opacity = '';
|
||
el.style.transform = '';
|
||
aosObserver.observe(el);
|
||
});
|
||
}
|
||
|
||
// ===== PRELOADER =====
|
||
window.addEventListener('load', () => {
|
||
const preloader = document.getElementById('preloader');
|
||
setTimeout(() => {
|
||
preloader.classList.add('hidden-preloader');
|
||
// Re‑initialize AOS after the loader is fully hidden
|
||
setTimeout(() => {
|
||
initAOS();
|
||
}, 150); // small delay to ensure smooth transition
|
||
}, 1800);
|
||
});
|
||
|
||
// ===== NAVBAR SCROLL =====
|
||
const nav = document.getElementById('navbar');
|
||
window.addEventListener('scroll', () => {
|
||
if (window.scrollY > 20) {
|
||
nav.classList.remove('bg-transparent');
|
||
nav.classList.add('bg-white/95', 'backdrop-blur-md', 'shadow-lg');
|
||
} else {
|
||
nav.classList.add('bg-transparent');
|
||
nav.classList.remove('bg-white/95', 'backdrop-blur-md', 'shadow-lg');
|
||
}
|
||
const st = document.getElementById('scrollTop');
|
||
if (st) {
|
||
if (window.scrollY > 400) {
|
||
st.classList.remove('hidden');
|
||
st.classList.add('flex');
|
||
} else {
|
||
st.classList.add('hidden');
|
||
st.classList.remove('flex');
|
||
}
|
||
}
|
||
});
|
||
|
||
// ===== MOBILE MENU =====
|
||
const toggle = document.getElementById('mobileToggle');
|
||
const menu = document.getElementById('mobileMenu');
|
||
toggle?.addEventListener('click', () => {
|
||
menu.classList.toggle('hidden');
|
||
const icon = toggle.querySelector('i');
|
||
icon.setAttribute('data-lucide', menu.classList.contains('hidden') ? 'menu' : 'x');
|
||
lucide.createIcons();
|
||
});
|
||
|
||
// ===== SCROLL TOP =====
|
||
document.getElementById('scrollTop')?.addEventListener('click', () =>
|
||
window.scrollTo({ top: 0, behavior: 'smooth' })
|
||
);
|
||
|
||
// ===== YEAR =====
|
||
const y = document.getElementById('year');
|
||
if (y) y.textContent = new Date().getFullYear();
|
||
|
||
// ===== BOOKING FORM =====
|
||
const form = document.getElementById('bookingForm');
|
||
form?.addEventListener('submit', (e) => {
|
||
e.preventDefault();
|
||
form.style.display = 'none';
|
||
const success = document.getElementById('bookingSuccess');
|
||
success.classList.remove('hidden');
|
||
success.setAttribute('data-aos', 'scale-in');
|
||
success.style.opacity = '0';
|
||
success.style.transform = 'scale(0.85)';
|
||
setTimeout(() => {
|
||
success.classList.add('aos-in');
|
||
}, 50);
|
||
});
|
||
|
||
// ===== TESTIMONIAL SLIDER =====
|
||
const testimonials = window.__testimonials || [];
|
||
let tIdx = 0;
|
||
|
||
function renderTestimonial() {
|
||
const t = testimonials[tIdx];
|
||
if (!t) return;
|
||
const tTextEl = document.getElementById('tText');
|
||
const tNameEl = document.getElementById('tName');
|
||
const tLocationEl = document.getElementById('tLocation');
|
||
const starsEl = document.getElementById('tStars');
|
||
|
||
tTextEl.style.opacity = '0';
|
||
tTextEl.style.transform = 'translateY(10px)';
|
||
tNameEl.style.opacity = '0';
|
||
tLocationEl.style.opacity = '0';
|
||
starsEl.style.opacity = '0';
|
||
|
||
setTimeout(() => {
|
||
tTextEl.textContent = '"' + t.text + '"';
|
||
tNameEl.textContent = t.name;
|
||
tLocationEl.textContent = t.location;
|
||
starsEl.innerHTML = '';
|
||
for (let i = 0; i < t.rating; i++)
|
||
starsEl.innerHTML += '<i data-lucide="star" class="w-5 h-5 text-brand-secondary fill-current"></i>';
|
||
lucide.createIcons();
|
||
|
||
tTextEl.style.transition = 'all 0.4s ease';
|
||
tTextEl.style.opacity = '1';
|
||
tTextEl.style.transform = 'translateY(0)';
|
||
tNameEl.style.transition = 'all 0.4s ease 0.1s';
|
||
tNameEl.style.opacity = '1';
|
||
tLocationEl.style.transition = 'all 0.4s ease 0.15s';
|
||
tLocationEl.style.opacity = '1';
|
||
starsEl.style.transition = 'all 0.4s ease 0.05s';
|
||
starsEl.style.opacity = '1';
|
||
}, 300);
|
||
}
|
||
|
||
document.getElementById('tPrev')?.addEventListener('click', () => {
|
||
tIdx = (tIdx - 1 + testimonials.length) % testimonials.length;
|
||
renderTestimonial();
|
||
});
|
||
document.getElementById('tNext')?.addEventListener('click', () => {
|
||
tIdx = (tIdx + 1) % testimonials.length;
|
||
renderTestimonial();
|
||
});
|
||
if (testimonials.length) renderTestimonial();
|
||
|
||
// ===== NEWSLETTER SUBSCRIPTION =====
|
||
const newsletterBtn = document.querySelector('.footer-newsletter-input + .btn-brand');
|
||
const newsletterInput = document.querySelector('.footer-newsletter-input');
|
||
newsletterBtn?.addEventListener('click', () => {
|
||
const email = newsletterInput.value.trim();
|
||
if (email && email.includes('@') && email.includes('.')) {
|
||
newsletterInput.value = '';
|
||
newsletterInput.placeholder = 'Subscribed! ✓';
|
||
setTimeout(() => { newsletterInput.placeholder = 'Enter your email'; }, 3000);
|
||
} else if (!email) {
|
||
newsletterInput.placeholder = 'Please enter your email';
|
||
newsletterInput.style.borderColor = '#ef4444';
|
||
setTimeout(() => {
|
||
newsletterInput.style.borderColor = '';
|
||
newsletterInput.placeholder = 'Enter your email';
|
||
}, 2000);
|
||
} else {
|
||
newsletterInput.placeholder = 'Invalid email address';
|
||
newsletterInput.style.borderColor = '#ef4444';
|
||
setTimeout(() => {
|
||
newsletterInput.style.borderColor = '';
|
||
newsletterInput.placeholder = 'Enter your email';
|
||
}, 2000);
|
||
}
|
||
});
|
||
|
||
// ===== INITIAL AOS CALL (will be re‑called after loader) =====
|
||
// We still call it once so elements that appear before the loader hides are ready.
|
||
initAOS();
|
||
|
||
// Re‑create icons after all dynamic changes
|
||
setTimeout(() => lucide.createIcons(), 200);
|
||
</script>
|
||
</body>
|
||
|
||
</html> |