// TituloNeon: título Orbitron 900 inclinado −8° em duas camadas: atrás o brilho (magenta, `0 0 16px` e `0 0 44px`) e uma sombra // ciano a −4 px; na frente o degradê `#FFD23F → #FF2A6D` com contorno branco de 2 px. Entra de −900 px com sobra, scale 1,3 → 1 // e pisca 3 vezes nos 6 primeiros quadros. import React from 'react'; import {useCurrentFrame} from 'remotion'; import {COR, FONTE, LARGURA_UTIL, SEGURA, caber, eb} from '../base'; export type TituloNeonProps = {linhas: string[]; inicio?: number; intervalo?: number; y?: number; tamanho?: number; fim?: number}; export const TituloNeon: React.FC = ({linhas, inicio = 0, intervalo = 9, y = 680, tamanho = 200, fim}) => { const f = useCurrentFrame(); if (fim !== undefined && f >= fim) return null; const txt = linhas.map((l) => l.toUpperCase()); const tam = Math.min(...txt.map((l) => caber(l, tamanho, LARGURA_UTIL - 40, 900, 0.02))); const alt = tam * 1.2; const topo = y - (txt.length * alt) / 2; return
{txt.map((l, i) => { const t = f - (inicio + i * intervalo); if (t < 0) return null; const p = eb(t / 16, 1.7); const pisca = t < 6 && [1, 3, 5].includes(t) ? 0.15 : 1; const base: React.CSSProperties = {position: 'absolute', left: SEGURA.lado, width: LARGURA_UTIL, top: topo + i * alt, height: alt, lineHeight: `${alt}px`, textAlign: 'center', fontFamily: FONTE.titulo, fontWeight: 900, fontSize: tam, letterSpacing: '0.02em', whiteSpace: 'nowrap'}; return
{l}
{l}
; })}
; };