13 Commits

Author SHA1 Message Date
76aff25a8c Update theme colors 2026-03-03 15:18:58 +00:00
bbe5ac44cb Update theme colors 2026-03-03 15:18:38 +00:00
59710b9b9a Update theme colors 2026-03-03 15:18:19 +00:00
f6c8791436 Update theme colors 2026-03-03 15:17:53 +00:00
fdba47d839 Update src/app/page.tsx 2026-03-03 15:17:38 +00:00
e941d34b78 Update src/app/appointment/page.tsx 2026-03-03 15:17:38 +00:00
5e1b4a64fc Update src/app/shop/page.tsx 2026-03-03 15:15:56 +00:00
ee265f4698 Update src/app/services/page.tsx 2026-03-03 15:15:55 +00:00
70d4bd695d Update src/app/page.tsx 2026-03-03 15:15:55 +00:00
d558dab87a Update src/app/layout.tsx 2026-03-03 15:15:54 +00:00
fb6131d004 Update src/app/contact/page.tsx 2026-03-03 15:15:54 +00:00
59f2ecc514 Add src/app/appointment/page.tsx 2026-03-03 15:15:53 +00:00
0b2b96e336 Merge version_1 into main
Merge version_1 into main
2026-03-03 15:10:07 +00:00
7 changed files with 323 additions and 225 deletions

View File

