// Resultados.jsx — Carrosseis Infinitos
const { useRef: useResRef, useEffect: useResEff, useState: useResSt } = React;
/* ── Animated counter ── */
function useCounter(target, duration = 1600) {
const [val, setVal] = useResSt(0);
const [started, setStarted] = useResSt(false);
useResEff(() => {
if (!started) return;
const start = performance.now();
const tick = (now) => {
const p = Math.min((now - start) / duration, 1);
const ease = 1 - Math.pow(1 - p, 3);
setVal(Math.round(ease * target));
if (p < 1) requestAnimationFrame(tick);
};
requestAnimationFrame(tick);
}, [started]);
return [val, () => setStarted(true)];
}
function CounterStat({ target, suffix = '', label, trigger }) {
const [val, start] = useCounter(target);
useResEff(() => { if (trigger) start(); }, [trigger]);
return (
);
}
/* ── Card Antes/Depois ── */
function CardAntesDep({ n }) {
return (
[NOME ALUNA {n}]
[RESULTADO {n}]
);
}
/* ── Card Depoimento ── */
function CardDepo({ n }) {
return (
❝
"[DEPOIMENTO {n} — ex: Com o método da Taty mudei meu corpo e minha rotina de vez. É diferente de tudo que já tentei.]"
[F{n}]
[NOME ALUNA {n}]
[SERVIÇO {n}]
★★★★★
);
}
/* ── Card Print ── */
function CardPrint({ n }) {
return (
);
}
/* ── Carrossel 1 — Antes/Depois ── */
function CarrosselAntesDep() {
const cards = [1, 2, 3, 4, 5];
const allCards = [...cards, ...cards]; // duplicar para loop
return (
{allCards.map((n, i) => )}
);
}
/* ── Carrossel 2 — Depoimentos & Prints ── */
function CarrosselDepo() {
const items = [
,
,
,
,
,
,
];
const allItems = [...items.map((el, i) => React.cloneElement(el, { key: 'a' + i })),
...items.map((el, i) => React.cloneElement(el, { key: 'b' + i }))];
return (
);
}
/* ── Main section ── */
function Resultados() {
const ref = useResRef();
const [counterTrigger, setCounterTrigger] = useResSt(false);
useReveal(ref);
useResEff(() => {
const el = ref.current;
if (!el) return;
const obs = new IntersectionObserver(([e]) => {
if (e.isIntersecting) { setCounterTrigger(true); obs.disconnect(); }
}, { threshold: 0.15 });
obs.observe(el);
return () => obs.disconnect();
}, []);
return (
{/* Header */}
Resultados reais de mulheres reais
Quando o método é certo,
o corpo responde.
Antes & Depois · Depoimentos · Prints
{/* Contador */}
{/* Carrossel 1 — full bleed */}
{/* Frase de impacto */}
"Você não precisa tentar mais uma vez.
Você precisa fazer diferente."
— Taty Vaillant
{/* Carrossel 2 — full bleed */}
{/* CTA final */}
);
}
Object.assign(window, { Resultados });