Merge version_2_1782002873612 into main #1

Merged
bender merged 1 commits from version_2_1782002873612 into main 2026-06-21 00:49:50 +00:00
11 changed files with 397 additions and 244 deletions

View File

@@ -1,4 +1,4 @@
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');
@import url('https://fonts.googleapis.com/css2?family=Cormorant+Garamond:ital,wght@0,300;0,400;0,500;0,600;0,700;1,400&family=Inter:wght@400;500;600;700&display=swap');
@import "tailwindcss";
@import "./styles/masks.css";
@import "./styles/animations.css";
@@ -88,8 +88,8 @@
--color-background-accent: var(--background-accent);
/* Fonts */
--font-sans: 'Inter', sans-serif;
--font-tight: "Inter Tight", sans-serif;
--font-sans: 'Cormorant Garamond', serif;
--font-tight: "Inter", sans-serif;
--font-mono: monospace;
/* Border Radius */

View File

@@ -1,253 +1,38 @@
import AboutTestimonial from '@/components/sections/about/AboutTestimonial';
import ContactCta from '@/components/sections/contact/ContactCta';
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import HeroBrand from '@/components/sections/hero/HeroBrand';
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
import PricingMediaCards from '@/components/sections/pricing/PricingMediaCards';
import TestimonialMarqueeCards from '@/components/sections/testimonial/TestimonialMarqueeCards';
import { Car, Clock, MapPin } from "lucide-react";
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 FeaturesSection from './HomePage/sections/Features';
import MenuSection from './HomePage/sections/Menu';
import StorySection from './HomePage/sections/Story';
import TestimonialsSection from './HomePage/sections/Testimonials';
import ClassesSection from './HomePage/sections/Classes';
import LocationSection from './HomePage/sections/Location';
import ContactSection from './HomePage/sections/Contact';
import GallerySection from './HomePage/sections/Gallery';export default function HomePage(): React.JSX.Element {
return (
<>
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBrand
brand="Sabores de Panamá, servidos como en casa."
description="Recetas familiares, ingredientes locales y hospitalidad que ha conquistado a miles de viajeros en Casco Viejo. ★★★★★ 4.8 (1,700+ reseñas)"
primaryButton={{
text: "Reservar Mesa",
href: "#contact",
}}
secondaryButton={{
text: "Ver Nuestro Menú",
href: "#menu",
}}
imageSrc="http://img.b2bpic.net/free-photo/spaghetti-cooked-with-seafoods-fresh-vegetables-served-grey-granite-plate_114579-1833.jpg"
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="features" data-section="features">
<SectionErrorBoundary name="features">
<FeaturesDetailedSteps
tag="Por qué elegirnos"
title="El alma de Panamá en tu mesa"
description="Cada detalle cuenta la historia de nuestras tradiciones."
steps={[
{
tag: "Auténtico",
title: "Recetas Familiares",
subtitle: "Generacional",
description: "Tradiciones transmitidas con amor.",
imageSrc: "http://img.b2bpic.net/free-photo/asian-food-chicken-fried-with-sauce-rice-served-plate_1220-7076.jpg",
},
{
tag: "Origen",
title: "Ingredientes Locales",
subtitle: "Fresco",
description: "Productos frescos de nuestras tierras.",
imageSrc: "http://img.b2bpic.net/free-photo/pitahaya-dragon-fruit-still-life-cinematic-dark-style_23-2151566199.jpg",
},
{
tag: "Hospitalidad",
title: "Como en Casa",
subtitle: "Bienvenida",
description: "Te recibimos con el calor de Panamá.",
imageSrc: "http://img.b2bpic.net/free-photo/grilled-fish_1387-968.jpg",
},
{
tag: "Educación",
title: "Clases de Cocina",
subtitle: "Aprendizaje",
description: "Descubre los secretos de nuestra cocina.",
imageSrc: "http://img.b2bpic.net/free-photo/man-with-son-making-dough-together_23-2147749315.jpg",
},
{
tag: "Ubicación",
title: "Casco Viejo",
subtitle: "Historia",
description: "En el corazón del Panamá histórico.",
imageSrc: "http://img.b2bpic.net/free-photo/there-are-glasses-wine-water-table-with-white-cloth-are-ready-dining_613910-3428.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<FeaturesSection />
<div id="menu" data-section="menu">
<SectionErrorBoundary name="menu">
<FeaturesImageBento
tag="Nuestros Favoritos"
title="Los sabores que definen El Nacional"
description="Una selección de nuestros platos más icónicos."
items={[
{
title: "Arroz con Pollo",
description: "El clásico que nos une.",
imageSrc: "http://img.b2bpic.net/free-photo/high-protein-meal-meat-close-up-detail_23-2149098890.jpg",
},
{
title: "Ropa Vieja",
description: "Sabor auténtico panameño.",
imageSrc: "http://img.b2bpic.net/free-photo/beef-dish-restaurant_7939-1754.jpg",
},
{
title: "Pescado a lo Macho",
description: "Directo del mar a tu mesa.",
imageSrc: "http://img.b2bpic.net/free-photo/side-view-smoked-salmon-with-cucumber-onion-herbs-blue-plate_141793-6111.jpg",
},
{
title: "Langostinos al Maracuyá",
description: "Una explosión de frescura.",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-spaghetti-pasta-with-tomatoes-parsley-white-table_1253-953.jpg",
},
{
title: "Entradas",
description: "El inicio perfecto.",
imageSrc: "http://img.b2bpic.net/free-photo/still-life-recipe-with-plantain_23-2151062795.jpg",
},
{
title: "Postres",
description: "Un dulce final.",
imageSrc: "http://img.b2bpic.net/free-photo/caramelized-onion-pieces-colorful-plate_114579-54109.jpg",
},
{
title: "Menú Completo",
description: "Explora toda la carta.",
imageSrc: "http://img.b2bpic.net/free-photo/raw-fish-placed-plate-with-lime-onion-cherry-tomato-ice_140725-5950.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<MenuSection />
<GallerySection />
<div id="story" data-section="story">
<SectionErrorBoundary name="story">
<AboutTestimonial
tag="Nuestra Historia"
quote="Every recipe tells a story. Since 2020 we have shared the best of our land through authentic flavors, family traditions and unforgettable hospitality."
author="Familia El Nacional"
role="Fundadores"
imageSrc="http://img.b2bpic.net/free-photo/stone-walled-restaurant-top-lighting_140725-9731.jpg"
/>
</SectionErrorBoundary>
</div>
<StorySection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialMarqueeCards
tag="Reseñas"
title="Lo que dicen de nosotros"
description="Voces de viajeros de todo el mundo."
testimonials={[
{
name: "Sarah J.",
role: "Turista",
quote: "The best Panamanian food we tried.",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-white-plain-rice-meal-with-chicken_140725-148893.jpg",
},
{
name: "Michael C.",
role: "Turista",
quote: "Authentic flavors and incredible hospitality.",
imageSrc: "http://img.b2bpic.net/free-photo/hot-spicy-grilled-pork-salad-with-berry-rice_1339-6326.jpg",
},
{
name: "Emily R.",
role: "Turista",
quote: "One of the best dining experiences in Casco Viejo.",
imageSrc: "http://img.b2bpic.net/free-photo/fried-fish-table_140725-1351.jpg",
},
{
name: "David K.",
role: "Turista",
quote: "Absolutely unforgettable.",
imageSrc: "http://img.b2bpic.net/free-photo/potato-cutlets-served-with-sprouts-sauce_7502-7399.jpg",
},
{
name: "Maria L.",
role: "Turista",
quote: "A taste of home.",
imageSrc: "http://img.b2bpic.net/free-photo/woman-working-as-professional-chef_23-2151864172.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="classes" data-section="classes">
<SectionErrorBoundary name="classes">
<PricingMediaCards
tag="Talleres"
title="Learn to Cook Panama"
description="Descubre las tradiciones detrás de nuestras recetas."
plans={[
{
tag: "Clase",
price: "$80",
period: "por persona",
features: [
"Incluye ingredientes",
"Degustación incluida",
"Duración: 3 horas",
],
primaryButton: {
text: "Reservar",
href: "#contact",
},
imageSrc: "http://img.b2bpic.net/free-photo/diverse-women-cooking-kitchen_53876-26162.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<ClassesSection />
<div id="location" data-section="location">
<SectionErrorBoundary name="location">
<MetricsIconCards
tag="Ubicación"
title="Encuéntranos en Casco Viejo"
description="Visítanos y vive una experiencia inolvidable."
metrics={[
{
icon: MapPin,
title: "Dirección",
value: "Casco Viejo, Panamá",
},
{
icon: Clock,
title: "Abierto",
value: "12pm - 10pm",
},
{
icon: Car,
title: "Parking",
value: "Valet Disponible",
},
]}
/>
</SectionErrorBoundary>
</div>
<LocationSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Reservaciones"
text="La misma esencia de siempre. Presentada con el nivel que nuestra cocina merece."
primaryButton={{
text: "Reservar Ahora",
href: "#",
}}
secondaryButton={{
text: "Ver Menú",
href: "#menu",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

View File

@@ -0,0 +1,37 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "classes" section.
import React from 'react';
import PricingMediaCards from '@/components/sections/pricing/PricingMediaCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function ClassesSection(): React.JSX.Element {
return (
<div id="classes" data-section="classes">
<SectionErrorBoundary name="classes">
<PricingMediaCards
tag="Talleres"
title="Learn to Cook Panama"
description="Descubre las tradiciones detrás de nuestras recetas."
plans={[
{
tag: "Clase",
price: "$80",
period: "por persona",
features: [
"Incluye ingredientes",
"Degustación incluida",
"Duración: 3 horas",
],
primaryButton: {
text: "Reservar",
href: "#contact",
},
imageSrc: "http://img.b2bpic.net/free-photo/diverse-women-cooking-kitchen_53876-26162.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="Reservaciones"
text="La misma esencia de siempre. Presentada con el nivel que nuestra cocina merece."
primaryButton={{
text: "Reservar Ahora",
href: "#",
}}
secondaryButton={{
text: "Ver Menú",
href: "#menu",
}}
/>
</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 "features" section.
import React from 'react';
import FeaturesDetailedSteps from '@/components/sections/features/FeaturesDetailedSteps';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FeaturesSection(): React.JSX.Element {
return (
<div id="features" data-section="features">
<SectionErrorBoundary name="features">
<FeaturesDetailedSteps
tag="Por qué elegirnos"
title="El alma de Panamá en tu mesa"
description="Cada detalle cuenta la historia de nuestras tradiciones."
steps={[
{
tag: "Auténtico",
title: "Recetas Familiares",
subtitle: "Generacional",
description: "Tradiciones transmitidas con amor.",
imageSrc: "http://img.b2bpic.net/free-photo/asian-food-chicken-fried-with-sauce-rice-served-plate_1220-7076.jpg",
},
{
tag: "Origen",
title: "Ingredientes Locales",
subtitle: "Fresco",
description: "Productos frescos de nuestras tierras.",
imageSrc: "http://img.b2bpic.net/free-photo/pitahaya-dragon-fruit-still-life-cinematic-dark-style_23-2151566199.jpg",
},
{
tag: "Hospitalidad",
title: "Como en Casa",
subtitle: "Bienvenida",
description: "Te recibimos con el calor de Panamá.",
imageSrc: "http://img.b2bpic.net/free-photo/grilled-fish_1387-968.jpg",
},
{
tag: "Educación",
title: "Clases de Cocina",
subtitle: "Aprendizaje",
description: "Descubre los secretos de nuestra cocina.",
imageSrc: "http://img.b2bpic.net/free-photo/man-with-son-making-dough-together_23-2147749315.jpg",
},
{
tag: "Ubicación",
title: "Casco Viejo",
subtitle: "Historia",
description: "En el corazón del Panamá histórico.",
imageSrc: "http://img.b2bpic.net/free-photo/there-are-glasses-wine-water-table-with-white-cloth-are-ready-dining_613910-3428.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,50 @@
import ScrollReveal from '@/components/ui/ScrollReveal';
import TextAnimation from '@/components/ui/TextAnimation';
import Tag from '@/components/ui/Tag';
import ImageOrVideo from '@/components/ui/ImageOrVideo';
export default function GallerySection() {
return (
<div data-webild-section="gallery" id="gallery">
<section className="relative w-full py-24 bg-background">
<div className="w-content-width mx-auto">
<ScrollReveal variant="fade">
<div className="flex flex-col items-center text-center mb-16">
<Tag text="Galería" className="mb-6" />
<TextAnimation
text="Nuestra Esencia"
variant="fade-blur"
tag="h2"
gradientText={false}
className="text-4xl md:text-5xl font-bold text-foreground mb-6"
/>
<p className="text-lg text-accent max-w-2xl">
Una mirada a la experiencia El Nacional.
</p>
</div>
</ScrollReveal>
<div className="columns-1 md:columns-2 lg:columns-3 gap-4 space-y-4">
{[
"http://img.b2bpic.net/free-photo/spaghetti-cooked-with-seafoods-fresh-vegetables-served-grey-granite-plate_114579-1833.jpg",
"http://img.b2bpic.net/free-photo/asian-food-chicken-fried-with-sauce-rice-served-plate_1220-7076.jpg",
"http://img.b2bpic.net/free-photo/stone-walled-restaurant-top-lighting_140725-9731.jpg",
"http://img.b2bpic.net/free-photo/diverse-women-cooking-kitchen_53876-26162.jpg",
"http://img.b2bpic.net/free-photo/there-are-glasses-wine-water-table-with-white-cloth-are-ready-dining_613910-3428.jpg",
"http://img.b2bpic.net/free-photo/high-protein-meal-meat-close-up-detail_23-2149098890.jpg"
].map((src, i) => (
<ScrollReveal variant="fade" key={i} delay={i * 0.1}>
<div className="break-inside-avoid rounded-lg overflow-hidden">
<ImageOrVideo
imageSrc={src}
className="w-full h-auto object-cover hover:scale-105 transition-transform duration-500"
/>
</div>
</ScrollReveal>
))}
</div>
</div>
</section>
</div>
);
}

View File

@@ -0,0 +1,28 @@
// 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 HeroBrand from '@/components/sections/hero/HeroBrand';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroBrand
brand="Sabores de Panamá, servidos como en casa."
description="Recetas familiares, ingredientes locales y hospitalidad que ha conquistado a miles de viajeros en Casco Viejo. ★★★★★ 4.8 (1,700+ reseñas)"
primaryButton={{
text: "Reservar Mesa",
href: "#contact",
}}
secondaryButton={{
text: "Ver Nuestro Menú",
href: "#menu",
}}
imageSrc="http://img.b2bpic.net/free-photo/spaghetti-cooked-with-seafoods-fresh-vegetables-served-grey-granite-plate_114579-1833.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,38 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "location" section.
import React from 'react';
import MetricsIconCards from '@/components/sections/metrics/MetricsIconCards';
import { Car, Clock, MapPin } from "lucide-react";
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function LocationSection(): React.JSX.Element {
return (
<div id="location" data-section="location">
<SectionErrorBoundary name="location">
<MetricsIconCards
tag="Ubicación"
title="Encuéntranos en Casco Viejo"
description="Visítanos y vive una experiencia inolvidable."
metrics={[
{
icon: MapPin,
title: "Dirección",
value: "Casco Viejo, Panamá",
},
{
icon: Clock,
title: "Abierto",
value: "12pm - 10pm",
},
{
icon: Car,
title: "Parking",
value: "Valet Disponible",
},
]}
/>
</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 "menu" section.
import React from 'react';
import FeaturesImageBento from '@/components/sections/features/FeaturesImageBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MenuSection(): React.JSX.Element {
return (
<div id="menu" data-section="menu">
<SectionErrorBoundary name="menu">
<FeaturesImageBento
tag="Nuestros Favoritos"
title="Los sabores que definen El Nacional"
description="Una selección de nuestros platos más icónicos."
items={[
{
title: "Arroz con Pollo",
description: "El clásico que nos une.",
imageSrc: "http://img.b2bpic.net/free-photo/high-protein-meal-meat-close-up-detail_23-2149098890.jpg",
},
{
title: "Ropa Vieja",
description: "Sabor auténtico panameño.",
imageSrc: "http://img.b2bpic.net/free-photo/beef-dish-restaurant_7939-1754.jpg",
},
{
title: "Pescado a lo Macho",
description: "Directo del mar a tu mesa.",
imageSrc: "http://img.b2bpic.net/free-photo/side-view-smoked-salmon-with-cucumber-onion-herbs-blue-plate_141793-6111.jpg",
},
{
title: "Langostinos al Maracuyá",
description: "Una explosión de frescura.",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-spaghetti-pasta-with-tomatoes-parsley-white-table_1253-953.jpg",
},
{
title: "Entradas",
description: "El inicio perfecto.",
imageSrc: "http://img.b2bpic.net/free-photo/still-life-recipe-with-plantain_23-2151062795.jpg",
},
{
title: "Postres",
description: "Un dulce final.",
imageSrc: "http://img.b2bpic.net/free-photo/caramelized-onion-pieces-colorful-plate_114579-54109.jpg",
},
{
title: "Menú Completo",
description: "Explora toda la carta.",
imageSrc: "http://img.b2bpic.net/free-photo/raw-fish-placed-plate-with-lime-onion-cherry-tomato-ice_140725-5950.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,22 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "story" section.
import React from 'react';
import AboutTestimonial from '@/components/sections/about/AboutTestimonial';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function StorySection(): React.JSX.Element {
return (
<div id="story" data-section="story">
<SectionErrorBoundary name="story">
<AboutTestimonial
tag="Nuestra Historia"
quote="Every recipe tells a story. Since 2020 we have shared the best of our land through authentic flavors, family traditions and unforgettable hospitality."
author="Familia El Nacional"
role="Fundadores"
imageSrc="http://img.b2bpic.net/free-photo/stone-walled-restaurant-top-lighting_140725-9731.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,52 @@
// 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 TestimonialMarqueeCards from '@/components/sections/testimonial/TestimonialMarqueeCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TestimonialsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialMarqueeCards
tag="Reseñas"
title="Lo que dicen de nosotros"
description="Voces de viajeros de todo el mundo."
testimonials={[
{
name: "Sarah J.",
role: "Turista",
quote: "The best Panamanian food we tried.",
imageSrc: "http://img.b2bpic.net/free-photo/top-view-white-plain-rice-meal-with-chicken_140725-148893.jpg",
},
{
name: "Michael C.",
role: "Turista",
quote: "Authentic flavors and incredible hospitality.",
imageSrc: "http://img.b2bpic.net/free-photo/hot-spicy-grilled-pork-salad-with-berry-rice_1339-6326.jpg",
},
{
name: "Emily R.",
role: "Turista",
quote: "One of the best dining experiences in Casco Viejo.",
imageSrc: "http://img.b2bpic.net/free-photo/fried-fish-table_140725-1351.jpg",
},
{
name: "David K.",
role: "Turista",
quote: "Absolutely unforgettable.",
imageSrc: "http://img.b2bpic.net/free-photo/potato-cutlets-served-with-sprouts-sauce_7502-7399.jpg",
},
{
name: "Maria L.",
role: "Turista",
quote: "A taste of home.",
imageSrc: "http://img.b2bpic.net/free-photo/woman-working-as-professional-chef_23-2151864172.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}