@@ -0,0 +1,253 @@
"use client";
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import { useState } from "react";
import Link from "next/link";
import NavbarLayoutFloatingInline from "@/components/navbar/NavbarLayoutFloatingInline";
import HeroSplit from "@/components/sections/hero/HeroSplit";
import ContactSplit from "@/components/sections/contact/ContactSplit";
import FeatureBorderGlow from "@/components/sections/feature/featureBorderGlow/FeatureBorderGlow";
import ContactCTA from "@/components/sections/contact/ContactCTA";
import FooterCard from "@/components/sections/footer/FooterCard";
import Input from "@/components/form/Input";
import { Calendar, Clock, Eye, Instagram, Facebook, Linkedin, MapPin } from "lucide-react";
export default function AppointmentPage() {
const navItems = [
{ name: "Collections", id: "collections" },
{ name: "Services", id: "services" },
{ name: "About", id: "about" },
{ name: "Contact", id: "contact" },
];
const navButton = {
text: "Book Appointment", href: "/appointment"};
const [formData, setFormData] = useState({
name: "", email: "", phone: "", date: "", time: "", service: "", message: ""});
const handleInputChange = (field: string, value: string) => {
setFormData((prev) => ({
...prev,
[field]: value,
}));
};
const handleSubmit = (e: React.FormEvent) => {
e.preventDefault();
console.log("Appointment booked:", formData);
// Handle form submission here
};
return (
<ThemeProvider
defaultButtonVariant="text-stagger"
defaultTextAnimation="entrance-slide"
borderRadius="rounded"
contentWidth="compact"
sizing="medium"
background="aurora"
cardStyle="solid"
primaryButtonStyle="gradient"
secondaryButtonStyle="solid"
headingFontWeight="bold"
>
{/* Navbar */}
<div id="nav" data-section="nav">
<NavbarLayoutFloatingInline
brandName="Pearle"
navItems={navItems}
button={navButton}
animateOnLoad={true}
/>
</div>
{/* Hero Section */}
<div id="hero" data-section="hero">
<HeroSplit
title="Book Your Perfect Vision Appointment"
description="Schedule a personalized consultation with our certified opticians. We'll help you find the perfect frames and ensure optimal eye health."
background={{ variant: "sparkles-gradient" }}
tag="Professional Eye Care"
tagIcon={Calendar}
tagAnimation="slide-up"
buttons={[
{ text: "Schedule Now", href: "#booking-form" },
{ text: "Learn More", href: "/services" },
]}
buttonAnimation="slide-up"
imageSrc="http://img.b2bpic.net/free-photo/young-businesswoman-portrait-office_1262-1506.jpg?_wi=2"
imageAlt="Professional optician consultation"
mediaAnimation="blur-reveal"
imagePosition="right"
ariaLabel="Appointment booking hero section"
/>
</div>
{/* Booking Form Section */}
<div id="booking-form" data-section="booking-form">
<div className="py-16 md:py-24">
<div className="container mx-auto max-w-3xl px-4">
<div className="mb-12 text-center">
<h2 className="text-3xl md:text-5xl font-bold mb-4">Schedule Your Appointment</h2>
<p className="text-lg text-gray-600">Fill out the form below and we'll confirm your appointment shortly</p>
</div>
<form onSubmit={handleSubmit} className="bg-white rounded-lg p-8 shadow-lg">
<div className="grid grid-cols-1 md:grid-cols-2 gap-6 mb-6">
<div>
<label className="block text-sm font-medium mb-2">Full Name *</label>
<Input
value={formData.name}
onChange={(value) => handleInputChange("name", value)}
placeholder="Your full name"
required
/>
</div>
<div>
<label className="block text-sm font-medium mb-2">Email *</label>
<Input
value={formData.email}
onChange={(value) => handleInputChange("email", value)}
placeholder="your@email.com"
type="email"
required
/>
</div>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-6 mb-6">
<div>
<label className="block text-sm font-medium mb-2">Phone *</label>
<Input
value={formData.phone}
onChange={(value) => handleInputChange("phone", value)}
placeholder="(123) 456-7890"
type="tel"
required
/>
</div>
<div>
<label className="block text-sm font-medium mb-2">Preferred Date *</label>
<Input
value={formData.date}
onChange={(value) => handleInputChange("date", value)}
placeholder="mm/dd/yyyy"
type="date"
required
/>
</div>
</div>
<div className="grid grid-cols-1 md:grid-cols-2 gap-6 mb-6">
<div>
<label className="block text-sm font-medium mb-2">Preferred Time *</label>
<Input
value={formData.time}
onChange={(value) => handleInputChange("time", value)}
placeholder="Select time"
type="time"
required
/>
</div>
<div>
<label className="block text-sm font-medium mb-2">Service Type *</label>
<select
value={formData.service}
onChange={(e) => handleInputChange("service", e.target.value)}
className="w-full px-4 py-2 border border-gray-300 rounded bg-white"
required
>
<option value="">Select a service</option>
<option value="eye-exam">Comprehensive Eye Exam</option>
<option value="frame-fitting">Frame Fitting Consultation</option>
<option value="adjustment">Frame Adjustment & Repair</option>
<option value="lens-replacement">Lens Replacement</option>
<option value="general">General Consultation</option>
</select>
</div>
</div>
<div className="mb-6">
<label className="block text-sm font-medium mb-2">Additional Notes</label>
<textarea
value={formData.message}
onChange={(e) => handleInputChange("message", e.target.value)}
placeholder="Tell us about your needs or preferences..."
className="w-full px-4 py-2 border border-gray-300 rounded bg-white"
rows={4}
/>
</div>
<button
type="submit"
className="w-full bg-blue-600 hover:bg-blue-700 text-white font-semibold py-3 rounded transition"
>
Book Appointment
</button>
</form>
</div>
</div>
</div>
{/* Service Types */}
<div id="service-types" data-section="service-types">
<FeatureBorderGlow
title="Our Professional Services"
description="Choose from our range of comprehensive eye care and optical services"
features={[
{
icon: Eye,
title: "Comprehensive Eye Exams", description: "Full vision assessments by certified optometrists using advanced diagnostic equipment"},
{
icon: Calendar,
title: "Frame Fitting Consultation", description: "Personalized styling consultations to find frames that suit your style and face shape"},
{
icon: Clock,
title: "Same-Day Adjustments", description: "Quick frame adjustments, repairs, and lens replacements to keep you seeing clearly"},
]}
animationType="slide-up"
textboxLayout="default"
useInvertedBackground={true}
tag="Quality Services"
/>
</div>
{/* Locations Section */}
<div id="locations" data-section="locations">
<ContactCTA
tag="Visit Us"
tagIcon={MapPin}
title="Visit Our Premium Boutiques"
description="We have multiple convenient locations ready to serve you with expert care. Walk in or book ahead for priority service."
buttons={[
{ text: "Find Locations", href: "/contact" },
{ text: "Call Us", href: "tel:+1-800-PEARLE-1" },
]}
background={{ variant: "radial-gradient" }}
useInvertedBackground={false}
buttonAnimation="slide-up"
/>
</div>
{/* Footer */}
<div id="footer" data-section="footer">
<FooterCard
logoText="Pearle"
copyrightText="© 2025 Pearle Eyewear. All rights reserved. | Premium Vision Solutions"
socialLinks={[
{
icon: Instagram,
href: "https://instagram.com/pearleeyewear", ariaLabel: "Follow Pearle on Instagram"},
{
icon: Facebook,
href: "https://facebook.com/pearleeyewear", ariaLabel: "Visit Pearle on Facebook"},
{
icon: Linkedin,
href: "https://linkedin.com/company/pearleeyewear", ariaLabel: "Connect with Pearle on LinkedIn"},
]}
/>
</div>
</ThemeProvider>
);
}

