// Base do kit papel-recortado (v2): papel de verdade. Cores de papel craft, fontes, o passo em "dois" // (stop-motion: o movimento muda a cada 2 quadros) e as curvas. Todo número visual sai daqui. import {continueRender, delayRender} from 'remotion'; import fredoka from './fontes/fredoka-700.woff2'; import nunito from './fontes/nunito-700.woff2'; export const LARGURA = 1080, ALTURA = 1920, FPS = 30; export const SEGURA = {topo: 168, base: 1330, lado: 88}; // ---------- cor: 5 papéis + tinta (ver regras/cor.md) ---------- export const COR = { creme: '#F1E4CB', kraft: '#C9996A', terracota: '#D4623C', petroleo: '#1F5E5B', mostarda: '#E2A73A', tinta: '#2B2320', }; export type NomeCor = keyof typeof COR; export const cor = (c: string) => (COR as Record)[c] ?? c; // ---------- fonte ---------- export const FONTE = '"PR Fredoka", system-ui, sans-serif'; export const TEXTO = '"PR Nunito", system-ui, sans-serif'; if (typeof document !== 'undefined' && !(globalThis as Record).__k_papel2) { (globalThis as Record).__k_papel2 = true; const h = delayRender('papel-recortado: fontes'); Promise.all([['PR Fredoka', fredoka, '700'], ['PR Nunito', nunito, '700']].map(([nome, url, peso]) => new FontFace(nome, `url(${url}) format('woff2')`, {weight: peso, style: 'normal'}).load().then((ff) => {document.fonts.add(ff);}).catch(() => undefined))) .then(() => continueRender(h)); } // ---------- tempo ---------- /** stop-motion em "dois": o quadro de animação só muda a cada 2 quadros */ export const PASSO = 2; export const q = (f: number) => Math.floor(f / PASSO) * PASSO; export const c01 = (t: number) => Math.max(0, Math.min(1, t)); export const seg = (f: number, a: number, b: number) => (b <= a ? (f >= b ? 1 : 0) : c01((f - a) / (b - a))); export const lerp = (a: number, b: number, t: number) => a + (b - a) * t; export const e5 = (t: number) => 1 - Math.pow(1 - c01(t), 5); /** pousa passando ~12% e volta (o papel "assenta") */ export const mola = (t: number, s = 2.2) => {const x = c01(t) - 1; return x * x * ((s + 1) * x + s) + 1;}; /** balanço amortecido (etiqueta pendurada): ângulo em graus */ export const balanco = (f: number, amp = 14, periodo = 22, amort = 18) => f < 0 ? 0 : amp * Math.cos((f / periodo) * Math.PI * 2) * Math.exp(-f / amort); export const ruido = (n: number) => {const x = Math.sin(n * 127.1 + 311.7) * 43758.5453; return x - Math.floor(x);}; /** batida da trilha (104 bpm) em quadros */ export const BATIDA = 17.3; /** filtros de papel (ids do kit, ver Filtros.tsx) */ export const PAPEL = 'url(#pr2-papel)'; export const PAPEL_ALTO = 'url(#pr2-papel-alto)';