// argila: helpers do kit (não são elementos do plano). Clareia/escurece uma cor e monta o "sólido de massinha": gradiente radial com brilho, // sombra interna dos dois lados e sombra projetada na mesa. Também a curva de pulo com achatamento (squash & stretch). export const tom = (hex: string, k: number) => { const n = parseInt(hex.slice(1), 16); const c = (v: number) => Math.max(0, Math.min(255, Math.round(k >= 0 ? v + (255 - v) * k : v * (1 + k)))); return `rgb(${c((n >> 16) & 255)}, ${c((n >> 8) & 255)}, ${c(n & 255)})`; }; export const argila = (cor: string, sombra = 24): React.CSSProperties => ({ background: `radial-gradient(circle at 30% 24%, ${tom(cor, 0.45)} 0%, ${cor} 42%, ${tom(cor, -0.28)} 100%)`, boxShadow: `inset -10px -16px 24px ${tom(cor, -0.35)}, inset 10px 12px 18px ${tom(cor, 0.4)}, 0 ${sombra}px ${sombra * 1.2}px rgba(20,60,60,0.28)`, }); /** pulo periódico: devolve {y: altura em px (0 = chão), sx, sy: achatamento} para o quadro f, período p quadros e altura h */ export const pulo = (f: number, p: number, h: number) => { const t = (((f % p) + p) % p) / p; const alt = 4 * t * (1 - t) * h; const solo = Math.min(t, 1 - t); const amassa = solo < 0.1 ? (1 - solo / 0.1) * 0.28 : 0; const estica = alt > h * 0.4 ? 0.08 : 0; return {y: alt, sx: 1 + amassa * 0.8 - estica * 0.4, sy: 1 - amassa + estica}; }; import type React from 'react';