// FCPB Home - Hero + Valores + Categorías carousel + Partidos/Calendar + Galería + Sponsors const { useState, useEffect, useRef } = React; // La marquesina vive en shell.jsx (window.Marquesina) porque se usa en // todas las páginas, no sólo en la home. const Marquesina = window.Marquesina; // ---------------- Tarjeta del próximo partido ---------------- // Toma el primer partido programado desde hoy (api/partidos.php). // Si no hay partidos cargados, invita a inscribirse en vez de mostrar // datos inventados. function ProximoPartidoCard() { const [p, setP] = useState(null); const [cargando, setCargando] = useState(true); useEffect(() => { fetch("api/partidos.php", { headers: { Accept: "application/json" } }) .then((r) => (r.ok ? r.json() : Promise.reject())) .then((j) => { if (!j || !j.ok || !Array.isArray(j.partidos)) return; const hoy = new Date(); const key = `${hoy.getFullYear()}-${String(hoy.getMonth() + 1).padStart(2, "0")}-${String(hoy.getDate()).padStart(2, "0")}`; const prox = j.partidos .filter((x) => x.estado !== "finalizado" && x.fecha >= key) .sort((a, b) => (a.fecha + (a.hora || "")).localeCompare(b.fecha + (b.hora || "")))[0]; if (prox) setP(prox); }) .catch(() => {}) .finally(() => setCargando(false)); }, []); if (cargando) { return (
Próximo partido
Cargando…
); } if (!p) { return (
Próximo partido
Agenda en armado
Pronto publicamos el calendario de la temporada.
SUMATE AL CLUB
); } const d = new Date(p.fecha + "T12:00"); const dias = ["Dom", "Lun", "Mar", "Mié", "Jue", "Vie", "Sáb"]; const meses = ["Ene", "Feb", "Mar", "Abr", "May", "Jun", "Jul", "Ago", "Sep", "Oct", "Nov", "Dic"]; const cuando = `${dias[d.getDay()]} ${d.getDate()} ${meses[d.getMonth()]}` + (p.hora && p.hora !== "—" ? ` · ${p.hora}hs` : "") + (p.sede ? ` · ${p.sede}` : ""); return (
Próximo partido
{p.es_local ? `FCPB vs. ${p.rival}` : `${p.rival} vs. FCPB`}
{cuando}
{p.categoria && {p.categoria.toUpperCase()}} {p.es_local ? "LOCAL" : "VISITANTE"}
); } // ---------------- HERO ---------------- const MOSTRAR_STATS_HERO = false; function HomeHero() { // Contadores reales del club (fallback a los valores por defecto) const [stats, setStats] = useState({}); useEffect(() => { if (window.fcpbStats) window.fcpbStats().then(setStats); }, []); return (
Inscripción Temporada 2026 abierta

Acá empieza
tu sueño.

Escuela de fútbol infantil y juvenil en el corazón de Puerto Belgrano. Formamos jugadores, pero sobre todo, formamos personas.

Inscribí a tu hijo/a ▶ Conocé el club
{MOSTRAR_STATS_HERO && (
{[ { n: stats.jugadores || 217, s: "Jugadores" }, { n: stats.categorias || 6, s: "Categorías" }, { n: 38, s: "Años" }, { n: stats.entrenadores || 14, s: "Entrenadores" }, ].map(x => (
{x.s}
))}
)}
Atardecer en la cancha del FCPB, con la pelota del club sobre el césped
FCPB · Puerto Belgrano
); } // ---------------- VALORES ---------------- function Valores() { const items = [ { n: "01", t: "Todos juegan", d: "No se arma un equipo 'A'. Acá todos los chicos participan, rotan y cometen errores. Es así como se aprende a jugar.", icon: "fa-futbol" }, { n: "02", t: "Respeto primero", d: "Al compañero, al rival, al árbitro y al club. Si hay que elegir entre ganar y faltar el respeto, no se duda.", icon: "fa-handshake" }, { n: "03", t: "Familia que acompaña", d: "Los papás y las mamás son parte del equipo. Los invitamos a entrenar con los chicos una vez al mes.", icon: "fa-people-roof" }, { n: "04", t: "La pelota enseña", d: "Técnica y táctica sí, pero también paciencia, frustración, victoria y derrota. El fútbol es una escuela de la vida.", icon: "fa-brain" }, ]; return (
01 · Filosofía

Formamos jugadores.
Y personas.

{items.map((v, i) => (
{v.n}