// Scenes 1-5 for Yohann Escher hero motion. // ── SCENE 1: Intention dot + emerging modules (0 - 3.5s) ────────────────── function Scene1() { const { localTime } = useSprite(); const cx = 960, cy = 500; // First 1.5s: just the dot. Then modules appear. const modules = [ { label: 'Ideia', icon: Icons.spark, angle: -90, dist: 220, delay: 1.6 }, { label: 'Produto', icon: Icons.bolt, angle: -30, dist: 240, delay: 1.8 }, { label: 'Cliente', icon: Icons.user, angle: 30, dist: 230, delay: 2.0 }, { label: 'Conteúdo', icon: Icons.doc, angle: 90, dist: 220, delay: 2.2 }, { label: 'Venda', icon: Icons.chart, angle: 150, dist: 240, delay: 2.4 }, { label: 'Atendimento', icon: Icons.msg, angle: 210, dist: 230, delay: 2.6 }, ]; return ( {modules.map((m, i) => { const rad = m.angle * Math.PI / 180; const x = cx + Math.cos(rad) * m.dist; const y = cy + Math.sin(rad) * m.dist; return ( ); })} Cena 01 — Intenção Todo crescimento começa com uma intenção. ); } // ── SCENE 2: Fragmentation (3.5 - 7s) ───────────────────────────────────── function Scene2() { const { localTime } = useSprite(); const t = useTime(); // 12 modules scattered with broken connections const mods = [ { label: 'Posts', icon: Icons.doc, x: 280, y: 320, delay: 0.0 }, { label: 'Tráfego', icon: Icons.chart, x: 520, y: 220, delay: 0.1 }, { label: 'WhatsApp', icon: Icons.msg, x: 780, y: 280, delay: 0.2 }, { label: 'CRM', icon: Icons.user, x: 1100, y: 220, delay: 0.3 }, { label: 'Planilhas', icon: Icons.doc, x: 1380, y: 300, delay: 0.4 }, { label: 'Reuniões', icon: Icons.cal, x: 1640, y: 380, delay: 0.5 }, { label: 'Leads', icon: Icons.user, x: 320, y: 560, delay: 0.6 }, { label: 'Follow-up', icon: Icons.msg, x: 620, y: 660, delay: 0.7 }, { label: 'Analytics', icon: Icons.chart, x: 940, y: 720, delay: 0.8 }, { label: 'Campanhas', icon: Icons.bolt, x: 1240, y: 660, delay: 0.9 }, { label: 'E-mails', icon: Icons.msg, x: 1540, y: 580, delay: 1.0 }, { label: 'Tarefas', icon: Icons.cog, x: 1700, y: 720, delay: 1.1 }, ]; // Broken connections between random pairs const broken = [ [0, 1], [1, 2], [2, 3], [3, 4], [4, 5], [6, 7], [7, 8], [8, 9], [9, 10], [10, 11], [0, 6], [3, 9], [5, 11], [1, 7], ]; // micro-text errors const microTexts = [ { text: 'lead perdido', x: 410, y: 615, delay: 1.6 }, { text: 'follow-up atrasado', x: 760, y: 715, delay: 1.9 }, { text: 'dados espalhados', x: 1340, y: 705, delay: 2.2 }, { text: 'campanha sem leitura', x: 1480, y: 230, delay: 2.5 }, ]; return ( {broken.map(([a, b], i) => ( ))} {mods.map((m, i) => ( ))} {microTexts.map((mt, i) => { const localT = localTime - mt.delay; if (localT < 0 || localT > 1.4) return null; const fade = Math.sin(localT * Math.PI / 1.4); return (
{mt.text}
); })} Cena 02 — Fragmentação Depois, tudo vira peça solta.
); } // ── SCENE 3: The real problem (7 - 10s) ─────────────────────────────────── function Scene3() { const { localTime } = useSprite(); // Reuse mods from scene 2 but frozen + dimmed const mods = [ { label: 'Posts', icon: Icons.doc, x: 280, y: 320 }, { label: 'Tráfego', icon: Icons.chart, x: 520, y: 220 }, { label: 'WhatsApp', icon: Icons.msg, x: 780, y: 280 }, { label: 'CRM', icon: Icons.user, x: 1100, y: 220 }, { label: 'Planilhas', icon: Icons.doc, x: 1380, y: 300 }, { label: 'Reuniões', icon: Icons.cal, x: 1640, y: 380 }, { label: 'Leads', icon: Icons.user, x: 320, y: 560 }, { label: 'Follow-up', icon: Icons.msg, x: 620, y: 660 }, { label: 'Analytics', icon: Icons.chart, x: 940, y: 720 }, { label: 'Campanhas', icon: Icons.bolt, x: 1240, y: 660 }, { label: 'E-mails', icon: Icons.msg, x: 1540, y: 580 }, { label: 'Tarefas', icon: Icons.cog, x: 1700, y: 720 }, ]; const phase1 = clamp(localTime / 0.6, 0, 1); // dim const phase2 = clamp((localTime - 0.5) / 0.6, 0, 1); // first headline const phase3 = clamp((localTime - 1.7) / 0.7, 0, 1); // swap to "estrutura" // dark veil const veil = phase1 * 0.55; return ( {mods.map((m, i) => ( ))}
{/* central headline */}
O problema não é falta de ferramenta.
{phase3 > 0 && (
É falta de{' '} estrutura.
)}
{phase3 > 0.3 && } Cena 03 — O diagnóstico ); } // ── SCENE 4: Strategy enters (10 - 13.5s) ───────────────────────────────── function Scene4() { const { localTime } = useSprite(); const cx = 960, cy = 500; const groups = { marketing: { x: 380, y: 320, label: 'Marketing', items: [{ l: 'Conteúdo', i: Icons.doc }, { l: 'Posts', i: Icons.doc }, { l: 'Landing', i: Icons.globe }, { l: 'Campanhas', i: Icons.bolt }] }, comercial: { x: 1540, y: 320, label: 'Comercial', items: [{ l: 'Leads', i: Icons.user }, { l: 'CRM', i: Icons.user }, { l: 'Follow-up', i: Icons.msg }, { l: 'Propostas', i: Icons.doc }] }, operacao: { x: 380, y: 720, label: 'Operação', items: [{ l: 'Atendimento', i: Icons.msg }, { l: 'Tarefas', i: Icons.cog }, { l: 'Processos', i: Icons.flow }, { l: 'Agenda', i: Icons.cal }] }, inteligencia: { x: 1540, y: 720, label: 'Inteligência', items: [{ l: 'Dados', i: Icons.chart }, { l: 'Analytics', i: Icons.chart }, { l: 'IA', i: Icons.spark }, { l: 'Relatórios', i: Icons.doc }] }, }; // Strategy card appears at 0 const stratEnter = Easing.easeOutBack(clamp(localTime / 0.6, 0, 1)); return ( {/* Lines from center to each group */} {Object.entries(groups).map(([key, g], i) => ( ))} {/* Group cluster cards */} {Object.entries(groups).map(([key, g], gi) => ( ))} {/* Central Strategy card */}
EIXO
Estratégia
Cena 04 — Direção Estratégia transforma peças em direção.
); } function GroupCluster({ cx, cy, label, items, delay = 0 }) { const { localTime } = useSprite(); const localT = Math.max(0, localTime - delay); const enter = Easing.easeOutCubic(clamp(localT / 0.5, 0, 1)); const t = useTime(); return (
{label}
{items.map((it, i) => { const itDelay = delay + 0.2 + i * 0.05; const itT = Math.max(0, localTime - itDelay); const itEnter = Easing.easeOutCubic(clamp(itT / 0.4, 0, 1)); return (
{it.i} {it.l}
); })}
); } // ── SCENE 5: System born / Dashboard pillars (13.5 - 17s) ───────────────── function Scene5() { const { localTime } = useSprite(); const cx = 960; const enter = Easing.easeOutCubic(clamp(localTime / 0.7, 0, 1)); const pillars = [ { label: 'Marketing Inteligente', desc: 'Conteúdo + funil + dados', icon: Icons.bolt, accent: '+34%' }, { label: 'Automação', desc: 'Fluxos sem fricção', icon: Icons.flow, accent: '24/7' }, { label: 'IA Aplicada', desc: 'Decisão amplificada', icon: Icons.spark, accent: 'live' }, { label: 'Dados & Decisão', desc: 'Da planilha à clareza', icon: Icons.chart, accent: '3.2x' }, ]; return ( {/* Main panel */}
{/* Header */}
{Icons.star}
SISTEMA
Sistema de Crescimento
Operando
{/* 4 pillars */}
{pillars.map((p, i) => { const pDelay = 0.5 + i * 0.12; const pT = Math.max(0, localTime - pDelay); const pEnter = Easing.easeOutCubic(clamp(pT / 0.5, 0, 1)); return (
{p.icon}
{p.accent}
{p.label}
{p.desc}
{/* mini sparkline */}
); })}
Cena 05 — Sistema Quando tudo se conecta, o negócio opera com inteligência. ); } function pillarSparkline(seed, t) { const pts = []; const n = 12; for (let i = 0; i < n; i++) { const x = (i / (n - 1)) * 200; const phase = seed * 1.7 + i * 0.5; const noise = Math.sin(phase + t * 0.4) * 4; const trend = 28 - i * (1.6 + seed * 0.2); const y = clamp(trend + noise, 4, 28); pts.push(`${i === 0 ? 'M' : 'L'} ${x.toFixed(1)} ${y.toFixed(1)}`); } return pts.join(' '); } Object.assign(window, { Scene1, Scene2, Scene3, Scene4, Scene5 });