- getVozES() prefiere voces locales (offline) sobre Microsoft Online que fallan silenciosamente sin internet o con latencia - cancel() antes de speak() para limpiar cola atascada - keepalive sin check !speaking, cada 10s - sonidoActivo persiste en localStorage; banner rojo si no activado - AudioContext se resume si suspended antes de reproducir Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>