import { cn } from "@/lib/utils"; export type GlobalMicState = "idle" | "listening" | "speaking"; interface GlobalMicButtonProps { state?: GlobalMicState; /** * Phase 14 will wire this to the voice pipeline. In Phase 8 it's a no-op * by default; callers can override for manual testing. */ onClick?: () => void; } /** * GlobalMicButton — Phase 8 visual-only mic button for the top strip. * * Per docs/specs/2026-04-11-nexus-layout-overhaul.md §4.2, three states are * specified: * - idle: forest-green dot, no animation * - listening: volt fill, 1.5s pulse loop + expanding volt ring * - speaking: silver fill, no pulse * * Phase 8 renders all three but only `idle` is wired up functionally. The * listening / speaking visuals are scaffolded so Phase 14 can toggle the * state prop without changing this component's signature. * * Literal hex `#166534` (forest) and `#a0a0a0` (silver) are used because * MIGRATION-PLAN.md §3 proposes these as new CSS variables but has not yet * shipped them. Volt uses the `text-primary`/`bg-primary` semantic token. */ export function GlobalMicButton({ state = "idle", onClick }: GlobalMicButtonProps) { return ( ); }