// ============================================================
// PACE — Secciones C: Tienda, Revista HEAT, Inscripción
// ============================================================
// ---- Tarjeta de producto con género + tallas ----
function MerchCard({ m, index }) {
const [gender, setGender] = React.useState(m.genders[0]);
const [size, setSize] = React.useState("");
const chip = (active) => ({
border: "1px solid " + (active ? "var(--orange)" : "var(--line)"),
background: active ? "var(--orange)" : "transparent",
color: active ? "#fff" : "var(--cream-dim)",
borderRadius: 99,
padding: "8px 14px",
fontSize: 13,
fontWeight: 600,
cursor: "pointer",
transition: "all 0.25s var(--ease-out)",
fontFamily: "var(--font-body)",
});
const variant =
(m.genders.length > 1 ? gender : "") + (size ? (gender && m.genders.length > 1 ? " · " : "") + "Talla " + size : "");
const msg =
"Hola, quiero pedir: " + m.name + (variant ? " (" + variant + ")" : "");
return (
{m.img ? (
) : (
PACE
Foto próximamente
)}
{m.line}
{m.name}
{m.price && {PACE.cop(m.price)} }
{m.desc}
{m.genders.length > 1 && (
{m.genders.map((g) => (
setGender(g)}>{g}
))}
)}
{PACE.sizes.map((s) => (
setSize(s === size ? "" : s)}>{s}
))}
Comprar →
¿Dudas de talla? Escríbenos
);
}
// ---- Tienda ----
function StorePage() {
return (
Merch oficial
La tienda
Lo que usamos para entrenar, descansar y representar al club. Elige talla y color,
paga seguro y a correr.
{PACE.merch.map((m, i) => (
))}
Pago seguro con dLocal · Tarjetas · PSE · Nequi · Disponibilidad sujeta a stock.
);
}
// ---- Revista HEAT (expectativa / próximamente) ----
function MagazinePage() {
return (
La revista digital de PACE
HEAT
Un heat de parte nuestra para el mundo.
Edición 001 · Muy pronto
Un heat es una serie. Una tanda de corredores en la línea de salida, esperando el
disparo. Eso será HEAT: historias reales de la manada, contadas de frente desde
Bogotá a 2.640 metros.
Estamos preparando la primera edición. Déjanos tu correo por WhatsApp o síguenos
para ser de los primeros en leerla.
);
}
// ---- Formulario de inscripción ----
function SignupPage() {
const [form, setForm] = React.useState({ nombre: "", meta: "PACE 5K · Tu primera meta real", nivel: "Estoy empezando", nota: "" });
const set = (k) => (e) => setForm({ ...form, [k]: e.target.value });
const metas = [
"Start Run · Corre desde cero",
"PACE 5K · Tu primera meta real",
"PACE 10K · Corre más fuerte",
"PACE 21K · Media maratón",
"Maratón · Manejo personalizado",
"Programa Presencial · Bogotá",
"Plan Online",
"PACE Athletics · Niños",
];
const niveles = ["Estoy empezando", "Corro de vez en cuando", "Entreno regularmente", "Compito"];
const submit = (e) => {
e.preventDefault();
const msg =
"Hola, quiero inscribirme en PACE.\n" +
"Nombre: " + form.nombre + "\n" +
"Meta: " + form.meta + "\n" +
"Nivel: " + form.nivel +
(form.nota ? "\nNota: " + form.nota : "");
window.open(PACE.waLink(msg), "_blank");
};
const inputStyle = {
width: "100%",
background: "rgba(244,239,233,0.05)",
border: "1px solid var(--line)",
borderRadius: 14,
color: "var(--cream)",
fontSize: 15,
fontFamily: "var(--font-body)",
padding: "16px 18px",
outline: "none",
boxSizing: "border-box",
};
const labelStyle = {
display: "block",
fontSize: 11,
letterSpacing: "0.14em",
textTransform: "uppercase",
fontFamily: "var(--font-mono)",
color: "var(--cream-faint)",
margin: "0 0 10px",
};
return (
Inscripción
Da el primer paso
Cuéntanos quién eres y a dónde quieres llegar. Te respondemos el mismo día con el
plan ideal y el link de pago seguro.
{["Respuesta el mismo día", "Pago seguro con dLocal", "Primera sesión de prueba sin costo"].map((p) => (
{p}
))}
);
}
Object.assign(window, { StorePage, MagazinePage, SignupPage, MerchCard });