2 Commits

Author SHA1 Message Date
58916a76a9 Merge version_2_1781443139604 into main
Merge version_2_1781443139604 into main
2026-06-14 13:20:42 +00:00
kudinDmitriyUp
125770f51e Bob AI: Updated color palette to include light blue, grey, and taupe 2026-06-14 13:20:03 +00:00
9 changed files with 313 additions and 224 deletions

View File

@@ -5,15 +5,15 @@
:root {
/* @colorThemes/lightTheme/grayNavyBlue */
--background: #f5faff;
--background: #f4f5f8;
--card: #ffffff;
--foreground: #001122;
--primary-cta: #15479c;
--primary-cta-text: #f5faff;
--foreground: #2a2c35;
--primary-cta: #8b9bb4;
--primary-cta-text: #ffffff;
--secondary-cta: #ffffff;
--secondary-cta-text: #001122;
--accent: #a8cce8;
--background-accent: #7ba3cf;
--secondary-cta-text: #2a2c35;
--accent: #b5b1c4;
--background-accent: #dcdbe2;
/* @layout/border-radius/rounded */
--radius: 0.5rem;

View File

@@ -1,228 +1,33 @@
import AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
import FeaturesDetailedCards from '@/components/sections/features/FeaturesDetailedCards';
import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
import MetricsSimpleCards from '@/components/sections/metrics/MetricsSimpleCards';
import TestimonialOverlayCards from '@/components/sections/testimonial/TestimonialOverlayCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
// AUTO-GENERATED shell by per-section-migrate.
// Section bodies live in ./<PageBase>/sections/<X>.tsx. Edit the section
// files directly. Non-block content (wrappers, non-inlinable sections) is
// preserved inline; extracted section blocks become <XSection/> refs.
export default function HomePage() {
import React from 'react';
import HeroSection from './HomePage/sections/Hero';
import AboutSection from './HomePage/sections/About';
import FeaturesSection from './HomePage/sections/Features';
import MetricsSection from './HomePage/sections/Metrics';
import TestimonialsSection from './HomePage/sections/Testimonials';
import FaqSection from './HomePage/sections/Faq';
import ContactSection from './HomePage/sections/Contact';
export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboardCarousel
tag="Exclusive Sanctuary"
title="The Art of Disappearing"
description="An intimate sanctuary suspended above the Mediterranean where absolute privacy meets timeless beauty—a rare escape designed for those who refuse compromise."
primaryButton={{
text: "Discover the Experience",
href: "#about",
}}
secondaryButton={{
text: "Inquire",
href: "#contact",
}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/umbrella-chair-around-outdoor-swimming-pool-resort-hotel-vacation-leisure_74190-14764.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/luxurious-terrace-with-coastal-views_23-2151986069.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/scene-with-diverse-young-people-being-digital-nomads-working-remotely-from-dreamy-locations_23-2151187855.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/minimalist-architecture-space_23-2151912527.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/luxury-villa-with-pool-ocean-view_23-2151986046.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/side-view-tomato-soup-with-tomato-juice-glass-table-decorated-with-stonesat-seaside-restaurant_176474-920.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutMediaOverlay
tag="Our Philosophy"
title="A Home Away From Commercial Life"
description="Villa Nerano is a curated retreat of six private suites, designed for those who seek the warmth of a private estate combined with uncompromising service. Suspended above the Amalfi Coast, every detail is crafted to ensure your absolute discretion and peace."
imageSrc="http://img.b2bpic.net/free-photo/ai-generated-modern-styled-entryway_23-2150692319.jpg"
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="features" data-section="features">
<SectionErrorBoundary name="features">
<FeaturesDetailedCards
tag="The Sanctuary Life"
title="Curated Mediterranean Experiences"
description="Indulge in a collection of bespoke lifestyle moments, tailored entirely to your preferences."
items={[
{
title: "Private Yacht Expeditions",
description: "Explore hidden coves of the Amalfi Coast away from crowds.",
tags: [
"Exclusive",
"Sea",
],
imageSrc: "http://img.b2bpic.net/free-photo/woman-standing-nose-yacht-sunny-summer-day-breeze-developing-hair_231208-8349.jpg",
},
{
title: "Gourmet Culinary Art",
description: "Personalized dining experiences in your private garden terrace.",
tags: [
"Dining",
"Chef",
],
imageSrc: "http://img.b2bpic.net/free-photo/female-chef-kitchen-separating-eggs-bowl_23-2149720737.jpg",
},
{
title: "Holistic Wellness",
description: "Rejuvenate with personalized treatments amidst our botanical gardens.",
tags: [
"Spa",
"Wellness",
],
imageSrc: "http://img.b2bpic.net/free-photo/happy-woman-reading-book-while-spending-relaxing-day-wit-her-husband-wellness-center_637285-7458.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<FeaturesSection />
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsSimpleCards
tag="By the Numbers"
title="Unmatched Exclusivity"
description="A rare balance of scale and serenity."
metrics={[
{
value: "6",
description: "Ultra-private luxury suites",
},
{
value: "24/7",
description: "Dedicated concierge service",
},
{
value: "360°",
description: "Uninterrupted coastal views",
},
]}
/>
</SectionErrorBoundary>
</div>
<MetricsSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialOverlayCards
tag="Testimonials"
title="Voices of the Sanctuary"
description="Experiences from guests who found their quiet retreat."
testimonials={[
{
name: "Elena Rossi",
role: "Creative Director",
company: "Vogue Italy",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-woman-with-glass-wine-seashore-sits-chair_169016-22446.jpg",
},
{
name: "Julian Thorne",
role: "Founder",
company: "Global Ventures",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/charming-woman-floral-dress-looks-into-camera-outside-brunette-lady-summer-outfit-holds-boater-moves-sea-background_197531-29976.jpg",
},
{
name: "Sophie Martin",
role: "Architect",
company: "Studio M",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/fit-tanned-brunette-woman-black-fitting-swimsuit-villa-hotel-swimming-pool_343596-581.jpg",
},
{
name: "David Chen",
role: "Managing Partner",
company: "Private Capital",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/curly-shorthaired-woman-beige-dress-smiles-widely-takes-selfie-sea-background-charming-brunette-lady-stylish-outfit-sits-fence-holds-phone_197531-30075.jpg",
},
{
name: "Isabella Conti",
role: "Art Collector",
company: "Private Collection",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/couple-standing-while-man-pointing-his-finger-something-sunset_176474-4929.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTabbedAccordion
tag="Frequently Asked"
title="Planning Your Escape"
categories={[
{
name: "General",
items: [
{
question: "Is privacy guaranteed?",
answer: "Absolute discretion is the foundation of our existence.",
},
{
question: "Can we arrange transfers?",
answer: "Our concierge manages all private arrival logistics seamlessly.",
},
],
},
{
name: "Amenities",
items: [
{
question: "Is there a private pool?",
answer: "Yes, select suites feature private infinity pools.",
},
{
question: "Are meals inclusive?",
answer: "We curate daily breakfast and private dining per request.",
},
],
},
]}
description="Everything you need to know about your stay at Villa Nerano."
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Inquiry"
text="Your journey to the Mediterranean sanctuary begins with a single conversation. Secure your private retreat."
primaryButton={{
text: "Contact Our Concierge",
href: "mailto:hello@villanerano.com",
}}
secondaryButton={{
text: "View Availability",
href: "#",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

View File

@@ -0,0 +1,21 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "about" section.
import React from 'react';
import AboutMediaOverlay from '@/components/sections/about/AboutMediaOverlay';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutMediaOverlay
tag="Our Philosophy"
title="A Home Away From Commercial Life"
description="Villa Nerano is a curated retreat of six private suites, designed for those who seek the warmth of a private estate combined with uncompromising service. Suspended above the Amalfi Coast, every detail is crafted to ensure your absolute discretion and peace."
imageSrc="http://img.b2bpic.net/free-photo/ai-generated-modern-styled-entryway_23-2150692319.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,27 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "contact" section.
import React from 'react';
import ContactCta from '@/components/sections/contact/ContactCta';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ContactSection(): React.JSX.Element {
return (
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Inquiry"
text="Your journey to the Mediterranean sanctuary begins with a single conversation. Secure your private retreat."
primaryButton={{
text: "Contact Our Concierge",
href: "mailto:hello@villanerano.com",
}}
secondaryButton={{
text: "View Availability",
href: "#",
}}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,48 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "faq" section.
import React from 'react';
import FaqTabbedAccordion from '@/components/sections/faq/FaqTabbedAccordion';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FaqSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqTabbedAccordion
tag="Frequently Asked"
title="Planning Your Escape"
categories={[
{
name: "General",
items: [
{
question: "Is privacy guaranteed?",
answer: "Absolute discretion is the foundation of our existence.",
},
{
question: "Can we arrange transfers?",
answer: "Our concierge manages all private arrival logistics seamlessly.",
},
],
},
{
name: "Amenities",
items: [
{
question: "Is there a private pool?",
answer: "Yes, select suites feature private infinity pools.",
},
{
question: "Are meals inclusive?",
answer: "We curate daily breakfast and private dining per request.",
},
],
},
]}
description="Everything you need to know about your stay at Villa Nerano."
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,49 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "features" section.
import React from 'react';
import FeaturesDetailedCards from '@/components/sections/features/FeaturesDetailedCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FeaturesSection(): React.JSX.Element {
return (
<div id="features" data-section="features">
<SectionErrorBoundary name="features">
<FeaturesDetailedCards
tag="The Sanctuary Life"
title="Curated Mediterranean Experiences"
description="Indulge in a collection of bespoke lifestyle moments, tailored entirely to your preferences."
items={[
{
title: "Private Yacht Expeditions",
description: "Explore hidden coves of the Amalfi Coast away from crowds.",
tags: [
"Exclusive",
"Sea",
],
imageSrc: "http://img.b2bpic.net/free-photo/woman-standing-nose-yacht-sunny-summer-day-breeze-developing-hair_231208-8349.jpg",
},
{
title: "Gourmet Culinary Art",
description: "Personalized dining experiences in your private garden terrace.",
tags: [
"Dining",
"Chef",
],
imageSrc: "http://img.b2bpic.net/free-photo/female-chef-kitchen-separating-eggs-bowl_23-2149720737.jpg",
},
{
title: "Holistic Wellness",
description: "Rejuvenate with personalized treatments amidst our botanical gardens.",
tags: [
"Spa",
"Wellness",
],
imageSrc: "http://img.b2bpic.net/free-photo/happy-woman-reading-book-while-spending-relaxing-day-wit-her-husband-wellness-center_637285-7458.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,48 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "hero" section.
import React from 'react';
import HeroBillboardCarousel from '@/components/sections/hero/HeroBillboardCarousel';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBillboardCarousel
tag="Exclusive Sanctuary"
title="The Art of Disappearing"
description="An intimate sanctuary suspended above the Mediterranean where absolute privacy meets timeless beauty—a rare escape designed for those who refuse compromise."
primaryButton={{
text: "Discover the Experience",
href: "#about",
}}
secondaryButton={{
text: "Inquire",
href: "#contact",
}}
items={[
{
imageSrc: "http://img.b2bpic.net/free-photo/umbrella-chair-around-outdoor-swimming-pool-resort-hotel-vacation-leisure_74190-14764.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/luxurious-terrace-with-coastal-views_23-2151986069.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/scene-with-diverse-young-people-being-digital-nomads-working-remotely-from-dreamy-locations_23-2151187855.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/minimalist-architecture-space_23-2151912527.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/luxury-villa-with-pool-ocean-view_23-2151986046.jpg",
},
{
imageSrc: "http://img.b2bpic.net/free-photo/side-view-tomato-soup-with-tomato-juice-glass-table-decorated-with-stonesat-seaside-restaurant_176474-920.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,34 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "metrics" section.
import React from 'react';
import MetricsSimpleCards from '@/components/sections/metrics/MetricsSimpleCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MetricsSection(): React.JSX.Element {
return (
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsSimpleCards
tag="By the Numbers"
title="Unmatched Exclusivity"
description="A rare balance of scale and serenity."
metrics={[
{
value: "6",
description: "Ultra-private luxury suites",
},
{
value: "24/7",
description: "Dedicated concierge service",
},
{
value: "360°",
description: "Uninterrupted coastal views",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,57 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "testimonials" section.
import React from 'react';
import TestimonialOverlayCards from '@/components/sections/testimonial/TestimonialOverlayCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TestimonialsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialOverlayCards
tag="Testimonials"
title="Voices of the Sanctuary"
description="Experiences from guests who found their quiet retreat."
testimonials={[
{
name: "Elena Rossi",
role: "Creative Director",
company: "Vogue Italy",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/beautiful-woman-with-glass-wine-seashore-sits-chair_169016-22446.jpg",
},
{
name: "Julian Thorne",
role: "Founder",
company: "Global Ventures",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/charming-woman-floral-dress-looks-into-camera-outside-brunette-lady-summer-outfit-holds-boater-moves-sea-background_197531-29976.jpg",
},
{
name: "Sophie Martin",
role: "Architect",
company: "Studio M",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/fit-tanned-brunette-woman-black-fitting-swimsuit-villa-hotel-swimming-pool_343596-581.jpg",
},
{
name: "David Chen",
role: "Managing Partner",
company: "Private Capital",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/curly-shorthaired-woman-beige-dress-smiles-widely-takes-selfie-sea-background-charming-brunette-lady-stylish-outfit-sits-fence-holds-phone_197531-30075.jpg",
},
{
name: "Isabella Conti",
role: "Art Collector",
company: "Private Collection",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/couple-standing-while-man-pointing-his-finger-something-sunset_176474-4929.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}