// Serviços · Como funciona · Personalização · Segmentos // ───────────────────────────────────────────────────────────── // Serviços — 8 cards // ───────────────────────────────────────────────────────────── function Servicos({ copy, accent }) { const c = copy.serv; return (
{c.items.map((item, i) =>
e.currentTarget.style.background = T.night2} onMouseLeave={(e) => e.currentTarget.style.background = T.night}>
{item.n}

{item.name}

{item.desc}

)}
); } // ───────────────────────────────────────────────────────────── // Como funciona — 4 passos horizontais // ───────────────────────────────────────────────────────────── function ComoFunciona({ copy, accent }) { const c = copy.how; return (
{/* Pipeline horizontal */}
{/* base line */}
{c.steps.map((s, i) =>
{/* node */}
{i === 0 && }
{s.n} / 04

{s.name}

{s.desc}

)}
); } // ───────────────────────────────────────────────────────────── // Personalização — configurador inline // ───────────────────────────────────────────────────────────── function Personalizacao({ copy, accent, waLink }) { const c = copy.perso; const [idx, setIdx] = React.useState(0); const screenContents = ['logo', 'video', 'neutral']; const bgVariants = ['wood', 'concrete', 'black', 'purple']; const shelfVariants = ['books', 'plants', 'vinyl', 'catalog']; // Slides pré-configurados — combos curados que rotam automaticamente const slides = React.useMemo(() => [ { light: c.lights[0], bg: 0, shelf: 0, screen: 0, photo: 'assets/photos/main-room.jpg' }, { light: c.lights[3], bg: 3, shelf: 2, screen: 1, photo: 'assets/photos/lounge.jpg' }, { light: c.lights[2], bg: 1, shelf: 1, screen: 2, photo: 'assets/photos/in-action.jpg' }, { light: c.lights[1], bg: 0, shelf: 3, screen: 0, photo: 'assets/photos/main-room.jpg' }, { light: c.lights[5], bg: 2, shelf: 2, screen: 1, photo: 'assets/photos/lounge.jpg' }], [c.lights]); // Auto-cycle every 3.2s React.useEffect(() => { const t = setInterval(() => setIdx((i) => (i + 1) % slides.length), 3200); return () => clearInterval(t); }, [slides.length]); const s = slides[idx]; return (
{/* Slideshow — preview cycling */}
SLIDE {String(idx + 1).padStart(2, '0')} / {String(slides.length).padStart(2, '0')} · STAGE A ● AUTO
{/* progress dots */}
{slides.map((_, i) =>
{/* CTA */}
e.currentTarget.style.transform = 'translateY(-1px)'} onMouseLeave={(e) => e.currentTarget.style.transform = 'translateY(0)'}> {c.cta}
); } function ConfigRow({ label, options, value, onChange, accent }) { return (
{label}
{options.map((opt, i) => )}
); } // ───────────────────────────────────────────────────────────── // Segmentos — 4 cards link // ───────────────────────────────────────────────────────────── function Segmentos({ copy, accent }) { const c = copy.segs; return (
{c.cards.map((card, i) => {e.currentTarget.style.background = T.night2;e.currentTarget.querySelector('[data-arrow]').style.transform = 'translateX(6px)';}} onMouseLeave={(e) => {e.currentTarget.style.background = T.night;e.currentTarget.querySelector('[data-arrow]').style.transform = 'translateX(0)';}}>
{card.tag}

{card.name}

{card.desc}

{card.cta}
)}
); } Object.assign(window, { Servicos, ComoFunciona, Personalizacao, Segmentos, ConfigRow });