// Main Aleli landing app const { useState, useEffect, useRef, useMemo } = React; // Reveal-on-scroll hook function useReveal() { const ref = useRef(null); useEffect(() => { const el = ref.current; if (!el) return; const io = new IntersectionObserver(([e]) => { if (e.isIntersecting) { el.classList.add("in"); io.disconnect(); } }, { threshold: 0.15 }); io.observe(el); return () => io.disconnect(); }, []); return ref; } function Reveal({ children, className = "", as: Tag = "div", style }) { const ref = useReveal(); return {children}; } // Falling petals function Petals() { const petals = useMemo(() => Array.from({ length: 14 }, (_, i) => ({ left: Math.random() * 100, delay: Math.random() * 18, duration: 16 + Math.random() * 10, color: ["#EB6077", "#F0B849", "#F4A8B6"][i % 3], size: 12 + Math.random() * 14, })), []); return (
{petals.map((p, i) => (
))}
); } function Testimonials() { const [idx, setIdx] = useState(0); useEffect(() => { const t = setInterval(() => setIdx(i => (i + 1) % window.TESTIMONIALS.length), 6000); return () => clearInterval(t); }, []); return (
{window.TESTIMONIALS.map((t, i) => (
"
{t.quote}
{t.name} · {t.meta}
))}
{window.TESTIMONIALS.map((_, i) => (
); } function App() { const [scrolled, setScrolled] = useState(false); const [bookingOpen, setBookingOpen] = useState(false); const [prefill, setPrefill] = useState(null); useEffect(() => { const onScroll = () => setScrolled(window.scrollY > 40); window.addEventListener("scroll", onScroll); onScroll(); return () => window.removeEventListener("scroll", onScroll); }, []); useEffect(() => { document.body.style.overflow = bookingOpen ? "hidden" : ""; }, [bookingOpen]); const openBooking = (n) => { setPrefill(n || null); setBookingOpen(true); }; return ( <>
ALELÍ
Estética & Spa Natural
{/* HERO */}
La Dorada · Caldas

Tu mejor versión
comienza con una pausa.

Estética profesional en La Dorada. Combinamos tecnología avanzada y rituales botánicos para entregarte resultados reales en el rostro y el cuerpo.

Ver carta
+800
Rituales en 2025
4.9
Reseñas Google
100%
Productos naturales
{/* right column intentionally empty - flower is absolute */}
{/* MARQUEE */} {/* SERVICES */}
Carta de servicios

Rituales pensados
para tu piel y tu paz.

Cada experiencia comienza con una infusión, una lectura breve de tu piel y un momento de respiración. La técnica viene después.

{window.SERVICES[0].items.map((item, i) => (
{String(i + 1).padStart(2, "0")}
{item.solves}

{item.name}

{item.desc}

{item.duration} {item.tags.map(t => {t})}
{window.formatCOP(item.price)}
))}
{/* MES DE LAS MADRES — la sección estrella */}
Edición Mayo · solo este mes

El regalo que ella
quiere:
Tiempo y renovación.

Dos rituales pensados para ella.

Este mes, regálale lo que ningún paquete en cinta le da: una pausa real. Dos experiencias diseñadas para que mamá se reciba despacio — sola, o acompañada de quien ella elija.

Reserva con anticipación · Solo 12 cupos disponibles esta semana
{window.MADRES_PACKAGES.map((p, i) => (
openBooking(p.name)}>
{p.num}
{p.name.replace(p.nameEm, "").trim().replace(/"/g, "")}{p.name.includes(p.nameEm) ? <> {p.nameEm} : null}
{p.includes}
    {p.list.map(li =>
  • {li}
  • )}
{window.formatCOP(p.price)}
{p.duration}
))}
{/* EXPERIENCE */}
La experiencia Alelí

Cuatro gestos
que vas a recordar.

Detalles pequeños, pensados para que tu visita se sienta como una pausa real — no como una cita más en la agenda.

{[ { num: "i.", icon: , title: "Recibimiento", desc: "Té de hibisco, ambientación con aceites esenciales y un momento de respiración guiada." }, { num: "ii.", icon: , title: "Lectura de piel", desc: "Análisis personalizado antes de cada ritual para ajustar productos y duración." }, { num: "iii.", icon: , title: "Manos maestras", desc: "Técnica + aparatología profesional Tensamax con productos 100% naturales." }, { num: "iv.", icon: , title: "Cierre ritual", desc: "Hidratación, recomendación a casa y tu próximo gesto agendado con cariño." }, ].map(c => (
{c.num}
{c.icon}

{c.title}

{c.desc}

))}
{/* FOOTER */} {window.BookingModal && React.createElement(window.BookingModal, { open: bookingOpen, onClose: () => setBookingOpen(false), prefillService: prefill })} ); } ReactDOM.createRoot(document.getElementById("root")).render();