View File

@@ -17,9 +17,7 @@ export default function ContactPage() {
]; ];
const navButton = { const navButton = {
text: "Book Appointment", text: "Book Appointment", href: "/appointment"};
href: "/appointment",
};
return ( return (
<ThemeProvider <ThemeProvider
@@ -69,11 +67,7 @@ export default function ContactPage() {
tag="Hours & Locations" tag="Hours & Locations"
tagIcon={Star} tagIcon={Star}
names={[ names={[
"Downtown Location", "Downtown Location", "Midtown Gallery", "Westside Studio", "Northpoint Boutique"]}
"Midtown Gallery",
"Westside Studio",
"Northpoint Boutique",
]}
textboxLayout="default" textboxLayout="default"
useInvertedBackground={false} useInvertedBackground={false}
speed={40} speed={40}
@@ -89,22 +83,16 @@ export default function ContactPage() {
socialLinks={[ socialLinks={[
{ {
icon: Instagram, icon: Instagram,
href: "https://instagram.com/pearleeyewear", href: "https://instagram.com/pearleeyewear", ariaLabel: "Follow Pearle on Instagram"},
ariaLabel: "Follow Pearle on Instagram",
},
{ {
icon: Facebook, icon: Facebook,
href: "https://facebook.com/pearleeyewear", href: "https://facebook.com/pearleeyewear", ariaLabel: "Visit Pearle on Facebook"},
ariaLabel: "Visit Pearle on Facebook",
},
{ {
icon: Linkedin, icon: Linkedin,
href: "https://linkedin.com/company/pearleeyewear", href: "https://linkedin.com/company/pearleeyewear", ariaLabel: "Connect with Pearle on LinkedIn"},
ariaLabel: "Connect with Pearle on LinkedIn",
},
]} ]}
/> />
</div> </div>
</ThemeProvider> </ThemeProvider>
); );
} }

View File

