agent-zero/plugins/_whisper_stt/webui/whisper-stt.css
Alessandro 675afa8dee
Some checks are pending
Build And Publish Docker Images / plan (push) Waiting to run
Build And Publish Docker Images / build (push) Blocked by required conditions
Refactor speech stack into built-in Kokoro TTS and Whisper STT plugins
Split the legacy core speech stack into two built-in, independently toggleable plugins: `_kokoro_tts` for TTS and `_whisper_stt` for STT.

This refactor keeps dependency installation and bootstrap concerns in Docker/bootstrap/preload, while moving speech-specific tooling, APIs, prompts, UI, and runtime behavior into the plugins. Core now exposes engine-agnostic `tts-service` and `stt-service` brokers, with browser-native TTS preserved as the fallback when Kokoro is disabled.

Included in this change:
- add built-in `_kokoro_tts` plugin with plugin-owned synth API, config, status UI, and provider registration
- add built-in `_whisper_stt` plugin with plugin-owned transcribe API, mic runtime, device UI, prompt injection, and provider registration
- remove legacy core speech APIs/helpers/settings/UI and delete unused `webui/js/speech_browser.js`
- replace the old hardcoded speech settings section with a generic voice surface backed by plugin extensions
- update preload/docs/tests to match the new plugin-owned speech architecture

Behavioral intent:
- both plugins are built-in but not `always_enabled`
- users can now hot-switch TTS and STT independently
- browser TTS remains available when `_kokoro_tts` is off
- Whisper mic UI only appears when `_whisper_stt` is enabled
2026-05-21 05:41:59 +02:00

66 lines
1.3 KiB
CSS

#microphone-button {
color: var(--color-background);
transition:
background-color 0.2s ease,
box-shadow 0.12s ease-in-out,
filter 0.12s ease-in-out,
opacity 0.12s ease-in-out;
}
#microphone-button.mic-disabled {
background-color: #5f6368;
cursor: not-allowed;
opacity: 0.58;
}
#microphone-button.mic-inactive {
background-color: grey;
}
#microphone-button.mic-activating {
background-color: silver;
animation: whisper-stt-mic-pulse 0.8s infinite;
}
#microphone-button.mic-listening {
background-color: red;
}
#microphone-button.mic-recording {
background-color: green;
}
#microphone-button.mic-waiting {
background-color: teal;
}
#microphone-button.mic-processing {
background-color: darkcyan;
animation: whisper-stt-mic-pulse 0.8s infinite;
transform-origin: center;
}
@media (hover: hover) {
#microphone-button:not(.mic-disabled):hover {
filter: brightness(1.08);
box-shadow: 0 0 0 1px rgba(255, 255, 255, 0.08),
0 6px 14px rgba(0, 0, 0, 0.18);
}
}
#microphone-button:not(.mic-disabled):active {
filter: brightness(0.92);
box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.12);
}
@keyframes whisper-stt-mic-pulse {
0% {
transform: scale(1);
}
50% {
transform: scale(1.1);
}
100% {
transform: scale(1);
}
}