import { useMemo } from "react"; export type VoicePhase = "listening" | "thinking" | "speaking"; const PHASE_PALETTE: Record< VoicePhase, { primary: string; secondary: string; accent: string; glow: string } > = { listening: { primary: "rgba(6,182,212,0.55)", secondary: "rgba(14,165,233,0.35)", accent: "rgba(34,211,238,0.22)", glow: "voice-bloom-cyan", }, speaking: { primary: "rgba(16,185,129,0.58)", secondary: "rgba(52,211,153,0.38)", accent: "rgba(110,231,183,0.24)", glow: "voice-bloom-emerald", }, thinking: { primary: "rgba(139,92,246,0.52)", secondary: "rgba(167,139,250,0.34)", accent: "rgba(196,181,253,0.22)", glow: "voice-bloom-violet", }, }; const ACCENT_TINT: Record = { cyan: "rgba(6,182,212,0.42)", emerald: "rgba(16,185,129,0.42)", violet: "rgba(139,92,246,0.42)", amber: "rgba(245,158,11,0.38)", rose: "rgba(244,63,94,0.36)", }; export function VoiceCanvas({ phase, energy = 0, reducedMotion = false, personaAccent, }: { phase: VoicePhase; energy?: number; reducedMotion?: boolean; personaAccent?: keyof typeof ACCENT_TINT; }) { const palette = PHASE_PALETTE[phase]; const personaTint = personaAccent ? ACCENT_TINT[personaAccent] : null; const bloomScale = useMemo(() => 1 + energy * 0.28, [energy]); const ringOpacity = useMemo(() => 0.35 + energy * 0.45, [energy]); return (
{/* Deep field */}
{/* Dual-mind bloom orbs */}
{/* Liquid glass rings */}
{/* Fine grain for depth */}
{/* Horizon line */}
); }