@@ -4,38 +4,23 @@ import { Inter } from "next/font/google";
import "./globals.css"; import "./globals.css";
const publicSans = Public_Sans({ const publicSans = Public_Sans({
variable: "--font-public-sans", variable: "--font-public-sans", subsets: ["latin"],
subsets: ["latin"],
}); });
const inter = Inter({ const inter = Inter({
variable: "--font-inter", variable: "--font-inter", subsets: ["latin"],
subsets: ["latin"],
}); });
export const metadata: Metadata = { export const metadata: Metadata = {
title: "Pearle - Premium Eyewear & Expert Optical Services", title: "Pearle - Premium Eyewear & Expert Optical Services", description: "Discover premium eyewear and expert optical services at Pearle. Certified opticians, personalized frame fitting, and eye care solutions. Book your appointment today.", keywords: "eyewear, optical services, glasses, frames, optician, eye exam, premium eyewear, frame fitting, vision care", openGraph: {
description: "Discover premium eyewear and expert optical services at Pearle. Certified opticians, personalized frame fitting, and eye care solutions. Book your appointment today.", title: "Pearle - Premium Eyewear & Optical Services", description: "Expert eyewear boutique offering premium frames, professional eye exams, and personalized consultations.", type: "website", siteName: "Pearle", images: [
keywords: "eyewear, optical services, glasses, frames, optician, eye exam, premium eyewear, frame fitting, vision care",
openGraph: {
title: "Pearle - Premium Eyewear & Optical Services",
description: "Expert eyewear boutique offering premium frames, professional eye exams, and personalized consultations.",
type: "website",
siteName: "Pearle",
images: [
{ {
url: "http://img.b2bpic.net/free-photo/pretty-young-girl-with-brunette-hair-stylish-makeup-accessories-wearing-beret-white-red-clothes-holding-door-handle-looking-away_197531-28147.jpg", url: "http://img.b2bpic.net/free-photo/pretty-young-girl-with-brunette-hair-stylish-makeup-accessories-wearing-beret-white-red-clothes-holding-door-handle-looking-away_197531-28147.jpg", alt: "Pearle premium eyewear"},
alt: "Pearle premium eyewear",
},
], ],
}, },
twitter: { twitter: {
card: "summary_large_image", card: "summary_large_image", title: "Pearle - Premium Eyewear", description: "Discover your perfect frames at Pearle. Expert fitting, premium quality, certified opticians.", images: [
title: "Pearle - Premium Eyewear", "http://img.b2bpic.net/free-photo/pretty-young-girl-with-brunette-hair-stylish-makeup-accessories-wearing-beret-white-red-clothes-holding-door-handle-looking-away_197531-28147.jpg"],
description: "Discover your perfect frames at Pearle. Expert fitting, premium quality, certified opticians.",
images: [
"http://img.b2bpic.net/free-photo/pretty-young-girl-with-brunette-hair-stylish-makeup-accessories-wearing-beret-white-red-clothes-holding-door-handle-looking-away_197531-28147.jpg",
],
}, },
robots: { robots: {
index: true, index: true,
@@ -1422,4 +1407,4 @@ export default function RootLayout({
</body> </body>
</html> </html>
); );
} }

View File

@@ -21,9 +21,7 @@ export default function HomePage() {
]; ];
const navButton = { const navButton = {
text: "Book Appointment", text: "Book Appointment", href: "/appointment"};
href: "/appointment",
};
return ( return (
<ThemeProvider <ThemeProvider
@@ -76,19 +74,13 @@ export default function HomePage() {
features={[ features={[
{ {
icon: Eye, icon: Eye,
title: "Free Vision Screening", title: "Free Vision Screening", description: "Comprehensive eye health assessment included with every appointment"},
description: "Comprehensive eye health assessment included with every appointment",
},
{ {
icon: Zap, icon: Zap,
title: "Same-Day Adjustments", title: "Same-Day Adjustments", description: "Quick frame repairs and adjustments to keep you seeing clearly"},
description: "Quick frame repairs and adjustments to keep you seeing clearly",
},
{ {
icon: Heart, icon: Heart,
title: "30-Day Fit Guarantee", title: "30-Day Fit Guarantee", description: "Guaranteed satisfaction or we'll find you the perfect fit"},
description: "Guaranteed satisfaction or we'll find you the perfect fit",
},
]} ]}
animationType="slide-up" animationType="slide-up"
textboxLayout="default" textboxLayout="default"
@@ -104,47 +96,17 @@ export default function HomePage() {
description="Discover our carefully curated selection of premium eyewear for every lifestyle and preference" description="Discover our carefully curated selection of premium eyewear for every lifestyle and preference"
products={[ products={[
{ {
id: "1", id: "1", name: "Everyday Collection", price: "From $149", imageSrc: "http://img.b2bpic.net/free-photo/portrait-beautiful-young-woman-big-city-woman-big-city_169016-66673.jpg?_wi=1", imageAlt: "Everyday eyewear collection"},
name: "Everyday Collection",
price: "From $149",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-beautiful-young-woman-big-city-woman-big-city_169016-66673.jpg?_wi=1",
imageAlt: "Everyday eyewear collection",
},
{ {
id: "2", id: "2", name: "Premium Designer", price: "From $349", imageSrc: "http://img.b2bpic.net/free-photo/pretty-young-girl-with-brunette-hair-stylish-makeup-accessories-wearing-beret-white-red-clothes-holding-door-handle-looking-away_197531-28147.jpg?_wi=2", imageAlt: "Premium designer frames"},
name: "Premium Designer",
price: "From $349",
imageSrc: "http://img.b2bpic.net/free-photo/pretty-young-girl-with-brunette-hair-stylish-makeup-accessories-wearing-beret-white-red-clothes-holding-door-handle-looking-away_197531-28147.jpg?_wi=2",
imageAlt: "Premium designer frames",
},
{ {
id: "3", id: "3", name: "Sport & Active", price: "From $179", imageSrc: "http://img.b2bpic.net/free-photo/young-fit-man-beach-wearing-sunglasses_273609-15952.jpg?_wi=1", imageAlt: "Sports eyewear collection"},
name: "Sport & Active",
price: "From $179",
imageSrc: "http://img.b2bpic.net/free-photo/young-fit-man-beach-wearing-sunglasses_273609-15952.jpg?_wi=1",
imageAlt: "Sports eyewear collection",
},
{ {
id: "4", id: "4", name: "Sunglasses", price: "From $199", imageSrc: "http://img.b2bpic.net/free-photo/young-beautiful-smiling-female-trendy-summer-red-dress-sexy-carefree-woman-posing-near-blue-wall-studio-positive-model-having-fun-cheerful-happy-sunny-day-shadow-from-window_158538-25864.jpg?_wi=1", imageAlt: "Premium sunglasses"},
name: "Sunglasses",
price: "From $199",
imageSrc: "http://img.b2bpic.net/free-photo/young-beautiful-smiling-female-trendy-summer-red-dress-sexy-carefree-woman-posing-near-blue-wall-studio-positive-model-having-fun-cheerful-happy-sunny-day-shadow-from-window_158538-25864.jpg?_wi=1",
imageAlt: "Premium sunglasses",
},
{ {
id: "5", id: "5", name: "Kids Frames", price: "From $99", imageSrc: "http://img.b2bpic.net/free-photo/cute-little-girl-holding-books-isolated-studio_1303-31007.jpg?_wi=1", imageAlt: "Children eyewear"},
name: "Kids Frames",
price: "From $99",
imageSrc: "http://img.b2bpic.net/free-photo/cute-little-girl-holding-books-isolated-studio_1303-31007.jpg?_wi=1",
imageAlt: "Children eyewear",
},
{ {
id: "6", id: "6", name: "Blue-Light Protection", price: "From $129", imageSrc: "http://img.b2bpic.net/free-photo/black-office-business-equipment-black-background_1387-730.jpg?_wi=1", imageAlt: "Blue light filtering glasses"},
name: "Blue-Light Protection",
price: "From $129",
imageSrc: "http://img.b2bpic.net/free-photo/black-office-business-equipment-black-background_1387-730.jpg?_wi=1",
imageAlt: "Blue light filtering glasses",
},
]} ]}
gridVariant="uniform-all-items-equal" gridVariant="uniform-all-items-equal"
animationType="slide-up" animationType="slide-up"
@@ -162,15 +124,7 @@ export default function HomePage() {
tag="Certifications & Guarantees" tag="Certifications & Guarantees"
tagIcon={Star} tagIcon={Star}
names={[ names={[
"Certified Opticians", "Certified Opticians", "Insurance Support", "30-Day Fit Guarantee", "Expert Consultations", "Premium Brands", "Same-Day Service", "Lifetime Support", "Eye Health Leaders"]}
"Insurance Support",
"30-Day Fit Guarantee",
"Expert Consultations",
"Premium Brands",
"Same-Day Service",
"Lifetime Support",
"Eye Health Leaders",
]}
textboxLayout="default" textboxLayout="default"
useInvertedBackground={false} useInvertedBackground={false}
speed={40} speed={40}
@@ -183,41 +137,17 @@ export default function HomePage() {
<TestimonialCardTwelve <TestimonialCardTwelve
testimonials={[ testimonials={[
{ {
id: "1", id: "1", name: "Sarah Mitchell", imageSrc: "http://img.b2bpic.net/free-photo/young-businesswoman-portrait-office_1262-1506.jpg?_wi=1", imageAlt: "Sarah Mitchell, satisfied customer"},
name: "Sarah Mitchell",
imageSrc: "http://img.b2bpic.net/free-photo/young-businesswoman-portrait-office_1262-1506.jpg",
imageAlt: "Sarah Mitchell, satisfied customer",
},
{ {
id: "2", id: "2", name: "James Rodriguez", imageSrc: "http://img.b2bpic.net/free-photo/alone-specialist-handsome-daydreaming-collar_1262-870.jpg", imageAlt: "James Rodriguez, happy client"},
name: "James Rodriguez",
imageSrc: "http://img.b2bpic.net/free-photo/alone-specialist-handsome-daydreaming-collar_1262-870.jpg",
imageAlt: "James Rodriguez, happy client",
},
{ {
id: "3", id: "3", name: "Emily Chen", imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiley-business-woman_23-2148603029.jpg?_wi=1", imageAlt: "Emily Chen, valued customer"},
name: "Emily Chen",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiley-business-woman_23-2148603029.jpg?_wi=1",
imageAlt: "Emily Chen, valued customer",
},
{ {
id: "4", id: "4", name: "Michael Thompson", imageSrc: "http://img.b2bpic.net/free-photo/smiling-businessman-standing-airport_107420-85035.jpg", imageAlt: "Michael Thompson, satisfied customer"},
name: "Michael Thompson",
imageSrc: "http://img.b2bpic.net/free-photo/smiling-businessman-standing-airport_107420-85035.jpg",
imageAlt: "Michael Thompson, satisfied customer",
},
{ {
id: "5", id: "5", name: "Lisa Anderson", imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiley-business-woman_23-2148603029.jpg?_wi=2", imageAlt: "Lisa Anderson, happy client"},
name: "Lisa Anderson",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-smiley-business-woman_23-2148603029.jpg?_wi=2",
imageAlt: "Lisa Anderson, happy client",
},
{ {
id: "6", id: "6", name: "David Kim", imageSrc: "http://img.b2bpic.net/free-photo/close-up-portrait-young-handsome-successful-man_1163-5475.jpg", imageAlt: "David Kim, satisfied customer"},
name: "David Kim",
imageSrc: "http://img.b2bpic.net/free-photo/close-up-portrait-young-handsome-successful-man_1163-5475.jpg",
imageAlt: "David Kim, satisfied customer",
},
]} ]}
cardTitle="Over 5,000 customers have experienced better vision and style with Pearle" cardTitle="Over 5,000 customers have experienced better vision and style with Pearle"
cardTag="Trusted by our community" cardTag="Trusted by our community"
@@ -252,22 +182,16 @@ export default function HomePage() {
socialLinks={[ socialLinks={[
{ {
icon: Instagram, icon: Instagram,
href: "https://instagram.com/pearleeyewear", href: "https://instagram.com/pearleeyewear", ariaLabel: "Follow Pearle on Instagram"},
ariaLabel: "Follow Pearle on Instagram",
},
{ {
icon: Facebook, icon: Facebook,
href: "https://facebook.com/pearleeyewear", href: "https://facebook.com/pearleeyewear", ariaLabel: "Visit Pearle on Facebook"},
ariaLabel: "Visit Pearle on Facebook",
},
{ {
icon: Linkedin, icon: Linkedin,
href: "https://linkedin.com/company/pearleeyewear", href: "https://linkedin.com/company/pearleeyewear", ariaLabel: "Connect with Pearle on LinkedIn"},
ariaLabel: "Connect with Pearle on LinkedIn",
},
]} ]}
/> />
</div> </div>
</ThemeProvider> </ThemeProvider>
); );
} }

View File

@@ -17,9 +17,7 @@ export default function ServicesPage() {
]; ];
const navButton = { const navButton = {
text: "Book Appointment", text: "Book Appointment", href: "/appointment"};
href: "/appointment",
};
return ( return (
<ThemeProvider <ThemeProvider
@@ -52,19 +50,13 @@ export default function ServicesPage() {
features={[ features={[
{ {
icon: Eye, icon: Eye,
title: "Comprehensive Eye Exams", title: "Comprehensive Eye Exams", description: "Full vision assessments by certified optometrists using advanced diagnostic equipment to ensure optimal eye health and prescription accuracy"},
description: "Full vision assessments by certified optometrists using advanced diagnostic equipment to ensure optimal eye health and prescription accuracy",
},
{ {
icon: Zap, icon: Zap,
title: "Expert Frame Fitting", title: "Expert Frame Fitting", description: "Personalized styling consultations to find frames that complement your face shape, lifestyle, and personal preferences"},
description: "Personalized styling consultations to find frames that complement your face shape, lifestyle, and personal preferences",
},
{ {
icon: Heart, icon: Heart,
title: "Adjustments & Repairs", title: "Adjustments & Repairs", description: "Same-day frame adjustments, lens replacements, and professional repairs to keep your eyewear in perfect condition"},
description: "Same-day frame adjustments, lens replacements, and professional repairs to keep your eyewear in perfect condition",
},
]} ]}
animationType="slide-up" animationType="slide-up"
textboxLayout="default" textboxLayout="default"
@@ -98,22 +90,16 @@ export default function ServicesPage() {
socialLinks={[ socialLinks={[
{ {
icon: Instagram, icon: Instagram,
href: "https://instagram.com/pearleeyewear", href: "https://instagram.com/pearleeyewear", ariaLabel: "Follow Pearle on Instagram"},
ariaLabel: "Follow Pearle on Instagram",
},
{ {
icon: Facebook, icon: Facebook,
href: "https://facebook.com/pearleeyewear", href: "https://facebook.com/pearleeyewear", ariaLabel: "Visit Pearle on Facebook"},
ariaLabel: "Visit Pearle on Facebook",
},
{ {
icon: Linkedin, icon: Linkedin,
href: "https://linkedin.com/company/pearleeyewear", href: "https://linkedin.com/company/pearleeyewear", ariaLabel: "Connect with Pearle on LinkedIn"},
ariaLabel: "Connect with Pearle on LinkedIn",
},
]} ]}
/> />
</div> </div>
</ThemeProvider> </ThemeProvider>
); );
} }

View File

@@ -17,9 +17,7 @@ export default function ShopPage() {
]; ];
const navButton = { const navButton = {
text: "Book Appointment", text: "Book Appointment", href: "/appointment"};
href: "/appointment",
};
return ( return (
<ThemeProvider <ThemeProvider
@@ -51,47 +49,17 @@ export default function ShopPage() {
description="Explore our full range of premium eyewear across all categories. From everyday classics to luxury designer frames, find your perfect style." description="Explore our full range of premium eyewear across all categories. From everyday classics to luxury designer frames, find your perfect style."
products={[ products={[
{ {
id: "1", id: "1", name: "Everyday Collection", price: "From $149", imageSrc: "http://img.b2bpic.net/free-photo/portrait-beautiful-young-woman-big-city-woman-big-city_169016-66673.jpg?_wi=2", imageAlt: "Everyday eyewear collection"},
name: "Everyday Collection",
price: "From $149",
imageSrc: "http://img.b2bpic.net/free-photo/portrait-beautiful-young-woman-big-city-woman-big-city_169016-66673.jpg?_wi=2",
imageAlt: "Everyday eyewear collection",
},
{ {
id: "2", id: "2", name: "Premium Designer", price: "From $349", imageSrc: "http://img.b2bpic.net/free-photo/pretty-young-girl-with-brunette-hair-stylish-makeup-accessories-wearing-beret-white-red-clothes-holding-door-handle-looking-away_197531-28147.jpg?_wi=3", imageAlt: "Premium designer frames"},
name: "Premium Designer",
price: "From $349",
imageSrc: "http://img.b2bpic.net/free-photo/pretty-young-girl-with-brunette-hair-stylish-makeup-accessories-wearing-beret-white-red-clothes-holding-door-handle-looking-away_197531-28147.jpg?_wi=3",
imageAlt: "Premium designer frames",
},
{ {
id: "3", id: "3", name: "Sport & Active", price: "From $179", imageSrc: "http://img.b2bpic.net/free-photo/young-fit-man-beach-wearing-sunglasses_273609-15952.jpg?_wi=2", imageAlt: "Sports eyewear collection"},
name: "Sport & Active",
price: "From $179",
imageSrc: "http://img.b2bpic.net/free-photo/young-fit-man-beach-wearing-sunglasses_273609-15952.jpg?_wi=2",
imageAlt: "Sports eyewear collection",
},
{ {
id: "4", id: "4", name: "Sunglasses", price: "From $199", imageSrc: "http://img.b2bpic.net/free-photo/young-beautiful-smiling-female-trendy-summer-red-dress-sexy-carefree-woman-posing-near-blue-wall-studio-positive-model-having-fun-cheerful-happy-sunny-day-shadow-from-window_158538-25864.jpg?_wi=2", imageAlt: "Premium sunglasses"},
name: "Sunglasses",
price: "From $199",
imageSrc: "http://img.b2bpic.net/free-photo/young-beautiful-smiling-female-trendy-summer-red-dress-sexy-carefree-woman-posing-near-blue-wall-studio-positive-model-having-fun-cheerful-happy-sunny-day-shadow-from-window_158538-25864.jpg?_wi=2",
imageAlt: "Premium sunglasses",
},
{ {
id: "5", id: "5", name: "Kids Frames", price: "From $99", imageSrc: "http://img.b2bpic.net/free-photo/cute-little-girl-holding-books-isolated-studio_1303-31007.jpg?_wi=2", imageAlt: "Children eyewear"},
name: "Kids Frames",
price: "From $99",
imageSrc: "http://img.b2bpic.net/free-photo/cute-little-girl-holding-books-isolated-studio_1303-31007.jpg?_wi=2",
imageAlt: "Children eyewear",
},
{ {
id: "6", id: "6", name: "Blue-Light Protection", price: "From $129", imageSrc: "http://img.b2bpic.net/free-photo/black-office-business-equipment-black-background_1387-730.jpg?_wi=2", imageAlt: "Blue light filtering glasses"},
name: "Blue-Light Protection",
price: "From $129",
imageSrc: "http://img.b2bpic.net/free-photo/black-office-business-equipment-black-background_1387-730.jpg?_wi=2",
imageAlt: "Blue light filtering glasses",
},
]} ]}
gridVariant="bento-grid" gridVariant="bento-grid"
animationType="slide-up" animationType="slide-up"
@@ -126,22 +94,16 @@ export default function ShopPage() {
socialLinks={[ socialLinks={[
{ {
icon: Instagram, icon: Instagram,
href: "https://instagram.com/pearleeyewear", href: "https://instagram.com/pearleeyewear", ariaLabel: "Follow Pearle on Instagram"},
ariaLabel: "Follow Pearle on Instagram",
},
{ {
icon: Facebook, icon: Facebook,
href: "https://facebook.com/pearleeyewear", href: "https://facebook.com/pearleeyewear", ariaLabel: "Visit Pearle on Facebook"},
ariaLabel: "Visit Pearle on Facebook",
},
{ {
icon: Linkedin, icon: Linkedin,
href: "https://linkedin.com/company/pearleeyewear", href: "https://linkedin.com/company/pearleeyewear", ariaLabel: "Connect with Pearle on LinkedIn"},
ariaLabel: "Connect with Pearle on LinkedIn",
},
]} ]}
/> />
</div> </div>
</ThemeProvider> </ThemeProvider>
); );
} }

View File

@@ -2,23 +2,23 @@
/* Base units */ /* Base units */
/* --vw is set by ThemeProvider */ /* --vw is set by ThemeProvider */
/* --background: #efebe5;; /* --background: #ffffff;;;;;;
--card: #f7f2ea;; --card: #f9f9f9;;;;;;
--foreground: #2b180a;; --foreground: #000612e6;;;;;;
--primary-cta: #2b180a;; --primary-cta: #106EFB;;;;;;
--secondary-cta: #ffffff;; --secondary-cta: #f9f9f9;;;;;;
--accent: #ffffff;; --accent: #e2e2e2;;;;;;
--background-accent: #e1b875;; */ --background-accent: #106EFB;;;;;; */
--background: #efebe5;; --background: #ffffff;;;;;;
--card: #f7f2ea;; --card: #f9f9f9;;;;;;
--foreground: #2b180a;; --foreground: #000612e6;;;;;;
--primary-cta: #2b180a;; --primary-cta: #106EFB;;;;;;
--primary-cta-text: #efebe5;; --primary-cta-text: #ffffff;;;;;;
--secondary-cta: #ffffff;; --secondary-cta: #f9f9f9;;;;;;
--secondary-cta-text: #2b180a;; --secondary-cta-text: #000612e6;;;;;;
--accent: #ffffff;; --accent: #e2e2e2;;;;;;
--background-accent: #e1b875;; --background-accent: #106EFB;;;;;;
/* text sizing - set by ThemeProvider */ /* text sizing - set by ThemeProvider */
/* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem); /* --text-2xs: clamp(0.465rem, 0.62vw, 0.62rem);