← back to gonzalogagliardi__argen

Function bodies 341 total

All specs Real LLM only Function bodies
HowItWorksPage function · typescript · L15-L26 (12 LOC)
app/como-funciona/page.tsx
export default function HowItWorksPage() {
  return (
    <main>
      <ProcessHero />
      <DetailedSteps />
      <Requirements />
      <Timeline />
      <FaqAccordion />
      <FaqContact />
    </main>
  )
}
ContactPage function · typescript · L12-L34 (23 LOC)
app/contacto/page.tsx
export default function ContactPage() {
  return (
    <main className="bg-background">
      <ContactHero />
      
      <section className="py-20 lg:py-28">
        <div className="container mx-auto px-4">
          <div className="grid grid-cols-1 lg:grid-cols-2 gap-12 lg:gap-24 max-w-6xl mx-auto">
            {/* Columna Izquierda: Información */}
            <div className="order-2 lg:order-1">
              <ContactInfo />
            </div>

            {/* Columna Derecha: Formulario */}
            <div id="form" className="order-1 lg:order-2">
              <ContactForm />
            </div>
          </div>
        </div>
      </section>
    </main>
  )
}
ExperiencesPage function · typescript · L13-L22 (10 LOC)
app/experiencias/page.tsx
export default function ExperiencesPage() {
  return (
    <main>
      <ExperiencesHero />
      <ExperiencesGallery />
      <Countries />
      <Stats />
    </main>
  )
}
generateStaticParams function · typescript · L10-L12 (3 LOC)
app/experiencias/[slug]/page.tsx
export async function generateStaticParams() {
  return ARTICLES.map((a) => ({ slug: a.slug }))
}
generateMetadata function · typescript · L16-L23 (8 LOC)
app/experiencias/[slug]/page.tsx
export async function generateMetadata({ params }: Props): Promise<Metadata> {
  const { slug } = await params
  const post = ARTICLES.find((a) => a.slug === slug)
  return {
    title: post ? `${post.title} | ARGENGOAL` : "Experiencia | ARGENGOAL",
    description: post?.description ?? "Experiencias de fútbol en Argentina",
  }
}
ExperienceArticlePage function · typescript · L25-L43 (19 LOC)
app/experiencias/[slug]/page.tsx
export default async function ExperienceArticlePage({ params }: Props) {
  const { slug } = await params
  const post = ARTICLES.find((a) => a.slug === slug)

  if (!post) {
    return (
      <main className="py-20">
        <div className="container mx-auto px-4">
          <p>No existe este artículo.</p>
          <Link href="/experiencias" className="underline">
            Volver
          </Link>
        </div>
      </main>
    )
  }

  return <ArticleClient post={post} />
}
RootLayout function · typescript · L67-L87 (21 LOC)
app/layout.tsx
export default function RootLayout({
  children,
}: Readonly<{
  children: React.ReactNode
}>) {
  return (
    <html lang="es">
      <head>
        <meta name="msapplication-config" content="/favicon/browserconfig.xml" />
        <meta name="theme-color" content="#62b3e5" />
      </head>
      <body className={`${inter.variable} font-sans antialiased`}>
        <Navbar />
        {children}
        <Footer />
        <FloatingWhatsApp />
        <Analytics />
      </body>
    </html>
  )
}
All rows above produced by Repobility · https://repobility.com
AboutPage function · typescript · L14-L24 (11 LOC)
app/nosotros/page.tsx
export default function AboutPage() {
  return (
    <main>
      <AboutHero />
      <Founder />
      <MissionVision />
      <Network />
      <Gallery />
    </main>
  )
}
HomePage function · typescript · L11-L25 (15 LOC)
app/page.tsx
export default function HomePage() {
  return (
    <main>
      <Hero />
      <ProgramsOverview />
      <VideoTestimonials />
      <WhyArgentina />
      <WhatIsArgengoal />
      <HowItWorks />
      <Testimonials />
      <HomeGallery />
      <CtaBanner />
    </main>
  )
}
ProgramsPage function · typescript · L13-L22 (10 LOC)
app/programas/page.tsx
export default function ProgramsPage() {
  return (
    <main>
      <ProgramsHero />
      <RosarioExperience />
      <ProProgram />
      <ProgramComparison />
    </main>
  )
}
AboutHero function · typescript · L1-L26 (26 LOC)
components/about/about-hero.tsx
export function AboutHero() {
  return (
    <section className="relative py-20 lg:py-28 overflow-hidden">
      <div className="absolute inset-0 z-0">
        <img
          src="/varias/fondos/11.jpeg"
          alt="Rosario Argentina"
          className="w-full h-full object-cover"
        />
        <div className="absolute inset-0 bg-gradient-to-br from-black/85 via-black/70 to-primary/30" />
      </div>

      <div className="container relative z-10 mx-auto px-4">
        <div className="max-w-3xl">
          <h1 className="text-4xl md:text-5xl lg:text-6xl font-bold text-white mb-6 text-balance">
            Sobre Nosotros
          </h1>
          <p className="text-lg md:text-xl text-white/90 leading-relaxed text-pretty">
            Somos ArgenGoal. Nacimos en Rosario, el lugar donde nacen las estrellas. 
            Liderados por directivos con 30 años de experiencia en la élite del fútbol argentino.
          </p>
        </div>
      </div>
    </section>
  )
}
Founder function · typescript · L4-L83 (80 LOC)
components/about/founder.tsx
export function Founder() {
  const achievements = [
    {
      icon: Briefcase,
      title: "Gestión Deportiva",
      description: "Secretario Técnico, Director de Scouting y Director de Academia Internacional",
    },
    {
      icon: Globe,
      title: "Alcance Global",
      description: "Alianzas estratégicas en más de 30 países",
    },
    {
      icon: TrendingUp,
      title: "Formación",
      description: "Desarrollo de redes de captación internacional",
    },
    {
      icon: Award,
      title: "Trayectoria",
      description: "Experiencia en todas las áreas del fútbol: infantil, juvenil y profesional",
    },
  ]

  return (
    <section className="py-20 lg:py-28 bg-background">
      <div className="container mx-auto px-4">
        <div className="max-w-6xl mx-auto">
          <div className="grid grid-cols-1 lg:grid-cols-2 gap-12 items-center mb-16">
            {/* Image */}
            <div className="relative">
              <div className="aspect-[4/5] round
Gallery function · typescript · L1-L53 (53 LOC)
components/about/gallery.tsx
export function Gallery() {
  const images = [
    {
      src: "/gallery/18 - Paseo por la ciudad de Rosario experiencia PRO 202/paseo-por-la-ciudad-de-rosario-experiencia-pro-202-005.webp",
      alt: "Experiencia ARGENGOAL",
    },
    {
      src: "/varias/2.jpeg",
      alt: "Entrenamiento en Argentina",
    },
    {
      src: "/varias/3.jpeg",
      alt: "Jugadores internacionales",
    },
    {
      src: "/gallery/18 - Paseo por la ciudad de Rosario experiencia PRO 202/paseo-por-la-ciudad-de-rosario-experiencia-pro-202-013.webp",
      alt: "Desarrollo profesional",
    },
    {
      src: "/varias/8.jpeg",
      alt: "Inmersión futbolística",
    },
    {
      src: "/varias/9.jpeg",
      alt: "Momentos ARGENGOAL",
    },
  ]

  return (
    <section className="py-24 lg:py-32 bg-gradient-to-b from-background via-primary/5 to-background">
      <div className="container mx-auto px-4">
        <div className="max-w-7xl mx-auto text-center mb-16">
          <h2 className="text-
MissionVision function · typescript · L4-L65 (62 LOC)
components/about/mission-vision.tsx
export function MissionVision() {
  return (
    <section className="py-20 lg:py-28 bg-gradient-to-b from-primary/5 to-background">
      <div className="container mx-auto px-4">
        <div className="max-w-5xl mx-auto">
          <div className="grid grid-cols-1 lg:grid-cols-3 gap-8">
            {/* Mission */}
            <Card className="relative p-8 border-0 bg-white shadow-lg hover:shadow-2xl hover:shadow-primary/20 transition-all duration-300 hover:-translate-y-1 group overflow-hidden">
              <div className="absolute top-0 left-0 right-0 h-1.5 bg-gradient-to-r from-primary via-primary-dark to-primary" />
              <div className="inline-flex items-center justify-center w-14 h-14 rounded-xl bg-gradient-to-br from-primary to-primary-dark shadow-lg shadow-primary/30 mb-6 group-hover:scale-110 transition-transform">
                <Target className="w-7 h-7 text-white" />
              </div>
              <h3 className="text-2xl font-black text-foreground mb-4">Nuest
Network function · typescript · L3-L52 (50 LOC)
components/about/network.tsx
export function Network() {
  const stats = [
    {
      icon: Globe,
      number: "30+",
      label: "Países con Alianzas",
    },
    {
      icon: Users,
      number: "1000+",
      label: "Jugadores Evaluados",
    },
    {
      icon: MapPin,
      number: "AFA",
      label: "Acceso a Clubes Oficiales",
    },
  ]

  return (
    <section className="py-20 lg:py-28 bg-gradient-to-b from-background via-primary/5 to-background">
      <div className="container mx-auto px-4">
        <div className="max-w-4xl mx-auto text-center mb-12">
          <h2 className="text-3xl md:text-4xl font-bold text-foreground mb-6 text-balance">
            Nuestra Red Internacional
          </h2>
          <p className="text-lg text-muted-foreground leading-relaxed text-pretty">
            Hemos construido una red sólida de captación y desarrollo. Asesoramos a academias de todo el mundo y gestionamos su inmersión en el fútbol argentino.
          </p>
        </div>

        <div className="grid
Repobility — same analyzer, your code, free for public repos · /scan/
ContactForm function · typescript · L13-L98 (86 LOC)
components/contact/contact-form.tsx
export function ContactForm() {
  const [isSubmitting, setIsSubmitting] = useState(false)

  const handleSubmit = async (e: React.FormEvent<HTMLFormElement>) => {
    e.preventDefault()
    setIsSubmitting(true)

    // Simulate form submission
    await new Promise((resolve) => setTimeout(resolve, 1500))

    alert("¡Gracias por tu mensaje! Nos pondremos en contacto contigo pronto.")
    setIsSubmitting(false)
  }

  return (
    <Card className="p-8 border-border">
      <h2 className="text-2xl font-bold text-foreground mb-6">Envíanos un Mensaje</h2>
      <form onSubmit={handleSubmit} className="space-y-6">
        <div className="grid grid-cols-1 md:grid-cols-2 gap-4">
          <div className="space-y-2">
            <Label htmlFor="firstName">Nombre *</Label>
            <Input id="firstName" name="firstName" required placeholder="Tu nombre" />
          </div>
          <div className="space-y-2">
            <Label htmlFor="lastName">Apellido *</Label>
            <Input id="la
ContactHero function · typescript · L1-L17 (17 LOC)
components/contact/contact-hero.tsx
export function ContactHero() {
  return (
    <section className="py-20 lg:py-28 bg-gradient-to-br from-primary/10 via-background to-background">
      <div className="container mx-auto px-4">
        <div className="max-w-3xl mx-auto text-center">
          <h1 className="text-4xl md:text-5xl lg:text-6xl font-bold text-foreground mb-6 text-balance">
            Hablemos de tu Próxima Experiencia
          </h1>
          <p className="text-lg md:text-xl text-muted-foreground leading-relaxed text-pretty">
            Estamos aquí para responder todas tus preguntas y ayudarte a comenzar tu viaje al corazón del fútbol
            argentino
          </p>
        </div>
      </div>
    </section>
  )
}
ContactInfo function · typescript · L6-L83 (78 LOC)
components/contact/contact-info.tsx
export function ContactInfo() {
  return (
    <div className="space-y-6">
      <div>
        <h2 className="text-2xl font-bold text-foreground mb-4">Información de Contacto</h2>
        <p className="text-muted-foreground leading-relaxed mb-8">
          ¿Prefieres hablar directamente con nosotros? Estamos disponibles para resolver dudas de familias y clubes.
        </p>

        <div className="space-y-4">
          {/* Email */}
          <Card className="relative p-6 border-0 bg-white shadow-lg hover:shadow-xl hover:shadow-primary/20 transition-all duration-300 hover:-translate-y-1 overflow-hidden">
            <div className="absolute top-0 left-0 right-0 h-1 bg-gradient-to-r from-primary via-primary-dark to-primary" />
            <div className="flex items-start gap-4">
              <div className="shrink-0 w-12 h-12 rounded-xl bg-gradient-to-br from-primary to-primary-dark shadow-lg shadow-primary/30 flex items-center justify-center">
                <Mail className="w-6 h-6
ArticleClient function · typescript · L18-L183 (166 LOC)
components/experiences/article-client.tsx
export function ArticleClient({ post }: { post: Article }) {
  const paragraphs = useMemo(
    () => (post.content?.length ? post.content : [post.description]),
    [post.content, post.description]
  )

  const gallery = post.gallery ?? []
  const [open, setOpen] = useState(false)
  const [index, setIndex] = useState(0)

  const hasGallery = gallery.length > 0

  function openAt(i: number) {
    setIndex(i)
    setOpen(true)
  }

  function close() {
    setOpen(false)
  }

  function prev() {
    setIndex((i) => (i - 1 + gallery.length) % gallery.length)
  }

  function next() {
    setIndex((i) => (i + 1) % gallery.length)
  }

  useEffect(() => {
    if (!open) return
    function onKeyDown(e: KeyboardEvent) {
      if (e.key === "Escape") close()
      if (e.key === "ArrowLeft") prev()
      if (e.key === "ArrowRight") next()
    }
    window.addEventListener("keydown", onKeyDown)
    return () => window.removeEventListener("keydown", onKeyDown)
  }, [open, gallery.length])

  retu
openAt function · typescript · L30-L33 (4 LOC)
components/experiences/article-client.tsx
  function openAt(i: number) {
    setIndex(i)
    setOpen(true)
  }
close function · typescript · L35-L37 (3 LOC)
components/experiences/article-client.tsx
  function close() {
    setOpen(false)
  }
prev function · typescript · L39-L41 (3 LOC)
components/experiences/article-client.tsx
  function prev() {
    setIndex((i) => (i - 1 + gallery.length) % gallery.length)
  }
next function · typescript · L43-L45 (3 LOC)
components/experiences/article-client.tsx
  function next() {
    setIndex((i) => (i + 1) % gallery.length)
  }
Methodology: Repobility · https://repobility.com/research/state-of-ai-code-2026/
onKeyDown function · typescript · L49-L53 (5 LOC)
components/experiences/article-client.tsx
    function onKeyDown(e: KeyboardEvent) {
      if (e.key === "Escape") close()
      if (e.key === "ArrowLeft") prev()
      if (e.key === "ArrowRight") next()
    }
Countries function · typescript · L3-L52 (50 LOC)
components/experiences/countries.tsx
export function Countries() {
  const regions = [
    {
      region: "Europa",
      countries: ["España", "Portugal", "Italia", "Francia", "Inglaterra", "Alemania"],
    },
    {
      region: "América del Norte",
      countries: ["Estados Unidos", "Canadá", "México"],
    },
    {
      region: "América del Sur",
      countries: ["Brasil", "Chile", "Uruguay", "Colombia", "Perú"],
    },
    {
      region: "Asia y Otros",
      countries: ["Japón", "China", "Australia", "Sudáfrica"],
    },
  ]

  return (
    <section className="py-20 lg:py-28 bg-muted/30">
      <div className="container mx-auto px-4">
        <div className="max-w-4xl mx-auto text-center mb-16">
          <Globe className="w-16 h-16 text-primary mx-auto mb-6" />
          <h2 className="text-3xl md:text-4xl font-bold text-foreground mb-6 text-balance">Presencia Global</h2>
          <p className="text-lg text-muted-foreground leading-relaxed">
            Hemos trabajado con equipos y jugadores de todos los con
ExperiencesGallery function · typescript · L11-L116 (106 LOC)
components/experiences/experiences-gallery.tsx
export function ExperiencesGallery() {
  const [filter, setFilter] = useState("all")

  const categories = [
    { id: "all", label: "Todas" },
    { id: "players", label: "Jugadores" },
    { id: "coaches", label: "Entrenadores" },
  ]

  const experiences = EXPERIENCES


  const filteredExperiences = filter === "all" ? experiences : experiences.filter((exp) => exp.category === filter)

  return (
    <section className="py-20 lg:py-28 bg-background">
      <div className="container mx-auto px-4">
        <div className="max-w-6xl mx-auto">
          {/* Filter Tabs */}
          <div className="flex flex-wrap gap-3 justify-center mb-12">
            {categories.map((category) => (
              <button
                key={category.id}
                onClick={() => setFilter(category.id)}
                className={`px-8 py-3 rounded-full font-bold transition-all duration-300 ${
                  filter === category.id
                    ? "bg-gradient-to-r from-primary to-primary-
ExperiencesHero function · typescript · L1-L26 (26 LOC)
components/experiences/experiences-hero.tsx
export function ExperiencesHero() {
  return (
    <section className="relative py-20 lg:py-28 overflow-hidden">
      <div className="absolute inset-0 z-0">
        <img
          src="/international-teams-argentina-football.jpg"
          alt="International Teams"
          className="w-full h-full object-cover"
        />
        <div className="absolute inset-0 bg-gradient-to-br from-primary/90 via-primary/70 to-black/80" />
      </div>

      <div className="container relative z-10 mx-auto px-4">
        <div className="max-w-3xl">
          <h1 className="text-4xl md:text-5xl lg:text-6xl font-bold text-white mb-6 text-balance">
            Experiencias Internacionales
          </h1>
          <p className="text-lg md:text-xl text-white/90 leading-relaxed text-pretty">
            Equipos, academias y jugadores de todo el mundo han confiado en ARGENGOAL para vivir experiencias únicas de
            fútbol en Argentina.
          </p>
        </div>
      </div>
    </section>
  
Stats function · typescript · L3-L52 (50 LOC)
components/experiences/stats.tsx
export function Stats() {
  const stats = [
    {
      icon: Users,
      number: "500+",
      label: "Participantes",
      description: "Jugadores que han vivido la experiencia",
    },
    {
      icon: MapPin,
      number: "30+",
      label: "Países",
      description: "De todos los continentes",
    },
    {
      icon: Trophy,
      number: "50+",
      label: "Equipos",
      description: "Clubes y academias internacionales",
    },
    {
      icon: Star,
      number: "98%",
      label: "Satisfacción",
      description: "Recomendarían la experiencia",
    },
  ]

  return (
    <section className="py-20 lg:py-28 bg-primary/5">
      <div className="container mx-auto px-4">
        <div className="max-w-6xl mx-auto">
          <div className="grid grid-cols-1 md:grid-cols-2 lg:grid-cols-4 gap-8">
            {stats.map((stat, index) => {
              const Icon = stat.icon
              return (
                <div key={index} className="text-center">
                 
FaqAccordion function · typescript · L3-L131 (129 LOC)
components/faq/faq-accordion.tsx
export function FaqAccordion() {
  const categories = [
    {
      title: "General",
      faqs: [
        {
          question: "¿Qué es ARGENGOAL?",
          answer:
            "ARGENGOAL es una organización especializada que conecta jugadores y academias del mundo con el fútbol argentino. Liderada por directores con amplia trayectoria en clubes profesionales de primera división, ofrecemos acceso directo a la estructura de AFA.",
        },
        {
          question: "¿Por qué elegir Rosario?",
          answer:
            "Rosario es la capital mundial del fútbol, cuna de Lionel Messi y Ángel Di María. Aquí se respira una cultura futbolística única y nuestros programas te permiten pisar las mismas canchas donde ellos se formaron.",
        },
        {
          question: "¿Cuánto tiempo de anticipación necesito?",
          answer:
            "Recomendamos reservar con 3 a 6 meses de anticipación para asegurar disponibilidad, especialmente en el 'Pro Program' donde las plaz
FaqContact function · typescript · L5-L24 (20 LOC)
components/faq/faq-contact.tsx
export function FaqContact() {
  return (
    <section className="py-20 lg:py-28 bg-muted/30">
      <div className="container mx-auto px-4">
        <div className="max-w-3xl mx-auto text-center">
          <MessageCircle className="w-16 h-16 text-primary mx-auto mb-6" />
          <h2 className="text-3xl md:text-4xl font-bold text-foreground mb-6 text-balance">
            ¿No Encontraste tu Respuesta?
          </h2>
          <p className="text-lg text-muted-foreground mb-8 leading-relaxed">
            Nuestro equipo está listo para responder cualquier pregunta adicional que tengas
          </p>
          <Button asChild size="lg" className="bg-primary text-primary-foreground">
            <Link href="/contacto">Contactar con Nosotros</Link>
          </Button>
        </div>
      </div>
    </section>
  )
}
FloatingWhatsApp function · typescript · L3-L41 (39 LOC)
components/floating-whatsapp.tsx
export function FloatingWhatsApp() {
  const phoneNumber = "5493413452340"
  const message = "Hola, me comunico desde la web de ARGENGOAL. Quisiera hacer una consulta."
  const whatsappUrl = `https://wa.me/${phoneNumber}?text=${encodeURIComponent(message)}`

  return (
    <a
      href={whatsappUrl}
      target="_blank"
      rel="noopener noreferrer"
      className="fixed bottom-6 right-6 z-50 group"
      aria-label="Contactar por WhatsApp"
    >
      {/* Pulse animation ring */}
      <div className="absolute inset-0 bg-[#25D366] rounded-full animate-ping opacity-75 group-hover:opacity-100" />

      {/* Button container */}
      <div className="relative bg-white rounded-full p-4 shadow-lg hover:shadow-2xl transition-all duration-300 hover:scale-110">
        {/* WhatsApp official icon */}
        <svg
          width="32"
          height="32"
          viewBox="0 0 32 32"
          fill="none"
          xmlns="http://www.w3.org/2000/svg"
        >
          <path
            
All rows scored by the Repobility analyzer (https://repobility.com)
Footer function · typescript · L5-L129 (125 LOC)
components/footer.tsx
export function Footer() {
  return (
    <footer className="relative border-t border-primary/20 bg-gradient-to-br from-foreground/95 via-foreground to-foreground/95 text-white overflow-hidden">
      {/* Línea celeste superior */}
      <div className="absolute top-0 left-0 right-0 h-1 bg-gradient-to-r from-primary via-primary-dark to-primary" />

      {/* Patrón de fondo */}
      <div className="absolute inset-0 opacity-5" style={{ backgroundImage: 'radial-gradient(circle, white 1px, transparent 1px)', backgroundSize: '30px 30px' }} />

      {/* Elementos decorativos */}
      <div className="absolute top-0 right-0 w-96 h-96 bg-primary/10 rounded-full blur-3xl" />
      <div className="absolute bottom-0 left-0 w-96 h-96 bg-primary/10 rounded-full blur-3xl" />

      <div className="container mx-auto px-4 py-16 lg:py-20 relative z-10">
        <div className="grid grid-cols-1 gap-12 lg:grid-cols-4 lg:gap-16">
          {/* Brand */}
          <div className="lg:col-span-1">
       
CtaBanner function · typescript · L5-L58 (54 LOC)
components/home/cta-banner.tsx
export function CtaBanner() {
  return (
    <section className="relative py-24 lg:py-32 overflow-hidden">
      {/* Background with overlay */}
      <div className="absolute inset-0 z-0">
        <img
          src="/argentina-football-players-celebrating-team-spirit.jpg"
          alt="Football Team"
          className="w-full h-full object-cover"
        />
        <div className="absolute inset-0 bg-gradient-to-br from-primary/90 via-primary-dark/85 to-primary/90" />
        {/* Patrón de puntos sutil */}
        <div className="absolute inset-0 opacity-10" style={{ backgroundImage: 'radial-gradient(circle, white 1px, transparent 1px)', backgroundSize: '20px 20px' }} />
      </div>

      {/* Content */}
      <div className="container relative z-10 mx-auto px-4">
        <div className="max-w-4xl mx-auto text-center">
          <h2 className="text-4xl md:text-5xl lg:text-6xl font-black text-white mb-8 text-balance leading-tight">
            ¿Listo Para Vivir la Experiencia{" "
Hero function · typescript · L5-L81 (77 LOC)
components/home/hero.tsx
export function Hero() {
  return (
    <section className="relative min-h-[85vh] flex items-center justify-center overflow-hidden">
      {/* Línea superior celeste AFA */}
      <div className="absolute top-0 left-0 right-0 h-1 bg-gradient-to-r from-primary via-primary-dark to-primary z-20" />

      {/* Background Image */}
      <div className="absolute inset-0 z-0">
        <img
          src="/varias/fondos/10.jpeg"
          alt="Football Stadium Argentina"
          fetchPriority="high"
          className="w-full h-full object-cover scale-105 animate-subtle-zoom"
        />
        <div className="absolute inset-0 bg-gradient-to-b from-black/75 via-black/50 to-black/75" />
        {/* Gradiente celeste sutil */}
        <div className="absolute inset-0 bg-gradient-to-br from-primary/20 via-transparent to-primary-dark/20" />

        {/* Elementos decorativos flotantes */}
        <div className="absolute top-20 left-10 w-32 h-32 bg-primary/20 rounded-full blur-2xl animate-floa
HomeGallery function · typescript · L1-L60 (60 LOC)
components/home/home-gallery.tsx
export function HomeGallery() {
  const images = [
    {
      src: "/varias/1.jpeg",
      alt: "Experiencia ARGENGOAL",
    },
    {
      src: "/varias/5.jpeg",
      alt: "Fútbol argentino",
    },
    {
      src: "/varias/4.jpeg",
      alt: "Jugadores en acción",
    },
    {
      src: "/varias/12.jpeg",
      alt: "Entrenamiento profesional",
    },
    {
      src: "/varias/16.jpeg",
      alt: "Desarrollo en Argentina",
    },
    {
      src: "/varias/18.jpeg",
      alt: "Experiencias inolvidables",
    },
  ]

  return (
    <section className="py-24 lg:py-32 bg-gradient-to-b from-background via-primary/5 to-background">
      <div className="container mx-auto px-4">
        <div className="max-w-7xl mx-auto text-center mb-16">
          <h2 className="text-3xl md:text-4xl font-bold text-foreground mb-6">
            Vive la Experiencia ARGENGOAL
          </h2>
          <p className="text-lg text-muted-foreground">
            Más que fútbol, una inmersión total en la c
HowItWorks function · typescript · L3-L72 (70 LOC)
components/home/how-it-works.tsx
export function HowItWorks() {
  const steps = [
    {
      number: "01",
      icon: MessageSquare,
      title: "Contacto Inicial",
      description: "Cuéntanos tus objetivos. Te respondemos en menos de 24 horas.",
    },
    {
      number: "02",
      icon: Video,
      title: "Videollamada",
      description: "Reunión virtual para resolver todas tus dudas y diseñar tu experiencia.",
    },
    {
      number: "03",
      icon: FileCheck,
      title: "Reserva",
      description: "Confirmamos tu plaza y te guiamos en cada paso de la documentación.",
    },
    {
      number: "04",
      icon: Plane,
      title: "Experiencia",
      description: "Te recibimos en Argentina. Coordinamos todo de principio a fin.",
    },
  ]

  return (
    <section className="py-24 lg:py-32 bg-white">
      <div className="container mx-auto px-4">
        <div className="max-w-3xl mx-auto text-center mb-20">
          <h2 className="text-4xl md:text-5xl lg:text-6xl font-bold text-foreground mb-8
ProgramsOverview function · typescript · L6-L136 (131 LOC)
components/home/programs-overview.tsx
export function ProgramsOverview() {
  const programs = [
    {
      title: "Rosario Experience",
      description:
        "Experiencia para equipos: más partidos amistosos que un torneo tradicional, combinados con actividades y recorridos por la ciudad.",
      icon: Users,
      features: [
        "Amistosos planificados contra una variedad de clubes rosarinos (no solo dos)",
        "Doble turno (Lun–Vie): competencia + paseos/actividades",
        "Alojamiento, traslados y comidas incluidas",
        "Edades: 7 a 20 años (Masc. y Fem.)",
      ],
      duration: "10 días (Propuesta adaptable)",
      href: "/programas#rosario-experience",
      type: "group",
    },
    {
      title: "Pro Program",
      description:
        "Formación real: viví y entrená dentro de un club profesional. Programa individual con sedes en distintas ciudades del país.",
      icon: Award,
      features: [
        "Entrenamiento oficial con tu categoría (según cupos y disponibilidad)",
        "Vi
Testimonials function · typescript · L4-L61 (58 LOC)
components/home/testimonials.tsx
export function Testimonials() {
  const milestones = [
    {
      icon: Trophy,
      title: "Competencia de Elite",
      description:
        "Participación histórica en la Manchester United Premier Cup - World Finals 2014 en Old Trafford, representando el talento rosarino.",
      highlight: "Experiencia Internacional",
    },
    {
      icon: Globe,
      title: "Red Global",
      description:
        "Hemos establecido alianzas estratégicas en más de 30 países, conectando academias de todo el mundo con la metodología argentina.",
      highlight: "Trayectoria Comprobada",
    },
    {
      icon: Users,
      title: "Gestión Profesional",
      description:
        "Amplia trayectoria gestionando áreas infantiles, juveniles y profesionales en clubes de primera división aseguran una estructura seria.",
      highlight: "Respaldo Institucional",
    },
  ]

  return (
    <section className="py-20 lg:py-28 bg-white">
      <div className="container mx-auto px-4">
        <div cl
VideoModal function · typescript · L17-L109 (93 LOC)
components/home/video-modal.tsx
export function VideoModal({
  video,
  isOpen,
  onClose,
  onNext,
  onPrevious,
  currentIndex,
  totalVideos,
}: VideoModalProps) {
  const videoRef = useRef<HTMLVideoElement>(null)

  useEffect(() => {
    if (!isOpen) return

    const handleKeyDown = (e: KeyboardEvent) => {
      if (e.key === "Escape") onClose()
      if (e.key === "ArrowLeft") onPrevious()
      if (e.key === "ArrowRight") onNext()
    }

    window.addEventListener("keydown", handleKeyDown)
    return () => window.removeEventListener("keydown", handleKeyDown)
  }, [isOpen, onClose, onNext, onPrevious])

  useEffect(() => {
    if (isOpen && videoRef.current) {
      videoRef.current.play()
    }
  }, [isOpen, video.id])

  if (!isOpen) return null

  return (
    <div
      className="fixed inset-0 z-50 bg-black/95 flex items-center justify-center p-4"
      onClick={onClose}
    >
      {/* Close button */}
      <button
        onClick={onClose}
        className="absolute top-4 right-4 z-50 text-white hove
All rows above produced by Repobility · https://repobility.com
VideoTestimonials function · typescript · L9-L153 (145 LOC)
components/home/video-testimonials.tsx
export function VideoTestimonials() {
  const [selectedVideoIndex, setSelectedVideoIndex] = useState<number | null>(null)
  const [emblaRef, emblaApi] = useEmblaCarousel({
    loop: true,
    align: "center",
    dragFree: false,
    slidesToScroll: 1,
  })

  // Auto-scroll carousel
  useEffect(() => {
    if (!emblaApi) return

    const autoplay = setInterval(() => {
      if (emblaApi.canScrollNext()) {
        emblaApi.scrollNext()
      }
    }, 4000)

    return () => clearInterval(autoplay)
  }, [emblaApi])

  const scrollPrev = useCallback(() => {
    if (emblaApi) emblaApi.scrollPrev()
  }, [emblaApi])

  const scrollNext = useCallback(() => {
    if (emblaApi) emblaApi.scrollNext()
  }, [emblaApi])

  const openVideo = (index: number) => {
    setSelectedVideoIndex(index)
  }

  const closeVideo = () => {
    setSelectedVideoIndex(null)
  }

  const nextVideo = () => {
    if (selectedVideoIndex === null) return
    setSelectedVideoIndex((selectedVideoIndex + 1) % VIDEO_TEST
WhatIsArgengoal function · typescript · L4-L77 (74 LOC)
components/home/what-is-argengoal.tsx
export function WhatIsArgengoal() {
  const values = [
    {
      icon: Globe2,
      title: "Alcance Global",
      stat: "30+ Países",
      description: "Conectamos jugadores de todo el mundo con la pasión del fútbol argentino",
    },
    {
      icon: Trophy,
      title: "Programas Elite",
      stat: "7 Clubes",
      description: "Acceso directo a clubes profesionales de primera división argentina",
    },
    {
      icon: Heart,
      title: "Experiencia Real",
      stat: "100% Inmersión",
      description: "No simulamos: vivís el día a día de un futbolista profesional argentino",
    },
  ]

  return (
    <section className="relative py-24 lg:py-32 bg-white overflow-hidden">
      {/* Decoración de fondo */}
      <div className="absolute inset-0 bg-[radial-gradient(circle_at_30%_20%,rgba(98,179,229,0.1),transparent_50%)]" />
      <div className="absolute inset-0 bg-[radial-gradient(circle_at_70%_80%,rgba(4,142,204,0.1),transparent_50%)]" />

      <div className="conta
WhyArgentina function · typescript · L4-L101 (98 LOC)
components/home/why-argentina.tsx
export function WhyArgentina() {
  const legends = [
    { name: "Lionel Messi", city: "Rosario" },
    { name: "Ángel Di María", city: "Rosario" },
    { name: "Marcelo Bielsa", city: "Rosario" },
  ]

  const reasons = [
    {
      number: "01",
      title: "Metodología Única",
      description: "La forma de entrenar que formó a los mejores del mundo. No es casualidad que Argentina sea campeón mundial.",
    },
    {
      number: "02",
      title: "Competencia Real",
      description: "Enfrentás a jugadores federados AFA. La exigencia que necesitás para dar el salto de calidad.",
    },
    {
      number: "03",
      title: "Pasión y Cultura",
      description: "No solo aprendés técnica: vivís la mentalidad ganadora que caracteriza al fútbol argentino.",
    },
    {
      number: "04",
      title: "Donde Nacen las Estrellas",
      description: "Rosario dio al mundo a Messi, Di María y Bielsa. Entrenás en el mismo lugar que ellos.",
    },
  ]

  return (
    <section class
DetailedSteps function · typescript · L4-L127 (124 LOC)
components/how-it-works/detailed-steps.tsx
export function DetailedSteps() {
  const steps = [
    {
      number: 1,
      icon: MessageSquare,
      title: "Contacto Inicial",
      description: "Conocemos tus objetivos y perfil deportivo.",
      details: [
        "Completa el formulario o escríbenos",
        "Envíanos tu CV deportivo o video (opcional)",
        "Recibe la propuesta de fechas y sedes",
        "Respuesta garantizada en 24hs",
      ],
    },
    {
      number: 2,
      icon: Video,
      title: "Videollamada Informativa",
      description: "Reunión oficial entre ArgenGoal, el Club y la Familia.",
      details: [
        "Presentación detallada del programa",
        "Definición de logística y alojamiento",
        "Resolución de dudas a padres/entrenadores",
        "Acuerdo de fechas de viaje",
      ],
    },
    {
      number: 3,
      icon: FileCheck,
      title: "Reserva y Admisión",
      description: "Confirmación de plaza y trámites oficiales.",
      details: [
        "Pago de reserva (USD 
ProcessHero function · typescript · L1-L24 (24 LOC)
components/how-it-works/process-hero.tsx
export function ProcessHero() {
  return (
    <section className="relative py-20 lg:py-28 overflow-hidden">
      <div className="absolute inset-0 z-0">
        <img
          src="/planning-football-experience-argentina.jpg"
          alt="Planning Football Experience"
          className="w-full h-full object-cover"
        />
        <div className="absolute inset-0 bg-gradient-to-br from-black/85 via-primary/60 to-black/70" />
      </div>

      <div className="container relative z-10 mx-auto px-4">
        <div className="max-w-3xl">
          <h1 className="text-4xl md:text-5xl lg:text-6xl font-bold text-white mb-6 text-balance">Cómo Funciona</h1>
          <p className="text-lg md:text-xl text-white/90 leading-relaxed text-pretty">
            Un proceso simple, transparente y profesional desde tu primer contacto hasta el último día de tu experiencia
            en Argentina.
          </p>
        </div>
      </div>
    </section>
  )
}
Requirements function · typescript · L4-L77 (74 LOC)
components/how-it-works/requirements.tsx
export function Requirements() {
  const requirements = [
    {
      icon: FileText,
      title: "Documentación",
      items: [
        "Pasaporte válido",
        "Apto Médico (Ergometría)",
        "Declaración Jurada de Salud",
        "Ficha personal ArgenGoal",
      ],
    },
    {
      icon: CreditCard,
      title: "Pagos",
      items: [
        "Reserva: USD 500 (Confirma plaza)",
        "Saldo: En efectivo al llegar a Rosario",
        "La reserva no es reembolsable",
      ],
    },
    {
      icon: Shield,
      title: "Seguros y Salud",
      items: [
        "Seguro de Viajero (Obligatorio)",
        "Atención primaria en entrenamientos",
        "Cobertura de emergencias en el club",
      ],
    },
    {
      icon: Plane,
      title: "Trámites de Viaje",
      items: [
        "Carta de Invitación Oficial (Provista)",
        "Asesoramiento para ingreso al país",
        "Coordinación de vuelos",
      ],
    },
  ]

  return (
    <section className="py-20 lg:
Timeline function · typescript · L5-L90 (86 LOC)
components/how-it-works/timeline.tsx
export function Timeline() {
  const timeline = [
    {
      phase: "3-6 meses antes",
      title: "Contacto y Planificación",
      description: "Definición de objetivos, fechas y videollamada informativa.",
    },
    {
      phase: "2-4 meses antes",
      title: "Reserva de Plaza",
      description: "Pago de seña (USD 500) y emisión de cartas de invitación.",
    },
    {
      phase: "1-2 meses antes",
      title: "Gestión de Vuelos",
      description: "Compra de pasajes aéreos y presentación de fichas médicas.",
    },
    {
      phase: "1 semana antes",
      title: "Charla Pre-Viaje",
      description: "Reunión final con coordinador, revisión de equipaje y logística.",
    },
    {
      phase: "Día de llegada",
      title: "Bienvenida y Pago Final",
      description: "Recepción en Rosario, cancelación del saldo y check-in.",
    },
  ]

  return (
    <section className="py-20 lg:py-28 bg-background">
      <div className="container mx-auto px-4">
        <div classNa
Navbar function · typescript · L9-L85 (77 LOC)
components/navbar.tsx
export function Navbar() {
  const [isOpen, setIsOpen] = useState(false)

  const navLinks = [
    { href: "/", label: "Inicio" },
    { href: "/programas", label: "Programas" },
    { href: "/como-funciona", label: "Cómo Funciona" },
    
    { href: "/nosotros", label: "Nosotros" },
    { href: "/experiencias", label: "Experiencias" },
  ]

  return (
    <nav className="sticky top-0 z-50 w-full border-b border-border/40 bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60">
      {/* Línea celeste superior AFA */}
      <div className="h-1 bg-gradient-to-r from-primary via-primary-dark to-primary" />

      <div className="container mx-auto px-4">
        <div className="flex h-20 items-center justify-between">
          {/* Logo */}
          <Link href="/" className="flex items-center transition-opacity hover:opacity-80">
            <Image src="/logo-dark.png" alt="ARGENGOAL" width={180} height={50} className="h-10 w-auto" priority />
          </Link>

    
Repobility — same analyzer, your code, free for public repos · /scan/
ProgramComparison function · typescript · L4-L114 (111 LOC)
components/programs/program-comparison.tsx
export function ProgramComparison() {
  const comparison = [
    {
      feature: "Enfoque Principal",
      rosario: "Equipos / Experiencia + Amistosos",
      pro: "Individual / Formación Real",
    },
    {
      feature: "Rango de Edad",
      rosario: "7 a 20 años",
      pro: "12 a 19 años",
    },
    {
      feature: "Duración Base",
      rosario: "10 días (Propuesta adaptable)",
      pro: "1 semana a 30 días",
    },
    {
      feature: "Sede",
      rosario: "Rosario (sede única)",
      pro: "Nacional (Bs As · Santa Fe · y más)",
    },
    {
      feature: "Alojamiento",
      rosario: "Hotel / Residencia deportiva",
      pro: "Residencia/Pensión del club (Casa Fútbol)",
    },
    {
      feature: "Competencia / Entrenamiento",
      rosario: "Amistosos planificados + doble turno (Lun–Vie)",
      pro: "Entrenamiento oficial + día a día dentro del club",
    },
    {
      feature: "Inmersión Cultural",
      rosario: "Alta (ciudad, estadios y recorridos)",
      pro: 
ProgramsHero function · typescript · L1-L29 (29 LOC)
components/programs/programs-hero.tsx
export function ProgramsHero() {
  return (
    <section className="relative py-20 lg:py-28 overflow-hidden">
      <div className="absolute inset-0 z-0">
        <img
          src="/varias/fondos/17.jpeg"
          alt="Football Training Argentina"
          className="w-full h-full object-cover"
        />
        <div className="absolute inset-0 bg-gradient-to-br from-black/80 via-black/60 to-primary/40" />
      </div>

      <div className="container relative z-10 mx-auto px-4">
        <div className="max-w-3xl">
          <h1 className="text-4xl md:text-5xl lg:text-6xl font-bold text-white mb-6 text-balance">
            Programas de Fútbol en Argentina
          </h1>
          <p className="text-lg md:text-xl text-white/90 leading-relaxed text-pretty">
            Dos propuestas claras y diferenciadas.  
            <strong> Rosario Experience</strong> está pensado para <strong>equipos</strong>: más partidos amistosos que un
            torneo, combinados con recorridos y exp
ProProgram function · typescript · L7-L238 (232 LOC)
components/programs/pro-program.tsx
export function ProProgram() {
  const features = [
    "Entrenamiento oficial con tu categoría (según cupos y disponibilidad)",
    "Alojamiento en Pensión/Residencia del Club (Casa Fútbol)",
    "4 comidas diarias (nutrición deportiva)",
    "Atención médica y kinesiología",
    "Lavado de indumentaria",
    "Staff: DT, PF, psicología y nutrición deportiva",
    "Traslados internos y acceso a partidos (según agenda)",
    "Informe de desarrollo y adaptación al entorno profesional",
  ]

  const staff = [
    {
      role: "Entrenadores Oficiales",
      description: "Cuerpo técnico del club: trabajo real con metodología y exigencia competitiva.",
    },
    {
      role: "Preparadores Físicos",
      description: "Carga y planificación adaptada al ritmo del fútbol argentino.",
    },
    {
      role: "Área Médica",
      description: "Médicos y kinesiólogos presentes en el proceso de entrenamiento.",
    },
    {
      role: "Nutricionistas",
      description: "Plan de alimentación
page 1 / 7next ›