// Act 3 — AI learning differentiator (20–32s) function Act3AI() { return ( ); } function Act3Inner() { const { localTime: t } = useSprite(); return (
{/* Multi-idioma chip — 2s breve, no persistente, no revela método */} {t < 2.0 && (
1.7 ? Easing.easeInCubic(clamp((2.0 - t) / 0.3, 0, 1)) : 1 }}> 🌐 español · català · english
)} {/* Title */} {t < 1.0 && } {/* Phase 1: Learning curve (1.0–4.0s) */} {t >= 1.0 && t < 4.0 && } {/* Phase 2: Hook A/B (4.0–6.5s) */} {t >= 4.0 && t < 6.5 && } {/* Phase 3: PRO+ Entrena tu IA (6.5–11.5s, 5s para leer 3 traits) */} {t >= 6.5 && t < 11.5 && }
); } function Act3Title({ t }) { if (t > 1.4) return null; const opacity = t < 0.3 ? t / 0.3 : t > 1.0 ? Math.max(0, (1.4 - t) / 0.4) : 1; return (
diferenciador · IA personalizada
); } function LearningCurve({ t }) { const opacity = t < 0.3 ? t / 0.3 : t > 3.0 ? Math.max(0, (3.5 - t) / 0.5) : 1; const points = 30; // Faster drawing: complete by t=2.0 (was 3.5) so the curve doesn't drag. const drawProgress = Math.min(1, t / 2.0); // Generate learning curve (rising with noise) const xs = Array.from({ length: points }, (_, i) => 80 + (i / (points - 1)) * 940); const ys = Array.from({ length: points }, (_, i) => { const x = i / (points - 1); const y = 220 - Math.pow(x, 0.5) * 160 + (Math.sin(i * 1.7) * 8); return y; }); // Continuous draw: full integer segments + a partial last segment so the // line grows pixel-by-pixel instead of jumping point-to-point. const totalSeg = points - 1; const segF = drawProgress * totalSeg; const fullSeg = Math.floor(segF); const frac = segF - fullSeg; let path = ''; let headX = xs[0]; let headY = ys[0]; if (fullSeg < 1 && frac > 0) { // Just starting — only a partial first segment. headX = xs[0] + (xs[1] - xs[0]) * frac; headY = ys[0] + (ys[1] - ys[0]) * frac; path = `M${xs[0]} ${ys[0]} L${headX} ${headY}`; } else { for (let i = 0; i <= fullSeg; i++) { path += (i === 0 ? 'M' : 'L') + xs[i] + ' ' + ys[i] + ' '; headX = xs[i]; headY = ys[i]; } if (fullSeg < totalSeg && frac > 0) { const nx = xs[fullSeg] + (xs[fullSeg + 1] - xs[fullSeg]) * frac; const ny = ys[fullSeg] + (ys[fullSeg + 1] - ys[fullSeg]) * frac; path += `L${nx} ${ny}`; headX = nx; headY = ny; } } // Sin claim cuantitativo: la curva muestra mejora cualitativa, sin números. return (
Curva de aprendizaje
Cada clip que publicas, la IA mejora.
{/* Grid */} {[0, 1, 2, 3, 4].map(i => ( ))} {/* Fill area */} {drawProgress > 0.02 && ( )} {/* Curve */} {/* Active point */} {drawProgress > 0.02 && ( )} {/* Y axis label — cualitativo, sin múltiplos numéricos */} engagement primer clip tras meses publicando
); } function HookAB({ t }) { const opacity = t < 0.3 ? t / 0.3 : t > 2.5 ? Math.max(0, (3.0 - t) / 0.5) : 1; const showV2 = t > 1.0; const showResult = t > 2.5; return (
hooks · qué titular gana
{showV2 && ( )}
{showResult && (
💡 Y lo replica automáticamente.
)}
); } function HookRow({ version, text, barW, status, visible }) { const isWinner = status === 'winner'; return (
{version}
"{text}"
{/* Barra relativa — sin claim numérico absoluto */}
{isWinner ? '✅' : '❌'}
); } // ── Phase 4 · PRO — Entrena tu IA ──────────────────────────────────────────── // Dedica un momento a la propuesta de valor PRO: una IA que conoce tu canal // (bromas, audiencia, forma de hablar, qué triunfa). function TrainYourAI({ t }) { const opacity = t < 0.4 ? t / 0.4 : t > 4.3 ? Math.max(0, (4.8 - t) / 0.5) : 1; // Pulsar PRO badge const proPulse = 0.85 + Math.sin(t * 3) * 0.15; const traits = [ { tag: '01', icon: '🎙️', label: 'Tu voz', desc: 'humor, ritmo, muletillas' }, { tag: '02', icon: '👥', label: 'Tu audiencia', desc: 'qué responden tus fans' }, { tag: '03', icon: '🚀', label: 'Lo que triunfa', desc: 'replica los hooks que ganan' }, ]; return (
{/* PRO seal */}
exclusivo plan PRO+
{/* Headline */}
Una IA que conoce tu canal.
Entrenada únicamente con tus vídeos, tus clips ganadores y la reacción real de tu audiencia.
{/* Trait grid */}
{traits.map((tr, i) => { const delay = 0.3 + i * 0.22; const local = t - delay; const ease = Easing.easeOutBack(clamp(local * 3, 0, 1)); return (
{tr.icon}
{tr.tag}
{tr.label}
{tr.desc}
); })}
); } function ProSealBolt() { return ( ); } window.Act3AI = Act3AI;