// ZARK Rubí — Trust band, Differentiators, Zones (with variants) // BLOQUE 2 — Banda de confianza function TrustBand() { const items = [ ['unlink', 'Sin permanencia'], ['clock', 'Abierto 24/7'], ['dumbbell', 'Máquinas premium'], ['flame', 'Zona HYROX']]; return (
{items.map(([ic, label], i) =>
{label}
)}
); } // BLOQUE 3 — Diferenciadores function Differentiators() { const items = [ ['Sin permanencia', 'Aquí nadie te retiene. Te apuntas cuando quieres y te vas cuando quieres. Sin contratos largos, sin letra pequeña.'], ['Precio fijo', 'Sin subidas sorpresa, sin seguros ocultos, sin letra pequeña. Lo que ves es lo que pagas, cada mes.'], ['Maquinaria profesional Etenon', 'Equipamiento de alto rendimiento en Rubí, siempre en perfecto estado.'], ['900 m² para ti', 'Sin esperas, sin agobios. Espacio de sobra para entrenar como mereces, a cualquier hora del día o la noche.']]; return (
Por qué ZARK

El gimnasio que Rubí se merecía.

{items.map(([t, d], i) =>
{String(i + 1).padStart(2, '0')}

{t}

{d}

)}
); } function Reviews() { const reviews = [ { name: 'Ámer Shboul Molina', avatar: 'assets/review-amer.jpg', stars: 5, text: 'Lo más premium de Rubí. Maquinaria de alta calidad y personal super amable. Se nota que es un proyecto hecho desde la ilusión y no una cadena más.', href: 'https://maps.app.goo.gl/AWUj6TgTYq7bRu8x6', }, { name: 'Noe Berbel', avatar: 'assets/review-noe.png', stars: 5, text: 'Hemos hablado con los propietarios y se nota que estan muy pendientes de lo que queremos los clientes. La maquinaria tiene una pinta increíble, ¡el mejor gimnasio en el que he estado!', href: 'https://maps.app.goo.gl/d96g7NWXxZvkVRJB9', }, { name: 'Albert Salas', avatar: 'assets/review-albert.png', stars: 5, text: 'He estado en muchos gimnasios, y este es de los mejores que he ido. La maquinaria es de otro planeta, muy estético, con buenas luces y el trato en la inaguración fue increible. Y también tienen un parking gratuito. 10/10', href: 'https://maps.app.goo.gl/72nHhBw5qV5kjtMD9', }, ]; const Stars = () => (
{[...Array(5)].map((_, i) => ( ))}
); return (
Reseñas

Lo que dicen nuestros socios.

{reviews.map((r, i) => ( { e.currentTarget.style.borderColor = 'var(--rust-500)'; e.currentTarget.style.transform = 'translateY(-3px)'; }} onMouseLeave={(e) => { e.currentTarget.style.borderColor = 'var(--ink-600)'; e.currentTarget.style.transform = 'none'; }}>

"{r.text}"

{r.name}
{r.name}
Google Maps ↗
))}
); } const ZONES = [ ['heart-pulse', 'Zona de cardio', 'El punto de partida de cada sesión. Equipada para cualquier ritmo, cualquier objetivo y cualquier nivel.'], ['settings-2', 'Zona de máquinas guiadas', 'Extensión de cuádriceps, bíceps, pullover y mucho más. Trabajo muscular controlado, seguro y progresivo. Ideal para quien empieza y para quien ya sabe lo que hace.'], ['dumbbell', 'Zona de fuerza', 'Hack squat, remo T, press inclinado. Para quien busca rendimiento real y quiere ver números subir semana a semana.'], ['anvil', 'Zona de peso libre', 'Mancuernero completo, barras, bancos reclinables y presses con diferentes inclinaciones. Libertad total para entrenar a tu manera.'], ['flame', 'Zona HYROX', 'AirBike, remos, AirRunner y skis. Entrenamiento funcional de alto rendimiento en Rubí para cuando el entrenamiento convencional se te ha quedado pequeño.']]; function ZoneHead() { return (
Las instalaciones

Cinco zonas. Un único objetivo: que progreses.

); } // BLOQUE 4 — Zonas function Zones({ variant }) { // VARIANT: "rows" — numbered editorial rows if (variant === 'rows') { return (
{ZONES.map(([ic, name, desc], i) =>
{e.currentTarget.querySelector('.zr-num').style.color = 'var(--rust-500)';}} onMouseLeave={(e) => {e.currentTarget.querySelector('.zr-num').style.color = 'var(--ink-500)';}}> {String(i + 1).padStart(2, '0')}

{name}

{desc}

)}
); } // VARIANT: "mosaic" — first zone large, rest in grid if (variant === 'mosaic') { return (
{ZONES.map(([ic, name, desc], i) => { const big = i === 0; return ( ); })}
); } // VARIANT: "grid" (default) — uniform 5-card grid return (
{ZONES.map(([ic, name, desc], i) => )}
); } function ZoneCard({ ic, name, desc, index, big, style }) { const imgH = big ? 260 : 188; return (
{e.currentTarget.style.borderColor = 'var(--rust-500)';e.currentTarget.style.transform = 'translateY(-3px)';}} onMouseLeave={(e) => {e.currentTarget.style.borderColor = 'var(--ink-600)';e.currentTarget.style.transform = 'none';}}>
{name} {String(index + 1).padStart(2, '0')}

{name}

{desc}

); } Object.assign(window, { TrustBand, Differentiators, Reviews, Zones, ZoneCard });