// Scenes 6-10 for Yohann Escher hero motion. // ── SCENE 6: Automation flow (17 - 20.5s) ───────────────────────────────── function Scene6() { const { localTime } = useSprite(); const steps = [ { label: 'Novo Lead', sub: 'site → form', icon: Icons.user, x: 200, y: 540 }, { label: 'Análise IA', sub: 'qualifica intent', icon: Icons.spark, x: 500, y: 540 }, { label: 'CRM', sub: 'organiza pipeline', icon: Icons.flow, x: 800, y: 540 }, { label: 'Mensagem', sub: 'gerada e enviada', icon: Icons.msg, x: 1100, y: 540 }, { label: 'Follow-up', sub: 'agendado', icon: Icons.cal, x: 1400, y: 540 }, { label: 'Métrica', sub: 'mede e ajusta', icon: Icons.chart, x: 1700, y: 540 }, ]; // Pulse traveling along the chain const pulseT = (localTime % 3.0) / 3.0; // 0..1 across the whole chain const activeIdx = Math.floor(pulseT * steps.length); const stepProgress = (pulseT * steps.length) - activeIdx; return ( {/* connectors */} {steps.slice(0, -1).map((s, i) => { const next = steps[i + 1]; const isActive = i === activeIdx; return ( ); })} {/* Pulse dot */} {(() => { if (localTime < 1.0) return null; const cur = steps[activeIdx]; const nxt = steps[Math.min(steps.length - 1, activeIdx + 1)]; const px = cur.x + (nxt.x - cur.x) * stepProgress; const py = cur.y; return (
); })()} {/* Step cards */} {steps.map((s, i) => { const delay = 0.1 + i * 0.1; const localT = Math.max(0, localTime - delay); const enter = Easing.easeOutCubic(clamp(localT / 0.5, 0, 1)); const isActive = i === activeIdx && localTime > 1.0; const wasReached = i <= activeIdx && localTime > 1.0; return (
{s.icon}
{s.label}
{s.sub}
{wasReached && !isActive && (
{Icons.check}
)}
); })} {/* Stats card */} Cena 06 — Automação Processos deixam de depender do improviso. ); } function StatChip({ x, y, label, value }) { const { localTime, duration } = useSprite(); const enter = Easing.easeOutBack(clamp(localTime / 0.5, 0, 1)); return (
{label} {value}
); } // ── SCENE 7: Marketing as system (20.5 - 24s) ───────────────────────────── function Scene7() { const { localTime } = useSprite(); return ( {/* Landing page mock - left */} {/* Funnel center */} {/* CRM right */} {/* connecting flow */} Cena 07 — Marketing como sistema Marketing inteligente não é só conteúdo.
É sistema, dados e automação trabalhando juntos.
); } function Mock_LandingPage({ x, y, delay = 0 }) { const { localTime } = useSprite(); const localT = Math.max(0, localTime - delay); const enter = Easing.easeOutCubic(clamp(localT / 0.5, 0, 1)); return (
● ● ●   landing.yohann.com
Sistemas que convertem.
Estratégia, automação e IA conectadas em uma mesma arquitetura.
hero · motion · loop
Agendar conversa
Ver mais
↑ {Math.round(34 + Math.sin(localTime * 2) * 2)}% conversão
); } function Mock_Funnel({ x, y, delay = 0 }) { const { localTime } = useSprite(); const localT = Math.max(0, localTime - delay); const enter = Easing.easeOutCubic(clamp(localT / 0.5, 0, 1)); const stages = [ { label: 'Visitas', count: 4280, w: 240, delay: 0.2 }, { label: 'Leads', count: 612, w: 200, delay: 0.5 }, { label: 'Qualificados', count: 287, w: 160, delay: 0.8 }, { label: 'Propostas', count: 96, w: 120, delay: 1.1 }, { label: 'Fechados', count: 38, w: 80, delay: 1.4 }, ]; return (
Funil
Conversão por etapa
{stages.map((s, i) => { const sT = Math.max(0, localTime - delay - s.delay); const sEnter = Easing.easeOutCubic(clamp(sT / 0.5, 0, 1)); const w = s.w * sEnter; return (
{s.label} {Math.round(s.count * sEnter)}
); })}
); } function Mock_CRM({ x, y, delay = 0 }) { const { localTime } = useSprite(); const localT = Math.max(0, localTime - delay); const enter = Easing.easeOutCubic(clamp(localT / 0.5, 0, 1)); const cols = [ { label: 'Novo', count: 24, color: 'rgba(255,255,255,0.15)' }, { label: 'Contato', count: 16, color: 'rgba(255,107,26,0.35)' }, { label: 'Proposta', count: 9, color: 'rgba(255,107,26,0.6)' }, { label: 'Fechado', count: 4, color: YE.orange }, ]; return (
CRM
Pipeline
53 ativos
{cols.map((c, i) => { const cT = Math.max(0, localTime - delay - 0.3 - i * 0.1); const cEnter = Easing.easeOutCubic(clamp(cT / 0.4, 0, 1)); return (
{c.label}
{Array.from({ length: Math.min(4, c.count) }).map((_, j) => (
))}
); })}
); } // ── SCENE 8: AI as decision layer (24 - 27.5s) ──────────────────────────── function Scene8() { const { localTime } = useSprite(); const cx = 960, cy = 520; const actions = [ { label: 'interpreta', angle: -90 }, { label: 'recomenda', angle: -45 }, { label: 'prioriza', angle: 0 }, { label: 'resume', angle: 45 }, { label: 'escreve', angle: 90 }, { label: 'analisa', angle: 135 }, { label: 'organiza', angle: 180 }, { label: 'aprende', angle: 225 }, ]; const t = useTime(); const breath = 1 + 0.04 * Math.sin(localTime * 1.6); return ( {/* Orbit ring */} {/* Action chips on orbit */} {actions.map((a, i) => { const delay = 0.4 + i * 0.08; const localT = Math.max(0, localTime - delay); const enter = Easing.easeOutCubic(clamp(localT / 0.5, 0, 1)); const rad = (a.angle + t * 6) * Math.PI / 180; const r = 290; const x = cx + Math.cos(rad) * r; const y = cy + Math.sin(rad) * r; return (
{a.label}
); })} {/* Central AI nucleus */}
CAMADA
IA Aplicada
{/* "Próxima melhor ação" insight card */} Cena 08 — Inteligência aplicada IA não substitui direção. Amplifica quem tem método. ); } function NextActionCard({ x, y }) { const { localTime } = useSprite(); const enter = Easing.easeOutBack(clamp(localTime / 0.5, 0, 1)); return (
{Icons.spark} Próxima melhor ação
Lead "Mariana C." está pronta para proposta. Score 92.
agendar follow-up →
); } // ── SCENE 9: Results dashboard (27.5 - 31s) ─────────────────────────────── function Scene9() { const { localTime } = useSprite(); const metrics = [ { label: 'Conversão', value: 42, prefix: '+', suffix: '%', delay: 0.3 }, { label: 'Leads organizados', value: 128, prefix: '+', suffix: '', delay: 0.5 }, { label: 'Tempo operacional', value: 35, prefix: '-', suffix: '%', delay: 0.7 }, { label: 'ROI no funil', value: 3.2, prefix: '', suffix: 'x', decimals: 1, delay: 0.9 }, { label: 'Propostas ativas', value: 87, prefix: '', suffix: '', delay: 1.1 }, { label: 'Processos visíveis',value: 100, prefix: '', suffix: '%', delay: 1.3 }, ]; return (
{metrics.map((m, i) => ( ))}
{/* Big chart */}
Performance
Últimos 90 dias
↑ trending
Cena 09 — Resultado real Resultado real nasce quando a operação ganha forma.
); } function MetricCard({ label, value, prefix = '', suffix = '', decimals = 0, delay = 0 }) { const { localTime } = useSprite(); const localT = Math.max(0, localTime - delay); const enter = Easing.easeOutCubic(clamp(localT / 0.5, 0, 1)); const count = Easing.easeOutCubic(clamp(localT / 1.4, 0, 1)); const v = value * count; return (
{label}
{prefix} {v.toFixed(decimals)} {suffix}
); } function BigChart() { const { localTime } = useSprite(); const t = clamp(localTime / 1.8, 0, 1); const eased = Easing.easeOutCubic(t); // Generate path const w = 1400, h = 140; const n = 40; const pts = []; for (let i = 0; i < n; i++) { const x = (i / (n - 1)) * w; const trend = h - (i / n) * h * 0.75; const noise = Math.sin(i * 0.6) * 8 + Math.cos(i * 0.3) * 4; const y = clamp(trend + noise, 8, h - 4); pts.push({ x, y }); } // Reveal up to eased fraction const revealN = Math.floor(eased * n); const path = pts.slice(0, Math.max(2, revealN)).map((p, i) => `${i === 0 ? 'M' : 'L'} ${p.x.toFixed(1)} ${p.y.toFixed(1)}` ).join(' '); const fillPath = path + ` L ${pts[Math.max(1, revealN - 1)].x} ${h} L 0 ${h} Z`; return ( {/* gridlines */} {[0.25, 0.5, 0.75].map(g => ( ))} {revealN > 0 && ( )} ); } // ── SCENE 10: Closing positioning (31 - 35s) ───────────────────────────── function Scene10() { const { localTime } = useSprite(); const cx = 960, cy = 540; const enter = Easing.easeOutCubic(clamp(localTime / 0.7, 0, 1)); const phase2 = clamp((localTime - 0.8) / 0.6, 0, 1); const phase3 = clamp((localTime - 1.6) / 0.6, 0, 1); const ctaPhase = clamp((localTime - 2.2) / 0.6, 0, 1); const t = useTime(); const orbit = t * 12; return ( {/* Soft orbital cards */} {[0, 60, 120, 180, 240, 300].map((angle, i) => { const rad = (angle + orbit) * Math.PI / 180; const r = 420; const x = cx + Math.cos(rad) * r; const y = cy + Math.sin(rad) * r * 0.55; const labels = ['Estratégia', 'Sistemas', 'Automação', 'IA', 'Marketing', 'Dados']; const cardEnter = Easing.easeOutCubic(clamp((localTime - 0.3 - i * 0.06) / 0.5, 0, 1)); return (
{labels[i]}
); })} {/* Central radial star */}
{[0, 45, 90, 135].map(a => ( ))}
{/* Headline */}
Estratégia + Sistemas + IA
para transformar operação em resultado real.
{/* CTA */}
Agendar conversa
Cena 10 — Posicionamento
); } Object.assign(window, { Scene6, Scene7, Scene8, Scene9, Scene10 });