Bob AI: Expanded training features with new perks

This commit is contained in:
kudinDmitriyUp
2026-06-16 08:09:06 +00:00
parent 0ac9fb0b0e
commit 44150a98dd
10 changed files with 496 additions and 282 deletions

View File

@@ -1,295 +1,39 @@
import AboutTextSplit from '@/components/sections/about/AboutTextSplit';
import ContactCta from '@/components/sections/contact/ContactCta';
import FaqSimple from '@/components/sections/faq/FaqSimple';
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
import FeaturesTaggedCards from '@/components/sections/features/FeaturesTaggedCards';
import HeroOverlay from '@/components/sections/hero/HeroOverlay';
import MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
import PricingMediaCards from '@/components/sections/pricing/PricingMediaCards';
import TestimonialRatingCards from '@/components/sections/testimonial/TestimonialRatingCards';
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 TrainingSection from './HomePage/sections/Training';
import FitnessBentoSection from './HomePage/sections/FitnessBento';
import PricingSection from './HomePage/sections/Pricing';
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">
<HeroOverlay
tag="Premier Fitness in Model Colony"
title="Balance and Burn Your Way to Peak Fitness"
description="Join the premier gym and fitness studio in Karachi. Achieve your goals with professional guidance, state-of-the-art equipment, and a supportive community."
primaryButton={{
text: "Get Started",
href: "#pricing",
}}
secondaryButton={{
text: "Our Training",
href: "#training",
}}
imageSrc="http://img.b2bpic.net/free-photo/motivated-young-female-athlete-smiling-gym-using-leg-press-equipment_197531-22866.jpg"
/>
</SectionErrorBoundary>
</div>
<>
<HeroSection />
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutTextSplit
title="Your Goals, Our Mission"
descriptions={[
"Balance and Burn Gym and Fitness Studio is Karachi's premier destination for achieving your fitness goals. We offer a comprehensive environment designed to help you balance your lifestyle and burn calories effectively.",
"Located conveniently in Model Colony, our studio provides top-tier facilities, expert trainers, and a variety of workout programs tailored to your unique fitness level and personal objectives.",
]}
/>
</SectionErrorBoundary>
</div>
<AboutSection />
<div id="training" data-section="training">
<SectionErrorBoundary name="training">
<FeaturesTaggedCards
tag="Our Expertise"
title="Comprehensive Training Programs"
description="We specialize in a diverse range of training disciplines to ensure a balanced, holistic fitness journey."
items={[
{
tag: "Strength",
title: "Strength & Resistance",
description: "Build muscle and increase metabolic rate with professional strength training.",
imageSrc: "http://img.b2bpic.net/free-photo/sports-brunette-woman-sportswear-training-gym_1157-30609.jpg",
primaryButton: {
text: "Explore",
href: "#",
},
},
{
tag: "Flexibility",
title: "Flexibility Routines",
description: "Enhance mobility and recovery with our expert-led stretching and flexibility sessions.",
imageSrc: "http://img.b2bpic.net/free-photo/defocused-dumbbells_1203-368.jpg",
primaryButton: {
text: "Explore",
href: "#",
},
},
{
tag: "Stability",
title: "Balance Workouts",
description: "Improve core stability and athletic performance through specialized balance drills.",
imageSrc: "http://img.b2bpic.net/free-photo/doctor-observes-patient-balance-exercise-movement-control_169016-71198.jpg",
primaryButton: {
text: "Explore",
href: "#",
},
},
]}
/>
</SectionErrorBoundary>
</div>
<TrainingSection />
<div id="fitness-bento" data-section="fitness-bento">
<SectionErrorBoundary name="fitness-bento">
<FeaturesRevealCardsBento
tag="Gym Facilities"
title="Modern Fitness Environment"
description="We offer world-class equipment and dedicated zones for every type of workout."
items={[
{
title: "Weight Area",
description: "Complete collection of free weights.",
imageSrc: "http://img.b2bpic.net/free-photo/pregnant-woman-gym-with-dumbbells-her-hands_169016-59143.jpg",
href: "#",
},
{
title: "Boxing Zone",
description: "Professional boxing gear for cardio.",
imageSrc: "http://img.b2bpic.net/free-photo/sporty-girl-training-treadmill-home-home-workout-treadmill_169016-67735.jpg",
href: "#",
},
{
title: "Jump Ropes",
description: "Elite conditioning tools.",
imageSrc: "http://img.b2bpic.net/free-photo/young-woman-with-hula-hoop_23-2149374939.jpg",
href: "#",
},
{
title: "Cardio Rowers",
description: "High-intensity endurance machines.",
imageSrc: "http://img.b2bpic.net/free-photo/3d-gym-equipment_23-2151114132.jpg",
href: "#",
},
{
title: "Kettlebells",
description: "Full set for functional training.",
imageSrc: "http://img.b2bpic.net/free-photo/woman-blue-sportswear-doing-lunges_23-2147687906.jpg",
href: "#",
},
{
title: "Yoga Studio",
description: "Quiet space for floor work.",
imageSrc: "http://img.b2bpic.net/free-photo/training-composition-with-space-middle_23-2147692067.jpg",
href: "#",
},
{
title: "Battle Ropes",
description: "High-intensity conditioning.",
imageSrc: "http://img.b2bpic.net/free-photo/weights-kettlebells-gym_23-2147675173.jpg",
href: "#",
},
]}
/>
</SectionErrorBoundary>
</div>
<FitnessBentoSection />
<div id="pricing" data-section="pricing">
<SectionErrorBoundary name="pricing">
<PricingMediaCards
tag="Affordable Quality"
title="Simple Membership Pricing"
description="Start your journey today at Karachi's premium gym."
plans={[
{
tag: "Monthly",
price: "3,500",
period: "/month",
features: [
"Full Gym Access",
"Core Workouts",
"Resistance Training",
],
imageSrc: "http://img.b2bpic.net/free-photo/side-view-young-women-gym_23-2148419835.jpg",
primaryButton: {
text: "Join Now",
href: "#contact",
},
},
]}
/>
</SectionErrorBoundary>
</div>
<PricingSection />
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsFeatureCards
tag="Our Impact"
title="Fitness by the Numbers"
description="We are proud of the transformation our members achieve every day."
metrics={[
{
value: "500+",
title: "Active Members",
features: [
"Vibrant community",
"Diverse age groups",
],
},
{
value: "12",
title: "Training Disciplines",
features: [
"Strength",
"Mobility",
"Cardio",
],
},
{
value: "4.8",
title: "Member Rating",
features: [
"Expert guidance",
"Clean facilities",
],
},
]}
/>
</SectionErrorBoundary>
</div>
<MetricsSection />
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialRatingCards
tag="Member Stories"
title="Proven Results"
description="Hear what our members have to say about their fitness experience."
testimonials={[
{
name: "Ali Khan",
role: "Corporate Worker",
quote: "The best gym in Model Colony! Excellent guidance.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/two-internationals-friends-is-engaged-gym_1157-32106.jpg",
},
{
name: "Sarah J.",
role: "Student",
quote: "I feel so much stronger and more flexible now.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/endurance-workout-fitness-concept-happy-motivated-woman-with-sweat-face-program-equipment-training-session-smiling-delighted-pushing-weight-with-legs-as-using-leg-press_197531-30391.jpg",
},
{
name: "Zaid B.",
role: "Entrepreneur",
quote: "The trainers here are absolute professionals.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/muscular-sportsman-building-biceps-with-dumbbell_651396-294.jpg",
},
{
name: "Maria F.",
role: "Designer",
quote: "Incredible facilities and very clean environment.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/young-woman-pink-top-standing-with-coach_1157-32121.jpg",
},
{
name: "Hamza S.",
role: "Manager",
quote: "Perfect for my busy schedule, highly recommend.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/fitness-woman-does-push-ups-concentrated-forward-with-confident-expression-has-strong-body-musclular-arms-dressed-activewear-poses-outdoors_273609-55484.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
<TestimonialsSection />
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSimple
tag="Have Questions?"
title="Frequently Asked Questions"
description="Everything you need to know about our fitness studio."
items={[
{
question: "What is the monthly fee?",
answer: "Our membership is currently 3,500 per month.",
},
{
question: "Are personal trainers available?",
answer: "Yes, we have expert trainers ready to guide you.",
},
{
question: "Do you offer core conditioning?",
answer: "Absolutely, core and abs conditioning is part of our standard routines.",
},
]}
/>
</SectionErrorBoundary>
</div>
<FaqSection />
<div id="contact" data-section="contact">
<SectionErrorBoundary name="contact">
<ContactCta
tag="Get Started"
text="Ready to transform your lifestyle? Join Balance and Burn today."
primaryButton={{
text: "Call Now: 0333 2276348",
href: "tel:03332276348",
}}
secondaryButton={{
text: "Message Us",
href: "https://instagram.com/b.b_gmy_and_fitness_studio",
}}
/>
</SectionErrorBoundary>
</div>
<ContactSection />
</>
);
}

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 "about" section.
import React from 'react';
import AboutTextSplit from '@/components/sections/about/AboutTextSplit';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function AboutSection(): React.JSX.Element {
return (
<div id="about" data-section="about">
<SectionErrorBoundary name="about">
<AboutTextSplit
title="Your Goals, Our Mission"
descriptions={[
"Balance and Burn Gym and Fitness Studio is Karachi's premier destination for achieving your fitness goals. We offer a comprehensive environment designed to help you balance your lifestyle and burn calories effectively.",
"Located conveniently in Model Colony, our studio provides top-tier facilities, expert trainers, and a variety of workout programs tailored to your unique fitness level and personal objectives.",
]}
/>
</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="Get Started"
text="Ready to transform your lifestyle? Join Balance and Burn today."
primaryButton={{
text: "Call Now: 0333 2276348",
href: "tel:03332276348",
}}
secondaryButton={{
text: "Message Us",
href: "https://instagram.com/b.b_gmy_and_fitness_studio",
}}
/>
</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 "faq" section.
import React from 'react';
import FaqSimple from '@/components/sections/faq/FaqSimple';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FaqSection(): React.JSX.Element {
return (
<div id="faq" data-section="faq">
<SectionErrorBoundary name="faq">
<FaqSimple
tag="Have Questions?"
title="Frequently Asked Questions"
description="Everything you need to know about our fitness studio."
items={[
{
question: "What is the monthly fee?",
answer: "Our membership is currently 3,500 per month.",
},
{
question: "Are personal trainers available?",
answer: "Yes, we have expert trainers ready to guide you.",
},
{
question: "Do you offer core conditioning?",
answer: "Absolutely, core and abs conditioning is part of our standard routines.",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,64 @@
// AUTO-GENERATED by per-section-migrate. Edit freely — Bob will treat this
// file as the canonical source for the "fitness-bento" section.
import React from 'react';
import FeaturesRevealCardsBento from '@/components/sections/features/FeaturesRevealCardsBento';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function FitnessBentoSection(): React.JSX.Element {
return (
<div id="fitness-bento" data-section="fitness-bento">
<SectionErrorBoundary name="fitness-bento">
<FeaturesRevealCardsBento
tag="Gym Facilities"
title="Modern Fitness Environment"
description="We offer world-class equipment and dedicated zones for every type of workout."
items={[
{
title: "Weight Area",
description: "Complete collection of free weights.",
imageSrc: "http://img.b2bpic.net/free-photo/pregnant-woman-gym-with-dumbbells-her-hands_169016-59143.jpg",
href: "#",
},
{
title: "Boxing Zone",
description: "Professional boxing gear for cardio.",
imageSrc: "http://img.b2bpic.net/free-photo/sporty-girl-training-treadmill-home-home-workout-treadmill_169016-67735.jpg",
href: "#",
},
{
title: "Jump Ropes",
description: "Elite conditioning tools.",
imageSrc: "http://img.b2bpic.net/free-photo/young-woman-with-hula-hoop_23-2149374939.jpg",
href: "#",
},
{
title: "Cardio Rowers",
description: "High-intensity endurance machines.",
imageSrc: "http://img.b2bpic.net/free-photo/3d-gym-equipment_23-2151114132.jpg",
href: "#",
},
{
title: "Kettlebells",
description: "Full set for functional training.",
imageSrc: "http://img.b2bpic.net/free-photo/woman-blue-sportswear-doing-lunges_23-2147687906.jpg",
href: "#",
},
{
title: "Yoga Studio",
description: "Quiet space for floor work.",
imageSrc: "http://img.b2bpic.net/free-photo/training-composition-with-space-middle_23-2147692067.jpg",
href: "#",
},
{
title: "Battle Ropes",
description: "High-intensity conditioning.",
imageSrc: "http://img.b2bpic.net/free-photo/weights-kettlebells-gym_23-2147675173.jpg",
href: "#",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,29 @@
// 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 HeroOverlay from '@/components/sections/hero/HeroOverlay';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function HeroSection(): React.JSX.Element {
return (
<div id="hero" data-section="hero">
<SectionErrorBoundary name="hero">
<HeroOverlay
tag="Premier Fitness in Model Colony"
title="Balance and Burn Your Way to Peak Fitness"
description="Join the premier gym and fitness studio in Karachi. Achieve your goals with professional guidance, state-of-the-art equipment, and a supportive community."
primaryButton={{
text: "Get Started",
href: "#pricing",
}}
secondaryButton={{
text: "Our Training",
href: "#training",
}}
imageSrc="http://img.b2bpic.net/free-photo/motivated-young-female-athlete-smiling-gym-using-leg-press-equipment_197531-22866.jpg"
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,47 @@
// 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 MetricsFeatureCards from '@/components/sections/metrics/MetricsFeatureCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function MetricsSection(): React.JSX.Element {
return (
<div id="metrics" data-section="metrics">
<SectionErrorBoundary name="metrics">
<MetricsFeatureCards
tag="Our Impact"
title="Fitness by the Numbers"
description="We are proud of the transformation our members achieve every day."
metrics={[
{
value: "500+",
title: "Active Members",
features: [
"Vibrant community",
"Diverse age groups",
],
},
{
value: "12",
title: "Training Disciplines",
features: [
"Strength",
"Mobility",
"Cardio",
],
},
{
value: "4.8",
title: "Member Rating",
features: [
"Expert guidance",
"Clean facilities",
],
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

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 "pricing" section.
import React from 'react';
import PricingMediaCards from '@/components/sections/pricing/PricingMediaCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function PricingSection(): React.JSX.Element {
return (
<div id="pricing" data-section="pricing">
<SectionErrorBoundary name="pricing">
<PricingMediaCards
tag="Affordable Quality"
title="Simple Membership Pricing"
description="Start your journey today at Karachi's premium gym."
plans={[
{
tag: "Monthly",
price: "3,500",
period: "/month",
features: [
"Full Gym Access",
"Core Workouts",
"Resistance Training",
],
imageSrc: "http://img.b2bpic.net/free-photo/side-view-young-women-gym_23-2148419835.jpg",
primaryButton: {
text: "Join Now",
href: "#contact",
},
},
]}
/>
</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 TestimonialRatingCards from '@/components/sections/testimonial/TestimonialRatingCards';
import SectionErrorBoundary from "@/components/ui/SectionErrorBoundary";
export default function TestimonialsSection(): React.JSX.Element {
return (
<div id="testimonials" data-section="testimonials">
<SectionErrorBoundary name="testimonials">
<TestimonialRatingCards
tag="Member Stories"
title="Proven Results"
description="Hear what our members have to say about their fitness experience."
testimonials={[
{
name: "Ali Khan",
role: "Corporate Worker",
quote: "The best gym in Model Colony! Excellent guidance.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/two-internationals-friends-is-engaged-gym_1157-32106.jpg",
},
{
name: "Sarah J.",
role: "Student",
quote: "I feel so much stronger and more flexible now.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/endurance-workout-fitness-concept-happy-motivated-woman-with-sweat-face-program-equipment-training-session-smiling-delighted-pushing-weight-with-legs-as-using-leg-press_197531-30391.jpg",
},
{
name: "Zaid B.",
role: "Entrepreneur",
quote: "The trainers here are absolute professionals.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/muscular-sportsman-building-biceps-with-dumbbell_651396-294.jpg",
},
{
name: "Maria F.",
role: "Designer",
quote: "Incredible facilities and very clean environment.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/young-woman-pink-top-standing-with-coach_1157-32121.jpg",
},
{
name: "Hamza S.",
role: "Manager",
quote: "Perfect for my busy schedule, highly recommend.",
rating: 5,
imageSrc: "http://img.b2bpic.net/free-photo/fitness-woman-does-push-ups-concentrated-forward-with-confident-expression-has-strong-body-musclular-arms-dressed-activewear-poses-outdoors_273609-55484.jpg",
},
]}
/>
</SectionErrorBoundary>
</div>
);
}

View File

@@ -0,0 +1,153 @@
/* eslint-disable */
// @ts-nocheck — generated by catalog-eject; runtime-correct but TS strict-mode false-positives on inlined catalog body
import Button from "@/components/ui/Button";
import TextAnimation from "@/components/ui/TextAnimation";
import ImageOrVideo from "@/components/ui/ImageOrVideo";
import GridOrCarousel from "@/components/ui/GridOrCarousel";
import ScrollReveal from "@/components/ui/ScrollReveal";
const items = [
{
tag: "Strength",
title: "Strength & Resistance",
description: "Build muscle and increase metabolic rate with professional strength training.",
imageSrc: "http://img.b2bpic.net/free-photo/sports-brunette-woman-sportswear-training-gym_1157-30609.jpg",
primaryButton: {
text: "Explore",
href: "#"
}
},
{
tag: "Flexibility",
title: "Flexibility Routines",
description: "Enhance mobility and recovery with our expert-led stretching and flexibility sessions.",
imageSrc: "http://img.b2bpic.net/free-photo/defocused-dumbbells_1203-368.jpg",
primaryButton: {
text: "Explore",
href: "#"
}
},
{
tag: "Stability",
title: "Balance Workouts",
description: "Improve core stability and athletic performance through specialized balance drills.",
imageSrc: "http://img.b2bpic.net/free-photo/doctor-observes-patient-balance-exercise-movement-control_169016-71198.jpg",
primaryButton: {
text: "Explore",
href: "#"
}
},
{
tag: "Access",
title: "Unlimited Access",
description: "Train on your own schedule with 24/7 unlimited access to all gym facilities.",
imageSrc: "https://images.unsplash.com/photo-1534438327276-14e5300c3a48?q=80&w=1470&auto=format&fit=crop",
primaryButton: {
text: "Explore",
href: "#"
}
},
{
tag: "Consultation",
title: "Free Consultation",
description: "Kickstart your fitness journey with a complimentary session with our expert trainers.",
imageSrc: "https://images.unsplash.com/photo-1571019614242-c5c5dee9f50b?q=80&w=1470&auto=format&fit=crop",
primaryButton: {
text: "Explore",
href: "#"
}
},
{
tag: "Amenities",
title: "Locker Facilities",
description: "Secure and spacious locker rooms equipped with showers and premium amenities.",
imageSrc: "https://images.unsplash.com/photo-1583454110551-21f2fa2afe61?q=80&w=1470&auto=format&fit=crop",
primaryButton: {
text: "Explore",
href: "#"
}
}
];
type FeatureItem = {
tag: string;
title: string;
description: string;
primaryButton: { text: string; href: string };
} & ({ imageSrc: string; videoSrc?: never } | { videoSrc: string; imageSrc?: never });
interface FeaturesTaggedCardsProps {
tag: string;
title: string;
description: string;
primaryButton?: { text: string; href: string };
secondaryButton?: { text: string; href: string };
items: FeatureItem[];
}
const TrainingInline = () => {
return (
<section aria-label="Features section" className="py-20">
<div className="flex flex-col gap-8 md:gap-10">
<div className="flex flex-col items-center w-content-width mx-auto gap-2">
<div className="px-3 py-1 mb-1 text-sm card rounded w-fit">
<p>{"Our Expertise"}</p>
</div>
<TextAnimation
text={"Comprehensive Training Programs"}
variant="slide-up"
gradientText={true}
tag="h2"
className="md:max-w-8/10 text-6xl 2xl:text-7xl leading-[1.15] font-semibold text-center text-balance"
/>
<TextAnimation
text={"We specialize in a diverse range of training disciplines to ensure a balanced, holistic fitness journey."}
variant="slide-up"
gradientText={false}
tag="p"
className="md:max-w-7/10 text-lg md:text-xl leading-snug text-center text-balance"
/>
{(undefined || undefined) && (
<div className="flex flex-wrap justify-center gap-3 mt-2 md:mt-3">
{undefined && <Button text={undefined.text} href={undefined.href} variant="primary"/>}
{undefined && <Button text={undefined.text} href={undefined.href} variant="secondary"animationDelay={0.1} />}
</div>
)}
</div>
<ScrollReveal variant="fade">
<GridOrCarousel>
{items.map((item) => (
<div key={item.title} className="flex flex-col gap-3 xl:gap-3.5 2xl:gap-4 p-3 xl:p-3.5 2xl:p-4 h-full card rounded group">
<div className="relative aspect-square rounded overflow-hidden">
<ImageOrVideo imageSrc={item.imageSrc} videoSrc={item.videoSrc} className="transition-transform duration-500 ease-in-out group-hover:scale-105" />
<div className="absolute top-3 right-3 xl:top-3.5 xl:right-3.5 2xl:top-4 2xl:right-4 px-3 py-1 text-sm card rounded w-fit">
<p>{item.tag}</p>
</div>
</div>
<div className="flex flex-col justify-between flex-1 gap-1 p-3 xl:p-3.5 2xl:p-4">
<div className="flex flex-col gap-1">
<h3 className="text-2xl font-semibold leading-snug text-balance">{item.title}</h3>
<p className="text-base leading-snug text-balance">{item.description}</p>
</div>
<Button text={item.primaryButton.text} href={item.primaryButton.href} variant="primary" className="w-full mt-2 md:mt-3" />
</div>
</div>
))}
</GridOrCarousel>
</ScrollReveal>
</div>
</section>
);
};
export default function TrainingSection() {
return (
<div data-webild-section="training" id="training">
<TrainingInline />
</div>
);
}