// ============================================================ // PACE — App principal: router por ventanas + Tweaks // ============================================================ const TWEAK_DEFAULTS = /*EDITMODE-BEGIN*/{ "heroCopy": "No corres solo", "motion": "normal", "customCursor": true, "showKids": true }/*EDITMODE-END*/; // ---- Router por hash (#/metas, #/programas, ...) ---- function useRoute() { const parse = () => location.hash.replace(/^#\/?/, ""); const [route, setRoute] = React.useState(parse); React.useEffect(() => { const onHash = () => { setRoute(parse()); window.scrollTo(0, 0); }; window.addEventListener("hashchange", onHash); return () => window.removeEventListener("hashchange", onHash); }, []); return route; } // ---- Tarjetas de exploración en el inicio ---- function ExploreGrid() { const pages = [ { href: "#/metas", kicker: "Planes por objetivo", title: "¿Cuál es tu meta?", desc: "Start, 5K, 10K, 21K y 42K. Planes con semanas definidas y precio de lanzamiento.", }, { href: "#/programas", kicker: "Todo el año", title: "Programas", desc: "Presencial en Bogotá, plan online donde estés y Athletics para niños.", }, { href: "#/athletics", kicker: "Nuevo · Niños 5–10", title: "Athletics", desc: "Atletismo formativo con Rayo: Sparks (5–7) y Bolts (8–10). Juego, técnica y confianza.", isNew: true, }, { href: "#/metodo", kicker: "Cómo entrenamos", title: "El método", desc: "Diagnóstico, plan progresivo, acompañamiento real y día de carrera.", }, { href: "#/club", kicker: "La manada", title: "Comunidad", desc: "Testimonios, horarios y dónde nos encontramos cada semana.", }, { href: "#/faq", kicker: "Antes de empezar", title: "Preguntas", desc: "Todo lo que necesitas saber para dar el primer paso.", }, ]; return (
Explora PACE

Elige tu camino

{pages.map((p, i) => ( {p.kicker} {p.title} {p.desc} ))}
); } // ---- Páginas ---- function Sub({ children }) { return
{children}
; } function App() { const [t, setTweak] = useTweaks(TWEAK_DEFAULTS); const route = useRoute(); React.useEffect(() => { document.documentElement.setAttribute("data-motion", t.motion); }, [t.motion]); let page; switch (route) { case "metas": page = ( ); break; case "programas": page = (
{t.showKids && }
); break; case "metodo": page = ( ); break; case "athletics": page = ( ); break; case "club": page = ( ); break; case "faq": page = ( ); break; default: page = ( ); } return (
{page}