/**
 * Shared TTS component styles (x-tts.obs-sources, x-tts.ai-roles, x-tts.voice-select).
 * Loaded by every page that renders them: /voice, Studio, OBS overlays dashboard.
 * Theme-neutral: colours come from the host page (currentColor / Bootstrap vars).
 */
.tts-obs-sources { display: grid; gap: .75rem; }
.tts-obs-source { min-width: 0; }
.tts-obs-source-head { display: flex; align-items: center; gap: .5rem; }
.tts-obs-source-head i { opacity: .85; }
.tts-obs-source.is-locked { opacity: .7; }
.tts-obs-sources .input-group .form-control { font-size: .78rem; }
.tts-obs-sources.is-compact { gap: .5rem; }
.tts-obs-sources.is-compact .tts-obs-source-head { font-size: .9rem; }
@media (min-width: 992px) {
    .tts-obs-sources:not(.is-compact) { grid-template-columns: repeat(auto-fit, minmax(18rem, 1fr)); }
}

.tts-ai-role { transition: border-color .15s ease, box-shadow .15s ease; }
.tts-ai-role.is-on { border-color: rgba(46, 214, 130, .55) !important; box-shadow: 0 0 0 1px rgba(46, 214, 130, .25); }
.tts-ai-role textarea { resize: vertical; }
